{"version":3,"sources":["webpack:///./node_modules/chart.js/dist/chart.mjs"],"names":["_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","prototype","valueOf","call","e","_isNativeReflectConstruct","result","Super","NewTarget","this","constructor","arguments","apply","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","minLen","_arrayLikeToArray","n","Object","toString","slice","name","from","test","_unsupportedIterableToArray","length","i","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","key","chart","anims","date","type","callbacks","listeners","numSteps","duration","forEach","fn","initial","currentStep","Math","min","start","_this","window","_update","_refresh","_this2","Date","now","remaining","running","items","item","draw","_active","_total","tick","pop","_notify","charts","get","complete","progress","set","event","cb","_getAnims","push","_this$_getAnims$items","reduce","acc","cur","max","_duration","cancel","delete","interpolators","boolean","to","factor","color","c0","c1","valid","mix","hexString","number","Animation","cfg","target","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","keys","animation","describe","_fallback","_indexable","_scriptable","colors","properties","numbers","active","resize","show","animations","visible","hide","v","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","_i","_animationOptions","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","_step","_iterator","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","concat","id","getStackKey","_index","_top","_bottom","getFirstScaleId","scales","filter","shift","clearStacks","_step2","_iterator2","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","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","oldStacked","_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","hidden","createStack","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","disabled","elements","area","chartArea","drawActiveElementsOnTop","element","resolveDatasetElementOptions","resolveDataElementOptions","context","parent","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","_this3","cache","cacheKey","sharing","datasetElementScopeKeys","prefixes","names","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","_cacheable","sharedOptions","_animationsDisabled","firstOpts","previouslySharedOptions","getSharedOptions","includeOptions","updateSharedOptions","_resolveAnimations","getStyle","_setStyle","_step3","_iterator3","_step3$value","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","splice","args","_args2","_dataChanges","_sync","newCount","computeMinSampleSize","curr","_cache","$bar","visibleMetas","getAllParsedValues","sort","a","getAllScaleValues","_length","updateMinAndPrev","abs","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","_borderProps","horizontal","base","borderProps","enableBorderRadius","parseEdge","orig","v1","v2","startEnd","setInflateAmount","_ref","ratio","inflateAmount","defaults","BarController","_DatasetController","_super","obj","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","bars","reset","getBasePixel","isHorizontal","ruler","_getRuler","_this$_getSharedOptio","_getSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","height","width","updateElement","last","_step4","grouped","skipNull","val","isNaN","_iterator4","indexOf","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","_this$_cachedMeta","_this$options","baseValue","minBarLength","actualBase","floating","applyStack","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","rects","overrides","_index_","offset","grid","_value_","beginAtZero","BubbleController","_DatasetController2","_super2","radius","points","_this$_cachedMeta2","_this$_getSharedOptio2","point","iPixel","vPixel","skip","plugins","tooltip","title","DoughnutController","_DatasetController3","_super3","_this4","innerRadius","outerRadius","offsetX","offsetY","getter","_this$_parsing$key","rotation","circumference","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_this$_getRotationExt","_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","_this$_getSharedOptio3","_circumference","arc","metaData","locale","borderAlign","borderWidth","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","descriptors","aspectRatio","legend","generateLabels","pointStyle","map","style","text","fillStyle","backgroundColor","strokeStyle","borderColor","lineWidth","onClick","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_DatasetController4","_super4","line","_meta$data","_dataset","animationsDisabled","_getStartAndCountOfVi","_datasetIndex","_decimated","showLine","segment","animated","_this$_cachedMeta3","_this$_getSharedOptio4","_this$options2","spanGaps","maxGapLength","directUpdate","prevParsed","nullData","stop","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","_DatasetController5","_super5","_this5","bind","_updateRadius","_this6","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_this7","angleLines","display","circular","pointLabels","PieController","_DoughnutController","_super6","RadarController","_DatasetController6","_super7","_fullLoop","pointPosition","getPointPositionForValue","fill","Element","useFinalPosition","_this$getProps","getProps","final","_this8","ret","defaultRoutes","formatters","numeric","tickValue","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","format","logarithmic","pow","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","padding","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","callback","minor","align","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","startsWith","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","fallback","font","lineHeight","titleAlign","position","reverseAlign","Scale","_Element","_super8","_this9","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","_this$getUserBounds","metas","getMinMax","xLabels","yLabels","beforeUpdate","margins","_this$options3","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","source","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","sqrt","asin","_this$options4","titleOpts","gridOpts","titleHeight","_this$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_this$options5","_this$options5$ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","_this$options6","fullSize","generateTickLabels","_computeLabelSizes","j","jlen","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","string","gc","gcLen","garbageCollect","valueAt","idx","pixel","decimal","getBaseValue","createTickContext","optionTicks","rot","w","h","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID2","_value2","limit","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","textAlign","lineCount","textOffset","tickAndPadding","hTickAndPadding","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID3","_value3","halfCount","strokeColor","strokeWidth","tickTextAlign","backdrop","labelPadding","translation","_this$options7","_this$options8","_this$options8$ticks","save","fillRect","restore","findIndex","_computeGridLineItems","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","stroke","lastLineWidth","_computeLabelArea","_computeLabelItems","_this$options9","_titleArgs","titleX","titleY","_positionAxisID","_value","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","_this10","tz","z","gz","getSortedVisibleDatasetMetas","axisID","fontSize","TypedRegistry","scope","override","create","isPrototypeOf","parentScope","proto","getPrototypeOf","isIChartComponent","register","Error","itemDefaults","routes","property","propertyParts","split","sourceName","sourceScope","join","parts","targetName","targetScope","routeDefaults","registerDefaults","registry","Registry","controllers","_typedRegistries","_len","_key","_each","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_get","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","typedRegistry","_this11","arg","reg","_getRegistryForType","isForType","_exec","itemReg","component","camelMethod","ScatterController","_DatasetController7","_super9","_meta$data2","_getStartAndCountOfVi2","getElement","_this$_cachedMeta4","_this$options10","interaction","abstract","DateAdapter","chartOptions","timestamp","_format","amount","unit","weekday","members","adapters","_date","binarySearch","metaset","intersect","lookupMethod","el","getRange","lo","hi","evaluateInteractionItems","handler","_metasets$i","_index2","_binarySearch","getIntersectItems","includeInvisible","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","pt1","pt2","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","distance","getNearestItems","_element$getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","array","pos","filterDynamicPositionByAxis","box","sortByWeight","v0","setLayoutDims","layouts","params","layout","_step5","_iterator5","wrap","stackWeight","includes","_stack","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","positions","margin","fitBoxes","boxes","refit","changed","refitBoxes","_updateDims","setBoxDims","placeBoxes","_step6","userPadding","_iterator6","_height","_width","autoPadding","_layers","layoutItem","minPadding","layoutBoxes","_box","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","canvas","listener","BasicPlatform","_BasePlatform","_super10","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","removeEventListener","nodeListContains","nodeList","_step7","_iterator7","node","contains","createAttachObserver","observer","MutationObserver","entries","_step8","trigger","_iterator8","addedNodes","removedNodes","observe","document","childList","subtree","createDetachObserver","_step9","_iterator9","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","currentDevicePixelRatio","createResizeObserver","container","clientWidth","ResizeObserver","contentRect","addEventListener","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","proxy","_getRelativePosition","native","fromNativeEvent","addListener","DomPlatform","_BasePlatform2","_super11","renderHeight","getAttribute","renderWidth","boxSizing","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","PluginService","_init","hook","_createDescriptors","_descriptors","_step10","_iterator10","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","localIds","getPlugin","local","_i2","allPlugins","_ref2","_step11","_iterator11","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","_ref3","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","toLowerCase","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","console","error","_proxy","warn","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","_step12","_iterator12","descriptorDefaults","_getResolver2","platform","resolverCache","p","hasFunction","_step13","_descriptors2","isScriptable","isIndexable","_iterator13","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","c","moveNumericKeys","_i3","_keys","intKey","Chart","userConfig","_this12","initialCanvas","existingChart","chartOptionScopes","OffscreenCanvas","_detectPlatform","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","responsive","bindEvents","_resizeBeforeDraw","_resize","maintainAspectRatio","newSize","getMaximumSize","newRatio","getDevicePixelRatio","onResize","render","scalesOptions","axisOptions","_this13","scaleOpts","updated","isRadial","dposition","dtype","scaleType","getScale","init","hasUpdated","_destroyDatasetMeta","_this14","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","_defaults$datasets$ty","_updateMetasets","_this15","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","_this16","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","events","unbindEvents","_step14","_iterator14","_getUniformDataChanges","_step14$value","datasetCount","makeSet","changeSet","_this17","noArea","_this17$_layers","_idx","_i4","_ilen","_updateDataset","_this$_resizeBeforeDr","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","_this$canvas","toDataURL","bindUserEvents","bindResponsiveEvents","_this18","_add","_this19","detached","_remove","isAttached","_this20","prefix","activeElements","_this21","lastActive","_ref4","notify","replay","hoverOptions","hover","deactivated","activated","updateHoverStyle","_this22","inChartArea","eventFilter","_handleEvent","_this$_active","_getActiveElements","isClick","lastEvent","determineLastEvent","onHover","getElementsAtEventForMode","_this$options11","invalidatePlugins","clipArc","pixelMargin","angleMargin","closePath","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","_pCenter","PI","_pCenter2","p8","_pCenter3","outerStartX","outerStartY","outerEndX","outerEndY","borderJoinStyle","inner","lineJoin","fullCircles","drawFullCircleBorders","defineProperties","enumerable","version","unregister","ArcElement","_Element2","_super12","_this23","chartX","chartY","_getAngleFromPoint2","_this$getProps2","rAdjust","betweenAngles","withinRadius","_this$getProps3","_this$options12","halfAngle","halfRadius","radiusOffset","translate","drawArc","setStyle","lineCap","borderCapStyle","previous","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","_pathVars","lineMethod","stepped","tension","cubicInterpolationMode","getLineMethod","_ref5","_ref5$move","fastPathSegment","prevX","lastY","_pathVars2","_ref6","_ref6$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_draw","path","_path","strokePathWithCache","_step15","segments","segmentMethod","_iterator15","strokePathDirect","LineElement","_Element3","_super13","_this24","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","_segments$i","interpolated","_step16","_iterator16","inRange$1","hitRadius","capBezierPoints","PointElement","_Element4","_super14","_this25","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","bar","half","_bar$getProps","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","parseBorderRadius","outer","_inRange","skipX","skipY","addNormalRectPath","rect","inflateRect","refRect","BarElement","_Element5","_super15","_this26","_this$options13","_boundingRects","addRectPath","_this$getProps6","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","_ref7","_ref7$x","_ref7$y","linePoints","_ref8","_pointsFromSegments","_shouldApplyFill","_resolveTarget","sources","propagate","visited","_decodeFill","fillOption","parseFillOption","parseFloat","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","_findPoint","findPoint","unshift","interpolate","pointValue","firstValue","lastValue","simpleArc","_getTarget","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_source$scale","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","_ref9","_ref9$above","above","_ref9$below","clipVertical","doFill","clipY","lineLoop","_step20","_iterator20","_step21","_step17","tpoints","_iterator17","_step18","_iterator18","_step19","tgt","subBounds","_iterator19","fillSource","_iterator21","_step21$value","src","_src$style","_src$style$background","notShape","clipBounds","interpolatedLineTo","targetLoop","_scale$chart$chartAre","_ref10","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_Element6","_super16","_this27","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","_this28","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","heightLimit","totalWidth","currentColWidth","currentColHeight","col","_this$options14","rtl","rtlHelper","_step22","_iterator22","hitbox","leftForLtr","_step23","_iterator23","_hitbox","cursor","_this29","defaultColor","fontColor","halfFontSize","_getBoxSize2","textDirection","textWidth","setWidth","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","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","_this30","_padding","textSize","fontOpts","_this$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","positioners","WeakMap","average","hasValue","tooltipPosition","eventPosition","nearestElement","d","tp","pushOrConcat","toPush","splitNewlines","str","String","createTooltipItem","_controller$getLabelA","getLabelAndValue","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","_toTRBLCorners","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","_Element8","_super18","_this31","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","_this32","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","_this33","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","_toTRBLCorners2","ptX","ptY","pt","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","_toTRBLCorners3","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","_this34","_ref11","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","_willRender","labelCount","findOrAddLabel","addedLabels","addIfString","lastIndexOf","CategoryScale","_Scale","_super19","_this35","_startValue","_valueRange","_addedLabels","added","_step24","_iterator24","_step24$value","_index3","isFinite","_this$getUserBounds2","_this$getMinMax","getDecimalForPixel","relativeLabelSize","minSpacing","_ref12","rad","LinearScaleBase","_Scale2","_super20","_this36","_endValue","_this$getUserBounds3","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","maxTicks","stepSize","computeTickLimit","getTickLimit","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","decimalPlaces","generateTicks$1","_maxDigits","LinearScale","_LinearScaleBase","_super21","_this$getMinMax2","handleTickRangeOptions","isMajor","tickVal","LogarithmicScale","_Scale3","_super22","_this37","_zero","_this$getMinMax3","_this$getUserBounds4","exp","m","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","RadialLinearScale","_LinearScaleBase2","_super23","_this38","_this$getMinMax4","_this39","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","_this$_pointLabelItem","_this$options15","_this40","_scale$_pointLabelIte","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","_this41","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","addTick","time","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_Scale4","_super24","_this42","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_this$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","formatter","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","normalize","table","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","span","TimeSeriesScale","_TimeScale","_super25","_this43","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable"],"mappings":"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","file":"3fff1979-00eeb3702c72c58d285a.js","sourcesContent":["import _assertThisInitialized from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/assertThisInitialized\";\nimport _get from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/get\";\nimport _inherits from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/inherits\";\nimport _possibleConstructorReturn from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn\";\nimport _getPrototypeOf from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/getPrototypeOf\";\nimport _slicedToArray from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/slicedToArray\";\nimport _defineProperty from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/defineProperty\";\nimport _toConsumableArray from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/toConsumableArray\";\nimport _classCallCheck from \"/home/vsts/work/1/s/packages/website/node_modules/@babel/runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"/home/vsts/work/1/s/packages/website/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); 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 = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : 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 { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { 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 = it.call(o); }, 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.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as _color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as log10, A as _factorize, B as finiteOrDefault, C as callback, D as _addGrace, E as _limitValue, F as toDegrees, G as _measureText, I as _int16Range, J as _alignPixel, K as toPadding, L as clipArea, M as renderText, N as unclipArea, O as toFont, Q as each, R as _toLeftRightCenter, S as _alignStartEnd, U as overrides, V as merge, W as _capitalize, X as getRelativePosition, Y as _rlookupByKey, Z as _lookupByKey, $ as _isPointInArea, a0 as getAngleFromPoint, a1 as _getMaximumSize, a2 as _getParentNode, a3 as readUsedSize, a4 as throttled, a5 as supportsEventListenerOptions, a6 as _isDomSupported, a7 as descriptors, a8 as isFunction, a9 as _attachContext, aa as _createResolver, ab as _descriptors, ac as mergeIf, ad as uid, ae as debounce, af as retinaScale, ag as clearCanvas, ah as setsEqual, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _readValueToProps, am as _updateBezierControlPoints, an as _computeSegments, ao as _boundSegments, ap as _steppedInterpolation, aq as _bezierInterpolation, ar as _pointInLine, as as _steppedLineTo, at as _bezierCurveTo, au as drawPoint, av as addRoundedRectPath, aw as toTRBL, ax as toTRBLCorners, ay as _boundSegment, az as _normalizeAngle, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as noop, aG as distanceBetweenPoints, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as _longestText, aN as _filterBetween, aO as _lookup } from './chunks/helpers.segment.mjs';\nexport { d as defaults } from './chunks/helpers.segment.mjs';\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 _this = this;\n\n if (this._request) {\n return;\n }\n\n this._running = true;\n this._request = requestAnimFrame.call(window, function () {\n _this._update();\n\n _this._request = null;\n\n if (_this._running) {\n _this._refresh();\n }\n });\n }\n }, {\n key: \"_update\",\n value: function _update() {\n var _this2 = this;\n\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n var remaining = 0;\n\n this._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 _this2._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n\n _this2._notify(chart, anims, date, 'complete');\n\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._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 if (this._active) {\n this._notify(false);\n\n var currentValue = this._target[this._prop];\n var elapsed = date - this._start;\n var remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n\n this._notify(false);\n }\n }\n }, {\n key: \"tick\",\n value: function tick(date) {\n var elapsed = date - this._start;\n var duration = this._duration;\n var prop = this._prop;\n var from = this._from;\n var loop = this._loop;\n var to = this._to;\n var factor;\n this._active = from !== to && (loop || elapsed < duration);\n\n if (!this._active) {\n this._target[prop] = to;\n\n this._notify(true);\n\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._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 for (var _i = 0, _animationOptions = animationOptions; _i < _animationOptions.length; _i++) {\n var option = _animationOptions[_i];\n resolved[option] = cfg[option];\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 disabled: value === false\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) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\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, type) {\n var _iterator = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas(type).reverse()),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var meta = _step.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 _iterator.e(err);\n } finally {\n _iterator.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, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\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 createContext(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 createContext(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 var datasetIndex = meta.controller.index;\n var axis = meta.vScale && meta.vScale.axis;\n\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n\n var _iterator2 = _createForOfIteratorHelper(items),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var parsed = _step2.value;\n var stacks = parsed._stacks;\n\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n\n delete stacks[axis][datasetIndex];\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.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 createStack = function createStack(canStack, meta, chart) {\n return canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\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.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n\n _createClass(DatasetController, [{\n key: \"initialize\",\n value: function initialize() {\n var meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n }, {\n key: \"updateIndex\",\n value: function updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n\n this.index = datasetIndex;\n }\n }, {\n key: \"linkScales\",\n value: function linkScales() {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var dataset = this.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 = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.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 dataset = this.getDataset();\n var data = dataset.data || (dataset.data = []);\n var _data = this._data;\n\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n var meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n\n this._syncList = [];\n this._data = data;\n }\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n }, {\n key: \"buildOrUpdateElements\",\n value: function buildOrUpdateElements(resetNewElements) {\n var meta = this._cachedMeta;\n var dataset = this.getDataset();\n var stackChanged = false;\n\n this._dataCheck();\n\n var oldStacked = meta._stacked;\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 this._resyncElements(resetNewElements);\n\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var config = this.chart.config;\n var scopeKeys = config.datasetScopeKeys(this._type);\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var meta = this._cachedMeta,\n data = this._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 (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.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(this, 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 value = _applyStack(stack, parsedValue, this._cachedMeta.index);\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 meta = this._cachedMeta;\n var _parsed = meta._parsed;\n var sorted = meta._sorted && scale === meta.iScale;\n var ilen = _parsed.length;\n\n var otherScale = this._getOtherScale(scale);\n\n var stack = createStack(canStack, meta, this.chart);\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, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n var otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n\n this.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 this.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 meta = this._cachedMeta;\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var parsed = this.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 meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n }, {\n key: \"update\",\n value: function update(mode) {}\n }, {\n key: \"draw\",\n value: function draw() {\n var ctx = this._ctx;\n var chart = this.chart;\n var meta = this._cachedMeta;\n var elements = meta.data || [];\n var area = chart.chartArea;\n var active = [];\n var start = this._drawStart || 0;\n var count = this._drawCount || elements.length - start;\n var drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\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.hidden) {\n continue;\n }\n\n if (element.active && drawActiveElementsOnTop) {\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 dataset = this.getDataset();\n var context;\n\n if (index >= 0 && index < this._cachedMeta.data.length) {\n var element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\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 _this3 = this;\n\n var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var active = mode === 'active';\n var cache = this._cachedDataOpts;\n var cacheKey = elementType + '-' + mode;\n var cached = cache[cacheKey];\n var sharing = this.enableOptionSharing && defined(index);\n\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n\n var config = this.chart.config;\n var scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n var prefixes = active ? [\"\".concat(elementType, \"Hover\"), 'hover', elementType, ''] : [elementType, ''];\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n var names = Object.keys(defaults.elements[elementType]);\n\n var context = function context() {\n return _this3.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 chart = this.chart;\n var cache = this._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 = this.chart.config;\n var scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.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: \"_getSharedOptions\",\n value: function _getSharedOptions(start, mode) {\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var previouslySharedOptions = this._sharedOptions;\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions: sharedOptions,\n includeOptions: includeOptions\n };\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 data = this._data;\n var elements = this._cachedMeta.data;\n\n var _iterator3 = _createForOfIteratorHelper(this._syncList),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var _step3$value = _slicedToArray(_step3.value, 3),\n method = _step3$value[0],\n arg1 = _step3$value[1],\n arg2 = _step3$value[2];\n\n this[method](arg1, arg2);\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n this._syncList = [];\n var numMeta = elements.length;\n var numData = data.length;\n var count = Math.min(numData, numMeta);\n\n if (count) {\n this.parse(0, count);\n }\n\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\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 meta = this._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 this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n\n this.parse(start, count);\n\n if (resetNewElements) {\n this.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 meta = this._cachedMeta;\n\n if (this._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: \"_sync\",\n value: function _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n var _args2 = _slicedToArray(args, 3),\n method = _args2[0],\n arg1 = _args2[1],\n arg2 = _args2[2];\n\n this[method](arg1, arg2);\n }\n\n this.chart._dataChanges.push([this.index].concat(_toConsumableArray(args)));\n }\n }, {\n key: \"_onDataPush\",\n value: function _onDataPush() {\n var count = arguments.length;\n\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n }, {\n key: \"_onDataPop\",\n value: function _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n }, {\n key: \"_onDataShift\",\n value: function _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n }, {\n key: \"_onDataSplice\",\n value: function _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n\n var newCount = arguments.length - 2;\n\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n }, {\n key: \"_onDataUnshift\",\n value: function _onDataUnshift() {\n this._sync(['_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, type) {\n if (!scale._cache.$bar) {\n var visibleMetas = scale.getMatchingVisibleMetas(type);\n var values = [];\n\n for (var i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[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(meta) {\n var scale = meta.iScale;\n var values = getAllScaleValues(scale, meta.type);\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\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n var reverse, start, end, top, bottom;\n\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n\n return {\n start: start,\n end: end,\n reverse: reverse,\n top: top,\n bottom: bottom\n };\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n var edge = options.borderSkipped;\n var res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n\n var _borderProps = borderProps(properties),\n start = _borderProps.start,\n end = _borderProps.end,\n reverse = _borderProps.reverse,\n top = _borderProps.top,\n bottom = _borderProps.bottom;\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = 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 setInflateAmount(properties, _ref, ratio) {\n var inflateAmount = _ref.inflateAmount;\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\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: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var parsed = this.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 this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BarController.prototype), \"initialize\", this).call(this);\n\n var meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(bars, start, count, mode) {\n var reset = mode === 'reset';\n var index = this.index,\n vScale = this._cachedMeta.vScale;\n var base = vScale.getBasePixel();\n var horizontal = vScale.isHorizontal();\n\n var ruler = this._getRuler();\n\n var _this$_getSharedOptio = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio.sharedOptions,\n includeOptions = _this$_getSharedOptio.includeOptions;\n\n for (var i = start; i < start + count; i++) {\n var parsed = this.getParsed(i);\n var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base: base,\n head: base\n } : this._calculateBarValuePixels(i);\n\n var ipixels = this._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) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n\n var options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n }, {\n key: \"_getStacks\",\n value: function _getStacks(last, dataIndex) {\n var iScale = this._cachedMeta.iScale;\n var metasets = iScale.getMatchingVisibleMetas(this._type).filter(function (meta) {\n return meta.controller.options.grouped;\n });\n var stacked = iScale.options.stacked;\n var stacks = [];\n\n var skipNull = function skipNull(meta) {\n var parsed = meta.controller.getParsed(dataIndex);\n var val = parsed && parsed[meta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n\n var _iterator4 = _createForOfIteratorHelper(metasets),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var meta = _step4.value;\n\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n\n if (meta.index === last) {\n break;\n }\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\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 opts = this.options;\n var meta = this._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(this.getParsed(i)[iScale.axis], i));\n }\n\n var barThickness = opts.barThickness;\n var min = barThickness || computeMinSampleSize(meta);\n return {\n min: min,\n pixels: pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._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 _this$_cachedMeta = this._cachedMeta,\n vScale = _this$_cachedMeta.vScale,\n _stacked = _this$_cachedMeta._stacked,\n _this$options = this.options,\n baseValue = _this$options.base,\n minBarLength = _this$options.minBarLength;\n var actualBase = baseValue || 0;\n var parsed = this.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 ? this.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 (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n\n if (value === actualBase) {\n base -= size / 2;\n }\n\n var startPixel = vScale.getPixelForDecimal(0);\n var endPixel = vScale.getPixelForDecimal(1);\n var min = Math.min(startPixel, endPixel);\n var max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n var halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\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 scale = ruler.scale;\n var options = this.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 ? this._getStackCount(index) : ruler.stackCount;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n var stackIndex = this._getStackIndex(this.index, this._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(this.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 meta = this._cachedMeta;\n var vScale = meta.vScale;\n var rects = meta.data;\n var ilen = rects.length;\n var i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\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 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: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parsePrimitiveData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseArrayData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n var item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseObjectData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n var item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n\n return parsed;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var data = this._cachedMeta.data;\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n\n return max > 0 && max;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = this.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 points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta2 = this._cachedMeta,\n iScale = _this$_cachedMeta2.iScale,\n vScale = _this$_cachedMeta2.vScale;\n\n var _this$_getSharedOptio2 = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio2.sharedOptions,\n includeOptions = _this$_getSharedOptio2.includeOptions;\n\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var parsed = !reset && this.getParsed(i);\n var properties = {};\n var iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n var vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\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, true) ? 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, true) ? -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 _this4;\n\n _classCallCheck(this, DoughnutController);\n\n _this4 = _super3.call(this, chart, datasetIndex);\n _this4.enableOptionSharing = true;\n _this4.innerRadius = undefined;\n _this4.outerRadius = undefined;\n _this4.offsetX = undefined;\n _this4.offsetY = undefined;\n return _this4;\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\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n var getter = function getter(i) {\n return +data[i];\n };\n\n if (isObject(data[start])) {\n var _this$_parsing$key = this._parsing.key,\n key = _this$_parsing$key === void 0 ? 'value' : _this$_parsing$key;\n\n getter = function getter(i) {\n return +resolveObjectKey(data[i], key);\n };\n }\n\n var i, ilen;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\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\n for (var i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n var controller = this.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 chart = this.chart;\n var chartArea = chart.chartArea;\n var meta = this._cachedMeta;\n var arcs = meta.data;\n var spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n var cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n\n var chartWeight = this._getRingWeight(this.index);\n\n var _this$_getRotationExt = this._getRotationExtents(),\n circumference = _this$_getRotationExt.circumference,\n rotation = _this$_getRotationExt.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(this.options.radius, maxRadius);\n var innerRadius = Math.max(outerRadius * cutout, 0);\n\n var radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_circumference\",\n value: function _circumference(i, reset) {\n var opts = this.options;\n var meta = this._cachedMeta;\n\n var circumference = this._getCircumference();\n\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var reset = mode === 'reset';\n var chart = this.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 : this.innerRadius;\n var outerRadius = animateScale ? 0 : this.outerRadius;\n\n var _this$_getSharedOptio3 = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio3.sharedOptions,\n includeOptions = _this$_getSharedOptio3.includeOptions;\n\n var startAngle = this._getRotation();\n\n var i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n var circumference = this._circumference(i, reset);\n\n var arc = arcs[i];\n var properties = {\n x: centerX + this.offsetX,\n y: centerY + this.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 || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\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) && !metaData[i].hidden) {\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 meta = this._cachedMeta;\n var chart = this.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 max = 0;\n var chart = this.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 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', 'spacing']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n};\nDoughnutController.descriptors = {\n _scriptable: function _scriptable(name) {\n return name !== 'spacing';\n },\n _indexable: function _indexable(name) {\n return name !== 'spacing';\n }\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 var pointStyle = chart.legend.options.labels.pointStyle;\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 pointStyle: pointStyle,\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 this.supportsDecimation = true;\n\n _get(_getPrototypeOf(LineController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._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 = this.chart._animationsDisabled;\n\n var _getStartAndCountOfVi = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi.start,\n count = _getStartAndCountOfVi.count;\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = this.resolveDatasetElementOptions(mode);\n\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta3 = this._cachedMeta,\n iScale = _this$_cachedMeta3.iScale,\n vScale = _this$_cachedMeta3.vScale,\n _stacked = _this$_cachedMeta3._stacked,\n _dataset = _this$_cachedMeta3._dataset;\n\n var _this$_getSharedOptio4 = this._getSharedOptions(start, mode),\n sharedOptions = _this$_getSharedOptio4.sharedOptions,\n includeOptions = _this$_getSharedOptio4.includeOptions;\n\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var _this$options2 = this.options,\n spanGaps = _this$options2.spanGaps,\n segment = _this$options2.segment;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = this.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed[vAxis]);\n var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var meta = this._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(this.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\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\nvar PolarAreaController = /*#__PURE__*/function (_DatasetController5) {\n _inherits(PolarAreaController, _DatasetController5);\n\n var _super5 = _createSuper(PolarAreaController);\n\n function PolarAreaController(chart, datasetIndex) {\n var _this5;\n\n _classCallCheck(this, PolarAreaController);\n\n _this5 = _super5.call(this, chart, datasetIndex);\n _this5.innerRadius = undefined;\n _this5.outerRadius = undefined;\n return _this5;\n }\n\n _createClass(PolarAreaController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var chart = this.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n }, {\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: \"getMinMax\",\n value: function getMinMax() {\n var _this6 = this;\n\n var meta = this._cachedMeta;\n var range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach(function (element, index) {\n var parsed = _this6.getParsed(index).r;\n\n if (!isNaN(parsed) && _this6.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n }, {\n key: \"_updateRadius\",\n value: function _updateRadius() {\n var chart = this.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 this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var reset = mode === 'reset';\n var chart = this.chart;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = this._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 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._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 + this._computeAngle(i, mode, defaultAngle);\n\n var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 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: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n }, {\n key: \"countVisibleElements\",\n value: function countVisibleElements() {\n var _this7 = this;\n\n var meta = this._cachedMeta;\n var count = 0;\n meta.data.forEach(function (element, index) {\n if (!isNaN(_this7.getParsed(index).r) && _this7.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 var pointStyle = chart.legend.options.labels.pointStyle;\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 pointStyle: pointStyle,\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 vScale = this._cachedMeta.vScale;\n var parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._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 = this.resolveDatasetElementOptions(mode);\n\n if (!this.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 this.updateElement(line, undefined, properties, mode);\n }\n\n this.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var scale = this._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 = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n var pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\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 this.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 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 _this8 = this;\n\n var anims = this.$animations;\n\n if (!final || !anims) {\n return this;\n }\n\n var ret = {};\n props.forEach(function (prop) {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : _this8[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});\ndefaults.describe('scale.ticks', {\n _scriptable: function _scriptable(name) {\n return name !== 'backdropPadding' && name !== 'callback';\n },\n _indexable: function _indexable(name) {\n return name !== 'backdropPadding';\n }\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 createContext(parent, {\n scale: scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(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 chart = scale.chart;\n var chartArea = chart.chartArea,\n scales = chart.scales;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n var height = bottom - top;\n var width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n var _positionAxisID = Object.keys(position)[0];\n var _value = position[_positionAxisID];\n titleX = scales[_positionAxisID].getPixelForValue(_value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n\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 _super8 = _createSuper(Scale);\n\n function Scale(cfg) {\n var _this9;\n\n _classCallCheck(this, Scale);\n\n _this9 = _super8.call(this);\n _this9.id = cfg.id;\n _this9.type = cfg.type;\n _this9.options = undefined;\n _this9.ctx = cfg.ctx;\n _this9.chart = cfg.chart;\n _this9.top = undefined;\n _this9.bottom = undefined;\n _this9.left = undefined;\n _this9.right = undefined;\n _this9.width = undefined;\n _this9.height = undefined;\n _this9._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n _this9.maxWidth = undefined;\n _this9.maxHeight = undefined;\n _this9.paddingTop = undefined;\n _this9.paddingBottom = undefined;\n _this9.paddingLeft = undefined;\n _this9.paddingRight = undefined;\n _this9.axis = undefined;\n _this9.labelRotation = undefined;\n _this9.min = undefined;\n _this9.max = undefined;\n _this9._range = undefined;\n _this9.ticks = [];\n _this9._gridLineItems = null;\n _this9._labelItems = null;\n _this9._labelSizes = null;\n _this9._length = 0;\n _this9._maxLength = 0;\n _this9._longestTextCache = {};\n _this9._startPixel = undefined;\n _this9._endPixel = undefined;\n _this9._reversePixels = false;\n _this9._userMax = undefined;\n _this9._userMin = undefined;\n _this9._suggestedMax = undefined;\n _this9._suggestedMin = undefined;\n _this9._ticksLength = 0;\n _this9._borderValue = 0;\n _this9._cache = {};\n _this9._dataLimitsCached = false;\n _this9.$context = undefined;\n return _this9;\n }\n\n _createClass(Scale, [{\n key: \"init\",\n value: function init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.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 _this$getUserBounds = this.getUserBounds(),\n min = _this$getUserBounds.min,\n max = _this$getUserBounds.max,\n minDefined = _this$getUserBounds.minDefined,\n maxDefined = _this$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 = this.getMatchingVisibleMetas();\n\n for (var i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, 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 min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\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 return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.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 _this$options3 = this.options,\n beginAtZero = _this$options3.beginAtZero,\n grace = _this$options3.grace,\n tickOpts = _this$options3.ticks;\n var sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n var samplingEnabled = sampleSize < this.ticks.length;\n\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var reversePixels = this.options.reverse;\n var startPixel, endPixel;\n\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.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 if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.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 this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\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 tickOpts = this.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], this);\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 options = this.options;\n var tickOpts = options.ticks;\n var numTicks = this.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 (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n var labelSizes = this._getLabelSizes();\n\n var maxLabelWidth = labelSizes.widest.width;\n var maxLabelHeight = labelSizes.highest.height;\n\n var maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n\n this.labelRotation = labelRotation;\n }\n }, {\n key: \"afterCalculateLabelRotation\",\n value: function afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n }, {\n key: \"afterAutoSkip\",\n value: function afterAutoSkip() {}\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 minSize = {\n width: 0,\n height: 0\n };\n var chart = this.chart,\n _this$options4 = this.options,\n tickOpts = _this$options4.ticks,\n titleOpts = _this$options4.title,\n gridOpts = _this$options4.grid;\n\n var display = this._isVisible();\n\n var isHorizontal = this.isHorizontal();\n\n if (display) {\n var titleHeight = getTitleHeight(titleOpts, chart.options.font);\n\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n\n if (tickOpts.display && this.ticks.length) {\n var _this$_getLabelSizes = this._getLabelSizes(),\n first = _this$_getLabelSizes.first,\n last = _this$_getLabelSizes.last,\n widest = _this$_getLabelSizes.widest,\n highest = _this$_getLabelSizes.highest;\n\n var tickPadding = tickOpts.padding * 2;\n var angleRadians = toRadians(this.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(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n }, {\n key: \"_calculatePadding\",\n value: function _calculatePadding(first, last, sin, cos) {\n var _this$options5 = this.options,\n _this$options5$ticks = _this$options5.ticks,\n align = _this$options5$ticks.align,\n padding = _this$options5$ticks.padding,\n position = _this$options5.position;\n var isRotated = this.labelRotation !== 0;\n var labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n var offsetLeft = this.getPixelForTick(0) - this.left;\n var offsetRight = this.right - this.getPixelForTick(this.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 if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.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 this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n }, {\n key: \"_handleMargins\",\n value: function _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._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$options6 = this.options,\n axis = _this$options6.axis,\n position = _this$options6.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 this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n\n this.afterTickToLabelConversion();\n }\n }, {\n key: \"_getLabelSizes\",\n value: function _getLabelSizes() {\n var labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n var sampleSize = this.options.ticks.sampleSize;\n var ticks = this.ticks;\n\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._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 if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n var pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.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 ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n var tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n }, {\n key: \"_tickSize\",\n value: function _tickSize() {\n var optionTicks = this.options.ticks;\n var rot = toRadians(this.labelRotation);\n var cos = Math.abs(Math.cos(rot));\n var sin = Math.abs(Math.sin(rot));\n\n var labelSizes = this._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 this.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 axis = this.axis;\n var chart = this.chart;\n var options = this.options;\n var grid = options.grid,\n position = options.position;\n var offset = grid.offset;\n var isHorizontal = this.isHorizontal();\n var ticks = this.ticks;\n var ticksLength = ticks.length + (offset ? 1 : 0);\n var tl = getTickMarkLength(grid);\n var items = [];\n var borderOpts = grid.setContext(this.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(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.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(this.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 _positionAxisID2 = Object.keys(position)[0];\n var _value2 = position[_positionAxisID2];\n borderValue = alignBorderValue(this.chart.scales[_positionAxisID2].getPixelForValue(_value2));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n var limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n var step = Math.max(1, Math.ceil(ticksLength / limit));\n\n for (i = 0; i < ticksLength; i += step) {\n var optsAtIndex = grid.setContext(this.getContext(i));\n var lineWidth = optsAtIndex.lineWidth;\n var lineColor = optsAtIndex.color;\n var borderDash = optsAtIndex.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(this, 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 this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n }, {\n key: \"_computeLabelItems\",\n value: function _computeLabelItems(chartArea) {\n var axis = this.axis;\n var options = this.options;\n var position = options.position,\n optionTicks = options.ticks;\n var isHorizontal = this.isHorizontal();\n var ticks = this.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(this.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 = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n var ret = this._getYAxisLabelAlignment(tl);\n\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n var _ret = this._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 = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n\n textAlign = this._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 _positionAxisID3 = Object.keys(position)[0];\n var _value3 = position[_positionAxisID3];\n x = this.chart.scales[_positionAxisID3].getPixelForValue(_value3);\n }\n\n textAlign = this._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 = this._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(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._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 var tickTextAlign = textAlign;\n\n if (isHorizontal) {\n x = pixel;\n\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\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: tickTextAlign,\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 _this$options7 = this.options,\n position = _this$options7.position,\n ticks = _this$options7.ticks;\n var rotation = -toRadians(this.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 } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n\n return align;\n }\n }, {\n key: \"_getYAxisLabelAlignment\",\n value: function _getYAxisLabelAlignment(tl) {\n var _this$options8 = this.options,\n position = _this$options8.position,\n _this$options8$ticks = _this$options8.ticks,\n crossAlign = _this$options8$ticks.crossAlign,\n mirror = _this$options8$ticks.mirror,\n padding = _this$options8$ticks.padding;\n\n var labelSizes = this._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 x = this.right + padding;\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 += widest;\n }\n } else {\n x = this.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 = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\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 -= widest;\n }\n } else {\n x = this.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 = this.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 if (this.options.ticks.mirror) {\n return;\n }\n\n var chart = this.chart;\n var position = this.options.position;\n\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.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 grid = this.options.grid;\n\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n\n var ticks = this.ticks;\n var index = ticks.findIndex(function (t) {\n return t.value === value;\n });\n\n if (index >= 0) {\n var opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n\n return 0;\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid(chartArea) {\n var grid = this.options.grid;\n var ctx = this.ctx;\n\n var items = this._gridLineItems || (this._gridLineItems = this._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 chart = this.chart,\n ctx = this.ctx,\n grid = this.options.grid;\n var borderOpts = grid.setContext(this.getContext());\n var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n\n if (!axisWidth) {\n return;\n }\n\n var lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n var borderValue = this._borderValue;\n var x1, x2, y1, y2;\n\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.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 optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n var ctx = this.ctx;\n\n var area = this._computeLabelArea();\n\n if (area) {\n clipArea(ctx, area);\n }\n\n var items = this._labelItems || (this._labelItems = this._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$options9 = this.options,\n position = _this$options9.position,\n title = _this$options9.title,\n reverse = _this$options9.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' || position === 'center' || isObject(position)) {\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 if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n }, {\n key: \"_layers\",\n value: function _layers() {\n var _this10 = this;\n\n var opts = this.options;\n var tz = opts.ticks && opts.ticks.z || 0;\n var gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: function draw(chartArea) {\n _this10.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: function draw(chartArea) {\n _this10.drawBackground();\n\n _this10.drawGrid(chartArea);\n\n _this10.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: function draw() {\n _this10.drawBorder();\n }\n }, {\n z: tz,\n draw: function draw(chartArea) {\n _this10.drawLabels(chartArea);\n }\n }];\n }\n }, {\n key: \"getMatchingVisibleMetas\",\n value: function getMatchingVisibleMetas(type) {\n var metas = this.chart.getSortedVisibleDatasetMetas();\n var axisID = this.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] === this.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 fontSize = this._resolveTickFontOptions(0).lineHeight;\n\n return (this.isHorizontal() ? this.width : this.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 proto = Object.getPrototypeOf(item);\n var parentScope;\n\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n\n var items = this.items;\n var id = item.id;\n var scope = this.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 (this.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 _this11 = this;\n\n _toConsumableArray(args).forEach(function (arg) {\n var reg = typedRegistry || _this11._getRegistryForType(arg);\n\n if (typedRegistry || reg.isForType(arg) || reg === _this11.plugins && arg.id) {\n _this11._exec(method, reg, arg);\n } else {\n each(arg, function (item) {\n var itemReg = typedRegistry || _this11._getRegistryForType(item);\n\n _this11._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 ScatterController = /*#__PURE__*/function (_DatasetController7) {\n _inherits(ScatterController, _DatasetController7);\n\n var _super9 = _createSuper(ScatterController);\n\n function ScatterController() {\n _classCallCheck(this, ScatterController);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(ScatterController, [{\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n var _meta$data2 = meta.data,\n points = _meta$data2 === void 0 ? [] : _meta$data2;\n var animationsDisabled = this.chart._animationsDisabled;\n\n var _getStartAndCountOfVi2 = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi2.start,\n count = _getStartAndCountOfVi2.count;\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n if (this.options.showLine) {\n var line = meta.dataset,\n _dataset = meta._dataset;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n }\n\n this.updateElements(points, start, count, mode);\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var showLine = this.options.showLine;\n\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = registry.getElement('line');\n }\n\n _get(_getPrototypeOf(ScatterController.prototype), \"addElements\", this).call(this);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta4 = this._cachedMeta,\n iScale = _this$_cachedMeta4.iScale,\n vScale = _this$_cachedMeta4.vScale,\n _stacked = _this$_cachedMeta4._stacked,\n _dataset = _this$_cachedMeta4._dataset;\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions);\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var _this$options10 = this.options,\n spanGaps = _this$options10.spanGaps,\n segment = _this$options10.segment;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = this.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed[vAxis]);\n var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var meta = this._cachedMeta;\n var data = meta.data || [];\n\n if (!this.options.showLine) {\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n\n return max > 0 && max;\n }\n\n var dataset = meta.dataset;\n var border = dataset.options && dataset.options.borderWidth || 0;\n\n if (!data.length) {\n return border;\n }\n\n var firstPoint = data[0].size(this.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }]);\n\n return ScatterController;\n}(DatasetController);\n\nScatterController.id = 'scatter';\nScatterController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\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: Check that a complete date adapter is 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: \"init\",\n value: function init(chartOptions) {}\n }, {\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 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 && axis !== 'r' && _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 evaluateInteractionItems(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$i = metasets[i],\n _index2 = _metasets$i.index,\n data = _metasets$i.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, _index2, 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, includeInvisible) {\n var items = [];\n\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n\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 evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n var items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n var _element$getProps = element.getProps(['startAngle', 'endAngle'], useFinalPosition),\n startAngle = _element$getProps.startAngle,\n endAngle = _element$getProps.endAngle;\n\n var _getAngleFromPoint = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n }),\n angle = _getAngleFromPoint.angle;\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n }\n\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n var items = [];\n var distanceMetric = getDistanceMetricForAxis(axis);\n var minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n var inRange = element.inRange(position.x, position.y, useFinalPosition);\n\n if (intersect && !inRange) {\n return;\n }\n\n var center = element.getCenterPoint(useFinalPosition);\n var pointInArea = !!includeInvisible || chart.isPointInArea(center);\n\n if (!pointInArea && !inRange) {\n return;\n }\n\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 evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n var items = [];\n var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n var intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, 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 intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n\n if (intersect && !intersectsItem) {\n return [];\n }\n\n return items;\n}\n\nvar Interaction = {\n evaluateInteractionItems: evaluateInteractionItems,\n modes: {\n index: function index(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'x';\n var includeInvisible = options.includeInvisible || false;\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\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 includeInvisible = options.includeInvisible || false;\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\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 var includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest: function nearest(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x: function x(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y: function y(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, 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, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n var _box = box;\n pos = _box.position;\n var _box$options = _box.options;\n stack = _box$options.stack;\n var _box$options$stackWei = _box$options.stackWeight;\n stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;\n layoutBoxes.push({\n index: i,\n box: box,\n pos: pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight: stackWeight\n });\n }\n\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n var stacks = {};\n\n var _iterator5 = _createForOfIteratorHelper(layouts),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var wrap = _step5.value;\n var stack = wrap.stack,\n pos = wrap.pos,\n stackWeight = wrap.stackWeight;\n\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n\n var _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n\n _stack.count++;\n _stack.weight += stackWeight;\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n return stacks;\n}\n\nfunction setLayoutDims(layouts, params) {\n var stacks = buildStacks(layouts);\n var vBoxMaxWidth = params.vBoxMaxWidth,\n hBoxMaxHeight = params.hBoxMaxHeight;\n var i, ilen, layout;\n\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n var fullSize = layout.box.fullSize;\n var stack = stacks[layout.stack];\n var factor = stack && layout.stackWeight / stack.weight;\n\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n\n return stacks;\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, stacks) {\n var pos = layout.pos,\n box = layout.box;\n var maxPadding = chartArea.maxPadding;\n\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n\n var stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[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, stacks) {\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, stacks),\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, stacks) || changed;\n}\n\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n var userPadding = params.padding;\n var x = chartArea.x,\n y = chartArea.y;\n\n var _iterator6 = _createForOfIteratorHelper(boxes),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var layout = _step6.value;\n var box = layout.box;\n var stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n var weight = layout.stackWeight / stack.weight || 1;\n\n if (layout.horizontal) {\n var width = chartArea.w * weight;\n var height = stack.size || box.height;\n\n if (defined(stack.start)) {\n y = stack.start;\n }\n\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n var _height = chartArea.h * weight;\n\n var _width = stack.size || box.width;\n\n if (defined(stack.start)) {\n x = stack.start;\n }\n\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, _width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, _width, _height);\n }\n\n stack.start = x;\n stack.placed += _height;\n x = box.right;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\ndefaults.set('layout', {\n autoPadding: true,\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 = Math.max(width - padding.width, 0);\n var availableHeight = Math.max(height - padding.height, 0);\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 var stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\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 left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\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 key: \"updateConfig\",\n value: function updateConfig(config) {}\n }]);\n\n return BasePlatform;\n}();\n\nvar BasicPlatform = /*#__PURE__*/function (_BasePlatform) {\n _inherits(BasicPlatform, _BasePlatform);\n\n var _super10 = _createSuper(BasicPlatform);\n\n function BasicPlatform() {\n _classCallCheck(this, BasicPlatform);\n\n return _super10.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 key: \"updateConfig\",\n value: function updateConfig(config) {\n config.options.animation = false;\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(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 nodeListContains(nodeList, canvas) {\n var _iterator7 = _createForOfIteratorHelper(nodeList),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var node = _step7.value;\n\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator8 = _createForOfIteratorHelper(entries),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var entry = _step8.value;\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n if (trigger) {\n listener();\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 var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator9 = _createForOfIteratorHelper(entries),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var entry = _step9.value;\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: 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 _super11 = _createSuper(DomPlatform);\n\n function DomPlatform() {\n _classCallCheck(this, DomPlatform);\n\n return _super11.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 && container.isConnected);\n }\n }]);\n\n return DomPlatform;\n}(BasePlatform);\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n\n return DomPlatform;\n}\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 if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n\n this._notify(this._init, chart, 'install');\n }\n\n var descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n\n var result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n\n this._notify(this._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 _iterator10 = _createForOfIteratorHelper(descriptors),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var descriptor = _step10.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 _iterator10.e(err);\n } finally {\n _iterator10.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 localIds = {};\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 _i2 = 0; _i2 < local.length; _i2++) {\n var plugin = local[_i2];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n\n return {\n plugins: plugins,\n localIds: localIds\n };\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, _ref2, options, all) {\n var plugins = _ref2.plugins,\n localIds = _ref2.localIds;\n var result = [];\n var context = chart.getContext();\n\n var _iterator11 = _createForOfIteratorHelper(plugins),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var plugin = _step11.value;\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, {\n plugin: plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n return result;\n}\n\nfunction pluginOpts(config, _ref3, opts, context) {\n var plugin = _ref3.plugin,\n local = _ref3.local;\n var keys = config.pluginScopeKeys(plugin);\n var scopes = config.getOptionScopes(opts, keys);\n\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n\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\n if (!isObject(scaleConf)) {\n return console.error(\"Invalid scale configuration for scale: \".concat(id));\n }\n\n if (scaleConf._proxy) {\n return console.warn(\"Ignoring resolver passed as options for scale: \".concat(id));\n }\n\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 var array = Array.from(scopes);\n\n if (array.length === 0) {\n array.push(Object.create(null));\n }\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 _iterator12 = _createForOfIteratorHelper(names),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var prop = _step12.value;\n result[prop] = options[prop];\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.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: \"platform\",\n get: function get() {\n return this._config.platform;\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\nvar hasFunction = function hasFunction(value) {\n return isObject(value) && Object.getOwnPropertyNames(value).reduce(function (acc, key) {\n return acc || isFunction(value[key]);\n }, false);\n};\n\nfunction needContext(proxy, names) {\n var _descriptors2 = _descriptors(proxy),\n isScriptable = _descriptors2.isScriptable,\n isIndexable = _descriptors2.isIndexable;\n\n var _iterator13 = _createForOfIteratorHelper(names),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var prop = _step13.value;\n var scriptable = isScriptable(prop);\n var indexable = isIndexable(prop);\n var value = (indexable || scriptable) && proxy[prop];\n\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n\n return false;\n}\n\nvar version = \"3.9.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 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\nfunction moveNumericKeys(obj, start, move) {\n var keys = Object.keys(obj);\n\n for (var _i3 = 0, _keys = keys; _i3 < _keys.length; _i3++) {\n var key = _keys[_i3];\n var intKey = +key;\n\n if (intKey >= start) {\n var value = obj[key];\n delete obj[key];\n\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n\n if (isClick) {\n return lastEvent;\n }\n\n return e;\n}\n\nvar Chart = /*#__PURE__*/function () {\n function Chart(item, userConfig) {\n var _this12 = this;\n\n _classCallCheck(this, Chart);\n\n var config = this.config = new Config(userConfig);\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 with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n\n var options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n var context = this.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._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\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 (mode) {\n return _this12.update(mode);\n }, options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\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(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n\n if (this.attached) {\n this.update();\n }\n }\n\n _createClass(Chart, [{\n key: \"_initialize\",\n value: function _initialize() {\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\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 options = this.options;\n var canvas = this.canvas;\n var aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n var newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n var newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n var mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n this.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 _this13 = this;\n\n var options = this.options;\n var scaleOpts = options.scales;\n var scales = this.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: _this13.ctx,\n chart: _this13\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(_this13, scale, scale.options);\n layouts.addBox(_this13, scale);\n });\n }\n }, {\n key: \"_updateMetasets\",\n value: function _updateMetasets() {\n var metasets = this._metasets;\n var numData = this.data.datasets.length;\n var numMeta = metasets.length;\n metasets.sort(function (a, b) {\n return a.index - b.index;\n });\n\n if (numMeta > numData) {\n for (var i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n\n metasets.splice(numData, numMeta - numData);\n }\n\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n }, {\n key: \"_removeUnreferencedMetasets\",\n value: function _removeUnreferencedMetasets() {\n var _this14 = this;\n\n var metasets = this._metasets,\n datasets = this.data.datasets;\n\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n\n metasets.forEach(function (meta, index) {\n if (datasets.filter(function (x) {\n return x === meta._dataset;\n }).length === 0) {\n _this14._destroyDatasetMeta(index);\n }\n });\n }\n }, {\n key: \"buildOrUpdateControllers\",\n value: function buildOrUpdateControllers() {\n var newControllers = [];\n var datasets = this.data.datasets;\n var i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n var dataset = datasets[i];\n var meta = this.getDatasetMeta(i);\n var type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n\n meta = this.getDatasetMeta(i);\n }\n\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.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(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n\n return newControllers;\n }\n }, {\n key: \"_resetElements\",\n value: function _resetElements() {\n var _this15 = this;\n\n each(this.data.datasets, function (dataset, datasetIndex) {\n _this15.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\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 config = this.config;\n config.update();\n var options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n var animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n\n this._checkEventBindings();\n\n this._updateHiddenIndices();\n\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n var newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n var minPadding = 0;\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n var _this$getDatasetMeta = this.getDatasetMeta(i),\n controller = _this$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 minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n\n this._updateLayout(minPadding);\n\n if (!animsDisabled) {\n each(newControllers, function (controller) {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n this.notifyPlugins('afterUpdate', {\n mode: mode\n });\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n var _active = this._active,\n _lastEvent = this._lastEvent;\n\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n }, {\n key: \"_updateScales\",\n value: function _updateScales() {\n var _this16 = this;\n\n each(this.scales, function (scale) {\n layouts.removeBox(_this16, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n }, {\n key: \"_checkEventBindings\",\n value: function _checkEventBindings() {\n var options = this.options;\n var existingEvents = new Set(Object.keys(this._listeners));\n var newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n }, {\n key: \"_updateHiddenIndices\",\n value: function _updateHiddenIndices() {\n var _hiddenIndices = this._hiddenIndices;\n var changes = this._getUniformDataChanges() || [];\n\n var _iterator14 = _createForOfIteratorHelper(changes),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var _step14$value = _step14.value,\n method = _step14$value.method,\n start = _step14$value.start,\n count = _step14$value.count;\n var move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n }\n }, {\n key: \"_getUniformDataChanges\",\n value: function _getUniformDataChanges() {\n var _dataChanges = this._dataChanges;\n\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n var datasetCount = this.data.datasets.length;\n\n var makeSet = function makeSet(idx) {\n return new Set(_dataChanges.filter(function (c) {\n return c[0] === idx;\n }).map(function (c, i) {\n return i + ',' + c.splice(1).join(',');\n }));\n };\n\n var changeSet = makeSet(0);\n\n for (var i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n\n return Array.from(changeSet).map(function (c) {\n return c.split(',');\n }).map(function (a) {\n return {\n method: a[1],\n start: +a[2],\n count: +a[3]\n };\n });\n }\n }, {\n key: \"_updateLayout\",\n value: function _updateLayout(minPadding) {\n var _this17 = this;\n\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n var area = this.chartArea;\n var noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, function (box) {\n var _this17$_layers;\n\n if (noArea && box.position === 'chartArea') {\n return;\n }\n\n if (box.configure) {\n box.configure();\n }\n\n (_this17$_layers = _this17._layers).push.apply(_this17$_layers, _toConsumableArray(box._layers()));\n }, this);\n\n this._layers.forEach(function (item, index) {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n }, {\n key: \"_updateDatasets\",\n value: function _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (var _i4 = 0, _ilen = this.data.datasets.length; _i4 < _ilen; ++_i4) {\n this._updateDataset(_i4, isFunction(mode) ? mode({\n datasetIndex: _i4\n }) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {\n mode: mode\n });\n }\n }, {\n key: \"_updateDataset\",\n value: function _updateDataset(index, mode) {\n var meta = this.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index,\n mode: mode,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n }, {\n key: \"render\",\n value: function render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var i;\n\n if (this._resizeBeforeDraw) {\n var _this$_resizeBeforeDr = this._resizeBeforeDraw,\n width = _this$_resizeBeforeDr.width,\n height = _this$_resizeBeforeDr.height;\n\n this._resize(width, height);\n\n this._resizeBeforeDraw = null;\n }\n\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var layers = this._layers;\n\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n }, {\n key: \"_getSortedDatasetMetas\",\n value: function _getSortedDatasetMetas(filterVisible) {\n var metasets = this._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 if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var metasets = this.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n }, {\n key: \"_drawDataset\",\n value: function _drawDataset(meta) {\n var ctx = this.ctx;\n var clip = meta._clip;\n var useClip = !clip.disabled;\n var area = this.chartArea;\n var args = {\n meta: meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n }, {\n key: \"isPointInArea\",\n value: function isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\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 dataset = this.data.datasets[datasetIndex];\n var metasets = this._metasets;\n var meta = metasets.filter(function (x) {\n return x && x._dataset === dataset;\n }).pop();\n\n if (!meta) {\n meta = {\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 metasets.push(meta);\n }\n\n return meta;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = createContext(null, {\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: \"_updateVisibility\",\n value: function _updateVisibility(datasetIndex, dataIndex, visible) {\n var mode = visible ? 'show' : 'hide';\n var meta = this.getDatasetMeta(datasetIndex);\n\n var anims = meta.controller._resolveAnimations(undefined, mode);\n\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible: visible\n });\n this.update(function (ctx) {\n return ctx.datasetIndex === datasetIndex ? mode : undefined;\n });\n }\n }\n }, {\n key: \"hide\",\n value: function hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n }, {\n key: \"show\",\n value: function show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n }, {\n key: \"_destroyDatasetMeta\",\n value: function _destroyDatasetMeta(datasetIndex) {\n var meta = this._metasets[datasetIndex];\n\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n\n delete this._metasets[datasetIndex];\n }\n }, {\n key: \"_stop\",\n value: function _stop() {\n var i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.notifyPlugins('beforeDestroy');\n var canvas = this.canvas,\n ctx = this.ctx;\n\n this._stop();\n\n this.config.clearCache();\n\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\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 this.bindUserEvents();\n\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n }, {\n key: \"bindUserEvents\",\n value: function bindUserEvents() {\n var _this18 = this;\n\n var listeners = this._listeners;\n var platform = this.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(_this18, type, listener);\n listeners[type] = listener;\n };\n\n var listener = function listener(e, x, y) {\n e.offsetX = x;\n e.offsetY = y;\n\n _this18._eventHandler(e);\n };\n\n each(this.options.events, function (type) {\n return _add(type, listener);\n });\n }\n }, {\n key: \"bindResponsiveEvents\",\n value: function bindResponsiveEvents() {\n var _this19 = this;\n\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n\n var listeners = this._responsiveListeners;\n var platform = this.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(_this19, type, listener);\n listeners[type] = listener;\n };\n\n var _remove = function _remove(type, listener) {\n if (listeners[type]) {\n platform.removeEventListener(_this19, type, listener);\n delete listeners[type];\n }\n };\n\n var listener = function listener(width, height) {\n if (_this19.canvas) {\n _this19.resize(width, height);\n }\n };\n\n var detached;\n\n var attached = function attached() {\n _remove('attach', attached);\n\n _this19.attached = true;\n\n _this19.resize();\n\n _add('resize', listener);\n\n _add('detach', detached);\n };\n\n detached = function detached() {\n _this19.attached = false;\n\n _remove('resize', listener);\n\n _this19._stop();\n\n _this19._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var _this20 = this;\n\n each(this._listeners, function (listener, type) {\n _this20.platform.removeEventListener(_this20, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, function (listener, type) {\n _this20.platform.removeEventListener(_this20, type, listener);\n });\n this._responsiveListeners = undefined;\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 _this21 = this;\n\n var lastActive = this._active || [];\n var active = activeElements.map(function (_ref4) {\n var datasetIndex = _ref4.datasetIndex,\n index = _ref4.index;\n\n var meta = _this21.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 this._active = active;\n this._lastEvent = null;\n\n this._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 hoverOptions = this.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 this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n }, {\n key: \"_eventHandler\",\n value: function _eventHandler(e, replay) {\n var _this22 = this;\n\n var args = {\n event: e,\n replay: replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n\n var eventFilter = function eventFilter(plugin) {\n return (plugin.options.events || _this22.options.events).includes(e.native.type);\n };\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n var changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n }, {\n key: \"_handleEvent\",\n value: function _handleEvent(e, replay, inChartArea) {\n var _this$_active = this._active,\n lastActive = _this$_active === void 0 ? [] : _this$_active,\n options = this.options;\n var useFinalPosition = replay;\n\n var active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n\n var isClick = _isClickEvent(e);\n\n var lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed || replay) {\n this._active = active;\n\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n return changed;\n }\n }, {\n key: \"_getActiveElements\",\n value: function _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n return lastActive;\n }\n\n var hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n }, {\n key: \"aspectRatio\",\n get: function get() {\n var _this$options11 = this.options,\n aspectRatio = _this$options11.aspectRatio,\n maintainAspectRatio = _this$options11.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, endAngle) {\n var startAngle = element.startAngle,\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, offset, spacing, end, circular) {\n var x = element.x,\n y = element.y,\n start = element.startAngle,\n pixelMargin = element.pixelMargin,\n innerR = element.innerRadius;\n var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n var spacingOffset = 0;\n var alpha = end - start;\n\n if (spacing) {\n var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n var avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n var adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n var beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n var angleOffset = (alpha - beta) / 2;\n var startAngle = start + angleOffset + spacingOffset;\n var endAngle = end - angleOffset - spacingOffset;\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\n if (circular) {\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 } else {\n ctx.moveTo(x, y);\n var outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n var outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n var outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n var outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(ctx, element, offset, spacing, circular) {\n var fullCircles = element.fullCircles,\n startAngle = element.startAngle,\n circumference = element.circumference;\n var endAngle = element.endAngle;\n\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU, circular);\n\n for (var i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawFullCircleBorders(ctx, element, inner) {\n var x = element.x,\n y = element.y,\n startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n fullCircles = element.fullCircles;\n var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n var innerRadius = element.innerRadius + pixelMargin;\n var i;\n\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n\n for (i = 0; i < 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 < fullCircles; ++i) {\n ctx.stroke();\n }\n}\n\nfunction drawBorder(ctx, element, offset, spacing, endAngle, circular) {\n var options = element.options;\n var borderWidth = options.borderWidth,\n borderJoinStyle = options.borderJoinStyle;\n var inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n pathArc(ctx, element, offset, spacing, endAngle, circular);\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 _this23;\n\n _classCallCheck(this, ArcElement);\n\n _this23 = _super12.call(this);\n _this23.options = undefined;\n _this23.circumference = undefined;\n _this23.startAngle = undefined;\n _this23.endAngle = undefined;\n _this23.innerRadius = undefined;\n _this23.outerRadius = undefined;\n _this23.pixelMargin = 0;\n _this23.fullCircles = 0;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this23), cfg);\n }\n\n return _this23;\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 _getAngleFromPoint2 = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n }),\n angle = _getAngleFromPoint2.angle,\n distance = _getAngleFromPoint2.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 rAdjust = this.options.spacing / 2;\n\n var _circumference = valueOrDefault(circumference, endAngle - startAngle);\n\n var betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n\n var withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\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', 'circumference'], 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 _this$options12 = this.options,\n offset = _this$options12.offset,\n spacing = _this$options12.spacing;\n var halfAngle = (startAngle + endAngle) / 2;\n var halfRadius = (innerRadius + outerRadius + spacing + offset) / 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 options = this.options,\n circumference = this.circumference;\n var offset = (options.offset || 0) / 2;\n var spacing = (options.spacing || 0) / 2;\n var circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n var radiusOffset = 0;\n\n if (offset) {\n radiusOffset = offset / 2;\n var halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n var endAngle = drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle, circular);\n ctx.restore();\n }\n }]);\n\n return ArcElement;\n}(Element);\n\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\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 _ref5 = params || {},\n _ref5$move = _ref5.move,\n move = _ref5$move === void 0 ? true : _ref5$move,\n reverse = _ref5.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 _ref6 = params || {},\n _ref6$move = _ref6.move,\n move = _ref6$move === void 0 ? true : _ref6$move,\n reverse = _ref6.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 _iterator15 = _createForOfIteratorHelper(segments),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var segment = _step15.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 _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n}\n\nvar usePath2D = typeof Path2D === 'function';\n\nfunction _draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\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 _this24;\n\n _classCallCheck(this, LineElement);\n\n _this24 = _super13.call(this);\n _this24.animated = true;\n _this24.options = undefined;\n _this24._chart = undefined;\n _this24._loop = undefined;\n _this24._fullLoop = undefined;\n _this24._path = undefined;\n _this24._points = undefined;\n _this24._segments = undefined;\n _this24._decimated = false;\n _this24._pointsUpdated = false;\n _this24._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this24), cfg);\n }\n\n return _this24;\n }\n\n _createClass(LineElement, [{\n key: \"updateControlPoints\",\n value: function updateControlPoints(chartArea, indexAxis) {\n var options = this.options;\n\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n var loop = options.spanGaps ? this._loop : this._fullLoop;\n\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n\n this._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 options = this.options;\n var value = point[property];\n var points = this.points;\n\n var segments = _boundSegments(this, {\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 segments = this.segments;\n\n var segmentMethod = _getSegmentMethod(this);\n\n var loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n\n var _iterator16 = _createForOfIteratorHelper(segments),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var segment = _step16.value;\n loop &= segmentMethod(ctx, this, segment, {\n start: start,\n end: start + count - 1\n });\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n\n return !!loop;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, chartArea, start, count) {\n var options = this.options || {};\n var points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n _draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n }, {\n key: \"points\",\n set: function set(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._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 _this25;\n\n _classCallCheck(this, PointElement);\n\n _this25 = _super14.call(this);\n _this25.options = undefined;\n _this25.parsed = undefined;\n _this25.skip = undefined;\n _this25.stop = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this25), cfg);\n }\n\n return _this25;\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, area) {\n var options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.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 skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n var value = bar.options.borderWidth;\n var skip = bar.borderSkipped;\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 = bar.borderSkipped;\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 || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, 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\nfunction inflateRect(rect, amount) {\n var refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var x = rect.x !== refRect.x ? -amount : 0;\n var y = rect.y !== refRect.y ? -amount : 0;\n var w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n var h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\n\nvar BarElement = /*#__PURE__*/function (_Element5) {\n _inherits(BarElement, _Element5);\n\n var _super15 = _createSuper(BarElement);\n\n function BarElement(cfg) {\n var _this26;\n\n _classCallCheck(this, BarElement);\n\n _this26 = _super15.call(this);\n _this26.options = undefined;\n _this26.horizontal = undefined;\n _this26.base = undefined;\n _this26.width = undefined;\n _this26.height = undefined;\n _this26.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this26), cfg);\n }\n\n return _this26;\n }\n\n _createClass(BarElement, [{\n key: \"draw\",\n value: function draw(ctx) {\n var inflateAmount = this.inflateAmount,\n _this$options13 = this.options,\n borderColor = _this$options13.borderColor,\n backgroundColor = _this$options13.backgroundColor;\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, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = 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 inflateAmount: 'auto',\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.min(Math.floor((i + 1) * bucketWidth) + 1, count) + 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$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(_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.controller.supportsDecimation) {\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 _getStartAndCountOfVi3 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n start = _getStartAndCountOfVi3.start,\n count = _getStartAndCountOfVi3.count;\n\n var threshold = options.threshold || 4 * availableWidth;\n\n if (count <= threshold) {\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 _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 _iterator17 = _createForOfIteratorHelper(segments),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var segment = _step17.value;\n var start = segment.start,\n end = segment.end;\n end = _findSegmentEnd(start, end, points);\n\n var bounds = _getBounds(property, points[start], points[end], segment.loop);\n\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n\n var targetSegments = _boundSegments(target, bounds);\n\n var _iterator18 = _createForOfIteratorHelper(targetSegments),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var tgt = _step18.value;\n\n var subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n\n var fillSources = _boundSegment(segment, points, subBounds);\n\n var _iterator19 = _createForOfIteratorHelper(fillSources),\n _step19;\n\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var fillSource = _step19.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 _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n\n return parts;\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 _pointsFromSegments(boundary, line) {\n var _ref7 = boundary || {},\n _ref7$x = _ref7.x,\n x = _ref7$x === void 0 ? null : _ref7$x,\n _ref7$y = _ref7.y,\n y = _ref7$y === void 0 ? null : _ref7$y;\n\n var linePoints = line.points;\n var points = [];\n line.segments.forEach(function (_ref8) {\n var start = _ref8.start,\n end = _ref8.end;\n end = _findSegmentEnd(start, end, linePoints);\n var first = linePoints[start];\n var last = linePoints[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 _findSegmentEnd(start, end, points) {\n for (; end > start; end--) {\n var point = points[end];\n\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n\n return end;\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 _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 _shouldApplyFill(source) {\n return source && source.fill !== false;\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 _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 return decodeTargetIndex(fill[0], index, target, count);\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n}\n\nfunction _getTargetPixel(fill, scale) {\n var pixel = null;\n\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n\n return pixel;\n}\n\nfunction _getTargetValue(fill, scale, startValue) {\n var value;\n\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n\n return value;\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 _buildStackLine(source) {\n var 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(scale, 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\nfunction getLinesBelow(scale, index) {\n var below = [];\n var metas = scale.getMatchingVisibleMetas('line');\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 (!meta.hidden) {\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 (_isBetween(pointValue, firstValue, 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\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 _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 if (fill === 'shape') {\n return true;\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 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 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 computeLinearBoundary(source) {\n var _source$scale = source.scale,\n scale = _source$scale === void 0 ? {} : _source$scale,\n fill = source.fill;\n\n var pixel = _getTargetPixel(fill, scale);\n\n if (isNumberFinite(pixel)) {\n var horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n\n return null;\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 start = options.reverse ? scale.max : scale.min;\n\n var value = _getTargetValue(fill, scale, start);\n\n var target = [];\n\n if (options.grid.circular) {\n var 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 (var i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n var target = _getTarget(source);\n\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 _ref9 = fillOption || {},\n _ref9$above = _ref9.above,\n above = _ref9$above === void 0 ? color : _ref9$above,\n _ref9$below = _ref9.below,\n below = _ref9$below === void 0 ? color : _ref9$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\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 clipVertical(ctx, target, area.top);\n fill(ctx, {\n line: line,\n target: target,\n color: above,\n scale: scale,\n property: property\n });\n ctx.restore();\n ctx.save();\n clipVertical(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 ctx.restore();\n}\n\nfunction clipVertical(ctx, target, clipY) {\n var segments = target.segments,\n points = target.points;\n var first = true;\n var lineLoop = false;\n ctx.beginPath();\n\n var _iterator20 = _createForOfIteratorHelper(segments),\n _step20;\n\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var segment = _step20.value;\n var start = segment.start,\n end = segment.end;\n var firstPoint = points[start];\n\n var lastPoint = points[_findSegmentEnd(start, end, points)];\n\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n } catch (err) {\n _iterator20.e(err);\n } finally {\n _iterator20.f();\n }\n\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\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 _iterator21 = _createForOfIteratorHelper(segments),\n _step21;\n\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var _step21$value = _step21.value,\n src = _step21$value.source,\n tgt = _step21$value.target,\n start = _step21$value.start,\n end = _step21$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 var notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n var lineLoop = !!line.pathSegment(ctx, src);\n var loop = void 0;\n\n if (notShape) {\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 loop = lineLoop && targetLoop;\n\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\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 _ref10 = bounds || {},\n property = _ref10.property,\n start = _ref10.start,\n end = _ref10.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\nvar index = {\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, source.axis);\n\n if (draw && source.fill) {\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 (_shouldApplyFill(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 (!_shouldApplyFill(source) || 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 = labelOpts.pointStyleWidth || 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 _this27;\n\n _classCallCheck(this, Legend);\n\n _this27 = _super16.call(this);\n _this27._added = false;\n _this27.legendHitBoxes = [];\n _this27._hoveredItem = null;\n _this27.doughnutMode = false;\n _this27.chart = config.chart;\n _this27.options = config.options;\n _this27.ctx = config.ctx;\n _this27.legendItems = undefined;\n _this27.columnSizes = undefined;\n _this27.lineWidths = undefined;\n _this27.maxHeight = undefined;\n _this27.maxWidth = undefined;\n _this27.top = undefined;\n _this27.bottom = undefined;\n _this27.left = undefined;\n _this27.right = undefined;\n _this27.height = undefined;\n _this27.width = undefined;\n _this27._margins = undefined;\n _this27.position = undefined;\n _this27.weight = undefined;\n _this27.fullSize = undefined;\n return _this27;\n }\n\n _createClass(Legend, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n }, {\n key: \"setDimensions\",\n value: function setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n }, {\n key: \"buildLabels\",\n value: function buildLabels() {\n var _this28 = this;\n\n var labelOpts = this.options.labels || {};\n var legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter(function (item) {\n return labelOpts.filter(item, _this28.chart.data);\n });\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort(function (a, b) {\n return labelOpts.sort(a, b, _this28.chart.data);\n });\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var options = this.options,\n ctx = this.ctx;\n\n if (!options.display) {\n this.width = this.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 = this._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 (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n }, {\n key: \"_fitRows\",\n value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n var ctx = this.ctx,\n maxWidth = this.maxWidth,\n padding = this.options.labels.padding;\n var hitboxes = this.legendHitBoxes = [];\n var lineWidths = this.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 this.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 ctx = this.ctx,\n maxHeight = this.maxHeight,\n padding = this.options.labels.padding;\n var hitboxes = this.legendHitBoxes = [];\n var columnSizes = this.columnSizes = [];\n var heightLimit = maxHeight - titleHeight;\n var totalWidth = padding;\n var currentColWidth = 0;\n var currentColHeight = 0;\n var left = 0;\n var col = 0;\n this.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n\n hitboxes[i] = {\n left: left,\n top: currentColHeight,\n col: col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += 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 if (!this.options.display) {\n return;\n }\n\n var titleHeight = this._computeTitleHeight();\n\n var hitboxes = this.legendHitBoxes,\n _this$options14 = this.options,\n align = _this$options14.align,\n padding = _this$options14.labels.padding,\n rtl = _this$options14.rtl;\n var rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n\n if (this.isHorizontal()) {\n var row = 0;\n\n var left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n\n var _iterator22 = _createForOfIteratorHelper(hitboxes),\n _step22;\n\n try {\n for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n var hitbox = _step22.value;\n\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } catch (err) {\n _iterator22.e(err);\n } finally {\n _iterator22.f();\n }\n } else {\n var col = 0;\n\n var top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n\n var _iterator23 = _createForOfIteratorHelper(hitboxes),\n _step23;\n\n try {\n for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n var _hitbox = _step23.value;\n\n if (_hitbox.col !== col) {\n col = _hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n\n _hitbox.top = top;\n _hitbox.left += this.left + padding;\n _hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(_hitbox.left), _hitbox.width);\n top += _hitbox.height + padding;\n }\n } catch (err) {\n _iterator23.e(err);\n } finally {\n _iterator23.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 if (this.options.display) {\n var ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n }, {\n key: \"_draw\",\n value: function _draw() {\n var _this29 = this;\n\n var opts = this.options,\n columnSizes = this.columnSizes,\n lineWidths = this.lineWidths,\n ctx = this.ctx;\n var align = opts.align,\n labelOpts = opts.labels;\n var defaultColor = defaults.color;\n var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.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 this.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: boxHeight * 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 drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\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: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n\n var isHorizontal = this.isHorizontal();\n\n var titleHeight = this._computeTitleHeight();\n\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n\n overrideTextDirection(this.ctx, opts.textDirection);\n var lineHeight = itemHeight + padding;\n this.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 + halfFontSize + textWidth;\n var x = cursor.x;\n var y = cursor.y;\n rtlHelper.setWidth(_this29.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > _this29.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, _this29.left + padding, _this29.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > _this29.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, _this29.top + titleHeight + padding, _this29.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, isHorizontal ? x + width : _this29.right, opts.rtl);\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(this.ctx, opts.textDirection);\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var opts = this.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, this.left, this.width);\n var ctx = this.ctx;\n var position = titleOpts.position;\n var halfFontSize = titleFont.size / 2;\n var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n var y;\n var left = this.left;\n var maxWidth = this.width;\n\n if (this.isHorizontal()) {\n maxWidth = Math.max.apply(Math, _toConsumableArray(this.lineWidths));\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n var maxHeight = this.columnSizes.reduce(function (acc, size) {\n return Math.max(acc, size.height);\n }, 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._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 i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n\n return null;\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e) {\n var opts = this.options;\n\n if (!isListened(e.type, opts)) {\n return;\n }\n\n var hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n var previous = this._hoveredItem;\n var sameItem = itemsEqual(previous, hoveredItem);\n\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n }]);\n\n return Legend;\n}(Element);\n\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (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 _this30;\n\n _classCallCheck(this, Title);\n\n _this30 = _super17.call(this);\n _this30.chart = config.chart;\n _this30.options = config.options;\n _this30.ctx = config.ctx;\n _this30._padding = undefined;\n _this30.top = undefined;\n _this30.bottom = undefined;\n _this30.left = undefined;\n _this30.right = undefined;\n _this30.width = undefined;\n _this30.height = undefined;\n _this30.position = undefined;\n _this30.weight = undefined;\n _this30.fullSize = undefined;\n return _this30;\n }\n\n _createClass(Title, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight) {\n var opts = this.options;\n this.left = 0;\n this.top = 0;\n\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n var lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n\n var textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.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 ctx = this.ctx;\n var opts = this.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 + this._padding.top;\n\n var _this$_drawArgs = this._drawArgs(offset),\n titleX = _this$_drawArgs.titleX,\n titleY = _this$_drawArgs.titleY,\n maxWidth = _this$_drawArgs.maxWidth,\n rotation = _this$_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 map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start: function start(chart, _args, options) {\n var title = new Title({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\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 + options.boxPadding : 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 = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.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\n var _toTRBLCorners = toTRBLCorners(cornerRadius),\n topLeft = _toTRBLCorners.topLeft,\n topRight = _toTRBLCorners.topRight,\n bottomLeft = _toTRBLCorners.bottomLeft,\n bottomRight = _toTRBLCorners.bottomRight;\n\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 -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\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 createContext(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 _this31;\n\n _classCallCheck(this, Tooltip);\n\n _this31 = _super18.call(this);\n _this31.opacity = 0;\n _this31._active = [];\n _this31._eventPosition = undefined;\n _this31._size = undefined;\n _this31._cachedAnimations = undefined;\n _this31._tooltipItems = [];\n _this31.$animations = undefined;\n _this31.$context = undefined;\n _this31.chart = config.chart || config._chart;\n _this31._chart = _this31.chart;\n _this31.options = config.options;\n _this31.dataPoints = undefined;\n _this31.title = undefined;\n _this31.beforeBody = undefined;\n _this31.body = undefined;\n _this31.afterBody = undefined;\n _this31.footer = undefined;\n _this31.xAlign = undefined;\n _this31.yAlign = undefined;\n _this31.x = undefined;\n _this31.y = undefined;\n _this31.height = undefined;\n _this31.width = undefined;\n _this31.caretX = undefined;\n _this31.caretY = undefined;\n _this31.labelColors = undefined;\n _this31.labelPointStyles = undefined;\n _this31.labelTextColors = undefined;\n return _this31;\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 cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n var chart = this.chart;\n var options = this.options.setContext(this.getContext());\n var opts = options.enabled && chart.options.animation && options.animations;\n var animations = new Animations(this.chart, opts);\n\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n }, {\n key: \"getTitle\",\n value: function getTitle(context, options) {\n var callbacks = options.callbacks;\n var beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n var title = callbacks.title.apply(this, [context]);\n var afterTitle = callbacks.afterTitle.apply(this, [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 _this32 = this;\n\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(_this32, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(_this32, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(_this32, 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 callbacks = options.callbacks;\n var beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n var footer = callbacks.footer.apply(this, [tooltipItems]);\n var afterFooter = callbacks.afterFooter.apply(this, [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 _this33 = this;\n\n var active = this._active;\n var data = this.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(this.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(_this33, context));\n labelPointStyles.push(scoped.labelPointStyle.call(_this33, context));\n labelTextColors.push(scoped.labelTextColor.call(_this33, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n }, {\n key: \"update\",\n value: function update(changed, replay) {\n var options = this.options.setContext(this.getContext());\n var active = this._active;\n var properties;\n var tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n var position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n var size = this._size = getTooltipSize(this, options);\n var positionAndSize = Object.assign({}, position, size);\n var alignment = determineAlignment(this.chart, options, positionAndSize);\n var backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.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 this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\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 caretSize = options.caretSize,\n cornerRadius = options.cornerRadius;\n\n var _toTRBLCorners2 = toTRBLCorners(cornerRadius),\n topLeft = _toTRBLCorners2.topLeft,\n topRight = _toTRBLCorners2.topRight,\n bottomLeft = _toTRBLCorners2.bottomLeft,\n bottomRight = _toTRBLCorners2.bottomRight;\n\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 + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - 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 title = this.title;\n var length = title.length;\n var titleFont, titleSpacing, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, 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 labelColors = this.labelColors[i];\n var labelPointStyle = this.labelPointStyles[i];\n var boxHeight = options.boxHeight,\n boxWidth = options.boxWidth,\n boxPadding = options.boxPadding;\n var bodyFont = toFont(options.bodyFont);\n var colorX = getAlignedX(this, '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 = isObject(labelColors.borderWidth) ? Math.max.apply(Math, _toConsumableArray(Object.values(labelColors.borderWidth))) : 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 - boxPadding);\n var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 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 = this.labelTextColors[i];\n }\n }, {\n key: \"drawBody\",\n value: function drawBody(pt, ctx, options) {\n var body = this.body;\n var bodySpacing = options.bodySpacing,\n bodyAlign = options.bodyAlign,\n displayColors = options.displayColors,\n boxHeight = options.boxHeight,\n boxWidth = options.boxWidth,\n boxPadding = options.boxPadding;\n var bodyFont = toFont(options.bodyFont);\n var bodyLineHeight = bodyFont.lineHeight;\n var xLinePadding = 0;\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.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(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n\n for (i = 0, ilen = body.length; i < ilen; ++i) {\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n\n if (displayColors && lines.length) {\n this._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(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n }, {\n key: \"drawFooter\",\n value: function drawFooter(pt, ctx, options) {\n var footer = this.footer;\n var length = footer.length;\n var footerFont, i;\n\n if (length) {\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, 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\n var _toTRBLCorners3 = toTRBLCorners(options.cornerRadius),\n topLeft = _toTRBLCorners3.topLeft,\n topRight = _toTRBLCorners3.topRight,\n bottomLeft = _toTRBLCorners3.bottomLeft,\n bottomRight = _toTRBLCorners3.bottomRight;\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, 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 chart = this.chart;\n var anims = this.$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(this, this._active, this._eventPosition);\n\n if (!position) {\n return;\n }\n\n var size = this._size = getTooltipSize(this, options);\n var positionAndSize = Object.assign({}, position, this._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 this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n\n this._resolveAnimations().update(this, point);\n }\n }\n }\n }, {\n key: \"_willRender\",\n value: function _willRender() {\n return !!this.opacity;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options.setContext(this.getContext());\n var opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n var tooltipSize = {\n width: this.width,\n height: this.height\n };\n var pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n var padding = toPadding(options.padding);\n var hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.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 _this34 = this;\n\n var lastActive = this._active;\n var active = activeElements.map(function (_ref11) {\n var datasetIndex = _ref11.datasetIndex,\n index = _ref11.index;\n\n var meta = _this34.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 = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e, replay) {\n var inChartArea = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n\n this._ignoreReplayEvents = false;\n var options = this.options;\n var lastActive = this._active || [];\n\n var active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n var positionChanged = this._positionChanged(active, e);\n\n var changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n if (changed) {\n this._active = active;\n\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n\n return changed;\n }\n }, {\n key: \"_getActiveElements\",\n value: function _getActiveElements(e, lastActive, replay, inChartArea) {\n var options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n return lastActive;\n }\n\n var active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\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\n if (tooltip && tooltip._willRender()) {\n var args = {\n tooltip: tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\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, args.inChartArea)) {\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 boxPadding: 0,\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: index,\n Legend: plugin_legend,\n SubTitle: plugin_subtitle,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\n\nvar addIfString = function addIfString(labels, raw, index, addedLabels) {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index: index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n var first = labels.indexOf(raw);\n\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\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 _this35;\n\n _classCallCheck(this, CategoryScale);\n\n _this35 = _super19.call(this, cfg);\n _this35._startValue = undefined;\n _this35._valueRange = 0;\n _this35._addedLabels = [];\n return _this35;\n }\n\n _createClass(CategoryScale, [{\n key: \"init\",\n value: function init(scaleOptions) {\n var added = this._addedLabels;\n\n if (added.length) {\n var labels = this.getLabels();\n\n var _iterator24 = _createForOfIteratorHelper(added),\n _step24;\n\n try {\n for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n var _step24$value = _step24.value,\n _index3 = _step24$value.index,\n label = _step24$value.label;\n\n if (labels[_index3] === label) {\n labels.splice(_index3, 1);\n }\n }\n } catch (err) {\n _iterator24.e(err);\n } finally {\n _iterator24.f();\n }\n\n this._addedLabels = [];\n }\n\n _get(_getPrototypeOf(CategoryScale.prototype), \"init\", this).call(this, scaleOptions);\n }\n }, {\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), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getUserBounds2 = this.getUserBounds(),\n minDefined = _this$getUserBounds2.minDefined,\n maxDefined = _this$getUserBounds2.maxDefined;\n\n var _this$getMinMax = this.getMinMax(true),\n min = _this$getMinMax.min,\n max = _this$getMinMax.max;\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var min = this.min;\n var max = this.max;\n var offset = this.options.offset;\n var ticks = [];\n var labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.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 labels = this.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 _get(_getPrototypeOf(CategoryScale.prototype), \"configure\", this).call(this);\n\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\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: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._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 bounds = generationOptions.bounds,\n 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 includeBounds = generationOptions.includeBounds;\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 + 1);\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 if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(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 var decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n var j = 0;\n\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\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, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\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 && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, _ref12) {\n var horizontal = _ref12.horizontal,\n minRotation = _ref12.minRotation;\n var rad = toRadians(minRotation);\n var ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n var length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nvar LinearScaleBase = /*#__PURE__*/function (_Scale2) {\n _inherits(LinearScaleBase, _Scale2);\n\n var _super20 = _createSuper(LinearScaleBase);\n\n function LinearScaleBase(cfg) {\n var _this36;\n\n _classCallCheck(this, LinearScaleBase);\n\n _this36 = _super20.call(this, cfg);\n _this36.start = undefined;\n _this36.end = undefined;\n _this36._startValue = undefined;\n _this36._endValue = undefined;\n _this36._valueRange = 0;\n return _this36;\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 beginAtZero = this.options.beginAtZero;\n\n var _this$getUserBounds3 = this.getUserBounds(),\n minDefined = _this$getUserBounds3.minDefined,\n maxDefined = _this$getUserBounds3.maxDefined;\n\n var min = this.min,\n max = this.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) {\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 var offset = 1;\n\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"getTickLimit\",\n value: function getTickLimit() {\n var tickOpts = this.options.ticks;\n var maxTicksLimit = tickOpts.maxTicksLimit,\n stepSize = tickOpts.stepSize;\n var maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n\n if (maxTicks > 1000) {\n console.warn(\"scales.\".concat(this.id, \".ticks.stepSize: \").concat(stepSize, \" would result generating up to \").concat(maxTicks, \" ticks. Limiting to 1000.\"));\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.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 opts = this.options;\n var tickOpts = opts.ticks;\n var maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n var numericGeneratorOptions = {\n maxTicks: maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n var dataRange = this._range || this;\n var ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n\n return ticks;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var ticks = this.ticks;\n var start = this.min;\n var end = this.max;\n\n _get(_getPrototypeOf(LinearScaleBase.prototype), \"configure\", this).call(this);\n\n if (this.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 this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\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 _this$getMinMax2 = this.getMinMax(true),\n min = _this$getMinMax2.min,\n max = _this$getMinMax2.max;\n\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n var horizontal = this.isHorizontal();\n var length = horizontal ? this.width : this.height;\n var minRotation = toRadians(this.options.ticks.minRotation);\n var ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n\n var tickFont = this._resolveTickFontOptions(0);\n\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\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 _this37;\n\n _classCallCheck(this, LogarithmicScale);\n\n _this37 = _super22.call(this, cfg);\n _this37.start = undefined;\n _this37.end = undefined;\n _this37._startValue = undefined;\n _this37._valueRange = 0;\n return _this37;\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 _this$getMinMax3 = this.getMinMax(true),\n min = _this$getMinMax3.min,\n max = _this$getMinMax3.max;\n\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n this.handleTickRangeOptions();\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var _this$getUserBounds4 = this.getUserBounds(),\n minDefined = _this$getUserBounds4.minDefined,\n maxDefined = _this$getUserBounds4.maxDefined;\n\n var min = this.min;\n var max = this.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 (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var opts = this.options;\n var generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n var ticks = generateTicks(generationOptions, this);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.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, this.options.ticks.format);\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var start = this.min;\n\n _get(_getPrototypeOf(LogarithmicScale.prototype), \"configure\", this).call(this);\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n\n if (value === null || isNaN(value)) {\n return NaN;\n }\n\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._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, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.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 orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n var limits = Object.assign({}, orig);\n var labelSizes = [];\n var padding = [];\n var valueCount = scale._pointLabels.length;\n var pointLabelOpts = scale.options.pointLabels;\n var additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (var i = 0; i < valueCount; i++) {\n var opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n var pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n var plFont = toFont(opts.font);\n var textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n var angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n\n var angle = Math.round(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 updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n var sin = Math.abs(Math.sin(angle));\n var cos = Math.abs(Math.cos(angle));\n var x = 0;\n var y = 0;\n\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n var items = [];\n var valueCount = scale._pointLabels.length;\n var opts = scale.options;\n var extra = getTickBackdropHeight(opts) / 2;\n var outerDistance = scale.drawingArea;\n var additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n\n for (var i = 0; i < valueCount; i++) {\n var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n var angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n var size = labelSizes[i];\n var y = yForAngle(pointLabelPosition.y, size.h, angle);\n var textAlign = getTextAlignForAngle(angle);\n var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y: y,\n textAlign: textAlign,\n left: left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n\n return items;\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 leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n\n return x;\n}\n\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n\n return y;\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.getPointLabelContext(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 borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n var backdropLeft = left - padding.left;\n var backdropTop = top - padding.top;\n var backdropWidth = right - left + padding.width;\n var backdropHeight = bottom - top + padding.height;\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\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 createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label: label,\n index: index,\n type: 'pointLabel'\n });\n}\n\nvar RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {\n _inherits(RadialLinearScale, _LinearScaleBase2);\n\n var _super23 = _createSuper(RadialLinearScale);\n\n function RadialLinearScale(cfg) {\n var _this38;\n\n _classCallCheck(this, RadialLinearScale);\n\n _this38 = _super23.call(this, cfg);\n _this38.xCenter = undefined;\n _this38.yCenter = undefined;\n _this38.drawingArea = undefined;\n _this38._pointLabels = [];\n _this38._pointLabelItems = [];\n return _this38;\n }\n\n _createClass(RadialLinearScale, [{\n key: \"setDimensions\",\n value: function setDimensions() {\n var padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n var w = this.width = this.maxWidth - padding.width;\n var h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax4 = this.getMinMax(false),\n min = _this$getMinMax4.min,\n max = _this$getMinMax4.max;\n\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.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 _this39 = this;\n\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map(function (value, index) {\n var label = callback(_this39.options.pointLabels.callback, [value, index], _this39);\n return label || label === 0 ? label : '';\n }).filter(function (v, i) {\n return _this39.chart.getDataVisibility(i);\n });\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n }, {\n key: \"setCenterPoint\",\n value: function setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n }, {\n key: \"getIndexAngle\",\n value: function getIndexAngle(index) {\n var angleMultiplier = TAU / (this._pointLabels.length || 1);\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 if (isNullOrUndef(value)) {\n return NaN;\n }\n\n var scalingFactor = this.drawingArea / (this.max - this.min);\n\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n\n return (value - this.min) * scalingFactor;\n }\n }, {\n key: \"getValueForDistanceFromCenter\",\n value: function getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n var scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n }, {\n key: \"getPointLabelContext\",\n value: function getPointLabelContext(index) {\n var pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n var pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n }, {\n key: \"getPointPosition\",\n value: function getPointPosition(index, distanceFromCenter) {\n var additionalAngle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.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 _this$options15 = this.options,\n backgroundColor = _this$options15.backgroundColor,\n circular = _this$options15.grid.circular;\n\n if (backgroundColor) {\n var ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.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 _this40 = this;\n\n var ctx = this.ctx;\n var opts = this.options;\n var angleLines = opts.angleLines,\n grid = opts.grid;\n var labelCount = this._pointLabels.length;\n var i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach(function (tick, index) {\n if (index !== 0) {\n offset = _this40.getDistanceFromCenterForValue(tick.value);\n var optsAtIndex = grid.setContext(_this40.getContext(index - 1));\n drawRadiusLine(_this40, optsAtIndex, offset, labelCount);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = angleLines.setContext(this.getPointLabelContext(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 = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.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 _this41 = this;\n\n var ctx = this.ctx;\n var opts = this.options;\n var tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n var startAngle = this.getIndexAngle(0);\n var offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach(function (tick, index) {\n if (index === 0 && !opts.reverse) {\n return;\n }\n\n var optsAtIndex = tickOpts.setContext(_this41.getContext(index));\n var tickFont = toFont(optsAtIndex.font);\n offset = _this41.getDistanceFromCenterForValue(_this41.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\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 centerPointLabels: false\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 _this42;\n\n _classCallCheck(this, TimeScale);\n\n _this42 = _super24.call(this, props);\n _this42._cache = {\n data: [],\n labels: [],\n all: []\n };\n _this42._unit = 'day';\n _this42._majorUnit = undefined;\n _this42._offsets = {};\n _this42._normalized = false;\n _this42._parseOpts = undefined;\n return _this42;\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 adapter.init(opts);\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 options = this.options;\n var adapter = this._adapter;\n var unit = options.time.unit || 'day';\n\n var _this$getUserBounds5 = this.getUserBounds(),\n min = _this$getUserBounds5.min,\n max = _this$getUserBounds5.max,\n minDefined = _this$getUserBounds5.minDefined,\n maxDefined = _this$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(this._getLabelBounds());\n\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.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 this.min = Math.min(min, max - 1);\n this.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 options = this.options;\n var timeOpts = options.time;\n var tickOpts = options.ticks;\n var timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n\n var min = this.min;\n var max = this.max;\n\n var ticks = _filterBetween(timestamps, min, max);\n\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n }, {\n key: \"afterAutoSkip\",\n value: function afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(function (tick) {\n return +tick.value;\n }));\n }\n }\n }, {\n key: \"initOffsets\",\n value: function initOffsets(timestamps) {\n var start = 0;\n var end = 0;\n var first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.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 this._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 adapter = this._adapter;\n var min = this.min;\n var max = this.max;\n var options = this.options;\n var timeOpts = options.time;\n var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._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' && this.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 adapter = this._adapter;\n var timeOpts = this.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 options = this.options;\n var formats = options.time.displayFormats;\n var unit = this._unit;\n var majorUnit = this._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 = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n\n var formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : 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 return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var offsets = this._offsets;\n var pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var offsets = this._offsets;\n var pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n }, {\n key: \"_getLabelSize\",\n value: function _getLabelSize(label) {\n var ticksOpts = this.options.ticks;\n var tickLabelWidth = this.ctx.measureText(label).width;\n var angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n var cosRotation = Math.cos(angle);\n var sinRotation = Math.sin(angle);\n\n var tickFontSize = this._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 timeOpts = this.options.time;\n var displayFormats = timeOpts.displayFormats;\n var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n\n var exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n\n var size = this._getLabelSize(exampleLabel);\n\n var capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n }, {\n key: \"getDataTimestamps\",\n value: function getDataTimestamps() {\n var timestamps = this._cache.data || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return this._cache.data = this.normalize(timestamps);\n }\n }, {\n key: \"getLabelTimestamps\",\n value: function getLabelTimestamps() {\n var timestamps = this._cache.labels || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var labels = this.getLabels();\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(_parse(this, labels[i]));\n }\n\n return this._cache.labels = this._normalized ? timestamps : this.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 lo = 0;\n var hi = table.length - 1;\n var prevSource, nextSource, prevTarget, nextTarget;\n\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n var _lookupByKey2 = _lookupByKey(table, 'pos', val);\n\n lo = _lookupByKey2.lo;\n hi = _lookupByKey2.hi;\n }\n\n var _table$lo = table[lo];\n prevSource = _table$lo.pos;\n prevTarget = _table$lo.time;\n var _table$hi = table[hi];\n nextSource = _table$hi.pos;\n nextTarget = _table$hi.time;\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n var _lookupByKey3 = _lookupByKey(table, 'time', val);\n\n lo = _lookupByKey3.lo;\n hi = _lookupByKey3.hi;\n }\n\n var _table$lo2 = table[lo];\n prevSource = _table$lo2.time;\n prevTarget = _table$lo2.pos;\n var _table$hi2 = table[hi];\n nextSource = _table$hi2.time;\n nextTarget = _table$hi2.pos;\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 _this43;\n\n _classCallCheck(this, TimeSeriesScale);\n\n _this43 = _super25.call(this, props);\n _this43._table = [];\n _this43._minPos = undefined;\n _this43._tableRange = undefined;\n return _this43;\n }\n\n _createClass(TimeSeriesScale, [{\n key: \"initOffsets\",\n value: function initOffsets() {\n var timestamps = this._getTimestampsForTable();\n\n var table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n\n _get(_getPrototypeOf(TimeSeriesScale.prototype), \"initOffsets\", this).call(this, timestamps);\n }\n }, {\n key: \"buildLookupTable\",\n value: function buildLookupTable(timestamps) {\n var min = this.min,\n max = this.max;\n var items = [];\n var table = [];\n var i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n return [{\n time: min,\n pos: 0\n }, {\n time: max,\n pos: 1\n }];\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n\n return table;\n }\n }, {\n key: \"_getTimestampsForTable\",\n value: function _getTimestampsForTable() {\n var timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var data = this.getDataTimestamps();\n var label = this.getLabelTimestamps();\n\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var offsets = this._offsets;\n var decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, 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, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };"],"sourceRoot":""}