{"version":3,"sources":["webpack:///./src/components/Shared/FormElement/CheckboxDropdown/CheckboxDropdownOptions.vue?137c","webpack:///./src/components/Layout/Channels/ResultTableSumChannel.vue?474a","webpack:///./node_modules/core-js/internals/string-repeat.js","webpack:///./src/components/Layout/Channels/DateModalChannels.vue?57f5","webpack:///./src/components/Shared/FormElement/CheckboxDropdown/CheckboxDropdownOptions.vue?69da","webpack:///./node_modules/core-js/internals/this-number-value.js","webpack:///./src/components/Layout/Channels/ResultTableMainChannel.vue?923d","webpack:///./src/components/Shared/FormElement/Dialogs/ExportDialog.vue?9379","webpack:///./src/components/Layout/Channels/ResultTableMainChannel.vue?795c","webpack:///./src/components/Layout/Channels/ResultDiagramMainChannel.vue?7cca","webpack:///./src/components/Layout/Channels/Channels.vue?fa0f","webpack:///./src/components/Shared/FormElement/Dialogs/ExportDialog.vue?4e71","webpack:///src/components/Shared/FormElement/Dialogs/ExportDialog.vue","webpack:///./src/components/Shared/FormElement/Dialogs/ExportDialog.vue?998b","webpack:///./src/components/Shared/FormElement/Dialogs/ExportDialog.vue","webpack:///./node_modules/core-js/modules/es.number.to-fixed.js","webpack:///./src/components/Layout/Channels/Channels.vue?422d","webpack:///./src/components/Layout/Channels/DateModalChannels.vue?b7cf","webpack:///src/components/Layout/Channels/DateModalChannels.vue","webpack:///./src/components/Layout/Channels/DateModalChannels.vue?88be","webpack:///./src/components/Layout/Channels/DateModalChannels.vue","webpack:///./src/components/Layout/Channels/formData.js","webpack:///./src/components/Layout/Channels/channelValidationRules.js","webpack:///./src/components/Layout/Channels/ResultTableMainChannel.vue?8fbf","webpack:///src/components/Layout/Channels/ResultTableMainChannel.vue","webpack:///./src/components/Layout/Channels/ResultTableMainChannel.vue?8962","webpack:///./src/components/Layout/Channels/ResultTableMainChannel.vue?c9c5","webpack:///./src/components/Layout/Channels/ResultDiagramMainChannel.vue?1d15","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack:///./node_modules/chart.js/dist/chart.esm.js","webpack:///./node_modules/vue-chartjs/legacy/index.js","webpack:///./src/components/Shared/FormElement/CheckboxDropdown/CheckboxDropdownOptions.vue?02ca","webpack:///src/components/Shared/FormElement/CheckboxDropdown/CheckboxDropdownOptions.vue","webpack:///./src/components/Shared/FormElement/CheckboxDropdown/CheckboxDropdownOptions.vue?b76b","webpack:///./src/components/Shared/FormElement/CheckboxDropdown/CheckboxDropdownOptions.vue?ce8d","webpack:///src/components/Layout/Channels/ResultDiagramMainChannel.vue","webpack:///./src/components/Layout/Channels/ResultDiagramMainChannel.vue?8e35","webpack:///./src/components/Layout/Channels/ResultDiagramMainChannel.vue","webpack:///./src/components/Layout/Channels/ResultTableSumChannel.vue?e760","webpack:///src/components/Layout/Channels/ResultTableSumChannel.vue","webpack:///./src/components/Layout/Channels/ResultTableSumChannel.vue?f667","webpack:///./src/components/Layout/Channels/ResultTableSumChannel.vue?f2f4","webpack:///src/components/Layout/Channels/Channels.vue","webpack:///./src/components/Layout/Channels/Channels.vue?5f56","webpack:///./src/components/Layout/Channels/Channels.vue?a59d","webpack:///./src/components/Layout/Channels/ResultTableSumChannel.vue?339f"],"names":["toInteger","requireObjectCoercible","module","exports","repeat","count","str","String","this","result","n","Infinity","RangeError","classof","value","TypeError","render","_vm","_h","$createElement","_c","_self","attrs","dialogId","on","e","$emit","scopedSlots","_u","key","fn","ref","ok","$event","$bvModal","hide","_v","staticClass","model","callback","$$v","detailrows","expression","_s","header","staticRenderFns","component","$","thisNumberValue","fails","nativeToFixed","toFixed","floor","Math","pow","x","acc","log","x2","FORCED","call","target","proto","forced","fractionDigits","z","j","k","number","fractDigits","data","sign","multiply","c","index","c2","divide","dataToString","s","t","length","slice","class","bodyClass","exportDialogId","selectExportMode","channelsInitStatus","loadingFormDataValue","_e","formFields","date","latestDate","inputChanged","providers","target_group","getSelectedInputs","clearAllFields","_l","selectedButton","clickedBtn","domProps","text","clickedBtnDelete","disableRunBtn","submitSearch","status","staticStyle","TargetGroupExists","_m","tabContainerClass","tabContentContainer","tabName","loadingExportResults","userClickedExport","statusSummary","proxy","tabIndex","showChartStyle","mainSortBy","mainSortDesc","disableSumClick","eventTriggerSumTab","error","fetchChannelsSummary","sumSortBy","sumSortDesc","fieldData","showDateModal","popupIsHidden","popupIsShown","saveDate","cancel","$set","start_date","hasError","label","directives","name","rawName","modifiers","clicked1d","clicked1v","clickedF1v","$store","getters","getPublishedToDate","baseFields","errorMsg","type","identifier","default","required","datePeriod","tempStartDate","end_date","editable","tempEndDate","disabled","grouptime","options","id","tempGroupTime","title","sites","channels","showChannelModal","config","showTargetGroupModal","validationRules","formErrors","showAlertModal","alertModalMsg","getRowCount","fields","visibleRows","currentPage","levelOneSitesWithLevelTwoSites","numeric","sensitivity","sortBy","sortDesc","onSort","rowSelected","rowClicked","row","item","numberOfLvl2Objects","clickedPlusMinusSign","_showDetails","setLevelOneSiteToLevelTwoSite","onLvlOneCheckClick","checkSelection","field","getTableFieldLabel","providerName","groupClassOddEven","detailRowClassOddEven","levelTwoSites","getChannelsResults","Object","values","getMeasuresKeyLabelPairs","setVisibleMeasures","getProviders","setVisibleProviders","chartOptions","visibleChartData","chartId","datasetIdKey","requestAnimFrame","window","requestAnimationFrame","throttled","thisArg","updateFn","updateArgs","args","Array","prototype","ticking","rest","apply","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","start","end","_textX","left","right","rtl","check","noop","uid","isNullOrUndef","isArray","toString","isObject","isNumberFinite","Number","isFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","endsWith","parseFloat","toDimension","each","loopable","reverse","i","len","keys","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","clone$1","source","map","create","klen","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","emptyString","dot","indexOfDotOrLength","idx","resolveObjectKey","obj","pos","_capitalize","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","size","has","_isClickEvent","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","niceNum","range","roundedRange","round","almostEquals","niceRange","fraction","niceFraction","_factorize","sqrt","push","sort","pop","isNumber","isNaN","y","epsilon","abs","almostWhole","rounded","_setMinAndMaxByKey","array","property","min","max","toRadians","degrees","toDegrees","radians","_decimalPlaces","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","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","easeInBounce","easeOutBounce","m","d","easeInOutBounce","v","lim","l","h","p2b","n2b","b2n","n2p","map$1","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","f","hex","h1","h2","eq","isShort","r","g","hexParse","ret","hexString","undefined","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","exec","p1","p2","rotate","deg","hslString","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","unpack","unpacked","tkeys","nk","replace","parseInt","nameParse","transparent","toLowerCase","RGB_RE","rgbParse","rgbString","interpolate","rgb1","rgb2","modHSL","ratio","tmp","clone","assign","fromObject","input","functionParse","Color","_rgb","_valid","color","weight","c1","w2","w1","val","index_esm","isPatternOrGradient","getHoverColor","saturate","darken","overrides","getScope$1","node","split","root","scope","Defaults","_descriptors","animation","backgroundColor","borderColor","datasets","devicePixelRatio","context","chart","platform","getDevicePixelRatio","elements","events","font","family","style","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","enumerable","local","defaults","_scriptable","startsWith","_indexable","_fallback","toFontString","_measureText","gc","longest","string","textWidth","measureText","width","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","splice","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","height","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","top","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","opts","lines","strokeWidth","strokeColor","line","setRenderOpts","strokeStyle","lineWidth","strokeText","maxWidth","fillText","decorateText","translation","fillStyle","textAlign","textBaseline","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","RegExp","FONT_STYLE","toLineHeight","matches","match","numberOrZero","_readValueToProps","props","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","console","warn","resolve","inputs","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","createContext","parentContext","_lookup","table","cmp","mid","hi","lo","_lookupByKey","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","listener","_chartjs","listeners","defineProperty","configurable","forEach","method","base","res","object","unlistenArrayEvents","stub","_arrayUnique","items","set","Set","from","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","override","Proxy","_keys","_cached","_resolveWithPrefixes","Reflect","getOwnPropertyDescriptor","getPrototypeOf","getKeysFromAllScopes","includes","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","receiver","_resolveWithContext","allKeys","ownKeys","scriptable","indexable","_allKeys","isScriptable","isIndexable","readKey","prefix","needsSubResolver","constructor","descriptors","_resolveScriptable","_resolveArray","Error","join","delete","createSubResolver","arr","filter","resolver","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","meta","iScale","_parsing","parsed","parse","EPSILON","getPoint","points","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","delta","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","spanGaps","cubicInterpolationMode","prev","tension","_isDomSupported","document","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","getStyle","el","getPropertyValue","positions","getPositionedStyle","styles","suffix","useOffsetPos","shadowRoot","getCanvasPosition","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","evt","borderBox","boxSizing","paddings","borders","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","addEventListener","removeEventListener","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","Map","getNumberFormat","locale","cacheKey","JSON","stringify","formatter","get","Intl","NumberFormat","formatNumber","num","format","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","getSegment","segment","bounds","startBound","endBound","_boundSegment","prevValue","inside","subStart","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","last","cur","stop","_computeSegments","segmentOptions","_loop","splitByStyles","completeLoop","_fullLoop","doSplitByStyles","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","_request","_charts","_running","_lastDate","anims","callbacks","numSteps","duration","initial","currentStep","_update","_refresh","Date","now","remaining","running","draw","_active","_total","tick","_notify","charts","complete","progress","event","cb","_getAnims","reduce","_duration","animator","interpolators","to","factor","c0","valid","mix","cfg","currentValue","_fn","_easing","easing","_start","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","rej","resolved","numbers","colors","properties","active","resize","show","animations","visible","_properties","configure","animatedProps","getOwnPropertyNames","option","newOptions","resolveTargetOptions","_createAnimations","$shared","awaitAll","$animations","then","_animateOptions","update","anim","wait","all","scaleClip","allowedOverflow","defaultClip","xScale","yScale","toClip","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","_cachedMeta","_stacks","iAxis","axis","vAxis","itemStacks","_top","_bottom","getFirstScaleId","shift","createDatasetContext","dataset","createDataContext","dataIndex","raw","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","_ctx","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","initialize","linkScales","addElements","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","isExtensible","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","parsedValue","NaN","otherScale","_getOtherScale","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","getLabelForValue","_clip","getMaxOverflow","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","_resolveElementOptions","dataElementType","elementType","sharing","datasetElementScopeKeys","names","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","sharedOptions","_animationsDisabled","_resolveAnimations","getSharedOptions","_setStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_dataChanges","arguments","_sync","newCount","getAllScaleValues","_cache","$bar","visibleMetas","concat","getAllParsedValues","computeMinSampleSize","curr","_length","updateMinAndPrev","getPixelForValue","ticks","getPixelForTick","computeFitCategoryTraits","ruler","stackCount","thickness","barThickness","categoryPercentage","barPercentage","chunk","pixels","computeFlexCategoryTraits","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","_custom","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","isHorizontal","borderProps","horizontal","setBorderSkipped","edge","borderSkipped","enableBorderRadius","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","iAxisKey","vAxisKey","super","bars","reset","getBasePixel","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","updateElement","grouped","_getStacks","_startPixel","_endPixel","_getStackCount","baseValue","minBarLength","floating","getDataVisibility","startPixel","getPixelForDecimal","endPixel","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","stackIndex","_getStackIndex","rects","_index_","offset","grid","_value_","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","tooltip","innerRadius","outerRadius","getter","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","_getRotationExtents","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","legend","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","_dataset","animationsDisabled","getStartAndCountOfVisiblePoints","scaleRangesChanged","_decimated","animated","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","updateControlPoints","pointCount","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","PieController","pointPosition","getPointPositionForValue","ScatterController","DateAdapter","timestamp","amount","unit","weekday","members","adapters","_date","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","handler","getSortedVisibleDatasetMetas","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","isPointInArea","evaluationFunc","inRange","getNearestRadialItems","getProps","getNearestCartesianItems","distanceMetric","minDistance","getCenterPoint","pointInArea","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","placed","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","buildLayoutBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","padding","autoPadding","_layers","layoutItem","minPadding","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","initCanvas","renderHeight","getAttribute","renderWidth","displayWidth","displayHeight","eventListenerOptions","passive","addListener","removeListener","fromNativeEvent","native","nodeListContains","nodeList","contains","createAttachObserver","observer","MutationObserver","entries","trigger","addedNodes","removedNodes","observe","childList","subtree","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","ResizeObserver","contentRect","releaseObserver","disconnect","createProxyAndListen","removeAttribute","setAttribute","proxies","$proxies","handlers","attach","detach","isConnected","_detectPlatform","OffscreenCanvas","final","defaultRoutes","formatters","tickValue","notation","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","tickLength","_tickSize","maxScale","maxChart","_maxLength","evenMajorSpacing","getEvenSpacing","factors","ceil","majorStart","majorEnd","diff","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","minor","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","route","reverseAlign","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","titleAlign","titleArgs","titleX","titleY","positionAxisID","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getMinMax","xLabels","yLabels","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","generateTickLabels","_computeLabelSizes","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getBaseValue","optionTicks","rot","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","y2","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","tickTextAlign","labelPadding","fillRect","findIndex","_computeGridLineItems","drawLine","setLineDash","lineDashOffset","lastLineWidth","_computeLabelArea","_computeLabelItems","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","axisID","fontSize","isPrototypeOf","parentScope","isIChartComponent","register","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","parts","controllers","_typedRegistries","_each","_get","typedRegistry","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","camelMethod","_init","hook","_createDescriptors","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","allPlugins","createDescriptors","previousDescriptors","some","getPlugin","getOpts","pluginOpts","pluginScopeKeys","getIndexAxis","datasetDefaults","datasetOptions","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","_config","_scopeCache","_resolverCache","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","animationOptions","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","userConfig","initialCanvas","existingChart","chartOptionScopes","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","scalesOptions","axisOptions","scaleOpts","updated","isRadial","dposition","dtype","scaleType","scaleClass","getScale","init","hasUpdated","addBox","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","getElement","_updateMetasets","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","removeBox","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","isAttached","activeElements","lastActive","notify","replay","hoverOptions","deactivated","activated","updateHoverStyle","eventFilter","_handleEvent","_getActiveElements","getElementsAtEventForMode","invalidatePlugins","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","o","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","drawArc","fullCircles","drawFullCircleBorders","inner","lineJoin","unregister","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineCap","getLineMethod","stepped","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","useFastPath","_getInterpolationMethod","strokePathWithCache","path","_path","Path2D","strokePathDirect","segmentMethod","usePath2D","_points","_segments","_pointsUpdated","_interpolate","interpolated","inRange$1","hitRadius","mouseX","mouseY","hoverRadius","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","maxR","enableBorder","boundingRects","outer","skipX","skipY","skipBoth","hasRadius","addNormalRectPath","inflateRect","refRect","addRectPath","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","itemHeight","itemsEqual","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","generateLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","rtlHelper","hitbox","leftForLtr","_draw","defaultColor","fontColor","halfFontSize","cursor","drawLegendBox","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","textDirection","setWidth","realX","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","_getLegendItemAt","sameItem","onLeave","plugin_legend","_element","_args","adjustHitBoxes","handleEvent","ci","_padding","textSize","fontOpts","_drawArgs","createTitle","titleBlock","plugin_title","WeakMap","positioners","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getLabelAndValue","getTooltipSize","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","bodyLineHeight","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","caretSize","caretPadding","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","beforeTitle","afterTitle","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","bodyAlign","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","_willRender","labelCount","addIfString","addedLabels","unshift","findOrAddLabel","lastIndexOf","_startValue","_valueRange","_addedLabels","added","getDecimalForPixel","generateTicks$1","generationOptions","dataRange","MIN_SPACING","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","_endValue","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","stepSize","computeTickLimit","getTickLimit","numericGeneratorOptions","_maxDigits","handleTickRangeOptions","isMajor","tickVal","generateTicks","endExp","endSignificand","exp","significand","lastTick","_zero","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","hLimits","vLimits","updateLimits","setCenterPoint","_pointLabelItems","buildPointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","logarithmic","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","setMajorTicks","majorUnit","ticksFromTimestamps","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","initOffsets","offsetAfterAutoskip","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","ChartEmits","chartCreate","createChartFunction","chartData","emit","ChartRendered","chartUpdate","ChartUpdated","chartDestroy","destroy","ChartDestroyed","getChartData","nextData","setChartDatasets","oldData","newData","addedDatasets","nextDataset","currentDataset","find","setChartLabels","LabelsUpdated","setChartOptions","compareData","newDatasetLabels","oldDatasetLabels","every","templateError","ANNOTATION_PLUGIN_KEY","generateChart","chartType","chartController","_chartRef","cssClasses","_id","random","substring","computed","ref1","pluginSettings","$data","renderChart","watch","newValue","oldValue","chartDataHandler","deep","chartOptionsHandler","methods","currentChart","getCurrentChart","$refs","canvasEl2DContext","setCurrentChart","isEqualLabelsAndDatasetsLength","updateChart","hasAnnotationPlugin","createElement","Line","dropdownInfoText","selectAll","allIsSelected","optionsArray","nativeOn","selected","loading","tdClass","getSummaryRowData","getChannelsSummaryResults","exportToCsv"],"mappings":"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","file":"js/chunk-50bbdc27.016ab073.js","sourcesContent":["export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxDropdownOptions.vue?vue&type=style&index=1&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableSumChannel.vue?vue&type=style&index=1&id=1da7c05f&scoped=true&lang=css&\"","'use strict';\nvar toInteger = require('../internals/to-integer');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = ''.repeat || function repeat(count) {\n var str = String(requireObjectCoercible(this));\n var result = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions');\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n return result;\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateModalChannels.vue?vue&type=style&index=0&id=3d755a1a&scoped=true&lang=css&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxDropdownOptions.vue?vue&type=style&index=0&id=45f41178&scoped=true&lang=css&\"","var classof = require('../internals/classof-raw');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = function (value) {\n if (typeof value != 'number' && classof(value) != 'Number') {\n throw TypeError('Incorrect invocation');\n }\n return +value;\n};\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableMainChannel.vue?vue&type=style&index=1&id=21bd3b60&scoped=true&lang=css&\"","export * from \"-!../../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExportDialog.vue?vue&type=style&index=0&id=b2a922b2&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableMainChannel.vue?vue&type=style&index=0&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultDiagramMainChannel.vue?vue&type=style&index=0&id=163c30a5&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Channels.vue?vue&type=style&index=0&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{attrs:{\"size\":\"m\",\"centered\":true,\"id\":_vm.dialogId,\"title\":\"Exportera data\",\"title-class\":\"ml-auto\",\"getter\":\"getChannelsExportQuery\",\"setter\":\"setChannelsExportQuery\"},on:{\"ok\":function (e) { return _vm.$emit('ok', e); }},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(ref){\nvar ok = ref.ok;\nreturn [_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-secondary\"},on:{\"click\":function($event){return _vm.$bvModal.hide(_vm.dialogId)}}},[_vm._v(\" Avbryt \")]),_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"primary\"},on:{\"click\":function($event){return ok()}}},[_vm._v(\" Ok \")])]}}])},[_c('div',{staticClass:\"flex-grid\"},[_c('div',{staticClass:\"col textwrapper\"},[_c('label',{staticClass:\"labelclass\",attrs:{\"for\":\"switch_1\"}},[_vm._v(\"Detaljrader: \")])]),_c('div',{staticClass:\"col detailrowswitchwrapper\"},[_c('b-form-checkbox',{staticClass:\"ml-2 d-inline-block\",attrs:{\"id\":\"switch_1\",\"switch\":\"\"},model:{value:(_vm.detailrows),callback:function ($$v) {_vm.detailrows=$$v},expression:\"detailrows\"}}),_c('label',{staticClass:\"labelclass\",attrs:{\"for\":\"switch_1\"}},[_vm._v(_vm._s(_vm.detailrows ? \"Ja\" : \"Nej\"))])],1)]),_c('div',{staticClass:\"flex-grid\"},[_c('div',{staticClass:\"col textwrapper\"},[_c('label',{staticClass:\"labelclass\",attrs:{\"for\":\"switch_2\"}},[_vm._v(\"Rapporthuvud: \")])]),_c('div',{staticClass:\"col\"},[_c('b-form-checkbox',{staticClass:\"ml-2 d-inline-block\",attrs:{\"id\":\"switch_2\",\"switch\":\"\"},model:{value:(_vm.header),callback:function ($$v) {_vm.header=$$v},expression:\"header\"}}),_c('label',{staticClass:\"labelclass\",attrs:{\"for\":\"switch_2\"}},[_vm._v(_vm._s(_vm.header ? \"Ja\" : \"Nej\"))])],1)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExportDialog.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ExportDialog.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ExportDialog.vue?vue&type=template&id=b2a922b2&scoped=true&\"\nimport script from \"./ExportDialog.vue?vue&type=script&lang=js&\"\nexport * from \"./ExportDialog.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ExportDialog.vue?vue&type=style&index=0&id=b2a922b2&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"b2a922b2\",\n null\n \n)\n\nexport default component.exports","'use strict';\nvar $ = require('../internals/export');\nvar toInteger = require('../internals/to-integer');\nvar thisNumberValue = require('../internals/this-number-value');\nvar repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar nativeToFixed = 1.0.toFixed;\nvar floor = Math.floor;\n\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\nvar FORCED = nativeToFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !fails(function () {\n // V8 ~ Android 4.3-\n nativeToFixed.call({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n // eslint-disable-next-line max-statements\n toFixed: function toFixed(fractionDigits) {\n var number = thisNumberValue(this);\n var fractDigits = toInteger(fractionDigits);\n var data = [0, 0, 0, 0, 0, 0];\n var sign = '';\n var result = '0';\n var e, z, j, k;\n\n var multiply = function (n, c) {\n var index = -1;\n var c2 = c;\n while (++index < 6) {\n c2 += n * data[index];\n data[index] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n };\n\n var divide = function (n) {\n var index = 6;\n var c = 0;\n while (--index >= 0) {\n c += data[index];\n data[index] = floor(c / n);\n c = (c % n) * 1e7;\n }\n };\n\n var dataToString = function () {\n var index = 6;\n var s = '';\n while (--index >= 0) {\n if (s !== '' || index === 0 || data[index] !== 0) {\n var t = String(data[index]);\n s = s === '' ? t : s + repeat.call('0', 7 - t.length) + t;\n }\n } return s;\n };\n\n if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');\n // eslint-disable-next-line no-self-compare\n if (number != number) return 'NaN';\n if (number <= -1e21 || number >= 1e21) return String(number);\n if (number < 0) {\n sign = '-';\n number = -number;\n }\n if (number > 1e-21) {\n e = log(number * pow(2, 69, 1)) - 69;\n z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = fractDigits;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n result = dataToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n result = dataToString() + repeat.call('0', fractDigits);\n }\n }\n if (fractDigits > 0) {\n k = result.length;\n result = sign + (k <= fractDigits\n ? '0.' + repeat.call('0', fractDigits - k) + result\n : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits));\n } else {\n result = sign + result;\n } return result;\n }\n});\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{class:_vm.bodyClass},[_c('div',{staticClass:\"search-settings\"},[_c('ExportDialog',{attrs:{\"dialogId\":_vm.exportDialogId,\"getter\":\"getChannelsExportQuery\",\"setter\":\"setChannelsExportQuery\"},on:{\"ok\":_vm.selectExportMode}}),(_vm.channelsInitStatus == 'LOADING')?_c('div',[(_vm.loadingFormData)?_c('div',{staticClass:\"text-center mb-2\"},[_c('b-progress',{staticClass:\"m-5\",attrs:{\"value\":_vm.loadingFormDataValue,\"show-progress\":\"\"}})],1):_vm._e()]):_vm._e(),(_vm.channelsInitStatus == 'FAILED')?_c('div',{staticClass:\"failedRequest\"},[_vm._v(\"Kan ej returnera resultat pga ett serverfel.\")]):_vm._e(),(_vm.channelsInitStatus == 'LOADED')?_c('div',[_c('b-form',[_c('b-form-row',{staticClass:\"justify-content-center mb-2\"},[_c('DateModalChannels',{attrs:{\"fieldData\":_vm.formFields.date,\"latestDate\":_vm.latestDate},on:{\"onInputChanged\":_vm.inputChanged}}),_c('ProviderPickerChannels',{attrs:{\"fieldData\":_vm.formFields.providers,\"getter\":\"getChannelsQuery\",\"providersSetter\":\"setChannelsQueryProviders\",\"setter\":\"setChannelsQuery\"}}),_c('TargetGroupChannels',{attrs:{\"fieldData\":_vm.formFields.target_group,\"getter\":\"getChannelsQuery\",\"setter\":\"setChannelsQuery\"}})],1),_c('b-form-row',{staticClass:\"mb-2 justify-content-center\"},[(_vm.getSelectedInputs > 0)?_c('button',{staticClass:\"trashbtn mt-2 mr-2\",attrs:{\"type\":\"button\"},on:{\"click\":_vm.clearAllFields}},[_c('b-icon-trash')],1):_vm._e(),_vm._l((_vm.selectedBtns),function(selectedButton,key){return _c('div',{key:key},[_c('button',{staticClass:\"selectedbtns mr-2 mt-2 bubblefontsize\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){selectedButton.clickedBtn && selectedButton.clickedBtn()}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(selectedButton.text)}}),(selectedButton.editable)?_c('b-icon',{staticClass:\"ml-2 crossbtn\",attrs:{\"font-scale\":\"1.5\",\"icon\":\"x\"},on:{\"click\":function($event){selectedButton.clickedBtnDelete && selectedButton.clickedBtnDelete($event)}}}):_vm._e()],1)])})],2),_c('b-form-row',{staticClass:\"mb-2 justify-content-center\"},[_c('div',[_c('b-button',{staticClass:\"searchbutton\",attrs:{\"disabled\":_vm.disableRunBtn,\"variant\":\"primary\",\"size\":\"sm\"},on:{\"click\":_vm.submitSearch}},[(_vm.status != 'LOADING')?_c('font-awesome-icon',{staticStyle:{\"font-size\":\"1rem\",\"position\":\"relative\",\"top\":\"1px\",\"right\":\"2px\"},attrs:{\"icon\":['fas', 'play']}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.status === \"LOADING\" ? \"Arbetar...\" : \"Kör\")+\" \")],1)],1)])],1),(!_vm.TargetGroupExists)?_c('div',[_vm._m(0)]):_vm._e(),(_vm.exceededConsumptionPeriodLimit)?_c('div',[_vm._m(1)]):_vm._e()],1):_vm._e(),_c('hr')],1),_c('div',{staticClass:\"tab-section\"},[_c('b-tabs',{class:_vm.tabContainerClass,attrs:{\"nav-wrapper-class\":\"tab-nav\",\"content-class\":_vm.tabContentContainer},scopedSlots:_vm._u([{key:\"tabs-end\",fn:function(){return [(_vm.status === 'LOADED' && _vm.tabName === 'list')?_c('b-button',{staticClass:\"ml-auto\",attrs:{\"disabled\":_vm.loadingExportResults,\"size\":\"sm\",\"variant\":\"success\"},on:{\"click\":_vm.userClickedExport}},[(!_vm.loadingExportResults)?_c('b-icon',{attrs:{\"icon\":\"arrow-repeat\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.loadingExportResults ? \"Arbetar...\" : \"Exportera\")+\" \")],1):_vm._e(),(_vm.statusSummary == 'LOADED' && _vm.tabName === 'sum')?_c('b-button',{staticClass:\"ml-auto\",attrs:{\"disabled\":_vm.loadingExportResults,\"size\":\"sm\",\"variant\":\"success\"},on:{\"click\":_vm.userClickedExport}},[(!_vm.loadingExportResults)?_c('b-icon',{attrs:{\"icon\":\"arrow-repeat\"}}):_vm._e(),_vm._v(\" \"+_vm._s(_vm.loadingExportResults ? \"Arbetar...\" : \"Exportera\")+\" \")],1):_vm._e()]},proxy:true}]),model:{value:(_vm.tabIndex),callback:function ($$v) {_vm.tabIndex=$$v},expression:\"tabIndex\"}},[_c('b-tab',{attrs:{\"title\":\"Lista\",\"active\":\"\"},on:{\"click\":function($event){_vm.showChartStyle(false), (_vm.tabName = 'list')}}},[(_vm.status == 'LOADING')?_c('Spinner',{attrs:{\"loadingMsg\":\"Laddar resultat...\"}}):(_vm.status == 'EMPTY_RESULT')?_c('div',[_vm._v(\"Hittade inget för aktuell sökning\")]):(_vm.status == 'LOADED')?_c('div',[_c('ResultTableMainChannel',{attrs:{\"sortBy\":_vm.mainSortBy,\"sortDesc\":_vm.mainSortDesc,\"disableSumClick\":_vm.disableSumClick},on:{\"onSumButtonClicked\":function($event){return _vm.eventTriggerSumTab()},\"onChartButtonClicked\":function($event){;(_vm.tabIndex = 2), _vm.showChartStyle(true), (_vm.tabName = 'list')},\"update:sortBy\":function($event){_vm.mainSortBy=$event},\"update:sort-by\":function($event){_vm.mainSortBy=$event},\"update:sortDesc\":function($event){_vm.mainSortDesc=$event},\"update:sort-desc\":function($event){_vm.mainSortDesc=$event}}})],1):(_vm.status == 'FAILED')?_c('div',{staticClass:\"failedRequest\"},[_vm._v(\"Kan ej returnera resultat pga ett serverfel.\")]):(_vm.status == 'VALIDATION_FAILED')?_c('div',{staticClass:\"text-danger\"},_vm._l((_vm.formErrors),function(error,index){return _c('span',{key:index,staticClass:\"d-block\"},[_vm._v(\" \"+_vm._s(error)+\" \")])}),0):_vm._e()],1),(_vm.config_ShowSummaryChannel)?_c('b-tab',{attrs:{\"title\":\"Summering\",\"disabled\":_vm.disableSumClick},on:{\"click\":_vm.fetchChannelsSummary}},[(_vm.statusSummary == 'LOADING')?_c('Spinner',{attrs:{\"loadingMsg\":\"Laddar resultat...\"}}):(_vm.statusSummary == 'EMPTY_RESULT')?_c('div',[_vm._v(\"Hittade inget för aktuell sökning\")]):(_vm.statusSummary == 'LOADED')?_c('div',[_c('ResultTableSumChannel',{attrs:{\"sortBy\":_vm.sumSortBy,\"sortDesc\":_vm.sumSortDesc},on:{\"update:sortBy\":function($event){_vm.sumSortBy=$event},\"update:sort-by\":function($event){_vm.sumSortBy=$event},\"update:sortDesc\":function($event){_vm.sumSortDesc=$event},\"update:sort-desc\":function($event){_vm.sumSortDesc=$event}}})],1):(_vm.statusSummary == 'FAILED')?_c('div',{staticClass:\"failedRequest\"},[_vm._v(\"Kan ej returnera resultat pga ett serverfel.\")]):(_vm.statusSummary == 'VALIDATION_FAILED')?_c('div',{staticClass:\"text-danger\"},_vm._l((_vm.formErrors),function(error,index){return _c('span',{key:index,staticClass:\"d-block\"},[_vm._v(\" \"+_vm._s(error)+\" \")])}),0):_vm._e()],1):_vm._e(),_c('b-tab',{staticClass:\"chart-content\",attrs:{\"title\":\"Diagram\",\"disabled\":_vm.status !== 'LOADED'},on:{\"click\":function($event){_vm.showChartStyle(true), (_vm.tabName = 'chart')}}},[(_vm.status == 'LOADING')?_c('Spinner',{attrs:{\"loadingMsg\":\"Laddar diagram...\"}}):(_vm.status == 'EMPTY_RESULT')?_c('div',[_vm._v(\"Hittade inget för aktuell sökning\")]):(_vm.status == 'LOADED')?_c('ResultDiagramMainChannel',{staticClass:\"line-chart\"}):_vm._e(),(_vm.status == 'FAILED')?_c('div',{staticClass:\"failedRequest\"},[_vm._v(\"Kan ej returnera resultat pga ett serverfel.\")]):(_vm.status == 'VALIDATION_FAILED')?_c('div',{staticClass:\"text-danger\"},_vm._l((_vm.formErrors),function(error,index){return _c('span',{key:index,staticClass:\"d-block\"},[_vm._v(\" \"+_vm._s(error)+\" \")])}),0):_vm._e()],1)],1)],1)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-center mb-2\"},[_c('div',[_c('small',{staticClass:\"text-danger\"},[_c('strong',[_vm._v(\"Du måste välja målgrupp under Målgrupper / Mått.\")])])])])},function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"text-center mb-2\"},[_c('div',[_c('small',{staticClass:\"text-danger\"},[_c('strong',[_vm._v(\"Du får max välja 60 dagar som konsumtionsperiod.\")])])])])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('button',{staticClass:\"btn btnclass smallerfontsize mr-3 selected\",attrs:{\"type\":\"button\"},on:{\"click\":function($event){_vm.fieldData.showDateModal = true}}},[_vm._v(\" Datum \")]),_c('b-modal',{attrs:{\"id\":\"modal-date\",\"title\":\"Datum\"},on:{\"hide\":_vm.popupIsHidden,\"shown\":_vm.popupIsShown,\"ok\":_vm.saveDate},scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(ref){\nvar cancel = ref.cancel;\nvar ok = ref.ok;\nreturn [_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"outline-secondary\"},on:{\"click\":function($event){return cancel()}}},[_vm._v(\" Avbryt \")]),_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"primary\",\"disabled\":_vm.disableRunBtn()},on:{\"click\":function($event){return ok()}}},[_vm._v(\" Spara \")])]}}]),model:{value:(_vm.fieldData.showDateModal),callback:function ($$v) {_vm.$set(_vm.fieldData, \"showDateModal\", $$v)},expression:\"fieldData.showDateModal\"}},[_c('b-form-row',[_c('b-col',{staticClass:\"pl-2 mb-3\",attrs:{\"lg\":\"6\"}},[_c('DropdownGroupTime',{attrs:{\"fieldData\":_vm.fieldData,\"getter\":\"getChannelsQuery\",\"setter\":\"setChannelsQuery\"}})],1)],1),_c('b-form-row',[_c('b-col',{staticClass:\"pl-2\",attrs:{\"lg\":\"6\"}},[_c('label',{class:['label-text', _vm.fieldData.start_date.hasError ? 'error' : '']},[_vm._v(\" \"+_vm._s(_vm.fieldData.start_date.label)+\" \")]),(_vm.showSmallDateButtons)?_c('div',{class:['wrapsmallbtns date-presets-mini-buttons']},[_c('b-button',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"datefrombtn\",attrs:{\"title\":\"1d: Sätt start- och slutdatum till senaste dagen med data\",\"variant\":\"primary\"},on:{\"click\":_vm.clicked1d}},[_vm._v(\"1d\")]),_c('b-button',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"datefrombtn\",attrs:{\"title\":\"1v: Sätt startdatum till en vecka från senaste dagen med data\",\"variant\":\"primary\"},on:{\"click\":_vm.clicked1v}},[_vm._v(\"1v\")]),_c('b-button',{directives:[{name:\"b-tooltip\",rawName:\"v-b-tooltip.hover\",modifiers:{\"hover\":true}}],staticClass:\"datefrombtn\",attrs:{\"title\":\"f1v: Sätt start- och slutdatum till den senaste kompletta veckan med data\",\"variant\":\"primary\"},on:{\"click\":_vm.clickedF1v}},[_vm._v(\"f1v\")])],1):_vm._e(),_c('DateFromChannels',{attrs:{\"fieldData\":_vm.fieldData,\"latestDate\":_vm.$store.getters.getPublishedToDate,\"getter\":\"getChannelsQuery\",\"setter\":\"setChannelsQuery\",\"parentName\":\"channels\",\"mutationSetEnddate\":\"setChannelsEnddate\",\"mutationSetStartdate\":\"setChannelsStartdate\"},on:{\"onInputChanged\":_vm.inputChanged}})],1),_c('b-col',{staticClass:\"pr-2\",attrs:{\"lg\":\"6\"}},[_c('DateToChannels',{attrs:{\"fieldData\":_vm.fieldData,\"latestDate\":_vm.$store.getters.getPublishedToDate,\"getter\":\"getChannelsQuery\",\"setter\":\"setChannelsQuery\",\"parentName\":\"channels\",\"mutationSetEnddate\":\"setChannelsEnddate\",\"mutationSetStartdate\":\"setChannelsStartdate\"}})],1)],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateModalChannels.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DateModalChannels.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DateModalChannels.vue?vue&type=template&id=3d755a1a&scoped=true&\"\nimport script from \"./DateModalChannels.vue?vue&type=script&lang=js&\"\nexport * from \"./DateModalChannels.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DateModalChannels.vue?vue&type=style&index=0&id=3d755a1a&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3d755a1a\",\n null\n \n)\n\nexport default component.exports","export const baseFields = {\n date: {\n start_date: {\n label: \"Konsumtionsperiod från\",\n errorMsg: \"\",\n type: \"start_date_channels\",\n identifier: \"start_date\",\n default: null,\n required: true,\n datePeriod: {},\n tempStartDate: \"\",\n hasError: false,\n },\n end_date: {\n label: \"Konsumtionsperiod till\",\n type: \"end_date_channels\",\n errorMsg: \"\",\n identifier: \"end_date\",\n default: null,\n required: true,\n editable: true,\n datePeriod: {},\n tempEndDate: \"\",\n hasError: false,\n disabled: false,\n },\n grouptime: {\n label: \"Visningsläge\",\n identifier: \"grouptime\",\n type: \"dropdown-grouptime-select\",\n options: [\n { label: \"Dag\", id: \"day\" },\n { label: \"7 dagar (rullande)\", id: \"sevendays\" },\n { label: \"Vecka\", id: \"week\" },\n ],\n datePeriod: {},\n tempGroupTime: \"\",\n },\n showDateModal: false,\n },\n providers: {\n label: \"Kanaler\",\n type: \"provider-picker-channels\",\n identifier: \"provider_keys\",\n title: \"Kanaler\",\n sites: [],\n channels: [],\n default: [],\n showChannelModal: false,\n },\n target_group: {\n label: \"Målgrupp\",\n identifier: \"target_group\",\n type: \"target_group_channels\",\n config: {},\n showTargetGroupModal: false,\n },\n}\n","const validationRules = component => {\n component.formErrors = []\n}\nexport { validationRules }\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('b-modal',{scopedSlots:_vm._u([{key:\"modal-footer\",fn:function(){return [_c('b-button',{attrs:{\"size\":\"sm\",\"variant\":\"primary\"},on:{\"click\":function($event){_vm.showAlertModal = false}}},[_vm._v(\" Ok \")])]},proxy:true}]),model:{value:(_vm.showAlertModal),callback:function ($$v) {_vm.showAlertModal=$$v},expression:\"showAlertModal\"}},[_c('div',{staticClass:\"text-center\"},[_vm._v(\" \"+_vm._s(_vm.alertModalMsg)+\" \")])]),(_vm.showSelectSpecificChannelError)?_c('span',{staticClass:\"text-danger mb-2 d-block\"},[_vm._v(\"Dina målgrupper är justerade i svaret. Enbart målgruppen A3-99 är tillgänglig för räckvidd för enskilda kanalkombinationer.\")]):_vm._e(),(_vm.config_ShowSummaryChannel)?_c('b-button',{staticClass:\"mb-2 mr-sm-2 btn-responsive float-left\",attrs:{\"size\":\"sm\",\"variant\":\"primary\",\"disabled\":_vm.disableSumClick},on:{\"click\":function($event){return _vm.$emit('onSumButtonClicked')}}},[_vm._v(\" Ta markeringar till Summering \")]):_vm._e(),_c('b-button',{staticClass:\"mb-2 btn-responsive float-left\",attrs:{\"size\":\"sm\",\"variant\":\"primary\"},on:{\"click\":function($event){return _vm.$emit('onChartButtonClicked')}}},[_vm._v(\" Visa samtliga rader som Diagram \")]),_c('label',{staticClass:\"totalRowsStyle float-left\"},[_vm._v(\" Svarsrader: \"+_vm._s(_vm.getRowCount)+\" \")]),_c('b-table',{ref:\"selectableTable\",staticClass:\"tablemainresultclass\",attrs:{\"thead-class\":\"stickyfancytableheader\",\"fields\":_vm.fields,\"per-page\":_vm.visibleRows,\"current-page\":_vm.currentPage,\"items\":_vm.levelOneSitesWithLevelTwoSites,\"bordered\":\"\",\"small\":\"\",\"select-mode\":\"range\",\"selectable\":\"\",\"primary-key\":\"index\",\"striped\":\"\",\"head-variant\":'dark',\"sort-compare-options\":{ numeric: true, sensitivity: 'base' },\"sort-compare-locale\":\"sv\",\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc},on:{\"update:sortBy\":function($event){_vm.sortBy=$event},\"update:sort-by\":function($event){_vm.sortBy=$event},\"update:sortDesc\":function($event){_vm.sortDesc=$event},\"update:sort-desc\":function($event){_vm.sortDesc=$event},\"sort-changed\":_vm.onSort,\"row-selected\":_vm.rowSelected,\"row-clicked\":_vm.rowClicked},scopedSlots:_vm._u([{key:\"cell(plussign)\",fn:function(row){return [(row.item.numberOfLvl2Objects > 1)?_c('div',{staticClass:\"plusminuscontainer\"},[_c('div',{staticClass:\"plusminusbutton\",on:{\"click\":function($event){return _vm.clickedPlusMinusSign(row)}}},[(!row.item._showDetails)?_c('font-awesome-icon',{staticClass:\"plusminusicon\",attrs:{\"icon\":\"fa fa-plus-circle\"}}):_c('font-awesome-icon',{staticClass:\"plusminusicon\",attrs:{\"icon\":\"fa fa-minus-circle fa-1x\"}}),_c('div',{staticClass:\"plusminusline\"})],1)]):(row.item.numberOfLvl2Objects === 1)?_c('div',[_vm._v(\" \"+_vm._s(_vm.setLevelOneSiteToLevelTwoSite(row.item))+\" \")]):_vm._e()]}},{key:\"cell(chosen)\",fn:function(row){return [_c('b-form-checkbox',{staticClass:\"choose-checkbox-div\",on:{\"change\":function($event){_vm.onLvlOneCheckClick(row.item), _vm.checkSelection()}},model:{value:(row.item.chosen),callback:function ($$v) {_vm.$set(row.item, \"chosen\", $$v)},expression:\"row.item.chosen\"}})]}},{key:\"head()\",fn:function(field){return [_c('span',{staticClass:\"measureheader\",domProps:{\"innerHTML\":_vm._s(_vm.getTableFieldLabel(field))}})]}},{key:\"cell(providerName)\",fn:function(row){return [_c('span',{domProps:{\"innerHTML\":_vm._s(row.item.providerName)}})]}},{key:\"row-details\",fn:function(row){return [_c('b-table-lite',{staticClass:\"mb-0 detail-row-table\",class:_vm.groupClassOddEven(row.index),attrs:{\"tbody-tr-class\":_vm.detailRowClassOddEven(row.index),\"borderless\":\"\",\"thead-class\":\"hideheader\",\"fields\":_vm.fields,\"items\":row.item.levelTwoSites},scopedSlots:_vm._u([{key:\"cell(chosen)\",fn:function(row){return [_c('b-form-checkbox',{staticClass:\"choose-checkbox-div\",attrs:{\"disabled\":true},on:{\"change\":function($event){return _vm.checkSelection()}},model:{value:(row.item.chosen),callback:function ($$v) {_vm.$set(row.item, \"chosen\", $$v)},expression:\"row.item.chosen\"}})]}},{key:\"cell(providerName)\",fn:function(row){return [_c('span',{domProps:{\"innerHTML\":_vm._s(row.item.providerName)}})]}}],null,true)})]}}])}),_c('b-pagination',{staticClass:\"justify-content-center\",attrs:{\"total-rows\":_vm.$store.getters.getChannelsResults.data.levelOneSitesWithLevelTwoSites.length,\"per-page\":_vm.visibleRows,\"aria-controls\":\"my-table\"},model:{value:(_vm.currentPage),callback:function ($$v) {_vm.currentPage=$$v},expression:\"currentPage\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableMainChannel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableMainChannel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResultTableMainChannel.vue?vue&type=template&id=21bd3b60&scoped=true&\"\nimport script from \"./ResultTableMainChannel.vue?vue&type=script&lang=js&\"\nexport * from \"./ResultTableMainChannel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResultTableMainChannel.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./ResultTableMainChannel.vue?vue&type=style&index=1&id=21bd3b60&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"21bd3b60\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"component-container\"},[_c('div',{staticClass:\"totalRowsStyle\"},[_c('label',[_vm._v(\" Svarsrader: \"+_vm._s(_vm.getRowCount))])]),_c('div',{staticClass:\"chart-container\"},[_c('div',{staticClass:\"chart-header\"},[_c('CheckboxDropdownOptions',{staticClass:\"measure-dropdown\",attrs:{\"dropdownInfoText\":\"Målgrupper och mått\",\"initialSelection\":[Object.values(_vm.getMeasuresKeyLabelPairs)[0]],\"labelTypeName\":\"Målgrupper och mått\",\"optionsArray\":Object.values(_vm.getMeasuresKeyLabelPairs)},on:{\"onInputChanged\":_vm.setVisibleMeasures}}),_c('CheckboxDropdownOptions',{staticClass:\"provider-dropdown\",attrs:{\"dropdownInfoText\":\"Kanalhus\",\"initialSelection\":_vm.getProviders,\"labelTypeName\":\"Kanalhus\",\"optionsArray\":_vm.getProviders},on:{\"onInputChanged\":_vm.setVisibleProviders}})],1),_c('div',{staticClass:\"chart\"},[_c('LineChartGenerator',{staticClass:\"line-chart\",attrs:{\"chart-options\":_vm.chartOptions,\"chart-data\":_vm.visibleChartData,\"chart-id\":_vm.chartId,\"dataset-id-key\":_vm.datasetIdKey}})],1)])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/*!\n * Chart.js v3.8.0\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\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 for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\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}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.slice(pos, idx)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\nfunction _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\nconst PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\nfunction _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for (i = 1; i < sqrt; i++) {\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b) => a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return ((rounded - epsilon) <= x) && ((rounded + epsilon) >= x);\n}\nfunction _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for (i = 0, ilen = array.length; i < ilen; i++) {\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\nfunction _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while (Math.round(x * e) / e !== x) {\n e *= 10;\n p++;\n }\n return p;\n}\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < (-0.5 * PI)) {\n angle += TAU;\n }\n return {\n angle,\n distance: radialDistanceFromCenter\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}\nfunction _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\nfunction _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\nfunction _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || (sameAngleIsFullCircle && s === e)\n || (angleToStart > angleToEnd && startToAngle < endToAngle);\n}\nfunction _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\nfunction _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nconst atEdge = (t) => t === 0 || t === 1;\nconst elasticIn = (t, s, p) => -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p) => Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\nconst effects = {\n linear: t => t,\n easeInQuad: t => t * t,\n easeOutQuad: t => -t * (t - 2),\n easeInOutQuad: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t\n : -0.5 * ((--t) * (t - 2) - 1),\n easeInCubic: t => t * t * t,\n easeOutCubic: t => (t -= 1) * t * t + 1,\n easeInOutCubic: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t\n : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: t => t * t * t * t,\n easeOutQuart: t => -((t -= 1) * t * t * t - 1),\n easeInOutQuart: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t\n : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: t => t * t * t * t * t,\n easeOutQuint: t => (t -= 1) * t * t * t * t + 1,\n easeInOutQuint: t => ((t /= 0.5) < 1)\n ? 0.5 * t * t * t * t * t\n : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: t => -Math.cos(t * HALF_PI) + 1,\n easeOutSine: t => Math.sin(t * HALF_PI),\n easeInOutSine: t => -0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: t => (t === 0) ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: t => (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: t => atEdge(t) ? t : t < 0.5\n ? 0.5 * Math.pow(2, 10 * (t * 2 - 1))\n : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: t => (t >= 1) ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: t => Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: t => ((t /= 0.5) < 1)\n ? -0.5 * (Math.sqrt(1 - t * t) - 1)\n : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: t => atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: t => atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic(t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t :\n t < 0.5\n ? 0.5 * elasticIn(t * 2, s, p)\n : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack(t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack(t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack(t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);\n },\n easeInBounce: t => 1 - effects.easeOutBounce(1 - t),\n easeOutBounce(t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < (1 / d)) {\n return m * t * t;\n }\n if (t < (2 / d)) {\n return m * (t -= (1.5 / d)) * t + 0.75;\n }\n if (t < (2.5 / d)) {\n return m * (t -= (2.25 / d)) * t + 0.9375;\n }\n return m * (t -= (2.625 / d)) * t + 0.984375;\n },\n easeInOutBounce: t => (t < 0.5)\n ? effects.easeInBounce(t * 2) * 0.5\n : 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 */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\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 return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\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 return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\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 return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\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}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst 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};\nconst 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};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const 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}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\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}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const 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}\nfunction modHSL(v, i, ratio) {\n if (v) {\n let 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}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const 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 return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const 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 opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const 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 lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\nfunction index_esm(input) {\n return new Color(input);\n}\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : index_esm(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value)\n ? value\n : index_esm(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\nfunction getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for (let i = 0, n = keys.length; i < n; ++i) {\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\nclass Defaults {\n constructor(_descriptors) {\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 this.devicePixelRatio = (context) => context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\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 this.hoverBackgroundColor = (ctx, options) => getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options) => getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options) => getHoverColor(options.color);\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 set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get() {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set(value) {\n this[privateName] = value;\n }\n }\n });\n }\n}\nvar defaults = new Defaults({\n _scriptable: (name) => !name.startsWith('on'),\n _indexable: (name) => name !== 'events',\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 return (font.style ? font.style + ' ' : '')\n\t\t+ (font.weight ? font.weight + ' ' : '')\n\t\t+ font.size + 'px '\n\t\t+ font.family;\n}\nfunction _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for (i = 0; i < ilen; i++) {\n thing = arrayOfThings[i];\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 if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for (i = 0; i < gcLen; i++) {\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\nfunction _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\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}\nfunction drawPoint(ctx, options, x, y) {\n let type, xOffset, yOffset, size, cornerRadius;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\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 if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch (style) {\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\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 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 case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\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 case 'crossRot':\n rad += QUARTER_PI;\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 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 case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\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 &&\n\t\tpoint.y > area.top - margin && point.y < area.bottom + margin);\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}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\nfunction _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const 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 ctx.lineTo(target.x, target.y);\n}\nfunction _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(\n flip ? previous.cp1x : previous.cp2x,\n flip ? previous.cp1y : previous.cp2y,\n flip ? target.cp2x : target.cp1x,\n flip ? target.cp2y : target.cp1y,\n target.x,\n target.y);\n}\nfunction renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [text];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for (i = 0; i < lines.length; ++i) {\n line = lines[i];\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const 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}\nfunction addRoundedRectPath(ctx, rect) {\n const {x, y, w, h, radius} = rect;\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\nconst LINE_HEIGHT = new RegExp(/^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/);\nconst FONT_STYLE = new RegExp(/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/);\nfunction toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch (matches[3]) {\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = v => +v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value)\n ? objProps\n ? prop => valueOrDefault(value[prop], value[props[prop]])\n : prop => value[prop]\n : () => value;\n for (const prop of keys) {\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\nfunction toTRBL(value) {\n return _readValueToProps(value, {top: 'y', right: 'x', bottom: 'y', left: 'x'});\n}\nfunction toTRBLCorners(value) {\n return _readValueToProps(value, ['topLeft', 'topRight', 'bottomLeft', 'bottomRight']);\n}\nfunction toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\nfunction toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = '';\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\nfunction resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for (i = 0, ilen = inputs.length; i < ilen; ++i) {\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\nfunction _addGrace(minmax, grace, beginAtZero) {\n const {min, max} = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add) => beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index) => table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while (hi - lo > 1) {\n mid = (lo + hi) >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {lo, hi};\n}\nconst _lookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] < value);\nconst _rlookupByKey = (table, key, value) =>\n _lookup(table, value, index => table[index][key] >= value);\nfunction _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while (start < end && values[start] < min) {\n start++;\n }\n while (end > start && values[end - 1] > max) {\n end--;\n }\n return start > 0 || end < values.length\n ? values.slice(start, end)\n : values;\n}\nconst arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [listener]\n }\n });\n arrayEvents.forEach((key) => {\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value(...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object) => {\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key) => {\n delete array[key];\n });\n delete array._chartjs;\n}\nfunction _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction _createResolver(scopes, prefixes = [''], rootScopes = scopes, fallback, getTarget = () => scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope) => _createResolver([scope, ...scopes], prefixes, rootScopes, fallback),\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get(target, prop) {\n return _cached(target, prop,\n () => _resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor(target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has(target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys(target) {\n return getKeysFromAllScopes(target);\n },\n set(target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\nfunction _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx) => _attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope) => _attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty(target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get(target, prop, receiver) {\n return _cached(target, prop,\n () => _resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor(target, prop) {\n return target._descriptors.allKeys\n ? Reflect.has(proxy, prop) ? {enumerable: true, configurable: true} : undefined\n : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf() {\n return Reflect.getPrototypeOf(proxy);\n },\n has(target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys() {\n return Reflect.ownKeys(proxy);\n },\n set(target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\nfunction _descriptors(proxy, defaults = {scriptable: true, indexable: true}) {\n const {_scriptable = defaults.scriptable, _indexable = defaults.indexable, _allKeys = defaults.allKeys} = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : () => _scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : () => _indexable\n };\n}\nconst readKey = (prefix, name) => prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value) => isObject(value) && prop !== 'adapters' &&\n (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const {_proxy, _context, _subProxy, _stack} = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const {_proxy, _context, _subProxy, _descriptors: descriptors} = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter(s => s !== arr);\n value = [];\n for (const item of arr) {\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent) => key === true ? parent\n : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes) {\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\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 return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [...parentScopes, ...rootScopes];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [''], rootScopes, fallback,\n () => subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target;\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes) {\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value)\n ? createSubResolver(scopes, proxy, prop, value)\n : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes) {\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes) {\n for (const key of Object.keys(scope).filter(k => !k.startsWith('_'))) {\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const {iScale} = meta;\n const {key = 'r'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\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 return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i) => i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis) => indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01;\n const 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}\nfunction monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen - 1; ++i) {\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\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 if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (let i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\nfunction splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for (i = 0; i < pointsLen; ++i) {\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i]\n : !pointAfter ? deltaK[i - 1]\n : (sign(deltaK[i - 1]) !== sign(deltaK[i])) ? 0\n : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\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 if (!inArea) {\n continue;\n }\n point = points[i];\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 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}\nfunction _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n if (options.spanGaps) {\n points = points.filter((pt) => !pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for (i = 0, ilen = points.length; i < ilen; ++i) {\n point = points[i];\n controlPoints = splineCurve(\n prev,\n point,\n points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen],\n options.tension\n );\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 if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\nfunction _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\nfunction _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\nfunction parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element) => window.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = ['top', 'right', 'bottom', 'left'];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for (let i = 0; i < 4; i++) {\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target) => (x > 0 || y > 0) && (!target || !target.shadowRoot);\nfunction getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const {offsetX, offsetY} = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {x, y, box};\n}\nfunction getRelativePosition(evt, chart) {\n if ('native' in evt) {\n return evt;\n }\n const {canvas, currentDevicePixelRatio} = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const {x, y, box} = getCanvasPosition(evt, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let {width, height} = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\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}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect();\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const 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 return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = v => Math.round(v * 10) / 10;\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let {width, height} = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\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 if (width && !height) {\n height = round1(width / 2);\n }\n return {\n width,\n height\n };\n}\nfunction retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = deviceHeight / pixelRatio;\n chart.width = deviceWidth / pixelRatio;\n const canvas = chart.canvas;\n if (canvas.style && (forceStyle || (!canvas.style.height && !canvas.style.width))) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio\n || canvas.height !== deviceHeight\n || 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 return false;\n}\nconst supportsEventListenerOptions = (function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive() {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n }\n return passiveSupported;\n}());\nfunction readUsedSize(element, property) {\n const value = getStyle(element, property);\n const 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}\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\n : mode === 'after' ? t < 1 ? p1.y : p2.y\n : t > 0 ? p2.y : p1.y\n };\n}\nfunction _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {x: p1.cp2x, y: p1.cp2y};\n const cp2 = {x: p2.cp1x, y: p2.cp1y};\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x(x) {\n return rectX + rectX + width - x;\n },\n setWidth(w) {\n width = w;\n },\n textAlign(align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus(x, value) {\n return x - value;\n },\n leftForLtr(x, itemWidth) {\n return x - itemWidth;\n },\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x(x) {\n return x;\n },\n setWidth(w) {\n },\n textAlign(align) {\n return align;\n },\n xPlus(x, value) {\n return x + value;\n },\n leftForLtr(x, _itemWidth) {\n return x;\n },\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction'),\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\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 return {\n between: _isBetween,\n compare: (a, b) => a - b,\n normalize: x => x\n };\n}\nfunction normalizeSegment({start, end, count, loop, style}) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const {property, start: startBound, end: endBound} = bounds;\n const {between, normalize} = propertyFn(property);\n const count = points.length;\n let {start, end, loop} = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for (i = 0, ilen = count; i < ilen; ++i) {\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {start, end, loop, style: segment.style};\n}\nfunction _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [segment];\n }\n const {property, start: startBound, end: endBound} = bounds;\n const count = points.length;\n const {compare, between, normalize} = propertyFn(property);\n const {start, end, loop, style} = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = () => between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = () => compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = () => inside || startIsBefore();\n const shouldStop = () => !inside || endIsBefore();\n for (let i = start, prev = start; i <= end; ++i) {\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({start: subStart, end: i, loop, count, style}));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({start: subStart, end, loop, count, style}));\n }\n return result;\n}\nfunction _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for (let i = 0; i < segments.length; i++) {\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\nfunction findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while (start < count && !points[start].skip) {\n start++;\n }\n }\n while (start < count && points[start].skip) {\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while (end > start && points[end % count].skip) {\n end--;\n }\n end %= count;\n return {start, end};\n}\nfunction solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for (end = start + 1; end <= max; ++end) {\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({start: start % count, end: (end - 1) % count, loop});\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({start: start % count, end: last % count, loop});\n }\n return result;\n}\nfunction _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const {start, end} = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [{start, end, loop}], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\nfunction splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\nfunction doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const {_datasetIndex: datasetIndex, options: {spanGaps}} = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while (points[s % count].skip) {\n s -= dir;\n }\n while (points[e % count].skip) {\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({start: s % count, end: e % count, loop: l, style: st});\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments) {\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for (i = start + 1; i <= segment.end; i++) {\n const 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\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\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}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { toFont as $, _rlookupByKey as A, _isPointInArea as B, getAngleFromPoint as C, toPadding as D, each as E, getMaximumSize as F, _getParentNode as G, HALF_PI as H, readUsedSize as I, throttled as J, supportsEventListenerOptions as K, _isDomSupported as L, log10 as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, toDegrees as S, TAU as T, _measureText as U, _int16Range as V, _alignPixel as W, clipArea as X, renderText as Y, unclipArea as Z, _arrayUnique as _, resolve as a, QUARTER_PI as a$, _toLeftRightCenter as a0, _alignStartEnd as a1, overrides as a2, merge as a3, _capitalize as a4, descriptors as a5, isFunction as a6, _attachContext as a7, _createResolver as a8, _descriptors as a9, _textX as aA, restoreTextDirection as aB, noop as aC, distanceBetweenPoints as aD, _setMinAndMaxByKey as aE, niceNum as aF, almostWhole as aG, almostEquals as aH, _decimalPlaces as aI, _longestText as aJ, _filterBetween as aK, _lookup as aL, isPatternOrGradient as aM, getHoverColor as aN, clone$1 as aO, _merger as aP, _mergerIf as aQ, _deprecated as aR, toFontString as aS, splineCurve as aT, splineCurveMonotone as aU, getStyle as aV, fontString as aW, toLineHeight as aX, PITAU as aY, INFINITY as aZ, RAD_PER_DEG as a_, mergeIf as aa, uid as ab, debounce as ac, retinaScale as ad, clearCanvas as ae, setsEqual as af, _elementsEqual as ag, _isClickEvent as ah, _isBetween as ai, _readValueToProps as aj, _updateBezierControlPoints as ak, _computeSegments as al, _boundSegments as am, _steppedInterpolation as an, _bezierInterpolation as ao, _pointInLine as ap, _steppedLineTo as aq, _bezierCurveTo as ar, drawPoint as as, addRoundedRectPath as at, toTRBL as au, toTRBLCorners as av, _boundSegment as aw, _normalizeAngle as ax, getRtlAdapter as ay, overrideTextDirection as az, isArray as b, TWO_THIRDS_PI as b0, _angleDiff as b1, 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, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n","/*!\n * Chart.js v3.8.0\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 isNumber, w as _limitValue, x as _lookupByKey, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _isPointInArea, C as getAngleFromPoint, D as toPadding, E as each, F as getMaximumSize, G as _getParentNode, I as readUsedSize, J as throttled, K as supportsEventListenerOptions, L as _isDomSupported, M as log10, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as toDegrees, U as _measureText, V as _int16Range, W as _alignPixel, X as clipArea, Y as renderText, Z as unclipArea, $ as toFont, a0 as _toLeftRightCenter, a1 as _alignStartEnd, a2 as overrides, a3 as merge, a4 as _capitalize, a5 as descriptors, a6 as isFunction, a7 as _attachContext, a8 as _createResolver, a9 as _descriptors, aa as mergeIf, ab as uid, ac as debounce, ad as retinaScale, ae as clearCanvas, af as setsEqual, ag as _elementsEqual, ah as _isClickEvent, ai as _isBetween, aj as _readValueToProps, ak as _updateBezierControlPoints, al as _computeSegments, am as _boundSegments, an as _steppedInterpolation, ao as _bezierInterpolation, ap as _pointInLine, aq as _steppedLineTo, ar as _bezierCurveTo, as as drawPoint, at as addRoundedRectPath, au as toTRBL, av as toTRBLCorners, aw as _boundSegment, ax as _normalizeAngle, ay as getRtlAdapter, az as overrideTextDirection, aA as _textX, aB as restoreTextDirection, aC as noop, aD as distanceBetweenPoints, aE as _setMinAndMaxByKey, aF as niceNum, aG as almostWhole, aH as almostEquals, aI as _decimalPlaces, aJ as _longestText, aK as _filterBetween, aL as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nclass Animator {\n constructor() {\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach(fn => fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, () => {\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart) => {\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for (; i >= 0; --i) {\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\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 return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur) => Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color(from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid\n ? c1.mix(c0, factor).hexString()\n : to;\n },\n number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to) {\n const currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n const 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 active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const 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 cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || (elapsed < duration));\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\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 wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej) => {\n promises.push({res, rej});\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for (let i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n}\n\nconst numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nconst 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});\nconst animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name) => name !== 'onProgress' && name !== 'onComplete' && name !== 'fn',\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: v => v | 0\n },\n }\n }\n});\nclass Animations {\n constructor(chart, config) {\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(key => {\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions) {\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [key]).forEach((prop) => {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(() => {\n target.options = newOptions;\n }, () => {\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for (i = props.length - 1; i >= 0; --i) {\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for (let i = 0; i < keys.length; i++) {\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {$shared: false, $animations: {}});\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\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 return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || (value === 0 || sign(value) === sign(otherValue)))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\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 return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || (stacked === undefined && meta.stack !== undefined);\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const {min, max, minDefined, maxDefined} = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()) {\n const value = stack[meta.index];\n if ((positive && value > 0) || (!positive && value < 0)) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const {chart, _cachedMeta: meta} = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const {iScale, vScale, index: datasetIndex} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for (let i = 0; i < ilen; ++i) {\n const item = parsed[i];\n const {[iAxis]: index, [vAxis]: value} = item;\n const 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}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter(key => scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent,\n {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n 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,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items) {\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n }\n}\nconst isDirectUpdateMode = (mode) => mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared) => shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart) => canStack && !meta.hidden && meta._stacked\n && {keys: getSortedDatasetIndices(chart, true), values: null};\nclass DatasetController {\n constructor(chart, datasetIndex) {\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 initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r) => axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const 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 getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale\n ? meta.vScale\n : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const 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 parse(start, count) {\n const {_cachedMeta: meta, _data: data} = this;\n const {iScale, _stacked} = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\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 const isNotInOrderComparedToPrev = () => cur[iAxis] === null || (prev && cur[iAxis] < prev[iAxis]);\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for (i = 0, ilen = count; i < ilen; ++i) {\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\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 return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const {xScale, yScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\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 return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return applyStack(stack, value, meta.index, {mode});\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n const {min: otherMin, max: otherMax} = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const 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 _update(mode) {\n const 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 update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || (elements.length - start);\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for (i = start; i < start + count; ++i) {\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset\n ? this.resolveDatasetElementOptions(mode)\n : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context ||\n (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 ||\n (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [`${elementType}Hover`, 'hover', elementType, ''] : [elementType, ''];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = () => this.getContext(index, active);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n 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 updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: (!active && this.getSharedOptions(options)) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList) {\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\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 _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr) => {\n arr.length += count;\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([this.index, ...args]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n}\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for (let i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b) => a - b));\n }\n return scale._cache.$bar;\n}\nfunction computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = () => {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\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 return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - (size / 2)\n };\n}\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\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 return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\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 return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\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 if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {start, end, reverse, top, bottom};\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n const {start, end, reverse, top, bottom} = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\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 res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\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 return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, {inflateAmount}, ratio) {\n properties.inflateAmount = inflateAmount === 'auto'\n ? ratio === 1 ? 0.33 : 0\n : inflateAmount;\n}\nclass BarController extends DatasetController {\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const {iScale, vScale} = meta;\n const {xAxisKey = 'x', yAxisKey = 'y'} = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\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 return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\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 getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {iScale, vScale} = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom)\n ? '[' + custom.start + ', ' + custom.end + ']'\n : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const {index, _cachedMeta: {vScale}} = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n for (let i = start; i < start + count; i++) {\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {base, head: base} : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n 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 if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const 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 _getStacks(last, dataIndex) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const metasets = iScale.getMatchingVisibleMetas(this._type);\n const stacked = iScale.options.stacked;\n const ilen = metasets.length;\n const stacks = [];\n let i, item;\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n if (!item.controller.options.grouped) {\n continue;\n }\n if (typeof dataIndex !== 'undefined') {\n const val = item.controller.getParsed(dataIndex)[\n item.controller._cachedMeta.vScale.axis\n ];\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n if (stacked === false || stacks.indexOf(item.stack) === -1 ||\n\t\t\t\t(stacked === undefined && item.stack === undefined)) {\n stacks.push(item.stack);\n }\n if (item.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = (name !== undefined)\n ? stacks.indexOf(name)\n : -1;\n return (index === -1)\n ? stacks.length - 1\n : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n 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 _calculateBarValuePixels(index) {\n const {_cachedMeta: {vScale, _stacked}, options: {base: baseValue, minBarLength}} = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex'\n ? computeFlexCategoryTraits(index, ruler, options, stackCount)\n : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\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 return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\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\nclass BubbleController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for (let i = 0; i < parsed.length; i++) {\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for (let i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const {xScale, yScale} = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {$shared: false});\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\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() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b) => _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const 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 return {ratioX, ratioY, offsetX, offsetY};\n}\nclass DoughnutController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i) => +data[i];\n if (isObject(data[start])) {\n const {key = 'value'} = this._parsing;\n getter = (i) => +resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for (let i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min,\n };\n }\n update(mode) {\n const chart = this.chart;\n const {chartArea} = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const {circumference, rotation} = this._getRotationExtents();\n const {ratioX, ratioY, offsetX, offsetY} = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\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 _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if ((reset && opts.animation.animateRotate) || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n let startAngle = this._getRotation();\n let i;\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n for (i = start; i < start + count; ++i) {\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for (i = 0; i < metaData.length; i++) {\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\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 if (!arcs) {\n return 0;\n }\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for (let i = 0, ilen = arcs.length; i < ilen; ++i) {\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for (let i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\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: (name) => name !== 'spacing',\n _indexable: (name) => name !== 'spacing',\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const 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 return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n label(tooltipItem) {\n let dataLabel = tooltipItem.label;\n const value = ': ' + tooltipItem.formattedValue;\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n return dataLabel;\n }\n }\n }\n }\n};\n\nclass LineController extends DatasetController {\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const {dataset: line, data: points = [], _dataset} = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let {start, count} = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const {iScale, vScale, _stacked, _dataset} = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const {spanGaps, segment} = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for (let i = start; i < start + count; ++i) {\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const 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 if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\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};\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const {iScale, _parsed} = meta;\n const axis = iScale.axis;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(\n _lookupByKey(_parsed, iScale.axis, min).lo,\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo),\n 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(\n _lookupByKey(_parsed, iScale.axis, max).hi + 1,\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1),\n start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {start, count};\n}\nfunction scaleRangesChanged(meta) {\n const {xScale, yScale, _scaleRanges} = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min\n\t\t|| _scaleRanges.xmax !== xScale.max\n\t\t|| _scaleRanges.ymin !== yScale.min\n\t\t|| _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nclass PolarAreaController extends DatasetController {\n constructor(chart, datasetIndex) {\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value,\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY};\n meta.data.forEach((element, index) => {\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? (outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - (radiusLength * this.index);\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for (i = start; i < start + count; i++) {\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index)\n ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle)\n : 0;\n }\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(chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const {labels: {pointStyle}} = chart.legend.options;\n return data.labels.map((label, i) => {\n const meta = chart.getDatasetMeta(0);\n const 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 return [];\n }\n },\n onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n 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\nclass PieController extends DoughnutController {\n}\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nclass RadarController extends DatasetController {\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for (let i = start; i < start + count; i++) {\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\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\nclass ScatterController extends LineController {\n}\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title() {\n return '';\n },\n 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};\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\nclass DateAdapter {\n constructor(options) {\n this.options = options || {};\n }\n formats() {\n return abstract();\n }\n parse(value, format) {\n return abstract();\n }\n format(timestamp, format) {\n return abstract();\n }\n add(timestamp, amount, unit) {\n return abstract();\n }\n diff(a, b, unit) {\n return abstract();\n }\n startOf(timestamp, unit, weekday) {\n return abstract();\n }\n endOf(timestamp, unit) {\n return abstract();\n }\n}\nDateAdapter.override = function(members) {\n Object.assign(DateAdapter.prototype, members);\n};\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const {controller, data, _sorted} = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {lo: start.lo, hi: end.hi};\n }\n }\n }\n return {lo: 0, hi: data.length - 1};\n}\nfunction evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n const {index, data} = metasets[i];\n const {lo, hi} = binarySearch(metasets[i], axis, value, intersect);\n for (let j = lo; j <= hi; ++j) {\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\nfunction getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\nfunction getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const {startAngle, endAngle} = element.getProps(['startAngle', 'endAngle'], useFinalPosition);\n const {angle} = getAngleFromPoint(element, {x: position.x, y: position.y});\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [{element, datasetIndex, index}];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({element, datasetIndex, index});\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\nfunction getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n evaluateInteractionItems,\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible)\n : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta) => {\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({element, datasetIndex: meta.index, index});\n }\n });\n return elements;\n },\n dataset(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) :\n getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for (let i = 0; i < data.length; ++i) {\n items.push({element: data[i], datasetIndex, index: i});\n }\n }\n return items;\n },\n point(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\nfunction filterByPosition(array, position) {\n return array.filter(v => v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(v => STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b) => {\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ?\n v0.index - v1.index :\n v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n ({position: pos, options: {stack, stackWeight = 1}} = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && (pos + stack),\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts) {\n const {stack, pos, stackWeight} = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {count: 0, placed: 0, weight: 0, size: 0});\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\nfunction setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const {vBoxMaxWidth, hBoxMaxHeight} = params;\n let i, ilen, layout;\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n const {fullSize} = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\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 return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter(wrap => wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n 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}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\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}\nfunction updateDims(chartArea, params, layout, stacks) {\n const {pos, box} = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {size: 0, count: 1};\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 if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal\n ? {same: widthChanged, other: heightChanged}\n : {same: heightChanged, other: widthChanged};\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {left: 0, top: 0, right: 0, bottom: 0};\n positions.forEach((pos) => {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal\n ? marginForPositions(['left', 'right'])\n : marginForPositions(['top', 'bottom']);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for (i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i) {\n layout = boxes[i];\n box = layout.box;\n box.update(\n layout.width || chartArea.w,\n layout.height || chartArea.h,\n getMargins(layout.horizontal, chartArea)\n );\n const {same, other} = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\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}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let {x, y} = chartArea;\n for (const layout of boxes) {\n const box = layout.box;\n const stack = stacks[layout.stack] || {count: 1, placed: 0, weight: 1};\n const weight = (layout.stackWeight / stack.weight) || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\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 stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\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 stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\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(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [{\n z: 0,\n draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n chart.boxes.push(item);\n },\n removeBox(chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, box => {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap) =>\n wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\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, (layout) => {\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {left: 0, top: 0, right: 0, bottom: 0});\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\nconst 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};\nconst isNullOrEmpty = value => value === null || value === '';\nfunction initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const 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 if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const {x, y} = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null,\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList) {\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver(entries => {\n let trigger = false;\n for (const entry of entries) {\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {childList: true, subtree: true});\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart) => {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height) => {\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event) => {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, (args) => {\n const event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\nclass DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach((prop) => {\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key) => {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas)) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n constructor() {\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n tooltipPosition(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n return this;\n }\n const ret = {};\n props.forEach(prop => {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\nElement.defaults = {};\nElement.defaultRoutes = undefined;\n\nconst formatters = {\n values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {notation, minimumFractionDigits: numDecimal, maximumFractionDigits: numDecimal};\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = tickValue / (Math.pow(10, Math.floor(log10(tickValue))));\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\nvar Ticks = {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: (_ctx, options) => options.lineWidth,\n tickColor: (_ctx, options) => options.color,\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: (name) => !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name) => name !== 'borderDash' && name !== 'tickBorderDash',\n});\ndefaults.describe('scales', {\n _fallback: 'scale',\n});\ndefaults.describe('scale.ticks', {\n _scriptable: (name) => name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name) => name !== 'backdropPadding',\n});\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for (let i = 0, ilen = factors.length - 1; i < ilen; i++) {\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\nfunction getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\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}\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\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}\nfunction getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\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 return diff;\n}\n\nconst reverseAlign = (align) => align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset) => edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nfunction sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\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 lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\nfunction garbageCollect(caches, length) {\n each(caches, (cache) => {\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return (lines * font.lineHeight) + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if ((reverse && position !== 'right') || (!reverse && position === 'right')) {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const {top, left, bottom, right, chart} = scale;\n const {chartArea, scales} = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const 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 maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const 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 titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {titleX, titleY, maxWidth, rotation};\n}\nclass Scale extends Element {\n constructor(cfg) {\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n 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 parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let {_userMin, _userMax, _suggestedMin, _suggestedMax} = this;\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 getMinMax(canStack) {\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {min, max};\n }\n const metas = this.getMatchingVisibleMetas();\n for (let i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\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 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 getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n update(maxWidth, maxHeight, margins) {\n const {beginAtZero, grace, ticks: tickOpts} = this.options;\n const 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()\n ? this.width + margins.left + margins.right\n : this.height + margins.top + margins.bottom;\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 this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\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 if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\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 this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n 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 this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\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 afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = this.ticks.length;\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid)\n\t\t\t\t- tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(\n Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)),\n Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))\n ));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const {chart, options: {ticks: tickOpts, title: titleOpts, grid: gridOpts}} = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\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 if (tickOpts.display && this.ticks.length) {\n const {first, last, widest, highest} = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\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 _calculatePadding(first, last, sin, cos) {\n const {ticks: {align, padding}, position} = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\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 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 let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\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 this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _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 afterFit() {\n callback(this.options.afterFit, [this]);\n }\n isHorizontal() {\n const {axis, position} = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\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 this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length) {\n const {ctx, _longestTextCache: caches} = this;\n const widths = [];\n const heights = [];\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\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] || {data: {}, gc: []};\n lineHeight = tickFont.lineHeight;\n width = height = 0;\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 if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\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 garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx) => ({width: widths[idx] || 0, height: heights[idx] || 0});\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights,\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const {min, max} = this;\n return min < 0 && max < 0 ? max :\n min > 0 && max > 0 ? min :\n 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context ||\n\t\t\t\t(tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context ||\n\t\t\t(this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal()\n ? h * cos > w * sin ? w / cos : h / sin\n : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const {grid, position} = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\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 const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\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 const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for (i = 0; i < ticksLength; i += step) {\n const optsAtIndex = grid.setContext(this.getContext(i));\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = grid.borderDash || [];\n const borderDashOffset = optsAtIndex.borderDashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset,\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const {position, ticks: optionTicks} = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const {align, crossAlign, padding, mirror} = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\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 const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\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 const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\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 const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n const 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 const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\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 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 if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = y + textOffset - labelPadding.top;\n let left = x - labelPadding.left;\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor,\n };\n }\n items.push({\n rotation,\n label,\n font,\n color,\n strokeColor,\n strokeWidth,\n textOffset,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [x, y],\n backdrop,\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const {position, ticks} = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\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 return align;\n }\n _getYAxisLabelAlignment(tl) {\n const {position, ticks: {crossAlign, mirror, padding}} = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\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 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 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 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 return {textAlign, x};\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {top: 0, left: this.left, bottom: chart.height, right: this.right};\n } if (position === 'top' || position === 'bottom') {\n return {top: this.top, left: 0, bottom: this.bottom, right: chart.width};\n }\n }\n drawBackground() {\n const {ctx, options: {backgroundColor}, left, top, width, height} = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex(t => t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style) => {\n if (!style.width || !style.color) {\n return;\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 if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine(\n {x: item.x1, y: item.y1},\n {x: item.x2, y: item.y2},\n item\n );\n }\n if (grid.drawTicks) {\n drawLine(\n {x: item.tx1, y: item.ty1},\n {x: item.tx2, 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 drawBorder() {\n const {chart, ctx, options: {grid}} = this;\n const borderOpts = grid.setContext(this.getContext());\n const axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\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 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 drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n let i, ilen;\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n const item = items[i];\n const tickFont = item.font;\n const label = item.label;\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 let y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const {ctx, options: {position, title, reverse}} = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const {titleX, titleY, maxWidth, rotation} = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: (chartArea) => {\n this.draw(chartArea);\n }\n }];\n }\n return [{\n z: gz,\n draw: (chartArea) => {\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: () => {\n this.drawBorder();\n }\n }, {\n z: tz,\n draw: (chartArea) => {\n this.drawLabels(chartArea);\n }\n }];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override) {\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(property => {\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [scope].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor() {\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 add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [...args].forEach(arg => {\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || (reg === this.plugins && arg.id)) {\n this._exec(method, reg, arg);\n } else {\n each(arg, item => {\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for (let i = 0; i < this._typedRegistries.length; i++) {\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = new Registry();\n\nclass PluginService {\n constructor() {\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors) {\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [chart, args, descriptor.options];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b) => a.filter(x => !b.some(y => x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\nfunction allPlugins(config) {\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for (let i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for (let i = 0; i < local.length; i++) {\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n return plugins;\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, plugins, options, all) {\n const result = [];\n const context = chart.getContext();\n for (let i = 0; i < plugins.length; i++) {\n const plugin = plugins[i];\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, plugin, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {scriptable: false, indexable: false, allKeys: true});\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {scales: {}};\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const firstIDs = Object.create(null);\n const scales = Object.create(null);\n Object.keys(configScales).forEach(id => {\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{axis}, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(dataset => {\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(defaultID => {\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{axis}, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(key => {\n const scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key) => {\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config) {\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType,\n () => [[\n `datasets.${datasetType}`,\n ''\n ]]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`,\n () => [\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`,\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`,\n () => [[\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`,\n () => [[\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || [],\n ]]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const {options, type} = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach(keys => {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(key => addIfFound(scopes, mainScope, key));\n }\n keys.forEach(key => addIfFound(scopes, options, key));\n keys.forEach(key => addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach(key => addIfFound(scopes, defaults, key));\n keys.forEach(key => addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const {options, type} = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {type},\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = ['']) {\n const result = {$shared: true};\n const {resolver, subPrefixes} = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names) {\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [''], descriptorDefaults) {\n const {resolver} = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context)\n ? _attachContext(resolver, context, undefined, descriptorDefaults)\n : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter(p => !p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = value => isObject(value)\n && Object.getOwnPropertyNames(value).reduce((acc, key) => acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const {isScriptable, isIndexable} = _descriptors(proxy);\n for (const prop of names) {\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if ((scriptable && (isFunction(value) || hasFunction(value)))\n || (indexable && isArray(value))) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"3.8.0\";\n\nconst KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || (KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x');\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1]\n ? a[l2] - b[l2]\n : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\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 if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key) => {\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c) => c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys) {\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nclass Chart {\n constructor(item, userConfig) {\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error(\n 'Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' +\n\t\t\t\t' must be destroyed before the canvas can be reused.'\n );\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const 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(mode => this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const {options: {aspectRatio, maintainAspectRatio}, width, height, _aspectRatio} = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {width, height};\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {size: newSize});\n callback(options.onResize, [this, newSize], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID) => {\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id) => {\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(\n Object.keys(scaleOpts).map((id) => {\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const 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, (item) => {\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id) => {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale) => {\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b) => a.index - b.index);\n if (numMeta > numData) {\n for (let i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const {_metasets: metasets, data: {datasets}} = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index) => {\n if (datasets.filter(x => x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\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 if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const {datasetElementType, dataElementType} = defaults.datasets[type];\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 this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex) => {\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n const {controller} = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller) => {\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {mode});\n this._layers.sort(compare2Level('z', '_idx'));\n const {_active, _lastEvent} = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale) => {\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const {_hiddenIndices} = this;\n const changes = this._getUniformDataChanges() || [];\n for (const {method, start, count} of changes) {\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx) => new Set(\n _dataChanges\n .filter(c => c[0] === idx)\n .map((c, i) => i + ',' + c.splice(1).join(','))\n );\n const changeSet = makeSet(0);\n for (let i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet)\n .map(c => c.split(','))\n .map(a => ({method: a[1], start: +a[2], count: +a[3]}));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {cancelable: true}) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box) => {\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index) => {\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {mode, cancelable: true}) === false) {\n return;\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n for (let i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._updateDataset(i, isFunction(mode) ? mode({datasetIndex: i}) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {mode});\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {meta, index, mode, cancelable: true};\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {cancelable: true}) === false) {\n return;\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({chart: this});\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const {width, height} = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {cancelable: true}) === false) {\n return;\n }\n const layers = this._layers;\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {cancelable: true}) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\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 meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter(x => x && x._dataset === dataset).pop();\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 return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {chart: this, type: 'chart'}));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {visible});\n this.update((ctx) => ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const {canvas, ctx} = this;\n this._stop();\n this.config.clearCache();\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 this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y) => {\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type) => _add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener) => {\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener) => {\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height) => {\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = () => {\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = () => {\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type) => {\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b) => a.filter(x => !b.some(y => x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin) => (plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const {_active: lastActive = [], options} = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nconst invalidatePlugins = () => each(Chart.instances, (chart) => chart._plugins.invalidate());\nconst enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable,\n value: defaults\n },\n instances: {\n enumerable,\n value: instances\n },\n overrides: {\n enumerable,\n value: overrides\n },\n registry: {\n enumerable,\n value: registry\n },\n version: {\n enumerable,\n value: version\n },\n getChart: {\n enumerable,\n value: getChart\n },\n register: {\n enumerable,\n value: (...items) => {\n registry.add(...items);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable,\n value: (...items) => {\n registry.remove(...items);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n const {startAngle, pixelMargin, x, y, outerRadius, innerRadius} = element;\n let angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\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 ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n const computeOuterLimit = (val) => {\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\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}\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta),\n };\n}\nfunction pathArc(ctx, element, offset, spacing, end) {\n const {x, y, startAngle: start, pixelMargin, innerRadius: innerR} = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? (alpha * avNogSpacingRadius) / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const {outerStart, outerEnd, innerStart, innerEnd} = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n ctx.arc(x, y, innerRadius, endAngle - (innerEnd / innerRadius), startAngle + (innerStart / innerRadius), true);\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing) {\n const {fullCircles, startAngle, circumference} = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n for (let i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\nfunction drawFullCircleBorders(ctx, element, inner) {\n const {x, y, startAngle, pixelMargin, fullCircles} = element;\n const outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n const innerRadius = element.innerRadius + pixelMargin;\n let i;\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n const {options} = element;\n const {borderWidth, borderJoinStyle} = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\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 if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\nclass ArcElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps(['x', 'y'], useFinalPosition);\n const {angle, distance} = getAngleFromPoint(point, {x: chartX, y: chartY});\n const {startAngle, endAngle, innerRadius, outerRadius, circumference} = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return (betweenAngles && withinRadius);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, startAngle, endAngle, innerRadius, outerRadius} = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference',\n ], useFinalPosition);\n const {offset, spacing} = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const 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 tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const {options, circumference} = this;\n const offset = (options.offset || 0) / 2;\n const spacing = (options.spacing || 0) / 2;\n this.pixelMargin = (options.borderAlign === 'inner') ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n let radiusOffset = 0;\n if (offset) {\n radiusOffset = offset / 2;\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n const endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\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};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = 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}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\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 prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\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 lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\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}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\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: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\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 getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\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 const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\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 return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const 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}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const 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}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const 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\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}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const 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}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\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 ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\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};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\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 avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\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 return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\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() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\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 const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\nfunction _getTargetPixel(fill, scale) {\n let pixel = null;\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 return pixel;\n}\nfunction _getTargetValue(fill, scale, startValue) {\n let value;\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 return value;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\n\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const 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 for (let i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\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 lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\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,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n 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 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 buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\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 this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\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 hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\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 } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\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 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 }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let 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 const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const 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 if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\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 ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(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 const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\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 overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\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 _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\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}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n 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(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\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: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const 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: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\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 maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const 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};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const 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};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\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 return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n 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,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\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, (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 {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\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 if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let {x, width} = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= (width / 2);\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let {y, height} = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= (height / 2);\n }\n return y;\n}\nfunction getBackgroundPoint(options, size, alignment, chart) {\n const {caretSize, caretPadding, cornerRadius} = options;\n const {xAlign, yAlign} = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\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 return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center'\n ? tooltip.x + tooltip.width / 2\n : align === 'right'\n ? tooltip.x + tooltip.width - padding.right\n : tooltip.x + padding.left;\n}\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nclass Tooltip extends Element {\n constructor(config) {\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart || config._chart;\n this._chart = this.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context ||\n\t\t\t(this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const {callbacks} = options;\n const beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n const title = callbacks.title.apply(this, [context]);\n const afterTitle = callbacks.afterTitle.apply(this, [context]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n getBody(tooltipItems, options) {\n const {callbacks} = options;\n const bodyItems = [];\n each(tooltipItems, (context) => {\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(this, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(this, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n getFooter(tooltipItems, options) {\n const {callbacks} = options;\n const beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n const footer = callbacks.footer.apply(this, [tooltipItems]);\n const afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array) => options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b) => options.itemSort(a, b, data));\n }\n each(tooltipItems, (context) => {\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(this, context));\n labelPointStyles.push(scoped.labelPointStyle.call(this, context));\n labelTextColors.push(scoped.labelTextColor.call(this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const 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 const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const 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 this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {chart: this.chart, tooltip: this, replay});\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const 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 getCaretPosition(tooltipPoint, size, options) {\n const {xAlign, yAlign} = this;\n const {caretSize, cornerRadius} = options;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(cornerRadius);\n const {x: ptX, y: ptY} = tooltipPoint;\n const {width, height} = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + (height / 2);\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 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 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 y3 = y1;\n }\n return {x1, x2, x3, y1, y2, y3};\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const 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 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 if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const {boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some(v => v !== 0)) {\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 ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const {body} = this;\n const {bodySpacing, bodyAlign, displayColors, boxHeight, boxWidth, boxPadding} = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let 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'\n ? bodyAlign === 'center' ? (boxWidth / 2 + boxPadding) : (boxWidth + 2 + boxPadding)\n : 0;\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 if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const 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 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 drawBackground(pt, ctx, tooltipSize, options) {\n const {xAlign, yAlign} = this;\n const {x, y} = pt;\n const {width, height} = tooltipSize;\n const {topLeft, topRight, bottomLeft, bottomRight} = toTRBLCorners(options.cornerRadius);\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 if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\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 this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\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 getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({datasetIndex, index}) => {\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index,\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\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 return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const {caretX, caretY, options} = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({chart, options});\n }\n },\n beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw(chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent(chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\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 },\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: (ctx, opts) => opts.bodyFont.size,\n boxWidth: (ctx, opts) => opts.bodyFont.size,\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(tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\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 return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const 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() {\n return this.options.bodyColor;\n },\n labelPointStyle(tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const 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: (name) => name !== 'filter' && name !== 'itemSort' && name !== 'external',\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};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels) => {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({index, label: raw});\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max) => index === null ? null : _limitValue(Math.round(index), 0, max);\nclass CategoryScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const {index, label} of added) {\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index\n : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let 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 for (let value = min; value <= max; value++) {\n ticks.push({value});\n }\n return ticks;\n }\n getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const {bounds, step, min, max, precision, count, maxTicks, maxDigits, includeBounds} = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const {min: rmin, max: rmax} = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{value: rmin}, {value: rmax}];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\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 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 if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(\n _decimalPlaces(spacing),\n _decimalPlaces(niceMin)\n );\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({value: min});\n if (niceMin < min) {\n j++;\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 for (; j < numSpaces; ++j) {\n ticks.push({value: Math.round((niceMin + j * spacing) * factor) / factor});\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({value: max});\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({value: niceMax});\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, {horizontal, minRotation}) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const {beginAtZero} = this.options;\n const {minDefined, maxDefined} = this.getUserBounds();\n let {min, max} = this;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = 1;\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let {maxTicksLimit, stepSize} = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n 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 const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\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 return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n const remain = tickVal / (Math.pow(10, Math.floor(log10(tickVal))));\n return remain === 1;\n}\nfunction generateTicks(generationOptions, dataRange) {\n const endExp = Math.floor(log10(dataRange.max));\n const endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n const ticks = [];\n let tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n let exp = Math.floor(log10(tickVal));\n let significand = Math.floor(tickVal / Math.pow(10, exp));\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n do {\n ticks.push({value: tickVal, major: isMajor(tickVal)});\n ++significand;\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || (exp === endExp && significand < endSignificand));\n const lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({value: lastTick, major: isMajor(tickVal)});\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n constructor(cfg) {\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const {min, max} = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const {minDefined, maxDefined} = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = v => (min = minDefined ? min : v);\n const setMax = v => (max = maxDefined ? max : v);\n const exp = (v, m) => Math.pow(10, Math.floor(log10(v)) + m);\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 if (min <= 0) {\n setMin(exp(max, -1));\n }\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\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 return ticks;\n }\n getLabelForValue(value) {\n return value === undefined\n ? '0'\n : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min\n ? 0\n : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\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 const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\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}\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 return {\n start: pos,\n end: pos + size\n };\n}\nfunction fitWithPointLabels(scale) {\n const 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 const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(\n orig.l - limits.l,\n limits.r - orig.r,\n orig.t - limits.t,\n limits.b - orig.b\n );\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\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 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}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for (let i = 0; i < valueCount; i++) {\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= (w / 2);\n }\n return x;\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 return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const {ctx, options: {pointLabels}} = scale;\n for (let i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const {x, y, textAlign, left, top, right, bottom} = scale._pointLabelItems[i];\n const {backdropColor} = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some(v => v !== 0)) {\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 renderText(\n ctx,\n scale._pointLabels[i],\n x,\n y + (plFont.lineHeight / 2),\n plFont,\n {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n }\n );\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const {ctx} = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for (let i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const {color, lineWidth} = gridLineOpts;\n if ((!circular && !labelCount) || !color || !lineWidth || radius < 0) {\n return;\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}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n constructor(cfg) {\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const 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 determineDataLimits() {\n const {min, max} = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels()\n .map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n })\n .filter((v, i) => this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n 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 getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const 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\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const {left, top, right, bottom} = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom,\n };\n }\n drawBackground() {\n const {backgroundColor, grid: {circular}} = this.options;\n if (backgroundColor) {\n const 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 drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const {angleLines, grid} = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index) => {\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const optsAtIndex = grid.setContext(this.getContext(index - 1));\n drawRadiusLine(this, optsAtIndex, offset, labelCount);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for (i = labelCount - 1; i >= 0; i--) {\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const {color, lineWidth} = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\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 ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let 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((tick, index) => {\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(\n -width / 2 - padding.left,\n -offset - tickFont.size / 2 - padding.top,\n width + padding.width,\n 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 drawTitle() {}\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(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};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\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 _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\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 const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map(tick => +tick.value));\n }\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\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 const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\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 getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\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 let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\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 if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\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 };\n","import { Chart, BarController, DoughnutController, LineController, PieController, PolarAreaController, RadarController, BubbleController, ScatterController } from 'chart.js';\n\nvar ChartEmits;\n(function(ChartEmits) {\n ChartEmits[\"ChartRendered\"] = \"chart:rendered\";\n ChartEmits[\"ChartUpdated\"] = \"chart:updated\";\n ChartEmits[\"ChartDestroyed\"] = \"chart:destroyed\";\n ChartEmits[\"LabelsUpdated\"] = \"labels:updated\";\n})(ChartEmits || (ChartEmits = {}));\nfunction chartCreate(createChartFunction, chartData, chartOptions, context) {\n createChartFunction(chartData, chartOptions);\n if (context !== undefined) {\n context.emit(ChartEmits.ChartRendered);\n }\n}\nfunction chartUpdate(chart, context) {\n chart.update();\n if (context !== undefined) {\n context.emit(ChartEmits.ChartUpdated);\n }\n}\nfunction chartDestroy(chart, context) {\n chart.destroy();\n if (context !== undefined) {\n context.emit(ChartEmits.ChartDestroyed);\n }\n}\nfunction getChartData(data, datasetIdKey) {\n const nextData = {\n labels: typeof data.labels === \"undefined\" ? [] : [\n ...data.labels\n ],\n datasets: []\n };\n setChartDatasets(nextData, {\n ...data\n }, datasetIdKey);\n return nextData;\n}\nfunction setChartDatasets(oldData, newData, datasetIdKey) {\n const addedDatasets = [];\n oldData.datasets = newData.datasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = oldData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction setChartLabels(chart, labels, context) {\n chart.data.labels = labels;\n if (context !== undefined) {\n context.emit(ChartEmits.LabelsUpdated);\n }\n}\nfunction setChartOptions(chart, options) {\n chart.options = {\n ...options\n };\n}\nfunction compareData(newData, oldData) {\n // Get new and old DataSet Labels\n const newDatasetLabels = newData.datasets.map((dataset)=>{\n return dataset.label;\n });\n const oldDatasetLabels = oldData.datasets.map((dataset)=>{\n return dataset.label;\n });\n // Check if Labels are equal and if dataset length is equal\n return oldData.datasets.length === newData.datasets.length && newDatasetLabels.every((value, index)=>value === oldDatasetLabels[index]);\n}\nconst templateError = \"Please remove the tags from your chart component. See https://vue-chartjs.org/guide/#vue-single-file-components\";\n\nconst ANNOTATION_PLUGIN_KEY = \"annotation\";\nfunction generateChart(chartId, chartType, chartController) {\n let _chartRef = {};\n return {\n props: {\n chartData: {\n type: Object,\n required: true\n },\n chartOptions: {\n type: Object,\n default: ()=>{}\n },\n datasetIdKey: {\n type: String,\n default: \"label\"\n },\n chartId: {\n type: String,\n default: chartId\n },\n width: {\n type: Number,\n default: 400\n },\n height: {\n type: Number,\n default: 400\n },\n cssClasses: {\n type: String,\n default: \"\"\n },\n styles: {\n type: Object,\n default: ()=>{}\n },\n plugins: {\n type: Array,\n default: ()=>[]\n }\n },\n data () {\n return {\n _chart: null,\n _id: Math.random().toString(36).substring(2)\n };\n },\n computed: {\n hasAnnotationPlugin () {\n var ref, ref1;\n const pluginSettings = (ref = this.chartOptions) === null || ref === void 0 ? void 0 : (ref1 = ref.plugins) === null || ref1 === void 0 ? void 0 : ref1[ANNOTATION_PLUGIN_KEY];\n return typeof pluginSettings !== \"undefined\";\n }\n },\n created () {\n Chart.register(chartController);\n },\n mounted () {\n _chartRef[this.$data._id] = null;\n if (\"datasets\" in this.chartData && this.chartData.datasets.length > 0) {\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n this.$emit(ChartEmits.ChartRendered);\n }\n },\n watch: {\n chartData: {\n handler: function(newValue, oldValue) {\n this.chartDataHandler(newValue, oldValue);\n },\n deep: true\n },\n chartOptions: {\n handler: function(newValue) {\n this.chartOptionsHandler(newValue);\n },\n deep: true\n }\n },\n methods: {\n renderChart (data, options) {\n const currentChart = this.getCurrentChart();\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n if (!this.$refs.canvas) {\n throw new Error(templateError);\n } else {\n const chartData = getChartData(data, this.datasetIdKey);\n const canvasEl2DContext = this.$refs.canvas.getContext(\"2d\");\n if (canvasEl2DContext !== null) {\n this.setCurrentChart(new Chart(canvasEl2DContext, {\n type: chartType,\n data: chartData,\n options,\n plugins: this.plugins\n }));\n }\n }\n },\n chartDataHandler (newValue, oldValue) {\n const newData = {\n ...newValue\n };\n const oldData = {\n ...oldValue\n };\n const currentChart = this.getCurrentChart();\n if (Object.keys(oldData).length > 0) {\n const isEqualLabelsAndDatasetsLength = compareData(newData, oldData);\n if (isEqualLabelsAndDatasetsLength && currentChart !== null) {\n setChartDatasets(currentChart.data, newData, this.datasetIdKey);\n if (newData.labels !== undefined) {\n setChartLabels(currentChart, newData.labels);\n this.$emit(ChartEmits.LabelsUpdated);\n }\n this.updateChart();\n this.$emit(ChartEmits.ChartUpdated);\n } else {\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n this.$emit(ChartEmits.ChartRendered);\n }\n } else {\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n this.$emit(ChartEmits.ChartRendered);\n }\n },\n chartOptionsHandler (options) {\n const currentChart = this.getCurrentChart();\n if (currentChart !== null) {\n setChartOptions(currentChart, options);\n this.updateChart();\n } else {\n chartCreate(this.renderChart, this.chartData, this.chartOptions);\n }\n },\n updateChart () {\n const currentChart = this.getCurrentChart();\n chartUpdate(currentChart);\n },\n getCurrentChart () {\n return this.hasAnnotationPlugin ? _chartRef[this.$data._id] : this.$data._chart;\n },\n setCurrentChart (chart) {\n this.hasAnnotationPlugin ? _chartRef[this.$data._id] = chart : this.$data._chart = chart;\n }\n },\n beforeDestroy () {\n const currentChart = this.getCurrentChart();\n if (currentChart !== null) {\n chartDestroy(currentChart);\n this.$emit(ChartEmits.ChartDestroyed);\n }\n },\n render: function(createElement) {\n return createElement(\"div\", {\n style: this.styles,\n class: this.cssClasses\n }, [\n createElement(\"canvas\", {\n attrs: {\n id: this.chartId,\n width: this.width,\n height: this.height\n },\n ref: \"canvas\"\n })\n ]);\n }\n };\n}\n/** @type Object */ const Bar = /* #__PURE__ */ generateChart(\"bar-chart\", \"bar\", BarController);\n/** @type Object */ const Doughnut = /* #__PURE__ */ generateChart(\"doughnut-chart\", \"doughnut\", DoughnutController);\n/** @type Object */ const Line = /* #__PURE__ */ generateChart(\"line-chart\", \"line\", LineController);\n/** @type Object */ const Pie = /* #__PURE__ */ generateChart(\"pie-chart\", \"pie\", PieController);\n/** @type Object */ const PolarArea = /* #__PURE__ */ generateChart(\"polar-chart\", \"polarArea\", PolarAreaController);\n/** @type Object */ const Radar = /* #__PURE__ */ generateChart(\"radar-chart\", \"radar\", RadarController);\n/** @type Object */ const Bubble = /* #__PURE__ */ generateChart(\"bubble-chart\", \"bubble\", BubbleController);\n/** @type Object */ const Scatter = /* #__PURE__ */ generateChart(\"scatter-chart\", \"scatter\", ScatterController);\n\nexport { Bar, Bubble, Doughnut, Line, Pie, PolarArea, Radar, Scatter, generateChart };\n//# sourceMappingURL=index.js.map\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"dropdown-container\"},[_c('b-dropdown',{staticClass:\"w-100 column drop-button\",attrs:{\"size\":\"sm\",\"toggle-class\":\"buttonclass\",\"variant\":\"outline-secondary\",\"text\":_vm.label},scopedSlots:_vm._u([{key:\"button-content\",fn:function(){return [_c('span',{staticClass:\"dropdown-label\"},[_vm._v(_vm._s(_vm.label))])]},proxy:true}])},[(_vm.dropdownInfoText)?_c('b-dropdown-text',{staticStyle:{\"width\":\"240px\"}},[_vm._v(\" \"+_vm._s(_vm.dropdownInfoText)+\" \")]):_vm._e(),_c('b-form-group',{staticClass:\"checkboxcolumn\"},[_c('b-form-checkbox',{staticClass:\"select-all-checkbox\",on:{\"change\":_vm.selectAll},model:{value:(_vm.allIsSelected),callback:function ($$v) {_vm.allIsSelected=$$v},expression:\"allIsSelected\"}},[_vm._v(\" \"+_vm._s(_vm.allIsSelected ? \"Avmarkera alla\" : \"Välj Alla\")+\" \")]),_c('b-form-checkbox-group',{staticClass:\"selection-checkboxes\",attrs:{\"options\":_vm.optionsArray,\"stacked\":\"\"},nativeOn:{\"click\":function($event){_vm.allIsSelected = false}},model:{value:(_vm.selected),callback:function ($$v) {_vm.selected=$$v},expression:\"selected\"}})],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxDropdownOptions.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CheckboxDropdownOptions.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./CheckboxDropdownOptions.vue?vue&type=template&id=45f41178&scoped=true&\"\nimport script from \"./CheckboxDropdownOptions.vue?vue&type=script&lang=js&\"\nexport * from \"./CheckboxDropdownOptions.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CheckboxDropdownOptions.vue?vue&type=style&index=0&id=45f41178&scoped=true&lang=css&\"\nimport style1 from \"./CheckboxDropdownOptions.vue?vue&type=style&index=1&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"45f41178\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultDiagramMainChannel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultDiagramMainChannel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResultDiagramMainChannel.vue?vue&type=template&id=163c30a5&scoped=true&\"\nimport script from \"./ResultDiagramMainChannel.vue?vue&type=script&lang=js&\"\nexport * from \"./ResultDiagramMainChannel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResultDiagramMainChannel.vue?vue&type=style&index=0&id=163c30a5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"163c30a5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('label',{staticClass:\"totalRowsStyle float-left\"},[_vm._v(\" \"+_vm._s(_vm.getRowCount)+\" \")]),_c('b-table',{staticClass:\"tablemainresultclass\",attrs:{\"thead-class\":\"stickyfancytableheader\",\"fields\":_vm.fields,\"per-page\":_vm.visibleRows,\"current-page\":_vm.currentPage,\"select-mode\":\"multi\",\"items\":_vm.levelOneSitesWithLevelTwoSites,\"bordered\":\"\",\"small\":\"\",\"busy\":_vm.loading,\"striped\":\"\",\"head-variant\":'dark',\"sort-compare-options\":{ numeric: true, sensitivity: 'base' },\"sort-compare-locale\":\"sv\",\"sort-by\":_vm.sortBy,\"sort-desc\":_vm.sortDesc},on:{\"update:sortBy\":function($event){_vm.sortBy=$event},\"update:sort-by\":function($event){_vm.sortBy=$event},\"update:sortDesc\":function($event){_vm.sortDesc=$event},\"update:sort-desc\":function($event){_vm.sortDesc=$event},\"sort-changed\":_vm.onSort},scopedSlots:_vm._u([{key:\"top-row\",fn:function(){return _vm._l((_vm.fields),function(field){return _c('td',{key:field.key,staticClass:\"summary-row\",class:field.tdClass},[_vm._v(\" \"+_vm._s(_vm.getSummaryRowData[field.key])+\" \")])})},proxy:true},{key:\"cell(plussign)\",fn:function(row){return [(row.item.numberOfLvl2Objects > 1)?_c('div',{staticClass:\"plusminuscontainer\"},[_c('div',{staticClass:\"plusminusbutton\",on:{\"click\":function($event){return _vm.clickedPlusMinusSign(row)}}},[(!row.item._showDetails)?_c('font-awesome-icon',{staticClass:\"plusminusicon\",attrs:{\"icon\":\"fa fa-plus-circle\"}}):_c('font-awesome-icon',{staticClass:\"plusminusicon\",attrs:{\"icon\":\"fa fa-minus-circle fa-1x\"}}),_c('div',{staticClass:\"plusminusline\"})],1)]):(row.item.numberOfLvl2Objects === 1)?_c('div',[_vm._v(\" \"+_vm._s(_vm.setLevelOneSiteToLevelTwoSite(row.item))+\" \")]):_vm._e()]}},{key:\"head()\",fn:function(field){return [_c('span',{staticClass:\"measureheader\",domProps:{\"innerHTML\":_vm._s(_vm.getTableFieldLabel(field))}})]}},{key:\"cell(providerName)\",fn:function(row){return [_c('span',{domProps:{\"innerHTML\":_vm._s(row.item.providerName)}})]}},{key:\"row-details\",fn:function(row){return [_c('b-table-lite',{staticClass:\"mb-0 detail-row-table\",class:_vm.groupClassOddEven(row.index),attrs:{\"tbody-tr-class\":_vm.detailRowClassOddEven(row.index),\"borderless\":\"\",\"thead-class\":\"hideheader\",\"fields\":_vm.fields,\"items\":row.item.levelTwoSites},scopedSlots:_vm._u([{key:\"cell(chosen)\",fn:function(row){return [_c('b-form-checkbox',{staticClass:\"choose-checkbox-div\",model:{value:(row.item.chosen),callback:function ($$v) {_vm.$set(row.item, \"chosen\", $$v)},expression:\"row.item.chosen\"}})]}},{key:\"cell(providerName)\",fn:function(row){return [_c('span',{domProps:{\"innerHTML\":_vm._s(row.item.providerName)}})]}}],null,true)})]}}])}),_c('b-pagination',{staticClass:\"justify-content-center\",attrs:{\"total-rows\":_vm.$store.getters.getChannelsSummaryResults.data.levelOneSitesWithLevelTwoSites.length,\"per-page\":_vm.visibleRows,\"aria-controls\":\"my-table\"},model:{value:(_vm.currentPage),callback:function ($$v) {_vm.currentPage=$$v},expression:\"currentPage\"}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableSumChannel.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableSumChannel.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ResultTableSumChannel.vue?vue&type=template&id=1da7c05f&scoped=true&\"\nimport script from \"./ResultTableSumChannel.vue?vue&type=script&lang=js&\"\nexport * from \"./ResultTableSumChannel.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ResultTableSumChannel.vue?vue&type=style&index=0&lang=css&\"\nimport style1 from \"./ResultTableSumChannel.vue?vue&type=style&index=1&id=1da7c05f&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"1da7c05f\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Channels.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Channels.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Channels.vue?vue&type=template&id=090f4ab6&\"\nimport script from \"./Channels.vue?vue&type=script&lang=js&\"\nexport * from \"./Channels.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Channels.vue?vue&type=style&index=0&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ResultTableSumChannel.vue?vue&type=style&index=0&lang=css&\""],"sourceRoot":""}