{"version":3,"sources":["webpack:///./node_modules/chart.js/dist/chart.esm.js"],"names":["ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","getOwnPropertyDescriptors","defineProperties","defineProperty","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Date","prototype","toString","call","e","_isNativeReflectConstruct","result","Super","NewTarget","this","constructor","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","minLen","_arrayLikeToArray","n","slice","name","from","test","_unsupportedIterableToArray","F","s","done","value","_e","f","TypeError","err","normalCompletion","didErr","step","next","_e2","return","arr","len","arr2","animator","Animator","_request","_charts","Map","_running","_lastDate","undefined","chart","anims","date","type","callbacks","listeners","numSteps","duration","fn","initial","currentStep","Math","min","start","me","window","_update","_refresh","now","remaining","running","items","item","draw","_active","_total","tick","pop","_notify","charts","get","complete","progress","set","event","cb","_getAnims","_this$_getAnims$items","reduce","acc","cur","max","_duration","cancel","delete","interpolators","boolean","to","factor","color","c0","c1","valid","mix","hexString","number","Animation","cfg","prop","currentValue","_fn","_easing","easing","linear","_start","floor","delay","_loop","loop","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","res","rej","resolved","method","animationOptions","animation","describe","_fallback","_indexable","_scriptable","colors","properties","numbers","active","resize","show","animations","visible","hide","v","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","_step","_iterator","option","has","values","newOptions","options","$shared","assign","$animations","resolveTargetOptions","_createAnimations","anim","wait","all","awaitAll","then","props","charAt","update","_animateOptions","size","add","scaleClip","scale","allowedOverflow","opts","reverse","end","getSortedDatasetIndices","filterVisible","ilen","metasets","_getSortedDatasetMetas","index","_applyStack","stack","dsIndex","datasetIndex","otherValue","singleMode","mode","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","_step2","_iterator2","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","concat","id","getStackKey","_top","_bottom","getFirstScaleId","scales","shift","clearStacks","_step3","_iterator3","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","initialize","linkScales","_stacked","addElements","dataset","getDataset","chooseId","x","y","r","xid","xAxisID","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","data","datasets","getDatasetMeta","scaleID","adata","convertObjectDataToArray","isExtensible","_dataCheck","datasetElementType","resetNewElements","stackChanged","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","count","sorted","_sorted","prev","parseArrayData","parseObjectData","parsePrimitiveData","labels","getLabels","singleScale","_parsed$i","parse","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","range","parsedValue","NaN","canStack","otherScale","_getOtherScale","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","getUserBounds","minDefined","maxDefined","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","label","getLabelForValue","t","b","l","_clip","clip","top","right","bottom","left","defaultClip","getMaxOverflow","elements","area","chartArea","element","resolveDatasetElementOptions","resolveDataElementOptions","context","parent","create","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","cache","cacheKey","sharing","datasetElementScopeKeys","prefixes","names","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","_cacheable","sharedOptions","_animationsDisabled","_resolveAnimations","getStyle","getSharedOptions","_setStyle","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","splice","computeMinSampleSize","curr","_cache","$bar","metas","getAllParsedValues","sort","a","getAllScaleValues","_length","updateMinAndPrev","abs","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","defaults","BarController","_DatasetController","_super","obj","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","bars","reset","base","getBasePixel","horizontal","isHorizontal","ruler","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","enableBorderRadius","center","height","width","updateElement","last","val","isNaN","indexOf","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","grouped","ratio","categoryPercentage","barPercentage","_me$_cachedMeta","_me$options","baseValue","minBarLength","floating","applyStack","getDataVisibility","actualBase","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","rects","overrides","interaction","_index_","offset","grid","_value_","beginAtZero","BubbleController","_DatasetController2","_super2","_this$_parsing3","_this$_parsing3$xAxis","_this$_parsing3$yAxis","_this$_cachedMeta","points","_me$_cachedMeta2","point","getPixelForDecimal","skip","radius","plugins","tooltip","title","DoughnutController","_DatasetController3","_super3","_this","innerRadius","outerRadius","offsetX","offsetY","rotation","circumference","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_me$_getRotationExten","_getRotationExtents","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","startX","cos","startY","sin","endX","endY","calcMax","angle","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxWidth","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","arc","metaData","locale","borderAlign","borderWidth","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","aspectRatio","legend","generateLabels","map","style","text","fillStyle","backgroundColor","strokeStyle","borderColor","lineWidth","hidden","onClick","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_DatasetController4","_super4","line","_meta$data","_dataset","animationsDisabled","_getStartAndCountOfVi","pointCount","_iScale$getUserBounds","lo","hi","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_decimated","showLine","segment","animated","_me$_cachedMeta3","spanGaps","maxGapLength","directUpdate","prevParsed","nullData","stop","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","_DatasetController5","_super5","_this2","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_this3","angleLines","display","circular","pointLabels","PieController","_DoughnutController","_super6","RadarController","_DatasetController6","_super7","_fullLoop","pointPosition","getPointPositionForValue","fill","ScatterController","_LineController","_super8","controllers","__proto__","abstract","Error","DateAdapter","format","timestamp","_format","amount","unit","weekday","override","members","adapters","_date","getRelativePosition","binarySearch","metaset","intersect","lookupMethod","_reversePixels","el","getRange","optimizedEvaluateItems","position","handler","getSortedVisibleDatasetMetas","_metasets$i2","_binarySearch","j","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","pt1","pt2","deltaX","deltaY","sqrt","pow","getDistanceMetricForAxis","minDistance","getCenterPoint","distance","getAxisItems","rangeMethod","intersectsItem","_metasets$i","jlen","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","array","pos","filterDynamicPositionByAxis","box","sortByWeight","v0","v1","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","params","layout","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","w","heightChanged","h","same","other","getMargins","marginForPositions","positions","margin","fitBoxes","boxes","refit","refitBoxes","_updateDims","fullSize","placeBoxes","userPadding","padding","layouts","_layers","z","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","wrap","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","setLayoutDims","updatePos","change","handleMaxPadding","BasePlatform","canvas","listener","BasicPlatform","_BasePlatform","_super9","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","removeEventListener","createAttachObserver","observer","MutationObserver","entries","addedNodes","added","observe","document","childList","subtree","createDetachObserver","container","removedNodes","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","currentDevicePixelRatio","createResizeObserver","clientWidth","ResizeObserver","contentRect","addEventListener","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","proxy","_getRelativePosition$","native","fromNativeEvent","args","node","addListener","DomPlatform","_BasePlatform2","_super10","renderHeight","getAttribute","renderWidth","boxSizing","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","Element","_this$getProps","getProps","final","ret","defaultRoutes","formatters","numeric","tickValue","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","round","majorStart","majorEnd","bounds","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","borderDash","borderDashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","callback","minor","align","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","offsetFromEdge","edge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","fallback","font","lineHeight","titleAlign","reverseAlign","Scale","_Element","_super11","_this4","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","_me$getUserBounds","getMinMax","xLabels","yLabels","beforeUpdate","margins","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","_me$options2","titleOpts","gridOpts","titleHeight","_me$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_me$options3","_me$options3$ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","_this$options","generateTickLabels","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","string","gc","gcLen","garbageCollect","valueAt","idx","pixel","decimal","getBaseValue","createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID","_value","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","textAlign","lineCount","textOffset","tickAndPadding","hTickAndPadding","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID2","_value2","halfCount","strokeColor","strokeWidth","backdrop","labelPadding","translation","_me$options4","_me$options5","_me$options5$ticks","save","fillRect","restore","findIndex","_computeGridLineItems","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","stroke","lastLineWidth","_computeLabelArea","_computeLabelItems","_this$options2","_titleArgs","titleX","titleY","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","axisID","fontSize","TypedRegistry","scope","isPrototypeOf","parentScope","proto","getPrototypeOf","isIChartComponent","register","itemDefaults","routes","property","propertyParts","split","sourceName","sourceScope","join","parts","targetName","targetScope","routeDefaults","descriptors","registerDefaults","registry","Registry","_typedRegistries","_len","_key","_each","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_get","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","typedRegistry","arg","reg","_getRegistryForType","isForType","_exec","itemReg","component","camelMethod","PluginService","_init","hook","_createDescriptors","_descriptors","_step4","_iterator4","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","getPlugin","local","_i","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","toLowerCase","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","Set","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","_getResolver","getResolver","resolver","subPrefixes","needContext","subResolver","_step5","_iterator5","descriptorDefaults","_getResolver2","resolverCache","p","includes","_step6","_descriptors2","isScriptable","isIndexable","_iterator6","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","isDomSupported","getCanvas","getElementById","instances","getChart","c","Chart","_this5","initialCanvas","existingChart","chartOptionScopes","platform","_initializePlatform","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","console","error","responsive","bindEvents","OffscreenCanvas","_resizeBeforeDraw","_resize","maintainAspectRatio","newSize","getMaximumSize","oldRatio","newRatio","getDevicePixelRatio","onResize","render","scalesOptions","axisOptions","scaleOpts","updated","isRadial","dposition","dtype","scaleType","getScale","init","hasUpdated","oldIndex","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","order","_updateMetasetIndex","updateIndex","ControllerClass","getController","_defaults$datasets$ty","getElement","_updateMetasets","_resetElements","animsDisabled","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","events","unbindEvents","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_updateLayout","_updateDatasets","_eventHandler","noArea","_me$_layers","_idx","isFunction","_updateDataset","_me$_resizeBeforeDraw","layers","_drawDatasets","_drawDataset","setDatasetVisibility","_updateDatasetVisibility","_destroy","remove","releaseContext","_this$canvas","toDataURL","_add","_remove","detached","isAttached","prefix","activeElements","lastActive","_ref","_updateHoverStyles","notify","replay","hoverOptions","hover","deactivated","activated","updateHoverStyle","_this6","eventFilter","_handleEvent","_me$_active","lastEvent","getElementsAtEventForMode","onHover","_this$options3","invalidatePlugins","clipArc","pixelMargin","angleMargin","closePath","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","_pCenter","PI","_pCenter2","p8","_pCenter3","inner","lineJoin","fullCircles","drawFullCircleBorders","version","unregister","ArcElement","_Element2","_super12","_this7","chartX","chartY","_getAngleFromPoint","_this$getProps2","_this$getProps3","halfAngle","halfRadius","translate","drawArc","setStyle","lineCap","borderCapStyle","borderJoinStyle","previous","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","_pathVars","lineMethod","stepped","tension","cubicInterpolationMode","getLineMethod","_ref2","_ref2$move","fastPathSegment","prevX","lastY","_pathVars2","_ref3","_ref3$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_draw","segments","path","_path","strokePathWithCache","_step7","segmentMethod","_iterator7","strokePathDirect","LineElement","_Element3","_super13","_this8","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","_segments$i","interpolated","_step8","_iterator8","inRange$1","hitRadius","capBezierPoints","PointElement","_Element4","_super14","_this9","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","bar","half","_bar$getProps","parseBorderSkipped","borderSkipped","parseEdge","orig","v2","startEnd","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","parseBorderRadius","outer","_inRange","skipX","skipY","addNormalRectPath","rect","pointStyle","BarElement","_Element5","_super15","_this10","_boundingRects","addRectPath","_this$getProps6","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","_getStartAndCountOfVi2","_iScale$getUserBounds2","getStartAndCountOfVisiblePointsSimplified","decimated","configurable","d","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","endIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","destroy","decodeFill","fillOption","parseFillOption","parseFloat","simpleArc","computeBoundary","computeCircularBoundary","_source$scale","computeLinearBoundary","buildStackLine","sourcePoints","linesBelow","below","isLineAndNotInHideAnimation","unshift","getLinesBelow","createBoundaryLine","addPointsBelow","sourcePoint","postponed","_findPoint","findPoint","interpolate","pointValue","linePoints","firstValue","lastValue","boundary","_ref4","_ref4$x","_ref4$y","pointsFromSegments","resolveTarget","sources","propagate","visited","clipY","getBounds","_getEdge","clipBounds","_scale$chart$chartAre","_ref5","interpolatedLineTo","interpolatedPoint","_fill","_step12","_step9","tpoints","_iterator9","_step10","_iterator10","_step11","tgt","subBounds","_iterator11","fillSource","_iterator12","_step12$value","src","_src$style","_src$style$background","lineLoop","targetLoop","drawfill","getLineByIndex","getTarget","lineOpts","_ref6","_ref6$above","above","_ref6$below","doFill","plugin_filler","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","itemHeight","Legend","_Element6","_super16","_this11","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","heightLimit","totalWidth","currentColWidth","currentColHeight","col","_me$options6","_step13","_iterator13","hitbox","_step14","_iterator14","_hitbox","cursor","defaultColor","rtlHelper","rtl","fontColor","halfFontSize","_getBoxSize2","textDirection","textWidth","setWidth","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","leftForLtr","drawLegendBox","strikethrough","fillText","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","_element","adjustHitBoxes","afterEvent","handleEvent","ci","_chart$legend$options","Title","_Element7","_super17","_this12","_padding","textSize","fontOpts","_me$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","positioners","average","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","str","String","getTooltipSize","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","lines","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","cornerRadius","paddingAndSize","radiusAndPadding","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","_Element8","_super18","_this13","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","_controller$getLabelA","getLabelAndValue","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","pt","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","_ref7","positionChanged","_positionChanged","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","findOrAddLabel","addIfString","lastIndexOf","CategoryScale","_Scale","_super19","_this14","_startValue","_valueRange","isFinite","_me$getUserBounds2","_me$getMinMax","getDecimalForPixel","LinearScaleBase","_Scale2","_super20","_this15","_endValue","_me$options7","_me$getUserBounds3","setMin","setMax","minSign","maxSign","maxTicks","stepSize","computeTickLimit","getTickLimit","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxDigits","maxSpaces","rmin","rmax","countDefined","minSpacing","generateTicks$1","_maxDigits","LinearScale","_LinearScaleBase","_super21","_me$getMinMax2","handleTickRangeOptions","isMajor","tickVal","LogarithmicScale","_Scale3","_super22","_this16","_zero","_me$getMinMax3","_me$getUserBounds4","exp","m","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","getTextAlignForAngle","adjustPointPositionForLabelHeight","pathRadiusLine","getPointPosition","numberOrZero","param","RadialLinearScale","_LinearScaleBase2","_super23","_this17","drawingArea","_pointLabels","_pointLabelItems","_me$getMinMax4","furthestLimits","furthestAngles","valueCount","_opts","plFont","hLimits","vLimits","_setReductions","tickBackdropHeight","outerDistance","extra","pointLabelPosition","_angle","fitWithPointLabels","setCenterPoint","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","angleMultiplier","scalingFactor","scaledDistance","distanceFromCenter","_this$_pointLabelItem","_me$options8","_scale$_pointLabelIte","drawPointLabels","gridLineOpts","drawRadiusLine","rotate","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","_parse","input","adapter","_adapter","_scale$_parseOpts","_parseOpts","parser","isoWeekday","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","addTick","time","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_Scale4","_super24","_this18","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_me$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","limit","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","formatter","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","normalize","table","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_TimeScale","_super25","_this19","_table","_maxIndex","_getTimestampsForTable","buildLookupTable","registerables"],"mappings":"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","file":"36bcf0ca-5b3b8d898ba7209863c8.js","sourcesContent":["import \"core-js/modules/es.array.reduce.js\";\nimport _assertThisInitialized from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _get from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/get\";\nimport _inherits from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _defineProperty from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"/codebuild/output/src4059339766/src/summon-web-04/node_modules/@babel/runtime/helpers/esm/createClass\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n * Chart.js v3.2.1\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as _color, i as isObject, b as isArray, d as defaults, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as isNullOrUndef, k as clipArea, m as unclipArea, _ as _arrayUnique, t as toRadians, n as toPercentage, o as toDimension, T as TAU, p as formatNumber, q as _angleBetween, H as HALF_PI, P as PI, w as isNumber, x as _limitValue, y as _lookupByKey, z as getRelativePosition$1, A as _isPointInArea, B as _rlookupByKey, C as toPadding, D as each, E as _getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as log10, L as _factorize, M as finiteOrDefault, N as callback, O as _addGrace, Q as toDegrees, R as _measureText, S as _int16Range, U as _alignPixel, V as renderText, W as toFont, X as _toLeftRightCenter, Y as _alignStartEnd, Z as overrides, $ as merge, a0 as _capitalize, a1 as descriptors, a2 as isFunction, a3 as _attachContext, a4 as _createResolver, a5 as _descriptors, a6 as mergeIf, a7 as uid, a8 as debounce, a9 as retinaScale, aa as clearCanvas, ab as setsEqual, ac as _elementsEqual, ad as getAngleFromPoint, ae as _readValueToProps, af as _updateBezierControlPoints, ag as _computeSegments, ah as _boundSegments, ai as _steppedInterpolation, aj as _bezierInterpolation, ak as _pointInLine, al as _steppedLineTo, am as _bezierCurveTo, an as drawPoint, ao as addRoundedRectPath, ap as toTRBL, aq as toTRBLCorners, ar as _boundSegment, as as _normalizeAngle, at as getRtlAdapter, au as overrideTextDirection, av as _textX, aw as restoreTextDirection, ax as noop, ay as distanceBetweenPoints, az as _setMinAndMaxByKey, aA as niceNum, aB as almostWhole, aC as almostEquals, aD as _decimalPlaces, aE as _longestText, aF as _filterBetween, aG as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nvar Animator = /*#__PURE__*/function () {\n function Animator() {\n _classCallCheck(this, Animator);\n\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n _createClass(Animator, [{\n key: \"_notify\",\n value: function _notify(chart, anims, date, type) {\n var callbacks = anims.listeners[type];\n var numSteps = anims.duration;\n callbacks.forEach(function (fn) {\n return fn({\n chart: chart,\n initial: anims.initial,\n numSteps: numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n });\n });\n }\n }, {\n key: \"_refresh\",\n value: function _refresh() {\n var me = this;\n\n if (me._request) {\n return;\n }\n\n me._running = true;\n me._request = requestAnimFrame.call(window, function () {\n me._update();\n\n me._request = null;\n\n if (me._running) {\n me._refresh();\n }\n });\n }\n }, {\n key: \"_update\",\n value: function _update() {\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n var me = this;\n var remaining = 0;\n\n me._charts.forEach(function (anims, chart) {\n if (!anims.running || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n var draw = false;\n var item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n\n me._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n\n me._notify(chart, anims, date, 'complete');\n\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n me._lastDate = date;\n\n if (remaining === 0) {\n me._running = false;\n }\n }\n }, {\n key: \"_getAnims\",\n value: function _getAnims(chart) {\n var charts = this._charts;\n var anims = charts.get(chart);\n\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n\n return anims;\n }\n }, {\n key: \"listen\",\n value: function listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n }, {\n key: \"add\",\n value: function add(chart, items) {\n var _this$_getAnims$items;\n\n if (!items || !items.length) {\n return;\n }\n\n (_this$_getAnims$items = this._getAnims(chart).items).push.apply(_this$_getAnims$items, _toConsumableArray(items));\n }\n }, {\n key: \"has\",\n value: function has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n }, {\n key: \"start\",\n value: function start(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims) {\n return;\n }\n\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce(function (acc, cur) {\n return Math.max(acc, cur._duration);\n }, 0);\n\n this._refresh();\n }\n }, {\n key: \"running\",\n value: function running(chart) {\n if (!this._running) {\n return false;\n }\n\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"stop\",\n value: function stop(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n\n anims.items = [];\n\n this._notify(chart, anims, Date.now(), 'complete');\n }\n }, {\n key: \"remove\",\n value: function remove(chart) {\n return this._charts.delete(chart);\n }\n }]);\n\n return Animator;\n}();\n\nvar animator = new Animator();\nvar transparent = 'transparent';\nvar interpolators = {\n boolean: function boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color: function color(from, to, factor) {\n var c0 = _color(from || transparent);\n\n var c1 = c0.valid && _color(to || transparent);\n\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number: function number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nvar Animation = /*#__PURE__*/function () {\n function Animation(cfg, target, prop, to) {\n _classCallCheck(this, Animation);\n\n var currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n var from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n _createClass(Animation, [{\n key: \"active\",\n value: function active() {\n return this._active;\n }\n }, {\n key: \"update\",\n value: function update(cfg, to, date) {\n var me = this;\n\n if (me._active) {\n me._notify(false);\n\n var currentValue = me._target[me._prop];\n var elapsed = date - me._start;\n var remain = me._duration - elapsed;\n me._start = date;\n me._duration = Math.floor(Math.max(remain, cfg.duration));\n me._total += elapsed;\n me._loop = !!cfg.loop;\n me._to = resolve([cfg.to, to, currentValue, cfg.from]);\n me._from = resolve([cfg.from, currentValue, to]);\n }\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n var me = this;\n\n if (me._active) {\n me.tick(Date.now());\n me._active = false;\n\n me._notify(false);\n }\n }\n }, {\n key: \"tick\",\n value: function tick(date) {\n var me = this;\n var elapsed = date - me._start;\n var duration = me._duration;\n var prop = me._prop;\n var from = me._from;\n var loop = me._loop;\n var to = me._to;\n var factor;\n me._active = from !== to && (loop || elapsed < duration);\n\n if (!me._active) {\n me._target[prop] = to;\n\n me._notify(true);\n\n return;\n }\n\n if (elapsed < 0) {\n me._target[prop] = from;\n return;\n }\n\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = me._easing(Math.min(1, Math.max(0, factor)));\n me._target[prop] = me._fn(from, to, factor);\n }\n }, {\n key: \"wait\",\n value: function wait() {\n var promises = this._promises || (this._promises = []);\n return new Promise(function (res, rej) {\n promises.push({\n res: res,\n rej: rej\n });\n });\n }\n }, {\n key: \"_notify\",\n value: function _notify(resolved) {\n var method = resolved ? 'res' : 'rej';\n var promises = this._promises || [];\n\n for (var i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n }]);\n\n return Animation;\n}();\n\nvar numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nvar colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n});\nvar animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: function _scriptable(name) {\n return name !== 'onProgress' && name !== 'onComplete' && name !== 'fn';\n }\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n});\ndefaults.describe('animations', {\n _fallback: 'animation'\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: function fn(v) {\n return v | 0;\n }\n }\n }\n }\n});\n\nvar Animations = /*#__PURE__*/function () {\n function Animations(chart, config) {\n _classCallCheck(this, Animations);\n\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n _createClass(Animations, [{\n key: \"configure\",\n value: function configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n var animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(function (key) {\n var cfg = config[key];\n\n if (!isObject(cfg)) {\n return;\n }\n\n var resolved = {};\n\n var _iterator = _createForOfIteratorHelper(animationOptions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var option = _step.value;\n resolved[option] = cfg[option];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n }, {\n key: \"_animateOptions\",\n value: function _animateOptions(target, values) {\n var newOptions = values.options;\n var options = resolveTargetOptions(target, newOptions);\n\n if (!options) {\n return [];\n }\n\n var animations = this._createAnimations(options, newOptions);\n\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(function () {\n target.options = newOptions;\n }, function () {});\n }\n\n return animations;\n }\n }, {\n key: \"_createAnimations\",\n value: function _createAnimations(target, values) {\n var animatedProps = this._properties;\n var animations = [];\n var running = target.$animations || (target.$animations = {});\n var props = Object.keys(values);\n var date = Date.now();\n var i;\n\n for (i = props.length - 1; i >= 0; --i) {\n var prop = props[i];\n\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));\n continue;\n }\n\n var value = values[prop];\n var animation = running[prop];\n var cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n\n return animations;\n }\n }, {\n key: \"update\",\n value: function update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n\n var animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n }]);\n\n return Animations;\n}();\n\nfunction awaitAll(animations, properties) {\n var running = [];\n var keys = Object.keys(properties);\n\n for (var i = 0; i < keys.length; i++) {\n var anim = animations[keys[i]];\n\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n\n var options = target.options;\n\n if (!options) {\n target.options = newOptions;\n return;\n }\n\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n var opts = scale && scale.options || {};\n var reverse = opts.reverse;\n var min = opts.min === undefined ? allowedOverflow : 0;\n var max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n\n var x = scaleClip(xScale, allowedOverflow);\n var y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n var t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n var keys = [];\n\n var metasets = chart._getSortedDatasetMetas(filterVisible);\n\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n\n return keys;\n}\n\nfunction _applyStack(stack, value, dsIndex, options) {\n var keys = stack.keys;\n var singleMode = options.mode === 'single';\n var i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n\n break;\n }\n\n otherValue = stack.values[datasetIndex];\n\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\n var keys = Object.keys(data);\n var adata = new Array(keys.length);\n var i, ilen, key;\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n var stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return \"\".concat(indexScale.id, \".\").concat(valueScale.id, \".\").concat(meta.stack || meta.type);\n}\n\nfunction getUserBounds(scale) {\n var _scale$getUserBounds = scale.getUserBounds(),\n min = _scale$getUserBounds.min,\n max = _scale$getUserBounds.max,\n minDefined = _scale$getUserBounds.minDefined,\n maxDefined = _scale$getUserBounds.maxDefined;\n\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n var subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive) {\n var _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas('bar').reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var meta = _step2.value;\n var value = stack[meta.index];\n\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n var chart = controller.chart,\n meta = controller._cachedMeta;\n var stacks = chart._stacks || (chart._stacks = {});\n var iScale = meta.iScale,\n vScale = meta.vScale,\n datasetIndex = meta.index;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var key = getStackKey(iScale, vScale, meta);\n var ilen = parsed.length;\n var stack;\n\n for (var i = 0; i < ilen; ++i) {\n var item = parsed[i];\n var index = item[iAxis],\n value = item[vAxis];\n var itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true);\n stack._bottom = getLastIndexInStack(stack, vScale, false);\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n var scales = chart.scales;\n return Object.keys(scales).filter(function (key) {\n return scales[key].axis === axis;\n }).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return Object.assign(Object.create(parent), {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index: index,\n mode: 'default',\n type: 'dataset'\n });\n}\n\nfunction createDataContext(parent, index, element) {\n return Object.assign(Object.create(parent), {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element: element,\n index: index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n items = items || meta._parsed;\n\n var _iterator3 = _createForOfIteratorHelper(items),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var parsed = _step3.value;\n var stacks = parsed._stacks;\n\n if (!stacks || stacks[meta.vScale.id] === undefined || stacks[meta.vScale.id][meta.index] === undefined) {\n return;\n }\n\n delete stacks[meta.vScale.id][meta.index];\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n}\n\nvar isDirectUpdateMode = function isDirectUpdateMode(mode) {\n return mode === 'reset' || mode === 'none';\n};\n\nvar cloneIfNotShared = function cloneIfNotShared(cached, shared) {\n return shared ? cached : Object.assign({}, cached);\n};\n\nvar DatasetController = /*#__PURE__*/function () {\n function DatasetController(chart, datasetIndex) {\n _classCallCheck(this, DatasetController);\n\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this.initialize();\n }\n\n _createClass(DatasetController, [{\n key: \"initialize\",\n value: function initialize() {\n var me = this;\n var meta = me._cachedMeta;\n me.configure();\n me.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n me.addElements();\n }\n }, {\n key: \"updateIndex\",\n value: function updateIndex(datasetIndex) {\n this.index = datasetIndex;\n }\n }, {\n key: \"linkScales\",\n value: function linkScales() {\n var me = this;\n var chart = me.chart;\n var meta = me._cachedMeta;\n var dataset = me.getDataset();\n\n var chooseId = function chooseId(axis, x, y, r) {\n return axis === 'x' ? x : axis === 'r' ? r : y;\n };\n\n var xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n var yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n var rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n var indexAxis = meta.indexAxis;\n var iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n var vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = me.getScaleForId(xid);\n meta.yScale = me.getScaleForId(yid);\n meta.rScale = me.getScaleForId(rid);\n meta.iScale = me.getScaleForId(iid);\n meta.vScale = me.getScaleForId(vid);\n }\n }, {\n key: \"getDataset\",\n value: function getDataset() {\n return this.chart.data.datasets[this.index];\n }\n }, {\n key: \"getMeta\",\n value: function getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n }, {\n key: \"getScaleForId\",\n value: function getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n }, {\n key: \"_getOtherScale\",\n value: function _getOtherScale(scale) {\n var meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._update('reset');\n }\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n var meta = this._cachedMeta;\n\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n }, {\n key: \"_dataCheck\",\n value: function _dataCheck() {\n var me = this;\n var dataset = me.getDataset();\n var data = dataset.data || (dataset.data = []);\n\n if (isObject(data)) {\n me._data = convertObjectDataToArray(data);\n } else if (me._data !== data) {\n if (me._data) {\n unlistenArrayEvents(me._data, me);\n clearStacks(me._cachedMeta);\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, me);\n }\n\n me._data = data;\n }\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var me = this;\n var meta = me._cachedMeta;\n\n me._dataCheck();\n\n if (me.datasetElementType) {\n meta.dataset = new me.datasetElementType();\n }\n }\n }, {\n key: \"buildOrUpdateElements\",\n value: function buildOrUpdateElements(resetNewElements) {\n var me = this;\n var meta = me._cachedMeta;\n var dataset = me.getDataset();\n var stackChanged = false;\n\n me._dataCheck();\n\n meta._stacked = isStacked(meta.vScale, meta);\n\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n me._resyncElements(resetNewElements);\n\n if (stackChanged) {\n updateStacks(me, meta._parsed);\n }\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var config = me.chart.config;\n var scopeKeys = config.datasetScopeKeys(me._type);\n var scopes = config.getOptionScopes(me.getDataset(), scopeKeys, true);\n me.options = config.createResolver(scopes, me.getContext());\n me._parsing = me.options.parsing;\n }\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var me = this;\n var meta = me._cachedMeta,\n data = me._data;\n var iScale = meta.iScale,\n _stacked = meta._stacked;\n var iAxis = iScale.axis;\n var sorted = start === 0 && count === data.length ? true : meta._sorted;\n var prev = start > 0 && meta._parsed[start - 1];\n var i, cur, parsed;\n\n if (me._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = me.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = me.parseObjectData(meta, data, start, count);\n } else {\n parsed = me.parsePrimitiveData(meta, data, start, count);\n }\n\n var isNotInOrderComparedToPrev = function isNotInOrderComparedToPrev() {\n return cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n };\n\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n\n prev = cur;\n }\n }\n\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(me, parsed);\n }\n }\n }, {\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = new Array(count);\n var i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n var _parsed$i;\n\n index = i + start;\n parsed[i] = (_parsed$i = {}, _defineProperty(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var _this$_parsing = this._parsing,\n _this$_parsing$xAxisK = _this$_parsing.xAxisKey,\n xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,\n _this$_parsing$yAxisK = _this$_parsing.yAxisKey,\n yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n\n return parsed;\n }\n }, {\n key: \"getParsed\",\n value: function getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n }, {\n key: \"getDataElement\",\n value: function getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n }, {\n key: \"applyStack\",\n value: function applyStack(scale, parsed, mode) {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var value = parsed[scale.axis];\n var stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return _applyStack(stack, value, meta.index, {\n mode: mode\n });\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n var parsedValue = parsed[scale.axis];\n var value = parsedValue === null ? NaN : parsedValue;\n var values = stack && parsed._stacks[scale.axis];\n\n if (stack && values) {\n stack.values = values;\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n value = _applyStack(stack, parsedValue, this._cachedMeta.index, {\n all: true\n });\n }\n\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(scale, canStack) {\n var me = this;\n var meta = me._cachedMeta;\n var _parsed = meta._parsed;\n var sorted = meta._sorted && scale === meta.iScale;\n var ilen = _parsed.length;\n\n var otherScale = me._getOtherScale(scale);\n\n var stack = canStack && meta._stacked && {\n keys: getSortedDatasetIndices(me.chart, true),\n values: null\n };\n var range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n\n var _getUserBounds = getUserBounds(otherScale),\n otherMin = _getUserBounds.min,\n otherMax = _getUserBounds.max;\n\n var i, value, parsed, otherValue;\n\n function _skip() {\n parsed = _parsed[i];\n value = parsed[scale.axis];\n otherValue = parsed[otherScale.axis];\n return !isNumberFinite(value) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n\n me.updateRangeFromParsed(range, scale, parsed, stack);\n\n if (sorted) {\n break;\n }\n }\n\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n\n me.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n\n return range;\n }\n }, {\n key: \"getAllParsedValues\",\n value: function getAllParsedValues(scale) {\n var parsed = this._cachedMeta._parsed;\n var values = [];\n var i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n\n return values;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return false;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var parsed = me.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n }, {\n key: \"_update\",\n value: function _update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n me.configure();\n me._cachedDataOpts = {};\n me.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(me.options.clip, defaultClip(meta.xScale, meta.yScale, me.getMaxOverflow())));\n }\n }, {\n key: \"update\",\n value: function update(mode) {}\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var ctx = me._ctx;\n var chart = me.chart;\n var meta = me._cachedMeta;\n var elements = meta.data || [];\n var area = chart.chartArea;\n var active = [];\n var start = me._drawStart || 0;\n var count = me._drawCount || elements.length - start;\n var i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n var element = elements[i];\n\n if (element.active) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n }, {\n key: \"getStyle\",\n value: function getStyle(index, active) {\n var mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n }, {\n key: \"getContext\",\n value: function getContext(index, active, mode) {\n var me = this;\n var dataset = me.getDataset();\n var context;\n\n if (index >= 0 && index < me._cachedMeta.data.length) {\n var element = me._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(me.getContext(), index, element));\n context.parsed = me.getParsed(index);\n context.raw = dataset.data[index];\n } else {\n context = me.$context || (me.$context = createDatasetContext(me.chart.getContext(), me.index));\n context.dataset = dataset;\n }\n\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n }, {\n key: \"resolveDatasetElementOptions\",\n value: function resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n }, {\n key: \"_resolveElementOptions\",\n value: function _resolveElementOptions(elementType) {\n var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var me = this;\n var active = mode === 'active';\n var cache = me._cachedDataOpts;\n var cacheKey = elementType + '-' + mode;\n var cached = cache[cacheKey];\n var sharing = me.enableOptionSharing && defined(index);\n\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n\n var config = me.chart.config;\n var scopeKeys = config.datasetElementScopeKeys(me._type, elementType);\n var prefixes = active ? [\"\".concat(elementType, \"Hover\"), 'hover', elementType, ''] : [elementType, ''];\n var scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n var names = Object.keys(defaults.elements[elementType]);\n\n var context = function context() {\n return me.getContext(index, active);\n };\n\n var values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations(index, transition, active) {\n var me = this;\n var chart = me.chart;\n var cache = me._cachedDataOpts;\n var cacheKey = \"animation-\".concat(transition);\n var cached = cache[cacheKey];\n\n if (cached) {\n return cached;\n }\n\n var options;\n\n if (chart.options.animation !== false) {\n var config = me.chart.config;\n var scopeKeys = config.datasetAnimationScopeKeys(me._type, transition);\n var scopes = config.getOptionScopes(me.getDataset(), scopeKeys);\n options = config.createResolver(scopes, me.getContext(index, active, transition));\n }\n\n var animations = new Animations(chart, options && options.animations);\n\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getSharedOptions\",\n value: function getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n }, {\n key: \"includeOptions\",\n value: function includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n }, {\n key: \"updateElement\",\n value: function updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n }, {\n key: \"updateSharedOptions\",\n value: function updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n }, {\n key: \"_setStyle\",\n value: function _setStyle(element, index, mode, active) {\n element.active = active;\n var options = this.getStyle(index, active);\n\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n }, {\n key: \"removeHoverStyle\",\n value: function removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n }, {\n key: \"setHoverStyle\",\n value: function setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n }, {\n key: \"_removeDatasetHoverStyle\",\n value: function _removeDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n }, {\n key: \"_setDatasetHoverStyle\",\n value: function _setDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n }, {\n key: \"_resyncElements\",\n value: function _resyncElements(resetNewElements) {\n var me = this;\n var numMeta = me._cachedMeta.data.length;\n var numData = me._data.length;\n\n if (numData > numMeta) {\n me._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n me._removeElements(numData, numMeta - numData);\n }\n\n var count = Math.min(numData, numMeta);\n\n if (count) {\n me.parse(0, count);\n }\n }\n }, {\n key: \"_insertElements\",\n value: function _insertElements(start, count) {\n var resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var me = this;\n var meta = me._cachedMeta;\n var data = meta.data;\n var end = start + count;\n var i;\n\n var move = function move(arr) {\n arr.length += count;\n\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new me.dataElementType();\n }\n\n if (me._parsing) {\n move(meta._parsed);\n }\n\n me.parse(start, count);\n\n if (resetNewElements) {\n me.updateElements(data, start, count, 'reset');\n }\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(element, start, count, mode) {}\n }, {\n key: \"_removeElements\",\n value: function _removeElements(start, count) {\n var me = this;\n var meta = me._cachedMeta;\n\n if (me._parsing) {\n var removed = meta._parsed.splice(start, count);\n\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n\n meta.data.splice(start, count);\n }\n }, {\n key: \"_onDataPush\",\n value: function _onDataPush() {\n var count = arguments.length;\n\n this._insertElements(this.getDataset().data.length - count, count);\n }\n }, {\n key: \"_onDataPop\",\n value: function _onDataPop() {\n this._removeElements(this._cachedMeta.data.length - 1, 1);\n }\n }, {\n key: \"_onDataShift\",\n value: function _onDataShift() {\n this._removeElements(0, 1);\n }\n }, {\n key: \"_onDataSplice\",\n value: function _onDataSplice(start, count) {\n this._removeElements(start, count);\n\n this._insertElements(start, arguments.length - 2);\n }\n }, {\n key: \"_onDataUnshift\",\n value: function _onDataUnshift() {\n this._insertElements(0, arguments.length);\n }\n }]);\n\n return DatasetController;\n}();\n\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale) {\n if (!scale._cache.$bar) {\n var metas = scale.getMatchingVisibleMetas('bar');\n var values = [];\n\n for (var i = 0, ilen = metas.length; i < ilen; i++) {\n values = values.concat(metas[i].controller.getAllParsedValues(scale));\n }\n\n scale._cache.$bar = _arrayUnique(values.sort(function (a, b) {\n return a - b;\n }));\n }\n\n return scale._cache.$bar;\n}\n\nfunction computeMinSampleSize(scale) {\n var values = getAllScaleValues(scale);\n var min = scale._length;\n var i, ilen, curr, prev;\n\n var updateMinAndPrev = function updateMinAndPrev() {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n var thickness = options.barThickness;\n var size, ratio;\n\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n\n return {\n chunk: size / stackCount,\n ratio: ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\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\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n next = curr + curr - prev;\n }\n\n var start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n var size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start: start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n var startValue = vScale.parse(entry[0], i);\n var endValue = vScale.parse(entry[1], i);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n var barStart = min;\n var barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart: barStart,\n barEnd: barEnd,\n start: startValue,\n end: endValue,\n min: min,\n max: max\n };\n}\n\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = [];\n var i, ilen, item, entry;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nvar BarController = /*#__PURE__*/function (_DatasetController) {\n _inherits(BarController, _DatasetController);\n\n var _super = _createSuper(BarController);\n\n function BarController() {\n _classCallCheck(this, BarController);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(BarController, [{\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var _this$_parsing2 = this._parsing,\n _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,\n xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,\n _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,\n yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;\n var iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n var vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n var parsed = [];\n var i, ilen, item, obj;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n\n return parsed;\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n _get(_getPrototypeOf(BarController.prototype), \"updateRangeFromParsed\", this).call(this, range, scale, parsed, stack);\n\n var custom = parsed._custom;\n\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var parsed = me.getParsed(index);\n var custom = parsed._custom;\n var value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value: value\n };\n }\n }, {\n key: \"initialize\",\n value: function initialize() {\n var me = this;\n me.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BarController.prototype), \"initialize\", this).call(this);\n\n var meta = me._cachedMeta;\n meta.stack = me.getDataset().stack;\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n me.updateElements(meta.data, 0, meta.data.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(bars, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var vScale = me._cachedMeta.vScale;\n var base = vScale.getBasePixel();\n var horizontal = vScale.isHorizontal();\n\n var ruler = me._getRuler();\n\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n\n for (var i = start; i < start + count; i++) {\n var parsed = me.getParsed(i);\n var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base: base,\n head: base\n } : me._calculateBarValuePixels(i);\n\n var ipixels = me._calculateBarIndexPixels(i, ruler);\n\n var stack = (parsed._stacks || {})[vScale.axis];\n var properties = {\n horizontal: horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || me.index === stack._top || me.index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : undefined,\n width: horizontal ? undefined : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);\n }\n\n me.updateElement(bars[i], i, properties, mode);\n }\n }\n }, {\n key: \"_getStacks\",\n value: function _getStacks(last, dataIndex) {\n var me = this;\n var meta = me._cachedMeta;\n var iScale = meta.iScale;\n var metasets = iScale.getMatchingVisibleMetas(me._type);\n var stacked = iScale.options.stacked;\n var ilen = metasets.length;\n var stacks = [];\n var i, item;\n\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n\n if (typeof dataIndex !== 'undefined') {\n var val = item.controller.getParsed(dataIndex)[item.controller._cachedMeta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n\n if (stacked === false || stacks.indexOf(item.stack) === -1 || stacked === undefined && item.stack === undefined) {\n stacks.push(item.stack);\n }\n\n if (item.index === last) {\n break;\n }\n }\n\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n }, {\n key: \"_getStackCount\",\n value: function _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n }, {\n key: \"_getStackIndex\",\n value: function _getStackIndex(datasetIndex, name, dataIndex) {\n var stacks = this._getStacks(datasetIndex, dataIndex);\n\n var index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n }, {\n key: \"_getRuler\",\n value: function _getRuler() {\n var me = this;\n var opts = me.options;\n var meta = me._cachedMeta;\n var iScale = meta.iScale;\n var pixels = [];\n var i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(me.getParsed(i)[iScale.axis], i));\n }\n\n var barThickness = opts.barThickness;\n var min = barThickness || computeMinSampleSize(iScale);\n return {\n min: min,\n pixels: pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: me._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n }, {\n key: \"_calculateBarValuePixels\",\n value: function _calculateBarValuePixels(index) {\n var me = this;\n var _me$_cachedMeta = me._cachedMeta,\n vScale = _me$_cachedMeta.vScale,\n _stacked = _me$_cachedMeta._stacked;\n var _me$options = me.options,\n baseValue = _me$options.base,\n minBarLength = _me$options.minBarLength;\n var parsed = me.getParsed(index);\n var custom = parsed._custom;\n var floating = isFloatBar(custom);\n var value = parsed[vScale.axis];\n var start = 0;\n var length = _stacked ? me.applyStack(vScale, parsed, _stacked) : value;\n var head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n\n start += value;\n }\n\n var startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n var base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n\n size = head - base;\n\n if (minBarLength !== undefined && Math.abs(size) < minBarLength) {\n size = size < 0 ? -minBarLength : minBarLength;\n\n if (value === 0) {\n base -= size / 2;\n }\n\n head = base + size;\n }\n\n var actualBase = baseValue || 0;\n\n if (base === vScale.getPixelForValue(actualBase)) {\n var halfGrid = vScale.getLineWidthForValue(actualBase) / 2;\n\n if (size > 0) {\n base += halfGrid;\n size -= halfGrid;\n } else if (size < 0) {\n base -= halfGrid;\n size += halfGrid;\n }\n }\n\n return {\n size: size,\n base: base,\n head: head,\n center: head + size / 2\n };\n }\n }, {\n key: \"_calculateBarIndexPixels\",\n value: function _calculateBarIndexPixels(index, ruler) {\n var me = this;\n var scale = ruler.scale;\n var options = me.options;\n var skipNull = options.skipNull;\n var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n var center, size;\n\n if (ruler.grouped) {\n var stackCount = skipNull ? me._getStackCount(index) : ruler.stackCount;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n var stackIndex = me._getStackIndex(me.index, me._cachedMeta.stack, skipNull ? index : undefined);\n\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(me.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n\n return {\n base: center - size / 2,\n head: center + size / 2,\n center: center,\n size: size\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var chart = me.chart;\n var meta = me._cachedMeta;\n var vScale = meta.vScale;\n var rects = meta.data;\n var ilen = rects.length;\n var i = 0;\n clipArea(chart.ctx, chart.chartArea);\n\n for (; i < ilen; ++i) {\n if (me.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(me._ctx);\n }\n }\n\n unclipArea(chart.ctx);\n }\n }]);\n\n return BarController;\n}(DatasetController);\n\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n interaction: {\n mode: 'index'\n },\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n};\n\nvar BubbleController = /*#__PURE__*/function (_DatasetController2) {\n _inherits(BubbleController, _DatasetController2);\n\n var _super2 = _createSuper(BubbleController);\n\n function BubbleController() {\n _classCallCheck(this, BubbleController);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(BubbleController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BubbleController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var _this$_parsing3 = this._parsing,\n _this$_parsing3$xAxis = _this$_parsing3.xAxisKey,\n xAxisKey = _this$_parsing3$xAxis === void 0 ? 'x' : _this$_parsing3$xAxis,\n _this$_parsing3$yAxis = _this$_parsing3.yAxisKey,\n yAxisKey = _this$_parsing3$yAxis === void 0 ? 'y' : _this$_parsing3$yAxis;\n var parsed = [];\n var i, ilen, item;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n item = data[i];\n parsed.push({\n x: xScale.parse(resolveObjectKey(item, xAxisKey), i),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), i),\n _custom: item && item.r && +item.r\n });\n }\n\n return parsed;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var _this$_cachedMeta = this._cachedMeta,\n data = _this$_cachedMeta.data,\n _parsed = _this$_cachedMeta._parsed;\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size() / 2, _parsed[i]._custom);\n }\n\n return max > 0 && max;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = me.getParsed(index);\n var x = xScale.getLabelForValue(parsed.x);\n var y = yScale.getLabelForValue(parsed.y);\n var r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var points = me._cachedMeta.data;\n me.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var _me$_cachedMeta2 = me._cachedMeta,\n xScale = _me$_cachedMeta2.xScale,\n yScale = _me$_cachedMeta2.yScale;\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var parsed = !reset && me.getParsed(i);\n var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(parsed.x);\n var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(parsed.y);\n var properties = {\n x: x,\n y: y,\n skip: isNaN(x) || isNaN(y)\n };\n\n if (includeOptions) {\n properties.options = me.resolveDataElementOptions(i, mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n me.updateElement(point, i, properties, mode);\n }\n\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n var parsed = this.getParsed(index);\n\n var values = _get(_getPrototypeOf(BubbleController.prototype), \"resolveDataElementOptions\", this).call(this, index, mode);\n\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n\n var radius = values.radius;\n\n if (mode !== 'active') {\n values.radius = 0;\n }\n\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n }]);\n\n return BubbleController;\n}(DatasetController);\n\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n var ratioX = 1;\n var ratioY = 1;\n var offsetX = 0;\n var offsetY = 0;\n\n if (circumference < TAU) {\n var startAngle = rotation;\n var endAngle = startAngle + circumference;\n var startX = Math.cos(startAngle);\n var startY = Math.sin(startAngle);\n var endX = Math.cos(endAngle);\n var endY = Math.sin(endAngle);\n\n var calcMax = function calcMax(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n };\n\n var calcMin = function calcMin(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n };\n\n var maxX = calcMax(0, startX, endX);\n var maxY = calcMax(HALF_PI, startY, endY);\n var minX = calcMin(PI, startX, endX);\n var minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n\n return {\n ratioX: ratioX,\n ratioY: ratioY,\n offsetX: offsetX,\n offsetY: offsetY\n };\n}\n\nvar DoughnutController = /*#__PURE__*/function (_DatasetController3) {\n _inherits(DoughnutController, _DatasetController3);\n\n var _super3 = _createSuper(DoughnutController);\n\n function DoughnutController(chart, datasetIndex) {\n var _this;\n\n _classCallCheck(this, DoughnutController);\n\n _this = _super3.call(this, chart, datasetIndex);\n _this.enableOptionSharing = true;\n _this.innerRadius = undefined;\n _this.outerRadius = undefined;\n _this.offsetX = undefined;\n _this.offsetY = undefined;\n return _this;\n }\n\n _createClass(DoughnutController, [{\n key: \"linkScales\",\n value: function linkScales() {}\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var data = this.getDataset().data;\n var meta = this._cachedMeta;\n var i, ilen;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = +data[i];\n }\n }\n }, {\n key: \"_getRotation\",\n value: function _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n }, {\n key: \"_getCircumference\",\n value: function _getCircumference() {\n return toRadians(this.options.circumference);\n }\n }, {\n key: \"_getRotationExtents\",\n value: function _getRotationExtents() {\n var min = TAU;\n var max = -TAU;\n var me = this;\n\n for (var i = 0; i < me.chart.data.datasets.length; ++i) {\n if (me.chart.isDatasetVisible(i)) {\n var controller = me.chart.getDatasetMeta(i).controller;\n\n var rotation = controller._getRotation();\n\n var circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var chart = me.chart;\n var chartArea = chart.chartArea;\n var meta = me._cachedMeta;\n var arcs = meta.data;\n var spacing = me.getMaxBorderWidth() + me.getMaxOffset(arcs);\n var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n var cutout = Math.min(toPercentage(me.options.cutout, maxSize), 1);\n\n var chartWeight = me._getRingWeight(me.index);\n\n var _me$_getRotationExten = me._getRotationExtents(),\n circumference = _me$_getRotationExten.circumference,\n rotation = _me$_getRotationExten.rotation;\n\n var _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),\n ratioX = _getRatioAndOffset.ratioX,\n ratioY = _getRatioAndOffset.ratioY,\n offsetX = _getRatioAndOffset.offsetX,\n offsetY = _getRatioAndOffset.offsetY;\n\n var maxWidth = (chartArea.width - spacing) / ratioX;\n var maxHeight = (chartArea.height - spacing) / ratioY;\n var maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n var outerRadius = toDimension(me.options.radius, maxRadius);\n var innerRadius = Math.max(outerRadius * cutout, 0);\n\n var radiusLength = (outerRadius - innerRadius) / me._getVisibleDatasetWeightTotal();\n\n me.offsetX = offsetX * outerRadius;\n me.offsetY = offsetY * outerRadius;\n meta.total = me.calculateTotal();\n me.outerRadius = outerRadius - radiusLength * me._getRingWeightOffset(me.index);\n me.innerRadius = Math.max(me.outerRadius - radiusLength * chartWeight, 0);\n me.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_circumference\",\n value: function _circumference(i, reset) {\n var me = this;\n var opts = me.options;\n var meta = me._cachedMeta;\n\n var circumference = me._getCircumference();\n\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null) {\n return 0;\n }\n\n return me.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\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 animateScale = reset && animationOpts.animateScale;\n var innerRadius = animateScale ? 0 : me.innerRadius;\n var outerRadius = animateScale ? 0 : me.outerRadius;\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n\n var startAngle = me._getRotation();\n\n var i;\n\n for (i = 0; i < start; ++i) {\n startAngle += me._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n var circumference = me._circumference(i, reset);\n\n var arc = arcs[i];\n var properties = {\n x: centerX + me.offsetX,\n y: centerY + me.offsetY,\n startAngle: startAngle,\n endAngle: startAngle + circumference,\n circumference: circumference,\n outerRadius: outerRadius,\n innerRadius: innerRadius\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);\n }\n\n startAngle += circumference;\n me.updateElement(arc, i, properties, mode);\n }\n\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"calculateTotal\",\n value: function calculateTotal() {\n var meta = this._cachedMeta;\n var metaData = meta.data;\n var total = 0;\n var i;\n\n for (i = 0; i < metaData.length; i++) {\n var value = meta._parsed[i];\n\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i)) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n }, {\n key: \"calculateCircumference\",\n value: function calculateCircumference(value) {\n var total = this._cachedMeta.total;\n\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var meta = me._cachedMeta;\n var chart = me.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"getMaxBorderWidth\",\n value: function getMaxBorderWidth(arcs) {\n var me = this;\n var max = 0;\n var chart = me.chart;\n var i, ilen, meta, controller, options;\n\n if (!arcs) {\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 controller = meta.controller;\n\n if (controller !== me) {\n controller.configure();\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 options = controller.resolveDataElementOptions(i);\n\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n\n return max;\n }\n }, {\n key: \"getMaxOffset\",\n value: function getMaxOffset(arcs) {\n var max = 0;\n\n for (var i = 0, ilen = arcs.length; i < ilen; ++i) {\n var options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n\n return max;\n }\n }, {\n key: \"_getRingWeightOffset\",\n value: 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 key: \"_getRingWeight\",\n value: function _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n }, {\n key: \"_getVisibleDatasetWeightTotal\",\n value: function _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n }]);\n\n return DoughnutController;\n}(DatasetController);\n\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n indexAxis: 'r'\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\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 style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(tooltipItem) {\n var dataLabel = tooltipItem.label;\n var value = ': ' + tooltipItem.formattedValue;\n\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return dataLabel;\n }\n }\n }\n }\n};\n\nvar LineController = /*#__PURE__*/function (_DatasetController4) {\n _inherits(LineController, _DatasetController4);\n\n var _super4 = _createSuper(LineController);\n\n function LineController() {\n _classCallCheck(this, LineController);\n\n return _super4.apply(this, arguments);\n }\n\n _createClass(LineController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(LineController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n var line = meta.dataset,\n _meta$data = meta.data,\n points = _meta$data === void 0 ? [] : _meta$data,\n _dataset = meta._dataset;\n var animationsDisabled = me.chart._animationsDisabled;\n\n var _getStartAndCountOfVi = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi.start,\n count = _getStartAndCountOfVi.count;\n\n me._drawStart = start;\n me._drawCount = count;\n\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = me.resolveDatasetElementOptions(mode);\n\n if (!me.options.showLine) {\n options.borderWidth = 0;\n }\n\n options.segment = me.options.segment;\n me.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n me.updateElements(points, start, count, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var _me$_cachedMeta3 = me._cachedMeta,\n xScale = _me$_cachedMeta3.xScale,\n yScale = _me$_cachedMeta3.yScale,\n _stacked = _me$_cachedMeta3._stacked;\n var firstOpts = me.resolveDataElementOptions(start, mode);\n var sharedOptions = me.getSharedOptions(firstOpts);\n var includeOptions = me.includeOptions(mode, sharedOptions);\n var spanGaps = me.options.spanGaps;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = me.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && me.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = me.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed.y);\n var x = properties.x = xScale.getPixelForValue(parsed.x, i);\n var y = properties.y = reset || nullData ? yScale.getBasePixel() : yScale.getPixelForValue(_stacked ? me.applyStack(yScale, parsed, _stacked) : parsed.y, i);\n properties.skip = isNaN(x) || isNaN(y) || nullData;\n properties.stop = i > 0 && parsed.x - prevParsed.x > maxGapLength;\n properties.parsed = parsed;\n\n if (includeOptions) {\n properties.options = sharedOptions || me.resolveDataElementOptions(i, mode);\n }\n\n if (!directUpdate) {\n me.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n me.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var me = this;\n var meta = me._cachedMeta;\n var dataset = meta.dataset;\n var border = dataset.options && dataset.options.borderWidth || 0;\n var data = meta.data || [];\n\n if (!data.length) {\n return border;\n }\n\n var firstPoint = data[0].size(me.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(me.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }, {\n key: \"draw\",\n value: function draw() {\n this._cachedMeta.dataset.updateControlPoints(this.chart.chartArea);\n\n _get(_getPrototypeOf(LineController.prototype), \"draw\", this).call(this);\n }\n }]);\n\n return LineController;\n}(DatasetController);\n\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n};\n\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n var pointCount = points.length;\n var start = 0;\n var count = pointCount;\n\n if (meta._sorted) {\n var iScale = meta.iScale,\n _parsed = meta._parsed;\n var axis = iScale.axis;\n\n var _iScale$getUserBounds = iScale.getUserBounds(),\n min = _iScale$getUserBounds.min,\n max = _iScale$getUserBounds.max,\n minDefined = _iScale$getUserBounds.minDefined,\n maxDefined = _iScale$getUserBounds.maxDefined;\n\n if (minDefined) {\n start = _limitValue(Math.min(_lookupByKey(_parsed, iScale.axis, min).lo, animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(Math.max(_lookupByKey(_parsed, iScale.axis, max).hi + 1, animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nfunction scaleRangesChanged(meta) {\n var xScale = meta.xScale,\n yScale = meta.yScale,\n _scaleRanges = meta._scaleRanges;\n var newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n\n var changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nvar PolarAreaController = /*#__PURE__*/function (_DatasetController5) {\n _inherits(PolarAreaController, _DatasetController5);\n\n var _super5 = _createSuper(PolarAreaController);\n\n function PolarAreaController(chart, datasetIndex) {\n var _this2;\n\n _classCallCheck(this, PolarAreaController);\n\n _this2 = _super5.call(this, chart, datasetIndex);\n _this2.innerRadius = undefined;\n _this2.outerRadius = undefined;\n return _this2;\n }\n\n _createClass(PolarAreaController, [{\n key: \"update\",\n value: function update(mode) {\n var arcs = this._cachedMeta.data;\n\n this._updateRadius();\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_updateRadius\",\n value: 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 var outerRadius = Math.max(minSize / 2, 0);\n var innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n var radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n me.outerRadius = outerRadius - radiusLength * me.index;\n me.innerRadius = me.outerRadius - radiusLength;\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var me = this;\n var reset = mode === 'reset';\n var chart = me.chart;\n var dataset = me.getDataset();\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = me._cachedMeta.rScale;\n var centerX = scale.xCenter;\n var centerY = scale.yCenter;\n var datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n var angle = datasetStartAngle;\n var i;\n var defaultAngle = 360 / me.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += me._computeAngle(i, mode, defaultAngle);\n }\n\n for (i = start; i < start + count; i++) {\n var arc = arcs[i];\n var startAngle = angle;\n\n var endAngle = angle + me._computeAngle(i, mode, defaultAngle);\n\n var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n var properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n options: me.resolveDataElementOptions(i, mode)\n };\n me.updateElement(arc, i, properties, mode);\n }\n }\n }, {\n key: \"countVisibleElements\",\n value: function countVisibleElements() {\n var _this3 = this;\n\n var dataset = this.getDataset();\n var meta = this._cachedMeta;\n var count = 0;\n meta.data.forEach(function (element, index) {\n if (!isNaN(dataset.data[index]) && _this3.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n }, {\n key: \"_computeAngle\",\n value: function _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n }]);\n\n return PolarAreaController;\n}(DatasetController);\n\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n }\n },\n indexAxis: 'r',\n startAngle: 0\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\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 style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nvar PieController = /*#__PURE__*/function (_DoughnutController) {\n _inherits(PieController, _DoughnutController);\n\n var _super6 = _createSuper(PieController);\n\n function PieController() {\n _classCallCheck(this, PieController);\n\n return _super6.apply(this, arguments);\n }\n\n return PieController;\n}(DoughnutController);\n\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nvar RadarController = /*#__PURE__*/function (_DatasetController6) {\n _inherits(RadarController, _DatasetController6);\n\n var _super7 = _createSuper(RadarController);\n\n function RadarController() {\n _classCallCheck(this, RadarController);\n\n return _super7.apply(this, arguments);\n }\n\n _createClass(RadarController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var me = this;\n var vScale = me._cachedMeta.vScale;\n var parsed = me.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var meta = me._cachedMeta;\n var line = meta.dataset;\n var points = meta.data || [];\n var labels = meta.iScale.getLabels();\n line.points = points;\n\n if (mode !== 'resize') {\n var options = me.resolveDatasetElementOptions(mode);\n\n if (!me.options.showLine) {\n options.borderWidth = 0;\n }\n\n var properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options: options\n };\n me.updateElement(line, undefined, properties, mode);\n }\n\n me.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var me = this;\n var dataset = me.getDataset();\n var scale = me._cachedMeta.rScale;\n var reset = mode === 'reset';\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var options = me.resolveDataElementOptions(i, mode);\n var pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n var x = reset ? scale.xCenter : pointPosition.x;\n var y = reset ? scale.yCenter : pointPosition.y;\n var properties = {\n x: x,\n y: y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options: options\n };\n me.updateElement(point, i, properties, mode);\n }\n }\n }]);\n\n return RadarController;\n}(DatasetController);\n\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n};\n\nvar ScatterController = /*#__PURE__*/function (_LineController) {\n _inherits(ScatterController, _LineController);\n\n var _super8 = _createSuper(ScatterController);\n\n function ScatterController() {\n _classCallCheck(this, ScatterController);\n\n return _super8.apply(this, arguments);\n }\n\n return ScatterController;\n}(LineController);\n\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\nvar controllers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BarController: BarController,\n BubbleController: BubbleController,\n DoughnutController: DoughnutController,\n LineController: LineController,\n PolarAreaController: PolarAreaController,\n PieController: PieController,\n RadarController: RadarController,\n ScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: either no adapter can be found or an incomplete integration was provided.');\n}\n\nvar DateAdapter = /*#__PURE__*/function () {\n function DateAdapter(options) {\n _classCallCheck(this, DateAdapter);\n\n this.options = options || {};\n }\n\n _createClass(DateAdapter, [{\n key: \"formats\",\n value: function formats() {\n return abstract();\n }\n }, {\n key: \"parse\",\n value: function parse(value, format) {\n return abstract();\n }\n }, {\n key: \"format\",\n value: function format(timestamp, _format) {\n return abstract();\n }\n }, {\n key: \"add\",\n value: function add(timestamp, amount, unit) {\n return abstract();\n }\n }, {\n key: \"diff\",\n value: function diff(a, b, unit) {\n return abstract();\n }\n }, {\n key: \"startOf\",\n value: function startOf(timestamp, unit, weekday) {\n return abstract();\n }\n }, {\n key: \"endOf\",\n value: function endOf(timestamp, unit) {\n return abstract();\n }\n }]);\n\n return DateAdapter;\n}();\n\nDateAdapter.override = function (members) {\n Object.assign(DateAdapter.prototype, members);\n};\n\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n\n return getRelativePosition$1(e, chart);\n}\n\nfunction evaluateAllVisibleItems(chart, handler) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var index, data, element;\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i = metasets[i];\n index = _metasets$i.index;\n data = _metasets$i.data;\n\n for (var j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\nfunction binarySearch(metaset, axis, value, intersect) {\n var controller = metaset.controller,\n data = metaset.data,\n _sorted = metaset._sorted;\n var iScale = controller._cachedMeta.iScale;\n\n if (iScale && axis === iScale.axis && _sorted && data.length) {\n var lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n var el = data[0];\n var range = typeof el.getRange === 'function' && el.getRange(axis);\n\n if (range) {\n var start = lookupMethod(data, axis, value - range);\n var end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var value = position[axis];\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i2 = metasets[i],\n index = _metasets$i2.index,\n data = _metasets$i2.data;\n\n var _binarySearch = binarySearch(metasets[i], axis, value, intersect),\n lo = _binarySearch.lo,\n hi = _binarySearch.hi;\n\n for (var j = lo; j <= hi; ++j) {\n var element = data[j];\n\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\nfunction 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\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n var items = [];\n\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n };\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n var distanceMetric = getDistanceMetricForAxis(axis);\n var minDistance = Number.POSITIVE_INFINITY;\n var items = [];\n\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n\n var center = element.getCenterPoint(useFinalPosition);\n var distance = distanceMetric(position, center);\n\n if (distance < minDistance) {\n items = [{\n element: element,\n datasetIndex: datasetIndex,\n index: index\n }];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n };\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var axis = options.axis;\n var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n var intersectsItem = false;\n evaluateAllVisibleItems(chart, function (element, datasetIndex, index) {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n\n if (options.intersect && !intersectsItem) {\n return [];\n }\n\n return items;\n}\n\nvar Interaction = {\n modes: {\n index: function index(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'x';\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);\n var elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach(function (meta) {\n var index = items[0].index;\n var element = meta.data[index];\n\n if (element && !element.skip) {\n elements.push({\n element: element,\n datasetIndex: meta.index,\n index: index\n });\n }\n });\n return elements;\n },\n dataset: function dataset(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);\n\n if (items.length > 0) {\n var datasetIndex = items[0].datasetIndex;\n var data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n\n for (var i = 0; i < data.length; ++i) {\n items.push({\n element: data[i],\n datasetIndex: datasetIndex,\n index: i\n });\n }\n }\n\n return items;\n },\n point: function point(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest: function nearest(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x: function x(chart, e, options, useFinalPosition) {\n options.axis = 'x';\n return getAxisItems(chart, e, options, useFinalPosition);\n },\n y: function y(chart, e, options, useFinalPosition) {\n options.axis = 'y';\n return getAxisItems(chart, e, options, useFinalPosition);\n }\n }\n};\nvar STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(function (v) {\n return v.pos === position;\n });\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(function (v) {\n return STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis;\n });\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort(function (a, b) {\n var v0 = reverse ? b : a;\n var v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n var layoutBoxes = [];\n var i, ilen, box;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n layoutBoxes.push({\n index: i,\n box: box,\n pos: box.position,\n horizontal: box.isHorizontal(),\n weight: box.weight\n });\n }\n\n return layoutBoxes;\n}\n\nfunction setLayoutDims(layouts, params) {\n var i, ilen, layout;\n\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n\n if (layout.horizontal) {\n layout.width = layout.box.fullSize && params.availableWidth;\n layout.height = params.hBoxMaxHeight;\n } else {\n layout.width = params.vBoxMaxWidth;\n layout.height = layout.box.fullSize && params.availableHeight;\n }\n }\n}\n\nfunction buildLayoutBoxes(boxes) {\n var layoutBoxes = wrapBoxes(boxes);\n var fullSize = sortByWeight(layoutBoxes.filter(function (wrap) {\n return wrap.box.fullSize;\n }), true);\n var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n var centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n var centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize: fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\n\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\n\nfunction updateDims(chartArea, params, layout) {\n var box = layout.box;\n var maxPadding = chartArea.maxPadding;\n\n if (!isObject(layout.pos)) {\n if (layout.size) {\n chartArea[layout.pos] -= layout.size;\n }\n\n layout.size = layout.horizontal ? box.height : box.width;\n chartArea[layout.pos] += layout.size;\n }\n\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n var newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n var newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n var widthChanged = newWidth !== chartArea.w;\n var heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\n\nfunction handleMaxPadding(chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n var margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(function (pos) {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params) {\n var refitBoxes = [];\n var i, ilen, layout, box, refit, changed;\n\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n\n var _updateDims = updateDims(chartArea, params, layout),\n same = _updateDims.same,\n other = _updateDims.other;\n\n refit |= same && refitBoxes.length;\n changed = changed || other;\n\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params) || changed;\n}\n\nfunction placeBoxes(boxes, chartArea, params) {\n var userPadding = params.padding;\n var x = chartArea.x;\n var y = chartArea.y;\n var i, ilen, layout, box;\n\n for (i = 0, ilen = boxes.length; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n\n if (layout.horizontal) {\n box.left = box.fullSize ? userPadding.left : chartArea.left;\n box.right = box.fullSize ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;\n box.top = y;\n box.bottom = y + box.height;\n box.width = box.right - box.left;\n y = box.bottom;\n } else {\n box.left = x;\n box.right = x + box.width;\n box.top = box.fullSize ? userPadding.top : chartArea.top;\n box.bottom = box.fullSize ? params.outerHeight - userPadding.right : chartArea.top + chartArea.h;\n box.height = box.bottom - box.top;\n x = box.right;\n }\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\ndefaults.set('layout', {\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox: function addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw: function draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\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 configure: function configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update: function update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n var padding = toPadding(chart.options.layout.padding);\n var availableWidth = width - padding.width;\n var availableHeight = height - padding.height;\n var boxes = buildLayoutBoxes(chart.boxes);\n var verticalBoxes = boxes.vertical;\n var horizontalBoxes = boxes.horizontal;\n each(chart.boxes, function (box) {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n var visibleVerticalBoxCount = verticalBoxes.reduce(function (total, wrap) {\n return wrap.box.options && wrap.box.options.display === false ? total : total + 1;\n }, 0) || 1;\n var params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding: padding,\n availableWidth: availableWidth,\n availableHeight: availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n var maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n var chartArea = Object.assign({\n maxPadding: maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params);\n fitBoxes(verticalBoxes, chartArea, params);\n\n if (fitBoxes(horizontalBoxes, chartArea, params)) {\n fitBoxes(verticalBoxes, chartArea, params);\n }\n\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, function (layout) {\n var box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h);\n });\n }\n};\n\nvar BasePlatform = /*#__PURE__*/function () {\n function BasePlatform() {\n _classCallCheck(this, BasePlatform);\n }\n\n _createClass(BasePlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {}\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n return false;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {}\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type, listener) {}\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return 1;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width: width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n return true;\n }\n }]);\n\n return BasePlatform;\n}();\n\nvar BasicPlatform = /*#__PURE__*/function (_BasePlatform) {\n _inherits(BasicPlatform, _BasePlatform);\n\n var _super9 = _createSuper(BasicPlatform);\n\n function BasicPlatform() {\n _classCallCheck(this, BasicPlatform);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(BasicPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n }]);\n\n return BasicPlatform;\n}(BasePlatform);\n\nvar EXPANDO_KEY = '$chartjs';\nvar 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\nvar isNullOrEmpty = function isNullOrEmpty(value) {\n return value === null || value === '';\n};\n\nfunction initCanvas(canvas, aspectRatio) {\n var style = canvas.style;\n var renderHeight = canvas.getAttribute('height');\n var renderWidth = canvas.getAttribute('width');\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 };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n\n if (isNullOrEmpty(renderWidth)) {\n var displayWidth = readUsedSize(canvas, 'width');\n\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n var displayHeight = readUsedSize(canvas, 'height');\n\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\nvar eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\n\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n var type = EVENT_TYPES[event.type] || event.type;\n\n var _getRelativePosition$ = getRelativePosition$1(event, chart),\n x = _getRelativePosition$.x,\n y = _getRelativePosition$.y;\n\n return {\n type: type,\n chart: chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\n\nfunction createAttachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n var element = container || canvas;\n var observer = new MutationObserver(function (entries) {\n var parent = _getParentNode(element);\n\n entries.forEach(function (entry) {\n for (var i = 0; i < entry.addedNodes.length; i++) {\n var added = entry.addedNodes[i];\n\n if (added === element || added === parent) {\n listener(entry.target);\n }\n }\n });\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n if (!container) {\n return;\n }\n\n var observer = new MutationObserver(function (entries) {\n entries.forEach(function (entry) {\n for (var i = 0; i < entry.removedNodes.length; i++) {\n if (entry.removedNodes[i] === canvas) {\n listener();\n break;\n }\n }\n });\n });\n observer.observe(container, {\n childList: true\n });\n return observer;\n}\n\nvar drpListeningCharts = new Map();\nvar oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n var dpr = window.devicePixelRatio;\n\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach(function (resize, chart) {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n if (!container) {\n return;\n }\n\n var resize = throttled(function (width, height) {\n var w = container.clientWidth;\n listener(width, height);\n\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n var observer = new ResizeObserver(function (entries) {\n var entry = entries[0];\n var width = entry.contentRect.width;\n var height = entry.contentRect.height;\n\n if (width === 0 && height === 0) {\n return;\n }\n\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n var canvas = chart.canvas;\n var proxy = throttled(function (event) {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, function (args) {\n var event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\n\nvar DomPlatform = /*#__PURE__*/function (_BasePlatform2) {\n _inherits(DomPlatform, _BasePlatform2);\n\n var _super10 = _createSuper(DomPlatform);\n\n function DomPlatform() {\n _classCallCheck(this, DomPlatform);\n\n return _super10.apply(this, arguments);\n }\n\n _createClass(DomPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {\n var context = canvas && canvas.getContext && canvas.getContext('2d');\n\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n var canvas = context.canvas;\n\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n var initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(function (prop) {\n var value = initial[prop];\n\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n var style = initial.style || {};\n Object.keys(style).forEach(function (key) {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n var proxies = chart.$proxies || (chart.$proxies = {});\n var handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n var handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type) {\n var proxies = chart.$proxies || (chart.$proxies = {});\n var proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n var handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n var handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(canvas, width, height, aspectRatio) {\n return _getMaximumSize(canvas, width, height, aspectRatio);\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n var container = _getParentNode(canvas);\n\n return !!(container && _getParentNode(container));\n }\n }]);\n\n return DomPlatform;\n}(BasePlatform);\n\nvar Element = /*#__PURE__*/function () {\n function Element() {\n _classCallCheck(this, Element);\n\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n\n _createClass(Element, [{\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n var _this$getProps = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps.x,\n y = _this$getProps.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n }, {\n key: \"getProps\",\n value: function getProps(props, final) {\n var me = this;\n var anims = this.$animations;\n\n if (!final || !anims) {\n return me;\n }\n\n var ret = {};\n props.forEach(function (prop) {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : me[prop];\n });\n return ret;\n }\n }]);\n\n return Element;\n}();\n\nElement.defaults = {};\nElement.defaultRoutes = undefined;\nvar formatters = {\n values: function values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric: function numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var locale = this.chart.options.locale;\n var notation;\n var delta = tickValue;\n\n if (ticks.length > 1) {\n var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n var logDelta = log10(Math.abs(delta));\n var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n var options = {\n notation: notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic: function logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n\n return '';\n }\n};\n\nfunction calculateDelta(tickValue, ticks) {\n var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n if (Math.abs(delta) > 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n\n return delta;\n}\n\nvar Ticks = {\n formatters: formatters\n};\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: function tickWidth(_ctx, options) {\n return options.lineWidth;\n },\n tickColor: function tickColor(_ctx, options) {\n return options.color;\n },\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: function _scriptable(name) {\n return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';\n },\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'tickBorderDash';\n }\n});\ndefaults.describe('scales', {\n _fallback: 'scale'\n});\n\nfunction autoSkip(scale, ticks) {\n var tickOpts = scale.options.ticks;\n var ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n var numMajorIndices = majorIndices.length;\n var first = majorIndices[0];\n var last = majorIndices[numMajorIndices - 1];\n var newTicks = [];\n\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n var spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n var i, ilen;\n var avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n var offset = scale.options.offset;\n\n var tickLength = scale._tickSize();\n\n var maxScale = scale._length / tickLength + (offset ? 0 : 1);\n var maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n var evenMajorSpacing = getEvenSpacing(majorIndices);\n var spacing = ticks.length / ticksLimit;\n\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n var factors = _factorize(evenMajorSpacing);\n\n for (var i = 0, ilen = factors.length - 1; i < ilen; i++) {\n var factor = factors[i];\n\n if (factor > spacing) {\n return factor;\n }\n }\n\n return Math.max(spacing, 1);\n}\n\nfunction getMajorIndices(ticks) {\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n\n return result;\n}\n\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n var count = 0;\n var next = majorIndices[0];\n var i;\n spacing = Math.ceil(spacing);\n\n for (i = 0; i < ticks.length; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n var start = valueOrDefault(majorStart, 0);\n var end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n var count = 0;\n var length, i, next;\n spacing = Math.ceil(spacing);\n\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\n\n for (i = Math.max(start, 0); i < end; i++) {\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n\nfunction getEvenSpacing(arr) {\n var len = arr.length;\n var i, diff;\n\n if (len < 2) {\n return false;\n }\n\n for (diff = arr[0], i = 1; i < len; ++i) {\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n\n return diff;\n}\n\nvar reverseAlign = function reverseAlign(align) {\n return align === 'left' ? 'right' : align === 'right' ? 'left' : align;\n};\n\nvar offsetFromEdge = function offsetFromEdge(scale, edge, offset) {\n return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n};\n\nfunction sample(arr, numItems) {\n var result = [];\n var increment = arr.length / numItems;\n var len = arr.length;\n var i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n\n return result;\n}\n\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n var length = scale.ticks.length;\n var validIndex = Math.min(index, length - 1);\n var start = scale._startPixel;\n var end = scale._endPixel;\n var epsilon = 1e-6;\n var lineValue = scale.getPixelForTick(validIndex);\n var offset;\n\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n\n lineValue += validIndex < index ? offset : -offset;\n\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n\n return lineValue;\n}\n\nfunction garbageCollect(caches, length) {\n each(caches, function (cache) {\n var gc = cache.gc;\n var gcLen = gc.length / 2;\n var i;\n\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n });\n}\n\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n var font = toFont(options.font, fallback);\n var padding = toPadding(options.padding);\n var lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return Object.assign(Object.create(parent), {\n scale: scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return Object.assign(Object.create(parent), {\n tick: tick,\n index: index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n var ret = _toLeftRightCenter(align);\n\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n var top = scale.top,\n left = scale.left,\n bottom = scale.bottom,\n right = scale.right;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = offsetFromEdge(scale, position, offset);\n maxWidth = right - left;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n}\n\nvar Scale = /*#__PURE__*/function (_Element) {\n _inherits(Scale, _Element);\n\n var _super11 = _createSuper(Scale);\n\n function Scale(cfg) {\n var _this4;\n\n _classCallCheck(this, Scale);\n\n _this4 = _super11.call(this);\n _this4.id = cfg.id;\n _this4.type = cfg.type;\n _this4.options = undefined;\n _this4.ctx = cfg.ctx;\n _this4.chart = cfg.chart;\n _this4.top = undefined;\n _this4.bottom = undefined;\n _this4.left = undefined;\n _this4.right = undefined;\n _this4.width = undefined;\n _this4.height = undefined;\n _this4._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n _this4.maxWidth = undefined;\n _this4.maxHeight = undefined;\n _this4.paddingTop = undefined;\n _this4.paddingBottom = undefined;\n _this4.paddingLeft = undefined;\n _this4.paddingRight = undefined;\n _this4.axis = undefined;\n _this4.labelRotation = undefined;\n _this4.min = undefined;\n _this4.max = undefined;\n _this4._range = undefined;\n _this4.ticks = [];\n _this4._gridLineItems = null;\n _this4._labelItems = null;\n _this4._labelSizes = null;\n _this4._length = 0;\n _this4._maxLength = 0;\n _this4._longestTextCache = {};\n _this4._startPixel = undefined;\n _this4._endPixel = undefined;\n _this4._reversePixels = false;\n _this4._userMax = undefined;\n _this4._userMin = undefined;\n _this4._suggestedMax = undefined;\n _this4._suggestedMin = undefined;\n _this4._ticksLength = 0;\n _this4._borderValue = 0;\n _this4._cache = {};\n _this4._dataLimitsCached = false;\n _this4.$context = undefined;\n return _this4;\n }\n\n _createClass(Scale, [{\n key: \"init\",\n value: function init(options) {\n var me = this;\n me.options = options.setContext(me.getContext());\n me.axis = options.axis;\n me._userMin = me.parse(options.min);\n me._userMax = me.parse(options.max);\n me._suggestedMin = me.parse(options.suggestedMin);\n me._suggestedMax = me.parse(options.suggestedMax);\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n return raw;\n }\n }, {\n key: \"getUserBounds\",\n value: function getUserBounds() {\n var _userMin = this._userMin,\n _userMax = this._userMax,\n _suggestedMin = this._suggestedMin,\n _suggestedMax = this._suggestedMax;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(canStack) {\n var me = this;\n\n var _me$getUserBounds = me.getUserBounds(),\n min = _me$getUserBounds.min,\n max = _me$getUserBounds.max,\n minDefined = _me$getUserBounds.minDefined,\n maxDefined = _me$getUserBounds.maxDefined;\n\n var range;\n\n if (minDefined && maxDefined) {\n return {\n min: min,\n max: max\n };\n }\n\n var metas = me.getMatchingVisibleMetas();\n\n for (var i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(me, canStack);\n\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n }, {\n key: \"getPadding\",\n value: 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 key: \"getTicks\",\n value: function getTicks() {\n return this.ticks;\n }\n }, {\n key: \"getLabels\",\n value: function getLabels() {\n var data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n }, {\n key: \"beforeUpdate\",\n value: function beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n }, {\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n var me = this;\n var tickOpts = me.options.ticks;\n var sampleSize = tickOpts.sampleSize;\n me.beforeUpdate();\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n me.ticks = null;\n me._labelSizes = null;\n me._gridLineItems = null;\n me._labelItems = null;\n me.beforeSetDimensions();\n me.setDimensions();\n me.afterSetDimensions();\n me._maxLength = me.isHorizontal() ? me.width + margins.left + margins.right : me.height + margins.top + margins.bottom;\n\n if (!me._dataLimitsCached) {\n me.beforeDataLimits();\n me.determineDataLimits();\n me.afterDataLimits();\n me._range = _addGrace(me, me.options.grace);\n me._dataLimitsCached = true;\n }\n\n me.beforeBuildTicks();\n me.ticks = me.buildTicks() || [];\n me.afterBuildTicks();\n var samplingEnabled = sampleSize < me.ticks.length;\n\n me._convertTicksToLabels(samplingEnabled ? sample(me.ticks, sampleSize) : me.ticks);\n\n me.configure();\n me.beforeCalculateLabelRotation();\n me.calculateLabelRotation();\n me.afterCalculateLabelRotation();\n\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n me.ticks = autoSkip(me, me.ticks);\n me._labelSizes = null;\n }\n\n if (samplingEnabled) {\n me._convertTicksToLabels(me.ticks);\n }\n\n me.beforeFit();\n me.fit();\n me.afterFit();\n me.afterUpdate();\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var reversePixels = me.options.reverse;\n var startPixel, endPixel;\n\n if (me.isHorizontal()) {\n startPixel = me.left;\n endPixel = me.right;\n } else {\n startPixel = me.top;\n endPixel = me.bottom;\n reversePixels = !reversePixels;\n }\n\n me._startPixel = startPixel;\n me._endPixel = endPixel;\n me._reversePixels = reversePixels;\n me._length = endPixel - startPixel;\n me._alignToPixels = me.options.alignToPixels;\n }\n }, {\n key: \"afterUpdate\",\n value: function afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n }, {\n key: \"beforeSetDimensions\",\n value: function beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n var me = this;\n\n if (me.isHorizontal()) {\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight;\n me.top = 0;\n me.bottom = me.height;\n }\n\n me.paddingLeft = 0;\n me.paddingTop = 0;\n me.paddingRight = 0;\n me.paddingBottom = 0;\n }\n }, {\n key: \"afterSetDimensions\",\n value: function afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n }, {\n key: \"_callHooks\",\n value: function _callHooks(name) {\n var me = this;\n me.chart.notifyPlugins(name, me.getContext());\n callback(me.options[name], [me]);\n }\n }, {\n key: \"beforeDataLimits\",\n value: function beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {}\n }, {\n key: \"afterDataLimits\",\n value: function afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n }, {\n key: \"beforeBuildTicks\",\n value: function beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n return [];\n }\n }, {\n key: \"afterBuildTicks\",\n value: function afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n }, {\n key: \"beforeTickToLabelConversion\",\n value: function beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var me = this;\n var tickOpts = me.options.ticks;\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], me);\n }\n\n for (i = 0; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n }\n }, {\n key: \"afterTickToLabelConversion\",\n value: function afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n }, {\n key: \"beforeCalculateLabelRotation\",\n value: function beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n }, {\n key: \"calculateLabelRotation\",\n value: function calculateLabelRotation() {\n var me = this;\n var options = me.options;\n var tickOpts = options.ticks;\n var numTicks = me.ticks.length;\n var minRotation = tickOpts.minRotation || 0;\n var maxRotation = tickOpts.maxRotation;\n var labelRotation = minRotation;\n var tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!me._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !me.isHorizontal()) {\n me.labelRotation = minRotation;\n return;\n }\n\n var labelSizes = me._getLabelSizes();\n\n var maxLabelWidth = labelSizes.widest.width;\n var maxLabelHeight = labelSizes.highest.height;\n\n var maxWidth = _limitValue(me.chart.width - maxLabelWidth, 0, me.maxWidth);\n\n tickWidth = options.offset ? me.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = me.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, me.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(Math.min((labelSizes.highest.height + 6) / tickWidth, 1)), Math.asin(Math.min(maxHeight / maxLabelDiagonal, 1)) - Math.asin(maxLabelHeight / maxLabelDiagonal)));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n me.labelRotation = labelRotation;\n }\n }, {\n key: \"afterCalculateLabelRotation\",\n value: function afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n }, {\n key: \"beforeFit\",\n value: function beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var me = this;\n var minSize = {\n width: 0,\n height: 0\n };\n var chart = me.chart,\n _me$options2 = me.options,\n tickOpts = _me$options2.ticks,\n titleOpts = _me$options2.title,\n gridOpts = _me$options2.grid;\n\n var display = me._isVisible();\n\n var isHorizontal = me.isHorizontal();\n\n if (display) {\n var titleHeight = getTitleHeight(titleOpts, chart.options.font);\n\n if (isHorizontal) {\n minSize.width = me.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = me.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n if (tickOpts.display && me.ticks.length) {\n var _me$_getLabelSizes = me._getLabelSizes(),\n first = _me$_getLabelSizes.first,\n last = _me$_getLabelSizes.last,\n widest = _me$_getLabelSizes.widest,\n highest = _me$_getLabelSizes.highest;\n\n var tickPadding = tickOpts.padding * 2;\n var angleRadians = toRadians(me.labelRotation);\n var cos = Math.cos(angleRadians);\n var sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(me.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(me.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n\n me._calculatePadding(first, last, sin, cos);\n }\n }\n\n me._handleMargins();\n\n if (isHorizontal) {\n me.width = me._length = chart.width - me._margins.left - me._margins.right;\n me.height = minSize.height;\n } else {\n me.width = minSize.width;\n me.height = me._length = chart.height - me._margins.top - me._margins.bottom;\n }\n }\n }, {\n key: \"_calculatePadding\",\n value: function _calculatePadding(first, last, sin, cos) {\n var me = this;\n var _me$options3 = me.options,\n _me$options3$ticks = _me$options3.ticks,\n align = _me$options3$ticks.align,\n padding = _me$options3$ticks.padding,\n position = _me$options3.position;\n var isRotated = me.labelRotation !== 0;\n var labelsBelowTicks = position !== 'top' && me.axis === 'x';\n\n if (me.isHorizontal()) {\n var offsetLeft = me.getPixelForTick(0) - me.left;\n var offsetRight = me.right - me.getPixelForTick(me.ticks.length - 1);\n var paddingLeft = 0;\n var paddingRight = 0;\n\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n me.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * me.width / (me.width - offsetLeft), 0);\n me.paddingRight = Math.max((paddingRight - offsetRight + padding) * me.width / (me.width - offsetRight), 0);\n } else {\n var paddingTop = last.height / 2;\n var paddingBottom = first.height / 2;\n\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n\n me.paddingTop = paddingTop + padding;\n me.paddingBottom = paddingBottom + padding;\n }\n }\n }, {\n key: \"_handleMargins\",\n value: function _handleMargins() {\n var me = this;\n\n if (me._margins) {\n me._margins.left = Math.max(me.paddingLeft, me._margins.left);\n me._margins.top = Math.max(me.paddingTop, me._margins.top);\n me._margins.right = Math.max(me.paddingRight, me._margins.right);\n me._margins.bottom = Math.max(me.paddingBottom, me._margins.bottom);\n }\n }\n }, {\n key: \"afterFit\",\n value: function afterFit() {\n callback(this.options.afterFit, [this]);\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var _this$options = this.options,\n axis = _this$options.axis,\n position = _this$options.position;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n }, {\n key: \"isFullSize\",\n value: function isFullSize() {\n return this.options.fullSize;\n }\n }, {\n key: \"_convertTicksToLabels\",\n value: function _convertTicksToLabels(ticks) {\n var me = this;\n me.beforeTickToLabelConversion();\n me.generateTickLabels(ticks);\n me.afterTickToLabelConversion();\n }\n }, {\n key: \"_getLabelSizes\",\n value: function _getLabelSizes() {\n var me = this;\n var labelSizes = me._labelSizes;\n\n if (!labelSizes) {\n var sampleSize = me.options.ticks.sampleSize;\n var ticks = me.ticks;\n\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n me._labelSizes = labelSizes = me._computeLabelSizes(ticks, ticks.length);\n }\n\n return labelSizes;\n }\n }, {\n key: \"_computeLabelSizes\",\n value: function _computeLabelSizes(ticks, length) {\n var ctx = this.ctx,\n caches = this._longestTextCache;\n var widths = [];\n var heights = [];\n var widestLabelSize = 0;\n var highestLabelSize = 0;\n var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for (j = 0, jlen = label.length; j < jlen; ++j) {\n nestedLabel = label[j];\n\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n\n garbageCollect(caches, length);\n var widest = widths.indexOf(widestLabelSize);\n var highest = heights.indexOf(highestLabelSize);\n\n var valueAt = function valueAt(idx) {\n return {\n width: widths[idx] || 0,\n height: heights[idx] || 0\n };\n };\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths: widths,\n heights: heights\n };\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value;\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value, index) {\n return NaN;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {}\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var ticks = this.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return this.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getPixelForDecimal\",\n value: function getPixelForDecimal(decimal) {\n var me = this;\n\n if (me._reversePixels) {\n decimal = 1 - decimal;\n }\n\n var pixel = me._startPixel + decimal * me._length;\n return _int16Range(me._alignToPixels ? _alignPixel(me.chart, pixel, 0) : pixel);\n }\n }, {\n key: \"getDecimalForPixel\",\n value: function getDecimalForPixel(pixel) {\n var decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n }, {\n key: \"getBaseValue\",\n value: function getBaseValue() {\n var min = this.min,\n max = this.max;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n }, {\n key: \"getContext\",\n value: function getContext(index) {\n var me = this;\n var ticks = me.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n var tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(me.getContext(), index, tick));\n }\n\n return me.$context || (me.$context = createScaleContext(me.chart.getContext(), me));\n }\n }, {\n key: \"_tickSize\",\n value: function _tickSize() {\n var me = this;\n var optionTicks = me.options.ticks;\n var rot = toRadians(me.labelRotation);\n var cos = Math.abs(Math.cos(rot));\n var sin = Math.abs(Math.sin(rot));\n\n var labelSizes = me._getLabelSizes();\n\n var padding = optionTicks.autoSkipPadding || 0;\n var w = labelSizes ? labelSizes.widest.width + padding : 0;\n var h = labelSizes ? labelSizes.highest.height + padding : 0;\n return me.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n }, {\n key: \"_isVisible\",\n value: function _isVisible() {\n var display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n }, {\n key: \"_computeGridLineItems\",\n value: function _computeGridLineItems(chartArea) {\n var me = this;\n var axis = me.axis;\n var chart = me.chart;\n var options = me.options;\n var grid = options.grid,\n position = options.position;\n var offset = grid.offset;\n var isHorizontal = me.isHorizontal();\n var ticks = me.ticks;\n var ticksLength = ticks.length + (offset ? 1 : 0);\n var tl = getTickMarkLength(grid);\n var items = [];\n var borderOpts = grid.setContext(me.getContext());\n var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n var axisHalfWidth = axisWidth / 2;\n\n var alignBorderValue = function alignBorderValue(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n\n var borderValue, i, lineValue, alignedLineValue;\n var tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\n if (position === 'top') {\n borderValue = alignBorderValue(me.bottom);\n ty1 = me.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(me.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = me.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(me.right);\n tx1 = me.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(me.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = me.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n borderValue = alignBorderValue(me.chart.scales[positionAxisID].getPixelForValue(value));\n }\n\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n var _positionAxisID = Object.keys(position)[0];\n var _value = position[_positionAxisID];\n borderValue = alignBorderValue(me.chart.scales[_positionAxisID].getPixelForValue(_value));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n for (i = 0; i < ticksLength; ++i) {\n var optsAtIndex = grid.setContext(me.getContext(i));\n var lineWidth = optsAtIndex.lineWidth;\n var lineColor = optsAtIndex.color;\n var borderDash = grid.borderDash || [];\n var borderDashOffset = optsAtIndex.borderDashOffset;\n var tickWidth = optsAtIndex.tickWidth;\n var tickColor = optsAtIndex.tickColor;\n var tickBorderDash = optsAtIndex.tickBorderDash || [];\n var tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(me, i, offset);\n\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.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 width: lineWidth,\n color: lineColor,\n borderDash: borderDash,\n borderDashOffset: borderDashOffset,\n tickWidth: tickWidth,\n tickColor: tickColor,\n tickBorderDash: tickBorderDash,\n tickBorderDashOffset: tickBorderDashOffset\n });\n }\n\n me._ticksLength = ticksLength;\n me._borderValue = borderValue;\n return items;\n }\n }, {\n key: \"_computeLabelItems\",\n value: function _computeLabelItems(chartArea) {\n var me = this;\n var axis = me.axis;\n var options = me.options;\n var position = options.position,\n optionTicks = options.ticks;\n var isHorizontal = me.isHorizontal();\n var ticks = me.ticks;\n var align = optionTicks.align,\n crossAlign = optionTicks.crossAlign,\n padding = optionTicks.padding,\n mirror = optionTicks.mirror;\n var tl = getTickMarkLength(options.grid);\n var tickAndPadding = tl + padding;\n var hTickAndPadding = mirror ? -padding : tickAndPadding;\n var rotation = -toRadians(me.labelRotation);\n var items = [];\n var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n var textBaseline = 'middle';\n\n if (position === 'top') {\n y = me.bottom - hTickAndPadding;\n textAlign = me._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = me.top + hTickAndPadding;\n textAlign = me._getXAxisLabelAlignment();\n } else if (position === 'left') {\n var ret = me._getYAxisLabelAlignment(tl);\n\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n var _ret = me._getYAxisLabelAlignment(tl);\n\n textAlign = _ret.textAlign;\n x = _ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n y = me.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n\n textAlign = me._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n var _positionAxisID2 = Object.keys(position)[0];\n var _value2 = position[_positionAxisID2];\n x = me.chart.scales[_positionAxisID2].getPixelForValue(_value2);\n }\n\n textAlign = me._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n var labelSizes = me._getLabelSizes();\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n var optsAtIndex = optionTicks.setContext(me.getContext(i));\n pixel = me.getPixelForTick(i) + optionTicks.labelOffset;\n font = me._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n var halfCount = lineCount / 2;\n var color = optsAtIndex.color;\n var strokeColor = optsAtIndex.textStrokeColor;\n var strokeWidth = optsAtIndex.textStrokeWidth;\n\n if (isHorizontal) {\n x = pixel;\n\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n var backdrop = void 0;\n\n if (optsAtIndex.showLabelBackdrop) {\n var labelPadding = toPadding(optsAtIndex.backdropPadding);\n var height = labelSizes.heights[i];\n var width = labelSizes.widths[i];\n var top = y + textOffset - labelPadding.top;\n var left = x - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n\n case 'bottom':\n top -= height;\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n\n case 'right':\n left -= width;\n break;\n }\n\n backdrop = {\n left: left,\n top: top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n\n items.push({\n rotation: rotation,\n label: label,\n font: font,\n color: color,\n strokeColor: strokeColor,\n strokeWidth: strokeWidth,\n textOffset: textOffset,\n textAlign: textAlign,\n textBaseline: textBaseline,\n translation: [x, y],\n backdrop: backdrop\n });\n }\n\n return items;\n }\n }, {\n key: \"_getXAxisLabelAlignment\",\n value: function _getXAxisLabelAlignment() {\n var me = this;\n var _me$options4 = me.options,\n position = _me$options4.position,\n ticks = _me$options4.ticks;\n var rotation = -toRadians(me.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n var align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n\n return align;\n }\n }, {\n key: \"_getYAxisLabelAlignment\",\n value: function _getYAxisLabelAlignment(tl) {\n var me = this;\n var _me$options5 = me.options,\n position = _me$options5.position,\n _me$options5$ticks = _me$options5.ticks,\n crossAlign = _me$options5$ticks.crossAlign,\n mirror = _me$options5$ticks.mirror,\n padding = _me$options5$ticks.padding;\n\n var labelSizes = me._getLabelSizes();\n\n var tickAndPadding = tl + padding;\n var widest = labelSizes.widest.width;\n var textAlign;\n var x;\n\n if (position === 'left') {\n if (mirror) {\n textAlign = 'left';\n x = me.right + padding;\n } else {\n x = me.right - tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = me.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n textAlign = 'right';\n x = me.left + padding;\n } else {\n x = me.left + tickAndPadding;\n\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = me.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n\n return {\n textAlign: textAlign,\n x: x\n };\n }\n }, {\n key: \"_computeLabelArea\",\n value: function _computeLabelArea() {\n var me = this;\n\n if (me.options.ticks.mirror) {\n return;\n }\n\n var chart = me.chart;\n var position = me.options.position;\n\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: me.left,\n bottom: chart.height,\n right: me.right\n };\n }\n\n if (position === 'top' || position === 'bottom') {\n return {\n top: me.top,\n left: 0,\n bottom: me.bottom,\n right: chart.width\n };\n }\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var ctx = this.ctx,\n backgroundColor = this.options.backgroundColor,\n left = this.left,\n top = this.top,\n width = this.width,\n height = this.height;\n\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n }, {\n key: \"getLineWidthForValue\",\n value: function getLineWidthForValue(value) {\n var me = this;\n var grid = me.options.grid;\n\n if (!me._isVisible() || !grid.display) {\n return 0;\n }\n\n var ticks = me.ticks;\n var index = ticks.findIndex(function (t) {\n return t.value === value;\n });\n\n if (index >= 0) {\n var opts = grid.setContext(me.getContext(index));\n return opts.lineWidth;\n }\n\n return 0;\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid(chartArea) {\n var me = this;\n var grid = me.options.grid;\n var ctx = me.ctx;\n\n var items = me._gridLineItems || (me._gridLineItems = me._computeGridLineItems(chartArea));\n\n var i, ilen;\n\n var drawLine = function drawLine(p1, p2, style) {\n if (!style.width || !style.color) {\n return;\n }\n\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {\n var me = this;\n var chart = me.chart,\n ctx = me.ctx,\n grid = me.options.grid;\n var borderOpts = grid.setContext(me.getContext());\n var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n\n if (!axisWidth) {\n return;\n }\n\n var lastLineWidth = grid.setContext(me.getContext(0)).lineWidth;\n var borderValue = me._borderValue;\n var x1, x2, y1, y2;\n\n if (me.isHorizontal()) {\n x1 = _alignPixel(chart, me.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, me.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, me.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, me.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n }, {\n key: \"drawLabels\",\n value: function drawLabels(chartArea) {\n var me = this;\n var optionTicks = me.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n var ctx = me.ctx;\n\n var area = me._computeLabelArea();\n\n if (area) {\n clipArea(ctx, area);\n }\n\n var items = me._labelItems || (me._labelItems = me._computeLabelItems(chartArea));\n\n var i, ilen;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n var tickFont = item.font;\n var label = item.label;\n\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n\n var y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var ctx = this.ctx,\n _this$options2 = this.options,\n position = _this$options2.position,\n title = _this$options2.title,\n reverse = _this$options2.reverse;\n\n if (!title.display) {\n return;\n }\n\n var font = toFont(title.font);\n var padding = toPadding(title.padding);\n var align = title.align;\n var offset = font.lineHeight / 2;\n\n if (position === 'bottom') {\n offset += padding.bottom;\n\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n var _titleArgs = titleArgs(this, offset, position, align),\n titleX = _titleArgs.titleX,\n titleY = _titleArgs.titleY,\n maxWidth = _titleArgs.maxWidth,\n rotation = _titleArgs.rotation;\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }, {\n key: \"draw\",\n value: function draw(chartArea) {\n var me = this;\n\n if (!me._isVisible()) {\n return;\n }\n\n me.drawBackground();\n me.drawGrid(chartArea);\n me.drawBorder();\n me.drawTitle();\n me.drawLabels(chartArea);\n }\n }, {\n key: \"_layers\",\n value: function _layers() {\n var me = this;\n var opts = me.options;\n var tz = opts.ticks && opts.ticks.z || 0;\n var gz = opts.grid && opts.grid.z || 0;\n\n if (!me._isVisible() || me.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: function draw(chartArea) {\n me.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: function draw(chartArea) {\n me.drawBackground();\n me.drawGrid(chartArea);\n me.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: function draw() {\n me.drawBorder();\n }\n }, {\n z: tz,\n draw: function draw(chartArea) {\n me.drawLabels(chartArea);\n }\n }];\n }\n }, {\n key: \"getMatchingVisibleMetas\",\n value: function getMatchingVisibleMetas(type) {\n var me = this;\n var metas = me.chart.getSortedVisibleDatasetMetas();\n var axisID = me.axis + 'AxisID';\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n var meta = metas[i];\n\n if (meta[axisID] === me.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"_resolveTickFontOptions\",\n value: function _resolveTickFontOptions(index) {\n var opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n }, {\n key: \"_maxDigits\",\n value: function _maxDigits() {\n var me = this;\n\n var fontSize = me._resolveTickFontOptions(0).lineHeight;\n\n return me.isHorizontal() ? me.width / fontSize / 0.7 : me.height / fontSize;\n }\n }]);\n\n return Scale;\n}(Element);\n\nvar TypedRegistry = /*#__PURE__*/function () {\n function TypedRegistry(type, scope, override) {\n _classCallCheck(this, TypedRegistry);\n\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n _createClass(TypedRegistry, [{\n key: \"isForType\",\n value: function isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n }, {\n key: \"register\",\n value: function register(item) {\n var me = this;\n var proto = Object.getPrototypeOf(item);\n var parentScope;\n\n if (isIChartComponent(proto)) {\n parentScope = me.register(proto);\n }\n\n var items = me.items;\n var id = item.id;\n var scope = me.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n\n if (me.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n }, {\n key: \"get\",\n value: function get(id) {\n return this.items[id];\n }\n }, {\n key: \"unregister\",\n value: function unregister(item) {\n var items = this.items;\n var id = item.id;\n var scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n }]);\n\n return TypedRegistry;\n}();\n\nfunction registerDefaults(item, scope, parentScope) {\n var itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(function (property) {\n var propertyParts = property.split('.');\n var sourceName = propertyParts.pop();\n var sourceScope = [scope].concat(propertyParts).join('.');\n var parts = routes[property].split('.');\n var targetName = parts.pop();\n var targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nvar Registry = /*#__PURE__*/function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n _createClass(Registry, [{\n key: \"add\",\n value: function add() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._each('register', args);\n }\n }, {\n key: \"remove\",\n value: function remove() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this._each('unregister', args);\n }\n }, {\n key: \"addControllers\",\n value: function addControllers() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this._each('register', args, this.controllers);\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this._each('register', args, this.elements);\n }\n }, {\n key: \"addPlugins\",\n value: function addPlugins() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this._each('register', args, this.plugins);\n }\n }, {\n key: \"addScales\",\n value: function addScales() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n this._each('register', args, this.scales);\n }\n }, {\n key: \"getController\",\n value: function getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n }, {\n key: \"getElement\",\n value: function getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n }, {\n key: \"getPlugin\",\n value: function getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n }, {\n key: \"getScale\",\n value: function getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n }, {\n key: \"removeControllers\",\n value: function removeControllers() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this._each('unregister', args, this.controllers);\n }\n }, {\n key: \"removeElements\",\n value: function removeElements() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this._each('unregister', args, this.elements);\n }\n }, {\n key: \"removePlugins\",\n value: function removePlugins() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this._each('unregister', args, this.plugins);\n }\n }, {\n key: \"removeScales\",\n value: function removeScales() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this._each('unregister', args, this.scales);\n }\n }, {\n key: \"_each\",\n value: function _each(method, args, typedRegistry) {\n var me = this;\n\n _toConsumableArray(args).forEach(function (arg) {\n var reg = typedRegistry || me._getRegistryForType(arg);\n\n if (typedRegistry || reg.isForType(arg) || reg === me.plugins && arg.id) {\n me._exec(method, reg, arg);\n } else {\n each(arg, function (item) {\n var itemReg = typedRegistry || me._getRegistryForType(item);\n\n me._exec(method, itemReg, item);\n });\n }\n });\n }\n }, {\n key: \"_exec\",\n value: function _exec(method, registry, component) {\n var camelMethod = _capitalize(method);\n\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n }, {\n key: \"_getRegistryForType\",\n value: function _getRegistryForType(type) {\n for (var i = 0; i < this._typedRegistries.length; i++) {\n var reg = this._typedRegistries[i];\n\n if (reg.isForType(type)) {\n return reg;\n }\n }\n\n return this.plugins;\n }\n }, {\n key: \"_get\",\n value: function _get(id, typedRegistry, type) {\n var item = typedRegistry.get(id);\n\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n\n return item;\n }\n }]);\n\n return Registry;\n}();\n\nvar registry = new Registry();\n\nvar PluginService = /*#__PURE__*/function () {\n function PluginService() {\n _classCallCheck(this, PluginService);\n\n this._init = [];\n }\n\n _createClass(PluginService, [{\n key: \"notify\",\n value: function notify(chart, hook, args, filter) {\n var me = this;\n\n if (hook === 'beforeInit') {\n me._init = me._createDescriptors(chart, true);\n\n me._notify(me._init, chart, 'install');\n }\n\n var descriptors = filter ? me._descriptors(chart).filter(filter) : me._descriptors(chart);\n\n var result = me._notify(descriptors, chart, hook, args);\n\n if (hook === 'destroy') {\n me._notify(descriptors, chart, 'stop');\n\n me._notify(me._init, chart, 'uninstall');\n }\n\n return result;\n }\n }, {\n key: \"_notify\",\n value: function _notify(descriptors, chart, hook, args) {\n args = args || {};\n\n var _iterator4 = _createForOfIteratorHelper(descriptors),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var descriptor = _step4.value;\n var plugin = descriptor.plugin;\n var method = plugin[hook];\n var params = [chart, args, descriptor.options];\n\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n return true;\n }\n }, {\n key: \"invalidate\",\n value: function invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n }, {\n key: \"_descriptors\",\n value: function _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n var descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n }, {\n key: \"_createDescriptors\",\n value: function _createDescriptors(chart, all) {\n var config = chart && chart.config;\n var options = valueOrDefault(config.options && config.options.plugins, {});\n var plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n }, {\n key: \"_notifyStateChanges\",\n value: function _notifyStateChanges(chart) {\n var previousDescriptors = this._oldCache || [];\n var descriptors = this._cache;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.plugin.id === y.plugin.id;\n });\n });\n };\n\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n }]);\n\n return PluginService;\n}();\n\nfunction allPlugins(config) {\n var plugins = [];\n var keys = Object.keys(registry.plugins.items);\n\n for (var i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n var local = config.plugins || [];\n\n for (var _i = 0; _i < local.length; _i++) {\n var plugin = local[_i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n\n return plugins;\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n\n if (options === true) {\n return {};\n }\n\n return options;\n}\n\nfunction createDescriptors(chart, plugins, options, all) {\n var result = [];\n var context = chart.getContext();\n\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i];\n var id = plugin.id;\n var opts = getOpts(options[id], all);\n\n if (opts === null) {\n continue;\n }\n\n result.push({\n plugin: plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, plugin, opts, context) {\n var keys = config.pluginScopeKeys(plugin);\n var scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n var datasetDefaults = defaults.datasets[type] || {};\n var datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n var axis = id;\n\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\n\nfunction mergeScaleConfig(config, options) {\n var chartDefaults = overrides[config.type] || {\n scales: {}\n };\n var configScales = options.scales || {};\n var chartIndexAxis = getIndexAxis(config.type, options);\n var firstIDs = Object.create(null);\n var scales = Object.create(null);\n Object.keys(configScales).forEach(function (id) {\n var scaleConf = configScales[id];\n var axis = determineAxis(id, scaleConf);\n var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n var defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{\n axis: axis\n }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(function (dataset) {\n var type = dataset.type || config.type;\n var indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n var datasetDefaults = overrides[type] || {};\n var defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(function (defaultID) {\n var axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n var id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{\n axis: axis\n }, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(function (key) {\n var scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\n\nfunction initOptions(config) {\n var options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\n\nvar keyCache = new Map();\nvar keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n var keys = keyCache.get(cacheKey);\n\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n\n return keys;\n}\n\nvar addIfFound = function addIfFound(set, obj, key) {\n var opts = resolveObjectKey(obj, key);\n\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nvar Config = /*#__PURE__*/function () {\n function Config(config) {\n _classCallCheck(this, Config);\n\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n _createClass(Config, [{\n key: \"update\",\n value: function update() {\n var config = this._config;\n this.clearCache();\n initOptions(config);\n }\n }, {\n key: \"clearCache\",\n value: function clearCache() {\n this._scopeCache.clear();\n\n this._resolverCache.clear();\n }\n }, {\n key: \"datasetScopeKeys\",\n value: function datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, function () {\n return [[\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetAnimationScopeKeys\",\n value: function datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(\"\".concat(datasetType, \".transition.\").concat(transition), function () {\n return [[\"datasets.\".concat(datasetType, \".transitions.\").concat(transition), \"transitions.\".concat(transition)], [\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetElementScopeKeys\",\n value: function datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(\"\".concat(datasetType, \"-\").concat(elementType), function () {\n return [[\"datasets.\".concat(datasetType, \".elements.\").concat(elementType), \"datasets.\".concat(datasetType), \"elements.\".concat(elementType), '']];\n });\n }\n }, {\n key: \"pluginScopeKeys\",\n value: function pluginScopeKeys(plugin) {\n var id = plugin.id;\n var type = this.type;\n return cachedKeys(\"\".concat(type, \"-plugin-\").concat(id), function () {\n return [[\"plugins.\".concat(id)].concat(_toConsumableArray(plugin.additionalOptionScopes || []))];\n });\n }\n }, {\n key: \"_cachedScopes\",\n value: function _cachedScopes(mainScope, resetCache) {\n var _scopeCache = this._scopeCache;\n\n var cache = _scopeCache.get(mainScope);\n\n if (!cache || resetCache) {\n cache = new Map();\n\n _scopeCache.set(mainScope, cache);\n }\n\n return cache;\n }\n }, {\n key: \"getOptionScopes\",\n value: function getOptionScopes(mainScope, keyLists, resetCache) {\n var options = this.options,\n type = this.type;\n\n var cache = this._cachedScopes(mainScope, resetCache);\n\n var cached = cache.get(keyLists);\n\n if (cached) {\n return cached;\n }\n\n var scopes = new Set();\n keyLists.forEach(function (keys) {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(function (key) {\n return addIfFound(scopes, mainScope, key);\n });\n }\n\n keys.forEach(function (key) {\n return addIfFound(scopes, options, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, overrides[type] || {}, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, defaults, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, descriptors, key);\n });\n });\n\n var array = _toConsumableArray(scopes);\n\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n\n return array;\n }\n }, {\n key: \"chartOptionScopes\",\n value: function chartOptionScopes() {\n var options = this.options,\n type = this.type;\n return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n type: type\n }, defaults, descriptors];\n }\n }, {\n key: \"resolveNamedOptions\",\n value: function resolveNamedOptions(scopes, names, context) {\n var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];\n var result = {\n $shared: true\n };\n\n var _getResolver = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver.resolver,\n subPrefixes = _getResolver.subPrefixes;\n\n var options = resolver;\n\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n var subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n var _iterator5 = _createForOfIteratorHelper(names),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var prop = _step5.value;\n result[prop] = options[prop];\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n return result;\n }\n }, {\n key: \"createResolver\",\n value: function createResolver(scopes, context) {\n var prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];\n var descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;\n\n var _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver2.resolver;\n\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n }, {\n key: \"type\",\n get: function get() {\n return this._config.type;\n },\n set: function set(type) {\n this._config.type = type;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this._config.data;\n },\n set: function set(data) {\n this._config.data = initData(data);\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._config.options;\n },\n set: function set(options) {\n this._config.options = options;\n }\n }, {\n key: \"plugins\",\n get: function get() {\n return this._config.plugins;\n }\n }]);\n\n return Config;\n}();\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n var cache = resolverCache.get(scopes);\n\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n\n var cacheKey = prefixes.join();\n var cached = cache.get(cacheKey);\n\n if (!cached) {\n var resolver = _createResolver(scopes, prefixes);\n\n cached = {\n resolver: resolver,\n subPrefixes: prefixes.filter(function (p) {\n return !p.toLowerCase().includes('hover');\n })\n };\n cache.set(cacheKey, cached);\n }\n\n return cached;\n}\n\nfunction needContext(proxy, names) {\n var _descriptors2 = _descriptors(proxy),\n isScriptable = _descriptors2.isScriptable,\n isIndexable = _descriptors2.isIndexable;\n\n var _iterator6 = _createForOfIteratorHelper(names),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var prop = _step6.value;\n\n if (isScriptable(prop) && isFunction(proxy[prop]) || isIndexable(prop) && isArray(proxy[prop])) {\n return true;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n return false;\n}\n\nvar version = \"3.2.1\";\nvar KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\n\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\n\nfunction compare2Level(l1, l2) {\n return function (a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\n\nfunction onAnimationsComplete(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\nfunction isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nfunction getCanvas(item) {\n if (isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n\n if (item && item.canvas) {\n item = item.canvas;\n }\n\n return item;\n}\n\nvar instances = {};\n\nvar getChart = function getChart(key) {\n var canvas = getCanvas(key);\n return Object.values(instances).filter(function (c) {\n return c.canvas === canvas;\n }).pop();\n};\n\nvar Chart = /*#__PURE__*/function () {\n function Chart(item, config) {\n var _this5 = this;\n\n _classCallCheck(this, Chart);\n\n var me = this;\n this.config = config = new Config(config);\n var initialCanvas = getCanvas(item);\n var existingChart = getChart(initialCanvas);\n\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas can be reused.');\n }\n\n var options = config.createResolver(config.chartOptionScopes(), me.getContext());\n this.platform = me._initializePlatform(initialCanvas, config);\n var context = me.platform.acquireContext(initialCanvas, options.aspectRatio);\n var canvas = context && context.canvas;\n var height = canvas && canvas.height;\n var width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._sortedMetasets = [];\n this.scales = {};\n this.scale = undefined;\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce(function () {\n return _this5.update('resize');\n }, options.resizeDelay || 0);\n instances[me.id] = me;\n\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(me, 'complete', onAnimationsComplete);\n animator.listen(me, 'progress', onAnimationProgress);\n\n me._initialize();\n\n if (me.attached) {\n me.update();\n }\n }\n\n _createClass(Chart, [{\n key: \"_initialize\",\n value: function _initialize() {\n var me = this;\n me.notifyPlugins('beforeInit');\n\n if (me.options.responsive) {\n me.resize();\n } else {\n retinaScale(me, me.options.devicePixelRatio);\n }\n\n me.bindEvents();\n me.notifyPlugins('afterInit');\n return me;\n }\n }, {\n key: \"_initializePlatform\",\n value: function _initializePlatform(canvas, config) {\n if (config.platform) {\n return new config.platform();\n } else if (!isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return new BasicPlatform();\n }\n\n return new DomPlatform();\n }\n }, {\n key: \"clear\",\n value: function clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n animator.stop(this);\n return this;\n }\n }, {\n key: \"resize\",\n value: function resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width: width,\n height: height\n };\n }\n }\n }, {\n key: \"_resize\",\n value: function _resize(width, height) {\n var me = this;\n var options = me.options;\n var canvas = me.canvas;\n var aspectRatio = options.maintainAspectRatio && me.aspectRatio;\n var newSize = me.platform.getMaximumSize(canvas, width, height, aspectRatio);\n var oldRatio = me.currentDevicePixelRatio;\n var newRatio = options.devicePixelRatio || me.platform.getDevicePixelRatio();\n\n if (me.width === newSize.width && me.height === newSize.height && oldRatio === newRatio) {\n return;\n }\n\n me.width = newSize.width;\n me.height = newSize.height;\n me._aspectRatio = me.aspectRatio;\n retinaScale(me, newRatio, true);\n me.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [me, newSize], me);\n\n if (me.attached) {\n if (me._doResize()) {\n me.render();\n }\n }\n }\n }, {\n key: \"ensureScalesHaveIDs\",\n value: function ensureScalesHaveIDs() {\n var options = this.options;\n var scalesOptions = options.scales || {};\n each(scalesOptions, function (axisOptions, axisID) {\n axisOptions.id = axisID;\n });\n }\n }, {\n key: \"buildOrUpdateScales\",\n value: function buildOrUpdateScales() {\n var me = this;\n var options = me.options;\n var scaleOpts = options.scales;\n var scales = me.scales;\n var updated = Object.keys(scales).reduce(function (obj, id) {\n obj[id] = false;\n return obj;\n }, {});\n var items = [];\n\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map(function (id) {\n var scaleOptions = scaleOpts[id];\n var axis = determineAxis(id, scaleOptions);\n var isRadial = axis === 'r';\n var isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n\n each(items, function (item) {\n var scaleOptions = item.options;\n var id = scaleOptions.id;\n var axis = determineAxis(id, scaleOptions);\n var scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== 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 } else {\n var scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id: id,\n type: scaleType,\n ctx: me.ctx,\n chart: me\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n each(updated, function (hasUpdated, id) {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, function (scale) {\n layouts.configure(me, scale, scale.options);\n layouts.addBox(me, scale);\n });\n }\n }, {\n key: \"_updateMetasetIndex\",\n value: function _updateMetasetIndex(meta, index) {\n var metasets = this._metasets;\n var oldIndex = meta.index;\n\n if (oldIndex !== index) {\n metasets[oldIndex] = metasets[index];\n metasets[index] = meta;\n meta.index = index;\n }\n }\n }, {\n key: \"_updateMetasets\",\n value: function _updateMetasets() {\n var me = this;\n var metasets = me._metasets;\n var numData = me.data.datasets.length;\n var numMeta = metasets.length;\n\n if (numMeta > numData) {\n for (var i = numData; i < numMeta; ++i) {\n me._destroyDatasetMeta(i);\n }\n\n metasets.splice(numData, numMeta - numData);\n }\n\n me._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n }, {\n key: \"_removeUnreferencedMetasets\",\n value: function _removeUnreferencedMetasets() {\n var me = this;\n var metasets = me._metasets,\n datasets = me.data.datasets;\n\n if (metasets.length > datasets.length) {\n delete me._stacks;\n }\n\n metasets.forEach(function (meta, index) {\n if (datasets.filter(function (x) {\n return x === meta._dataset;\n }).length === 0) {\n me._destroyDatasetMeta(index);\n }\n });\n }\n }, {\n key: \"buildOrUpdateControllers\",\n value: function buildOrUpdateControllers() {\n var me = this;\n var newControllers = [];\n var datasets = me.data.datasets;\n var i, ilen;\n\n me._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n var dataset = datasets[i];\n var meta = me.getDatasetMeta(i);\n var type = dataset.type || me.config.type;\n\n if (meta.type && meta.type !== type) {\n me._destroyDatasetMeta(i);\n\n meta = me.getDatasetMeta(i);\n }\n\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, me.options);\n meta.order = dataset.order || 0;\n\n me._updateMetasetIndex(meta, i);\n\n meta.label = '' + dataset.label;\n meta.visible = me.isDatasetVisible(i);\n\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n var ControllerClass = registry.getController(type);\n var _defaults$datasets$ty = defaults.datasets[type],\n datasetElementType = _defaults$datasets$ty.datasetElementType,\n dataElementType = _defaults$datasets$ty.dataElementType;\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(me, i);\n newControllers.push(meta.controller);\n }\n }\n\n me._updateMetasets();\n\n return newControllers;\n }\n }, {\n key: \"_resetElements\",\n value: function _resetElements() {\n var me = this;\n each(me.data.datasets, function (dataset, datasetIndex) {\n me.getDatasetMeta(datasetIndex).controller.reset();\n }, me);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._resetElements();\n\n this.notifyPlugins('reset');\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var me = this;\n var config = me.config;\n config.update();\n me._options = config.createResolver(config.chartOptionScopes(), me.getContext());\n each(me.scales, function (scale) {\n layouts.removeBox(me, scale);\n });\n var animsDisabled = me._animationsDisabled = !me.options.animation;\n me.ensureScalesHaveIDs();\n me.buildOrUpdateScales();\n var existingEvents = new Set(Object.keys(me._listeners));\n var newEvents = new Set(me.options.events);\n\n if (!setsEqual(existingEvents, newEvents)) {\n me.unbindEvents();\n me.bindEvents();\n }\n\n me._plugins.invalidate();\n\n if (me.notifyPlugins('beforeUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n var newControllers = me.buildOrUpdateControllers();\n me.notifyPlugins('beforeElementsUpdate');\n var minPadding = 0;\n\n for (var i = 0, ilen = me.data.datasets.length; i < ilen; i++) {\n var _me$getDatasetMeta = me.getDatasetMeta(i),\n controller = _me$getDatasetMeta.controller;\n\n var reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n\n me._minPadding = minPadding;\n\n me._updateLayout(minPadding);\n\n if (!animsDisabled) {\n each(newControllers, function (controller) {\n controller.reset();\n });\n }\n\n me._updateDatasets(mode);\n\n me.notifyPlugins('afterUpdate', {\n mode: mode\n });\n\n me._layers.sort(compare2Level('z', '_idx'));\n\n if (me._lastEvent) {\n me._eventHandler(me._lastEvent, true);\n }\n\n me.render();\n }\n }, {\n key: \"_updateLayout\",\n value: function _updateLayout(minPadding) {\n var me = this;\n\n if (me.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n\n layouts.update(me, me.width, me.height, minPadding);\n var area = me.chartArea;\n var noArea = area.width <= 0 || area.height <= 0;\n me._layers = [];\n each(me.boxes, function (box) {\n var _me$_layers;\n\n if (noArea && box.position === 'chartArea') {\n return;\n }\n\n if (box.configure) {\n box.configure();\n }\n\n (_me$_layers = me._layers).push.apply(_me$_layers, _toConsumableArray(box._layers()));\n }, me);\n\n me._layers.forEach(function (item, index) {\n item._idx = index;\n });\n\n me.notifyPlugins('afterLayout');\n }\n }, {\n key: \"_updateDatasets\",\n value: function _updateDatasets(mode) {\n var me = this;\n var isFunction = typeof mode === 'function';\n\n if (me.notifyPlugins('beforeDatasetsUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n for (var i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me._updateDataset(i, isFunction ? mode({\n datasetIndex: i\n }) : mode);\n }\n\n me.notifyPlugins('afterDatasetsUpdate', {\n mode: mode\n });\n }\n }, {\n key: \"_updateDataset\",\n value: function _updateDataset(index, mode) {\n var me = this;\n var meta = me.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index,\n mode: mode,\n cancelable: true\n };\n\n if (me.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n me.notifyPlugins('afterDatasetUpdate', args);\n }\n }, {\n key: \"render\",\n value: function render() {\n var me = this;\n\n if (me.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n\n if (animator.has(me)) {\n if (me.attached && !animator.running(me)) {\n animator.start(me);\n }\n } else {\n me.draw();\n onAnimationsComplete({\n chart: me\n });\n }\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var i;\n\n if (me._resizeBeforeDraw) {\n var _me$_resizeBeforeDraw = me._resizeBeforeDraw,\n width = _me$_resizeBeforeDraw.width,\n height = _me$_resizeBeforeDraw.height;\n\n me._resize(width, height);\n\n me._resizeBeforeDraw = null;\n }\n\n me.clear();\n\n if (me.width <= 0 || me.height <= 0) {\n return;\n }\n\n if (me.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var layers = me._layers;\n\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(me.chartArea);\n }\n\n me._drawDatasets();\n\n for (; i < layers.length; ++i) {\n layers[i].draw(me.chartArea);\n }\n\n me.notifyPlugins('afterDraw');\n }\n }, {\n key: \"_getSortedDatasetMetas\",\n value: function _getSortedDatasetMetas(filterVisible) {\n var me = this;\n var metasets = me._sortedMetasets;\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n var meta = metasets[i];\n\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"getSortedVisibleDatasetMetas\",\n value: function getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n }, {\n key: \"_drawDatasets\",\n value: function _drawDatasets() {\n var me = this;\n\n if (me.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var metasets = me.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n me._drawDataset(metasets[i]);\n }\n\n me.notifyPlugins('afterDatasetsDraw');\n }\n }, {\n key: \"_drawDataset\",\n value: function _drawDataset(meta) {\n var me = this;\n var ctx = me.ctx;\n var clip = meta._clip;\n var area = me.chartArea;\n var args = {\n meta: meta,\n index: meta.index,\n cancelable: true\n };\n\n if (me.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? me.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? me.height : area.bottom + clip.bottom\n });\n meta.controller.draw();\n unclipArea(ctx);\n args.cancelable = false;\n me.notifyPlugins('afterDatasetDraw', args);\n }\n }, {\n key: \"getElementsAtEventForMode\",\n value: function getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n var method = Interaction.modes[mode];\n\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n }, {\n key: \"getDatasetMeta\",\n value: function getDatasetMeta(datasetIndex) {\n var me = this;\n var dataset = me.data.datasets[datasetIndex];\n var metasets = me._metasets;\n var meta = metasets.filter(function (x) {\n return x && x._dataset === dataset;\n }).pop();\n\n if (!meta) {\n meta = metasets[datasetIndex] = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n }\n\n return meta;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = {\n chart: this,\n type: 'chart'\n });\n }\n }, {\n key: \"getVisibleDatasetCount\",\n value: function getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n }, {\n key: \"isDatasetVisible\",\n value: function isDatasetVisible(datasetIndex) {\n var dataset = this.data.datasets[datasetIndex];\n\n if (!dataset) {\n return false;\n }\n\n var meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n }, {\n key: \"setDatasetVisibility\",\n value: function setDatasetVisibility(datasetIndex, visible) {\n var meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n }, {\n key: \"toggleDataVisibility\",\n value: function toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n }, {\n key: \"getDataVisibility\",\n value: function getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n }, {\n key: \"_updateDatasetVisibility\",\n value: function _updateDatasetVisibility(datasetIndex, visible) {\n var me = this;\n var mode = visible ? 'show' : 'hide';\n var meta = me.getDatasetMeta(datasetIndex);\n\n var anims = meta.controller._resolveAnimations(undefined, mode);\n\n me.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible: visible\n });\n me.update(function (ctx) {\n return ctx.datasetIndex === datasetIndex ? mode : undefined;\n });\n }\n }, {\n key: \"hide\",\n value: function hide(datasetIndex) {\n this._updateDatasetVisibility(datasetIndex, false);\n }\n }, {\n key: \"show\",\n value: function show(datasetIndex) {\n this._updateDatasetVisibility(datasetIndex, true);\n }\n }, {\n key: \"_destroyDatasetMeta\",\n value: function _destroyDatasetMeta(datasetIndex) {\n var me = this;\n var meta = me._metasets && me._metasets[datasetIndex];\n\n if (meta && meta.controller) {\n meta.controller._destroy();\n\n delete me._metasets[datasetIndex];\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n var me = this;\n var canvas = me.canvas,\n ctx = me.ctx;\n var i, ilen;\n me.stop();\n animator.remove(me);\n\n for (i = 0, ilen = me.data.datasets.length; i < ilen; ++i) {\n me._destroyDatasetMeta(i);\n }\n\n me.config.clearCache();\n\n if (canvas) {\n me.unbindEvents();\n clearCanvas(canvas, ctx);\n me.platform.releaseContext(ctx);\n me.canvas = null;\n me.ctx = null;\n }\n\n me.notifyPlugins('destroy');\n delete instances[me.id];\n }\n }, {\n key: \"toBase64Image\",\n value: function toBase64Image() {\n var _this$canvas;\n\n return (_this$canvas = this.canvas).toDataURL.apply(_this$canvas, arguments);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n var me = this;\n var listeners = me._listeners;\n var platform = me.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(me, type, listener);\n listeners[type] = listener;\n };\n\n var _remove = function _remove(type, listener) {\n if (listeners[type]) {\n platform.removeEventListener(me, type, listener);\n delete listeners[type];\n }\n };\n\n var listener = function listener(e, x, y) {\n e.offsetX = x;\n e.offsetY = y;\n\n me._eventHandler(e);\n };\n\n each(me.options.events, function (type) {\n return _add(type, listener);\n });\n\n if (me.options.responsive) {\n listener = function listener(width, height) {\n if (me.canvas) {\n me.resize(width, height);\n }\n };\n\n var detached;\n\n var attached = function attached() {\n _remove('attach', attached);\n\n me.attached = true;\n me.resize();\n\n _add('resize', listener);\n\n _add('detach', detached);\n };\n\n detached = function detached() {\n me.attached = false;\n\n _remove('resize', listener);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(me.canvas)) {\n attached();\n } else {\n detached();\n }\n } else {\n me.attached = true;\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var me = this;\n var listeners = me._listeners;\n\n if (!listeners) {\n return;\n }\n\n me._listeners = {};\n each(listeners, function (listener, type) {\n me.platform.removeEventListener(me, type, listener);\n });\n }\n }, {\n key: \"updateHoverStyle\",\n value: function updateHoverStyle(items, mode, enabled) {\n var prefix = enabled ? 'set' : 'remove';\n var meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n var controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements) {\n var me = this;\n var lastActive = me._active || [];\n var active = activeElements.map(function (_ref) {\n var datasetIndex = _ref.datasetIndex,\n index = _ref.index;\n var meta = me.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n me._active = active;\n\n me._updateHoverStyles(active, lastActive);\n }\n }\n }, {\n key: \"notifyPlugins\",\n value: function notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n }, {\n key: \"_updateHoverStyles\",\n value: function _updateHoverStyles(active, lastActive, replay) {\n var me = this;\n var hoverOptions = me.options.hover;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.datasetIndex === y.datasetIndex && x.index === y.index;\n });\n });\n };\n\n var deactivated = diff(lastActive, active);\n var activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n me.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n me.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n }, {\n key: \"_eventHandler\",\n value: function _eventHandler(e, replay) {\n var _this6 = this;\n\n var me = this;\n var args = {\n event: e,\n replay: replay,\n cancelable: true\n };\n\n var eventFilter = function eventFilter(plugin) {\n return (plugin.options.events || _this6.options.events).includes(e.type);\n };\n\n if (me.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n var changed = me._handleEvent(e, replay);\n\n args.cancelable = false;\n me.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n me.render();\n }\n\n return me;\n }\n }, {\n key: \"_handleEvent\",\n value: function _handleEvent(e, replay) {\n var me = this;\n var _me$_active = me._active,\n lastActive = _me$_active === void 0 ? [] : _me$_active,\n options = me.options;\n var hoverOptions = options.hover;\n var useFinalPosition = replay;\n var active = [];\n var changed = false;\n var lastEvent = null;\n\n if (e.type !== 'mouseout') {\n active = me.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n lastEvent = e.type === 'click' ? me._lastEvent : e;\n }\n\n me._lastEvent = null;\n\n if (_isPointInArea(e, me.chartArea, me._minPadding)) {\n callback(options.onHover, [e, active, me], me);\n\n if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {\n callback(options.onClick, [e, active, me], me);\n }\n }\n\n changed = !_elementsEqual(active, lastActive);\n\n if (changed || replay) {\n me._active = active;\n\n me._updateHoverStyles(active, lastActive, replay);\n }\n\n me._lastEvent = lastEvent;\n return changed;\n }\n }, {\n key: \"aspectRatio\",\n get: function get() {\n var _this$options3 = this.options,\n aspectRatio = _this$options3.aspectRatio,\n maintainAspectRatio = _this$options3.maintainAspectRatio,\n width = this.width,\n height = this.height,\n _aspectRatio = this._aspectRatio;\n\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n\n return height ? width / height : null;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this.config.data;\n },\n set: function set(data) {\n this.config.data = data;\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(options) {\n this.config.options = options;\n }\n }]);\n\n return Chart;\n}();\n\nvar invalidatePlugins = function invalidatePlugins() {\n return each(Chart.instances, function (chart) {\n return chart._plugins.invalidate();\n });\n};\n\nvar enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable: enumerable,\n value: defaults\n },\n instances: {\n enumerable: enumerable,\n value: instances\n },\n overrides: {\n enumerable: enumerable,\n value: overrides\n },\n registry: {\n enumerable: enumerable,\n value: registry\n },\n version: {\n enumerable: enumerable,\n value: version\n },\n getChart: {\n enumerable: enumerable,\n value: getChart\n },\n register: {\n enumerable: enumerable,\n value: function value() {\n registry.add.apply(registry, arguments);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable: enumerable,\n value: function value() {\n registry.remove.apply(registry, arguments);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element) {\n var startAngle = element.startAngle,\n endAngle = element.endAngle,\n pixelMargin = element.pixelMargin,\n x = element.x,\n y = element.y,\n outerRadius = element.outerRadius,\n innerRadius = element.innerRadius;\n var angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n var o = toRadiusCorners(arc.options.borderRadius);\n var halfThickness = (outerRadius - innerRadius) / 2;\n var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n var computeOuterLimit = function computeOuterLimit(val) {\n var outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n\nfunction pathArc(ctx, element) {\n var x = element.x,\n y = element.y,\n startAngle = element.startAngle,\n endAngle = element.endAngle,\n pixelMargin = element.pixelMargin;\n var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n var innerRadius = element.innerRadius + pixelMargin;\n\n var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),\n outerStart = _parseBorderRadius$.outerStart,\n outerEnd = _parseBorderRadius$.outerEnd,\n innerStart = _parseBorderRadius$.innerStart,\n innerEnd = _parseBorderRadius$.innerEnd;\n\n var outerStartAdjustedRadius = outerRadius - outerStart;\n var outerEndAdjustedRadius = outerRadius - outerEnd;\n var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n var innerStartAdjustedRadius = innerRadius + innerStart;\n var innerEndAdjustedRadius = innerRadius + innerEnd;\n var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n\n if (outerEnd > 0) {\n var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n if (innerEnd > 0) {\n var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n\n ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);\n\n if (innerStart > 0) {\n var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n if (outerStart > 0) {\n var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(ctx, element) {\n if (element.fullCircles) {\n element.endAngle = element.startAngle + TAU;\n pathArc(ctx, element);\n\n for (var i = 0; i < element.fullCircles; ++i) {\n ctx.fill();\n }\n }\n\n if (!isNaN(element.circumference)) {\n element.endAngle = element.startAngle + element.circumference % TAU;\n }\n\n pathArc(ctx, element);\n ctx.fill();\n}\n\nfunction drawFullCircleBorders(ctx, element, inner) {\n var x = element.x,\n y = element.y,\n startAngle = element.startAngle,\n endAngle = element.endAngle,\n pixelMargin = element.pixelMargin;\n var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n var innerRadius = element.innerRadius + pixelMargin;\n var i;\n\n if (inner) {\n element.endAngle = element.startAngle + TAU;\n clipArc(ctx, element);\n element.endAngle = endAngle;\n\n if (element.endAngle === element.startAngle) {\n element.endAngle += TAU;\n element.fullCircles--;\n }\n }\n\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n\n for (i = 0; i < element.fullCircles; ++i) {\n ctx.stroke();\n }\n\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n\n for (i = 0; i < element.fullCircles; ++i) {\n ctx.stroke();\n }\n}\n\nfunction drawBorder(ctx, element) {\n var options = element.options;\n var inner = options.borderAlign === 'inner';\n\n if (!options.borderWidth) {\n return;\n }\n\n if (inner) {\n ctx.lineWidth = options.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = options.borderWidth;\n ctx.lineJoin = 'bevel';\n }\n\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n\n if (inner) {\n clipArc(ctx, element);\n }\n\n pathArc(ctx, element);\n ctx.stroke();\n}\n\nvar ArcElement = /*#__PURE__*/function (_Element2) {\n _inherits(ArcElement, _Element2);\n\n var _super12 = _createSuper(ArcElement);\n\n function ArcElement(cfg) {\n var _this7;\n\n _classCallCheck(this, ArcElement);\n\n _this7 = _super12.call(this);\n _this7.options = undefined;\n _this7.circumference = undefined;\n _this7.startAngle = undefined;\n _this7.endAngle = undefined;\n _this7.innerRadius = undefined;\n _this7.outerRadius = undefined;\n _this7.pixelMargin = 0;\n _this7.fullCircles = 0;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this7), cfg);\n }\n\n return _this7;\n }\n\n _createClass(ArcElement, [{\n key: \"inRange\",\n value: function inRange(chartX, chartY, useFinalPosition) {\n var point = this.getProps(['x', 'y'], useFinalPosition);\n\n var _getAngleFromPoint = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n }),\n angle = _getAngleFromPoint.angle,\n distance = _getAngleFromPoint.distance;\n\n var _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n startAngle = _this$getProps2.startAngle,\n endAngle = _this$getProps2.endAngle,\n innerRadius = _this$getProps2.innerRadius,\n outerRadius = _this$getProps2.outerRadius,\n circumference = _this$getProps2.circumference;\n\n var betweenAngles = circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n\n var withinRadius = distance >= innerRadius && distance <= outerRadius;\n return betweenAngles && withinRadius;\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius'], useFinalPosition),\n x = _this$getProps3.x,\n y = _this$getProps3.y,\n startAngle = _this$getProps3.startAngle,\n endAngle = _this$getProps3.endAngle,\n innerRadius = _this$getProps3.innerRadius,\n outerRadius = _this$getProps3.outerRadius;\n\n var halfAngle = (startAngle + endAngle) / 2;\n var halfRadius = (innerRadius + outerRadius) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n }, {\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var me = this;\n var options = me.options;\n var offset = options.offset || 0;\n me.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n me.fullCircles = Math.floor(me.circumference / TAU);\n\n if (me.circumference === 0 || me.innerRadius < 0 || me.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n\n if (offset && me.circumference < TAU) {\n var halfAngle = (me.startAngle + me.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n }\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, me);\n drawBorder(ctx, me);\n ctx.restore();\n }\n }]);\n\n return ArcElement;\n}(Element);\n\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n angle: undefined\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options) {\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : options;\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var count = points.length;\n var _params$start = params.start,\n paramsStart = _params$start === void 0 ? 0 : _params$start,\n _params$end = params.end,\n paramsEnd = _params$end === void 0 ? count - 1 : _params$end;\n var segmentStart = segment.start,\n segmentEnd = segment.end;\n var start = Math.max(paramsStart, segmentStart);\n var end = Math.min(paramsEnd, segmentEnd);\n var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count: count,\n start: start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\nfunction pathSegment(ctx, line, segment, params) {\n var points = line.points,\n options = line.options;\n\n var _pathVars = pathVars(points, segment, params),\n count = _pathVars.count,\n start = _pathVars.start,\n loop = _pathVars.loop,\n ilen = _pathVars.ilen;\n\n var lineMethod = getLineMethod(options);\n\n var _ref2 = params || {},\n _ref2$move = _ref2.move,\n move = _ref2$move === void 0 ? true : _ref2$move,\n reverse = _ref2.reverse;\n\n var i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\nfunction fastPathSegment(ctx, line, segment, params) {\n var points = line.points;\n\n var _pathVars2 = pathVars(points, segment, params),\n count = _pathVars2.count,\n start = _pathVars2.start,\n ilen = _pathVars2.ilen;\n\n var _ref3 = params || {},\n _ref3$move = _ref3.move,\n move = _ref3$move === void 0 ? true : _ref3$move,\n reverse = _ref3.reverse;\n\n var avgX = 0;\n var countX = 0;\n var i, point, prevX, minY, maxY, lastY;\n\n var pointIndex = function pointIndex(index) {\n return (start + (reverse ? ilen - index : index)) % count;\n };\n\n var drawX = function drawX() {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n continue;\n }\n\n var x = point.x;\n var y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n\n lastY = y;\n }\n\n drawX();\n}\n\nfunction _getSegmentMethod(line) {\n var opts = line.options;\n var borderDash = opts.borderDash && opts.borderDash.length;\n var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n var path = line._path;\n\n if (!path) {\n path = line._path = new Path2D();\n\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n var segments = line.segments,\n options = line.options;\n\n var segmentMethod = _getSegmentMethod(line);\n\n var _iterator7 = _createForOfIteratorHelper(segments),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var segment = _step7.value;\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n\n if (segmentMethod(ctx, line, segment, {\n start: start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n\n ctx.stroke();\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n}\n\nvar usePath2D = typeof Path2D === 'function';\n\nfunction _draw(ctx, line, start, count) {\n if (usePath2D && line.segments.length === 1) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\n\nvar LineElement = /*#__PURE__*/function (_Element3) {\n _inherits(LineElement, _Element3);\n\n var _super13 = _createSuper(LineElement);\n\n function LineElement(cfg) {\n var _this8;\n\n _classCallCheck(this, LineElement);\n\n _this8 = _super13.call(this);\n _this8.animated = true;\n _this8.options = undefined;\n _this8._loop = undefined;\n _this8._fullLoop = undefined;\n _this8._path = undefined;\n _this8._points = undefined;\n _this8._segments = undefined;\n _this8._decimated = false;\n _this8._pointsUpdated = false;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this8), cfg);\n }\n\n return _this8;\n }\n\n _createClass(LineElement, [{\n key: \"updateControlPoints\",\n value: function updateControlPoints(chartArea) {\n var me = this;\n var options = me.options;\n\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !me._pointsUpdated) {\n var loop = options.spanGaps ? me._loop : me._fullLoop;\n\n _updateBezierControlPoints(me._points, options, chartArea, loop);\n\n me._pointsUpdated = true;\n }\n }\n }, {\n key: \"first\",\n value: function first() {\n var segments = this.segments;\n var points = this.points;\n return segments.length && points[segments[0].start];\n }\n }, {\n key: \"last\",\n value: function last() {\n var segments = this.segments;\n var points = this.points;\n var count = segments.length;\n return count && points[segments[count - 1].end];\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point, property) {\n var me = this;\n var options = me.options;\n var value = point[property];\n var points = me.points;\n\n var segments = _boundSegments(me, {\n property: property,\n start: value,\n end: value\n });\n\n if (!segments.length) {\n return;\n }\n\n var result = [];\n\n var _interpolate = _getInterpolationMethod(options);\n\n var i, ilen;\n\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n var _segments$i = segments[i],\n start = _segments$i.start,\n end = _segments$i.end;\n var p1 = points[start];\n var p2 = points[end];\n\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n\n var t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n\n var interpolated = _interpolate(p1, p2, t, options.stepped);\n\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n\n return result.length === 1 ? result[0] : result;\n }\n }, {\n key: \"pathSegment\",\n value: function pathSegment(ctx, segment, params) {\n var segmentMethod = _getSegmentMethod(this);\n\n return segmentMethod(ctx, this, segment, params);\n }\n }, {\n key: \"path\",\n value: function path(ctx, start, count) {\n var me = this;\n var segments = me.segments;\n\n var segmentMethod = _getSegmentMethod(me);\n\n var loop = me._loop;\n start = start || 0;\n count = count || me.points.length - start;\n\n var _iterator8 = _createForOfIteratorHelper(segments),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var segment = _step8.value;\n loop &= segmentMethod(ctx, me, segment, {\n start: start,\n end: start + count - 1\n });\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n return !!loop;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, chartArea, start, count) {\n var me = this;\n var options = me.options || {};\n var points = me.points || [];\n\n if (!points.length || !options.borderWidth) {\n return;\n }\n\n ctx.save();\n\n _draw(ctx, me, start, count);\n\n ctx.restore();\n\n if (me.animated) {\n me._pointsUpdated = false;\n me._path = undefined;\n }\n }\n }, {\n key: \"points\",\n set: function set(points) {\n var me = this;\n me._points = points;\n delete me._segments;\n delete me._path;\n me._pointsUpdated = false;\n },\n get: function get() {\n return this._points;\n }\n }, {\n key: \"segments\",\n get: function get() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n }]);\n\n return LineElement;\n}(Element);\n\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'fill';\n }\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n var options = el.options;\n\n var _el$getProps = el.getProps([axis], useFinalPosition),\n value = _el$getProps[axis];\n\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\n\nvar PointElement = /*#__PURE__*/function (_Element4) {\n _inherits(PointElement, _Element4);\n\n var _super14 = _createSuper(PointElement);\n\n function PointElement(cfg) {\n var _this9;\n\n _classCallCheck(this, PointElement);\n\n _this9 = _super14.call(this);\n _this9.options = undefined;\n _this9.parsed = undefined;\n _this9.skip = undefined;\n _this9.stop = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this9), cfg);\n }\n\n return _this9;\n }\n\n _createClass(PointElement, [{\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n var options = this.options;\n\n var _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps4.x,\n y = _this$getProps4.y;\n\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps5.x,\n y = _this$getProps5.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"size\",\n value: function size(options) {\n options = options || this.options || {};\n var radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n var borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var me = this;\n var options = me.options;\n\n if (me.skip || options.radius < 0.1) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, me.x, me.y);\n }\n }, {\n key: \"getRange\",\n value: function getRange() {\n var options = this.options || {};\n return options.radius + options.hitRadius;\n }\n }]);\n\n return PointElement;\n}(Element);\n\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n var _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),\n x = _bar$getProps.x,\n y = _bar$getProps.y,\n base = _bar$getProps.base,\n width = _bar$getProps.width,\n height = _bar$getProps.height;\n\n var left, right, top, bottom, half;\n\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\n\nfunction parseBorderSkipped(bar) {\n var edge = bar.options.borderSkipped;\n var res = {};\n\n if (!edge) {\n return res;\n }\n\n edge = bar.horizontal ? parseEdge(edge, 'left', 'right', bar.base > bar.x) : parseEdge(edge, 'bottom', 'top', bar.base < bar.y);\n res[edge] = true;\n return res;\n}\n\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : Math.max(Math.min(value, max), min);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n var value = bar.options.borderWidth;\n var skip = parseBorderSkipped(bar);\n var o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n var _bar$getProps2 = bar.getProps(['enableBorderRadius']),\n enableBorderRadius = _bar$getProps2.enableBorderRadius;\n\n var value = bar.options.borderRadius;\n var o = toTRBLCorners(value);\n var maxR = Math.min(maxW, maxH);\n var skip = parseBorderSkipped(bar);\n var enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\n\nfunction boundingRects(bar) {\n var bounds = getBarBounds(bar);\n var width = bounds.right - bounds.left;\n var height = bounds.bottom - bounds.top;\n var border = parseBorderWidth(bar, width / 2, height / 2);\n var radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius: radius\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 radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\n\nfunction _inRange(bar, x, y, useFinalPosition) {\n var skipX = x === null;\n var skipY = y === null;\n var skipBoth = skipX && skipY;\n var bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || x >= bounds.left && x <= bounds.right) && (skipY || y >= bounds.top && y <= bounds.bottom);\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nvar BarElement = /*#__PURE__*/function (_Element5) {\n _inherits(BarElement, _Element5);\n\n var _super15 = _createSuper(BarElement);\n\n function BarElement(cfg) {\n var _this10;\n\n _classCallCheck(this, BarElement);\n\n _this10 = _super15.call(this);\n _this10.options = undefined;\n _this10.horizontal = undefined;\n _this10.base = undefined;\n _this10.width = undefined;\n _this10.height = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this10), cfg);\n }\n\n return _this10;\n }\n\n _createClass(BarElement, [{\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options;\n\n var _boundingRects = boundingRects(this),\n inner = _boundingRects.inner,\n outer = _boundingRects.outer;\n\n var addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, outer);\n ctx.clip();\n addRectPath(ctx, inner);\n ctx.fillStyle = options.borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inner);\n ctx.fillStyle = options.backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }, {\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n return _inRange(this, mouseX, mouseY, useFinalPosition);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return _inRange(this, mouseX, null, useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return _inRange(this, null, mouseY, useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),\n x = _this$getProps6.x,\n y = _this$getProps6.y,\n base = _this$getProps6.base,\n horizontal = _this$getProps6.horizontal;\n\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n }, {\n key: \"getRange\",\n value: function getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n }]);\n\n return BarElement;\n}(Element);\n\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n enableBorderRadius: true,\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nvar elements = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArcElement: ArcElement,\n LineElement: LineElement,\n PointElement: PointElement,\n BarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n var samples = options.samples || availableWidth;\n\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n\n var decimated = [];\n var bucketWidth = (count - 2) / (samples - 2);\n var sampledIndex = 0;\n var endIndex = start + count - 1;\n var a = start;\n var i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n\n for (i = 0; i < samples - 2; i++) {\n var avgX = 0;\n var avgY = 0;\n var j = void 0;\n var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n var avgRangeLength = avgRangeEnd - avgRangeStart;\n\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n var rangeTo = Math.floor((i + 1) * bucketWidth) + 1 + start;\n var _data$a = data[a],\n pointAx = _data$a.x,\n pointAy = _data$a.y;\n maxArea = area = -1;\n\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n var avgX = 0;\n var countX = 0;\n var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n var decimated = [];\n var endIndex = start + count - 1;\n var xMin = data[start].x;\n var xMax = data[endIndex].x;\n var dx = xMax - xMin;\n\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n var lastIndex = i - 1;\n\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n var intermediateIndex1 = Math.min(minIndex, maxIndex);\n var intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex1]), {}, {\n x: avgX\n }));\n }\n\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex2]), {}, {\n x: avgX\n }));\n }\n }\n\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n\n return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n var data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n value: data\n });\n }\n}\n\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach(function (dataset) {\n cleanDecimatedDataset(dataset);\n });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n var pointCount = points.length;\n var start = 0;\n var count;\n var iScale = meta.iScale;\n\n var _iScale$getUserBounds2 = iScale.getUserBounds(),\n min = _iScale$getUserBounds2.min,\n max = _iScale$getUserBounds2.max,\n minDefined = _iScale$getUserBounds2.minDefined,\n maxDefined = _iScale$getUserBounds2.maxDefined;\n\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: function beforeElementsUpdate(chart, args, options) {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n\n var availableWidth = chart.width;\n chart.data.datasets.forEach(function (dataset, datasetIndex) {\n var _data = dataset._data,\n indexAxis = dataset.indexAxis;\n var meta = chart.getDatasetMeta(datasetIndex);\n var data = _data || dataset.data;\n\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n\n if (meta.type !== 'line') {\n return;\n }\n\n var xAxis = chart.scales[meta.xAxisID];\n\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n\n if (chart.options.parsing) {\n return;\n }\n\n var _getStartAndCountOfVi2 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n start = _getStartAndCountOfVi2.start,\n count = _getStartAndCountOfVi2.count;\n\n if (count <= 4 * availableWidth) {\n cleanDecimatedDataset(dataset);\n return;\n }\n\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function get() {\n return this._decimated;\n },\n set: function set(d) {\n this._data = d;\n }\n });\n }\n\n var decimated;\n\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n\n default:\n throw new Error(\"Unsupported decimation algorithm '\".concat(options.algorithm, \"'\"));\n }\n\n dataset._decimated = decimated;\n });\n },\n destroy: function destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n var meta = chart.getDatasetMeta(index);\n var visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction parseFillOption(line) {\n var options = line.options;\n var fillOption = options.fill;\n var fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n\n return fill;\n}\n\nfunction decodeFill(line, index, count) {\n var fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n var target = parseFloat(fill);\n\n if (isNumberFinite(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 return ['origin', 'start', 'end', 'stack'].indexOf(fill) >= 0 && fill;\n}\n\nfunction computeLinearBoundary(source) {\n var _source$scale = source.scale,\n scale = _source$scale === void 0 ? {} : _source$scale,\n fill = source.fill;\n var target = null;\n var horizontal;\n\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n\n return null;\n}\n\nvar simpleArc = /*#__PURE__*/function () {\n function simpleArc(opts) {\n _classCallCheck(this, simpleArc);\n\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n _createClass(simpleArc, [{\n key: \"pathSegment\",\n value: function pathSegment(ctx, bounds, opts) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n var angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle: angle\n };\n }\n }]);\n\n return simpleArc;\n}();\n\nfunction computeCircularBoundary(source) {\n var scale = source.scale,\n fill = source.fill;\n var options = scale.options;\n var length = scale.getLabels().length;\n var target = [];\n var start = options.reverse ? scale.max : scale.min;\n var end = options.reverse ? scale.min : scale.max;\n var i, center, value;\n\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n\n return target;\n}\n\nfunction computeBoundary(source) {\n var scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n\n return computeLinearBoundary(source);\n}\n\nfunction pointsFromSegments(boundary, line) {\n var _ref4 = boundary || {},\n _ref4$x = _ref4.x,\n x = _ref4$x === void 0 ? null : _ref4$x,\n _ref4$y = _ref4.y,\n y = _ref4$y === void 0 ? null : _ref4$y;\n\n var linePoints = line.points;\n var points = [];\n line.segments.forEach(function (segment) {\n var first = linePoints[segment.start];\n var last = linePoints[segment.end];\n\n if (y !== null) {\n points.push({\n x: first.x,\n y: y\n });\n points.push({\n x: last.x,\n y: y\n });\n } else if (x !== null) {\n points.push({\n x: x,\n y: first.y\n });\n points.push({\n x: x,\n y: last.y\n });\n }\n });\n return points;\n}\n\nfunction buildStackLine(source) {\n var chart = source.chart,\n scale = source.scale,\n index = source.index,\n line = source.line;\n var points = [];\n var segments = line.segments;\n var sourcePoints = line.points;\n var linesBelow = getLinesBelow(chart, index);\n linesBelow.push(createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n for (var j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n\n return new LineElement({\n points: points,\n options: {}\n });\n}\n\nvar isLineAndNotInHideAnimation = function isLineAndNotInHideAnimation(meta) {\n return meta.type === 'line' && !meta.hidden;\n};\n\nfunction getLinesBelow(chart, index) {\n var below = [];\n var metas = chart.getSortedVisibleDatasetMetas();\n\n for (var i = 0; i < metas.length; i++) {\n var meta = metas[i];\n\n if (meta.index === index) {\n break;\n }\n\n if (isLineAndNotInHideAnimation(meta)) {\n below.unshift(meta.dataset);\n }\n }\n\n return below;\n}\n\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n var postponed = [];\n\n for (var j = 0; j < linesBelow.length; j++) {\n var line = linesBelow[j];\n\n var _findPoint = findPoint(line, sourcePoint, 'x'),\n first = _findPoint.first,\n last = _findPoint.last,\n point = _findPoint.point;\n\n if (!point || first && last) {\n continue;\n }\n\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n\n if (!last) {\n break;\n }\n }\n }\n\n points.push.apply(points, postponed);\n}\n\nfunction findPoint(line, sourcePoint, property) {\n var point = line.interpolate(sourcePoint, property);\n\n if (!point) {\n return {};\n }\n\n var pointValue = point[property];\n var segments = line.segments;\n var linePoints = line.points;\n var first = false;\n var last = false;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var firstValue = linePoints[segment.start][property];\n var lastValue = linePoints[segment.end][property];\n\n if (pointValue >= firstValue && pointValue <= lastValue) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n\n return {\n first: first,\n last: last,\n point: point\n };\n}\n\nfunction getTarget(source) {\n var chart = source.chart,\n fill = source.fill,\n line = source.line;\n\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n\n var boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return createBoundaryLine(boundary, line);\n}\n\nfunction createBoundaryLine(boundary, line) {\n var points = [];\n var _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points: points,\n options: {\n tension: 0\n },\n _loop: _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nfunction 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 (!isNumberFinite(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\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n\n var start = first[property];\n var end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n\n return {\n property: property,\n start: start,\n end: end\n };\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _segments(line, target, property) {\n var segments = line.segments;\n var points = line.points;\n var tpoints = target.points;\n var parts = [];\n\n var _iterator9 = _createForOfIteratorHelper(segments),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var segment = _step9.value;\n var bounds = getBounds(property, points[segment.start], points[segment.end], segment.loop);\n\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[segment.start],\n end: points[segment.end]\n });\n continue;\n }\n\n var targetSegments = _boundSegments(target, bounds);\n\n var _iterator10 = _createForOfIteratorHelper(targetSegments),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var tgt = _step10.value;\n var subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n\n var fillSources = _boundSegment(segment, points, subBounds);\n\n var _iterator11 = _createForOfIteratorHelper(fillSources),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var fillSource = _step11.value;\n parts.push({\n source: fillSource,\n target: tgt,\n start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),\n end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))\n });\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n return parts;\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n var _scale$chart$chartAre = scale.chart.chartArea,\n top = _scale$chart$chartAre.top,\n bottom = _scale$chart$chartAre.bottom;\n\n var _ref5 = bounds || {},\n property = _ref5.property,\n start = _ref5.start,\n end = _ref5.end;\n\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n var interpolatedPoint = target.interpolate(point, property);\n\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nfunction _fill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n property = cfg.property,\n color = cfg.color,\n scale = cfg.scale;\n\n var segments = _segments(line, target, property);\n\n var _iterator12 = _createForOfIteratorHelper(segments),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var _step12$value = _step12.value,\n src = _step12$value.source,\n tgt = _step12$value.target,\n start = _step12$value.start,\n end = _step12$value.end;\n var _src$style = src.style;\n _src$style = _src$style === void 0 ? {} : _src$style;\n var _src$style$background = _src$style.backgroundColor,\n backgroundColor = _src$style$background === void 0 ? color : _src$style$background;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, getBounds(property, start, end));\n ctx.beginPath();\n var lineLoop = !!line.pathSegment(ctx, src);\n\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n var targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n var loop = lineLoop && targetLoop;\n\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n}\n\nfunction doFill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n above = cfg.above,\n below = cfg.below,\n area = cfg.area,\n scale = cfg.scale;\n var property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n\n _fill(ctx, {\n line: line,\n target: target,\n color: above,\n scale: scale,\n property: property\n });\n\n ctx.restore();\n ctx.save();\n\n _clip(ctx, target, area.bottom);\n }\n\n _fill(ctx, {\n line: line,\n target: target,\n color: below,\n scale: scale,\n property: property\n });\n\n ctx.restore();\n}\n\nfunction drawfill(ctx, source, area) {\n var target = getTarget(source);\n var line = source.line,\n scale = source.scale,\n axis = source.axis;\n var lineOpts = line.options;\n var fillOption = lineOpts.fill;\n var color = lineOpts.backgroundColor;\n\n var _ref6 = fillOption || {},\n _ref6$above = _ref6.above,\n above = _ref6$above === void 0 ? color : _ref6$above,\n _ref6$below = _ref6.below,\n below = _ref6$below === void 0 ? color : _ref6$below;\n\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line: line,\n target: target,\n above: above,\n below: below,\n area: area,\n scale: scale,\n axis: axis\n });\n unclipArea(ctx);\n }\n}\n\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {\n var count = (chart.data.datasets || []).length;\n var sources = [];\n var meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart: chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line: line\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 || source.fill === false) {\n continue;\n }\n\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw: function beforeDraw(chart, _args, options) {\n var draw = options.drawTime === 'beforeDraw';\n var metasets = chart.getSortedVisibleDatasetMetas();\n var area = chart.chartArea;\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area);\n\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n var metasets = chart.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {\n var source = args.meta.$filler;\n\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nvar getBoxSize = function getBoxSize(labelOpts, fontSize) {\n var _labelOpts$boxHeight = labelOpts.boxHeight,\n boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,\n _labelOpts$boxWidth = labelOpts.boxWidth,\n boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth: boxWidth,\n boxHeight: boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nvar itemsEqual = function itemsEqual(a, b) {\n return a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n};\n\nvar Legend = /*#__PURE__*/function (_Element6) {\n _inherits(Legend, _Element6);\n\n var _super16 = _createSuper(Legend);\n\n function Legend(config) {\n var _this11;\n\n _classCallCheck(this, Legend);\n\n _this11 = _super16.call(this);\n _this11._added = false;\n _this11.legendHitBoxes = [];\n _this11._hoveredItem = null;\n _this11.doughnutMode = false;\n _this11.chart = config.chart;\n _this11.options = config.options;\n _this11.ctx = config.ctx;\n _this11.legendItems = undefined;\n _this11.columnSizes = undefined;\n _this11.lineWidths = undefined;\n _this11.maxHeight = undefined;\n _this11.maxWidth = undefined;\n _this11.top = undefined;\n _this11.bottom = undefined;\n _this11.left = undefined;\n _this11.right = undefined;\n _this11.height = undefined;\n _this11.width = undefined;\n _this11._margins = undefined;\n _this11.position = undefined;\n _this11.weight = undefined;\n _this11.fullSize = undefined;\n return _this11;\n }\n\n _createClass(Legend, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n var me = this;\n me.maxWidth = maxWidth;\n me.maxHeight = maxHeight;\n me._margins = margins;\n me.setDimensions();\n me.buildLabels();\n me.fit();\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n var me = this;\n\n if (me.isHorizontal()) {\n me.width = me.maxWidth;\n me.left = 0;\n me.right = me.width;\n } else {\n me.height = me.maxHeight;\n me.top = 0;\n me.bottom = me.height;\n }\n }\n }, {\n key: \"buildLabels\",\n value: function buildLabels() {\n var me = this;\n var labelOpts = me.options.labels || {};\n var legendItems = 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 (labelOpts.sort) {\n legendItems = legendItems.sort(function (a, b) {\n return labelOpts.sort(a, b, me.chart.data);\n });\n }\n\n if (me.options.reverse) {\n legendItems.reverse();\n }\n\n me.legendItems = legendItems;\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var me = this;\n var options = me.options,\n ctx = me.ctx;\n\n if (!options.display) {\n me.width = me.height = 0;\n return;\n }\n\n var labelOpts = options.labels;\n var labelFont = toFont(labelOpts.font);\n var fontSize = labelFont.size;\n\n var titleHeight = me._computeTitleHeight();\n\n var _getBoxSize = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize.boxWidth,\n itemHeight = _getBoxSize.itemHeight;\n\n var width, height;\n ctx.font = labelFont.string;\n\n if (me.isHorizontal()) {\n width = me.maxWidth;\n height = me._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = me.maxHeight;\n width = me._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n\n me.width = Math.min(width, options.maxWidth || me.maxWidth);\n me.height = Math.min(height, options.maxHeight || me.maxHeight);\n }\n }, {\n key: \"_fitRows\",\n value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n var me = this;\n var ctx = me.ctx,\n maxWidth = me.maxWidth,\n padding = me.options.labels.padding;\n var hitboxes = me.legendHitBoxes = [];\n var lineWidths = me.lineWidths = [0];\n var lineHeight = itemHeight + padding;\n var totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n var row = -1;\n var top = -lineHeight;\n me.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n\n hitboxes[i] = {\n left: 0,\n top: top,\n row: row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n }, {\n key: \"_fitCols\",\n value: function _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n var me = this;\n var ctx = me.ctx,\n maxHeight = me.maxHeight,\n padding = me.options.labels.padding;\n var hitboxes = me.legendHitBoxes = [];\n var columnSizes = me.columnSizes = [];\n var heightLimit = maxHeight - titleHeight;\n var totalWidth = padding;\n var currentColWidth = 0;\n var currentColHeight = 0;\n var left = 0;\n var top = 0;\n var col = 0;\n me.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i > 0 && currentColHeight + fontSize + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n top = 0;\n currentColWidth = currentColHeight = 0;\n }\n\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += fontSize + padding;\n hitboxes[i] = {\n left: left,\n top: top,\n col: col,\n width: itemWidth,\n height: itemHeight\n };\n top += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n }, {\n key: \"adjustHitBoxes\",\n value: function adjustHitBoxes() {\n var me = this;\n\n if (!me.options.display) {\n return;\n }\n\n var titleHeight = me._computeTitleHeight();\n\n var hitboxes = me.legendHitBoxes,\n _me$options6 = me.options,\n align = _me$options6.align,\n padding = _me$options6.labels.padding;\n\n if (this.isHorizontal()) {\n var row = 0;\n\n var left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n\n var _iterator13 = _createForOfIteratorHelper(hitboxes),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var hitbox = _step13.value;\n\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, me.left + padding, me.right - me.lineWidths[row]);\n }\n\n hitbox.top += me.top + titleHeight + padding;\n hitbox.left = left;\n left += hitbox.width + padding;\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n } else {\n var col = 0;\n\n var top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n\n var _iterator14 = _createForOfIteratorHelper(hitboxes),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var _hitbox = _step14.value;\n\n if (_hitbox.col !== col) {\n col = _hitbox.col;\n top = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - me.columnSizes[col].height);\n }\n\n _hitbox.top = top;\n _hitbox.left += me.left + padding;\n top += _hitbox.height + padding;\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n\n if (me.options.display) {\n var ctx = me.ctx;\n clipArea(ctx, me);\n\n me._draw();\n\n unclipArea(ctx);\n }\n }\n }, {\n key: \"_draw\",\n value: function _draw() {\n var me = this;\n var opts = me.options,\n columnSizes = me.columnSizes,\n lineWidths = me.lineWidths,\n ctx = me.ctx;\n var align = opts.align,\n labelOpts = opts.labels;\n var defaultColor = defaults.color;\n var rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n var labelFont = toFont(labelOpts.font);\n var fontColor = labelOpts.color,\n padding = labelOpts.padding;\n var fontSize = labelFont.size;\n var halfFontSize = fontSize / 2;\n var cursor;\n me.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n\n var _getBoxSize2 = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize2.boxWidth,\n boxHeight = _getBoxSize2.boxHeight,\n itemHeight = _getBoxSize2.itemHeight;\n\n var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n ctx.save();\n var lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n\n if (labelOpts.usePointStyle) {\n var drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n var centerX = rtlHelper.xPlus(x, boxWidth / 2);\n var centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n var borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n\n ctx.fill();\n\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n var fillText = function fillText(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: legendItem.textAlign\n });\n };\n\n var isHorizontal = me.isHorizontal();\n\n var titleHeight = this._computeTitleHeight();\n\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, me.left + padding, me.right - lineWidths[0]),\n y: me.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: me.left + padding,\n y: _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(me.ctx, opts.textDirection);\n var lineHeight = itemHeight + padding;\n me.legendItems.forEach(function (legendItem, i) {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n var textWidth = ctx.measureText(legendItem.text).width;\n var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n var width = boxWidth + fontSize / 2 + textWidth;\n var x = cursor.x;\n var y = cursor.y;\n rtlHelper.setWidth(me.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > me.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, me.left + padding, me.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > me.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, me.top + titleHeight + padding, me.bottom - columnSizes[cursor.line].height);\n }\n\n var realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, me.right);\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(me.ctx, opts.textDirection);\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var me = this;\n var opts = me.options;\n var titleOpts = opts.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n var rtlHelper = getRtlAdapter(opts.rtl, me.left, me.width);\n var ctx = me.ctx;\n var position = titleOpts.position;\n var halfFontSize = titleFont.size / 2;\n var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n var y;\n var left = me.left;\n var maxWidth = me.width;\n\n if (this.isHorizontal()) {\n maxWidth = Math.max.apply(Math, _toConsumableArray(me.lineWidths));\n y = me.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, me.right - maxWidth);\n } else {\n var maxHeight = me.columnSizes.reduce(function (acc, size) {\n return Math.max(acc, size.height);\n }, 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, me.top, me.bottom - maxHeight - opts.labels.padding - me._computeTitleHeight());\n }\n\n var x = _alignStartEnd(position, left, left + maxWidth);\n\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n }, {\n key: \"_computeTitleHeight\",\n value: function _computeTitleHeight() {\n var titleOpts = this.options.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n }, {\n key: \"_getLegendItemAt\",\n value: 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 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 return me.legendItems[i];\n }\n }\n }\n\n return null;\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e) {\n var me = this;\n var opts = me.options;\n\n if (!isListened(e.type, opts)) {\n return;\n }\n\n var hoveredItem = me._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove') {\n var previous = me._hoveredItem;\n var sameItem = itemsEqual(previous, hoveredItem);\n\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, me], me);\n }\n\n me._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, me], me);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, me], me);\n }\n }\n }]);\n\n return Legend;\n}(Element);\n\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n\n return false;\n}\n\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start: function start(chart, _args, options) {\n var legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate: function afterUpdate(chart) {\n var legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent: function afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick: function onClick(e, legendItem, legend) {\n var index = legendItem.datasetIndex;\n var ci = legend.chart;\n\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n boxWidth: 40,\n padding: 10,\n generateLabels: function generateLabels(chart) {\n var datasets = chart.data.datasets;\n var _chart$legend$options = chart.legend.options.labels,\n usePointStyle = _chart$legend$options.usePointStyle,\n pointStyle = _chart$legend$options.pointStyle,\n textAlign = _chart$legend$options.textAlign,\n color = _chart$legend$options.color;\n return chart._getSortedDatasetMetas().map(function (meta) {\n var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n var borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return !name.startsWith('on');\n },\n labels: {\n _scriptable: function _scriptable(name) {\n return !['generateLabels', 'filter', 'sort'].includes(name);\n }\n }\n }\n};\n\nvar Title = /*#__PURE__*/function (_Element7) {\n _inherits(Title, _Element7);\n\n var _super17 = _createSuper(Title);\n\n function Title(config) {\n var _this12;\n\n _classCallCheck(this, Title);\n\n _this12 = _super17.call(this);\n _this12.chart = config.chart;\n _this12.options = config.options;\n _this12.ctx = config.ctx;\n _this12._padding = undefined;\n _this12.top = undefined;\n _this12.bottom = undefined;\n _this12.left = undefined;\n _this12.right = undefined;\n _this12.width = undefined;\n _this12.height = undefined;\n _this12.position = undefined;\n _this12.weight = undefined;\n _this12.fullSize = undefined;\n return _this12;\n }\n\n _createClass(Title, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight) {\n var me = this;\n var opts = me.options;\n me.left = 0;\n me.top = 0;\n\n if (!opts.display) {\n me.width = me.height = me.right = me.bottom = 0;\n return;\n }\n\n me.width = me.right = maxWidth;\n me.height = me.bottom = maxHeight;\n var lineCount = isArray(opts.text) ? opts.text.length : 1;\n me._padding = toPadding(opts.padding);\n\n var textSize = lineCount * toFont(opts.font).lineHeight + me._padding.height;\n\n if (me.isHorizontal()) {\n me.height = textSize;\n } else {\n me.width = textSize;\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n }, {\n key: \"_drawArgs\",\n value: function _drawArgs(offset) {\n var top = this.top,\n left = this.left,\n bottom = this.bottom,\n right = this.right,\n options = this.options;\n var align = options.align;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n\n maxWidth = bottom - top;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n\n if (!opts.display) {\n return;\n }\n\n var fontOpts = toFont(opts.font);\n var lineHeight = fontOpts.lineHeight;\n var offset = lineHeight / 2 + me._padding.top;\n\n var _me$_drawArgs = me._drawArgs(offset),\n titleX = _me$_drawArgs.titleX,\n titleY = _me$_drawArgs.titleY,\n maxWidth = _me$_drawArgs.maxWidth,\n rotation = _me$_drawArgs.rotation;\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }]);\n\n return Title;\n}(Element);\n\nfunction createTitle(chart, titleOpts) {\n var title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart: chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start: function start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop: function stop(chart) {\n var titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\nvar positioners = {\n average: function average(items) {\n if (!items.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 = items.length; i < len; ++i) {\n var el = items[i].element;\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 nearest: function nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\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 = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var center = el.getCenterPoint();\n var d = 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};\n\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n\n return base;\n}\n\nfunction 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\nfunction createTooltipItem(chart, item) {\n var element = item.element,\n datasetIndex = item.datasetIndex,\n index = item.index;\n var controller = chart.getDatasetMeta(datasetIndex).controller;\n\n var _controller$getLabelA = controller.getLabelAndValue(index),\n label = _controller$getLabelA.label,\n value = _controller$getLabelA.value;\n\n return {\n chart: chart,\n label: label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex: datasetIndex,\n element: element\n };\n}\n\nfunction getTooltipSize(tooltip, options) {\n var ctx = tooltip._chart.ctx;\n var body = tooltip.body,\n footer = tooltip.footer,\n title = tooltip.title;\n var boxWidth = options.boxWidth,\n boxHeight = options.boxHeight;\n var bodyFont = toFont(options.bodyFont);\n var titleFont = toFont(options.titleFont);\n var footerFont = toFont(options.footerFont);\n var titleLineCount = title.length;\n var footerLineCount = footer.length;\n var bodyLineItemCount = body.length;\n var padding = toPadding(options.padding);\n var height = padding.height;\n var width = 0;\n var combinedBodyLength = body.reduce(function (count, bodyItem) {\n return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n }, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n\n if (combinedBodyLength) {\n var bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\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.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 : 0;\n each(body, function (bodyItem) {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width: width,\n height: height\n };\n}\n\nfunction determineYAlign(chart, size) {\n var y = size.y,\n height = size.height;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n var x = size.x,\n width = size.width;\n var caret = options.caretSize + options.caretPadding;\n\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n var x = size.x,\n width = size.width;\n var chartWidth = chart.width,\n _chart$chartArea = chart.chartArea,\n left = _chart$chartArea.left,\n right = _chart$chartArea.right;\n var xAlign = 'center';\n\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\nfunction determineAlignment(chart, options, size) {\n var yAlign = options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign: yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n var x = size.x,\n width = size.width;\n\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n var y = size.y,\n height = size.height;\n\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n\n return y;\n}\n\nfunction getBackgroundPoint(options, size, alignment, chart) {\n var caretSize = options.caretSize,\n caretPadding = options.caretPadding,\n cornerRadius = options.cornerRadius;\n var xAlign = alignment.xAlign,\n yAlign = alignment.yAlign;\n var paddingAndSize = caretSize + caretPadding;\n var radiusAndPadding = cornerRadius + caretPadding;\n var x = alignX(size, xAlign);\n var y = alignY(size, yAlign, paddingAndSize);\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: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n var padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return Object.assign(Object.create(parent), {\n tooltip: tooltip,\n tooltipItems: tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n var override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nvar Tooltip = /*#__PURE__*/function (_Element8) {\n _inherits(Tooltip, _Element8);\n\n var _super18 = _createSuper(Tooltip);\n\n function Tooltip(config) {\n var _this13;\n\n _classCallCheck(this, Tooltip);\n\n _this13 = _super18.call(this);\n _this13.opacity = 0;\n _this13._active = [];\n _this13._chart = config._chart;\n _this13._eventPosition = undefined;\n _this13._size = undefined;\n _this13._cachedAnimations = undefined;\n _this13._tooltipItems = [];\n _this13.$animations = undefined;\n _this13.$context = undefined;\n _this13.options = config.options;\n _this13.dataPoints = undefined;\n _this13.title = undefined;\n _this13.beforeBody = undefined;\n _this13.body = undefined;\n _this13.afterBody = undefined;\n _this13.footer = undefined;\n _this13.xAlign = undefined;\n _this13.yAlign = undefined;\n _this13.x = undefined;\n _this13.y = undefined;\n _this13.height = undefined;\n _this13.width = undefined;\n _this13.caretX = undefined;\n _this13.caretY = undefined;\n _this13.labelColors = undefined;\n _this13.labelPointStyles = undefined;\n _this13.labelTextColors = undefined;\n return _this13;\n }\n\n _createClass(Tooltip, [{\n key: \"initialize\",\n value: function initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations() {\n var me = this;\n var cached = me._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n var chart = me._chart;\n var options = me.options.setContext(me.getContext());\n var opts = options.enabled && chart.options.animation && options.animations;\n var animations = new Animations(me._chart, opts);\n\n if (opts._cacheable) {\n me._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n var me = this;\n return me.$context || (me.$context = createTooltipContext(me._chart.getContext(), me, me._tooltipItems));\n }\n }, {\n key: \"getTitle\",\n value: function getTitle(context, options) {\n var me = this;\n var callbacks = options.callbacks;\n var beforeTitle = callbacks.beforeTitle.apply(me, [context]);\n var title = callbacks.title.apply(me, [context]);\n var afterTitle = callbacks.afterTitle.apply(me, [context]);\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 }, {\n key: \"getBeforeBody\",\n value: function getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getBody\",\n value: function getBody(tooltipItems, options) {\n var me = this;\n var callbacks = options.callbacks;\n var bodyItems = [];\n each(tooltipItems, function (context) {\n var bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n var scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(me, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(me, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(me, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n }, {\n key: \"getAfterBody\",\n value: function getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getFooter\",\n value: function getFooter(tooltipItems, options) {\n var me = this;\n var callbacks = options.callbacks;\n var beforeFooter = callbacks.beforeFooter.apply(me, [tooltipItems]);\n var footer = callbacks.footer.apply(me, [tooltipItems]);\n var afterFooter = callbacks.afterFooter.apply(me, [tooltipItems]);\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 }, {\n key: \"_createItems\",\n value: function _createItems(options) {\n var me = this;\n var active = me._active;\n var data = me._chart.data;\n var labelColors = [];\n var labelPointStyles = [];\n var labelTextColors = [];\n var tooltipItems = [];\n var i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(me._chart, active[i]));\n }\n\n if (options.filter) {\n tooltipItems = tooltipItems.filter(function (element, index, array) {\n return options.filter(element, index, array, data);\n });\n }\n\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort(function (a, b) {\n return options.itemSort(a, b, data);\n });\n }\n\n each(tooltipItems, function (context) {\n var scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(me, context));\n labelPointStyles.push(scoped.labelPointStyle.call(me, context));\n labelTextColors.push(scoped.labelTextColor.call(me, context));\n });\n me.labelColors = labelColors;\n me.labelPointStyles = labelPointStyles;\n me.labelTextColors = labelTextColors;\n me.dataPoints = tooltipItems;\n return tooltipItems;\n }\n }, {\n key: \"update\",\n value: function update(changed, replay) {\n var me = this;\n var options = me.options.setContext(me.getContext());\n var active = me._active;\n var properties;\n var tooltipItems = [];\n\n if (!active.length) {\n if (me.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n var position = positioners[options.position].call(me, active, me._eventPosition);\n tooltipItems = me._createItems(options);\n me.title = me.getTitle(tooltipItems, options);\n me.beforeBody = me.getBeforeBody(tooltipItems, options);\n me.body = me.getBody(tooltipItems, options);\n me.afterBody = me.getAfterBody(tooltipItems, options);\n me.footer = me.getFooter(tooltipItems, options);\n var size = me._size = getTooltipSize(me, options);\n var positionAndSize = Object.assign({}, position, size);\n var alignment = determineAlignment(me._chart, options, positionAndSize);\n var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, me._chart);\n me.xAlign = alignment.xAlign;\n me.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n\n me._tooltipItems = tooltipItems;\n me.$context = undefined;\n\n if (properties) {\n me._resolveAnimations().update(me, properties);\n }\n\n if (changed && options.external) {\n options.external.call(me, {\n chart: me._chart,\n tooltip: me,\n replay: replay\n });\n }\n }\n }, {\n key: \"drawCaret\",\n value: function drawCaret(tooltipPoint, ctx, size, options) {\n var caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n }, {\n key: \"getCaretPosition\",\n value: function getCaretPosition(tooltipPoint, size, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var cornerRadius = options.cornerRadius,\n caretSize = options.caretSize;\n var ptX = tooltipPoint.x,\n ptY = tooltipPoint.y;\n var width = size.width,\n height = size.height;\n var x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + cornerRadius + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - cornerRadius - caretSize;\n } else {\n x2 = this.caretX;\n }\n\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n\n y3 = y1;\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 }, {\n key: \"drawTitle\",\n value: function drawTitle(pt, ctx, options) {\n var me = this;\n var title = me.title;\n var length = title.length;\n var titleFont, titleSpacing, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n pt.x = getAlignedX(me, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n }, {\n key: \"_drawColorBox\",\n value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {\n var me = this;\n var labelColors = me.labelColors[i];\n var labelPointStyle = me.labelPointStyles[i];\n var boxHeight = options.boxHeight,\n boxWidth = options.boxWidth;\n var bodyFont = toFont(options.bodyFont);\n var colorX = getAlignedX(me, 'left', options);\n var rtlColorX = rtlHelper.x(colorX);\n var yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n var colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n var drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n var centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n var centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n var borderRadius = toTRBLCorners(labelColors.borderRadius);\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n ctx.fillStyle = me.labelTextColors[i];\n }\n }, {\n key: \"drawBody\",\n value: function drawBody(pt, ctx, options) {\n var me = this;\n var body = me.body;\n var bodySpacing = options.bodySpacing,\n bodyAlign = options.bodyAlign,\n displayColors = options.displayColors,\n boxHeight = options.boxHeight,\n boxWidth = options.boxWidth;\n var bodyFont = toFont(options.bodyFont);\n var bodyLineHeight = bodyFont.lineHeight;\n var xLinePadding = 0;\n var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n\n var fillLineOfText = function fillLineOfText(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n var bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(me, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(me.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + 1 : boxWidth + 2 : 0;\n\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = me.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n\n if (displayColors && lines.length) {\n me._drawColorBox(ctx, pt, i, rtlHelper, options);\n\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(me.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n }, {\n key: \"drawFooter\",\n value: function drawFooter(pt, ctx, options) {\n var me = this;\n var footer = me.footer;\n var length = footer.length;\n var footerFont, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, me.x, me.width);\n pt.x = getAlignedX(me, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n\n for (i = 0; i < length; ++i) {\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground(pt, ctx, tooltipSize, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var x = pt.x,\n y = pt.y;\n var width = tooltipSize.width,\n height = tooltipSize.height;\n var radius = options.cornerRadius;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\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, ctx, tooltipSize, options);\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, ctx, tooltipSize, options);\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, ctx, tooltipSize, options);\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 (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n }, {\n key: \"_updateAnimationTarget\",\n value: function _updateAnimationTarget(options) {\n var me = this;\n var chart = me._chart;\n var anims = me.$animations;\n var animX = anims && anims.x;\n var animY = anims && anims.y;\n\n if (animX || animY) {\n var position = positioners[options.position].call(me, me._active, me._eventPosition);\n\n if (!position) {\n return;\n }\n\n var size = me._size = getTooltipSize(me, options);\n var positionAndSize = Object.assign({}, position, me._size);\n var alignment = determineAlignment(chart, options, positionAndSize);\n var point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n\n if (animX._to !== point.x || animY._to !== point.y) {\n me.xAlign = alignment.xAlign;\n me.yAlign = alignment.yAlign;\n me.width = size.width;\n me.height = size.height;\n me.caretX = position.x;\n me.caretY = position.y;\n\n me._resolveAnimations().update(me, point);\n }\n }\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var me = this;\n var options = me.options.setContext(me.getContext());\n var opacity = me.opacity;\n\n if (!opacity) {\n return;\n }\n\n me._updateAnimationTarget(options);\n\n var tooltipSize = {\n width: me.width,\n height: me.height\n };\n var pt = {\n x: me.x,\n y: me.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n var padding = toPadding(options.padding);\n var hasTooltipContent = me.title.length || me.beforeBody.length || me.body.length || me.afterBody.length || me.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n me.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n me.drawTitle(pt, ctx, options);\n me.drawBody(pt, ctx, options);\n me.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements, eventPosition) {\n var me = this;\n var lastActive = me._active;\n var active = activeElements.map(function (_ref7) {\n var datasetIndex = _ref7.datasetIndex,\n index = _ref7.index;\n\n var meta = me._chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(lastActive, active);\n\n var positionChanged = me._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n me._active = active;\n me._eventPosition = eventPosition;\n me.update(true);\n }\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e, replay) {\n var me = this;\n var options = me.options;\n var lastActive = me._active || [];\n var changed = false;\n var active = [];\n\n if (e.type !== 'mouseout') {\n active = me._chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n }\n\n var positionChanged = me._positionChanged(active, e);\n\n changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n if (changed) {\n me._active = active;\n\n if (options.enabled || options.external) {\n me._eventPosition = {\n x: e.x,\n y: e.y\n };\n me.update(true, replay);\n }\n }\n\n return changed;\n }\n }, {\n key: \"_positionChanged\",\n value: function _positionChanged(active, e) {\n var caretX = this.caretX,\n caretY = this.caretY,\n options = this.options;\n var position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n }]);\n\n return Tooltip;\n}(Element);\n\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners: positioners,\n afterInit: function afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n _chart: chart,\n options: options\n });\n }\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset: function reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw: function afterDraw(chart) {\n var tooltip = chart.tooltip;\n var args = {\n tooltip: tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent: function afterEvent(chart, args) {\n if (chart.tooltip) {\n var useFinalPosition = args.replay;\n\n if (chart.tooltip.handleEvent(args.event, useFinalPosition)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: function boxHeight(ctx, opts) {\n return opts.bodyFont.size;\n },\n boxWidth: function boxWidth(ctx, opts) {\n return opts.bodyFont.size;\n },\n multiKeyBackground: '#fff',\n displayColors: true,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title: function title(tooltipItems) {\n if (tooltipItems.length > 0) {\n var item = tooltipItems[0];\n var labels = item.chart.data.labels;\n var labelCount = labels ? labels.length : 0;\n\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label: function label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n var label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n var value = tooltipItem.formattedValue;\n\n if (!isNullOrUndef(value)) {\n label += value;\n }\n\n return label;\n },\n labelColor: function labelColor(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor: function labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle: function labelPointStyle(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return name !== 'filter' && name !== 'itemSort' && name !== 'external';\n },\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Decimation: plugin_decimation,\n Filler: plugin_filler,\n Legend: plugin_legend,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\n\nvar addIfString = function addIfString(labels, raw, index) {\n return typeof raw === 'string' ? labels.push(raw) - 1 : isNaN(raw) ? null : index;\n};\n\nfunction findOrAddLabel(labels, raw, index) {\n var first = labels.indexOf(raw);\n\n if (first === -1) {\n return addIfString(labels, raw, index);\n }\n\n var last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nvar validIndex = function validIndex(index, max) {\n return index === null ? null : _limitValue(Math.round(index), 0, max);\n};\n\nvar CategoryScale = /*#__PURE__*/function (_Scale) {\n _inherits(CategoryScale, _Scale);\n\n var _super19 = _createSuper(CategoryScale);\n\n function CategoryScale(cfg) {\n var _this14;\n\n _classCallCheck(this, CategoryScale);\n\n _this14 = _super19.call(this, cfg);\n _this14._startValue = undefined;\n _this14._valueRange = 0;\n return _this14;\n }\n\n _createClass(CategoryScale, [{\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n var labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw));\n return validIndex(index, labels.length - 1);\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getUserBounds2 = me.getUserBounds(),\n minDefined = _me$getUserBounds2.minDefined,\n maxDefined = _me$getUserBounds2.maxDefined;\n\n var _me$getMinMax = me.getMinMax(true),\n min = _me$getMinMax.min,\n max = _me$getMinMax.max;\n\n if (me.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n\n if (!maxDefined) {\n max = me.getLabels().length - 1;\n }\n }\n\n me.min = min;\n me.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var min = me.min;\n var max = me.max;\n var offset = me.options.offset;\n var ticks = [];\n var labels = me.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n me._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n me._startValue = me.min - (offset ? 0.5 : 0);\n\n for (var value = min; value <= max; value++) {\n ticks.push({\n value: value\n });\n }\n\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var me = this;\n var labels = me.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n\n return value;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n\n _get(_getPrototypeOf(CategoryScale.prototype), \"configure\", this).call(this);\n\n if (!me.isHorizontal()) {\n me._reversePixels = !me._reversePixels;\n }\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var me = this;\n\n if (typeof value !== 'number') {\n value = me.parse(value);\n }\n\n return value === null ? NaN : me.getPixelForDecimal((value - me._startValue) / me._valueRange);\n }\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var me = this;\n var ticks = me.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return me.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n return Math.round(me._startValue + me.getDecimalForPixel(pixel) * me._valueRange);\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.bottom;\n }\n }]);\n\n return CategoryScale;\n}(Scale);\n\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n var ticks = [];\n var MIN_SPACING = 1e-14;\n var step = generationOptions.step,\n min = generationOptions.min,\n max = generationOptions.max,\n precision = generationOptions.precision,\n count = generationOptions.count,\n maxTicks = generationOptions.maxTicks,\n maxDigits = generationOptions.maxDigits,\n horizontal = generationOptions.horizontal;\n var unit = step || 1;\n var maxSpaces = maxTicks - 1;\n var rmin = dataRange.min,\n rmax = dataRange.max;\n var minDefined = !isNullOrUndef(min);\n var maxDefined = !isNullOrUndef(max);\n var countDefined = !isNullOrUndef(count);\n var minSpacing = (rmax - rmin) / maxDigits;\n var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n var factor, niceMin, niceMax, numSpaces;\n\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{\n value: rmin\n }, {\n value: rmax\n }];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\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;\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.min((max - min) / spacing, maxTicks);\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n factor = Math.pow(10, isNullOrUndef(precision) ? _decimalPlaces(spacing) : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n var j = 0;\n\n if (minDefined) {\n ticks.push({\n value: min\n });\n\n if (niceMin <= min) {\n j++;\n }\n\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, minSpacing * (horizontal ? ('' + min).length : 1))) {\n j++;\n }\n }\n\n for (; j < numSpaces; ++j) {\n ticks.push({\n value: Math.round((niceMin + j * spacing) * factor) / factor\n });\n }\n\n if (maxDefined) {\n if (almostEquals(ticks[ticks.length - 1].value, max, minSpacing * (horizontal ? ('' + max).length : 1))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else {\n ticks.push({\n value: niceMax\n });\n }\n\n return ticks;\n}\n\nvar LinearScaleBase = /*#__PURE__*/function (_Scale2) {\n _inherits(LinearScaleBase, _Scale2);\n\n var _super20 = _createSuper(LinearScaleBase);\n\n function LinearScaleBase(cfg) {\n var _this15;\n\n _classCallCheck(this, LinearScaleBase);\n\n _this15 = _super20.call(this, cfg);\n _this15.start = undefined;\n _this15.end = undefined;\n _this15._startValue = undefined;\n _this15._endValue = undefined;\n _this15._valueRange = 0;\n return _this15;\n }\n\n _createClass(LinearScaleBase, [{\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var me = this;\n var _me$options7 = me.options,\n beginAtZero = _me$options7.beginAtZero,\n stacked = _me$options7.stacked;\n\n var _me$getUserBounds3 = me.getUserBounds(),\n minDefined = _me$getUserBounds3.minDefined,\n maxDefined = _me$getUserBounds3.maxDefined;\n\n var min = me.min,\n max = me.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n if (beginAtZero || stacked) {\n var minSign = sign(min);\n var maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n setMax(max + 1);\n\n if (!beginAtZero) {\n setMin(min - 1);\n }\n }\n\n me.min = min;\n me.max = max;\n }\n }, {\n key: \"getTickLimit\",\n value: function getTickLimit() {\n var me = this;\n var tickOpts = me.options.ticks;\n var maxTicksLimit = tickOpts.maxTicksLimit,\n stepSize = tickOpts.stepSize;\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 }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var opts = me.options;\n var tickOpts = opts.ticks;\n var maxTicks = me.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n var numericGeneratorOptions = {\n maxTicks: maxTicks,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: me._maxDigits(),\n horizontal: me.isHorizontal()\n };\n var dataRange = me._range || me;\n var ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, me, 'value');\n }\n\n if (opts.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 return ticks;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var ticks = me.ticks;\n var start = me.min;\n var end = me.max;\n\n _get(_getPrototypeOf(LinearScaleBase.prototype), \"configure\", this).call(this);\n\n if (me.options.offset && ticks.length) {\n var offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n\n me._startValue = start;\n me._endValue = end;\n me._valueRange = end - start;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale);\n }\n }]);\n\n return LinearScaleBase;\n}(Scale);\n\nvar LinearScale = /*#__PURE__*/function (_LinearScaleBase) {\n _inherits(LinearScale, _LinearScaleBase);\n\n var _super21 = _createSuper(LinearScale);\n\n function LinearScale() {\n _classCallCheck(this, LinearScale);\n\n return _super21.apply(this, arguments);\n }\n\n _createClass(LinearScale, [{\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getMinMax2 = me.getMinMax(true),\n min = _me$getMinMax2.min,\n max = _me$getMinMax2.max;\n\n me.min = isNumberFinite(min) ? min : 0;\n me.max = isNumberFinite(max) ? max : 1;\n me.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n var me = this;\n\n if (me.isHorizontal()) {\n return Math.ceil(me.width / 40);\n }\n\n var tickFont = me._resolveTickFontOptions(0);\n\n return Math.ceil(me.height / tickFont.lineHeight);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n }]);\n\n return LinearScale;\n}(LinearScaleBase);\n\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n var remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));\n return remain === 1;\n}\n\nfunction generateTicks(generationOptions, dataRange) {\n var endExp = Math.floor(log10(dataRange.max));\n var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n var ticks = [];\n var tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n var exp = Math.floor(log10(tickVal));\n var significand = Math.floor(tickVal / Math.pow(10, exp));\n var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n do {\n ticks.push({\n value: tickVal,\n major: isMajor(tickVal)\n });\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 = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({\n value: lastTick,\n major: isMajor(tickVal)\n });\n return ticks;\n}\n\nvar LogarithmicScale = /*#__PURE__*/function (_Scale3) {\n _inherits(LogarithmicScale, _Scale3);\n\n var _super22 = _createSuper(LogarithmicScale);\n\n function LogarithmicScale(cfg) {\n var _this16;\n\n _classCallCheck(this, LogarithmicScale);\n\n _this16 = _super22.call(this, cfg);\n _this16.start = undefined;\n _this16.end = undefined;\n _this16._startValue = undefined;\n _this16._valueRange = 0;\n return _this16;\n }\n\n _createClass(LogarithmicScale, [{\n key: \"parse\",\n value: function parse(raw, index) {\n var value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getMinMax3 = me.getMinMax(true),\n min = _me$getMinMax3.min,\n max = _me$getMinMax3.max;\n\n me.min = isNumberFinite(min) ? Math.max(0, min) : null;\n me.max = isNumberFinite(max) ? Math.max(0, max) : null;\n\n if (me.options.beginAtZero) {\n me._zero = true;\n }\n\n me.handleTickRangeOptions();\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var me = this;\n\n var _me$getUserBounds4 = me.getUserBounds(),\n minDefined = _me$getUserBounds4.minDefined,\n maxDefined = _me$getUserBounds4.maxDefined;\n\n var min = me.min;\n var max = me.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n var exp = function exp(v, m) {\n return Math.pow(10, Math.floor(log10(v)) + m);\n };\n\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n\n if (me._zero && me.min !== me._suggestedMin && min === exp(me.min, 0)) {\n setMin(exp(min, -1));\n }\n\n me.min = min;\n me.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var opts = me.options;\n var generationOptions = {\n min: me._userMin,\n max: me._userMax\n };\n var ticks = generateTicks(generationOptions, me);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, me, 'value');\n }\n\n if (opts.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 return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale);\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var me = this;\n var start = me.min;\n\n _get(_getPrototypeOf(LogarithmicScale.prototype), \"configure\", this).call(this);\n\n me._startValue = log10(start);\n me._valueRange = log10(me.max) - log10(start);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var me = this;\n\n if (value === undefined || value === 0) {\n value = me.min;\n }\n\n if (value === null || isNaN(value)) {\n return NaN;\n }\n\n return me.getPixelForDecimal(value === me.min ? 0 : (log10(value) - me._startValue) / me._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n var decimal = me.getDecimalForPixel(pixel);\n return Math.pow(10, me._startValue + decimal * me._valueRange);\n }\n }]);\n\n return LogarithmicScale;\n}(Scale);\n\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n var tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n var padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n\n return 0;\n}\n\nfunction measureLabelSize(ctx, lineHeight, label) {\n if (isArray(label)) {\n return {\n w: _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\nfunction 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\nfunction fitWithPointLabels(scale) {\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 var labelSizes = [];\n var padding = [];\n var valueCount = scale.getLabels().length;\n\n for (i = 0; i < valueCount; i++) {\n var _opts = scale.options.pointLabels.setContext(scale.getContext(i));\n\n padding[i] = _opts.padding;\n pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);\n var plFont = toFont(_opts.font);\n scale.ctx.font = plFont.string;\n textSize = measureLabelSize(scale.ctx, plFont.lineHeight, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n var angleRadians = scale.getIndexAngle(i);\n var angle = toDegrees(angleRadians);\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 scale._pointLabelItems = [];\n var opts = scale.options;\n var tickBackdropHeight = getTickBackdropHeight(opts);\n var outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n\n for (i = 0; i < valueCount; i++) {\n var extra = i === 0 ? tickBackdropHeight / 2 : 0;\n var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);\n\n var _angle = toDegrees(scale.getIndexAngle(i));\n\n var size = labelSizes[i];\n adjustPointPositionForLabelHeight(_angle, size, pointLabelPosition);\n var textAlign = getTextAlignForAngle(_angle);\n var left = void 0;\n\n if (textAlign === 'left') {\n left = pointLabelPosition.x;\n } else if (textAlign === 'center') {\n left = pointLabelPosition.x - size.w / 2;\n } else {\n left = pointLabelPosition.x - size.w;\n }\n\n var right = left + size.w;\n scale._pointLabelItems[i] = {\n x: pointLabelPosition.x,\n y: pointLabelPosition.y,\n textAlign: textAlign,\n left: left,\n top: pointLabelPosition.y,\n right: right,\n bottom: pointLabelPosition.y + size.h\n };\n }\n}\n\nfunction 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\nfunction 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\nfunction drawPointLabels(scale, labelCount) {\n var ctx = scale.ctx,\n pointLabels = scale.options.pointLabels;\n\n for (var i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = pointLabels.setContext(scale.getContext(i));\n var plFont = toFont(optsAtIndex.font);\n var _scale$_pointLabelIte = scale._pointLabelItems[i],\n x = _scale$_pointLabelIte.x,\n y = _scale$_pointLabelIte.y,\n textAlign = _scale$_pointLabelIte.textAlign,\n left = _scale$_pointLabelIte.left,\n top = _scale$_pointLabelIte.top,\n right = _scale$_pointLabelIte.right,\n bottom = _scale$_pointLabelIte.bottom;\n var backdropColor = optsAtIndex.backdropColor;\n\n if (!isNullOrUndef(backdropColor)) {\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n var ctx = scale.ctx;\n\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n var pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (var i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n var ctx = scale.ctx;\n var circular = gridLineOpts.circular;\n var color = gridLineOpts.color,\n lineWidth = gridLineOpts.lineWidth;\n\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction numberOrZero(param) {\n return isNumber(param) ? param : 0;\n}\n\nvar RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {\n _inherits(RadialLinearScale, _LinearScaleBase2);\n\n var _super23 = _createSuper(RadialLinearScale);\n\n function RadialLinearScale(cfg) {\n var _this17;\n\n _classCallCheck(this, RadialLinearScale);\n\n _this17 = _super23.call(this, cfg);\n _this17.xCenter = undefined;\n _this17.yCenter = undefined;\n _this17.drawingArea = undefined;\n _this17._pointLabels = [];\n _this17._pointLabelItems = [];\n return _this17;\n }\n\n _createClass(RadialLinearScale, [{\n key: \"setDimensions\",\n value: function setDimensions() {\n var me = this;\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 }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n\n var _me$getMinMax4 = me.getMinMax(false),\n min = _me$getMinMax4.min,\n max = _me$getMinMax4.max;\n\n me.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n me.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n me.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var me = this;\n LinearScaleBase.prototype.generateTickLabels.call(me, ticks);\n me._pointLabels = me.getLabels().map(function (value, index) {\n var label = callback(me.options.pointLabels.callback, [value, index], me);\n return label || label === 0 ? label : '';\n });\n }\n }, {\n key: \"fit\",\n value: 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 key: \"_setReductions\",\n value: 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.max(largestPossibleRadius / 2, Math.min(Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2), Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));\n me.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n }\n }, {\n key: \"setCenterPoint\",\n value: 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 }, {\n key: \"getIndexAngle\",\n value: function getIndexAngle(index) {\n var angleMultiplier = TAU / this.getLabels().length;\n var startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n }, {\n key: \"getDistanceFromCenterForValue\",\n value: function getDistanceFromCenterForValue(value) {\n var me = this;\n\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n var scalingFactor = me.drawingArea / (me.max - me.min);\n\n if (me.options.reverse) {\n return (me.max - value) * scalingFactor;\n }\n\n return (value - me.min) * scalingFactor;\n }\n }, {\n key: \"getValueForDistanceFromCenter\",\n value: function getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n var me = this;\n var scaledDistance = distance / (me.drawingArea / (me.max - me.min));\n return me.options.reverse ? me.max - scaledDistance : me.min + scaledDistance;\n }\n }, {\n key: \"getPointPosition\",\n value: function getPointPosition(index, distanceFromCenter) {\n var me = this;\n var angle = me.getIndexAngle(index) - HALF_PI;\n return {\n x: Math.cos(angle) * distanceFromCenter + me.xCenter,\n y: Math.sin(angle) * distanceFromCenter + me.yCenter,\n angle: angle\n };\n }\n }, {\n key: \"getPointPositionForValue\",\n value: function getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n }, {\n key: \"getBasePosition\",\n value: function getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n }, {\n key: \"getPointLabelPosition\",\n value: function getPointLabelPosition(index) {\n var _this$_pointLabelItem = this._pointLabelItems[index],\n left = _this$_pointLabelItem.left,\n top = _this$_pointLabelItem.top,\n right = _this$_pointLabelItem.right,\n bottom = _this$_pointLabelItem.bottom;\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var me = this;\n var _me$options8 = me.options,\n backgroundColor = _me$options8.backgroundColor,\n circular = _me$options8.grid.circular;\n\n if (backgroundColor) {\n var ctx = me.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(me, me.getDistanceFromCenterForValue(me._endValue), circular, me.getLabels().length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n var angleLines = opts.angleLines,\n grid = opts.grid;\n var labelCount = me.getLabels().length;\n var i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(me, labelCount);\n }\n\n if (grid.display) {\n me.ticks.forEach(function (tick, index) {\n if (index !== 0) {\n offset = me.getDistanceFromCenterForValue(tick.value);\n var optsAtIndex = grid.setContext(me.getContext(index - 1));\n drawRadiusLine(me, optsAtIndex, offset, labelCount);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = me.getLabels().length - 1; i >= 0; i--) {\n var optsAtIndex = angleLines.setContext(me.getContext(i));\n var color = optsAtIndex.color,\n lineWidth = optsAtIndex.lineWidth;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = me.getDistanceFromCenterForValue(opts.ticks.reverse ? me.min : me.max);\n position = me.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(me.xCenter, me.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {}\n }, {\n key: \"drawLabels\",\n value: function drawLabels() {\n var me = this;\n var ctx = me.ctx;\n var opts = me.options;\n var tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n var startAngle = me.getIndexAngle(0);\n var offset, width;\n ctx.save();\n ctx.translate(me.xCenter, me.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n me.ticks.forEach(function (tick, index) {\n if (index === 0 && !opts.reverse) {\n return;\n }\n\n var optsAtIndex = tickOpts.setContext(me.getContext(index));\n var tickFont = toFont(optsAtIndex.font);\n offset = me.getDistanceFromCenterForValue(me.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {}\n }]);\n\n return RadialLinearScale;\n}(LinearScaleBase);\n\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback: function callback(label) {\n return label;\n },\n padding: 5\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\nvar INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n return a - b;\n}\n\nfunction _parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n var adapter = scale._adapter;\n var _scale$_parseOpts = scale._parseOpts,\n parser = _scale$_parseOpts.parser,\n round = _scale$_parseOpts.round,\n isoWeekday = _scale$_parseOpts.isoWeekday;\n var value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n var ilen = UNITS.length;\n\n for (var i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n var interval = INTERVALS[UNITS[i]];\n var factor = interval.steps ? interval.steps : Number.MAX_SAFE_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\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (var i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n var unit = UNITS[i];\n\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction 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\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n var _lookup2 = _lookup(timestamps, time),\n lo = _lookup2.lo,\n hi = _lookup2.hi;\n\n var timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n var adapter = scale._adapter;\n var first = +adapter.startOf(ticks[0].value, majorUnit);\n var last = ticks[ticks.length - 1].value;\n var major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n\n return ticks;\n}\n\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n var ticks = [];\n var map = {};\n var ilen = values.length;\n var i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value: value,\n major: false\n });\n }\n\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nvar TimeScale = /*#__PURE__*/function (_Scale4) {\n _inherits(TimeScale, _Scale4);\n\n var _super24 = _createSuper(TimeScale);\n\n function TimeScale(props) {\n var _this18;\n\n _classCallCheck(this, TimeScale);\n\n _this18 = _super24.call(this, props);\n _this18._cache = {\n data: [],\n labels: [],\n all: []\n };\n _this18._unit = 'day';\n _this18._majorUnit = undefined;\n _this18._offsets = {};\n _this18._normalized = false;\n _this18._parseOpts = undefined;\n return _this18;\n }\n\n _createClass(TimeScale, [{\n key: \"init\",\n value: function init(scaleOpts, opts) {\n var time = scaleOpts.time || (scaleOpts.time = {});\n var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n _get(_getPrototypeOf(TimeScale.prototype), \"init\", this).call(this, scaleOpts);\n\n this._normalized = opts.normalized;\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n\n return _parse(this, raw);\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n _get(_getPrototypeOf(TimeScale.prototype), \"beforeLayout\", this).call(this);\n\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var me = this;\n var options = me.options;\n var adapter = me._adapter;\n var unit = options.time.unit || 'day';\n\n var _me$getUserBounds5 = me.getUserBounds(),\n min = _me$getUserBounds5.min,\n max = _me$getUserBounds5.max,\n minDefined = _me$getUserBounds5.minDefined,\n maxDefined = _me$getUserBounds5.maxDefined;\n\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n if (!minDefined || !maxDefined) {\n _applyBounds(me._getLabelBounds());\n\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(me.getMinMax(false));\n }\n }\n\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n me.min = Math.min(min, max - 1);\n me.max = Math.max(min + 1, max);\n }\n }, {\n key: \"_getLabelBounds\",\n value: function _getLabelBounds() {\n var arr = this.getLabelTimestamps();\n var min = Number.POSITIVE_INFINITY;\n var max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n\n return {\n min: min,\n max: max\n };\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var me = this;\n var options = me.options;\n var timeOpts = options.time;\n var tickOpts = options.ticks;\n var timestamps = tickOpts.source === 'labels' ? me.getLabelTimestamps() : me._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n me.min = me._userMin || timestamps[0];\n me.max = me._userMax || timestamps[timestamps.length - 1];\n }\n\n var min = me.min;\n var max = me.max;\n\n var ticks = _filterBetween(timestamps, min, max);\n\n me._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, me.min, me.max, me._getLabelCapacity(min)) : determineUnitForFormatting(me, ticks.length, timeOpts.minUnit, me.min, me.max));\n me._majorUnit = !tickOpts.major.enabled || me._unit === 'year' ? undefined : determineMajorUnit(me._unit);\n me.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(me, ticks, me._majorUnit);\n }\n }, {\n key: \"initOffsets\",\n value: function initOffsets(timestamps) {\n var me = this;\n var start = 0;\n var end = 0;\n var first, last;\n\n if (me.options.offset && timestamps.length) {\n first = me.getDecimalForValue(timestamps[0]);\n\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (me.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n\n last = me.getDecimalForValue(timestamps[timestamps.length - 1]);\n\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - me.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n\n var limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n me._offsets = {\n start: start,\n end: end,\n factor: 1 / (start + 1 + end)\n };\n }\n }, {\n key: \"_generate\",\n value: function _generate() {\n var me = this;\n var adapter = me._adapter;\n var min = me.min;\n var max = me.max;\n var options = me.options;\n var timeOpts = options.time;\n var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, me._getLabelCapacity(min));\n var stepSize = valueOrDefault(timeOpts.stepSize, 1);\n var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n var hasWeekday = isNumber(weekday) || weekday === true;\n var ticks = {};\n var first = min;\n var time, count;\n\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n\n var timestamps = options.ticks.source === 'data' && me.getDataTimestamps();\n\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n return Object.keys(ticks).sort(function (a, b) {\n return a - b;\n }).map(function (x) {\n return +x;\n });\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var me = this;\n var adapter = me._adapter;\n var timeOpts = me.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n }, {\n key: \"_tickFormatFunction\",\n value: function _tickFormatFunction(time, index, ticks, format) {\n var me = this;\n var options = me.options;\n var formats = options.time.displayFormats;\n var unit = me._unit;\n var majorUnit = me._majorUnit;\n var minorFormat = unit && formats[unit];\n var majorFormat = majorUnit && formats[majorUnit];\n var tick = ticks[index];\n var major = majorUnit && majorFormat && tick && tick.major;\n\n var label = me._adapter.format(time, format || (major ? majorFormat : minorFormat));\n\n var formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], me) : label;\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n var me = this;\n return value === null ? NaN : (value - me.min) / (me.max - me.min);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var me = this;\n var offsets = me._offsets;\n var pos = me.getDecimalForValue(value);\n return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n var offsets = me._offsets;\n var pos = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return me.min + pos * (me.max - me.min);\n }\n }, {\n key: \"_getLabelSize\",\n value: function _getLabelSize(label) {\n var me = this;\n var ticksOpts = me.options.ticks;\n var tickLabelWidth = me.ctx.measureText(label).width;\n var angle = toRadians(me.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n var cosRotation = Math.cos(angle);\n var sinRotation = Math.sin(angle);\n\n var tickFontSize = me._resolveTickFontOptions(0).size;\n\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n }, {\n key: \"_getLabelCapacity\",\n value: function _getLabelCapacity(exampleTime) {\n var me = this;\n var timeOpts = me.options.time;\n var displayFormats = timeOpts.displayFormats;\n var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n\n var exampleLabel = me._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(me, [exampleTime], me._majorUnit), format);\n\n var size = me._getLabelSize(exampleLabel);\n\n var capacity = Math.floor(me.isHorizontal() ? me.width / size.w : me.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n }, {\n key: \"getDataTimestamps\",\n value: function getDataTimestamps() {\n var me = this;\n var timestamps = me._cache.data || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var metas = me.getMatchingVisibleMetas();\n\n if (me._normalized && metas.length) {\n return me._cache.data = metas[0].controller.getAllParsedValues(me);\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(me));\n }\n\n return me._cache.data = me.normalize(timestamps);\n }\n }, {\n key: \"getLabelTimestamps\",\n value: function getLabelTimestamps() {\n var me = this;\n var timestamps = me._cache.labels || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var labels = me.getLabels();\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(_parse(me, labels[i]));\n }\n\n return me._cache.labels = me._normalized ? timestamps : me.normalize(timestamps);\n }\n }, {\n key: \"normalize\",\n value: function normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n }]);\n\n return TimeScale;\n}(Scale);\n\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n var prevSource, nextSource, prevTarget, nextTarget;\n\n if (reverse) {\n prevSource = Math.floor(val);\n nextSource = Math.ceil(val);\n prevTarget = table[prevSource];\n nextTarget = table[nextSource];\n } else {\n var result = _lookup(table, val);\n\n prevTarget = result.lo;\n nextTarget = result.hi;\n prevSource = table[prevTarget];\n nextSource = table[nextTarget];\n }\n\n var span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nvar TimeSeriesScale = /*#__PURE__*/function (_TimeScale) {\n _inherits(TimeSeriesScale, _TimeScale);\n\n var _super25 = _createSuper(TimeSeriesScale);\n\n function TimeSeriesScale(props) {\n var _this19;\n\n _classCallCheck(this, TimeSeriesScale);\n\n _this19 = _super25.call(this, props);\n _this19._table = [];\n _this19._maxIndex = undefined;\n return _this19;\n }\n\n _createClass(TimeSeriesScale, [{\n key: \"initOffsets\",\n value: function initOffsets() {\n var me = this;\n\n var timestamps = me._getTimestampsForTable();\n\n me._table = me.buildLookupTable(timestamps);\n me._maxIndex = me._table.length - 1;\n\n _get(_getPrototypeOf(TimeSeriesScale.prototype), \"initOffsets\", this).call(this, timestamps);\n }\n }, {\n key: \"buildLookupTable\",\n value: function buildLookupTable(timestamps) {\n var me = this;\n var min = me.min,\n max = me.max;\n\n if (!timestamps.length) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n\n var items = [min];\n var i, ilen, curr;\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 return items;\n }\n }, {\n key: \"_getTimestampsForTable\",\n value: function _getTimestampsForTable() {\n var me = this;\n var timestamps = me._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var data = me.getDataTimestamps();\n var label = me.getLabelTimestamps();\n\n if (data.length && label.length) {\n timestamps = me.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n\n timestamps = me._cache.all = timestamps;\n return timestamps;\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value, index) {\n var me = this;\n var offsets = me._offsets;\n var pos = me._normalized && me._maxIndex > 0 && !isNullOrUndef(index) ? index / me._maxIndex : me.getDecimalForValue(value);\n return me.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return interpolate(this._table, value) / this._maxIndex;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var me = this;\n var offsets = me._offsets;\n var decimal = me.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(me._table, decimal * this._maxIndex, true);\n }\n }]);\n\n return TimeSeriesScale;\n}(TimeScale);\n\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /*#__PURE__*/Object.freeze({\n __proto__: null,\n CategoryScale: CategoryScale,\n LinearScale: LinearScale,\n LogarithmicScale: LogarithmicScale,\n RadialLinearScale: RadialLinearScale,\n TimeScale: TimeScale,\n TimeSeriesScale: TimeSeriesScale\n});\nvar registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, animator, controllers, elements, layouts, plugins, registerables, registry, scales };"],"sourceRoot":""}