{"version":3,"sources":["webpack:///./src/components/ui/Modal.vue?6631","webpack:///./src/components/ui/Spinner.vue?5a98","webpack:///./src/components/ui/Spinner.vue","webpack:///./src/components/ui/Spinner.vue?578b","webpack:///./src/components/ui/Modal.vue?d140","webpack:///./src/components/ui/Modal.vue","webpack:///./src/components/ui/Modal.vue?cb50","webpack:///./src/components/ui/DefaultButton.vue?32c2","webpack:///./src/components/ui/DefaultButton.vue","webpack:///./src/components/ui/DefaultButton.vue?a607","webpack:///./src/components/ui/DefaultButton.vue?73a5","webpack:///./src/components/ui/Icon.vue?0bea","webpack:///./src/components/ui/Icon.vue","webpack:///./src/components/ui/Icon.vue?4bf0","webpack:///./src/views/reports/ReportsList.vue?0c84","webpack:///./src/services/reports.service.ts","webpack:///./src/components/reports/ReportsErrors/NotExistingReport.vue?2587","webpack:///./src/components/reports/ReportsErrors/NotExistingReport.vue","webpack:///./src/components/reports/ReportsErrors/NotExistingReport.vue?9383","webpack:///./src/components/reports/ReportsErrors/GeneralError.vue?906a","webpack:///./src/components/reports/ReportsErrors/GeneralError.vue","webpack:///./src/components/reports/ReportsErrors/GeneralError.vue?701d","webpack:///./src/components/reports/ReportsErrors/ReportBeingPrepared.vue?6868","webpack:///./src/components/reports/ReportsErrors/ReportBeingPrepared.vue","webpack:///./src/components/reports/ReportsErrors/ReportBeingPrepared.vue?f13a","webpack:///./src/components/reports/ReportsSuppliers/ReportsSuppliers.vue?e8b0","webpack:///./src/components/reports/ReportsSuppliers/ReportsSupplierSummary.vue?f0cc","webpack:///./src/components/reports/ReportsSuppliers/ReportsSupplierSummary.vue","webpack:///./src/components/reports/ReportsSuppliers/ReportsSupplierSummary.vue?0378","webpack:///./src/components/reports/ReportsSuppliers/ReportsSuppliers.vue","webpack:///./src/components/reports/ReportsSuppliers/ReportsSuppliers.vue?5e87","webpack:///./src/components/reports/ReportsDetails/ReportsDetails.vue?12c4","webpack:///./src/components/reports/ReportsDetails/ReportsDetailItem.vue?13a5","webpack:///./src/components/reports/ReportsDetails/ReportsDetailItem.vue","webpack:///./src/components/reports/ReportsDetails/ReportsDetailItem.vue?1fb0","webpack:///./src/components/reports/ReportsDetails/ReportsDetails.vue","webpack:///./src/components/reports/ReportsDetails/ReportsDetails.vue?8f75","webpack:///./src/components/reports/ReportsParcels/ReportsParcels.vue?2d02","webpack:///./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack:///./node_modules/chart.js/dist/chart.esm.js","webpack:///./node_modules/chart.js/auto/auto.esm.js","webpack:///./src/components/reports/ReportsParcels/ReportsParcels.vue","webpack:///./src/components/reports/ReportsParcels/ReportsParcels.vue?a69f","webpack:///./src/components/reports/ReportsCountries/ReportsCountries.vue?f2c2","webpack:///./src/components/reports/ReportsCountries/ReportsCountriesLegendItem.vue?9463","webpack:///./src/components/reports/ReportsCountries/ReportsCountriesLegendItem.vue","webpack:///./src/components/reports/ReportsCountries/ReportsCountriesLegendItem.vue?3f9e","webpack:///./src/components/reports/ReportsCountries/ReportsCountries.vue","webpack:///./src/components/reports/ReportsCountries/ReportsCountries.vue?13fc","webpack:///./src/views/reports/ReportsList.vue","webpack:///./src/views/reports/ReportsList.vue?4176","webpack:///./src/components/ui/Icon.vue?8cd5"],"names":["_hoisted_1","width","height","viewBox","xmlns","stroke","_hoisted_2","_createStaticVNode","_hoisted_3","render","_ctx","_cache","$props","$setup","$data","$options","_openBlock","_createElementBlock","defineComponent","name","__exports__","_withScopeId","n","_pushScopeId","_popScopeId","key","class","_hoisted_4","_createElementVNode","_hoisted_5","_hoisted_6","_hoisted_7","_component_default_button","_resolveComponent","modelValue","_normalizeClass","modalTypeClass","modalSize","_renderSlot","$slots","undefined","onClick","close","hideButtons","_createCommentVNode","hideConfirmButton","_createBlock","handleConfirmClick","disabled","blockConfirm","default","_withCtx","_createTextVNode","_toDisplayString","$t","_","hideCancelButton","type","components","DefaultButton","emits","props","Boolean","buttonsPosition","String","size","methods","this","$emit","computed","buttonsClass","_component_spinner","_component_icon","injectedClass","buttonClass","buttonRoleClass","buttonRole","isLoading","iconName","Icon","Spinner","role","required","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_component_FormInput","_component_ReportsSuppliers","_component_ReportsDetails","_component_ReportsParcels","_component_ReportsCountries","_component_modal","_createVNode","elementData","state","startDateElementData","initialState","startDateInitialState","onFormInputValueUpdate","startDateChange","isParentCustomer","reportTypeElementData","reportTypeInitialState","reportTypeChange","refreshDisabled","createReport","reportData","backendError","_resolveDynamicComponent","onReloadReport","getReportData","showModal","$event","onConfirmClick","closeModal","onCancelClick","title","modalMessage","reportsService","getStartDates","axiosClient","get","getReportTypes","startDate","reportType","post","_withModifiers","innerHTML","_component_ReportsSupplierSummary","parcels_count","_Fragment","_renderList","report_per_suppliers","supplier","id","isExpanded","supplier_name","report_per_products","product","product_name","Object","setup","ref","ReportsSupplierSummary","_component_ReportsDetailItem","details","row","index","detail","value","label","ReportsDetailItem","toString","bulk_parcels_count","average_shipping_time","toFixed","report_per_countries","length","returns_count","returns_percentage","ordered_same_day_percentage","average_parcel_weight","isEmpty","requestAnimFrame","window","callback","requestAnimationFrame","throttled","fn","thisArg","updateFn","updateArgs","args","Array","prototype","slice","call","ticking","rest","apply","debounce","delay","timeout","clearTimeout","setTimeout","_toLeftRightCenter","align","_alignStartEnd","start","end","_textX","left","right","rtl","check","noop","uid","isNullOrUndef","isArray","substr","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","target","create","klen","k","isValidKey","indexOf","_merger","options","tval","sval","merge","sources","merger","mergeIf","_mergerIf","hasOwnProperty","emptyString","dot","indexOfDotOrLength","idx","resolveObjectKey","obj","pos","_capitalize","str","charAt","toUpperCase","defined","isFunction","setsEqual","a","b","item","has","_isClickEvent","e","PI","Math","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","round","almostEquals","niceRange","pow","floor","fraction","niceFraction","_factorize","result","sqrt","push","sort","pop","isNumber","isNaN","x","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","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","atEdge","t","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","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","c","f","hex","h1","h2","eq","isShort","v","r","g","hexParse","ret","hexString","lim","l","h","p2b","n2b","b2n","n2p","RGB_RE","rgbParse","exec","rgbString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","map$1","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","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","j","ok","nk","replace","parseInt","names$1","nameParse","transparent","toLowerCase","modHSL","ratio","tmp","clone","proto","assign","fromObject","input","functionParse","Color","_rgb","_valid","color","weight","me","c1","c2","w2","w1","val","index_esm","isPatternOrGradient","CanvasGradient","CanvasPattern","getHoverColor","saturate","darken","overrides","getScope$1","node","split","root","scope","values","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","maintainAspectRatio","onHover","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","targetScope","targetName","scopeObject","targetScopeObject","privateName","defineProperties","writable","enumerable","local","defaults","_scriptable","startsWith","_indexable","_fallback","toFontString","_measureText","data","gc","longest","string","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","splice","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","xOffset","yOffset","cornerRadius","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","_isPointInArea","point","area","margin","top","bottom","clipArea","clip","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","renderText","text","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","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","proxy","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","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","evt","native","touches","offsetX","offsetY","box","getBoundingClientRect","clientX","clientY","getRelativePosition","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","Intl","NumberFormat","formatNumber","num","format","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","count","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","date","callbacks","numSteps","duration","initial","currentStep","_update","_refresh","Date","now","remaining","running","draw","_active","_total","tick","_notify","charts","complete","progress","event","cb","_getAnims","reduce","acc","_duration","cancel","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","hide","config","_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","meta","stacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","NEGATIVE_INFINITY","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","itemStacks","_top","_bottom","getFirstScaleId","shift","createDatasetContext","dataset","createDataContext","dataIndex","raw","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","hidden","_stacked","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$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","parse","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","$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","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","stackIndex","_getStackIndex","rects","_index_","offset","grid","_value_","getPixelForDecimal","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","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","display","circular","pointLabels","PieController","RadarController","pointPosition","getPointPositionForValue","ScatterController","controllers","__proto__","BarController","BubbleController","DoughnutController","LineController","PolarAreaController","DateAdapter","timestamp","amount","unit","weekday","members","adapters","_date","evaluateAllVisibleItems","handler","getSortedVisibleDatasetMetas","binarySearch","metaset","lookupMethod","_reversePixels","getRange","optimizedEvaluateItems","position","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","_minPadding","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","z","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","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","numeric","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","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","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","x2","y2","limit","step","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","backdrop","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","_typedRegistries","_each","_get","typedRegistry","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","component","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","error","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","_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","ArcElement","LineElement","PointElement","BarElement","lttbDecimation","samples","decimated","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","minMaxDecimation","minIndex","maxIndex","startIndex","xMin","xMax","dx","lastIndex","intermediateIndex1","intermediateIndex2","cleanDecimatedDataset","cleanDecimatedData","getStartAndCountOfVisiblePointsSimplified","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","threshold","getLineByIndex","parseFillOption","fillOption","decodeFill","computeLinearBoundary","computeCircularBoundary","computeBoundary","findSegmentEnd","pointsFromSegments","boundary","linePoints","buildStackLine","sourcePoints","linesBelow","getLinesBelow","createBoundaryLine","addPointsBelow","below","unshift","sourcePoint","postponed","findPoint","interpolate","pointValue","firstValue","lastValue","resolveTarget","propagate","visited","clipY","getBounds","_getEdge","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","clipBounds","interpolatedLineTo","interpolatedPoint","_fill","src","notShape","lineLoop","targetLoop","doFill","above","drawfill","lineOpts","plugin_filler","_args","$filler","drawTime","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","adjustHitBoxes","handleEvent","ci","_padding","textSize","fontOpts","_drawArgs","createTitle","titleBlock","plugin_title","WeakMap","plugin_subtitle","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","labelCount","Decimation","Filler","Legend","SubTitle","Title","Tooltip","addIfString","addedLabels","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","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","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","CategoryScale","LinearScale","LogarithmicScale","RadialLinearScale","TimeScale","registerables","reportPerWeekdays","report_per_weekdays","parcels_per_monday","parcels_per_tuesday","parcels_per_wednesday","parcels_per_thursday","parcels_per_friday","parcels_per_saturday","parcels_per_sunday","sum","omit","createParcelsChart","Chart","onMounted","_component_ReportsCountriesLegendItem","countryName","parcelsCount","parcelsPercentage","_normalizeStyle","ReportsCountriesLegendItem","prepareCountriesChartData","sortBy","country","topFive","countryData","intermediarySum","createCountriesChart","nextTick","ReportsDetails","ReportsSuppliers","ReportsParcels","ReportsCountries","Modal","FormInput","disabledEmptyOption","fieldId","newValue","getReportTypeOptions","response","extractedOptions","getStartDateOptions","transform","new_parcels_being_processed","shallowRef","ReportBeingPrepared","catch","status","NotExistingReport","GeneralError","finally","checkSelectedCustomer","selectedCustomer","EventBus","emit","on"],"mappings":"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","file":"js/chunk-7e5aabe2.8d0ec5a7.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Modal.vue?vue&type=style&index=0&id=0769baef&scoped=true&lang=scss\"","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createStaticVNode as _createStaticVNode } from \"vue\"\n\nconst _hoisted_1 = {\n width: \"38\",\n height: \"38\",\n viewBox: \"0 0 38 38\",\n xmlns: \"http://www.w3.org/2000/svg\",\n stroke: \"#2997AB\"\n}\nconst _hoisted_2 = /*#__PURE__*/_createStaticVNode(\"\", 1)\nconst _hoisted_3 = [\n _hoisted_2\n]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _hoisted_3))\n}","\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"Spinner\",\n});\n","import { render } from \"./Spinner.vue?vue&type=template&id=41e04b01&ts=true\"\nimport script from \"./Spinner.vue?vue&type=script&lang=ts\"\nexport * from \"./Spinner.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderSlot as _renderSlot, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock, normalizeClass as _normalizeClass, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-0769baef\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = {\n key: 0,\n class: \"modal-overlay\"\n}\nconst _hoisted_2 = { class: \"modal__header\" }\nconst _hoisted_3 = { class: \"modal__header__title\" }\nconst _hoisted_4 = /*#__PURE__*/ _withScopeId(() => /*#__PURE__*/_createElementVNode(\"span\", { class: \"icon-cross\" }, null, -1))\nconst _hoisted_5 = [\n _hoisted_4\n]\nconst _hoisted_6 = { class: \"modal__content\" }\nconst _hoisted_7 = {\n key: 0,\n class: \"modal__buttons justify-center\"\n}\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_default_button = _resolveComponent(\"default-button\")!\n\n return (_ctx.modelValue)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"modal\", [_ctx.modalTypeClass, _ctx.modalSize]])\n }, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _renderSlot(_ctx.$slots, \"title\", {}, undefined, true)\n ]),\n _createElementVNode(\"div\", null, [\n _createElementVNode(\"button\", {\n class: \"m-0\",\n onClick: _cache[0] || (_cache[0] = \n//@ts-ignore\n(...args) => (_ctx.close && _ctx.close(...args)))\n }, _hoisted_5)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_6, [\n _renderSlot(_ctx.$slots, \"default\", {}, undefined, true)\n ]),\n (!_ctx.hideButtons)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_7, [\n _renderSlot(_ctx.$slots, \"buttons\", {}, undefined, true),\n (!_ctx.hideConfirmButton)\n ? (_openBlock(), _createBlock(_component_default_button, {\n key: 0,\n onClick: _ctx.handleConfirmClick,\n disabled: _ctx.blockConfirm\n }, {\n default: _withCtx(() => [\n _renderSlot(_ctx.$slots, \"confirm-button\", {}, () => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"general.ok\")), 1)\n ], true)\n ]),\n _: 3\n }, 8, [\"onClick\", \"disabled\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.hideCancelButton)\n ? (_openBlock(), _createBlock(_component_default_button, {\n key: 1,\n onClick: _ctx.close,\n type: \"outline\"\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"general.cancel\")), 1)\n ]),\n _: 1\n }, 8, [\"onClick\"]))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ], 2)\n ]))\n : _createCommentVNode(\"\", true)\n}","\nimport { defineComponent } from \"vue\";\nimport DefaultButton from \"@/components/ui/DefaultButton.vue\";\n\nexport default defineComponent({\n name: \"Modal\",\n components: { DefaultButton },\n emits: [\"confirmClick\", \"cancelClick\", \"update:modelValue\"],\n props: {\n modelValue: {\n type: Boolean,\n },\n buttonsPosition: {\n type: String,\n default: \"left\",\n },\n type: {\n type: String,\n default: \"\",\n },\n hideConfirmButton: {\n type: Boolean,\n default: false,\n },\n hideCancelButton: {\n type: Boolean,\n default: false,\n },\n hideButtons: {\n type: Boolean,\n default: false,\n },\n size: {\n type: String,\n default: \"\",\n },\n blockConfirm: {\n type: Boolean,\n default: false,\n },\n },\n methods: {\n handleConfirmClick(): void {\n this.$emit(\"confirmClick\");\n this.$emit(\"update:modelValue\", false);\n },\n close(): void {\n this.$emit(\"update:modelValue\", false);\n this.$emit(\"cancelClick\");\n },\n },\n computed: {\n buttonsClass(): string {\n switch (this.buttonsPosition) {\n case \"right\":\n return \"modal__buttons--right\";\n default:\n return \"modal__buttons--left\";\n }\n },\n modalTypeClass(): string {\n switch (this.type) {\n case \"warning\":\n return \"modal--warning\";\n case \"confirm\":\n return \"modal--confirm\";\n default:\n return \"\";\n }\n },\n modalSize(): string {\n switch (this.size) {\n case \"big\":\n return \"modal--big\";\n case \"small\":\n return \"modal--small\";\n default:\n return \"\";\n }\n },\n },\n});\n","import { render } from \"./Modal.vue?vue&type=template&id=0769baef&scoped=true&ts=true\"\nimport script from \"./Modal.vue?vue&type=script&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=0769baef&scoped=true&lang=scss\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0769baef\"]])\n\nexport default __exports__","import { resolveComponent as _resolveComponent, openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot, normalizeClass as _normalizeClass, createElementBlock as _createElementBlock, pushScopeId as _pushScopeId, popScopeId as _popScopeId } from \"vue\"\n\nconst _withScopeId = n => (_pushScopeId(\"data-v-343afe78\"),n=n(),_popScopeId(),n)\nconst _hoisted_1 = [\"type\", \"disabled\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_spinner = _resolveComponent(\"spinner\")!\n const _component_icon = _resolveComponent(\"icon\")!\n\n return (_openBlock(), _createElementBlock(\"button\", {\n class: _normalizeClass([\"default-button flex\", {\n [_ctx.injectedClass]: _ctx.injectedClass,\n 'py-4 px-4': !_ctx.injectedClass,\n [_ctx.buttonClass]: _ctx.buttonClass,\n [_ctx.buttonRoleClass]: _ctx.buttonRoleClass,\n }]),\n type: _ctx.buttonRole,\n disabled: _ctx.isLoading || _ctx.disabled\n }, [\n (_ctx.isLoading)\n ? (_openBlock(), _createBlock(_component_spinner, {\n key: 0,\n class: \"w-5\"\n }))\n : _createCommentVNode(\"\", true),\n (!_ctx.isLoading && _ctx.iconName)\n ? (_openBlock(), _createBlock(_component_icon, {\n key: 1,\n name: _ctx.iconName\n }, null, 8, [\"name\"]))\n : _createCommentVNode(\"\", true),\n (!_ctx.isLoading)\n ? _renderSlot(_ctx.$slots, \"default\", { key: 2 }, undefined, true)\n : _createCommentVNode(\"\", true)\n ], 10, _hoisted_1))\n}","\nimport { defineComponent } from \"vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport Icon from \"@/components/ui/Icon.vue\";\n\nexport default defineComponent({\n name: \"DefaultButton\",\n components: { Icon, Spinner },\n props: {\n type: {\n type: String,\n default: \"default\",\n },\n buttonRole: {\n type: String,\n default: \"button\",\n },\n role: {\n type: String,\n default: \"primary\",\n },\n isLoading: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n iconName: {\n type: String,\n default: \"\",\n },\n injectedClass: {\n type: String,\n default: \"\",\n },\n },\n computed: {\n buttonClass(): string {\n switch (this.type) {\n case \"outline\":\n return \"default-button--outline\";\n case \"empty\":\n return \"default-button--empty\";\n default:\n return \"\";\n }\n },\n buttonRoleClass(): string {\n switch (this.role) {\n case \"danger\":\n return \"default-button--danger\";\n default:\n return \"\";\n }\n },\n },\n});\n","import { render } from \"./DefaultButton.vue?vue&type=template&id=343afe78&scoped=true&ts=true\"\nimport script from \"./DefaultButton.vue?vue&type=script&lang=ts\"\nexport * from \"./DefaultButton.vue?vue&type=script&lang=ts\"\n\nimport \"./DefaultButton.vue?vue&type=style&index=0&id=343afe78&scoped=true&lang=scss\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-343afe78\"]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./DefaultButton.vue?vue&type=style&index=0&id=343afe78&scoped=true&lang=scss\"","import { normalizeClass as _normalizeClass, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"span\", {\n class: _normalizeClass([\"icon\", `icon-${_ctx.name}`])\n }, null, 2))\n}","\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"Icon\",\n props: {\n name: {\n type: String,\n required: true,\n },\n },\n});\n","import { render } from \"./Icon.vue?vue&type=template&id=48b41e0a&scoped=true&ts=true\"\nimport script from \"./Icon.vue?vue&type=script&lang=ts\"\nexport * from \"./Icon.vue?vue&type=script&lang=ts\"\n\nimport \"./Icon.vue?vue&type=style&index=0&id=48b41e0a&scoped=true&lang=scss\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-48b41e0a\"]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createTextVNode as _createTextVNode, withCtx as _withCtx, resolveDynamicComponent as _resolveDynamicComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col mb-8 mb-12\" }\nconst _hoisted_2 = { class: \"mb-6\" }\nconst _hoisted_3 = { class: \"flex flex-row mt-5\" }\nconst _hoisted_4 = { class: \"w-1/4 px-2\" }\nconst _hoisted_5 = {\n key: 0,\n class: \"w-1/4 px-2\"\n}\nconst _hoisted_6 = { class: \"w-1/4\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"flex-1\" }, null, -1)\nconst _hoisted_8 = { key: 0 }\nconst _hoisted_9 = { class: \"flex flex-row\" }\nconst _hoisted_10 = { class: \"flex flex-row\" }\nconst _hoisted_11 = { key: 1 }\nconst _hoisted_12 = { key: 2 }\nconst _hoisted_13 = { class: \"text-medium text-center p-3 mb-7\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_FormInput = _resolveComponent(\"FormInput\")!\n const _component_default_button = _resolveComponent(\"default-button\")!\n const _component_ReportsSuppliers = _resolveComponent(\"ReportsSuppliers\")!\n const _component_ReportsDetails = _resolveComponent(\"ReportsDetails\")!\n const _component_ReportsParcels = _resolveComponent(\"ReportsParcels\")!\n const _component_ReportsCountries = _resolveComponent(\"ReportsCountries\")!\n const _component_spinner = _resolveComponent(\"spinner\")!\n const _component_modal = _resolveComponent(\"modal\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n _createElementVNode(\"h1\", _hoisted_2, _toDisplayString(_ctx.$t(\"report.title\")), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createVNode(_component_FormInput, {\n elementData: _ctx.state.startDateElementData,\n initialState: _ctx.state.startDateInitialState,\n onFormInputValueUpdate: _ctx.methods.startDateChange\n }, null, 8, [\"elementData\", \"initialState\", \"onFormInputValueUpdate\"])\n ]),\n (_ctx.state.isParentCustomer)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_5, [\n _createVNode(_component_FormInput, {\n elementData: _ctx.state.reportTypeElementData,\n initialState: _ctx.state.reportTypeInitialState,\n onFormInputValueUpdate: _ctx.methods.reportTypeChange\n }, null, 8, [\"elementData\", \"initialState\", \"onFormInputValueUpdate\"])\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_6, [\n _createVNode(_component_default_button, {\n \"injected-class\": \"px-6 py-3 mt-2 ml-4\",\n disabled: _ctx.state.isLoading || _ctx.state.refreshDisabled,\n onClick: _ctx.methods.createReport\n }, {\n default: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.state.reportData || _ctx.state.refreshDisabled\n ? _ctx.$t(\"report.refresh_report\")\n : _ctx.$t(\"report.create_report\")), 1)\n ]),\n _: 1\n }, 8, [\"disabled\", \"onClick\"])\n ]),\n _hoisted_7\n ])\n ]),\n (!_ctx.state.isLoading && _ctx.state.reportData)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, [\n _createElementVNode(\"div\", _hoisted_9, [\n _createVNode(_component_ReportsSuppliers, {\n class: \"w-5/12\",\n reportData: _ctx.state.reportData\n }, null, 8, [\"reportData\"]),\n _createVNode(_component_ReportsDetails, {\n class: \"w-7/12\",\n reportData: _ctx.state.reportData\n }, null, 8, [\"reportData\"])\n ]),\n _createElementVNode(\"div\", _hoisted_10, [\n _createVNode(_component_ReportsParcels, {\n class: \"w-1/2\",\n reportData: _ctx.state.reportData\n }, null, 8, [\"reportData\"]),\n _createVNode(_component_ReportsCountries, {\n class: \"w-1/2\",\n reportData: _ctx.state.reportData\n }, null, 8, [\"reportData\"])\n ])\n ]))\n : _createCommentVNode(\"\", true),\n (!_ctx.state.isLoading && !_ctx.state.reportData && _ctx.state.backendError)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_11, [\n (_openBlock(), _createBlock(_resolveDynamicComponent(_ctx.state.backendError), {\n onReloadReport: _ctx.methods.getReportData\n }, null, 40, [\"onReloadReport\"]))\n ]))\n : _createCommentVNode(\"\", true),\n (_ctx.state.isLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_12, [\n _createVNode(_component_spinner, { class: \"my-auto my-auto mx-auto\" })\n ]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_modal, {\n type: \"warning\",\n size: \"small\",\n hideCancelButton: true,\n modelValue: _ctx.state.showModal,\n \"onUpdate:modelValue\": _cache[0] || (_cache[0] = ($event: any) => ((_ctx.state.showModal) = $event)),\n onConfirmClick: _ctx.methods.closeModal,\n onCancelClick: _ctx.methods.closeModal\n }, {\n title: _withCtx(() => [\n _createTextVNode(_toDisplayString(_ctx.$t(\"report.modal.title\")), 1)\n ]),\n default: _withCtx(() => [\n _createElementVNode(\"p\", _hoisted_13, _toDisplayString(_ctx.$t(_ctx.state.modalMessage)), 1)\n ]),\n _: 1\n }, 8, [\"modelValue\", \"onConfirmClick\", \"onCancelClick\"])\n ]))\n}","import axiosClient from \"@/axios\";\nimport { AxiosPromise } from \"axios\";\nimport { ReportsResponse } from \"@/models/ReportsResponse\";\n\nconst reportsService = {\n getStartDates(): AxiosPromise> {\n return axiosClient.get(\"/parcel_reports/start_dates\");\n },\n getReportTypes(): AxiosPromise> {\n return axiosClient.get(\"/parcel_reports/types\");\n },\n get(startDate: string, reportType: string): AxiosPromise {\n return axiosClient.get(\n `/parcel_reports?start_date=${startDate}&type=${reportType}`\n );\n },\n post(startDate: string, reportType: string): AxiosPromise {\n return axiosClient.post(\n `/parcel_reports?start_date=${startDate}&type=${reportType}`\n );\n },\n};\n\nexport default reportsService;\n","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-medium text-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"p\", _hoisted_1, _toDisplayString(_ctx.$t(\"report.errors.missing_report_error\")), 1))\n}","\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"NotExistingReports\",\n});\n","import { render } from \"./NotExistingReport.vue?vue&type=template&id=6fbb8554&ts=true\"\nimport script from \"./NotExistingReport.vue?vue&type=script&lang=ts\"\nexport * from \"./NotExistingReport.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-medium text-center text-red-500\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"p\", _hoisted_1, _toDisplayString(_ctx.$t(\"report.errors.general_error\")), 1))\n}","\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"GeneralError\",\n});\n","import { render } from \"./GeneralError.vue?vue&type=template&id=34561da7&ts=true\"\nimport script from \"./GeneralError.vue?vue&type=script&lang=ts\"\nexport * from \"./GeneralError.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, withModifiers as _withModifiers, createTextVNode as _createTextVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"text-medium text-center\" }\nconst _hoisted_2 = /*#__PURE__*/_createElementVNode(\"br\", null, null, -1)\nconst _hoisted_3 = [\"innerHTML\"]\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"p\", _hoisted_1, [\n _createTextVNode(_toDisplayString(_ctx.$t(\"report.errors.report_being_prepared_error\")), 1),\n _hoisted_2,\n _createElementVNode(\"button\", {\n class: \"uppercase text-medium text-primary-blue px-5 mt-3\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.$emit('reloadReport')), [\"stop\"])),\n innerHTML: _ctx.$t('report.reload')\n }, null, 8, _hoisted_3)\n ])\n ]))\n}","\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"ReportsBeingPrepared\",\n emits: [\"reloadReport\"],\n});\n","import { render } from \"./ReportBeingPrepared.vue?vue&type=template&id=999d0e08&ts=true\"\nimport script from \"./ReportBeingPrepared.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportBeingPrepared.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"h-120\" }\nconst _hoisted_2 = { class: \"bg-white rounded p-6 flex flex-col md:h-full overflow-y-auto\" }\nconst _hoisted_3 = { class: \"flex flex-row text-medium justify-between items-center mb-8\" }\nconst _hoisted_4 = { class: \"w-5/6 font-bold text-black\" }\nconst _hoisted_5 = { class: \"w-1/12 text-right\" }\nconst _hoisted_6 = { class: \"bg-primary-blue p-2 rounded text-white font-bold\" }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ReportsSupplierSummary = _resolveComponent(\"ReportsSupplierSummary\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.$t(\"report.suppliers.title\")), 1),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"span\", _hoisted_6, _toDisplayString(_ctx.reportData?.parcels_count || \"-\"), 1)\n ]),\n _hoisted_7\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.reportData.report_per_suppliers, (supplier) => {\n return (_openBlock(), _createBlock(_component_ReportsSupplierSummary, {\n supplier: supplier,\n key: supplier.id\n }, null, 8, [\"supplier\"]))\n }), 128))\n ])\n ]))\n}","import { createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, withModifiers as _withModifiers, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12\" }, null, -1)\nconst _hoisted_2 = { class: \"w-3/4 text-black\" }\nconst _hoisted_3 = { class: \"w-1/12 text-right\" }\nconst _hoisted_4 = { class: \"bg-light-green p-2 rounded border border-light-green text-primary-blue font-bold\" }\nconst _hoisted_5 = { class: \"w-1/12 text-right text-light text-gray-7\" }\nconst _hoisted_6 = { key: 0 }\nconst _hoisted_7 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/6\" }, null, -1)\nconst _hoisted_8 = { class: \"w-2/3 text-small text-black\" }\nconst _hoisted_9 = { class: \"w-1/12 text-right\" }\nconst _hoisted_10 = { class: \"p-2 rounded text-primary-blue border border-primary-blue font-bold\" }\nconst _hoisted_11 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12 text-right text-light text-gray-7\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", {\n class: \"flex flex-row justify-between items-center mb-8 cursor-pointer\",\n onClick: _cache[0] || (_cache[0] = _withModifiers(($event: any) => (_ctx.state.isExpanded = !_ctx.state.isExpanded), [\"stop\"]))\n }, [\n _hoisted_1,\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.supplier.supplier_name), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.supplier.parcels_count), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"button\", null, [\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"icon text-big\", _ctx.state.isExpanded ? 'icon-fold' : 'icon-drop'])\n }, null, 2)\n ])\n ])\n ]),\n (_ctx.state.isExpanded)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_6, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.supplier.report_per_products, (product) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"flex flex-row justify-between items-center mb-8\",\n key: product.id\n }, [\n _hoisted_7,\n _createElementVNode(\"div\", _hoisted_8, _toDisplayString(product.product_name), 1),\n _createElementVNode(\"div\", _hoisted_9, [\n _createElementVNode(\"span\", _hoisted_10, _toDisplayString(product.parcels_count), 1)\n ]),\n _hoisted_11\n ]))\n }), 128))\n ]))\n : _createCommentVNode(\"\", true)\n ]))\n}","\nimport { defineComponent, PropType, ref } from \"vue\";\nimport { ReportsSupplier } from \"@/models/ReportsResponse\";\n\nexport default defineComponent({\n name: \"ReportsSupplierSummary\",\n props: {\n supplier: {\n type: Object as PropType,\n required: true,\n },\n },\n setup() {\n const state = ref({\n isExpanded: false,\n });\n return {\n state,\n };\n },\n});\n","import { render } from \"./ReportsSupplierSummary.vue?vue&type=template&id=65ca51cf&ts=true\"\nimport script from \"./ReportsSupplierSummary.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsSupplierSummary.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType } from \"vue\";\nimport ReportsSupplierSummary from \"@/components/reports/ReportsSuppliers/ReportsSupplierSummary.vue\";\nimport { ReportsResponse } from \"@/models/ReportsResponse\";\n\nexport default defineComponent({\n name: \"ReportsSuppliers\",\n components: {\n ReportsSupplierSummary,\n },\n props: {\n reportData: {\n type: Object as PropType,\n required: true,\n },\n },\n});\n","import { render } from \"./ReportsSuppliers.vue?vue&type=template&id=1615d2d9&ts=true\"\nimport script from \"./ReportsSuppliers.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsSuppliers.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-col\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ReportsDetailItem = _resolveComponent(\"ReportsDetailItem\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.state.details, (row, index) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"flex flex-row\",\n key: `report_detail_row_${index}`\n }, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(row, (detail, index) => {\n return (_openBlock(), _createBlock(_component_ReportsDetailItem, {\n value: detail.value,\n label: detail.label,\n \"icon-name\": detail.iconName,\n key: `report_detail_detail_${index}`\n }, null, 8, [\"value\", \"label\", \"icon-name\"]))\n }), 128))\n ]))\n }), 128))\n ]))\n}","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"w-1/2 pl-4 mb-6 h-28\" }\nconst _hoisted_2 = { class: \"bg-white rounded flex justify-between px-6 py-3 h-full\" }\nconst _hoisted_3 = { class: \"flex flex-col\" }\nconst _hoisted_4 = { class: \"text-big font-bold text-primary-blue pt-1.5\" }\nconst _hoisted_5 = { class: \"flex bg-light-green w-16 text-primary-blue items-center justify-center\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_icon = _resolveComponent(\"icon\")!\n\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"span\", null, _toDisplayString(_ctx.$t(_ctx.label)), 1),\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.value), 1)\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createVNode(_component_icon, { name: _ctx.iconName }, null, 8, [\"name\"])\n ])\n ])\n ]))\n}","\nimport { defineComponent } from \"vue\";\nimport Icon from \"@/components/ui/Icon.vue\";\n\nexport default defineComponent({\n name: \"ReportsDetailItem\",\n components: { Icon },\n props: {\n iconName: {\n type: String,\n required: true,\n },\n label: {\n type: String,\n required: true,\n },\n value: {\n type: String,\n required: true,\n },\n },\n});\n","import { render } from \"./ReportsDetailItem.vue?vue&type=template&id=734a6167&ts=true\"\nimport script from \"./ReportsDetailItem.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsDetailItem.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, PropType, ref } from \"vue\";\nimport { ReportsResponse } from \"@/models/ReportsResponse\";\nimport ReportsDetailItem from \"@/components/reports/ReportsDetails/ReportsDetailItem.vue\";\n\nexport type ReportsDetailsState = {\n details: {\n value: string;\n label: string;\n iconName: string;\n }[][];\n};\n\nexport default defineComponent({\n name: \"ReportsDetails\",\n components: {\n ReportsDetailItem,\n },\n props: {\n reportData: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const state = ref({\n details: [\n [\n {\n value: props.reportData.parcels_count?.toString() || \"-\",\n label: \"report.statistics.parcels\",\n iconName: \"package\",\n },\n {\n value: props.reportData.bulk_parcels_count?.toString() || \"-\",\n label: \"report.statistics.bulk_parcels\",\n iconName: \"transaction\",\n },\n ],\n [\n {\n value:\n (props.reportData.average_shipping_time?.toFixed(2) || \"-\") +\n \" days\",\n label: \"Average Shipping Time\",\n iconName: \"clock\",\n },\n {\n value:\n props.reportData.report_per_countries?.length.toString() || \"-\",\n label: \"report.statistics.countries_number\",\n iconName: \"truck\",\n },\n ],\n [\n {\n value: props.reportData.returns_count?.toString() || \"-\",\n label: \"report.statistics.returns\",\n iconName: \"return\",\n },\n {\n value: (props.reportData.returns_percentage?.toFixed(2) || \"-\") + \" %\",\n label: \"report.statistics.returns_percentage\",\n iconName: \"percentage\",\n },\n ],\n [\n {\n value:\n (props.reportData.ordered_same_day_percentage?.toFixed(2) ||\n \"-\") + \" %\",\n label: \"Orders fulfilled same day\",\n iconName: \"truck\",\n },\n {\n value:\n (props.reportData.average_parcel_weight?.toFixed(2) || \"-\") +\n \" kg\",\n label: \"report.statistics.avg_parcel_weight\",\n iconName: \"kilograms\",\n },\n ],\n ],\n });\n return {\n state,\n };\n },\n});\n","import { render } from \"./ReportsDetails.vue?vue&type=template&id=7c9e8820&ts=true\"\nimport script from \"./ReportsDetails.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsDetails.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"bg-white p-6\"\n}\nconst _hoisted_2 = { class: \"font-bold text-medium mb-4\" }\nconst _hoisted_3 = { class: \"bg-chart py-4 px-6 rounded mt-3 mt-0\" }\nconst _hoisted_4 = { class: \"font-bold text-light mb-7\" }\nconst _hoisted_5 = /*#__PURE__*/_createElementVNode(\"canvas\", { id: \"reportsParcelsCanvas\" }, null, -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (!_ctx.state.isEmpty)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"report.parcels.title\")), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.$t(\"report.parcels.chart.title\")), 1),\n _hoisted_5\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}","/*!\n * Chart.js v3.7.0\n * https://www.chartjs.org\n * (c) 2021 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.substr(0, 7) === '[object' && type.substr(-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.substr(pos, idx - pos)];\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.1.9\n * https://github.com/kurkle/color#readme\n * (c) 2020 Jukka Kurkela\n * Released under the MIT License\n */\nconst map = {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));\nfunction isShort(v) {\n\treturn eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\n}\nfunction hexParse(str) {\n\tvar len = str.length;\n\tvar ret;\n\tif (str[0] === '#') {\n\t\tif (len === 4 || len === 5) {\n\t\t\tret = {\n\t\t\t\tr: 255 & map[str[1]] * 17,\n\t\t\t\tg: 255 & map[str[2]] * 17,\n\t\t\t\tb: 255 & map[str[3]] * 17,\n\t\t\t\ta: len === 5 ? map[str[4]] * 17 : 255\n\t\t\t};\n\t\t} else if (len === 7 || len === 9) {\n\t\t\tret = {\n\t\t\t\tr: map[str[1]] << 4 | map[str[2]],\n\t\t\t\tg: map[str[3]] << 4 | map[str[4]],\n\t\t\t\tb: map[str[5]] << 4 | map[str[6]],\n\t\t\t\ta: len === 9 ? (map[str[7]] << 4 | map[str[8]]) : 255\n\t\t\t};\n\t\t}\n\t}\n\treturn ret;\n}\nfunction hexString(v) {\n\tvar f = isShort(v) ? h1 : h2;\n\treturn v\n\t\t? '#' + f(v.r) + f(v.g) + f(v.b) + (v.a < 255 ? f(v.a) : '')\n\t\t: v;\n}\nfunction round(v) {\n\treturn v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n\treturn lim(round(v * 2.55), 0, 255);\n}\nfunction n2b(v) {\n\treturn lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n\treturn lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n\treturn lim(round(v * 100), 0, 100);\n}\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n\tconst m = RGB_RE.exec(str);\n\tlet a = 255;\n\tlet r, g, b;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[7] !== r) {\n\t\tconst v = +m[7];\n\t\ta = 255 & (m[8] ? p2b(v) : v * 255);\n\t}\n\tr = +m[1];\n\tg = +m[3];\n\tb = +m[5];\n\tr = 255 & (m[2] ? p2b(r) : r);\n\tg = 255 & (m[4] ? p2b(g) : g);\n\tb = 255 & (m[6] ? p2b(b) : b);\n\treturn {\n\t\tr: r,\n\t\tg: g,\n\t\tb: b,\n\t\ta: a\n\t};\n}\nfunction rgbString(v) {\n\treturn v && (\n\t\tv.a < 255\n\t\t\t? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n\t\t\t: `rgb(${v.r}, ${v.g}, ${v.b})`\n\t);\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\tconst a = s * Math.min(l, 1 - l);\n\tconst f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n\treturn [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n\tconst f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n\tconst rgb = hsl2rgbn(h, 1, 0.5);\n\tlet i;\n\tif (w + b > 1) {\n\t\ti = 1 / (w + b);\n\t\tw *= i;\n\t\tb *= i;\n\t}\n\tfor (i = 0; i < 3; i++) {\n\t\trgb[i] *= 1 - w - b;\n\t\trgb[i] += w;\n\t}\n\treturn rgb;\n}\nfunction rgb2hsl(v) {\n\tconst range = 255;\n\tconst r = v.r / range;\n\tconst g = v.g / range;\n\tconst b = v.b / range;\n\tconst max = Math.max(r, g, b);\n\tconst min = Math.min(r, g, b);\n\tconst l = (max + min) / 2;\n\tlet h, s, d;\n\tif (max !== min) {\n\t\td = max - min;\n\t\ts = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n\t\th = max === r\n\t\t\t? ((g - b) / d) + (g < b ? 6 : 0)\n\t\t\t: max === g\n\t\t\t\t? (b - r) / d + 2\n\t\t\t\t: (r - g) / d + 4;\n\t\th = h * 60 + 0.5;\n\t}\n\treturn [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n\treturn (\n\t\tArray.isArray(a)\n\t\t\t? f(a[0], a[1], a[2])\n\t\t\t: f(a, b, c)\n\t).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n\treturn calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n\treturn calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n\treturn calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n\treturn (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n\tconst m = HUE_RE.exec(str);\n\tlet a = 255;\n\tlet v;\n\tif (!m) {\n\t\treturn;\n\t}\n\tif (m[5] !== v) {\n\t\ta = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n\t}\n\tconst h = hue(+m[2]);\n\tconst p1 = +m[3] / 100;\n\tconst p2 = +m[4] / 100;\n\tif (m[1] === 'hwb') {\n\t\tv = hwb2rgb(h, p1, p2);\n\t} else if (m[1] === 'hsv') {\n\t\tv = hsv2rgb(h, p1, p2);\n\t} else {\n\t\tv = hsl2rgb(h, p1, p2);\n\t}\n\treturn {\n\t\tr: v[0],\n\t\tg: v[1],\n\t\tb: v[2],\n\t\ta: a\n\t};\n}\nfunction rotate(v, deg) {\n\tvar h = rgb2hsl(v);\n\th[0] = hue(h[0] + deg);\n\th = hsl2rgb(h);\n\tv.r = h[0];\n\tv.g = h[1];\n\tv.b = h[2];\n}\nfunction hslString(v) {\n\tif (!v) {\n\t\treturn;\n\t}\n\tconst a = rgb2hsl(v);\n\tconst h = a[0];\n\tconst s = n2p(a[1]);\n\tconst l = n2p(a[2]);\n\treturn v.a < 255\n\t\t? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n\t\t: `hsl(${h}, ${s}%, ${l}%)`;\n}\nconst map$1 = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n\tconst unpacked = {};\n\tconst keys = Object.keys(names);\n\tconst tkeys = Object.keys(map$1);\n\tlet i, j, k, ok, nk;\n\tfor (i = 0; i < keys.length; i++) {\n\t\tok = nk = keys[i];\n\t\tfor (j = 0; j < tkeys.length; j++) {\n\t\t\tk = tkeys[j];\n\t\t\tnk = nk.replace(k, map$1[k]);\n\t\t}\n\t\tk = parseInt(names[ok], 16);\n\t\tunpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n\t}\n\treturn unpacked;\n}\nlet names$1;\nfunction nameParse(str) {\n\tif (!names$1) {\n\t\tnames$1 = unpack();\n\t\tnames$1.transparent = [0, 0, 0, 0];\n\t}\n\tconst a = names$1[str.toLowerCase()];\n\treturn a && {\n\t\tr: a[0],\n\t\tg: a[1],\n\t\tb: a[2],\n\t\ta: a.length === 4 ? a[3] : 255\n\t};\n}\nfunction modHSL(v, i, ratio) {\n\tif (v) {\n\t\tlet tmp = rgb2hsl(v);\n\t\ttmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n\t\ttmp = hsl2rgb(tmp);\n\t\tv.r = tmp[0];\n\t\tv.g = tmp[1];\n\t\tv.b = tmp[2];\n\t}\n}\nfunction clone(v, proto) {\n\treturn v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n\tvar v = {r: 0, g: 0, b: 0, a: 255};\n\tif (Array.isArray(input)) {\n\t\tif (input.length >= 3) {\n\t\t\tv = {r: input[0], g: input[1], b: input[2], a: 255};\n\t\t\tif (input.length > 3) {\n\t\t\t\tv.a = n2b(input[3]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tv = clone(input, {r: 0, g: 0, b: 0, a: 1});\n\t\tv.a = n2b(v.a);\n\t}\n\treturn v;\n}\nfunction functionParse(str) {\n\tif (str.charAt(0) === 'r') {\n\t\treturn rgbParse(str);\n\t}\n\treturn hueParse(str);\n}\nclass Color {\n\tconstructor(input) {\n\t\tif (input instanceof Color) {\n\t\t\treturn input;\n\t\t}\n\t\tconst type = typeof input;\n\t\tlet v;\n\t\tif (type === 'object') {\n\t\t\tv = fromObject(input);\n\t\t} else if (type === 'string') {\n\t\t\tv = hexParse(input) || nameParse(input) || functionParse(input);\n\t\t}\n\t\tthis._rgb = v;\n\t\tthis._valid = !!v;\n\t}\n\tget valid() {\n\t\treturn this._valid;\n\t}\n\tget rgb() {\n\t\tvar v = clone(this._rgb);\n\t\tif (v) {\n\t\t\tv.a = b2n(v.a);\n\t\t}\n\t\treturn v;\n\t}\n\tset rgb(obj) {\n\t\tthis._rgb = fromObject(obj);\n\t}\n\trgbString() {\n\t\treturn this._valid ? rgbString(this._rgb) : this._rgb;\n\t}\n\thexString() {\n\t\treturn this._valid ? hexString(this._rgb) : this._rgb;\n\t}\n\thslString() {\n\t\treturn this._valid ? hslString(this._rgb) : this._rgb;\n\t}\n\tmix(color, weight) {\n\t\tconst me = this;\n\t\tif (color) {\n\t\t\tconst c1 = me.rgb;\n\t\t\tconst c2 = color.rgb;\n\t\t\tlet w2;\n\t\t\tconst p = weight === w2 ? 0.5 : weight;\n\t\t\tconst w = 2 * p - 1;\n\t\t\tconst a = c1.a - c2.a;\n\t\t\tconst w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n\t\t\tw2 = 1 - w1;\n\t\t\tc1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n\t\t\tc1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n\t\t\tc1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n\t\t\tc1.a = p * c1.a + (1 - p) * c2.a;\n\t\t\tme.rgb = c1;\n\t\t}\n\t\treturn me;\n\t}\n\tclone() {\n\t\treturn new Color(this.rgb);\n\t}\n\talpha(a) {\n\t\tthis._rgb.a = n2b(a);\n\t\treturn this;\n\t}\n\tclearer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 - ratio;\n\t\treturn this;\n\t}\n\tgreyscale() {\n\t\tconst rgb = this._rgb;\n\t\tconst val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n\t\trgb.r = rgb.g = rgb.b = val;\n\t\treturn this;\n\t}\n\topaquer(ratio) {\n\t\tconst rgb = this._rgb;\n\t\trgb.a *= 1 + ratio;\n\t\treturn this;\n\t}\n\tnegate() {\n\t\tconst v = this._rgb;\n\t\tv.r = 255 - v.r;\n\t\tv.g = 255 - v.g;\n\t\tv.b = 255 - v.b;\n\t\treturn this;\n\t}\n\tlighten(ratio) {\n\t\tmodHSL(this._rgb, 2, ratio);\n\t\treturn this;\n\t}\n\tdarken(ratio) {\n\t\tmodHSL(this._rgb, 2, -ratio);\n\t\treturn this;\n\t}\n\tsaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, ratio);\n\t\treturn this;\n\t}\n\tdesaturate(ratio) {\n\t\tmodHSL(this._rgb, 1, -ratio);\n\t\treturn this;\n\t}\n\trotate(deg) {\n\t\trotate(this._rgb, deg);\n\t\treturn this;\n\t}\n}\nfunction index_esm(input) {\n\treturn new Color(input);\n}\n\nconst isPatternOrGradient = (value) => value instanceof CanvasGradient || value instanceof CanvasPattern;\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 };\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}\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(evt, canvas) {\n const e = evt.native || evt;\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 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 { _toLeftRightCenter as $, _rlookupByKey as A, getAngleFromPoint as B, toPadding as C, each as D, getMaximumSize as E, _getParentNode as F, readUsedSize as G, HALF_PI as H, throttled as I, supportsEventListenerOptions as J, _isDomSupported as K, log10 as L, _factorize as M, finiteOrDefault as N, callback as O, PI as P, _addGrace as Q, toDegrees as R, _measureText as S, TAU as T, _int16Range as U, _alignPixel as V, clipArea as W, renderText as X, unclipArea as Y, toFont as Z, _arrayUnique as _, resolve as a, _angleDiff as a$, _alignStartEnd as a0, overrides as a1, merge as a2, _capitalize as a3, descriptors as a4, isFunction as a5, _attachContext as a6, _createResolver as a7, _descriptors as a8, mergeIf as a9, restoreTextDirection as aA, noop as aB, distanceBetweenPoints as aC, _setMinAndMaxByKey as aD, niceNum as aE, almostWhole as aF, almostEquals as aG, _decimalPlaces as aH, _longestText as aI, _filterBetween as aJ, _lookup as aK, getHoverColor as aL, clone$1 as aM, _merger as aN, _mergerIf as aO, _deprecated as aP, toFontString as aQ, splineCurve as aR, splineCurveMonotone as aS, getStyle as aT, fontString as aU, toLineHeight as aV, PITAU as aW, INFINITY as aX, RAD_PER_DEG as aY, QUARTER_PI as aZ, TWO_THIRDS_PI as a_, uid as aa, debounce as ab, retinaScale as ac, clearCanvas as ad, setsEqual as ae, _elementsEqual as af, _isClickEvent as ag, _isBetween as ah, _readValueToProps as ai, _updateBezierControlPoints as aj, _computeSegments as ak, _boundSegments as al, _steppedInterpolation as am, _bezierInterpolation as an, _pointInLine as ao, _steppedLineTo as ap, _bezierCurveTo as aq, drawPoint as ar, addRoundedRectPath as as, toTRBL as at, toTRBLCorners as au, _boundSegment as av, _normalizeAngle as aw, getRtlAdapter as ax, overrideTextDirection as ay, _textX as az, isArray as b, 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, getRelativePosition as y, _isPointInArea as z };\n","/*!\n * Chart.js v3.7.0\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, 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 getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK 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.$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 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 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 && (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 update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\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 dataset = this.getDataset();\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(dataset.data[i]) : 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 dataset = this.getDataset();\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index) => {\n if (!isNaN(dataset.data[index]) && 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 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 dataset = this.getDataset();\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, dataset.data[i]);\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 getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n return getRelativePosition$1(e, chart);\n}\nfunction evaluateAllVisibleItems(chart, handler) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n let index, data, element;\n for (let i = 0, ilen = metasets.length; i < ilen; ++i) {\n ({index, data} = metasets[i]);\n for (let j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\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 optimizedEvaluateItems(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) {\n const items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n };\n optimizedEvaluateItems(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 optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) {\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 = _isPointInArea(center, chart.chartArea, chart._minPadding);\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 optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return [];\n }\n return axis === 'r' && !intersect\n ? getNearestRadialItems(chart, position, axis, useFinalPosition)\n : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition);\n}\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const items = [];\n const axis = options.axis;\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateAllVisibleItems(chart, (element, datasetIndex, index) => {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({element, datasetIndex, index});\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n if (options.intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\nvar Interaction = {\n modes: {\n index(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition)\n : getNearestItems(chart, position, axis, false, useFinalPosition);\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 let items = options.intersect\n ? getIntersectItems(chart, position, axis, useFinalPosition) :\n getNearestItems(chart, position, axis, false, useFinalPosition);\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 return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest(chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'x', intersect: options.intersect}, useFinalPosition);\n },\n y(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {axis: 'y', intersect: 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$1(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 }\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 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 {\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 if (isHorizontal) {\n x = pixel;\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,\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 }\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.7.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 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: _isPointInArea(e, this.chartArea, this._minPadding)\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.type !== 'line') {\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 getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\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}\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 if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\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}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\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 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 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}\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 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}\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 _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\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 _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}\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 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}\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 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 _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\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}\nvar plugin_filler = {\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') {\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' && (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 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 const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n chart.notifyPlugins('afterTooltipDraw', args);\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: plugin_filler,\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 padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n 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 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, plugin_filler 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, registerables} from '../dist/chart.esm';\n\nChart.register(...registerables);\n\nexport default Chart;\n","\nimport { defineComponent, onMounted, PropType, ref } from \"vue\";\nimport { ReportsResponse } from \"@/models/ReportsResponse\";\nimport Chart, { ChartItem } from \"chart.js/auto\";\nimport _ from \"lodash\";\n\nexport type ReportsParcelsMethods = {\n createParcelsChart: (canvas: Element) => void;\n};\n\nexport type ReportsParcelsState = {\n data: number[];\n isEmpty: boolean;\n};\n\nexport default defineComponent({\n name: \"ReportsParcels\",\n props: {\n reportData: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const methods = {} as ReportsParcelsMethods;\n const reportPerWeekdays = ref(props.reportData.report_per_weekdays);\n const state = ref({\n data: [\n reportPerWeekdays.value?.parcels_per_monday ?? 0,\n reportPerWeekdays.value?.parcels_per_tuesday ?? 0,\n reportPerWeekdays.value?.parcels_per_wednesday ?? 0,\n reportPerWeekdays.value?.parcels_per_thursday ?? 0,\n reportPerWeekdays.value?.parcels_per_friday ?? 0,\n reportPerWeekdays.value?.parcels_per_saturday ?? 0,\n reportPerWeekdays.value?.parcels_per_sunday ?? 0,\n ],\n isEmpty: !_.sum(_.values(_.omit(reportPerWeekdays.value, \"id\"))),\n });\n\n methods.createParcelsChart = (canvas: Element) => {\n new Chart(canvas as ChartItem, {\n type: \"bar\",\n data: {\n labels: [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n ],\n datasets: [\n {\n label: \"Parcels\",\n backgroundColor: \"#0095DA\",\n data: state.value.data,\n borderRadius: 4,\n },\n ],\n },\n options: {\n aspectRatio: 2.5,\n plugins: {\n legend: {\n display: false,\n },\n },\n scales: {\n y: {\n display: true,\n grid: {\n display: false,\n },\n ticks: {\n callback: (tickValue: number | string) =>\n !(+tickValue % 1) ? tickValue.toString() : \"\",\n },\n },\n x: {\n display: true,\n grid: {\n display: true,\n },\n },\n },\n },\n });\n };\n\n onMounted(() => {\n const canvas = document.getElementById(\"reportsParcelsCanvas\");\n if (canvas) {\n methods.createParcelsChart(canvas);\n }\n });\n\n return {\n state,\n methods,\n };\n },\n});\n","import { render } from \"./ReportsParcels.vue?vue&type=template&id=22a68d1a&ts=true\"\nimport script from \"./ReportsParcels.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsParcels.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, resolveComponent as _resolveComponent, createBlock as _createBlock, createCommentVNode as _createCommentVNode } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"ml-4 p-6 bg-white\"\n}\nconst _hoisted_2 = { class: \"font-bold text-black text-medium\" }\nconst _hoisted_3 = { class: \"flex flex-row flex-row-reverse justify-between mt-20\" }\nconst _hoisted_4 = { class: \"w-1/2 text-center\" }\nconst _hoisted_5 = { class: \"flex flex-row px-2 text-light text-gray-7\" }\nconst _hoisted_6 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/12\" }, null, -1)\nconst _hoisted_7 = { class: \"w-5/12\" }\nconst _hoisted_8 = { class: \"w-2/6\" }\nconst _hoisted_9 = { class: \"w-1/6\" }\nconst _hoisted_10 = /*#__PURE__*/_createElementVNode(\"div\", { class: \"w-1/2 px-4\" }, [\n /*#__PURE__*/_createElementVNode(\"canvas\", { id: \"reportsCountriesCanvas\" })\n], -1)\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_ReportsCountriesLegendItem = _resolveComponent(\"ReportsCountriesLegendItem\")!\n\n return (_ctx.state.legend.length)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, _toDisplayString(_ctx.$t(\"report.parcels_per_country.title\")), 1),\n _createElementVNode(\"div\", _hoisted_3, [\n _createElementVNode(\"div\", _hoisted_4, [\n _createElementVNode(\"div\", _hoisted_5, [\n _hoisted_6,\n _createElementVNode(\"div\", _hoisted_7, _toDisplayString(_ctx.$t(\"report.parcels_per_country.labels.country\")), 1),\n _createElementVNode(\"div\", _hoisted_8, _toDisplayString(_ctx.$t(\"report.parcels_per_country.labels.parcels_number\")), 1),\n _createElementVNode(\"div\", _hoisted_9, _toDisplayString(_ctx.$t(\"report.parcels_per_country.labels.percent\")), 1)\n ]),\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.state.legend, (item, index) => {\n return (_openBlock(), _createBlock(_component_ReportsCountriesLegendItem, {\n color: item.color,\n countryName: item.countryName,\n parcelsCount: item.parcelsCount,\n parcelsPercentage: item.parcelsPercentage,\n key: `reports_countries_legend_item_${index}`\n }, null, 8, [\"color\", \"countryName\", \"parcelsCount\", \"parcelsPercentage\"]))\n }), 128))\n ]),\n _hoisted_10\n ])\n ]))\n : _createCommentVNode(\"\", true)\n}","import { normalizeStyle as _normalizeStyle, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex flex-row px-2 py-2 text-light text-center\" }\nconst _hoisted_2 = { class: \"w-1/12 pt-1.5\" }\nconst _hoisted_3 = { class: \"w-5/12\" }\nconst _hoisted_4 = { class: \"w-4/12 text-primary-blue font-bold\" }\nconst _hoisted_5 = { class: \"w-2/12\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n return (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createElementVNode(\"div\", _hoisted_2, [\n _createElementVNode(\"span\", {\n class: \"rounded-full w-3 h-3 m-auto block\",\n style: _normalizeStyle(`background-color: ${_ctx.color};`)\n }, null, 4)\n ]),\n _createElementVNode(\"div\", _hoisted_3, _toDisplayString(_ctx.countryName), 1),\n _createElementVNode(\"div\", _hoisted_4, _toDisplayString(_ctx.parcelsCount), 1),\n _createElementVNode(\"div\", _hoisted_5, _toDisplayString(`${_ctx.parcelsPercentage}${_ctx.$t(\"report.parcels_per_country.labels.percent\")}`), 1)\n ]))\n}","\nimport { defineComponent } from \"vue\";\n\nexport default defineComponent({\n name: \"ReportsCountriesLegendItem\",\n props: {\n color: {\n type: String,\n required: true,\n },\n countryName: {\n type: String,\n required: true,\n },\n parcelsCount: {\n type: String,\n required: true,\n },\n parcelsPercentage: {\n type: String,\n required: true,\n },\n },\n});\n","import { render } from \"./ReportsCountriesLegendItem.vue?vue&type=template&id=b8c6140a&ts=true\"\nimport script from \"./ReportsCountriesLegendItem.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsCountriesLegendItem.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { defineComponent, nextTick, PropType, ref } from \"vue\";\nimport { ReportsCountry, ReportsResponse } from \"@/models/ReportsResponse\";\nimport ReportsCountriesLegendItem from \"@/components/reports/ReportsCountries/ReportsCountriesLegendItem.vue\";\nimport Chart, { ChartItem } from \"chart.js/auto\";\nimport _ from \"lodash\";\nimport { onMounted } from \"@vue/runtime-core\";\n\nexport type ReportsCountriesMethods = {\n prepareCountriesChartData: () => void;\n createCountriesChart: (canvas: Element) => void;\n};\n\nexport type ReportsCountriesLegend = {\n color: string;\n countryName: string;\n parcelsCount: string;\n parcelsPercentage: string;\n intermediarySum?: number;\n}[];\n\nexport type ReportsCountriesState = {\n data: ReportsResponse;\n legend: ReportsCountriesLegend;\n};\n\nexport default defineComponent({\n name: \"ReportsCountries\",\n components: { ReportsCountriesLegendItem },\n props: {\n reportData: {\n type: Object as PropType,\n required: true,\n },\n },\n setup(props) {\n const methods = {} as ReportsCountriesMethods;\n const state = ref({\n data: props.reportData,\n legend: [],\n });\n\n methods.prepareCountriesChartData = () => {\n const colors = [\"#2997AB\", \"#8BA1E8\", \"#1286C4\", \"#0062DA\", \"#185E6E\"];\n\n state.value.legend = _.reduce(\n _.sortBy(\n _.get(state.value.data, \"report_per_countries\", []),\n (country: ReportsCountry) => {\n return -_.get(country, \"parcels_count\", 0);\n }\n ),\n (topFive: ReportsCountriesLegend, countryData) => {\n const parcelsCount = _.get(countryData, \"parcels_count\", 0);\n const parcelsPercentage =\n (100 * parcelsCount) / _.get(state.value.data, \"parcels_count\", 1);\n if (topFive.length < 4) {\n topFive.push({\n color: colors[topFive.length],\n countryName: _.get(countryData, \"country_name\", \"\"),\n parcelsCount: parcelsCount.toString(),\n parcelsPercentage: parcelsPercentage.toFixed(0),\n intermediarySum: parcelsCount,\n });\n } else if (topFive.length < 5) {\n topFive.push({\n color: colors[topFive.length],\n countryName: \"Other\",\n parcelsCount: parcelsCount.toString(),\n parcelsPercentage: parcelsPercentage.toFixed(0),\n intermediarySum: parcelsCount,\n });\n } else {\n topFive[4].intermediarySum =\n (topFive[4].intermediarySum || 0) + parcelsCount;\n topFive[4].parcelsCount = (\n topFive[4].intermediarySum || 0\n ).toString();\n topFive[4].parcelsPercentage = (\n (100 * topFive[4].intermediarySum) /\n _.get(state.value.data, \"parcels_count\", 1)\n ).toFixed(0);\n }\n return topFive;\n },\n [] as ReportsCountriesLegend\n );\n };\n\n methods.createCountriesChart = (canvas: Element): void => {\n new Chart(canvas as ChartItem, {\n type: \"pie\",\n data: {\n labels: _.map(state.value.legend, \"countryName\"),\n datasets: [\n {\n data: _.map(state.value.legend, \"parcelsCount\"),\n backgroundColor: _.map(state.value.legend, \"color\"),\n },\n ],\n },\n options: {\n responsive: true,\n plugins: {\n legend: {\n display: false,\n },\n },\n },\n });\n };\n\n onMounted(async () => {\n methods.prepareCountriesChartData();\n await nextTick();\n const canvas = document.getElementById(\"reportsCountriesCanvas\");\n if (canvas) {\n methods.createCountriesChart(canvas);\n }\n });\n\n return {\n state,\n methods,\n };\n },\n});\n","import { render } from \"./ReportsCountries.vue?vue&type=template&id=cacdf0c8&ts=true\"\nimport script from \"./ReportsCountries.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsCountries.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","\nimport { Component, defineComponent, onMounted, ref, shallowRef } from \"vue\";\nimport Spinner from \"@/components/ui/Spinner.vue\";\nimport reportsService from \"@/services/reports.service\";\nimport { PossibleValues, SelectOption } from \"@/common/FormTools\";\nimport _ from \"lodash\";\nimport { FormElementData } from \"@/models/FormElementData\";\nimport FormInput from \"@/components/form/inputs/FormInput.vue\";\nimport { FormElementState } from \"@/models/FormElementState\";\nimport NotExistingReport from \"@/components/reports/ReportsErrors/NotExistingReport.vue\";\nimport GeneralError from \"@/components/reports/ReportsErrors/GeneralError.vue\";\nimport DefaultButton from \"@/components/ui/DefaultButton.vue\";\nimport Modal from \"@/components/ui/Modal.vue\";\nimport ReportBeingPrepared from \"@/components/reports/ReportsErrors/ReportBeingPrepared.vue\";\nimport { ReportsResponse } from \"@/models/ReportsResponse\";\nimport ReportsSuppliers from \"@/components/reports/ReportsSuppliers/ReportsSuppliers.vue\";\nimport ReportsDetails from \"@/components/reports/ReportsDetails/ReportsDetails.vue\";\nimport ReportsParcels from \"@/components/reports/ReportsParcels/ReportsParcels.vue\";\nimport ReportsCountries from \"@/components/reports/ReportsCountries/ReportsCountries.vue\";\nimport { EventBus } from \"@/common/Tools\";\n\nexport type ReportsListMethods = {\n startDateChange: (fieldId: string, newValue: PossibleValues) => void;\n getStartDateOptions: () => Promise;\n reportTypeChange: (fieldId: string, newValue: PossibleValues) => void;\n getReportTypeOptions: () => Promise;\n getReportData: () => Promise;\n createReport: () => Promise;\n closeModal: () => void;\n checkSelectedCustomer: (selectedCustomer: unknown) => void;\n};\n\nexport type ReportsListState = {\n isLoading: boolean;\n isParentCustomer: boolean;\n refreshDisabled: boolean;\n showModal: boolean;\n modalMessage: string;\n startDate: string;\n startDateElementData: FormElementData;\n startDateInitialState: FormElementState;\n reportType: string;\n reportTypeElementData: FormElementData;\n reportTypeInitialState: FormElementState;\n reportData?: ReportsResponse;\n backendError?: Component;\n};\n\nexport default defineComponent({\n name: \"ReportsList\",\n components: {\n ReportsDetails,\n ReportsSuppliers,\n ReportsParcels,\n ReportsCountries,\n Modal,\n DefaultButton,\n FormInput,\n Spinner,\n },\n setup() {\n const methods = {} as ReportsListMethods;\n const state = ref({\n isLoading: true,\n isParentCustomer: false,\n refreshDisabled: false,\n showModal: false,\n modalMessage: \"\",\n startDate: \"\",\n startDateElementData: {\n id: \"start_date\",\n type: \"select\",\n options: () => [],\n disabledEmptyOption: true,\n class: \"flex flex-col items-center\",\n },\n startDateInitialState: {},\n reportType: \"\",\n reportTypeElementData: {\n id: \"report_type\",\n type: \"select\",\n options: () => [],\n disabledEmptyOption: true,\n class: \"flex flex-col items-center\",\n },\n reportTypeInitialState: {},\n reportData: undefined,\n backendError: undefined,\n });\n\n methods.reportTypeChange = (fieldId: string, newValue: PossibleValues) => {\n if (newValue) {\n state.value.reportType = newValue as string;\n methods.getReportData();\n }\n };\n\n methods.getReportTypeOptions = async (): Promise =>\n reportsService.getReportTypes().then((response) => {\n const extractedOptions = [\n {\n value: response.data[0],\n label: \"Regular\",\n },\n {\n value: response.data[1],\n label: \"Overall\",\n },\n ];\n const defaultValue = extractedOptions[0].value as string;\n state.value.reportTypeElementData.options = () => extractedOptions;\n state.value.reportType = defaultValue;\n state.value.reportTypeInitialState.value = defaultValue;\n });\n\n methods.startDateChange = (fieldId: string, newValue: PossibleValues) => {\n if (newValue) {\n state.value.startDate = newValue as string;\n methods.getReportData();\n }\n };\n\n methods.getStartDateOptions = async (): Promise =>\n reportsService.getStartDates().then((response) => {\n const extractedOptions = _.transform(\n response.data,\n (options: SelectOption[], label: string, value: string) => {\n options.push({\n value,\n label,\n });\n },\n [] as SelectOption[]\n );\n const defaultValue = extractedOptions[0].value as string;\n state.value.startDateElementData.options = () => extractedOptions;\n state.value.startDate = defaultValue;\n state.value.startDateInitialState.value = defaultValue;\n });\n\n methods.getReportData = async (): Promise => {\n state.value.isLoading = true;\n state.value.refreshDisabled = false;\n state.value.backendError = undefined;\n state.value.reportData = undefined;\n return reportsService\n .get(state.value.startDate, state.value.reportType)\n .then((response) => {\n if (response.data.new_parcels_being_processed) {\n state.value.refreshDisabled = true;\n state.value.backendError = shallowRef(ReportBeingPrepared);\n } else {\n state.value.reportData = response.data;\n }\n })\n .catch((response) => {\n if (response.response.status === 404) {\n state.value.backendError = shallowRef(NotExistingReport);\n } else {\n state.value.backendError = shallowRef(GeneralError);\n }\n })\n .finally(() => {\n state.value.isLoading = false;\n });\n };\n\n methods.createReport = async (): Promise => {\n state.value.isLoading = true;\n state.value.showModal = false;\n state.value.modalMessage = \"\";\n reportsService\n .post(state.value.startDate, state.value.reportType)\n .then(() => {\n state.value.modalMessage = \"report.modal.success_message\";\n state.value.showModal = true;\n })\n .catch((response) => {\n if (response.response.status === 400) {\n state.value.modalMessage = \"report.modal.already_preparing_error\";\n } else {\n state.value.modalMessage = \"report.modal.general_error\";\n }\n state.value.showModal = true;\n })\n .finally(() => {\n state.value.isLoading = false;\n });\n };\n\n methods.closeModal = () => {\n state.value.showModal = false;\n methods.getReportData();\n };\n\n methods.checkSelectedCustomer = (selectedCustomer) => {\n state.value.isParentCustomer = !selectedCustomer;\n };\n\n onMounted(async () => {\n await methods.getReportTypeOptions();\n await methods.getStartDateOptions();\n await methods.getReportData();\n });\n\n EventBus.emit(\"checkSelectedCustomer\");\n\n EventBus.on(\"selectedCustomer\", methods.checkSelectedCustomer);\n\n return {\n state,\n methods,\n };\n },\n});\n","import { render } from \"./ReportsList.vue?vue&type=template&id=4dc2d368&ts=true\"\nimport script from \"./ReportsList.vue?vue&type=script&lang=ts\"\nexport * from \"./ReportsList.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/opt/apps/myparcel4you-web/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader-v16/dist/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader-v16/dist/index.js??ref--1-1!./Icon.vue?vue&type=style&index=0&id=48b41e0a&scoped=true&lang=scss\""],"sourceRoot":""}