{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:////var/rails/shared/node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///../20220814073051/app/javascript/packs/application.js","webpack:///../20220814073051/app/javascript/channels/index.js","webpack:///../20220814073051/app/javascript/channels sync /_channel/.js$/","webpack:////var/rails/shared/node_modules/chartkick/dist/chartkick.js","webpack:////var/rails/shared/node_modules/chart.js/dist/chunks/helpers.segment.mjs","webpack:////var/rails/shared/node_modules/chart.js/dist/chart.mjs"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","factory","_typeof","iterator","obj","constructor","sparkMd5","fn","createCommonjsModule","undefined","hex_chr","md5cycle","x","k","a","b","md5blk","md5blks","charCodeAt","md5blk_array","md51","length","tail","tmp","lo","hi","state","substring","toString","match","parseInt","md51_array","subarray","Uint8Array","rhex","j","hex","join","toUtf8","str","test","unescape","encodeURIComponent","utf8Str2ArrayBuffer","returnUInt8Array","buff","ArrayBuffer","arr","arrayBuffer2Utf8Str","String","fromCharCode","apply","concatenateArrayBuffers","first","second","result","byteLength","set","buffer","hexToBinaryString","bytes","push","substr","SparkMD5","this","reset","slice","clamp","val","Math","max","min","from","to","num","target","targetArray","sourceArray","begin","end","append","appendBinary","contents","_buff","_length","_hash","raw","ret","_finish","getState","hash","setState","destroy","hashBinary","content","classCallCheck","instance","Constructor","TypeError","createClass","defineProperties","props","descriptor","configurable","writable","protoProps","staticProps","fileSlice","File","mozSlice","webkitSlice","FileChecksum","file","chunkSize","chunkCount","ceil","size","chunkIndex","callback","_this","md5Buffer","fileReader","FileReader","addEventListener","event","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","start","readAsArrayBuffer","findElement","root","selector","document","querySelector","dispatchEvent","element","type","eventInit","arguments","disabled","bubbles","cancelable","detail","createEvent","initEvent","toArray$1","Array","isArray","BlobRecord","checksum","url","attributes","filename","content_type","byte_size","xhr","XMLHttpRequest","open","responseType","setRequestHeader","csrfToken","head","getAttribute","getMetaValue","requestDidLoad","requestDidError","send","JSON","stringify","blob","status","response","direct_upload","directUploadData","toJSON","_xhr","parse","BlobUpload","_blob$directUploadDat","headers","id","DirectUpload","delegate","error","notify","upload","methodName","_len","messages","_key","DirectUploadController","input","directUpload","dispatch","hiddenInput","createElement","insertAdjacentElement","parentNode","removeChild","dispatchError","signed_id","progress","loaded","total","defaultPrevented","alert","_this2","uploadRequestDidProgress","DirectUploadsController","form","inputs","querySelectorAll","filter","files","controllers","createDirectUploadControllers","startNextController","controller","shift","forEach","processingAttribute","submitButtonsByForm","WeakMap","started","didClick","didSubmitForm","didSubmitRemoteElement","tagName","handleFormSubmissionEvent","hasAttribute","preventDefault","setAttribute","disable","removeAttribute","enable","button","focus","click","style","display","appendChild","submitForm","setTimeout","window","ActiveStorage","require","channels","keys","webpackEmptyContext","req","e","Error","code","resolve","variable","isFunction","Function","isPlainObject","extend","source","merge","obj1","obj2","DATE_PATTERN","toStr","toFloat","parseFloat","toDate","matches","year","month","day","Date","replace","toArr","jsOptionsFunc","defaultOptions","hideLegend","setTitle","setMin","setMax","setStacked","setXtitle","setYtitle","chart","opts","chartOptions","series","data","options","singleSeriesFormat","legend","title","negativeValues","stacked","colors","xtitle","ytitle","library","sortByTime","getTime","sortByNumberSeries","sortByNumber","isMinute","getMilliseconds","getSeconds","isHour","getMinutes","isDay","getHours","isWeek","dayOfWeek","getDay","isMonth","getDate","isYear","getMonth","isDate","isNaN","isNumber","byteSuffixes","formatValue","pre","axis","prefix","suffix","precision","round","byteScale","suffixIdx","baseValue","toPrecision","zeros","pow","toFixed","thousands","decimal","parts","split","seriesOption","option","baseOptions","maintainAspectRatio","animation","plugins","tooltip","displayColors","callbacks","font","color","interaction","defaultOptions$2","scales","y","ticks","maxTicksLimit","grid","drawOnChartArea","time","defaultColors","hideLegend$2","position","setTitle$2","text","setBarMin$1","setBarMax$1","setStacked$2","setXtitle$2","setYtitle$2","addOpacity","opacity","exec","notnull","setFormatOptions$1","chartType","formatOptions","scale","stepSize","label","context","dataset","formattedValue","dataPoint","v","dataLabel","parsed","valueLabel","jsOptions$2","createDataTable","datasets","labels","week","hour","minute","i$1","s$1","j$1","backgroundColor","rows","rows2","xtype","sortedLabels","indexOf","sort","i$2","s$2","d$1","j$2","point","j$3","fill","borderColor","borderWidth","pointChart","pointBackgroundColor","pointHoverBackgroundColor","pointHitRadius","pointHoverBorderWidth","stack","tension","pointRadius","pointHoverRadius","xmin","xmax","minTime","maxTime","value$1","step","timeDiff","unit","displayFormats","width","offsetWidth","unitStepSize","tooltipFormat","defaultExport$2","renderLineChart","allZeros","drawChart","renderPieChart","donut","cutout","values","renderColumnChart","barOptions","indexAxis","maxLabelSize","getLabelForValue","setLabelSize","renderAreaChart","renderBarChart","renderScatterChart","showLine","renderBubbleChart","destroyed","console","log","innerHTML","ctx","getElementsByTagName","defaultOptions$1","xAxis","fontSize","yAxis","credits","enabled","plotOptions","areaspline","area","marker","useUTC","hideLegend$1","verticalAlign","layout","align","setTitle$1","jsOptions$1","stackedValue","stacking","setFormatOptions","formatter","pointFormatter","pointFormat","defaultExport$1","curve","symbol","points","pie","innerSize","categories","d2","newSeries","renderTo","Chart","chartArea","fontName","pointSize","textStyle","alignment","curveType","hAxis","titleTextStyle","gridlines","baselineColor","viewWindow","vAxis","_hideLegend","setBarMin","setBarMax","isStacked","italic","jsOptions","defaultExport","formatSeriesData","keyType","keyFunc","detectXTypeWithFunction","func","processSeries","noDatetime","rawData","copy","copySeries","discrete","dataEmpty","detectXType","processSimple","perfectData","addEvent","elem","fn2","attachEvent","removeEvent","removeEventListener","detachEvent","childOf","this$1$1","waitForLoaded","top","height","pieHole","visualization","DataTable","addColumn","addRows","areaOpacity","renderGeoChart","colorAxis","row","renderTimeline","lineHeight","clearChart","draw","pack","runCallbacks","loadOptions","packages","config","__config","language","mapsApiKey","charts","load","cb","LineChart","Timeline","GeoChart","splice","columnType","concat","pendingRequests","runningRequests","runNext","request","success","$","jQuery","Zepto","ajax","dataType","complete","requestComplete","onload","responseText","statusText","ajaxCall","jqXHR","textStatus","errorThrown","message","adapters","setText","body","innerText","textContent","chartError","noPrefix","errorCatcher","__render","err","fetchDataSource","dataSource","showLoading","loading","addAdapter","adapter","product","getAdapterType","renderChart","empty","fnName","adapterName","Highcharts","google","__adapterObject","callAdapter","download","__downloadAttached","link","right","zIndex","image","alt","border","src","__enterEvent","related","relatedTarget","href","toImage","__leaveEvent","addDownloadButton","elementId","getElementById","Chartkick","refresh","startRefresh","getElement","getDataSource","getData","getOptions","getChartObject","getAdapter","updateData","__updateOptions","setOptions","redraw","refreshData","sep","intervalId","setInterval","stopRefresh","clearInterval","background","canvas","tmpCanvas","tmpCtx","getContext","fillStyle","fillRect","drawImage","toDataURL","toBase64Image","updateRefresh","__processData","__chartName","__proto__","PieChart","ColumnChart","BarChart","AreaChart","ScatterChart","BubbleChart","configure","setDefaultOptions","eachChart","chartId","destroyAll","use","autoDestroy","Event","_defineProperty","_classCallCheck","_defineProperties","_createClass","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_createForOfIteratorHelper","allowArrayLike","it","F","done","_e","f","normalCompletion","didErr","next","_e2","minLen","len","arr2","noop","uid","isNullOrUndef","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toDimension","dimension","endsWith","args","thisArg","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","index","clone$1","map","klen","isValidKey","_merger","tval","sval","sources","merger","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","_step2","_iterator2","_splitKey","_step","_iterator","_getKeyResolver","_capitalize","charAt","toUpperCase","defined","setsEqual","_step3","_iterator3","item","has","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","floor","fraction","epsilon","abs","_setMinAndMaxByKey","array","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","_lookupByKey","last","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","listeners","_arrayUnique","items","Set","add","requestAnimFrame","requestAnimationFrame","throttled","updateFn","updateArgs","ticking","_len2","rest","_key2","_toLeftRightCenter","_alignStartEnd","_getStartAndCountOfVisiblePoints","meta","animationsDisabled","pointCount","count","_sorted","iScale","_parsed","_iScale$getUserBounds","getUserBounds","minDefined","maxDefined","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","ymin","ymax","changed","assign","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","lim","h","p2b","n2b","b2n","n2p","map$1","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","h1","h2","eq","_hexString","g","isShort","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","p1","p2","hwb2rgb","hsv2rgb","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","nameParse","ok","nk","unpacked","tkeys","unpack","transparent","toLowerCase","RGB_RE","modHSL","ratio","clone","proto","fromObject","functionParse","rgbParse","Color","_rgb","_valid","_hslString","weight","w2","c1","c2","w1","rgb1","rgb2","deg","_rotate","index_esm","isPatternOrGradient","getHoverColor","saturate","darken","hexString","overrides","getScope$1","node","_set","scope","defaults","Defaults","_descriptors","devicePixelRatio","platform","getDevicePixelRatio","elements","events","family","hover","hoverBackgroundColor","hoverBorderColor","hoverColor","intersect","includeInvisible","onHover","onClick","parsing","responsive","drawActiveElementsOnTop","describe","targetScope","targetName","_Object$definePropert","scopeObject","targetScopeObject","privateName","local","_scriptable","startsWith","_indexable","_fallback","_measureText","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","rotate","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","stroke","_isPointInArea","margin","left","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","line","lines","strokeWidth","strokeColor","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","translation","textAlign","textBaseline","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","_readValueToProps","_step4","objProps","read","prop","_iterator4","toTRBL","toTRBLCorners","toPadding","toFont","fallback","warn","toFontString","info","cacheable","createContext","parentContext","_createResolver","scopes","_cache","prefixes","rootScopes","getTarget","_resolve","Proxy","deleteProperty","_keys","_cached","_resolveWithPrefixes","getOwnPropertyDescriptor","Reflect","_scopes","getPrototypeOf","getKeysFromAllScopes","includes","ownKeys","storage","_storage","_attachContext","proxy","subProxy","descriptorDefaults","_cacheable","_proxy","_context","_subProxy","_stack","setContext","override","receiver","descriptors","isScriptable","needsSubResolver","createSubResolver","_resolveScriptable","isIndexable","_step5","_iterator5","resolver","_resolveArray","_resolveWithContext","allKeys","scriptable","indexable","_proxy$_scriptable","_proxy$_indexable","_proxy$_allKeys","_allKeys","readKey","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","_step6","_iterator6","_rootScopes","allScopes","addScopesFromKey","_getTarget","subGetTarget","_step7","_iterator7","_step8","_iterator8","_step9","_iterator9","_step10","_iterator10","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_this$_parsing$key","_parsing","EPSILON","getPoint","skip","getValueAxis","monotoneAdjust","deltaK","mK","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointsLen","pointAfter","monotoneCompute","delta","pointBefore","valueAxis","iPixel","vPixel","capControlPoint","pt","_updateBezierControlPoints","loop","controlPoints","firstPoint","middlePoint","afterPoint","current","d01","d12","s01","s12","fa","fb","spanGaps","cubicInterpolationMode","slopeDelta","splineCurveMonotone","prev","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","positions","getPositionedStyle","styles","pos","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","_getCanvasPosition","touches","offsetX","offsetY","box","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","formatNumber","locale","cacheKey","Intl","NumberFormat","getNumberFormat","format","getRtlAdapter","rtl","rectX","_x","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_x2","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_ref","_boundSegment","segment","bounds","prevValue","startBound","endBound","_propertyFn2","_getSegment","_propertyFn","getSegment","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","_step11","_iterator11","styleChanged","p0","p0DataIndex","p1DataIndex","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","enumerableOnly","getOwnPropertySymbols","symbols","sym","_objectSpread","getOwnPropertyDescriptors","_get","base","_getPrototypeOf","_superPropBase","desc","_inherits","subClass","superClass","_setPrototypeOf","setPrototypeOf","_createSuper","Derived","hasNativeReflectConstruct","construct","sham","_isNativeReflectConstruct","Super","NewTarget","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","_slicedToArray","_arrayWithHoles","_arr","_n","_d","_s","_i","_iterableToArrayLimit","_nonIterableRest","_e3","animator","Animator","_request","_charts","_running","_lastDate","anims","date","numSteps","duration","initial","currentStep","_update","_refresh","now","remaining","running","_active","_total","tick","pop","_notify","_getAnims","_this$_getAnims$items","reduce","acc","cur","_duration","cancel","interpolators","factor","c0","valid","mix","number","Animation","cfg","currentValue","_fn","_easing","easing","_start","delay","_loop","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","res","rej","resolved","method","properties","numbers","active","resize","show","animations","visible","hide","Animations","_properties","animatedProps","getOwnPropertyNames","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","wait","all","awaitAll","then","update","_animateOptions","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","_applyStack","dsIndex","otherValue","singleMode","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","indexScale","valueScale","getStackKey","_index","_top","_bottom","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","_stacked","addElements","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","adata","convertObjectDataToArray","isExtensible","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","getLabels","singleScale","_parsed$i","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","parsedValue","NaN","canStack","otherScale","_getOtherScale","hidden","createStack","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","_clip","defaultClip","getMaxOverflow","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","_this3","sharing","datasetElementScopeKeys","names","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","firstOpts","previouslySharedOptions","getSharedOptions","includeOptions","updateSharedOptions","_resolveAnimations","_setStyle","_ref2","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_args2","_dataChanges","_sync","newCount","computeMinSampleSize","curr","$bar","visibleMetas","getAllParsedValues","getAllScaleValues","updateMinAndPrev","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","_borderProps","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","_ref4","inflateAmount","_DatasetController","BarController","_super","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","bars","getBasePixel","isHorizontal","ruler","_getRuler","_this$_getSharedOptio","_getSharedOptions","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","updateElement","grouped","skipNull","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","_this$_cachedMeta","_this$options","minBarLength","actualBase","floating","applyStack","getDataVisibility","barSign","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","rects","_index_","offset","_value_","beginAtZero","_DatasetController2","BubbleController","_super2","_this$_cachedMeta2","_this$_getSharedOptio2","_DatasetController3","DoughnutController","_super3","_this4","innerRadius","outerRadius","circumference","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","_this$_getRotationExt","_getRotationExtents","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_this$_getSharedOptio3","_circumference","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","generateLabels","legendItem","toggleDataVisibility","tooltipItem","_DatasetController4","LineController","_super4","_meta$data","_dataset","_getStartAndCountOfVi","_decimated","animated","_this$_cachedMeta3","_this$_getSharedOptio4","_this$options2","maxGapLength","directUpdate","prevParsed","nullData","stop","lastPoint","updateControlPoints","_DatasetController5","PolarAreaController","_super5","_this5","_updateRadius","_this6","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_this7","angleLines","circular","pointLabels","PieController","_DoughnutController","_super6","_DatasetController6","RadarController","_super7","_fullLoop","pointPosition","getPointPositionForValue","Element","useFinalPosition","_this$getProps","getProps","_final","_this8","defaultRoutes","formatters","numeric","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","getMajorIndices","numMajorIndices","newTicks","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","grace","drawBorder","drawTicks","tickWidth","tickColor","padding","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","_Element","Scale","_super8","_this9","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_reversePixels","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","_this$getUserBounds","metas","getMinMax","xLabels","yLabels","beforeUpdate","_this$options3","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","change","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","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","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","getBaseValue","createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID2","_value2","limit","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","lineCount","textOffset","tickAndPadding","hTickAndPadding","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID3","_value3","halfCount","tickTextAlign","backdrop","labelPadding","_this$options7","_this$options8","_this$options8$ticks","findIndex","_computeGridLineItems","drawLine","setLineDash","lineDashOffset","lastLineWidth","_computeLabelArea","_computeLabelItems","_this$options9","_titleArgs","titleX","titleY","_positionAxisID","_value","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","_this10","tz","z","gz","getSortedVisibleDatasetMetas","axisID","TypedRegistry","isPrototypeOf","parentScope","isIChartComponent","register","itemDefaults","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","Registry","_typedRegistries","_each","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","typedRegistry","_this11","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","component","camelMethod","_DatasetController7","ScatterController","_super9","_meta$data2","_getStartAndCountOfVi2","_this$_cachedMeta4","_this$options10","_abstract","DateAdapter","timestamp","_format","amount","weekday","members","_date","binarySearch","metaset","lookupMethod","getRange","evaluateInteractionItems","handler","_metasets$i","_index2","_binarySearch","getIntersectItems","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","_element$getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","params","wrap","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refit","refitBoxes","_updateDims","setBoxDims","placeBoxes","userPadding","_height","_width","autoPadding","addBox","_layers","removeBox","layoutItem","minPadding","layoutBoxes","_box","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","handleMaxPadding","BasePlatform","BasicPlatform","_BasePlatform","_super10","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","_getRelativePosition","fromNativeEvent","addListener","_BasePlatform2","DomPlatform","_super11","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","PluginService","_init","hook","_createDescriptors","plugin","_oldCache","_notifyStateChanges","localIds","getPlugin","_i2","allPlugins","_ref5","_step12","_iterator12","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","_ref6","pluginScopeKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","_getResolver","getResolver","subPrefixes","needContext","subResolver","_step13","_iterator13","_getResolver2","resolverCache","_step14","_descriptors2","_iterator14","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","animationOptions","onComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","_i3","intKey","userConfig","_this12","initialCanvas","existingChart","chartOptionScopes","updateConfig","timeout","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","clearTimeout","listen","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","getMaximumSize","newRatio","onResize","render","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","unbindEvents","_step15","_iterator15","_getUniformDataChanges","_ref8","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","bindUserEvents","bindResponsiveEvents","_this18","_add","_this19","detached","_remove","isAttached","_this20","activeElements","_this21","lastActive","_ref9","replay","hoverOptions","deactivated","activated","updateHoverStyle","_this22","inChartArea","eventFilter","_handleEvent","_this$_active","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","getElementsAtEventForMode","_this$options11","clipArc","pixelMargin","angleMargin","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","_pCenter2","p8","_pCenter3","outerStartX","outerStartY","outerEndX","outerEndY","inner","lineJoin","fullCircles","drawFullCircleBorders","version","unregister","_Element2","ArcElement","_super12","_this23","chartX","chartY","_getAngleFromPoint2","_this$getProps2","rAdjust","betweenAngles","withinRadius","_this$getProps3","_this$options12","halfAngle","halfRadius","radiusOffset","drawArc","setStyle","lineCap","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","_pathVars","lineMethod","stepped","getLineMethod","_ref10","_ref10$move","fastPathSegment","prevX","lastY","_pathVars2","_ref11","_ref11$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","_step16","segmentMethod","_iterator16","strokePathDirect","_Element3","LineElement","_super13","_this24","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","_segments$i","interpolated","_step17","_iterator17","_findStartAndEnd","findStartAndEnd","solidSegments","_computeSegments","inRange$1","hitRadius","_Element4","PointElement","_super14","_this25","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","bar","half","_bar$getProps","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","_inRange","skipX","skipY","addNormalRectPath","inflateRect","refRect","_Element5","BarElement","_super15","_this26","_this$options13","_boundingRects","addRectPath","_this$getProps6","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","_getStartAndCountOfVi3","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","endIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","_ref12","_ref12$x","_ref12$y","linePoints","_ref13","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","_findPoint","findPoint","unshift","interpolate","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_source$scale","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","_ref14","_ref14$above","above","_ref14$below","clipVertical","doFill","clipY","lineLoop","_step21","_iterator21","pathSegment","_step22","_step18","tpoints","_iterator18","_step19","_iterator19","_step20","tgt","subBounds","_iterator20","fillSource","_iterator22","_ref16","_src$style","_src$style$background","notShape","clipBounds","interpolatedLineTo","targetLoop","_scale$chart$chartAre","_ref17","interpolatedPoint","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","pointStyleWidth","itemHeight","_Element6","Legend","_super16","_this27","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","_this28","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","_this$options14","rtlHelper","_step23","_iterator23","hitbox","_step24","_iterator24","_hitbox","_draw","cursor","_this29","defaultColor","fontColor","halfFontSize","_getBoxSize2","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","_element","adjustHitBoxes","afterEvent","handleEvent","ci","_chart$legend$options","_Element7","Title","_super17","_this30","_padding","textSize","fontOpts","_this$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","paddingAndSize","_toTRBLCorners","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","_Element8","Tooltip","_super18","_this31","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","_this32","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","_controller$getLabelA","_this33","getLabelAndValue","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","_toTRBLCorners2","ptX","ptY","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","_ref18","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","_willRender","labelCount","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","lastIndexOf","_Scale","CategoryScale","_super19","_this35","_startValue","_valueRange","_addedLabels","added","_step25","_iterator25","_ref20","_index3","_this$getUserBounds2","_this$getMinMax","getDecimalForPixel","generateTicks$1","generationOptions","dataRange","niceMin","niceMax","numSpaces","rounded","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","decimalPlaces","relativeLabelSize","_ref21","_Scale2","LinearScaleBase","_super20","_this36","_endValue","_this$getUserBounds3","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","computeTickLimit","getTickLimit","_maxDigits","_LinearScaleBase","LinearScale","_super21","_this$getMinMax2","handleTickRangeOptions","isMajor","tickVal","_Scale3","LogarithmicScale","_super22","_this37","_zero","_this$getMinMax3","_this$getUserBounds4","exp","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","_LinearScaleBase2","RadialLinearScale","_super23","_this38","_this$getMinMax4","_this39","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","_this$_pointLabelItem","_this$options15","_this40","_scale$_pointLabelIte","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","gridLineOpts","drawRadiusLine","_this41","animate","INTERVALS","millisecond","common","steps","quarter","UNITS","sorter","_parse","_adapter","_scale$_parseOpts","_parseOpts","parser","isoWeekday","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","_Scale4","TimeScale","_super24","_this42","_unit","_majorUnit","_offsets","_normalized","formats","normalized","_this$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","datetime","minorFormat","majorFormat","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","span","TimeSeriesScale","_TimeScale","_super25","_this43","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"mappings":"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","file":"js/application-0b1383c4a68b2371b2d8.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n \"use strict\";\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n\n var sparkMd5 = createCommonjsModule(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function rhex(n) {\n var s = \"\",\n j;\n\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n\n return s;\n }\n\n function hex(x) {\n var i;\n\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n\n return x.join(\"\");\n }\n\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n function SparkMD5() {\n this.reset();\n }\n\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(this._hash, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n });\n });\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n var FileChecksum = function () {\n createClass(FileChecksum, null, [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n\n createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }]);\n return FileChecksum;\n }();\n\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n return root.querySelector(selector);\n }\n\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n }\n\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n\n var BlobRecord = function () {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobRecord, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr,\n responseType = _xhr.responseType,\n response = _xhr.response;\n\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }]);\n return BlobRecord;\n }();\n\n var BlobUpload = function () {\n function BlobUpload(blob) {\n var _this = this;\n\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr,\n status = _xhr.status,\n response = _xhr.response;\n\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n }]);\n return BlobUpload;\n }();\n\n var id = 0;\n\n var DirectUpload = function () {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n\n createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n return DirectUpload;\n }();\n\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n\n return object[methodName].apply(object, messages);\n }\n }\n\n var DirectUploadController = function () {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n\n _this.dispatch(\"end\");\n\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }]);\n return DirectUploadController;\n }();\n\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n var DirectUploadsController = function () {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n\n createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var controllers = this.createDirectUploadControllers();\n\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n\n _this.dispatch(\"end\");\n }\n };\n\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray$1(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n }]);\n return DirectUploadsController;\n }();\n\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n\n function didClick(event) {\n var target = event.target;\n\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n\n submitButtonsByForm[\"delete\"](form);\n }\n\n function disable(input) {\n input.disabled = true;\n }\n\n function enable(input) {\n input.disabled = false;\n }\n\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\n// import Rails from \"@rails/ujs\"\nimport * as ActiveStorage from \"@rails/activestorage\"\nimport \"channels\"\nrequire(\"chartkick\")\nrequire(\"chart.js\")\n\n// Rails.start()\nActiveStorage.start()\n","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 3;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Chartkick.js\n * Create beautiful charts with one line of JavaScript\n * https://github.com/ankane/chartkick.js\n * v4.2.0\n * MIT License\n */\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Chartkick = factory());\n})(this, function () {\n 'use strict';\n\n function isArray(variable) {\n return Object.prototype.toString.call(variable) === \"[object Array]\";\n }\n\n function isFunction(variable) {\n return variable instanceof Function;\n }\n\n function isPlainObject(variable) {\n // protect against prototype pollution, defense 2\n return Object.prototype.toString.call(variable) === \"[object Object]\" && !isFunction(variable) && variable instanceof Object;\n } // https://github.com/madrobby/zepto/blob/master/src/zepto.js\n\n\n function extend(target, source) {\n var key;\n\n for (key in source) {\n // protect against prototype pollution, defense 1\n if (key === \"__proto__\") {\n continue;\n }\n\n if (isPlainObject(source[key]) || isArray(source[key])) {\n if (isPlainObject(source[key]) && !isPlainObject(target[key])) {\n target[key] = {};\n }\n\n if (isArray(source[key]) && !isArray(target[key])) {\n target[key] = [];\n }\n\n extend(target[key], source[key]);\n } else if (source[key] !== undefined) {\n target[key] = source[key];\n }\n }\n }\n\n function merge(obj1, obj2) {\n var target = {};\n extend(target, obj1);\n extend(target, obj2);\n return target;\n }\n\n var DATE_PATTERN = /^(\\d\\d\\d\\d)(-)?(\\d\\d)(-)?(\\d\\d)$/i;\n\n function negativeValues(series) {\n var i, j, data;\n\n for (i = 0; i < series.length; i++) {\n data = series[i].data;\n\n for (j = 0; j < data.length; j++) {\n if (data[j][1] < 0) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n function toStr(n) {\n return \"\" + n;\n }\n\n function toFloat(n) {\n return parseFloat(n);\n }\n\n function toDate(n) {\n var matches, year, month, day;\n\n if (_typeof(n) !== \"object\") {\n if (typeof n === \"number\") {\n n = new Date(n * 1000); // ms\n } else {\n n = toStr(n);\n\n if (matches = n.match(DATE_PATTERN)) {\n year = parseInt(matches[1], 10);\n month = parseInt(matches[3], 10) - 1;\n day = parseInt(matches[5], 10);\n return new Date(year, month, day);\n } else {\n // try our best to get the str into iso8601\n // TODO be smarter about this\n var str = n.replace(/ /, \"T\").replace(\" \", \"\").replace(\"UTC\", \"Z\"); // Date.parse returns milliseconds if valid and NaN if invalid\n\n n = new Date(Date.parse(str) || n);\n }\n }\n }\n\n return n;\n }\n\n function toArr(n) {\n if (!isArray(n)) {\n var arr = [],\n i;\n\n for (i in n) {\n if (n.hasOwnProperty(i)) {\n arr.push([i, n[i]]);\n }\n }\n\n n = arr;\n }\n\n return n;\n }\n\n function jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle) {\n return function (chart, opts, chartOptions) {\n var series = chart.data;\n var options = merge({}, defaultOptions);\n options = merge(options, chartOptions || {});\n\n if (chart.singleSeriesFormat || \"legend\" in opts) {\n hideLegend(options, opts.legend, chart.singleSeriesFormat);\n }\n\n if (opts.title) {\n setTitle(options, opts.title);\n } // min\n\n\n if (\"min\" in opts) {\n setMin(options, opts.min);\n } else if (!negativeValues(series)) {\n setMin(options, 0);\n } // max\n\n\n if (opts.max) {\n setMax(options, opts.max);\n }\n\n if (\"stacked\" in opts) {\n setStacked(options, opts.stacked);\n }\n\n if (opts.colors) {\n options.colors = opts.colors;\n }\n\n if (opts.xtitle) {\n setXtitle(options, opts.xtitle);\n }\n\n if (opts.ytitle) {\n setYtitle(options, opts.ytitle);\n } // merge library last\n\n\n options = merge(options, opts.library || {});\n return options;\n };\n }\n\n function sortByTime(a, b) {\n return a[0].getTime() - b[0].getTime();\n }\n\n function sortByNumberSeries(a, b) {\n return a[0] - b[0];\n }\n\n function sortByNumber(a, b) {\n return a - b;\n }\n\n function isMinute(d) {\n return d.getMilliseconds() === 0 && d.getSeconds() === 0;\n }\n\n function isHour(d) {\n return isMinute(d) && d.getMinutes() === 0;\n }\n\n function isDay(d) {\n return isHour(d) && d.getHours() === 0;\n }\n\n function isWeek(d, dayOfWeek) {\n return isDay(d) && d.getDay() === dayOfWeek;\n }\n\n function isMonth(d) {\n return isDay(d) && d.getDate() === 1;\n }\n\n function isYear(d) {\n return isMonth(d) && d.getMonth() === 0;\n }\n\n function isDate(obj) {\n return !isNaN(toDate(obj)) && toStr(obj).length >= 6;\n }\n\n function isNumber(obj) {\n return typeof obj === \"number\";\n }\n\n var byteSuffixes = [\"bytes\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\"];\n\n function formatValue(pre, value, options, axis) {\n pre = pre || \"\";\n\n if (options.prefix) {\n if (value < 0) {\n value = value * -1;\n pre += \"-\";\n }\n\n pre += options.prefix;\n }\n\n var suffix = options.suffix || \"\";\n var precision = options.precision;\n var round = options.round;\n\n if (options.byteScale) {\n var suffixIdx;\n var baseValue = axis ? options.byteScale : value;\n\n if (baseValue >= 1152921504606846976) {\n value /= 1152921504606846976;\n suffixIdx = 6;\n } else if (baseValue >= 1125899906842624) {\n value /= 1125899906842624;\n suffixIdx = 5;\n } else if (baseValue >= 1099511627776) {\n value /= 1099511627776;\n suffixIdx = 4;\n } else if (baseValue >= 1073741824) {\n value /= 1073741824;\n suffixIdx = 3;\n } else if (baseValue >= 1048576) {\n value /= 1048576;\n suffixIdx = 2;\n } else if (baseValue >= 1024) {\n value /= 1024;\n suffixIdx = 1;\n } else {\n suffixIdx = 0;\n } // TODO handle manual precision case\n\n\n if (precision === undefined && round === undefined) {\n if (value >= 1023.5) {\n if (suffixIdx < byteSuffixes.length - 1) {\n value = 1.0;\n suffixIdx += 1;\n }\n }\n\n precision = value >= 1000 ? 4 : 3;\n }\n\n suffix = \" \" + byteSuffixes[suffixIdx];\n }\n\n if (precision !== undefined && round !== undefined) {\n throw Error(\"Use either round or precision, not both\");\n }\n\n if (!axis) {\n if (precision !== undefined) {\n value = value.toPrecision(precision);\n\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n\n if (round !== undefined) {\n if (round < 0) {\n var num = Math.pow(10, -1 * round);\n value = parseInt((1.0 * value / num).toFixed(0)) * num;\n } else {\n value = value.toFixed(round);\n\n if (!options.zeros) {\n value = parseFloat(value);\n }\n }\n }\n }\n\n if (options.thousands || options.decimal) {\n value = toStr(value);\n var parts = value.split(\".\");\n value = parts[0];\n\n if (options.thousands) {\n value = value.replace(/\\B(?=(\\d{3})+(?!\\d))/g, options.thousands);\n }\n\n if (parts.length > 1) {\n value += (options.decimal || \".\") + parts[1];\n }\n }\n\n return pre + value + suffix;\n }\n\n function seriesOption(chart, series, option) {\n if (option in series) {\n return series[option];\n } else if (option in chart.options) {\n return chart.options[option];\n }\n\n return null;\n }\n\n function allZeros(data) {\n var i, j, d;\n\n for (i = 0; i < data.length; i++) {\n d = data[i].data;\n\n for (j = 0; j < d.length; j++) {\n if (d[j][1] != 0) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n var baseOptions = {\n maintainAspectRatio: false,\n animation: false,\n plugins: {\n legend: {},\n tooltip: {\n displayColors: false,\n callbacks: {}\n },\n title: {\n font: {\n size: 20\n },\n color: \"#333\"\n }\n },\n interaction: {}\n };\n var defaultOptions$2 = {\n scales: {\n y: {\n ticks: {\n maxTicksLimit: 4\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n grid: {}\n },\n x: {\n grid: {\n drawOnChartArea: false\n },\n title: {\n font: {\n size: 16\n },\n color: \"#333\"\n },\n time: {},\n ticks: {}\n }\n }\n }; // http://there4.io/2012/05/02/google-chart-color-list/\n\n var defaultColors = [\"#3366CC\", \"#DC3912\", \"#FF9900\", \"#109618\", \"#990099\", \"#3B3EAC\", \"#0099C6\", \"#DD4477\", \"#66AA00\", \"#B82E2E\", \"#316395\", \"#994499\", \"#22AA99\", \"#AAAA11\", \"#6633CC\", \"#E67300\", \"#8B0707\", \"#329262\", \"#5574A6\", \"#651067\"];\n\n var hideLegend$2 = function hideLegend$2(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.plugins.legend.display = !!legend;\n\n if (legend && legend !== true) {\n options.plugins.legend.position = legend;\n }\n } else if (hideLegend) {\n options.plugins.legend.display = false;\n }\n };\n\n var setTitle$2 = function setTitle$2(options, title) {\n options.plugins.title.display = true;\n options.plugins.title.text = title;\n };\n\n var setMin$2 = function setMin$2(options, min) {\n if (min !== null) {\n options.scales.y.min = toFloat(min);\n }\n };\n\n var setMax$2 = function setMax$2(options, max) {\n options.scales.y.max = toFloat(max);\n };\n\n var setBarMin$1 = function setBarMin$1(options, min) {\n if (min !== null) {\n options.scales.x.min = toFloat(min);\n }\n };\n\n var setBarMax$1 = function setBarMax$1(options, max) {\n options.scales.x.max = toFloat(max);\n };\n\n var setStacked$2 = function setStacked$2(options, stacked) {\n options.scales.x.stacked = !!stacked;\n options.scales.y.stacked = !!stacked;\n };\n\n var setXtitle$2 = function setXtitle$2(options, title) {\n options.scales.x.title.display = true;\n options.scales.x.title.text = title;\n };\n\n var setYtitle$2 = function setYtitle$2(options, title) {\n options.scales.y.title.display = true;\n options.scales.y.title.text = title;\n }; // https://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb\n\n\n var addOpacity = function addOpacity(hex, opacity) {\n var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result ? \"rgba(\" + parseInt(result[1], 16) + \", \" + parseInt(result[2], 16) + \", \" + parseInt(result[3], 16) + \", \" + opacity + \")\" : hex;\n }; // check if not null or undefined\n // https://stackoverflow.com/a/27757708/1177228\n\n\n var notnull = function notnull(x) {\n return x != null;\n };\n\n var setLabelSize = function setLabelSize(chart, data, options) {\n var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);\n\n if (maxLabelSize > 25) {\n maxLabelSize = 25;\n } else if (maxLabelSize < 10) {\n maxLabelSize = 10;\n }\n\n if (!options.scales.x.ticks.callback) {\n options.scales.x.ticks.callback = function (value) {\n value = toStr(this.getLabelForValue(value));\n\n if (value.length > maxLabelSize) {\n return value.substring(0, maxLabelSize - 2) + \"...\";\n } else {\n return value;\n }\n };\n }\n };\n\n var setFormatOptions$1 = function setFormatOptions$1(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n };\n\n if (chart.options.bytes) {\n var series = chart.data;\n\n if (chartType === \"pie\") {\n series = [{\n data: series\n }];\n } // calculate max\n\n\n var max = 0;\n\n for (var i = 0; i < series.length; i++) {\n var s = series[i];\n\n for (var j = 0; j < s.data.length; j++) {\n if (s.data[j][1] > max) {\n max = s.data[j][1];\n }\n }\n } // calculate scale\n\n\n var scale = 1;\n\n while (max >= 1024) {\n scale *= 1024;\n max /= 1024;\n } // set step size\n\n\n formatOptions.byteScale = scale;\n }\n\n if (chartType !== \"pie\") {\n var axis = options.scales.y;\n\n if (chartType === \"bar\") {\n axis = options.scales.x;\n }\n\n if (formatOptions.byteScale) {\n if (!axis.ticks.stepSize) {\n axis.ticks.stepSize = formatOptions.byteScale / 2;\n }\n\n if (!axis.ticks.maxTicksLimit) {\n axis.ticks.maxTicksLimit = 4;\n }\n }\n\n if (!axis.ticks.callback) {\n axis.ticks.callback = function (value) {\n return formatValue(\"\", value, formatOptions, true);\n };\n }\n }\n\n if (!options.plugins.tooltip.callbacks.label) {\n if (chartType === \"scatter\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n return label + '(' + context.label + ', ' + context.formattedValue + ')';\n };\n } else if (chartType === \"bubble\") {\n options.plugins.tooltip.callbacks.label = function (context) {\n var label = context.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n var dataPoint = context.raw;\n return label + '(' + dataPoint.x + ', ' + dataPoint.y + ', ' + dataPoint.v + ')';\n };\n } else if (chartType === \"pie\") {\n // need to use separate label for pie charts\n options.plugins.tooltip.callbacks.label = function (context) {\n var dataLabel = context.label;\n var value = ': ';\n\n if (isArray(dataLabel)) {\n // show value on first line of multiline label\n // need to clone because we are changing the value\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return formatValue(dataLabel, context.parsed, formatOptions);\n };\n } else {\n var valueLabel = chartType === \"bar\" ? \"x\" : \"y\";\n\n options.plugins.tooltip.callbacks.label = function (context) {\n // don't show null values for stacked charts\n if (context.parsed[valueLabel] === null) {\n return;\n }\n\n var label = context.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n return formatValue(label, context.parsed[valueLabel], formatOptions);\n };\n }\n }\n };\n\n var jsOptions$2 = jsOptionsFunc(merge(baseOptions, defaultOptions$2), hideLegend$2, setTitle$2, setMin$2, setMax$2, setStacked$2, setXtitle$2, setYtitle$2);\n\n var createDataTable = function createDataTable(chart, options, chartType) {\n var datasets = [];\n var labels = [];\n var colors = chart.options.colors || defaultColors;\n var day = true;\n var week = true;\n var dayOfWeek;\n var month = true;\n var year = true;\n var hour = true;\n var minute = true;\n var series = chart.data;\n var max = 0;\n\n if (chartType === \"bubble\") {\n for (var i$1 = 0; i$1 < series.length; i$1++) {\n var s$1 = series[i$1];\n\n for (var j$1 = 0; j$1 < s$1.data.length; j$1++) {\n if (s$1.data[j$1][2] > max) {\n max = s$1.data[j$1][2];\n }\n }\n }\n }\n\n var i,\n j,\n s,\n d,\n key,\n rows = [],\n rows2 = [];\n\n if (chartType === \"bar\" || chartType === \"column\" || chart.xtype !== \"number\" && chart.xtype !== \"bubble\") {\n var sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = chart.xtype == \"datetime\" ? d[0].getTime() : d[0];\n\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n }\n\n rows[key][i] = toFloat(d[1]);\n\n if (sortedLabels.indexOf(key) === -1) {\n sortedLabels.push(key);\n }\n }\n }\n\n if (chart.xtype === \"datetime\" || chart.xtype === \"number\") {\n sortedLabels.sort(sortByNumber);\n }\n\n for (j = 0; j < series.length; j++) {\n rows2.push([]);\n }\n\n var value;\n var k;\n\n for (k = 0; k < sortedLabels.length; k++) {\n i = sortedLabels[k];\n\n if (chart.xtype === \"datetime\") {\n value = new Date(toFloat(i)); // TODO make this efficient\n\n day = day && isDay(value);\n\n if (!dayOfWeek) {\n dayOfWeek = value.getDay();\n }\n\n week = week && isWeek(value, dayOfWeek);\n month = month && isMonth(value);\n year = year && isYear(value);\n hour = hour && isHour(value);\n minute = minute && isMinute(value);\n } else {\n value = i;\n }\n\n labels.push(value);\n\n for (j = 0; j < series.length; j++) {\n // Chart.js doesn't like undefined\n rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);\n }\n }\n } else {\n for (var i$2 = 0; i$2 < series.length; i$2++) {\n var s$2 = series[i$2];\n var d$1 = [];\n\n for (var j$2 = 0; j$2 < s$2.data.length; j$2++) {\n var point = {\n x: toFloat(s$2.data[j$2][0]),\n y: toFloat(s$2.data[j$2][1])\n };\n\n if (chartType === \"bubble\") {\n point.r = toFloat(s$2.data[j$2][2]) * 20 / max; // custom attribute, for tooltip\n\n point.v = s$2.data[j$2][2];\n }\n\n d$1.push(point);\n }\n\n rows2.push(d$1);\n }\n }\n\n var color;\n var backgroundColor;\n\n for (i = 0; i < series.length; i++) {\n s = series[i]; // use colors for each bar for single series format\n\n if (chart.options.colors && chart.singleSeriesFormat && (chartType === \"bar\" || chartType === \"column\") && !s.color && isArray(chart.options.colors) && !isArray(chart.options.colors[0])) {\n color = colors;\n backgroundColor = [];\n\n for (var j$3 = 0; j$3 < colors.length; j$3++) {\n backgroundColor[j$3] = addOpacity(color[j$3], 0.5);\n }\n } else {\n color = s.color || colors[i];\n backgroundColor = chartType !== \"line\" ? addOpacity(color, 0.5) : color;\n }\n\n var dataset = {\n label: s.name || \"\",\n data: rows2[i],\n fill: chartType === \"area\",\n borderColor: color,\n backgroundColor: backgroundColor,\n borderWidth: 2\n };\n var pointChart = chartType === \"line\" || chartType === \"area\" || chartType === \"scatter\" || chartType === \"bubble\";\n\n if (pointChart) {\n dataset.pointBackgroundColor = color;\n dataset.pointHoverBackgroundColor = color;\n dataset.pointHitRadius = 50;\n }\n\n if (chartType === \"bubble\") {\n dataset.pointBackgroundColor = backgroundColor;\n dataset.pointHoverBackgroundColor = backgroundColor;\n dataset.pointHoverBorderWidth = 2;\n }\n\n if (s.stack) {\n dataset.stack = s.stack;\n }\n\n var curve = seriesOption(chart, s, \"curve\");\n\n if (curve === false) {\n dataset.tension = 0;\n } else if (pointChart) {\n dataset.tension = 0.4;\n }\n\n var points = seriesOption(chart, s, \"points\");\n\n if (points === false) {\n dataset.pointRadius = 0;\n dataset.pointHoverRadius = 0;\n }\n\n dataset = merge(dataset, chart.options.dataset || {});\n dataset = merge(dataset, s.library || {});\n dataset = merge(dataset, s.dataset || {});\n datasets.push(dataset);\n }\n\n var xmin = chart.options.xmin;\n var xmax = chart.options.xmax;\n\n if (chart.xtype === \"datetime\") {\n if (notnull(xmin)) {\n options.scales.x.min = toDate(xmin).getTime();\n }\n\n if (notnull(xmax)) {\n options.scales.x.max = toDate(xmax).getTime();\n }\n } else if (chart.xtype === \"number\") {\n if (notnull(xmin)) {\n options.scales.x.min = xmin;\n }\n\n if (notnull(xmax)) {\n options.scales.x.max = xmax;\n }\n } // for empty datetime chart\n\n\n if (chart.xtype === \"datetime\" && labels.length === 0) {\n if (notnull(xmin)) {\n labels.push(toDate(xmin));\n }\n\n if (notnull(xmax)) {\n labels.push(toDate(xmax));\n }\n\n day = false;\n week = false;\n month = false;\n year = false;\n hour = false;\n minute = false;\n }\n\n if (chart.xtype === \"datetime\" && labels.length > 0) {\n var minTime = (notnull(xmin) ? toDate(xmin) : labels[0]).getTime();\n var maxTime = (notnull(xmax) ? toDate(xmax) : labels[0]).getTime();\n\n for (i = 1; i < labels.length; i++) {\n var value$1 = labels[i].getTime();\n\n if (value$1 < minTime) {\n minTime = value$1;\n }\n\n if (value$1 > maxTime) {\n maxTime = value$1;\n }\n }\n\n var timeDiff = (maxTime - minTime) / (86400 * 1000.0);\n\n if (!options.scales.x.time.unit) {\n var step;\n\n if (year || timeDiff > 365 * 10) {\n options.scales.x.time.unit = \"year\";\n step = 365;\n } else if (month || timeDiff > 30 * 10) {\n options.scales.x.time.unit = \"month\";\n step = 30;\n } else if (day || timeDiff > 10) {\n options.scales.x.time.unit = \"day\";\n step = 1;\n } else if (hour || timeDiff > 0.5) {\n options.scales.x.time.displayFormats = {\n hour: \"MMM d, h a\"\n };\n options.scales.x.time.unit = \"hour\";\n step = 1 / 24.0;\n } else if (minute) {\n options.scales.x.time.displayFormats = {\n minute: \"h:mm a\"\n };\n options.scales.x.time.unit = \"minute\";\n step = 1 / 24.0 / 60.0;\n }\n\n if (step && timeDiff > 0) {\n // width not available for hidden elements\n var width = chart.element.offsetWidth;\n\n if (width > 0) {\n var unitStepSize = Math.ceil(timeDiff / step / (width / 100.0));\n\n if (week && step === 1) {\n unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;\n }\n\n options.scales.x.time.stepSize = unitStepSize;\n }\n }\n }\n\n if (!options.scales.x.time.tooltipFormat) {\n if (day) {\n options.scales.x.time.tooltipFormat = \"PP\";\n } else if (hour) {\n options.scales.x.time.tooltipFormat = \"MMM d, h a\";\n } else if (minute) {\n options.scales.x.time.tooltipFormat = \"h:mm a\";\n }\n }\n }\n\n var data = {\n labels: labels,\n datasets: datasets\n };\n return data;\n };\n\n var defaultExport$2 = function defaultExport(library) {\n this.name = \"chartjs\";\n this.library = library;\n };\n\n defaultExport$2.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n var chartOptions = {}; // fix for https://github.com/chartjs/Chart.js/issues/2441\n\n if (!chart.options.max && allZeros(chart.data)) {\n chartOptions.max = 1;\n }\n\n var options = jsOptions$2(chart, merge(chartOptions, chart.options));\n setFormatOptions$1(chart, options, chartType);\n var data = createDataTable(chart, options, chartType || \"line\");\n\n if (chart.xtype === \"number\") {\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\";\n } else {\n options.scales.x.type = chart.xtype === \"string\" ? \"category\" : \"time\";\n }\n\n this.drawChart(chart, \"line\", data, options);\n };\n\n defaultExport$2.prototype.renderPieChart = function renderPieChart(chart) {\n var options = merge({}, baseOptions);\n\n if (chart.options.donut) {\n options.cutout = \"50%\";\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$2(options, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$2(options, chart.options.title);\n }\n\n options = merge(options, chart.options.library || {});\n setFormatOptions$1(chart, options, \"pie\");\n var labels = [];\n var values = [];\n\n for (var i = 0; i < chart.data.length; i++) {\n var point = chart.data[i];\n labels.push(point[0]);\n values.push(point[1]);\n }\n\n var dataset = {\n data: values,\n backgroundColor: chart.options.colors || defaultColors\n };\n dataset = merge(dataset, chart.options.dataset || {});\n var data = {\n labels: labels,\n datasets: [dataset]\n };\n this.drawChart(chart, \"pie\", data, options);\n };\n\n defaultExport$2.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n var options;\n\n if (chartType === \"bar\") {\n var barOptions = merge(baseOptions, defaultOptions$2);\n barOptions.indexAxis = \"y\"; // ensure gridlines have proper orientation\n\n barOptions.scales.x.grid.drawOnChartArea = true;\n barOptions.scales.y.grid.drawOnChartArea = false;\n delete barOptions.scales.y.ticks.maxTicksLimit;\n options = jsOptionsFunc(barOptions, hideLegend$2, setTitle$2, setBarMin$1, setBarMax$1, setStacked$2, setXtitle$2, setYtitle$2)(chart, chart.options);\n } else {\n options = jsOptions$2(chart, chart.options);\n }\n\n setFormatOptions$1(chart, options, chartType);\n var data = createDataTable(chart, options, \"column\");\n\n if (chartType !== \"bar\") {\n setLabelSize(chart, data, options);\n }\n\n this.drawChart(chart, \"bar\", data, options);\n };\n\n defaultExport$2.prototype.renderAreaChart = function renderAreaChart(chart) {\n this.renderLineChart(chart, \"area\");\n };\n\n defaultExport$2.prototype.renderBarChart = function renderBarChart(chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport$2.prototype.renderScatterChart = function renderScatterChart(chart, chartType) {\n chartType = chartType || \"scatter\";\n var options = jsOptions$2(chart, chart.options);\n setFormatOptions$1(chart, options, chartType);\n\n if (!(\"showLine\" in options)) {\n options.showLine = false;\n }\n\n var data = createDataTable(chart, options, chartType);\n options.scales.x.type = options.scales.x.type || \"linear\";\n options.scales.x.position = options.scales.x.position || \"bottom\"; // prevent grouping hover and tooltips\n\n if (!(\"mode\" in options.interaction)) {\n options.interaction.mode = \"nearest\";\n }\n\n this.drawChart(chart, chartType, data, options);\n };\n\n defaultExport$2.prototype.renderBubbleChart = function renderBubbleChart(chart) {\n this.renderScatterChart(chart, \"bubble\");\n };\n\n defaultExport$2.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport$2.prototype.drawChart = function drawChart(chart, type, data, options) {\n this.destroy(chart);\n\n if (chart.destroyed) {\n return;\n }\n\n var chartOptions = {\n type: type,\n data: data,\n options: options\n };\n\n if (chart.options.code) {\n window.console.log(\"new Chart(ctx, \" + JSON.stringify(chartOptions) + \");\");\n }\n\n chart.element.innerHTML = \"\";\n var ctx = chart.element.getElementsByTagName(\"CANVAS\")[0];\n chart.chart = new this.library(ctx, chartOptions);\n };\n\n var defaultOptions$1 = {\n chart: {},\n xAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n yAxis: {\n title: {\n text: null\n },\n labels: {\n style: {\n fontSize: \"12px\"\n }\n }\n },\n title: {\n text: null\n },\n credits: {\n enabled: false\n },\n legend: {\n borderWidth: 0\n },\n tooltip: {\n style: {\n fontSize: \"12px\"\n }\n },\n plotOptions: {\n areaspline: {},\n area: {},\n series: {\n marker: {}\n }\n },\n time: {\n useUTC: false\n }\n };\n\n var hideLegend$1 = function hideLegend$1(options, legend, hideLegend) {\n if (legend !== undefined) {\n options.legend.enabled = !!legend;\n\n if (legend && legend !== true) {\n if (legend === \"top\" || legend === \"bottom\") {\n options.legend.verticalAlign = legend;\n } else {\n options.legend.layout = \"vertical\";\n options.legend.verticalAlign = \"middle\";\n options.legend.align = legend;\n }\n }\n } else if (hideLegend) {\n options.legend.enabled = false;\n }\n };\n\n var setTitle$1 = function setTitle$1(options, title) {\n options.title.text = title;\n };\n\n var setMin$1 = function setMin$1(options, min) {\n options.yAxis.min = min;\n };\n\n var setMax$1 = function setMax$1(options, max) {\n options.yAxis.max = max;\n };\n\n var setStacked$1 = function setStacked$1(options, stacked) {\n var stackedValue = stacked ? stacked === true ? \"normal\" : stacked : null;\n options.plotOptions.series.stacking = stackedValue;\n options.plotOptions.area.stacking = stackedValue;\n options.plotOptions.areaspline.stacking = stackedValue;\n };\n\n var setXtitle$1 = function setXtitle$1(options, title) {\n options.xAxis.title.text = title;\n };\n\n var setYtitle$1 = function setYtitle$1(options, title) {\n options.yAxis.title.text = title;\n };\n\n var jsOptions$1 = jsOptionsFunc(defaultOptions$1, hideLegend$1, setTitle$1, setMin$1, setMax$1, setStacked$1, setXtitle$1, setYtitle$1);\n\n var setFormatOptions = function setFormatOptions(chart, options, chartType) {\n var formatOptions = {\n prefix: chart.options.prefix,\n suffix: chart.options.suffix,\n thousands: chart.options.thousands,\n decimal: chart.options.decimal,\n precision: chart.options.precision,\n round: chart.options.round,\n zeros: chart.options.zeros\n }; // skip when axis is an array (like with min/max)\n\n if (chartType !== \"pie\" && !isArray(options.yAxis) && !options.yAxis.labels.formatter) {\n options.yAxis.labels.formatter = function () {\n return formatValue(\"\", this.value, formatOptions);\n };\n }\n\n if (!options.tooltip.pointFormatter && !options.tooltip.pointFormat) {\n options.tooltip.pointFormatter = function () {\n return '\\u25CF \" + formatValue(this.series.name + ': ', this.y, formatOptions) + '
';\n };\n }\n };\n\n var defaultExport$1 = function defaultExport(library) {\n this.name = \"highcharts\";\n this.library = library;\n };\n\n defaultExport$1.prototype.renderLineChart = function renderLineChart(chart, chartType) {\n chartType = chartType || \"spline\";\n var chartOptions = {};\n\n if (chartType === \"areaspline\") {\n chartOptions = {\n plotOptions: {\n areaspline: {\n stacking: \"normal\"\n },\n area: {\n stacking: \"normal\"\n },\n series: {\n marker: {\n enabled: false\n }\n }\n }\n };\n }\n\n if (chart.options.curve === false) {\n if (chartType === \"areaspline\") {\n chartType = \"area\";\n } else if (chartType === \"spline\") {\n chartType = \"line\";\n }\n }\n\n var options = jsOptions$1(chart, chart.options, chartOptions),\n data,\n i,\n j;\n\n if (chart.xtype === \"number\") {\n options.xAxis.type = options.xAxis.type || \"linear\";\n } else {\n options.xAxis.type = chart.xtype === \"string\" ? \"category\" : \"datetime\";\n }\n\n if (!options.chart.type) {\n options.chart.type = chartType;\n }\n\n setFormatOptions(chart, options, chartType);\n var series = chart.data;\n\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n data = series[i].data;\n\n if (chart.xtype === \"datetime\") {\n for (j = 0; j < data.length; j++) {\n data[j][0] = data[j][0].getTime();\n }\n }\n\n series[i].marker = {\n symbol: \"circle\"\n };\n\n if (chart.options.points === false) {\n series[i].marker.enabled = false;\n }\n }\n\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderScatterChart = function renderScatterChart(chart) {\n var options = jsOptions$1(chart, chart.options, {});\n options.chart.type = \"scatter\";\n this.drawChart(chart, chart.data, options);\n };\n\n defaultExport$1.prototype.renderPieChart = function renderPieChart(chart) {\n var chartOptions = merge(defaultOptions$1, {});\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n if (chart.options.donut) {\n chartOptions.plotOptions = {\n pie: {\n innerSize: \"50%\"\n }\n };\n }\n\n if (\"legend\" in chart.options) {\n hideLegend$1(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle$1(chartOptions, chart.options.title);\n }\n\n var options = merge(chartOptions, chart.options.library || {});\n setFormatOptions(chart, options, \"pie\");\n var series = [{\n type: \"pie\",\n name: chart.options.label || \"Value\",\n data: chart.data\n }];\n this.drawChart(chart, series, options);\n };\n\n defaultExport$1.prototype.renderColumnChart = function renderColumnChart(chart, chartType) {\n chartType = chartType || \"column\";\n var series = chart.data;\n var options = jsOptions$1(chart, chart.options),\n i,\n j,\n s,\n d,\n rows = [],\n categories = [];\n options.chart.type = chartType;\n setFormatOptions(chart, options, chartType);\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n\n if (!rows[d[0]]) {\n rows[d[0]] = new Array(series.length);\n categories.push(d[0]);\n }\n\n rows[d[0]][i] = d[1];\n }\n }\n\n if (chart.xtype === \"number\") {\n categories.sort(sortByNumber);\n }\n\n options.xAxis.categories = categories;\n var newSeries = [],\n d2;\n\n for (i = 0; i < series.length; i++) {\n d = [];\n\n for (j = 0; j < categories.length; j++) {\n d.push(rows[categories[j]][i] || 0);\n }\n\n d2 = {\n name: series[i].name || \"Value\",\n data: d\n };\n\n if (series[i].stack) {\n d2.stack = series[i].stack;\n }\n\n newSeries.push(d2);\n }\n\n this.drawChart(chart, newSeries, options);\n };\n\n defaultExport$1.prototype.renderBarChart = function renderBarChart(chart) {\n this.renderColumnChart(chart, \"bar\");\n };\n\n defaultExport$1.prototype.renderAreaChart = function renderAreaChart(chart) {\n this.renderLineChart(chart, \"areaspline\");\n };\n\n defaultExport$1.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.destroy();\n }\n };\n\n defaultExport$1.prototype.drawChart = function drawChart(chart, data, options) {\n this.destroy(chart);\n\n if (chart.destroyed) {\n return;\n }\n\n options.chart.renderTo = chart.element.id;\n options.series = data;\n\n if (chart.options.code) {\n window.console.log(\"new Highcharts.Chart(\" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.Chart(options);\n };\n\n var loaded = {};\n var callbacks = []; // Set chart options\n\n var defaultOptions = {\n chartArea: {},\n fontName: \"'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif\",\n pointSize: 6,\n legend: {\n textStyle: {\n fontSize: 12,\n color: \"#444\"\n },\n alignment: \"center\",\n position: \"right\"\n },\n curveType: \"function\",\n hAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n gridlines: {\n color: \"transparent\"\n },\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n vAxis: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n },\n titleTextStyle: {},\n baselineColor: \"#ccc\",\n viewWindow: {}\n },\n tooltip: {\n textStyle: {\n color: \"#666\",\n fontSize: 12\n }\n }\n };\n\n var hideLegend = function hideLegend(options, legend, _hideLegend) {\n if (legend !== undefined) {\n var position;\n\n if (!legend) {\n position = \"none\";\n } else if (legend === true) {\n position = \"right\";\n } else {\n position = legend;\n }\n\n options.legend.position = position;\n } else if (_hideLegend) {\n options.legend.position = \"none\";\n }\n };\n\n var setTitle = function setTitle(options, title) {\n options.title = title;\n options.titleTextStyle = {\n color: \"#333\",\n fontSize: \"20px\"\n };\n };\n\n var setMin = function setMin(options, min) {\n options.vAxis.viewWindow.min = min;\n };\n\n var setMax = function setMax(options, max) {\n options.vAxis.viewWindow.max = max;\n };\n\n var setBarMin = function setBarMin(options, min) {\n options.hAxis.viewWindow.min = min;\n };\n\n var setBarMax = function setBarMax(options, max) {\n options.hAxis.viewWindow.max = max;\n };\n\n var setStacked = function setStacked(options, stacked) {\n options.isStacked = stacked ? stacked : false;\n };\n\n var setXtitle = function setXtitle(options, title) {\n options.hAxis.title = title;\n options.hAxis.titleTextStyle.italic = false;\n };\n\n var setYtitle = function setYtitle(options, title) {\n options.vAxis.title = title;\n options.vAxis.titleTextStyle.italic = false;\n };\n\n var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);\n\n var resize = function resize(callback) {\n if (window.attachEvent) {\n window.attachEvent(\"onresize\", callback);\n } else if (window.addEventListener) {\n window.addEventListener(\"resize\", callback, true);\n }\n\n callback();\n };\n\n var defaultExport = function defaultExport(library) {\n this.name = \"google\";\n this.library = library;\n };\n\n defaultExport.prototype.renderLineChart = function renderLineChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n\n if (chart.options.curve === false) {\n chartOptions.curveType = \"none\";\n }\n\n if (chart.options.points === false) {\n chartOptions.pointSize = 0;\n }\n\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n this$1$1.drawChart(chart, \"LineChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderPieChart = function renderPieChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n chartArea: {\n top: \"10%\",\n height: \"80%\"\n },\n legend: {}\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n if (chart.options.donut) {\n chartOptions.pieHole = 0.5;\n }\n\n if (\"legend\" in chart.options) {\n hideLegend(chartOptions, chart.options.legend);\n }\n\n if (chart.options.title) {\n setTitle(chartOptions, chart.options.title);\n }\n\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", \"Value\");\n data.addRows(chart.data);\n this$1$1.drawChart(chart, \"PieChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderColumnChart = function renderColumnChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, function () {\n var options = jsOptions(chart, chart.options);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n this$1$1.drawChart(chart, \"ColumnChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderBarChart = function renderBarChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n hAxis: {\n gridlines: {\n color: \"#ccc\"\n }\n }\n };\n var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n this$1$1.drawChart(chart, \"BarChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderAreaChart = function renderAreaChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {\n isStacked: true,\n pointSize: 0,\n areaOpacity: 0.5\n };\n var options = jsOptions(chart, chart.options, chartOptions);\n var data = this$1$1.createDataTable(chart.data, chart.xtype);\n this$1$1.drawChart(chart, \"AreaChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderGeoChart = function renderGeoChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, \"geochart\", function () {\n var chartOptions = {\n legend: \"none\",\n colorAxis: {\n colors: chart.options.colors || [\"#f6c7b6\", \"#ce502d\"]\n }\n };\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"string\", \"\");\n data.addColumn(\"number\", chart.options.label || \"Value\");\n data.addRows(chart.data);\n this$1$1.drawChart(chart, \"GeoChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderScatterChart = function renderScatterChart(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, function () {\n var chartOptions = {};\n var options = jsOptions(chart, chart.options, chartOptions);\n var series = chart.data,\n rows2 = [],\n i,\n j,\n data,\n d;\n\n for (i = 0; i < series.length; i++) {\n series[i].name = series[i].name || \"Value\";\n d = series[i].data;\n\n for (j = 0; j < d.length; j++) {\n var row = new Array(series.length + 1);\n row[0] = d[j][0];\n row[i + 1] = d[j][1];\n rows2.push(row);\n }\n }\n\n data = new this$1$1.library.visualization.DataTable();\n data.addColumn(\"number\", \"\");\n\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n\n data.addRows(rows2);\n this$1$1.drawChart(chart, \"ScatterChart\", data, options);\n });\n };\n\n defaultExport.prototype.renderTimeline = function renderTimeline(chart) {\n var this$1$1 = this;\n this.waitForLoaded(chart, \"timeline\", function () {\n var chartOptions = {\n legend: \"none\"\n };\n\n if (chart.options.colors) {\n chartOptions.colors = chart.options.colors;\n }\n\n var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});\n var data = new this$1$1.library.visualization.DataTable();\n data.addColumn({\n type: \"string\",\n id: \"Name\"\n });\n data.addColumn({\n type: \"date\",\n id: \"Start\"\n });\n data.addColumn({\n type: \"date\",\n id: \"End\"\n });\n data.addRows(chart.data);\n chart.element.style.lineHeight = \"normal\";\n this$1$1.drawChart(chart, \"Timeline\", data, options);\n });\n }; // TODO remove resize events\n\n\n defaultExport.prototype.destroy = function destroy(chart) {\n if (chart.chart) {\n chart.chart.clearChart();\n }\n };\n\n defaultExport.prototype.drawChart = function drawChart(chart, type, data, options) {\n this.destroy(chart);\n\n if (chart.destroyed) {\n return;\n }\n\n if (chart.options.code) {\n window.console.log(\"var data = new google.visualization.DataTable(\" + data.toJSON() + \");\\nvar chart = new google.visualization.\" + type + \"(element);\\nchart.draw(data, \" + JSON.stringify(options) + \");\");\n }\n\n chart.chart = new this.library.visualization[type](chart.element);\n resize(function () {\n chart.chart.draw(data, options);\n });\n };\n\n defaultExport.prototype.waitForLoaded = function waitForLoaded(chart, pack, callback) {\n var this$1$1 = this;\n\n if (!callback) {\n callback = pack;\n pack = \"corechart\";\n }\n\n callbacks.push({\n pack: pack,\n callback: callback\n });\n\n if (loaded[pack]) {\n this.runCallbacks();\n } else {\n loaded[pack] = true; // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI\n\n var loadOptions = {\n packages: [pack],\n callback: function callback() {\n this$1$1.runCallbacks();\n }\n };\n\n var config = chart.__config();\n\n if (config.language) {\n loadOptions.language = config.language;\n }\n\n if (pack === \"geochart\" && config.mapsApiKey) {\n loadOptions.mapsApiKey = config.mapsApiKey;\n }\n\n this.library.charts.load(\"current\", loadOptions);\n }\n };\n\n defaultExport.prototype.runCallbacks = function runCallbacks() {\n var cb, call;\n\n for (var i = 0; i < callbacks.length; i++) {\n cb = callbacks[i];\n call = this.library.visualization && (cb.pack === \"corechart\" && this.library.visualization.LineChart || cb.pack === \"timeline\" && this.library.visualization.Timeline || cb.pack === \"geochart\" && this.library.visualization.GeoChart);\n\n if (call) {\n cb.callback();\n callbacks.splice(i, 1);\n i--;\n }\n }\n }; // cant use object as key\n\n\n defaultExport.prototype.createDataTable = function createDataTable(series, columnType) {\n var i,\n j,\n s,\n d,\n key,\n rows = [],\n sortedLabels = [];\n\n for (i = 0; i < series.length; i++) {\n s = series[i];\n series[i].name = series[i].name || \"Value\";\n\n for (j = 0; j < s.data.length; j++) {\n d = s.data[j];\n key = columnType === \"datetime\" ? d[0].getTime() : d[0];\n\n if (!rows[key]) {\n rows[key] = new Array(series.length);\n sortedLabels.push(key);\n }\n\n rows[key][i] = toFloat(d[1]);\n }\n }\n\n var rows2 = [];\n var day = true;\n var value;\n\n for (j = 0; j < sortedLabels.length; j++) {\n i = sortedLabels[j];\n\n if (columnType === \"datetime\") {\n value = new Date(toFloat(i));\n day = day && isDay(value);\n } else if (columnType === \"number\") {\n value = toFloat(i);\n } else {\n value = i;\n }\n\n rows2.push([value].concat(rows[i]));\n }\n\n if (columnType === \"datetime\") {\n rows2.sort(sortByTime);\n } else if (columnType === \"number\") {\n rows2.sort(sortByNumberSeries);\n\n for (i = 0; i < rows2.length; i++) {\n rows2[i][0] = toStr(rows2[i][0]);\n }\n\n columnType = \"string\";\n } // create datatable\n\n\n var data = new this.library.visualization.DataTable();\n columnType = columnType === \"datetime\" && day ? \"date\" : columnType;\n data.addColumn(columnType, \"\");\n\n for (i = 0; i < series.length; i++) {\n data.addColumn(\"number\", series[i].name);\n }\n\n data.addRows(rows2);\n return data;\n };\n\n function formatSeriesData(data, keyType) {\n var r = [],\n j,\n keyFunc;\n\n if (keyType === \"number\") {\n keyFunc = toFloat;\n } else if (keyType === \"datetime\") {\n keyFunc = toDate;\n } else {\n keyFunc = toStr;\n }\n\n if (keyType === \"bubble\") {\n for (j = 0; j < data.length; j++) {\n r.push([toFloat(data[j][0]), toFloat(data[j][1]), toFloat(data[j][2])]);\n }\n } else {\n for (j = 0; j < data.length; j++) {\n r.push([keyFunc(data[j][0]), toFloat(data[j][1])]);\n }\n }\n\n if (keyType === \"datetime\") {\n r.sort(sortByTime);\n } else if (keyType === \"number\") {\n r.sort(sortByNumberSeries);\n }\n\n return r;\n }\n\n function detectXType(series, noDatetime, options) {\n if (dataEmpty(series)) {\n if ((options.xmin || options.xmax) && (!options.xmin || isDate(options.xmin)) && (!options.xmax || isDate(options.xmax))) {\n return \"datetime\";\n } else {\n return \"number\";\n }\n } else if (detectXTypeWithFunction(series, isNumber)) {\n return \"number\";\n } else if (!noDatetime && detectXTypeWithFunction(series, isDate)) {\n return \"datetime\";\n } else {\n return \"string\";\n }\n }\n\n function detectXTypeWithFunction(series, func) {\n var i, j, data;\n\n for (i = 0; i < series.length; i++) {\n data = toArr(series[i].data);\n\n for (j = 0; j < data.length; j++) {\n if (!func(data[j][0])) {\n return false;\n }\n }\n }\n\n return true;\n } // creates a shallow copy of each element of the array\n // elements are expected to be objects\n\n\n function copySeries(series) {\n var newSeries = [],\n i,\n j;\n\n for (i = 0; i < series.length; i++) {\n var copy = {};\n\n for (j in series[i]) {\n if (series[i].hasOwnProperty(j)) {\n copy[j] = series[i][j];\n }\n }\n\n newSeries.push(copy);\n }\n\n return newSeries;\n }\n\n function processSeries(chart, keyType, noDatetime) {\n var i;\n var opts = chart.options;\n var series = chart.rawData; // see if one series or multiple\n\n chart.singleSeriesFormat = !isArray(series) || _typeof(series[0]) !== \"object\" || isArray(series[0]);\n\n if (chart.singleSeriesFormat) {\n series = [{\n name: opts.label,\n data: series\n }];\n } // convert to array\n // must come before dataEmpty check\n\n\n series = copySeries(series);\n\n for (i = 0; i < series.length; i++) {\n series[i].data = toArr(series[i].data);\n }\n\n chart.xtype = keyType ? keyType : opts.discrete ? \"string\" : detectXType(series, noDatetime, opts); // right format\n\n for (i = 0; i < series.length; i++) {\n series[i].data = formatSeriesData(series[i].data, chart.xtype);\n }\n\n return series;\n }\n\n function processSimple(chart) {\n var perfectData = toArr(chart.rawData),\n i;\n\n for (i = 0; i < perfectData.length; i++) {\n perfectData[i] = [toStr(perfectData[i][0]), toFloat(perfectData[i][1])];\n }\n\n return perfectData;\n }\n\n function dataEmpty(data, chartType) {\n if (chartType === \"PieChart\" || chartType === \"GeoChart\" || chartType === \"Timeline\") {\n return data.length === 0;\n } else {\n for (var i = 0; i < data.length; i++) {\n if (data[i].data.length > 0) {\n return false;\n }\n }\n\n return true;\n }\n }\n\n function addDownloadButton(chart) {\n var element = chart.element;\n var link = document.createElement(\"a\");\n var download = chart.options.download;\n\n if (download === true) {\n download = {};\n } else if (typeof download === \"string\") {\n download = {\n filename: download\n };\n }\n\n link.download = download.filename || \"chart.png\"; // https://caniuse.com/download\n\n link.style.position = \"absolute\";\n link.style.top = \"20px\";\n link.style.right = \"20px\";\n link.style.zIndex = 1000;\n link.style.lineHeight = \"20px\";\n link.target = \"_blank\"; // for safari\n\n var image = document.createElement(\"img\");\n image.alt = \"Download\";\n image.style.border = \"none\"; // icon from font-awesome\n // http://fa2png.io/\n\n image.src = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAMAAAC6V+0/AAABCFBMVEUAAADMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMywEsqxAAAAV3RSTlMAAQIDBggJCgsMDQ4PERQaHB0eISIjJCouLzE0OTo/QUJHSUpLTU5PUllhYmltcHh5foWLjI+SlaCio6atr7S1t7m6vsHHyM7R2tze5Obo7fHz9ff5+/1hlxK2AAAA30lEQVQYGUXBhVYCQQBA0TdYWAt2d3d3YWAHyur7/z9xgD16Lw0DW+XKx+1GgX+FRzM3HWQWrHl5N/oapW5RPe0PkBu+UYeICvozTWZVK23Ao04B79oJrOsJDOoxkZoQPWgX29pHpCZEk7rEvQYiNSFq1UMqvlCjJkRBS1R8hb00Vb/TajtBL7nTHE1X1vyMQF732dQhyF2o6SAwrzP06iUQzvwsArlnzcOdrgBhJyHa1QOgO9U1GsKuvjUTjavliZYQ8nNPapG6sap/3nrIdJ6bOWzmX/fy0XVpfzZP3S8OJT3g9EEiJwAAAABJRU5ErkJggg==\";\n link.appendChild(image);\n element.style.position = \"relative\";\n chart.__downloadAttached = true; // mouseenter\n\n chart.__enterEvent = addEvent(element, \"mouseover\", function (e) {\n var related = e.relatedTarget; // check download option again to ensure it wasn't changed\n\n if ((!related || related !== this && !childOf(this, related)) && chart.options.download) {\n link.href = chart.toImage(download);\n element.appendChild(link);\n }\n }); // mouseleave\n\n chart.__leaveEvent = addEvent(element, \"mouseout\", function (e) {\n var related = e.relatedTarget;\n\n if (!related || related !== this && !childOf(this, related)) {\n if (link.parentNode) {\n link.parentNode.removeChild(link);\n }\n }\n });\n } // https://stackoverflow.com/questions/10149963/adding-event-listener-cross-browser\n\n\n function addEvent(elem, event, fn) {\n if (elem.addEventListener) {\n elem.addEventListener(event, fn, false);\n return fn;\n } else {\n var fn2 = function fn2() {\n // set the this pointer same as addEventListener when fn is called\n return fn.call(elem, window.event);\n };\n\n elem.attachEvent(\"on\" + event, fn2);\n return fn2;\n }\n }\n\n function removeEvent(elem, event, fn) {\n if (elem.removeEventListener) {\n elem.removeEventListener(event, fn, false);\n } else {\n elem.detachEvent(\"on\" + event, fn);\n }\n } // https://gist.github.com/shawnbot/4166283\n\n\n function childOf(p, c) {\n if (p === c) {\n return false;\n }\n\n while (c && c !== p) {\n c = c.parentNode;\n }\n\n return c === p;\n }\n\n var pendingRequests = [],\n runningRequests = 0,\n maxRequests = 4;\n\n function pushRequest(url, success, error) {\n pendingRequests.push([url, success, error]);\n runNext();\n }\n\n function runNext() {\n if (runningRequests < maxRequests) {\n var request = pendingRequests.shift();\n\n if (request) {\n runningRequests++;\n getJSON(request[0], request[1], request[2]);\n runNext();\n }\n }\n }\n\n function requestComplete() {\n runningRequests--;\n runNext();\n }\n\n function getJSON(url, success, error) {\n ajaxCall(url, success, function (jqXHR, textStatus, errorThrown) {\n var message = typeof errorThrown === \"string\" ? errorThrown : errorThrown.message;\n error(message);\n });\n }\n\n function ajaxCall(url, success, error) {\n var $ = window.jQuery || window.Zepto || window.$;\n\n if ($ && $.ajax) {\n $.ajax({\n dataType: \"json\",\n url: url,\n success: success,\n error: error,\n complete: requestComplete\n });\n } else {\n var xhr = new XMLHttpRequest();\n xhr.open(\"GET\", url, true);\n xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n\n xhr.onload = function () {\n requestComplete();\n\n if (xhr.status === 200) {\n success(JSON.parse(xhr.responseText), xhr.statusText, xhr);\n } else {\n error(xhr, \"error\", xhr.statusText);\n }\n };\n\n xhr.send();\n }\n }\n\n var config = {};\n var adapters = []; // helpers\n\n function setText(element, text) {\n if (document.body.innerText) {\n element.innerText = text;\n } else {\n element.textContent = text;\n }\n } // TODO remove prefix for all messages\n\n\n function chartError(element, message, noPrefix) {\n if (!noPrefix) {\n message = \"Error Loading Chart: \" + message;\n }\n\n setText(element, message);\n element.style.color = \"#ff0000\";\n }\n\n function errorCatcher(chart) {\n try {\n chart.__render();\n } catch (err) {\n chartError(chart.element, err.message);\n throw err;\n }\n }\n\n function fetchDataSource(chart, dataSource, showLoading) {\n // only show loading message for urls and callbacks\n if (showLoading && chart.options.loading && (typeof dataSource === \"string\" || typeof dataSource === \"function\")) {\n setText(chart.element, chart.options.loading);\n }\n\n if (typeof dataSource === \"string\") {\n pushRequest(dataSource, function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message);\n });\n } else if (typeof dataSource === \"function\") {\n try {\n dataSource(function (data) {\n chart.rawData = data;\n errorCatcher(chart);\n }, function (message) {\n chartError(chart.element, message, true);\n });\n } catch (err) {\n chartError(chart.element, err, true);\n }\n } else {\n chart.rawData = dataSource;\n errorCatcher(chart);\n }\n }\n\n function getAdapterType(library) {\n if (library) {\n if (library.product === \"Highcharts\") {\n return defaultExport$1;\n } else if (library.charts) {\n return defaultExport;\n } else if (isFunction(library)) {\n return defaultExport$2;\n }\n }\n\n throw new Error(\"Unknown adapter\");\n }\n\n function addAdapter(library) {\n var adapterType = getAdapterType(library);\n var adapter = new adapterType(library);\n\n if (adapters.indexOf(adapter) === -1) {\n adapters.push(adapter);\n }\n }\n\n function loadAdapters() {\n if (\"Chart\" in window) {\n addAdapter(window.Chart);\n }\n\n if (\"Highcharts\" in window) {\n addAdapter(window.Highcharts);\n }\n\n if (window.google && window.google.charts) {\n addAdapter(window.google);\n }\n }\n\n function renderChart(chartType, chart) {\n if (dataEmpty(chart.data, chartType)) {\n var message = chart.options.empty || chart.options.messages && chart.options.messages.empty || \"No data\";\n setText(chart.element, message);\n } else {\n callAdapter(chartType, chart);\n\n if (chart.options.download && !chart.__downloadAttached && chart.adapter === \"chartjs\") {\n addDownloadButton(chart);\n }\n }\n } // TODO remove chartType if cross-browser way\n // to get the name of the chart class\n\n\n function callAdapter(chartType, chart) {\n var i, adapter, fnName, adapterName;\n fnName = \"render\" + chartType;\n adapterName = chart.options.adapter;\n loadAdapters();\n\n for (i = 0; i < adapters.length; i++) {\n adapter = adapters[i];\n\n if ((!adapterName || adapterName === adapter.name) && isFunction(adapter[fnName])) {\n chart.adapter = adapter.name;\n chart.__adapterObject = adapter;\n return adapter[fnName](chart);\n }\n }\n\n if (adapters.length > 0) {\n throw new Error(\"No charting library found for \" + chartType);\n } else {\n throw new Error(\"No charting libraries found - be sure to include one before your charts\");\n }\n } // define classes\n\n\n var Chart = function Chart(element, dataSource, options) {\n var elementId;\n\n if (typeof element === \"string\") {\n elementId = element;\n element = document.getElementById(element);\n\n if (!element) {\n throw new Error(\"No element with id \" + elementId);\n }\n }\n\n this.element = element;\n this.options = merge(Chartkick.options, options || {});\n this.dataSource = dataSource;\n Chartkick.charts[element.id] = this;\n fetchDataSource(this, dataSource, true);\n\n if (this.options.refresh) {\n this.startRefresh();\n }\n };\n\n Chart.prototype.getElement = function getElement() {\n return this.element;\n };\n\n Chart.prototype.getDataSource = function getDataSource() {\n return this.dataSource;\n };\n\n Chart.prototype.getData = function getData() {\n return this.data;\n };\n\n Chart.prototype.getOptions = function getOptions() {\n return this.options;\n };\n\n Chart.prototype.getChartObject = function getChartObject() {\n return this.chart;\n };\n\n Chart.prototype.getAdapter = function getAdapter() {\n return this.adapter;\n };\n\n Chart.prototype.updateData = function updateData(dataSource, options) {\n this.dataSource = dataSource;\n\n if (options) {\n this.__updateOptions(options);\n }\n\n fetchDataSource(this, dataSource, true);\n };\n\n Chart.prototype.setOptions = function setOptions(options) {\n this.__updateOptions(options);\n\n this.redraw();\n };\n\n Chart.prototype.redraw = function redraw() {\n fetchDataSource(this, this.rawData);\n };\n\n Chart.prototype.refreshData = function refreshData() {\n if (typeof this.dataSource === \"string\") {\n // prevent browser from caching\n var sep = this.dataSource.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n var url = this.dataSource + sep + \"_=\" + new Date().getTime();\n fetchDataSource(this, url);\n } else if (typeof this.dataSource === \"function\") {\n fetchDataSource(this, this.dataSource);\n }\n };\n\n Chart.prototype.startRefresh = function startRefresh() {\n var this$1$1 = this;\n var refresh = this.options.refresh;\n\n if (refresh && typeof this.dataSource !== \"string\" && typeof this.dataSource !== \"function\") {\n throw new Error(\"Data source must be a URL or callback for refresh\");\n }\n\n if (!this.intervalId) {\n if (refresh) {\n this.intervalId = setInterval(function () {\n this$1$1.refreshData();\n }, refresh * 1000);\n } else {\n throw new Error(\"No refresh interval\");\n }\n }\n };\n\n Chart.prototype.stopRefresh = function stopRefresh() {\n if (this.intervalId) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n };\n\n Chart.prototype.toImage = function toImage(download) {\n if (this.adapter === \"chartjs\") {\n if (download && download.background && download.background !== \"transparent\") {\n // https://stackoverflow.com/questions/30464750/chartjs-line-chart-set-background-color\n var canvas = this.chart.canvas;\n var ctx = this.chart.ctx;\n var tmpCanvas = document.createElement(\"canvas\");\n var tmpCtx = tmpCanvas.getContext(\"2d\");\n tmpCanvas.width = ctx.canvas.width;\n tmpCanvas.height = ctx.canvas.height;\n tmpCtx.fillStyle = download.background;\n tmpCtx.fillRect(0, 0, tmpCanvas.width, tmpCanvas.height);\n tmpCtx.drawImage(canvas, 0, 0);\n return tmpCanvas.toDataURL(\"image/png\");\n } else {\n return this.chart.toBase64Image();\n }\n } else {\n throw new Error(\"Feature only available for Chart.js\");\n }\n };\n\n Chart.prototype.destroy = function destroy() {\n this.destroyed = true;\n this.stopRefresh();\n\n if (this.__adapterObject) {\n this.__adapterObject.destroy(this);\n }\n\n if (this.__enterEvent) {\n removeEvent(this.element, \"mouseover\", this.__enterEvent);\n }\n\n if (this.__leaveEvent) {\n removeEvent(this.element, \"mouseout\", this.__leaveEvent);\n }\n };\n\n Chart.prototype.__updateOptions = function __updateOptions(options) {\n var updateRefresh = options.refresh && options.refresh !== this.options.refresh;\n this.options = merge(Chartkick.options, options);\n\n if (updateRefresh) {\n this.stopRefresh();\n this.startRefresh();\n }\n };\n\n Chart.prototype.__render = function __render() {\n this.data = this.__processData();\n renderChart(this.__chartName(), this);\n };\n\n Chart.prototype.__config = function __config() {\n return config;\n };\n\n var LineChart = /*@__PURE__*/function (Chart) {\n function LineChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) LineChart.__proto__ = Chart;\n LineChart.prototype = Object.create(Chart && Chart.prototype);\n LineChart.prototype.constructor = LineChart;\n\n LineChart.prototype.__processData = function __processData() {\n return processSeries(this);\n };\n\n LineChart.prototype.__chartName = function __chartName() {\n return \"LineChart\";\n };\n\n return LineChart;\n }(Chart);\n\n var PieChart = /*@__PURE__*/function (Chart) {\n function PieChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) PieChart.__proto__ = Chart;\n PieChart.prototype = Object.create(Chart && Chart.prototype);\n PieChart.prototype.constructor = PieChart;\n\n PieChart.prototype.__processData = function __processData() {\n return processSimple(this);\n };\n\n PieChart.prototype.__chartName = function __chartName() {\n return \"PieChart\";\n };\n\n return PieChart;\n }(Chart);\n\n var ColumnChart = /*@__PURE__*/function (Chart) {\n function ColumnChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) ColumnChart.__proto__ = Chart;\n ColumnChart.prototype = Object.create(Chart && Chart.prototype);\n ColumnChart.prototype.constructor = ColumnChart;\n\n ColumnChart.prototype.__processData = function __processData() {\n return processSeries(this, null, true);\n };\n\n ColumnChart.prototype.__chartName = function __chartName() {\n return \"ColumnChart\";\n };\n\n return ColumnChart;\n }(Chart);\n\n var BarChart = /*@__PURE__*/function (Chart) {\n function BarChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) BarChart.__proto__ = Chart;\n BarChart.prototype = Object.create(Chart && Chart.prototype);\n BarChart.prototype.constructor = BarChart;\n\n BarChart.prototype.__processData = function __processData() {\n return processSeries(this, null, true);\n };\n\n BarChart.prototype.__chartName = function __chartName() {\n return \"BarChart\";\n };\n\n return BarChart;\n }(Chart);\n\n var AreaChart = /*@__PURE__*/function (Chart) {\n function AreaChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) AreaChart.__proto__ = Chart;\n AreaChart.prototype = Object.create(Chart && Chart.prototype);\n AreaChart.prototype.constructor = AreaChart;\n\n AreaChart.prototype.__processData = function __processData() {\n return processSeries(this);\n };\n\n AreaChart.prototype.__chartName = function __chartName() {\n return \"AreaChart\";\n };\n\n return AreaChart;\n }(Chart);\n\n var GeoChart = /*@__PURE__*/function (Chart) {\n function GeoChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) GeoChart.__proto__ = Chart;\n GeoChart.prototype = Object.create(Chart && Chart.prototype);\n GeoChart.prototype.constructor = GeoChart;\n\n GeoChart.prototype.__processData = function __processData() {\n return processSimple(this);\n };\n\n GeoChart.prototype.__chartName = function __chartName() {\n return \"GeoChart\";\n };\n\n return GeoChart;\n }(Chart);\n\n var ScatterChart = /*@__PURE__*/function (Chart) {\n function ScatterChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) ScatterChart.__proto__ = Chart;\n ScatterChart.prototype = Object.create(Chart && Chart.prototype);\n ScatterChart.prototype.constructor = ScatterChart;\n\n ScatterChart.prototype.__processData = function __processData() {\n return processSeries(this, \"number\");\n };\n\n ScatterChart.prototype.__chartName = function __chartName() {\n return \"ScatterChart\";\n };\n\n return ScatterChart;\n }(Chart);\n\n var BubbleChart = /*@__PURE__*/function (Chart) {\n function BubbleChart() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) BubbleChart.__proto__ = Chart;\n BubbleChart.prototype = Object.create(Chart && Chart.prototype);\n BubbleChart.prototype.constructor = BubbleChart;\n\n BubbleChart.prototype.__processData = function __processData() {\n return processSeries(this, \"bubble\");\n };\n\n BubbleChart.prototype.__chartName = function __chartName() {\n return \"BubbleChart\";\n };\n\n return BubbleChart;\n }(Chart);\n\n var Timeline = /*@__PURE__*/function (Chart) {\n function Timeline() {\n Chart.apply(this, arguments);\n }\n\n if (Chart) Timeline.__proto__ = Chart;\n Timeline.prototype = Object.create(Chart && Chart.prototype);\n Timeline.prototype.constructor = Timeline;\n\n Timeline.prototype.__processData = function __processData() {\n var i,\n data = this.rawData;\n\n for (i = 0; i < data.length; i++) {\n data[i][1] = toDate(data[i][1]);\n data[i][2] = toDate(data[i][2]);\n }\n\n return data;\n };\n\n Timeline.prototype.__chartName = function __chartName() {\n return \"Timeline\";\n };\n\n return Timeline;\n }(Chart);\n\n var Chartkick = {\n LineChart: LineChart,\n PieChart: PieChart,\n ColumnChart: ColumnChart,\n BarChart: BarChart,\n AreaChart: AreaChart,\n GeoChart: GeoChart,\n ScatterChart: ScatterChart,\n BubbleChart: BubbleChart,\n Timeline: Timeline,\n charts: {},\n configure: function configure(options) {\n for (var key in options) {\n if (options.hasOwnProperty(key)) {\n config[key] = options[key];\n }\n }\n },\n setDefaultOptions: function setDefaultOptions(opts) {\n Chartkick.options = opts;\n },\n eachChart: function eachChart(callback) {\n for (var chartId in Chartkick.charts) {\n if (Chartkick.charts.hasOwnProperty(chartId)) {\n callback(Chartkick.charts[chartId]);\n }\n }\n },\n destroyAll: function destroyAll() {\n for (var chartId in Chartkick.charts) {\n if (Chartkick.charts.hasOwnProperty(chartId)) {\n Chartkick.charts[chartId].destroy();\n delete Chartkick.charts[chartId];\n }\n }\n },\n config: config,\n options: {},\n adapters: adapters,\n addAdapter: addAdapter,\n use: function use(adapter) {\n addAdapter(adapter);\n return Chartkick;\n }\n }; // not ideal, but allows for simpler integration\n\n if (typeof window !== \"undefined\" && !window.Chartkick) {\n window.Chartkick = Chartkick; // clean up previous charts before Turbolinks loads new page\n\n document.addEventListener(\"turbolinks:before-render\", function () {\n if (config.autoDestroy !== false) {\n Chartkick.destroyAll();\n }\n });\n document.addEventListener(\"turbo:before-render\", function () {\n if (config.autoDestroy !== false) {\n Chartkick.destroyAll();\n }\n }); // use setTimeout so charting library can come later in same JS file\n\n setTimeout(function () {\n window.dispatchEvent(new Event(\"chartkick:load\"));\n }, 0);\n } // backwards compatibility for esm require\n\n\n Chartkick[\"default\"] = Chartkick;\n return Chartkick;\n});","function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n * Chart.js v3.9.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction noop() {}\n\nvar uid = function () {\n var id = 0;\n return function () {\n return id++;\n };\n}();\n\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n\n var type = Object.prototype.toString.call(value);\n\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n\n return false;\n}\n\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n\nvar isNumberFinite = function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n};\n\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\n\nvar toPercentage = function toPercentage(value, dimension) {\n return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : value / dimension;\n};\n\nvar toDimension = function toDimension(value, dimension) {\n return typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n};\n\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\n\nfunction each(loopable, fn, thisArg, reverse) {\n var i, len, keys;\n\n if (isArray(loopable)) {\n len = loopable.length;\n\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n\nfunction _elementsEqual(a0, a1) {\n var i, ilen, v0, v1;\n\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n\n if (isObject(source)) {\n var target = Object.create(null);\n var keys = Object.keys(source);\n var klen = keys.length;\n var k = 0;\n\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n\n return target;\n }\n\n return source;\n}\n\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\n\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n\n var tval = target[key];\n var sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\n\nfunction merge(target, source, options) {\n var sources = isArray(source) ? source : [source];\n var ilen = sources.length;\n\n if (!isObject(target)) {\n return target;\n }\n\n options = options || {};\n var merger = options.merger || _merger;\n\n for (var i = 0; i < ilen; ++i) {\n source = sources[i];\n\n if (!isObject(source)) {\n continue;\n }\n\n var keys = Object.keys(source);\n\n for (var k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n\n return target;\n}\n\nfunction mergeIf(target, source) {\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n\n var tval = target[key];\n var sval = source[key];\n\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\n\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n\nvar keyResolvers = {\n '': function _(v) {\n return v;\n },\n x: function x(o) {\n return o.x;\n },\n y: function y(o) {\n return o.y;\n }\n};\n\nfunction resolveObjectKey(obj, key) {\n var resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n\n return resolver(obj);\n}\n\nfunction _getKeyResolver(key) {\n var keys = _splitKey(key);\n\n return function (obj) {\n var _iterator = _createForOfIteratorHelper(keys),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var k = _step.value;\n\n if (k === '') {\n break;\n }\n\n obj = obj && obj[k];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return obj;\n };\n}\n\nfunction _splitKey(key) {\n var parts = key.split('.');\n var keys = [];\n var tmp = '';\n\n var _iterator2 = _createForOfIteratorHelper(parts),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var part = _step2.value;\n tmp += part;\n\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return keys;\n}\n\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nvar defined = function defined(value) {\n return typeof value !== 'undefined';\n};\n\nvar isFunction = function isFunction(value) {\n return typeof value === 'function';\n};\n\nvar setsEqual = function setsEqual(a, b) {\n if (a.size !== b.size) {\n return false;\n }\n\n var _iterator3 = _createForOfIteratorHelper(a),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var item = _step3.value;\n\n if (!b.has(item)) {\n return false;\n }\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n\n return true;\n};\n\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nvar PI = Math.PI;\nvar TAU = 2 * PI;\nvar PITAU = TAU + PI;\nvar INFINITY = Number.POSITIVE_INFINITY;\nvar RAD_PER_DEG = PI / 180;\nvar HALF_PI = PI / 2;\nvar QUARTER_PI = PI / 4;\nvar TWO_THIRDS_PI = PI * 2 / 3;\nvar log10 = Math.log10;\nvar sign = Math.sign;\n\nfunction niceNum(range) {\n var roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n var niceRange = Math.pow(10, Math.floor(log10(range)));\n var fraction = range / niceRange;\n var niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n\nfunction _factorize(value) {\n var result = [];\n var sqrt = Math.sqrt(value);\n var i;\n\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n\n result.sort(function (a, b) {\n return a - b;\n }).pop();\n return result;\n}\n\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\n\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n\nfunction almostWhole(x, epsilon) {\n var rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n\nfunction _setMinAndMaxByKey(array, target, property) {\n var i, ilen, value;\n\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\n\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\n\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n\n var e = 1;\n var p = 0;\n\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n\n return p;\n}\n\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n var distanceFromXCenter = anglePoint.x - centrePoint.x;\n var distanceFromYCenter = anglePoint.y - centrePoint.y;\n var radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n var angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n\n if (angle < -0.5 * PI) {\n angle += TAU;\n }\n\n return {\n angle: angle,\n distance: radialDistanceFromCenter\n };\n}\n\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n var a = _normalizeAngle(angle);\n\n var s = _normalizeAngle(start);\n\n var e = _normalizeAngle(end);\n\n var angleToStart = _normalizeAngle(s - a);\n\n var angleToEnd = _normalizeAngle(e - a);\n\n var startToAngle = _normalizeAngle(a - s);\n\n var endToAngle = _normalizeAngle(a - e);\n\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n\nfunction _isBetween(value, start, end) {\n var epsilon = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1e-6;\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || function (index) {\n return table[index] < value;\n };\n\n var hi = table.length - 1;\n var lo = 0;\n var mid;\n\n while (hi - lo > 1) {\n mid = lo + hi >> 1;\n\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n\n return {\n lo: lo,\n hi: hi\n };\n}\n\nvar _lookupByKey = function _lookupByKey(table, key, value, last) {\n return _lookup(table, value, last ? function (index) {\n return table[index][key] <= value;\n } : function (index) {\n return table[index][key] < value;\n });\n};\n\nvar _rlookupByKey = function _rlookupByKey(table, key, value) {\n return _lookup(table, value, function (index) {\n return table[index][key] >= value;\n });\n};\n\nfunction _filterBetween(values, min, max) {\n var start = 0;\n var end = values.length;\n\n while (start < end && values[start] < min) {\n start++;\n }\n\n while (end > start && values[end - 1] > max) {\n end--;\n }\n\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\n\nvar arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\n\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n\n return;\n }\n\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach(function (key) {\n var method = '_onData' + _capitalize(key);\n\n var base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value: function value() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var res = base.apply(this, args);\n\n array._chartjs.listeners.forEach(function (object) {\n if (typeof object[method] === 'function') {\n object[method].apply(object, args);\n }\n });\n\n return res;\n }\n });\n });\n}\n\nfunction unlistenArrayEvents(array, listener) {\n var stub = array._chartjs;\n\n if (!stub) {\n return;\n }\n\n var listeners = stub.listeners;\n var index = listeners.indexOf(listener);\n\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n\n if (listeners.length > 0) {\n return;\n }\n\n arrayEvents.forEach(function (key) {\n delete array[key];\n });\n delete array._chartjs;\n}\n\nfunction _arrayUnique(items) {\n var set = new Set();\n var i, ilen;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n\n if (set.size === ilen) {\n return items;\n }\n\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n\nvar requestAnimFrame = function () {\n if (typeof window === 'undefined') {\n return function (callback) {\n return callback();\n };\n }\n\n return window.requestAnimationFrame;\n}();\n\nfunction throttled(fn, thisArg, updateFn) {\n var updateArgs = updateFn || function (args) {\n return Array.prototype.slice.call(args);\n };\n\n var ticking = false;\n var args = [];\n return function () {\n for (var _len2 = arguments.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n rest[_key2] = arguments[_key2];\n }\n\n args = updateArgs(rest);\n\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, function () {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\n\nfunction debounce(fn, delay) {\n var timeout;\n return function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n\n return delay;\n };\n}\n\nvar _toLeftRightCenter = function _toLeftRightCenter(align) {\n return align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n};\n\nvar _alignStartEnd = function _alignStartEnd(align, start, end) {\n return align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n};\n\nvar _textX = function _textX(align, left, right, rtl) {\n var check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n var pointCount = points.length;\n var start = 0;\n var count = pointCount;\n\n if (meta._sorted) {\n var iScale = meta.iScale,\n _parsed = meta._parsed;\n var axis = iScale.axis;\n\n var _iScale$getUserBounds = iScale.getUserBounds(),\n min = _iScale$getUserBounds.min,\n max = _iScale$getUserBounds.max,\n minDefined = _iScale$getUserBounds.minDefined,\n maxDefined = _iScale$getUserBounds.maxDefined;\n\n if (minDefined) {\n start = _limitValue(Math.min(_lookupByKey(_parsed, iScale.axis, min).lo, animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(Math.max(_lookupByKey(_parsed, iScale.axis, max, true).hi + 1, animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nfunction _scaleRangesChanged(meta) {\n var xScale = meta.xScale,\n yScale = meta.yScale,\n _scaleRanges = meta._scaleRanges;\n var newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n\n var changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nvar atEdge = function atEdge(t) {\n return t === 0 || t === 1;\n};\n\nvar elasticIn = function elasticIn(t, s, p) {\n return -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\n};\n\nvar elasticOut = function elasticOut(t, s, p) {\n return Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n};\n\nvar effects = {\n linear: function linear(t) {\n return t;\n },\n easeInQuad: function easeInQuad(t) {\n return t * t;\n },\n easeOutQuad: function easeOutQuad(t) {\n return -t * (t - 2);\n },\n easeInOutQuad: function easeInOutQuad(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1);\n },\n easeInCubic: function easeInCubic(t) {\n return t * t * t;\n },\n easeOutCubic: function easeOutCubic(t) {\n return (t -= 1) * t * t + 1;\n },\n easeInOutCubic: function easeInOutCubic(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2);\n },\n easeInQuart: function easeInQuart(t) {\n return t * t * t * t;\n },\n easeOutQuart: function easeOutQuart(t) {\n return -((t -= 1) * t * t * t - 1);\n },\n easeInOutQuart: function easeInOutQuart(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2);\n },\n easeInQuint: function easeInQuint(t) {\n return t * t * t * t * t;\n },\n easeOutQuint: function easeOutQuint(t) {\n return (t -= 1) * t * t * t * t + 1;\n },\n easeInOutQuint: function easeInOutQuint(t) {\n return (t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2);\n },\n easeInSine: function easeInSine(t) {\n return -Math.cos(t * HALF_PI) + 1;\n },\n easeOutSine: function easeOutSine(t) {\n return Math.sin(t * HALF_PI);\n },\n easeInOutSine: function easeInOutSine(t) {\n return -0.5 * (Math.cos(PI * t) - 1);\n },\n easeInExpo: function easeInExpo(t) {\n return t === 0 ? 0 : Math.pow(2, 10 * (t - 1));\n },\n easeOutExpo: function easeOutExpo(t) {\n return t === 1 ? 1 : -Math.pow(2, -10 * t) + 1;\n },\n easeInOutExpo: function easeInOutExpo(t) {\n return atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2);\n },\n easeInCirc: function easeInCirc(t) {\n return t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1);\n },\n easeOutCirc: function easeOutCirc(t) {\n return Math.sqrt(1 - (t -= 1) * t);\n },\n easeInOutCirc: function easeInOutCirc(t) {\n return (t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);\n },\n easeInElastic: function easeInElastic(t) {\n return atEdge(t) ? t : elasticIn(t, 0.075, 0.3);\n },\n easeOutElastic: function easeOutElastic(t) {\n return atEdge(t) ? t : elasticOut(t, 0.075, 0.3);\n },\n easeInOutElastic: function easeInOutElastic(t) {\n var s = 0.1125;\n var p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack: function easeInBack(t) {\n var s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack: function easeOutBack(t) {\n var s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack: function easeInOutBack(t) {\n var s = 1.70158;\n\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: function easeInBounce(t) {\n return 1 - effects.easeOutBounce(1 - t);\n },\n easeOutBounce: function easeOutBounce(t) {\n var m = 7.5625;\n var d = 2.75;\n\n if (t < 1 / d) {\n return m * t * t;\n }\n\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: function easeInOutBounce(t) {\n return t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;\n }\n};\n/*!\n * @kurkle/color v0.2.1\n * https://github.com/kurkle/color#readme\n * (c) 2022 Jukka Kurkela\n * Released under the MIT License\n */\n\nfunction round(v) {\n return v + 0.5 | 0;\n}\n\nvar lim = function lim(v, l, h) {\n return Math.max(Math.min(v, h), l);\n};\n\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\n\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\n\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\n\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nvar map$1 = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n A: 10,\n B: 11,\n C: 12,\n D: 13,\n E: 14,\n F: 15,\n a: 10,\n b: 11,\n c: 12,\n d: 13,\n e: 14,\n f: 15\n};\n\nvar hex = _toConsumableArray('0123456789ABCDEF');\n\nvar h1 = function h1(b) {\n return hex[b & 0xF];\n};\n\nvar h2 = function h2(b) {\n return hex[(b & 0xF0) >> 4] + hex[b & 0xF];\n};\n\nvar eq = function eq(b) {\n return (b & 0xF0) >> 4 === (b & 0xF);\n};\n\nvar isShort = function isShort(v) {\n return eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n};\n\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? map$1[str[7]] << 4 | map$1[str[8]] : 255\n };\n }\n }\n\n return ret;\n}\n\nvar alpha = function alpha(a, f) {\n return a < 255 ? f(a) : '';\n};\n\nfunction _hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f) : undefined;\n}\n\nvar HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\nfunction hsl2rgbn(h, s, l) {\n var a = s * Math.min(l, 1 - l);\n\n var f = function f(n) {\n var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 30) % 12;\n return l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n };\n\n return [f(0), f(8), f(4)];\n}\n\nfunction hsv2rgbn(h, s, v) {\n var f = function f(n) {\n var k = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : (n + h / 60) % 6;\n return v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n };\n\n return [f(5), f(3), f(1)];\n}\n\nfunction hwb2rgbn(h, w, b) {\n var rgb = hsl2rgbn(h, 1, 0.5);\n var i;\n\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n\n return rgb;\n}\n\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return (g - b) / d + (g < b ? 6 : 0);\n }\n\n if (g === max) {\n return (b - r) / d + 2;\n }\n\n return (r - g) / d + 4;\n}\n\nfunction rgb2hsl(v) {\n var range = 255;\n var r = v.r / range;\n var g = v.g / range;\n var b = v.b / range;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var l = (max + min) / 2;\n var h, s, d;\n\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n\n return [h | 0, s || 0, l];\n}\n\nfunction calln(f, a, b, c) {\n return (Array.isArray(a) ? f(a[0], a[1], a[2]) : f(a, b, c)).map(n2b);\n}\n\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\n\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\n\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\n\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\n\nfunction hueParse(str) {\n var m = HUE_RE.exec(str);\n var a = 255;\n var v;\n\n if (!m) {\n return;\n }\n\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n\n var h = hue(+m[2]);\n var p1 = +m[3] / 100;\n var p2 = +m[4] / 100;\n\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\n\nfunction _rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\n\nfunction _hslString(v) {\n if (!v) {\n return;\n }\n\n var a = rgb2hsl(v);\n var h = a[0];\n var s = n2p(a[1]);\n var l = n2p(a[2]);\n return v.a < 255 ? \"hsla(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%, \").concat(b2n(v.a), \")\") : \"hsl(\".concat(h, \", \").concat(s, \"%, \").concat(l, \"%)\");\n}\n\nvar map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nvar names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\n\nfunction unpack() {\n var unpacked = {};\n var keys = Object.keys(names$1);\n var tkeys = Object.keys(map);\n var i, j, k, ok, nk;\n\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n\n return unpacked;\n}\n\nvar names;\n\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n\n var a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nvar RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\n\nfunction rgbParse(str) {\n var m = RGB_RE.exec(str);\n var a = 255;\n var r, g, b;\n\n if (!m) {\n return;\n }\n\n if (m[7] !== r) {\n var v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\n\nfunction _rgbString(v) {\n return v && (v.a < 255 ? \"rgba(\".concat(v.r, \", \").concat(v.g, \", \").concat(v.b, \", \").concat(b2n(v.a), \")\") : \"rgb(\".concat(v.r, \", \").concat(v.g, \", \").concat(v.b, \")\"));\n}\n\nvar to = function to(v) {\n return v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\n};\n\nvar from = function from(v) {\n return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n};\n\nfunction _interpolate(rgb1, rgb2, t) {\n var r = from(b2n(rgb1.r));\n var g = from(b2n(rgb1.g));\n var b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n var tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\n\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\n\nfunction fromObject(input) {\n var v = {\n r: 0,\n g: 0,\n b: 0,\n a: 255\n };\n\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {\n r: input[0],\n g: input[1],\n b: input[2],\n a: 255\n };\n\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {\n r: 0,\n g: 0,\n b: 0,\n a: 1\n });\n v.a = n2b(v.a);\n }\n\n return v;\n}\n\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n\n return hueParse(str);\n}\n\nvar Color = /*#__PURE__*/function () {\n function Color(input) {\n _classCallCheck(this, Color);\n\n if (input instanceof Color) {\n return input;\n }\n\n var type = _typeof(input);\n\n var v;\n\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n\n this._rgb = v;\n this._valid = !!v;\n }\n\n _createClass(Color, [{\n key: \"rgbString\",\n value: function rgbString() {\n return this._valid ? _rgbString(this._rgb) : undefined;\n }\n }, {\n key: \"hexString\",\n value: function hexString() {\n return this._valid ? _hexString(this._rgb) : undefined;\n }\n }, {\n key: \"hslString\",\n value: function hslString() {\n return this._valid ? _hslString(this._rgb) : undefined;\n }\n }, {\n key: \"mix\",\n value: function mix(color, weight) {\n if (color) {\n var c1 = this.rgb;\n var c2 = color.rgb;\n var w2;\n var p = weight === w2 ? 0.5 : weight;\n var w = 2 * p - 1;\n var a = c1.a - c2.a;\n var w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n\n return this;\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(color, t) {\n if (color) {\n this._rgb = _interpolate(this._rgb, color._rgb, t);\n }\n\n return this;\n }\n }, {\n key: \"clone\",\n value: function clone() {\n return new Color(this.rgb);\n }\n }, {\n key: \"alpha\",\n value: function alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n }, {\n key: \"clearer\",\n value: function clearer(ratio) {\n var rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n }, {\n key: \"greyscale\",\n value: function greyscale() {\n var rgb = this._rgb;\n var val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n }, {\n key: \"opaquer\",\n value: function opaquer(ratio) {\n var rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n }, {\n key: \"negate\",\n value: function negate() {\n var v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n }, {\n key: \"lighten\",\n value: function lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n }, {\n key: \"darken\",\n value: function darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n }, {\n key: \"saturate\",\n value: function saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n }, {\n key: \"desaturate\",\n value: function desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n }, {\n key: \"rotate\",\n value: function rotate(deg) {\n _rotate(this._rgb, deg);\n\n return this;\n }\n }, {\n key: \"valid\",\n get: function get() {\n return this._valid;\n }\n }, {\n key: \"rgb\",\n get: function get() {\n var v = clone(this._rgb);\n\n if (v) {\n v.a = b2n(v.a);\n }\n\n return v;\n },\n set: function set(obj) {\n this._rgb = fromObject(obj);\n }\n }]);\n\n return Color;\n}();\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n if (value && _typeof(value) === 'object') {\n var type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n\n return false;\n}\n\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\n\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nvar overrides = Object.create(null);\nvar descriptors = Object.create(null);\n\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n\n var keys = key.split('.');\n\n for (var i = 0, n = keys.length; i < n; ++i) {\n var k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n\n return node;\n}\n\nfunction _set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n\n return merge(getScope$1(root, ''), scope);\n}\n\nvar Defaults = /*#__PURE__*/function () {\n function Defaults(_descriptors) {\n _classCallCheck(this, Defaults);\n\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n\n this.devicePixelRatio = function (context) {\n return context.chart.platform.getDevicePixelRatio();\n };\n\n this.elements = {};\n this.events = ['mousemove', 'mouseout', 'click', 'touchstart', 'touchmove'];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n\n this.hoverBackgroundColor = function (ctx, options) {\n return getHoverColor(options.backgroundColor);\n };\n\n this.hoverBorderColor = function (ctx, options) {\n return getHoverColor(options.borderColor);\n };\n\n this.hoverColor = function (ctx, options) {\n return getHoverColor(options.color);\n };\n\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n }\n\n _createClass(Defaults, [{\n key: \"set\",\n value: function set(scope, values) {\n return _set(this, scope, values);\n }\n }, {\n key: \"get\",\n value: function get(scope) {\n return getScope$1(this, scope);\n }\n }, {\n key: \"describe\",\n value: function describe(scope, values) {\n return _set(descriptors, scope, values);\n }\n }, {\n key: \"override\",\n value: function override(scope, values) {\n return _set(overrides, scope, values);\n }\n }, {\n key: \"route\",\n value: function route(scope, name, targetScope, targetName) {\n var _Object$definePropert;\n\n var scopeObject = getScope$1(this, scope);\n var targetScopeObject = getScope$1(this, targetScope);\n var privateName = '_' + name;\n Object.defineProperties(scopeObject, (_Object$definePropert = {}, _defineProperty(_Object$definePropert, privateName, {\n value: scopeObject[name],\n writable: true\n }), _defineProperty(_Object$definePropert, name, {\n enumerable: true,\n get: function get() {\n var local = this[privateName];\n var target = targetScopeObject[targetName];\n\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n\n return valueOrDefault(local, target);\n },\n set: function set(value) {\n this[privateName] = value;\n }\n }), _Object$definePropert));\n }\n }]);\n\n return Defaults;\n}();\n\nvar defaults = new Defaults({\n _scriptable: function _scriptable(name) {\n return !name.startsWith('on');\n },\n _indexable: function _indexable(name) {\n return name !== 'events';\n },\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n});\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n\nfunction _measureText(ctx, data, gc, longest, string) {\n var textWidth = data[string];\n\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n\n if (textWidth > longest) {\n longest = textWidth;\n }\n\n return longest;\n}\n\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n var data = cache.data = cache.data || {};\n var gc = cache.garbageCollect = cache.garbageCollect || [];\n\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n\n ctx.save();\n ctx.font = font;\n var longest = 0;\n var ilen = arrayOfThings.length;\n var i, j, jlen, thing, nestedThing;\n\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\n\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for (j = 0, jlen = thing.length; j < jlen; j++) {\n nestedThing = thing[j];\n\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n\n ctx.restore();\n var gcLen = gc.length / 2;\n\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n\n return longest;\n}\n\nfunction _alignPixel(chart, pixel, width) {\n var devicePixelRatio = chart.currentDevicePixelRatio;\n var halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n\nfunction clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\n\nfunction drawPoint(ctx, options, x, y) {\n drawPointLegend(ctx, options, x, y, null);\n}\n\nfunction drawPointLegend(ctx, options, x, y, w) {\n var type, xOffset, yOffset, size, cornerRadius, width;\n var style = options.pointStyle;\n var rotation = options.rotation;\n var radius = options.radius;\n var rad = (rotation || 0) * RAD_PER_DEG;\n\n if (style && _typeof(style) === 'object') {\n type = style.toString();\n\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n\n ctx.beginPath();\n\n switch (style) {\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n\n ctx.closePath();\n break;\n\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n\n rad += QUARTER_PI;\n\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n\n case 'crossRot':\n rad += QUARTER_PI;\n\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n\nfunction _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\n\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\n\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n\n if (mode === 'middle') {\n var midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n\n ctx.lineTo(target.x, target.y);\n}\n\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\n\nfunction renderText(ctx, text, x, y, font) {\n var opts = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};\n var lines = isArray(text) ? text : [text];\n var stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n var i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n\n ctx.restore();\n}\n\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\n\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n var metrics = ctx.measureText(line);\n var left = x - metrics.actualBoundingBoxLeft;\n var right = x + metrics.actualBoundingBoxRight;\n var top = y - metrics.actualBoundingBoxAscent;\n var bottom = y + metrics.actualBoundingBoxDescent;\n var yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\n\nfunction addRoundedRectPath(ctx, rect) {\n var x = rect.x,\n y = rect.y,\n w = rect.w,\n h = rect.h,\n radius = rect.radius;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nvar LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nvar FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\n\nfunction toLineHeight(value, size) {\n var matches = ('' + value).match(LINE_HEIGHT);\n\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n\n value = +matches[2];\n\n switch (matches[3]) {\n case 'px':\n return value;\n\n case '%':\n value /= 100;\n break;\n }\n\n return size * value;\n}\n\nvar numberOrZero = function numberOrZero(v) {\n return +v || 0;\n};\n\nfunction _readValueToProps(value, props) {\n var ret = {};\n var objProps = isObject(props);\n var keys = objProps ? Object.keys(props) : props;\n var read = isObject(value) ? objProps ? function (prop) {\n return valueOrDefault(value[prop], value[props[prop]]);\n } : function (prop) {\n return value[prop];\n } : function () {\n return value;\n };\n\n var _iterator4 = _createForOfIteratorHelper(keys),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var prop = _step4.value;\n ret[prop] = numberOrZero(read(prop));\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n return ret;\n}\n\nfunction toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\n\nfunction toPadding(value) {\n var obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n var size = valueOrDefault(options.size, fallback.size);\n\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n\n var style = valueOrDefault(options.style, fallback.style);\n\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n\n var font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size: size,\n style: style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n\nfunction resolve(inputs, context, index, info) {\n var cacheable = true;\n var i, ilen, value;\n\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n\n if (value === undefined) {\n continue;\n }\n\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n\n return value;\n }\n }\n}\n\nfunction _addGrace(minmax, grace, beginAtZero) {\n var min = minmax.min,\n max = minmax.max;\n var change = toDimension(grace, (max - min) / 2);\n\n var keepZero = function keepZero(value, add) {\n return beginAtZero && value === 0 ? 0 : value + add;\n };\n\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\n\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes) {\n var _cache;\n\n var prefixes = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [''];\n var rootScopes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : scopes;\n var fallback = arguments.length > 3 ? arguments[3] : undefined;\n var getTarget = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : function () {\n return scopes[0];\n };\n\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n\n var cache = (_cache = {}, _defineProperty(_cache, Symbol.toStringTag, 'Object'), _defineProperty(_cache, \"_cacheable\", true), _defineProperty(_cache, \"_scopes\", scopes), _defineProperty(_cache, \"_rootScopes\", rootScopes), _defineProperty(_cache, \"_fallback\", fallback), _defineProperty(_cache, \"_getTarget\", getTarget), _defineProperty(_cache, \"override\", function override(scope) {\n return _createResolver([scope].concat(_toConsumableArray(scopes)), prefixes, rootScopes, fallback);\n }), _cache);\n return new Proxy(cache, {\n deleteProperty: function deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get: function get(target, prop) {\n return _cached(target, prop, function () {\n return _resolveWithPrefixes(prop, prefixes, scopes, target);\n });\n },\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf: function getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has: function has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys: function ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set: function set(target, prop, value) {\n var storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\n\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n var cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: function setContext(ctx) {\n return _attachContext(proxy, ctx, subProxy, descriptorDefaults);\n },\n override: function override(scope) {\n return _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults);\n }\n };\n return new Proxy(cache, {\n deleteProperty: function deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get: function get(target, prop, receiver) {\n return _cached(target, prop, function () {\n return _resolveWithContext(target, prop, receiver);\n });\n },\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf: function getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has: function has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys: function ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set: function set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\n\nfunction _descriptors(proxy) {\n var defaults = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n scriptable: true,\n indexable: true\n };\n\n var _proxy$_scriptable = proxy._scriptable,\n _scriptable = _proxy$_scriptable === void 0 ? defaults.scriptable : _proxy$_scriptable,\n _proxy$_indexable = proxy._indexable,\n _indexable = _proxy$_indexable === void 0 ? defaults.indexable : _proxy$_indexable,\n _proxy$_allKeys = proxy._allKeys,\n _allKeys = _proxy$_allKeys === void 0 ? defaults.allKeys : _proxy$_allKeys;\n\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : function () {\n return _scriptable;\n },\n isIndexable: isFunction(_indexable) ? _indexable : function () {\n return _indexable;\n }\n };\n}\n\nvar readKey = function readKey(prefix, name) {\n return prefix ? prefix + _capitalize(name) : name;\n};\n\nvar needsSubResolver = function needsSubResolver(prop, value) {\n return isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\n};\n\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n\n var value = resolve();\n target[prop] = value;\n return value;\n}\n\nfunction _resolveWithContext(target, prop, receiver) {\n var _proxy = target._proxy,\n _context = target._context,\n _subProxy = target._subProxy,\n descriptors = target._descriptors;\n var value = _proxy[prop];\n\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n\n return value;\n}\n\nfunction _resolveScriptable(prop, value, target, receiver) {\n var _proxy = target._proxy,\n _context = target._context,\n _subProxy = target._subProxy,\n _stack = target._stack;\n\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n\n _stack.add(prop);\n\n value = value(_context, _subProxy || receiver);\n\n _stack[\"delete\"](prop);\n\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n\n return value;\n}\n\nfunction _resolveArray(prop, value, target, isIndexable) {\n var _proxy = target._proxy,\n _context = target._context,\n _subProxy = target._subProxy,\n descriptors = target._descriptors;\n\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n var arr = value;\n\n var scopes = _proxy._scopes.filter(function (s) {\n return s !== arr;\n });\n\n value = [];\n\n var _iterator5 = _createForOfIteratorHelper(arr),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var item = _step5.value;\n var resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n }\n\n return value;\n}\n\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\n\nvar getScope = function getScope(key, parent) {\n return key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\n};\n\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n var _iterator6 = _createForOfIteratorHelper(parentScopes),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var parent = _step6.value;\n var scope = getScope(key, parent);\n\n if (scope) {\n set.add(scope);\n var fallback = resolveFallback(scope._fallback, key, value);\n\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n return false;\n}\n\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n var rootScopes = resolver._rootScopes;\n var fallback = resolveFallback(resolver._fallback, prop, value);\n var allScopes = [].concat(_toConsumableArray(parentScopes), _toConsumableArray(rootScopes));\n var set = new Set();\n set.add(value);\n var key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n\n if (key === null) {\n return false;\n }\n\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n\n if (key === null) {\n return false;\n }\n }\n\n return _createResolver(Array.from(set), [''], rootScopes, fallback, function () {\n return subGetTarget(resolver, prop, value);\n });\n}\n\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n\n return key;\n}\n\nfunction subGetTarget(resolver, prop, value) {\n var parent = resolver._getTarget();\n\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n\n var target = parent[prop];\n\n if (isArray(target) && isObject(value)) {\n return value;\n }\n\n return target;\n}\n\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n var value;\n\n var _iterator7 = _createForOfIteratorHelper(prefixes),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var prefix = _step7.value;\n value = _resolve(readKey(prefix, prop), scopes);\n\n if (defined(value)) {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n}\n\nfunction _resolve(key, scopes) {\n var _iterator8 = _createForOfIteratorHelper(scopes),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var scope = _step8.value;\n\n if (!scope) {\n continue;\n }\n\n var value = scope[key];\n\n if (defined(value)) {\n return value;\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n}\n\nfunction getKeysFromAllScopes(target) {\n var keys = target._keys;\n\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n\n return keys;\n}\n\nfunction resolveKeysFromAllScopes(scopes) {\n var set = new Set();\n\n var _iterator9 = _createForOfIteratorHelper(scopes),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var scope = _step9.value;\n\n var _iterator10 = _createForOfIteratorHelper(Object.keys(scope).filter(function (k) {\n return !k.startsWith('_');\n })),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var key = _step10.value;\n set.add(key);\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n return Array.from(set);\n}\n\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n var iScale = meta.iScale;\n var _this$_parsing$key = this._parsing.key,\n key = _this$_parsing$key === void 0 ? 'r' : _this$_parsing$key;\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 r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n\n return parsed;\n}\n\nvar EPSILON = Number.EPSILON || 1e-14;\n\nvar getPoint = function getPoint(points, i) {\n return i < points.length && !points[i].skip && points[i];\n};\n\nvar getValueAxis = function getValueAxis(indexAxis) {\n return indexAxis === 'x' ? 'y' : 'x';\n};\n\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n var previous = firstPoint.skip ? middlePoint : firstPoint;\n var current = middlePoint;\n var next = afterPoint.skip ? middlePoint : afterPoint;\n var d01 = distanceBetweenPoints(current, previous);\n var d12 = distanceBetweenPoints(next, current);\n var s01 = d01 / (d01 + d12);\n var s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n var fa = t * s01;\n var fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n\nfunction monotoneAdjust(points, deltaK, mK) {\n var pointsLen = points.length;\n var alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n var pointAfter = getPoint(points, 0);\n\n for (var i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n\n if (squaredMagnitude <= 9) {\n continue;\n }\n\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\n\nfunction monotoneCompute(points, mK) {\n var indexAxis = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'x';\n var valueAxis = getValueAxis(indexAxis);\n var pointsLen = points.length;\n var delta, pointBefore, pointCurrent;\n var pointAfter = getPoint(points, 0);\n\n for (var i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n\n if (!pointCurrent) {\n continue;\n }\n\n var iPixel = pointCurrent[indexAxis];\n var vPixel = pointCurrent[valueAxis];\n\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[\"cp1\".concat(indexAxis)] = iPixel - delta;\n pointCurrent[\"cp1\".concat(valueAxis)] = vPixel - delta * mK[i];\n }\n\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[\"cp2\".concat(indexAxis)] = iPixel + delta;\n pointCurrent[\"cp2\".concat(valueAxis)] = vPixel + delta * mK[i];\n }\n }\n}\n\nfunction splineCurveMonotone(points) {\n var indexAxis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';\n var valueAxis = getValueAxis(indexAxis);\n var pointsLen = points.length;\n var deltaK = Array(pointsLen).fill(0);\n var mK = Array(pointsLen);\n var i, pointBefore, pointCurrent;\n var pointAfter = getPoint(points, 0);\n\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n\n if (!pointCurrent) {\n continue;\n }\n\n if (pointAfter) {\n var slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\n\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\n\nfunction capBezierPoints(points, area) {\n var i, ilen, point, inArea, inAreaPrev;\n\n var inAreaNext = _isPointInArea(points[0], area);\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n\n if (!inArea) {\n continue;\n }\n\n point = points[i];\n\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n var i, ilen, point, controlPoints;\n\n if (options.spanGaps) {\n points = points.filter(function (pt) {\n return !pt.skip;\n });\n }\n\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n var prev = loop ? points[points.length - 1] : points[0];\n\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nfunction _getParentNode(domNode) {\n var parent = domNode.parentNode;\n\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n\n return parent;\n}\n\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n var valueInPixels;\n\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n\n return valueInPixels;\n}\n\nvar getComputedStyle = function getComputedStyle(element) {\n return window.getComputedStyle(element, null);\n};\n\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\n\nvar positions = ['top', 'right', 'bottom', 'left'];\n\nfunction getPositionedStyle(styles, style, suffix) {\n var result = {};\n suffix = suffix ? '-' + suffix : '';\n\n for (var i = 0; i < 4; i++) {\n var pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\n\nvar useOffsetPos = function useOffsetPos(x, y, target) {\n return (x > 0 || y > 0) && (!target || !target.shadowRoot);\n};\n\nfunction getCanvasPosition(e, canvas) {\n var touches = e.touches;\n var source = touches && touches.length ? touches[0] : e;\n var offsetX = source.offsetX,\n offsetY = source.offsetY;\n var box = false;\n var x, y;\n\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n var rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n\n return {\n x: x,\n y: y,\n box: box\n };\n}\n\nfunction getRelativePosition(evt, chart) {\n if ('native' in evt) {\n return evt;\n }\n\n var canvas = chart.canvas,\n currentDevicePixelRatio = chart.currentDevicePixelRatio;\n var style = getComputedStyle(canvas);\n var borderBox = style.boxSizing === 'border-box';\n var paddings = getPositionedStyle(style, 'padding');\n var borders = getPositionedStyle(style, 'border', 'width');\n\n var _getCanvasPosition = getCanvasPosition(evt, canvas),\n x = _getCanvasPosition.x,\n y = _getCanvasPosition.y,\n box = _getCanvasPosition.box;\n\n var xOffset = paddings.left + (box && borders.left);\n var yOffset = paddings.top + (box && borders.top);\n var width = chart.width,\n height = chart.height;\n\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\n\nfunction getContainerSize(canvas, width, height) {\n var maxWidth, maxHeight;\n\n if (width === undefined || height === undefined) {\n var container = _getParentNode(canvas);\n\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n var rect = container.getBoundingClientRect();\n var containerStyle = getComputedStyle(container);\n var containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n var containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n\n return {\n width: width,\n height: height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\n\nvar round1 = function round1(v) {\n return Math.round(v * 10) / 10;\n};\n\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n var style = getComputedStyle(canvas);\n var margins = getPositionedStyle(style, 'margin');\n var maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n var maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n var containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n var width = containerSize.width,\n height = containerSize.height;\n\n if (style.boxSizing === 'content-box') {\n var borders = getPositionedStyle(style, 'border', 'width');\n var paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n\n if (width && !height) {\n height = round1(width / 2);\n }\n\n return {\n width: width,\n height: height\n };\n}\n\nfunction retinaScale(chart, forceRatio, forceStyle) {\n var pixelRatio = forceRatio || 1;\n var deviceHeight = Math.floor(chart.height * pixelRatio);\n var deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n var canvas = chart.canvas;\n\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = \"\".concat(chart.height, \"px\");\n canvas.style.width = \"\".concat(chart.width, \"px\");\n }\n\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n\n return false;\n}\n\nvar supportsEventListenerOptions = function () {\n var passiveSupported = false;\n\n try {\n var options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {}\n\n return passiveSupported;\n}();\n\nfunction readUsedSize(element, property) {\n var value = getStyle(element, property);\n var matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\nfunction _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n\nfunction _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n\nfunction _bezierInterpolation(p1, p2, t, mode) {\n var cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n var cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n\n var a = _pointInLine(p1, cp1, t);\n\n var b = _pointInLine(cp1, cp2, t);\n\n var c = _pointInLine(cp2, p2, t);\n\n var d = _pointInLine(a, b, t);\n\n var e = _pointInLine(b, c, t);\n\n return _pointInLine(d, e, t);\n}\n\nvar intlCache = new Map();\n\nfunction getNumberFormat(locale, options) {\n options = options || {};\n var cacheKey = locale + JSON.stringify(options);\n var formatter = intlCache.get(cacheKey);\n\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n\n return formatter;\n}\n\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nvar getRightToLeftAdapter = function getRightToLeftAdapter(rectX, width) {\n return {\n x: function x(_x) {\n return rectX + rectX + width - _x;\n },\n setWidth: function setWidth(w) {\n width = w;\n },\n textAlign: function textAlign(align) {\n if (align === 'center') {\n return align;\n }\n\n return align === 'right' ? 'left' : 'right';\n },\n xPlus: function xPlus(x, value) {\n return x - value;\n },\n leftForLtr: function leftForLtr(x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\n\nvar getLeftToRightAdapter = function getLeftToRightAdapter() {\n return {\n x: function x(_x2) {\n return _x2;\n },\n setWidth: function setWidth(w) {},\n textAlign: function textAlign(align) {\n return align;\n },\n xPlus: function xPlus(x, value) {\n return x + value;\n },\n leftForLtr: function leftForLtr(x, _itemWidth) {\n return x;\n }\n };\n};\n\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\n\nfunction overrideTextDirection(ctx, direction) {\n var style, original;\n\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [style.getPropertyValue('direction'), style.getPropertyPriority('direction')];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\n\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n\n return {\n between: _isBetween,\n compare: function compare(a, b) {\n return a - b;\n },\n normalize: function normalize(x) {\n return x;\n }\n };\n}\n\nfunction normalizeSegment(_ref) {\n var start = _ref.start,\n end = _ref.end,\n count = _ref.count,\n loop = _ref.loop,\n style = _ref.style;\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style: style\n };\n}\n\nfunction getSegment(segment, points, bounds) {\n var property = bounds.property,\n startBound = bounds.start,\n endBound = bounds.end;\n\n var _propertyFn = propertyFn(property),\n between = _propertyFn.between,\n normalize = _propertyFn.normalize;\n\n var count = points.length;\n var start = segment.start,\n end = segment.end,\n loop = segment.loop;\n var i, ilen;\n\n if (loop) {\n start += count;\n end += count;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n\n start--;\n end--;\n }\n\n start %= count;\n end %= count;\n }\n\n if (end < start) {\n end += count;\n }\n\n return {\n start: start,\n end: end,\n loop: loop,\n style: segment.style\n };\n}\n\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n\n var property = bounds.property,\n startBound = bounds.start,\n endBound = bounds.end;\n var count = points.length;\n\n var _propertyFn2 = propertyFn(property),\n compare = _propertyFn2.compare,\n between = _propertyFn2.between,\n normalize = _propertyFn2.normalize;\n\n var _getSegment = getSegment(segment, points, bounds),\n start = _getSegment.start,\n end = _getSegment.end,\n loop = _getSegment.loop,\n style = _getSegment.style;\n\n var result = [];\n var inside = false;\n var subStart = null;\n var value, point, prevValue;\n\n var startIsBefore = function startIsBefore() {\n return between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n };\n\n var endIsBefore = function endIsBefore() {\n return compare(endBound, value) === 0 || between(endBound, prevValue, value);\n };\n\n var shouldStart = function shouldStart() {\n return inside || startIsBefore();\n };\n\n var shouldStop = function shouldStop() {\n return !inside || endIsBefore();\n };\n\n for (var i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n\n if (point.skip) {\n continue;\n }\n\n value = normalize(point[property]);\n\n if (value === prevValue) {\n continue;\n }\n\n inside = between(value, startBound, endBound);\n\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop: loop,\n count: count,\n style: style\n }));\n subStart = null;\n }\n\n prev = i;\n prevValue = value;\n }\n\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end: end,\n loop: loop,\n count: count,\n style: style\n }));\n }\n\n return result;\n}\n\nfunction _boundSegments(line, bounds) {\n var result = [];\n var segments = line.segments;\n\n for (var i = 0; i < segments.length; i++) {\n var sub = _boundSegment(segments[i], line.points, bounds);\n\n if (sub.length) {\n result.push.apply(result, _toConsumableArray(sub));\n }\n }\n\n return result;\n}\n\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n var start = 0;\n var end = count - 1;\n\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n\n while (start < count && points[start].skip) {\n start++;\n }\n\n start %= count;\n\n if (loop) {\n end += start;\n }\n\n while (end > start && points[end % count].skip) {\n end--;\n }\n\n end %= count;\n return {\n start: start,\n end: end\n };\n}\n\nfunction solidSegments(points, start, max, loop) {\n var count = points.length;\n var result = [];\n var last = start;\n var prev = points[start];\n var end;\n\n for (end = start + 1; end <= max; ++end) {\n var cur = points[end % count];\n\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop: loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n\n if (prev.skip) {\n start = end;\n }\n }\n\n prev = cur;\n }\n\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop: loop\n });\n }\n\n return result;\n}\n\nfunction _computeSegments(line, segmentOptions) {\n var points = line.points;\n var spanGaps = line.options.spanGaps;\n var count = points.length;\n\n if (!count) {\n return [];\n }\n\n var loop = !!line._loop;\n\n var _findStartAndEnd = findStartAndEnd(points, count, loop, spanGaps),\n start = _findStartAndEnd.start,\n end = _findStartAndEnd.end;\n\n if (spanGaps === true) {\n return splitByStyles(line, [{\n start: start,\n end: end,\n loop: loop\n }], points, segmentOptions);\n }\n\n var max = end < start ? end + count : end;\n var completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n var chartContext = line._chart.getContext();\n\n var baseStyle = readStyle(line.options);\n var datasetIndex = line._datasetIndex,\n spanGaps = line.options.spanGaps;\n var count = points.length;\n var result = [];\n var prevStyle = baseStyle;\n var start = segments[0].start;\n var i = start;\n\n function addStyle(s, e, l, st) {\n var dir = spanGaps ? -1 : 1;\n\n if (s === e) {\n return;\n }\n\n s += count;\n\n while (points[s % count].skip) {\n s -= dir;\n }\n\n while (points[e % count].skip) {\n e += dir;\n }\n\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n\n var _iterator11 = _createForOfIteratorHelper(segments),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var segment = _step11.value;\n start = spanGaps ? start : segment.start;\n var prev = points[start % count];\n var style = void 0;\n\n for (i = start + 1; i <= segment.end; i++) {\n var pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex: datasetIndex\n })));\n\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n\n prev = pt;\n prevStyle = style;\n }\n\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n return result;\n}\n\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\n\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { _isPointInArea as $, _factorize as A, finiteOrDefault as B, callback as C, _addGrace as D, _limitValue as E, toDegrees as F, _measureText as G, HALF_PI as H, _int16Range as I, _alignPixel as J, toPadding as K, clipArea as L, renderText as M, unclipArea as N, toFont as O, PI as P, each as Q, _toLeftRightCenter as R, _alignStartEnd as S, TAU as T, overrides as U, merge as V, _capitalize as W, getRelativePosition as X, _rlookupByKey as Y, _lookupByKey as Z, _arrayUnique as _, resolve as a, toLineHeight as a$, getAngleFromPoint as a0, getMaximumSize as a1, _getParentNode as a2, readUsedSize as a3, throttled as a4, supportsEventListenerOptions as a5, _isDomSupported as a6, descriptors as a7, isFunction as a8, _attachContext as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, noop as aF, distanceBetweenPoints as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, _longestText as aM, _filterBetween as aN, _lookup as aO, isPatternOrGradient as aP, getHoverColor as aQ, clone$1 as aR, _merger as aS, _mergerIf as aT, _deprecated as aU, _splitKey as aV, toFontString as aW, splineCurve as aX, splineCurveMonotone as aY, getStyle as aZ, fontString as a_, _createResolver as aa, _descriptors as ab, mergeIf as ac, uid as ad, debounce as ae, retinaScale as af, clearCanvas as ag, setsEqual as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _readValueToProps as al, _updateBezierControlPoints as am, _computeSegments as an, _boundSegments as ao, _steppedInterpolation as ap, _bezierInterpolation as aq, _pointInLine as ar, _steppedLineTo as as, _bezierCurveTo as at, drawPoint as au, addRoundedRectPath as av, toTRBL as aw, toTRBLCorners as ax, _boundSegment as ay, _normalizeAngle as az, isArray as b, PITAU as b0, INFINITY as b1, RAD_PER_DEG as b2, QUARTER_PI as b3, TWO_THIRDS_PI as b4, _angleDiff as b5, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, log10 as z };","function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _get(target, property, receiver) { if (typeof Reflect !== \"undefined\" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); }\n\nfunction _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\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 _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === \"undefined\" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it[\"return\"] != null) it[\"return\"](); } finally { if (didErr) throw err; } } }; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\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 _iterableToArray(iter) { if (typeof Symbol !== \"undefined\" && Symbol.iterator in Object(iter)) return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }\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\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\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 var _iterator = _createForOfIteratorHelper(animationOptions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var option = _step.value;\n resolved[option] = cfg[option];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n }, {\n key: \"_animateOptions\",\n value: function _animateOptions(target, values) {\n var newOptions = values.options;\n var options = resolveTargetOptions(target, newOptions);\n\n if (!options) {\n return [];\n }\n\n var animations = this._createAnimations(options, newOptions);\n\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(function () {\n target.options = newOptions;\n }, function () {});\n }\n\n return animations;\n }\n }, {\n key: \"_createAnimations\",\n value: function _createAnimations(target, values) {\n var animatedProps = this._properties;\n var animations = [];\n var running = target.$animations || (target.$animations = {});\n var props = Object.keys(values);\n var date = Date.now();\n var i;\n\n for (i = props.length - 1; i >= 0; --i) {\n var prop = props[i];\n\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));\n continue;\n }\n\n var value = values[prop];\n var animation = running[prop];\n var cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n\n return animations;\n }\n }, {\n key: \"update\",\n value: function update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n\n var animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n }]);\n\n return Animations;\n}();\n\nfunction awaitAll(animations, properties) {\n var running = [];\n var keys = Object.keys(properties);\n\n for (var i = 0; i < keys.length; i++) {\n var anim = animations[keys[i]];\n\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n\n var options = target.options;\n\n if (!options) {\n target.options = newOptions;\n return;\n }\n\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n var opts = scale && scale.options || {};\n var reverse = opts.reverse;\n var min = opts.min === undefined ? allowedOverflow : 0;\n var max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n\n var x = scaleClip(xScale, allowedOverflow);\n var y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n var t, r, b, l;\n\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n 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 _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas(type).reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var meta = _step2.value;\n var value = stack[meta.index];\n\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n var chart = controller.chart,\n meta = controller._cachedMeta;\n var stacks = chart._stacks || (chart._stacks = {});\n var iScale = meta.iScale,\n vScale = meta.vScale,\n datasetIndex = meta.index;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var key = getStackKey(iScale, vScale, meta);\n var ilen = parsed.length;\n var stack;\n\n for (var i = 0; i < ilen; ++i) {\n var item = parsed[i];\n var _index = item[iAxis],\n value = item[vAxis];\n var itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, _index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, 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 _iterator3 = _createForOfIteratorHelper(items),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var parsed = _step3.value;\n var stacks = parsed._stacks;\n\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n\n delete stacks[axis][datasetIndex];\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n}\n\nvar isDirectUpdateMode = function isDirectUpdateMode(mode) {\n return mode === 'reset' || mode === 'none';\n};\n\nvar cloneIfNotShared = function cloneIfNotShared(cached, shared) {\n return shared ? cached : Object.assign({}, cached);\n};\n\nvar 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 _iterator4 = _createForOfIteratorHelper(this._syncList),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _ref3 = _step4.value;\n\n var _ref2 = _slicedToArray(_ref3, 3);\n\n var method = _ref2[0];\n var arg1 = _ref2[1];\n var arg2 = _ref2[2];\n this[method](arg1, arg2);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.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, _ref4, ratio) {\n var inflateAmount = _ref4.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 _iterator5 = _createForOfIteratorHelper(metasets),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var meta = _step5.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 _iterator5.e(err);\n } finally {\n _iterator5.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 _iterator6 = _createForOfIteratorHelper(layouts),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var wrap = _step6.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 _iterator6.e(err);\n } finally {\n _iterator6.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 _iterator7 = _createForOfIteratorHelper(boxes),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var layout = _step7.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 _iterator7.e(err);\n } finally {\n _iterator7.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 _iterator8 = _createForOfIteratorHelper(nodeList),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var node = _step8.value;\n\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.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 _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.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, 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\nfunction createDetachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator10 = _createForOfIteratorHelper(entries),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var entry = _step10.value;\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.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 _iterator11 = _createForOfIteratorHelper(descriptors),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var descriptor = _step11.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 _iterator11.e(err);\n } finally {\n _iterator11.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, _ref5, options, all) {\n var plugins = _ref5.plugins,\n localIds = _ref5.localIds;\n var result = [];\n var context = chart.getContext();\n\n var _iterator12 = _createForOfIteratorHelper(plugins),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var plugin = _step12.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 _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return result;\n}\n\nfunction pluginOpts(config, _ref6, opts, context) {\n var plugin = _ref6.plugin,\n local = _ref6.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 _iterator13 = _createForOfIteratorHelper(names),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var prop = _step13.value;\n result[prop] = options[prop];\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.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 _iterator14 = _createForOfIteratorHelper(names),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var prop = _step14.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 _iterator14.e(err);\n } finally {\n _iterator14.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 _iterator15 = _createForOfIteratorHelper(changes),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var _ref8 = _step15.value;\n var method = _ref8.method;\n var start = _ref8.start;\n var count = _ref8.count;\n var move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.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 (_ref9) {\n var datasetIndex = _ref9.datasetIndex,\n index = _ref9.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 _ref10 = params || {},\n _ref10$move = _ref10.move,\n move = _ref10$move === void 0 ? true : _ref10$move,\n reverse = _ref10.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 _ref11 = params || {},\n _ref11$move = _ref11.move,\n move = _ref11$move === void 0 ? true : _ref11$move,\n reverse = _ref11.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 _iterator16 = _createForOfIteratorHelper(segments),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var segment = _step16.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 _iterator16.e(err);\n } finally {\n _iterator16.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 _iterator17 = _createForOfIteratorHelper(segments),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var segment = _step17.value;\n loop &= segmentMethod(ctx, this, segment, {\n start: start,\n end: start + count - 1\n });\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.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 _iterator18 = _createForOfIteratorHelper(segments),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var segment = _step18.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 _iterator19 = _createForOfIteratorHelper(targetSegments),\n _step19;\n\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var tgt = _step19.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 _iterator20 = _createForOfIteratorHelper(fillSources),\n _step20;\n\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var fillSource = _step20.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 _iterator20.e(err);\n } finally {\n _iterator20.f();\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 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 _ref12 = boundary || {},\n _ref12$x = _ref12.x,\n x = _ref12$x === void 0 ? null : _ref12$x,\n _ref12$y = _ref12.y,\n y = _ref12$y === void 0 ? null : _ref12$y;\n\n var linePoints = line.points;\n var points = [];\n line.segments.forEach(function (_ref13) {\n var start = _ref13.start,\n end = _ref13.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 _ref14 = fillOption || {},\n _ref14$above = _ref14.above,\n above = _ref14$above === void 0 ? color : _ref14$above,\n _ref14$below = _ref14.below,\n below = _ref14$below === void 0 ? color : _ref14$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 _iterator21 = _createForOfIteratorHelper(segments),\n _step21;\n\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var segment = _step21.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 _iterator21.e(err);\n } finally {\n _iterator21.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 _iterator22 = _createForOfIteratorHelper(segments),\n _step22;\n\n try {\n for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n var _ref16 = _step22.value;\n var src = _ref16.source;\n var tgt = _ref16.target;\n var start = _ref16.start;\n var end = _ref16.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 _iterator22.e(err);\n } finally {\n _iterator22.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 _ref17 = bounds || {},\n property = _ref17.property,\n start = _ref17.start,\n end = _ref17.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 _iterator23 = _createForOfIteratorHelper(hitboxes),\n _step23;\n\n try {\n for (_iterator23.s(); !(_step23 = _iterator23.n()).done;) {\n var hitbox = _step23.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 _iterator23.e(err);\n } finally {\n _iterator23.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 _iterator24 = _createForOfIteratorHelper(hitboxes),\n _step24;\n\n try {\n for (_iterator24.s(); !(_step24 = _iterator24.n()).done;) {\n var _hitbox = _step24.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 _iterator24.e(err);\n } finally {\n _iterator24.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 (_ref18) {\n var datasetIndex = _ref18.datasetIndex,\n index = _ref18.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 _iterator25 = _createForOfIteratorHelper(added),\n _step25;\n\n try {\n for (_iterator25.s(); !(_step25 = _iterator25.n()).done;) {\n var _ref20 = _step25.value;\n var _index3 = _ref20.index;\n var label = _ref20.label;\n\n if (labels[_index3] === label) {\n labels.splice(_index3, 1);\n }\n }\n } catch (err) {\n _iterator25.e(err);\n } finally {\n _iterator25.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, _ref21) {\n var horizontal = _ref21.horizontal,\n minRotation = _ref21.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":""}