{"version":3,"sources":["webpack://opten.radix/./app/components/pgf/chart.ts","webpack://opten.radix/./app/components/pgf/tab.ts","webpack://opten.radix/./app/components/shared/alert.ts","webpack://opten.radix/./app/components/shared/datepicker.ts","webpack://opten.radix/./app/components/shared/filter-helper.ts","webpack://opten.radix/./app/components/shared/filter.ts","webpack://opten.radix/./app/components/shared/form-checkboxes.ts","webpack://opten.radix/./app/components/shared/form-select-updater.ts","webpack://opten.radix/./app/components/shared/form-templates.ts","webpack://opten.radix/./app/components/shared/form-total.ts","webpack://opten.radix/./app/components/shared/globalvars.ts","webpack://opten.radix/./app/components/shared/grid.ts","webpack://opten.radix/./app/components/shared/input.ts","webpack://opten.radix/./app/components/shared/modal.ts","webpack://opten.radix/./app/components/shared/page-top.ts","webpack://opten.radix/./app/components/shared/page-transition.ts","webpack://opten.radix/./app/components/shared/password-reveal.ts","webpack://opten.radix/./app/components/shared/progress.ts","webpack://opten.radix/./app/components/shared/recaptcha.ts","webpack://opten.radix/../node_modules/babel-plugin-transform-async-to-promises/helpers.js","webpack://opten.radix/../src/modules/Logger.ts","webpack://opten.radix/../node_modules/path-to-regexp/index.js","webpack://opten.radix/../src/schemas/attribute.ts","webpack://opten.radix/../src/utils/dom.ts","webpack://opten.radix/../src/utils/history.ts","webpack://opten.radix/../src/utils/helpers.ts","webpack://opten.radix/../src/utils/url.ts","webpack://opten.radix/../src/utils/request.ts","webpack://opten.radix/../node_modules/is-promise/index.js","webpack://opten.radix/../src/utils/run-async.ts","webpack://opten.radix/../src/hooks.ts","webpack://opten.radix/../src/defs/hooks.ts","webpack://opten.radix/../src/modules/Ignore.ts","webpack://opten.radix/../src/modules/Cache.ts","webpack://opten.radix/../src/modules/Prevent.ts","webpack://opten.radix/../src/modules/Error.ts","webpack://opten.radix/../src/modules/Store.ts","webpack://opten.radix/../src/modules/Transitions.ts","webpack://opten.radix/../src/modules/Views.ts","webpack://opten.radix/../src/polyfills/index.ts","webpack://opten.radix/../src/schemas/page.ts","webpack://opten.radix/../src/core.ts","webpack://opten.radix/../src/css.ts","webpack://opten.radix/./node_modules/@easepick/base-plugin/dist/index.esm.js","webpack://opten.radix/./node_modules/@easepick/core/dist/index.esm.js","webpack://opten.radix/./node_modules/@easepick/datetime/dist/index.esm.js","webpack://opten.radix/./node_modules/@easepick/lock-plugin/dist/index.esm.js","webpack://opten.radix/./node_modules/@easepick/time-plugin/dist/index.esm.js","webpack://opten.radix/./node_modules/@opten/animation/linear-tween/index.ts","webpack://opten.radix/./node_modules/@opten/collapse/index.ts","webpack://opten.radix/./node_modules/@opten/collapse/initializer/index.ts","webpack://opten.radix/./node_modules/@opten/compiler/factory/index.ts","webpack://opten.radix/./node_modules/@opten/compiler/index.ts","webpack://opten.radix/./node_modules/@opten/compiler/metadata/component.ts","webpack://opten.radix/./node_modules/@opten/compiler/reflector/index.ts","webpack://opten.radix/./node_modules/@opten/compiler/resolver/index.ts","webpack://opten.radix/./node_modules/@opten/compiler/util/decorators.ts","webpack://opten.radix/./node_modules/@opten/compiler/util/factories.ts","webpack://opten.radix/./node_modules/@opten/compiler/util/type.ts","webpack://opten.radix/./node_modules/@opten/cookie/get/index.ts","webpack://opten.radix/./node_modules/@opten/cookie/set/index.ts","webpack://opten.radix/./node_modules/@opten/dom/add-class/index.ts","webpack://opten.radix/./node_modules/@opten/dom/as-html-element/index.ts","webpack://opten.radix/./node_modules/@opten/dom/change-class/index.ts","webpack://opten.radix/./node_modules/@opten/dom/class-regex/index.ts","webpack://opten.radix/./node_modules/@opten/dom/get-class/index.ts","webpack://opten.radix/./node_modules/@opten/dom/get-selector-element-from-element/index.ts","webpack://opten.radix/./node_modules/@opten/dom/get-selector-from-element/index.ts","webpack://opten.radix/./node_modules/@opten/dom/get-window-scroll-top/index.ts","webpack://opten.radix/./node_modules/@opten/dom/has-class/index.ts","webpack://opten.radix/./node_modules/@opten/dom/is-html-element/index.ts","webpack://opten.radix/./node_modules/@opten/dom/remove-class/index.ts","webpack://opten.radix/./node_modules/@opten/dom/toggle-class/index.ts","webpack://opten.radix/./node_modules/@opten/events/dispatch-custom-event/index.ts","webpack://opten.radix/./node_modules/@opten/events/event-dispatcher/index.ts","webpack://opten.radix/./node_modules/@opten/events/event-namespace-factory/index.ts","webpack://opten.radix/./node_modules/@opten/reactive/debounce/index.ts","webpack://opten.radix/./node_modules/@opten/scroll/scroll-to-offset/index.ts","webpack://opten.radix/./node_modules/@opten/scroll/scroll-to/index.ts","webpack://opten.radix/./node_modules/@opten/transition/add-transition-end-listener/index.ts","webpack://opten.radix/./node_modules/@opten/transition/get-transition-end-event-name/index.ts","webpack://opten.radix/./node_modules/chart.js/dist/chart.esm.js","webpack://opten.radix/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://opten.radix/webpack/bootstrap","webpack://opten.radix/./app/pgf.ts"],"names":["ChartComponent","Component","className","element","CHART_MAX_SCALE","chartLabels","chartValues","chartMaxValues","this","dataset","labels","split","values","map","v","parseFloat","maxValues","normalizedValues","normalizeData","canvas","querySelector","chart","Chart","type","data","datasets","fill","backgroundColor","borderColor","pointBackgroundColor","pointBorderColor","borderWidth","options","responsive","maintainAspectRatio","font","family","size","scales","r","beginAtZero","min","max","ticks","display","stepSize","val","index","TabComponent","Array","from","querySelectorAll","forEach","label","addEventListener","changeTab","tabs","classList","remove","tab","add","AlertComponent","closer","e","preventDefault","close","setTimeout","addClass","DatepickerComponent","disabledWeekDays","getAttribute","enableTime","plugins","LockPlugin","push","TimePlugin","datePicker","easepick","create","css","lang","document","documentElement","zIndex","format","readonly","date","value","minDate","maxDate","filter","picked","indexOf","getDay","toString","setup","picker","on","event","Event","bubbles","cancelable","dispatchEvent","gotoDate","FilterHelper","filterGroups","tags","defaults","form","hasClass","filterFormSelector","substring","emptyState","getElementsByClassName","modals","filters","filterControlSelector","search","tagContainer","tagTemplate","closeModal","tag","removeFilterItem","toggleEmptyState","onReset","onSubmit","self","connected","filterSame","o","name","filterAll","checked","target","find","every","length","all","some","option","selected","innerHTML","FormData","title","addFilterItem","toggleClass","temp","createElement","cloneNode","removeClass","setAttribute","appendChild","outerHTML","replace","firstChild","firstElementChild","defaultValue","onRemoveFilter","show","modal","FilterComponent","targetSelector","sortSelector","pageListSelector","pageList","sortControls","mixer","activeFilter","getFilterGroupSelectors","setFilterGroupSelectors","parseFilterGroups","selectors","control","controls","scope","toggleLogic","enable","multifilter","parseOn","callbacks","onParseFilterGroups","command","updateTags","onMixStart","state","futureState","totalShow","onMixEnd","onMixClick","originalEvent","closest","mergeDeep","classNames","elementPager","pagination","limit","maintainActivePage","hidePageListIfSinglePage","generatePageStats","templates","pagerPrev","pagerNext","initPager","mixitup","sort","collapse","Collapse","getInstance","parentElement","hide","params","URL","location","searchParams","events","key","tagName","t","changeEvent","Object","keys","pagerControls","dataPage","paginate","sources","source","shift","isObject","item","isArray","FormCheckboxesComponent","sameInputs","hasAttribute","input","checkRequired","scrollToSelected","firstChecked","scrollTo","offsetTop","offsetHeight","parseInt","getComputedStyle","marginTop","hasSomeChecked","required","FormSelectUpdateComponent","items","targets","setupItem","FormTemplatesComponent","onFieldAdded","subscribe","field","update","onFieldRemoved","updateRemoving","updateTargets","oldValue","newValue","text","i","opt","concat","createTargets","splice","undefined","Number","MAX_SAFE_INTEGER","shadow","shadowInput","namePrefix","idPrefix","id","template","adder","initItem","checkRemover","checkAdder","newItem","newHtmlItem","parentNode","insertBefore","nextSibling","newIndex","replaceAll","dispatch","updateIndex","remover","regExp","RegExp","escapeRegExp","elem","string","EventDispatcher","FormTotalComponent","total","inputs","updateTotal","factor","GlobalVarsComponent","setGlobalVars","window","debounce","style","setProperty","innerHeight","GridComponent","grid","Isotope","itemSelector","layoutMode","arrange","InputComponent","hasValueClass","isActiveClass","formField","valueShadows","setValueClass","hasData","placeholder","updateInputHeight","toLowerCase","htmlFor","height","scrollHeight","ModalComponent","cookieKey","cookieDays","getCookie","triggers","trigger","stopPropagation","closeEvent","Date","setDate","getDate","setCookie","PageTopComponent","wrapper","setVisibility","scrollToOffset","scrollTop","Window","clientHeight","getWindowScrollTop","PageTransitionComponent","barba","hooks","afterOnce","after","onPageChange","next","container","Cookiebot","runScripts","enter","startAt","pos","position","offset","scrollY","leave","Promise","resolve","current","namespace","use","barbaCss","init","timeout","prevent","el","transitions","to","requestError","action","url","response","PasswordRevealComponent","ProgressComponent","svg","createElementNS","cricleFill","circleState","IntersectionObserver","intersectionRatio","setProgress","rootMargin","threshold","observe","stroke","radius","clientWidth","normalizedRadius","circumference","Math","PI","setAttributeNS","percent","strokeDashoffset","ReCaptchaComponent","grecaptcha","ready","render","_catch","body","recover","result","then","LogLevels","Symbol","iterator","asyncIterator","_level","off","Logger","_source","getLevel","setLevel","error","objects","_log","console","warn","warning","info","debug","log","fn","level","apply","pathToRegexp","regexpToFunction","parse","tokensToFunction","tokensToRegExp","PATH_REGEXP","join","str","res","tokens","path","defaultDelimiter","delimiter","whitelist","pathEscaped","exec","m","escaped","slice","prev","capture","group","modifier","k","c","pattern","prefix","optional","repeat","escapeGroup","escapeString","substr","re","pathname","decode","decodeURIComponent","matches","flags","encode","encodeURIComponent","validate","token","segment","TypeError","j","test","String","sensitive","strict","start","end","endsWith","route","endToken","isEndDelimited","groups","match","regexpToRegexp","parts","arrayToRegexp","stringToRegexp","schemaAttribute","history","dom","DOMParser","toDocument","htmlString","_parser","parseFromString","toElement","div","getHtml","doc","getWrapper","_attr","getContainer","removeContainer","contains","removeChild","addContainer","existingContainer","_insertAfter","getNamespace","ns","n","getHref","href","resolveUrl","baseVal","urls","numUrls","Error","base","arguments","head","getElementsByTagName","resolved","a","newNode","referenceNode","_session","scroll","x","scrollX","y","_states","_pointer","states","replaceState","change","_getDirection","_getAction","pushState","get","set","pop","clear","newStates","attr","diff","abs","page","html","nextDocument","ptr","requestAnimationFrame","getOrigin","origin","getPort","port","portString","hash","query","hashIndex","queryIndex","parseQuery","reduce","acc","clean","request","ttl","reject","xhr","XMLHttpRequest","onreadystatechange","readyState","DONE","status","responseText","statusText","ontimeout","err","onerror","open","setRequestHeader","send","obj","runAsync","func","ctx","args","async","promise","answer","isPromise","_this","Map","registered","_this2","hook","has","Set","chain","_this3","logger","_this4","help","HookMethods","Ignore","ignore","_ignoreAll","paths","_ignoreRegexes","p","checkHref","regex","Cache","_state","getRequest","getAction","exists","newTab","which","metaKey","ctrlKey","shiftKey","altKey","blank","corsDomain","protocol","hostname","corsPort","download","preventSelf","preventAll","Boolean","sameUrl","Prevent","check","suite","tests","run","checkLink","BarbaError","captureStackTrace","Store","_rules","once","matching","active","valid","reverse","_check","rule","activeMatch","transitionType","infos","_addPriority","b","priority","transition","direction","isValid","hasMatch","strRule","objRule","fnName","names","_calculatePriority","ruleName","ruleIndex","pow","Transitions","store","doOnce","_running","_doAsyncHook","doPage","f","sync","_isTransitionError","leaveResult","helpers","message","Views","views","byNamespace","view","_createHook","Element","prototype","msMatchesSelector","webkitMatchesSelector","s","nodeType","schemaPage","plugin","installedPlugins","install","schema","cacheIgnore","prefetchIgnore","preventRunning","preventCustom","logLevel","version","_requestCustomError","_wrapper","_resetData","cache","_onLinkEnter","bind","_onLinkClick","_onStateChange","_bind","onceData","destroy","_unbind","force","assign","go","isRunning","getPath","hasSelf","readyData","hasOnce","onRequestError","shouldWait","prefetch","_this5","removeEventListener","link","_getLinkElement","_this6","_data","_once","_leave","_enter","before","_getPrefix","beforeOnce","_beforeOnce","_afterOnce","beforeLeave","_beforeLeave","afterLeave","_afterLeave","beforeEnter","_beforeEnter","afterEnter","_afterEnter","unshift","kind","nextTick","_hasTransition","_checkTransition","cb","step","transitionDuration","dependencies","getName","includes","dependenciesNotFound","pluginsAsStringArray","camelCaseToKebab","ui","onAttach","onDetach","setHours","header","clone","autoApply","HTMLElement","calendars","getCalendarHeaderView","getCalendarDayNamesView","getCalendarDaysView","getCalendarFooterView","locale","cancel","disabled","toLocaleString","month","previousMonth","nextMonth","firstDay","weekday","dayIdx","calcOffsetDays","getFullYear","getMonth","getCalendarDayView","time","getTime","isSame","datePicked","instances","hasOwnProperty","call","attach","getPluginFn","detach","removeInstance","addInstance","Calendar","PluginManager","cssLoaded","binds","hidePicker","inline","documentClick","shadowRoot","handleOptions","pointerEvents","attachShadow","mode","handleCSS","onView","onRender","initialize","parseValues","onClick","renderAll","CustomEvent","detail","isCalendarHeaderButton","subtract","isCalendarDay","isApplyButton","isCancelButton","onClickHeaderButton","onClickCalendarDay","onClickApplyButton","onClickCancelButton","isShown","adjustPosition","top","left","updateValues","HTMLInputElement","innerText","composedPath","getRootNode","host","readOnly","rel","append","createTextNode","getBoundingClientRect","bottom","innerWidth","width","right","freeze","__proto__","Core","parseDateTime","midnight_ts","setMonth","ceil","isBetween","round","entries","formatTokens","shortMonths","longMonths","getHours","getMinutes","getSeconds","toJSDate","year","shortMonth","longMonth","day","hour","minute","second","ampm","formatPatterns","h","g","u","isNaN","l","d","M","MONTH_JS","minDays","maxDays","selectForward","selectBackward","presets","inseparable","isSameOrBefore","isSameOrAfter","testFilter","isBefore","isAfter","rangeIsNotAvailable","dateIsNotAvailable","lockMinDate","lockMaxDate","lockMinDays","lockMaxDays","lockSelectForward","lockSelectBackward","native","seconds","stepHours","stepMinutes","stepSeconds","format12","timePicked","timePrePicked","getStartDate","getEndDate","onInput","onChange","setTime","setStartTime","setEndTime","_getDate","_getStartDate","_getEndDate","defineProperties","configurable","rangePlugin","getStartInput","getEndInput","getSingleInput","HTMLSelectElement","handleFormat12","startDate","endDate","handleTimeString","getNativeInput","getCustomInput","elementEnd","timeElapsed","distance","duration","CollapseComponent","stringCollapse","activeClass","activeParentClass","animateProp","collapsingClass","componentClass","showClass","showClassDesktop","desktopWidth","isHideable","closeSiblings","useShowClassDesktop","dataParentSelector","dataTargetSelector","dataToggleSelector","hrefSelector","isTransitioning","eventNamespaceFn","eventNamespaceFactory","handleClick","currentTarget","getSelectorElementFromElement","toggle","outerWidth","isOpen","parent","selector","actives","collapseInstance","_handleShow","_handleClose","_addAriaAndCollapsedClass","collapseElement","addTransitionEndListener","offsetWidth","components","rootElement","observables","componentType","component","resolver","safeRootElement","node","compiler","compile","MutationObserver","mutations","componentInitializer","mutation","addedNodes","isHTMLElement","asHTMLElement","comps","childList","subtree","reflector","Reflector","Resolver","Compiler","componentCache","constructor","queries","propName","nodes","descendants","first","isType","onInit","makeDecorator","createComponent","makeMetadataFactory","typeOrFunc","parentCtor","getParentCtor","ownAnnotations","_ownAnnotations","annotations","propMetadata","parentPropMetadata","ownPropMetadata","_ownPropMetadata","decorators","ANNOTATIONS","PROP_METADATA","ctor","parentProto","getPrototypeOf","QUERY_METADATA_IDENTIFIERS","typeMetadata","metadata","findLast","metadataName","propertyMetadata","_mergeWithPropertyMetadata","_merge","mergedQueries","propertyName","_getQueryMetadata","q","read","arr","condition","props","parentClass","chainFn","typeFn","metaCtor","makeMetadataCtor","DecoratorFactory","annotationInstance","typeDecorator","cls","defineProperty","PropDecoratorFactory","decoratorInstance","metaName","meta","factory","isTypeOf","Type","Function","cookie","domain","secure","expires","Infinity","toUTCString","keyStr","valueStr","domainStr","pathStr","secureStr","getClass","trim","classRegexCache","attribute","fallbackHref","getSelectorFromElement","getElementById","pageYOffset","classRegex","nodeName","elements","removeClassFactory","changeClass","eventName","Subscription","handler","isOnce","isExecuted","subscriptions","sub","execute","cleanup","dispatchCustomEvent","wait","immediate","context","later","callNow","clearTimeout","animationFunction","linearTween","timeStart","loop","callback","fallbackDuration","called","listener","transitionEndEventName","getTransitionEndEventName","WebkitTransition","animator","_request","_charts","_lastDate","anims","listeners","numSteps","initial","currentStep","requestAnimFrame","_update","_refresh","now","remaining","running","draw","_active","_total","tick","_notify","charts","complete","progress","_getAnims","cur","_duration","delete","transparent","interpolators","boolean","color","c0","c1","mix","hexString","number","Animation","cfg","prop","currentValue","_fn","_easing","effects","easing","linear","_start","floor","delay","_loop","_target","_prop","_from","_to","_promises","elapsed","remain","promises","rej","method","animationOptions","animation","describe","_fallback","_indexable","_scriptable","colors","properties","numbers","resize","animations","visible","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","charAt","_animateOptions","scaleClip","scale","allowedOverflow","opts","getSortedDatasetIndices","filterVisible","ilen","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","datasetIndex","otherValue","singleMode","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","getFirstScaleId","clearStacks","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","_cachedDataOpts","getMeta","_type","_parsing","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","linkScales","_stacked","addElements","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","getDatasetMeta","scaleID","adata","convertObjectDataToArray","isExtensible","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","count","sorted","_sorted","parseArrayData","parseObjectData","parsePrimitiveData","getLabels","singleScale","xAxisKey","yAxisKey","range","parsedValue","NaN","canStack","otherScale","_getOtherScale","hidden","createStack","POSITIVE_INFINITY","NEGATIVE_INFINITY","getUserBounds","minDefined","maxDefined","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","getLabelForValue","_clip","clip","defaultClip","getMaxOverflow","area","chartArea","drawActiveElementsOnTop","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","cacheKey","sharing","datasetElementScopeKeys","prefixes","resolveNamedOptions","datasetAnimationScopeKeys","_cacheable","sharedOptions","_animationsDisabled","_resolveAnimations","getStyle","getSharedOptions","_setStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_dataChanges","_sync","newCount","computeMinSampleSize","curr","_cache","$bar","visibleMetas","getAllParsedValues","_","getAllScaleValues","_length","updateMinAndPrev","getPixelForValue","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v1","v2","startEnd","setInflateAmount","ratio","inflateAmount","BarController","iAxisKey","vAxisKey","bars","reset","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","updateElement","last","grouped","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","baseValue","minBarLength","actualBase","floating","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","rects","overrides","_index_","_value_","BubbleController","points","point","iPixel","getPixelForDecimal","vPixel","skip","tooltip","DoughnutController","innerRadius","outerRadius","offsetX","offsetY","getter","rotation","TAU","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_getRotationExtents","ratioX","ratioY","startAngle","endAngle","startX","cos","startY","sin","endX","endY","calcMax","angle","calcMin","maxX","maxY","HALF_PI","minX","minY","getRatioAndOffset","maxWidth","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","arc","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","descriptors","aspectRatio","legend","generateLabels","pointStyle","fillStyle","strokeStyle","lineWidth","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","line","_dataset","animationsDisabled","pointCount","lo","hi","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_datasetIndex","_decimated","showLine","animated","spanGaps","maxGapLength","directUpdate","prevParsed","nullData","stop","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","angleLines","circular","pointLabels","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","interaction","controllers","abstract","DateAdapter","timestamp","amount","unit","override","members","adapters","_date","getRelativePosition","binarySearch","metaset","intersect","lookupMethod","_reversePixels","_rlookupByKey","_lookupByKey","getRange","optimizedEvaluateItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestItems","distanceMetric","useX","useY","pt1","pt2","deltaX","deltaY","sqrt","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestCartesianItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","jlen","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","array","filterDynamicPositionByAxis","box","sortByWeight","v0","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","layout","getPadding","newWidth","newHeight","outerHeight","widthChanged","w","heightChanged","same","other","getMargins","margin","fitBoxes","boxes","refit","refitBoxes","fullSize","setBoxDims","placeBoxes","userPadding","padding","placed","stackWeight","autoPadding","layouts","addBox","_layers","z","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","wrap","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","_stack","buildStacks","setLayoutDims","updatePos","handleMaxPadding","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","supportsEventListenerOptions","passive","removeListener","nodeListContains","nodeList","createAttachObserver","observer","removedNodes","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","currentDevicePixelRatio","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","proxy","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","boxSizing","displayWidth","displayHeight","initCanvas","removeAttribute","proxies","$proxies","isConnected","_detectPlatform","OffscreenCanvas","final","ret","defaultRoutes","formatters","numeric","tickValue","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","newTicks","majorStart","majorEnd","bounds","grace","drawBorder","drawOnChartArea","drawTicks","tickLength","tickWidth","tickColor","borderDash","borderDashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","align","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","startsWith","offsetFromEdge","sample","numItems","increment","len","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","getTickMarkLength","getTitleHeight","fallback","lineHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","metas","getMinMax","xLabels","yLabels","beforeUpdate","margins","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","ticksLimit","maxTicksLimit","_tickSize","maxScale","maxChart","determineMaxTicks","majorIndices","enabled","getMajorIndices","numMajorIndices","skipMajors","evenMajorSpacing","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","generateTickLabels","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","gc","gcLen","garbageCollect","valueAt","idx","pixel","decimal","getBaseValue","createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","textAlign","lineCount","textOffset","tickAndPadding","hTickAndPadding","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","strokeColor","strokeWidth","backdrop","labelPadding","translation","save","fillRect","restore","findIndex","_computeGridLineItems","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","lastLineWidth","_computeLabelArea","_computeLabelItems","titleX","titleY","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","tz","gz","axisID","fontSize","TypedRegistry","isPrototypeOf","parentScope","proto","isIChartComponent","register","itemDefaults","routes","property","propertyParts","sourceName","sourceScope","targetName","targetScope","routeDefaults","registerDefaults","Registry","_typedRegistries","_each","_get","typedRegistry","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","camelMethod","PluginService","_init","_createDescriptors","_descriptors","descriptor","_oldCache","_notifyStateChanges","getPlugin","local","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","_proxy","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","platform","clearCache","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","getResolver","subPrefixes","needContext","subResolver","descriptorDefaults","resolverCache","hasFunction","isScriptable","isIndexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getChart","moveNumericKeys","intKey","userConfig","initialCanvas","existingChart","chartOptionScopes","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","getMaximumSize","newRatio","getDevicePixelRatio","onResize","scalesOptions","axisOptions","scaleOpts","updated","isRadial","dposition","dtype","scaleType","getScale","hasUpdated","_destroyDatasetMeta","newControllers","_removeUnreferencedMetasets","order","ControllerClass","getController","getElement","_updateMetasets","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","unbindEvents","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","_stop","releaseContext","toDataURL","bindUserEvents","bindResponsiveEvents","_add","detached","_remove","isAttached","activeElements","lastActive","notify","replay","hoverOptions","hover","deactivated","activated","updateHoverStyle","inChartArea","eventFilter","_handleEvent","_getActiveElements","isClick","lastEvent","determineLastEvent","onHover","getElementsAtEventForMode","invalidatePlugins","enumerable","clipArc","pixelMargin","angleMargin","closePath","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","unregister","ArcElement","fullCircles","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","translate","drawArc","borderJoinStyle","inner","lineJoin","drawFullCircleBorders","setStyle","lineCap","borderCapStyle","previous","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","_steppedLineTo","tension","cubicInterpolationMode","_bezierCurveTo","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segments","_interpolate","_steppedInterpolation","_bezierInterpolation","_pointInLine","_getInterpolationMethod","interpolated","segmentMethod","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","capBezierPoints","PointElement","mouseX","mouseY","hoverRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","rect","inflateRect","refRect","BarElement","maxW","maxH","parseBorderWidth","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","parseBorderRadius","outer","boundingRects","addRectPath","addRoundedRectPath","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","decimated","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","endIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","decodeFill","fillOption","parseFillOption","simpleArc","findSegmentEnd","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","interpolate","pointValue","linePoints","firstValue","lastValue","getTarget","getLineByIndex","sourcePoints","below","getLinesBelow","createBoundaryLine","buildStackLine","boundary","computeCircularBoundary","computeLinearBoundary","computeBoundary","pointsFromSegments","resolveTarget","propagate","visited","clipY","lineLoop","getBounds","_getEdge","clipBounds","interpolatedLineTo","interpolatedPoint","_fill","tpoints","tgt","subBounds","fillSource","src","notShape","targetLoop","drawfill","lineOpts","above","doFill","plugin_filler","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","heightLimit","totalWidth","currentColWidth","currentColHeight","col","rtl","rtlHelper","hitbox","leftForLtr","_draw","cursor","defaultColor","fontColor","halfFontSize","textDirection","textWidth","setWidth","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","drawLegendBox","strikethrough","fillText","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","_element","adjustHitBoxes","afterEvent","handleEvent","ci","Title","_padding","textSize","fontOpts","_drawArgs","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","getTooltipSize","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","lines","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","cornerRadius","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","getLabelAndValue","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","pt","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","noop","labelCount","Decimation","Filler","SubTitle","CategoryScale","_startValue","_valueRange","_addedLabels","added","isFinite","addedLabels","addIfString","lastIndexOf","findOrAddLabel","getDecimalForPixel","relativeLabelSize","minSpacing","rad","LinearScaleBase","_endValue","setMin","setMax","minSign","maxSign","MIN_SAFE_INTEGER","maxTicks","computeTickLimit","getTickLimit","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","decimalPlaces","generateTicks$1","_maxDigits","LinearScale","handleTickRangeOptions","isMajor","tickVal","LogarithmicScale","_zero","exp","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","updateLimits","limits","hLimits","vLimits","getTextAlignForAngle","yForAngle","pathRadiusLine","getPointPosition","RadialLinearScale","drawingArea","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","plFont","setCenterPoint","extra","outerDistance","pointLabelPosition","buildPointLabelItems","fitWithPointLabels","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","drawPointLabels","gridLineOpts","drawRadiusLine","rotate","animate","INTERVALS","millisecond","common","steps","week","quarter","UNITS","sorter","adapter","_adapter","_parseOpts","parser","isoWeekday","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","formatter","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","normalize","table","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","atan2","toTRBL","loopable","thisArg","bbWidth","bbHeight","getPositionedStyle","parseMaxStyle","INFINITY","containerSize","_getParentNode","containerStyle","containerBorder","containerPadding","getContainerSize","borders","paddings","round1","updateFn","updateArgs","ticking","rest","isNumberFinite","minmax","toDimension","keepZero","radians","_limitValue","halfWidth","setRenderOpts","isNullOrUndef","strokeText","decorateText","valueOrDefault","FONT_STYLE","toLineHeight","toFontString","cacheable","_attachContext","subProxy","_context","_subProxy","Proxy","deleteProperty","receiver","_cached","isFunction","needsSubResolver","createSubResolver","_scopes","_resolveScriptable","defined","_resolveArray","_resolveWithContext","getOwnPropertyDescriptor","Reflect","ownKeys","original","prevTextDirection","roundedRange","almostEquals","niceRange","log10","fraction","rounded","arrayOfThings","thing","nestedThing","longest","_measureText","pixelSize","fontStyle","fontFamily","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","resetTransform","clearRect","a0","a1","controlPoints","splineCurveMonotone","splineCurve","cp1x","cp1y","cp2x","cp2y","inArea","inAreaPrev","inAreaNext","_isPointInArea","capControlPoint","segmentOptions","findStartAndEnd","splitByStyles","solidSegments","_boundSegment","cp1","cp2","flip","midpoint","bezierCurveTo","xOffset","yOffset","RAD_PER_DEG","drawImage","TWO_THIRDS_PI","QUARTER_PI","SQRT1_2","_readValueToProps","rectX","getRightToLeftAdapter","_itemWidth","getPropertyValue","getPropertyPriority","isPatternOrGradient","index_esm","_chartjs","arrayEvents","_capitalize","object","num","JSON","stringify","intlCache","Intl","NumberFormat","getNumberFormat","degrees","stub","evt","borderBox","touches","useOffsetPos","clientX","clientY","getCanvasPosition","uid","dimension","clone$1","klen","isValidKey","_merger","tval","sval","merge","merger","mergeIf","_mergerIf","indexOfDotOrLength","resolveObjectKey","toUpperCase","PITAU","sign","distanceBetweenPoints","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_isBetween","atEdge","elasticIn","elasticOut","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","A","B","C","D","E","F","hex","h1","h2","eq","lim","p2b","n2b","b2n","n2p","RGB_RE","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","rgb","rgb2hsl","calln","hsl2rgb","hue","names$1","map$1","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","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","modHSL","tmp","fromObject","functionParse","rgbParse","hwb2rgb","hsv2rgb","hueParse","Color","ok","nk","unpacked","tkeys","unpack","nameParse","_rgb","_valid","isShort","hslString","me","w2","c2","w1","deg","CanvasGradient","CanvasPattern","getHoverColor","saturate","darken","getScope$1","root","Defaults","hoverBackgroundColor","hoverBorderColor","hoverColor","scopeObject","targetScopeObject","privateName","writable","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","decorationWidth","LINE_HEIGHT","objProps","createContext","parentContext","_lookup","cmp","mid","_createResolver","rootScopes","_resolve","toStringTag","_keys","_resolveWithPrefixes","getKeysFromAllScopes","storage","_storage","_allKeys","readKey","resolveFallback","getScope","addScopes","parentScopes","parentFallback","_rootScopes","allScopes","addScopesFromKey","_getTarget","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","getValueAxis","middlePoint","afterPoint","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointsLen","pointAfter","monotoneCompute","pointBefore","valueAxis","slopeDelta","domNode","styleValue","parentProperty","valueInPixels","positions","styles","suffix","passiveSupported","propertyFn","between","compare","normalizeSegment","prevValue","startBound","endBound","getSegment","inside","subStart","chartContext","baseStyle","readStyle","prevStyle","addStyle","st","dir","styleChanged","p0","p0DataIndex","p1DataIndex","doSplitByStyles","__webpack_module_cache__","__webpack_require__","moduleId","exports","module","__webpack_modules__"],"mappings":"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","file":"Scripts/pgf.js","sourcesContent":["import { Component } from '@opten/compiler/metadata/component';\r\nimport { Chart } from 'chart.js';\r\n\r\n@Component({ className: 'js-chart' })\r\nexport class ChartComponent {\r\n private readonly CHART_MAX_SCALE = 3;\r\n\r\n\tprivate canvas: HTMLCanvasElement;\r\n private chart: Chart;\r\n\r\n private chartLabels: string[] = [];\r\n private chartValues: number[] = [];\r\n private chartMaxValues: number[] = [];\r\n\r\n constructor(private element: HTMLElement) {\r\n this.chartLabels = this.element.dataset.labels.split(',');\r\n this.chartValues = this.element.dataset.values.split(',').map(v => parseFloat(v));\r\n this.chartMaxValues = this.element.dataset.maxValues.split(',').map(v => parseFloat(v));\r\n\r\n let normalizedValues = this.normalizeData(this.chartValues, this.chartMaxValues);\r\n \r\n this.canvas = this.element.querySelector('.js-chart-canvas');\r\n this.chart = new Chart(this.canvas, {\r\n type: 'radar',\r\n data: {\r\n labels: this.chartLabels,\r\n datasets: [{\r\n data: normalizedValues,\r\n fill: true,\r\n backgroundColor: 'rgba(97, 198, 193, 0.5)',\r\n \r\n borderColor: 'rgb(164, 164, 164)',\r\n pointBackgroundColor: 'rgb(164, 164, 164)',\r\n pointBorderColor: 'rgb(164, 164, 164)',\r\n borderWidth: 1,\r\n }]\r\n },\r\n options: {\r\n responsive: true,\r\n maintainAspectRatio: false,\r\n font: {\r\n family: '\\'Barlow\\', Arial, Verdana, Georgia, serif',\r\n size: 18,\r\n },\r\n scales: {\r\n r: {\r\n beginAtZero: true,\r\n min: 0,\r\n max: this.CHART_MAX_SCALE,\r\n ticks: {\r\n display: false,\r\n stepSize: 1,\r\n }\r\n }\r\n }\r\n }\r\n })\r\n\t}\r\n\r\n private normalizeData(values: number[], maxValues: number[]): number[] {\r\n return values.map((val, index) => {\r\n let normalized = val / maxValues[index];\r\n return normalized * this.CHART_MAX_SCALE;\r\n });\r\n }\r\n\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-tab' })\r\nexport class TabComponent {\r\n\r\n private labels: HTMLElement[];\r\n private tabs: HTMLElement[];\r\n\r\n constructor(private element: HTMLElement) {\r\n this.labels = Array.from(this.element.querySelectorAll('.c-tab__label'));\r\n this.labels.forEach(label => label.addEventListener('click', () => this.changeTab(label)));\r\n\r\n this.tabs = Array.from(this.element.querySelectorAll('.c-tab__content'));\r\n\t}\r\n\r\n private changeTab(label: HTMLElement): void {\r\n this.labels.forEach(label => label.classList.remove('is-active'));\r\n this.tabs.forEach(tab => tab.classList.remove('is-active'));\r\n\r\n label.classList.add('is-active');\r\n this.element.querySelector(`#${label.dataset.tab}`).classList.add('is-active');\r\n }\r\n\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { hasClass } from '@opten/dom/has-class';\r\n\r\n@Component({ className: 'alert' })\r\nexport class AlertComponent {\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst closer = this.element.querySelector('.close');\r\n\t\tif (closer) {\r\n\t\t\tcloser.addEventListener('click', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.close();\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.element.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.close();\r\n\t\t});\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.close();\r\n\t\t}, 10000);\r\n\t}\r\n\r\n\tprivate close() {\r\n\t\taddClass(this.element, 'is-hidden');\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.element.remove();\r\n\t\t}, 2000);\r\n\t}\r\n}\r\n","import { easepick } from '@easepick/core';\r\nimport { DateTime } from '@easepick/datetime';\r\nimport { LockPlugin } from '@easepick/lock-plugin';\r\nimport { TimePlugin } from '@easepick/time-plugin';\r\nimport { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-datepicker' })\r\nexport class DatepickerComponent {\r\n\tprivate datePicker: easepick.Core;\r\n\r\n\tconstructor(private element: HTMLInputElement) {\r\n\t\tconst disabledWeekDays = this.element.getAttribute(\r\n\t\t\t'data-disabled-week-days'\r\n\t\t);\r\n\t\tconst enableTime = this.element.getAttribute('data-enable-time');\r\n\t\tconst plugins = [LockPlugin] as any;\r\n\t\tif (enableTime && enableTime == 'true') {\r\n\t\t\tplugins.push(TimePlugin);\r\n\t\t}\r\n\t\tthis.datePicker = new easepick.create({\r\n\t\t\telement: this.element,\r\n\t\t\tcss: ['/css/datepicker.css'],\r\n\t\t\tplugins: plugins,\r\n\t\t\tlang: document.documentElement.lang,\r\n\t\t\tzIndex: 999,\r\n\t\t\tformat: 'DD.MM.YYYY',\r\n\t\t\treadonly: false,\r\n\t\t\tdate: this.element.value,\r\n\t\t\tLockPlugin: {\r\n\t\t\t\tminDate: this.element.min,\r\n\t\t\t\tmaxDate: this.element.max,\r\n\t\t\t\tfilter(date: DateTime, picked: DateTime[]) {\r\n\t\t\t\t\tconst isDisabled =\r\n\t\t\t\t\t\tdisabledWeekDays &&\r\n\t\t\t\t\t\tdisabledWeekDays.indexOf(date.getDay().toString()) !=\r\n\t\t\t\t\t\t\t-1;\r\n\t\t\t\t\treturn isDisabled;\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tsetup(picker) {\r\n\t\t\t\tpicker.on('select', (e) => {\r\n\t\t\t\t\tconst event = new Event('change', {\r\n\t\t\t\t\t\tbubbles: false,\r\n\t\t\t\t\t\tcancelable: true,\r\n\t\t\t\t\t});\r\n\t\t\t\t\tthis.element.dispatchEvent(event);\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t});\r\n\t\tif (!this.element.value) {\r\n\t\t\tthis.datePicker.gotoDate(this.element.min);\r\n\t\t}\r\n\t}\r\n}\r\n","import { hasClass } from '@opten/dom/has-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\nimport { toggleClass } from '@opten/dom/toggle-class';\r\n\r\nexport interface FilterHelperOptions {\r\n\tfilterControlSelector?: string;\r\n\tfilterFormSelector?: string;\r\n\tonSubmit?: () => void;\r\n\tonReset?: () => void;\r\n\tonRemoveFilter?: (value, name) => void;\r\n}\r\n\r\nexport class FilterHelper {\r\n\tstatic defaults: FilterHelperOptions = {\r\n\t\tfilterControlSelector: '.js-filter-control',\r\n\t\tfilterFormSelector: '.js-filter-form',\r\n\t\tonSubmit: () => {},\r\n\t\tonReset: () => {},\r\n\t\tonRemoveFilter: (value, name) => {},\r\n\t};\r\n\r\n\tform: HTMLFormElement;\r\n\temptyState: HTMLElement;\r\n\ttagContainer: HTMLElement;\r\n\tfilters: HTMLInputElement[];\r\n\tsearch: HTMLInputElement;\r\n\r\n\tprivate filterGroups: any = {};\r\n\r\n\toptions: FilterHelperOptions;\r\n\r\n\ttags: HTMLElement[] = [];\r\n\tprivate tagTemplate: HTMLElement;\r\n\r\n\tprivate modals: HTMLElement[];\r\n\r\n\tconstructor(private element: HTMLElement, options?: FilterHelperOptions) {\r\n\t\tthis.options = { ...FilterHelper.defaults, ...options };\r\n\r\n\t\tthis.form = hasClass(\r\n\t\t\telement,\r\n\t\t\tthis.options.filterFormSelector.substring(1)\r\n\t\t)\r\n\t\t\t? (element as HTMLFormElement)\r\n\t\t\t: (element.querySelector(\r\n\t\t\t\t\tthis.options.filterFormSelector\r\n\t\t\t ) as HTMLFormElement);\r\n\t\tthis.emptyState = element.getElementsByClassName(\r\n\t\t\t'js-filter-empty-state'\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.modals = Array.from(\r\n\t\t\telement.getElementsByClassName('js-modal')\r\n\t\t) as HTMLElement[];\r\n\t\tthis.filters = Array.from(\r\n\t\t\telement.querySelectorAll(this.options.filterControlSelector)\r\n\t\t) as HTMLInputElement[];\r\n\t\tthis.search = element.getElementsByClassName(\r\n\t\t\t'js-filter-search'\r\n\t\t)[0] as HTMLInputElement;\r\n\t\tthis.tagContainer = element.getElementsByClassName(\r\n\t\t\t'js-filter-tag-container'\r\n\t\t)[0] as HTMLElement;\r\n\t\tthis.tagTemplate = element.getElementsByClassName(\r\n\t\t\t'js-filter-tag'\r\n\t\t)[0] as HTMLElement;\r\n\r\n\t\tthis.form.addEventListener('reset', (e) => {\r\n\t\t\tthis.closeModal();\r\n\t\t\tthis.tags.forEach((tag) => {\r\n\t\t\t\tthis.removeFilterItem(tag);\r\n\t\t\t});\r\n\t\t\tif (this.search) {\r\n\t\t\t\tthis.search.value = '';\r\n\t\t\t}\r\n\t\t\tthis.toggleEmptyState(false);\r\n\t\t\tthis.options.onReset();\r\n\t\t});\r\n\r\n\t\tthis.form.addEventListener('submit', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.closeModal();\r\n\t\t\tthis.options.onSubmit();\r\n\t\t});\r\n\r\n\t\tthis.filters.forEach((filter) => {\r\n\t\t\tif (filter.type === 'checkbox') {\r\n\t\t\t\tconst self = filter.getAttribute('data-self');\r\n\t\t\t\tconst connected = filter.getAttribute('data-connected');\r\n\t\t\t\tif (connected) {\r\n\t\t\t\t\tif (this.filterGroups[connected]) {\r\n\t\t\t\t\t\tthis.filterGroups[connected].push(filter);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tthis.filterGroups[connected] = [filter];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tconst filterSame = this.filters.filter(\r\n\t\t\t\t\t(o) => o.name === filter.name\r\n\t\t\t\t);\r\n\t\t\t\tconst filterAll = filterSame.filter((o) => o.value === '');\r\n\t\t\t\tfilter.addEventListener('change', (e) => {\r\n\t\t\t\t\tif (this.filterGroups[self]) {\r\n\t\t\t\t\t\tthis.filterGroups[self].filter(\r\n\t\t\t\t\t\t\t(o) => (o.checked = filter.checked)\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (connected) {\r\n\t\t\t\t\t\tconst target = this.filters.find(\r\n\t\t\t\t\t\t\t(o) => o.getAttribute('data-self') === connected\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\t\tif (target) {\r\n\t\t\t\t\t\t\tif (filter.checked) {\r\n\t\t\t\t\t\t\t\ttarget.checked = this.filters\r\n\t\t\t\t\t\t\t\t\t.filter(\r\n\t\t\t\t\t\t\t\t\t\t(o) =>\r\n\t\t\t\t\t\t\t\t\t\t\to.getAttribute('data-connected') ===\r\n\t\t\t\t\t\t\t\t\t\t\tconnected\r\n\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t.every((o) => o.checked);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\ttarget.checked = false;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (filter.value === '' && filter.checked) {\r\n\t\t\t\t\t\tfilterSame.filter((o) => (o.checked = false));\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (filterAll && filterAll.length > 0) {\r\n\t\t\t\t\t\tfilterAll.forEach((all) => {\r\n\t\t\t\t\t\t\tall.checked =\r\n\t\t\t\t\t\t\t\tfilterSame.some(\r\n\t\t\t\t\t\t\t\t\t(o) =>\r\n\t\t\t\t\t\t\t\t\t\to.checked ||\r\n\t\t\t\t\t\t\t\t\t\t(o.checked && o.value === '')\r\n\t\t\t\t\t\t\t\t) === false;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tclear() {\r\n\t\tthis.filters.forEach(filter => {\r\n\t\t\tif (filter.checked) {\r\n\t\t\t\tfilter.checked = false;\r\n\t\t\t}\r\n\t\t\tconst options = Array.from(filter.options || []);\r\n\t\t\tif (options && options.length > 0) {\r\n\t\t\t\toptions.forEach(option => {\r\n\t\t\t\t\toption.selected = false;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t\tif (this.search) {\r\n\t\t\tthis.search.value = '';\r\n\t\t}\r\n\t}\r\n\r\n\tupdateTags() {\r\n\t\tif (this.tagContainer) {\r\n\t\t\tthis.tags = [];\r\n\t\t\tthis.tagContainer.innerHTML = '';\r\n\t\t\tconst data = new FormData(this.form);\r\n\t\t\tfor (const [name, value] of data) {\r\n\t\t\t\tif (value && value !== '') {\r\n\t\t\t\t\tconst filter = this.filters.find(\r\n\t\t\t\t\t\t(o) => o.name === name && o.value === value\r\n\t\t\t\t\t);\r\n\t\t\t\t\tconst title = filter\r\n\t\t\t\t\t\t? filter.getAttribute('data-title')\r\n\t\t\t\t\t\t: '';\r\n\t\t\t\t\tif (title) {\r\n\t\t\t\t\t\tthis.addFilterItem(title, name, value);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttoggleClass(this.element, 'has-filters', this.tags.length > 0);\r\n\t\t}\r\n\t}\r\n\r\n\taddFilterItem(title, name, value) {\r\n\t\tconst temp = document.createElement('div');\r\n\t\tlet tag = this.tagTemplate.cloneNode(true) as HTMLElement;\r\n\t\tremoveClass(tag, 'd-none');\r\n\t\ttag.setAttribute('data-name', name);\r\n\t\ttag.setAttribute('data-value', value);\r\n\t\ttemp.appendChild(tag);\r\n\t\ttag.outerHTML = tag.outerHTML.replace(/{title}/g, title);\r\n\t\ttag = (temp.firstChild || temp.firstElementChild) as HTMLElement;\r\n\t\tthis.tagContainer.appendChild(tag);\r\n\t\tthis.tags.push(tag);\r\n\r\n\t\ttag.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.removeFilterItem(tag);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveFilterItem(tag) {\r\n\t\tconst name = tag.getAttribute('data-name');\r\n\t\tconst value = tag.getAttribute('data-value');\r\n\t\tconst filter = this.filters.find(\r\n\t\t\t(o) => o.name === name && o.value === value\r\n\t\t);\r\n\t\tif (filter) {\r\n\t\t\tfilter.value = filter.defaultValue;\r\n\t\t\tfilter.checked = false;\r\n\t\t}\r\n\t\tthis.options.onRemoveFilter(value, name);\r\n\t}\r\n\r\n\ttoggleEmptyState(show = false) {\r\n\t\tif (this.emptyState) {\r\n\t\t\ttoggleClass(this.emptyState, 'd-none', show);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate closeModal() {\r\n\t\tif (this.modals.length) {\r\n\t\t\tthis.modals.forEach((modal) => {\r\n\t\t\t\tremoveClass(modal, 'is-open');\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","import { Collapse } from '@opten/collapse/initializer';\r\nimport { Component } from '@opten/compiler/metadata/component';\r\n\r\nimport { FilterHelper } from './filter-helper';\r\n\r\ndeclare const mixitup: any;\r\n\r\n@Component({ className: 'js-filter' })\r\nexport class FilterComponent {\r\n\tprivate filter: FilterHelper;\r\n\r\n\tprivate mixer: any;\r\n\tprivate targetSelector = '.js-filter-item';\r\n\tprivate sortSelector = '.js-filter-sort';\r\n\tprivate pageListSelector = '.js-filter-page-list';\r\n\tprivate sortControls: HTMLElement[];\r\n\tprivate pageList: HTMLElement;\r\n\tprivate pagerControls: HTMLElement[];\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.pageList = this.element.querySelector(\r\n\t\t\t'.js-filter-page-list'\r\n\t\t) as HTMLElement;\r\n\t\tthis.sortControls = Array.from(\r\n\t\t\tthis.element.querySelectorAll(this.sortSelector)\r\n\t\t) as HTMLElement[];\r\n\r\n\t\tthis.filter = new FilterHelper(this.element, {\r\n\t\t\tonReset: () => {\r\n\t\t\t\tthis.mixer.filter('all');\r\n\t\t\t},\r\n\t\t\tonRemoveFilter: (value, name) => {\r\n\t\t\t\tconst activeFilter = this.mixer.getFilterGroupSelectors(name);\r\n\t\t\t\tthis.mixer.setFilterGroupSelectors(\r\n\t\t\t\t\tname,\r\n\t\t\t\t\tactiveFilter.filter((o) => o !== value)\r\n\t\t\t\t);\r\n\t\t\t\tthis.mixer.parseFilterGroups();\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tlet options: any = {\r\n\t\t\tselectors: {\r\n\t\t\t\ttarget: this.targetSelector,\r\n\t\t\t\tcontrol: this.filter.options.filterControlSelector,\r\n\t\t\t},\r\n\t\t\tcontrols: {\r\n\t\t\t\tscope: 'local',\r\n\t\t\t\ttoggleLogic: 'and',\r\n\t\t\t\tenable: false,\r\n\t\t\t},\r\n\t\t\tmultifilter: {\r\n\t\t\t\tenable: true,\r\n\t\t\t\tparseOn: 'submit', //'change',\r\n\t\t\t},\r\n\t\t\tcallbacks: {\r\n\t\t\t\tonParseFilterGroups: (command) => {\r\n\t\t\t\t\tthis.filter.updateTags();\r\n\t\t\t\t\treturn command;\r\n\t\t\t\t},\r\n\t\t\t\tonMixStart: (state, futureState) => {\r\n\t\t\t\t\tthis.filter.toggleEmptyState(futureState.totalShow > 0);\r\n\t\t\t\t},\r\n\t\t\t\tonMixEnd: (state) => {\r\n\t\t\t\t\tthis.filter.toggleEmptyState(state.totalShow > 0);\r\n\t\t\t\t},\r\n\t\t\t\tonMixClick: (state, originalEvent) => {\r\n\t\t\t\t\tif (originalEvent.target.closest(this.filter.options.filterControlSelector).getAttribute('data-filter')) {\r\n\t\t\t\t\t\toriginalEvent.preventDefault();\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.mixer.parseFilterGroups();\r\n\t\t\t\t\t\t}, 500);\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t};\r\n\t\tif (this.pageList) {\r\n\t\t\toptions = this.mergeDeep(options, {\r\n\t\t\t\tselectors: {\r\n\t\t\t\t\tpageList: this.pageListSelector,\r\n\t\t\t\t},\r\n\t\t\t\tclassNames: {\r\n\t\t\t\t\telementPager: 'pager',\r\n\t\t\t\t},\r\n\t\t\t\tpagination: {\r\n\t\t\t\t\tlimit: 10,\r\n\t\t\t\t\tmaintainActivePage: false,\r\n\t\t\t\t\thidePageListIfSinglePage: true,\r\n\t\t\t\t\tgeneratePageStats: false,\r\n\t\t\t\t},\r\n\t\t\t\ttemplates: {\r\n\t\t\t\t\tpagerPrev:\r\n\t\t\t\t\t\t'',\r\n\t\t\t\t\tpagerNext:\r\n\t\t\t\t\t\t'',\r\n\t\t\t\t},\r\n\t\t\t\tcallbacks: {\r\n\t\t\t\t\tonMixEnd: (state) => {\r\n\t\t\t\t\t\tthis.initPager();\r\n\t\t\t\t\t\tthis.filter.toggleEmptyState(state.totalShow > 0);\r\n\t\t\t\t\t},\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\t\tthis.mixer = mixitup(this.element, options);\r\n\r\n\t\tif (this.sortControls.length > 0) {\r\n\t\t\tthis.sortControls.forEach((sort) => {\r\n\t\t\t\tconst collapse = Collapse.getInstance(sort.parentElement);\r\n\t\t\t\tsort.addEventListener('click', (e) => {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\tthis.mixer.sort(sort.getAttribute('data-sort'));\r\n\t\t\t\t\tif (collapse) {\r\n\t\t\t\t\t\tcollapse.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst params = new URL(document.location).searchParams;\r\n\t\tif (params) {\r\n\t\t\tconst events = {};\r\n\t\t\tparams.forEach((value, key) => {\r\n\t\t\t\tconst filter = this.filter.filters.find(\r\n\t\t\t\t\t(o) => (o.name == key && o.value == value)\r\n\t\t\t\t);\r\n\t\t\t\tconst filterLink = this.filter.filters.find(\r\n\t\t\t\t\t(o) => (o.tagName != 'checkbox' && o.getAttribute('data-filter') == value)\r\n\t\t\t\t) as HTMLElement;\r\n\t\t\t\tif (filterLink) {\r\n\t\t\t\t\tconst t = events[key];\r\n\t\t\t\t\tif (t) {\r\n\t\t\t\t\t\tt.push(value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tevents[key] = [value];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tif (filter) {\r\n\t\t\t\t\tconst t = events[filter.name];\r\n\t\t\t\t\tif (t) {\r\n\t\t\t\t\t\tt.push(filter.value);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tevents[filter.name] = [filter.value];\r\n\t\t\t\t\t}\r\n\t\t\t\t\tfilter.checked = true;\r\n\t\t\t\t\tconst changeEvent = new Event('change', {\r\n\t\t\t\t\t\tbubbles: false,\r\n\t\t\t\t\t\tcancelable: true,\r\n\t\t\t\t\t});\r\n\t\t\t\t\tfilter.dispatchEvent(changeEvent);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tif (Object.keys(events).length > 0) {\r\n\t\t\t\tObject.keys(events).forEach((key) => {\r\n\t\t\t\t\tthis.mixer.setFilterGroupSelectors(key, events[key]);\r\n\t\t\t\t});\r\n\t\t\t\tthis.mixer.parseFilterGroups();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initPager();\r\n\t}\r\n\r\n\tprivate initPager() {\r\n\t\tif (this.pageList) {\r\n\t\t\tthis.pagerControls = Array.from(\r\n\t\t\t\tthis.pageList.querySelectorAll('.mixitup-pager')\r\n\t\t\t) as HTMLElement[];\r\n\t\t\tthis.pagerControls.forEach((control) => {\r\n\t\t\t\tconst dataPage = control.getAttribute('data-page');\r\n\t\t\t\tcontrol.addEventListener('click', (e) => {\r\n\t\t\t\t\tthis.mixer.paginate(dataPage);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate mergeDeep(target, ...sources) {\r\n\t\tif (!sources.length) return target;\r\n\t\tconst source = sources.shift();\r\n\r\n\t\tif (this.isObject(target) && this.isObject(source)) {\r\n\t\t\tfor (const key in source) {\r\n\t\t\t\tif (this.isObject(source[key])) {\r\n\t\t\t\t\tif (!target[key]) Object.assign(target, { [key]: {} });\r\n\t\t\t\t\tthis.mergeDeep(target[key], source[key]);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tObject.assign(target, { [key]: source[key] });\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.mergeDeep(target, ...sources);\r\n\t}\r\n\r\n\tprivate isObject(item) {\r\n\t\treturn item && typeof item === 'object' && !Array.isArray(item);\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-checkboxes' })\r\nexport class FormCheckboxesComponent {\r\n\tprivate sameInputs: HTMLInputElement[];\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.sameInputs = Array.from(\r\n\t\t\tthis.element.querySelectorAll(`input[type=\"checkbox\"]`)\r\n\t\t) as HTMLInputElement[];\r\n\r\n\t\tif (this.sameInputs && this.sameInputs.length > 0) {\r\n\t\t\tif (this.element.hasAttribute('data-required')) {\r\n\t\t\t\tthis.sameInputs.forEach((input) => {\r\n\t\t\t\t\tinput.addEventListener('change', () => {\r\n\t\t\t\t\t\tthis.checkRequired();\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.checkRequired();\r\n\t\t\t\tthis.scrollToSelected();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprivate scrollToSelected() {\r\n\t\tconst firstChecked = this.sameInputs.find((o) => o.checked);\r\n\t\tif (firstChecked) {\r\n\t\t\tthis.element.scrollTo(\r\n\t\t\t\t0,\r\n\t\t\t\tfirstChecked.parentElement.offsetTop -\r\n\t\t\t\t\tfirstChecked.parentElement.offsetHeight -\r\n\t\t\t\t\tparseInt(getComputedStyle(this.element).marginTop)\r\n\t\t\t);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate checkRequired() {\r\n\t\tconst hasSomeChecked = this.sameInputs.some((o) => o.checked);\r\n\t\tthis.sameInputs.forEach((o) => (o.required = hasSomeChecked == false));\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { FormTemplatesComponent } from './form-templates';\r\n\r\n@Component({ className: 'js-form-select-updater' })\r\nexport class FormSelectUpdateComponent {\r\n\tprivate items: HTMLInputElement[];\r\n\tprivate targets: HTMLSelectElement[];\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.items = Array.from(\r\n\t\t\tthis.element.querySelectorAll('.js-form-select-updater-item')\r\n\t\t) as HTMLInputElement[];\r\n\t\tthis.targets = Array.from(\r\n\t\t\tdocument.querySelectorAll('.js-form-select-updater-target')\r\n\t\t) as HTMLSelectElement[];\r\n\r\n\t\tif (\r\n\t\t\tthis.items &&\r\n\t\t\tthis.items.length > 0 &&\r\n\t\t\tthis.targets &&\r\n\t\t\tthis.targets.length > 0\r\n\t\t) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tthis.setupItem(item);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tFormTemplatesComponent.onFieldAdded.subscribe((field) => {\r\n\t\t\tthis.update(field);\r\n\t\t});\r\n\t\tFormTemplatesComponent.onFieldRemoved.subscribe((field) => {\r\n\t\t\tthis.updateRemoving(field);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate setupItem(item: HTMLInputElement) {\r\n\t\titem.setAttribute('data-old-val', item.value);\r\n\t\titem.addEventListener('change', (e) => {\r\n\t\t\tthis.updateTargets(item.getAttribute('data-old-val'), item.value);\r\n\t\t\titem.setAttribute('data-old-val', item.value);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate updateTargets(oldValue: string, newValue: string) {\r\n\t\tthis.targets.forEach((target) => {\r\n\t\t\tlet item = Array.from(target.options).find(o => o.value == oldValue);\r\n\t\t\tif (!oldValue && !newValue) {\r\n\t\t\t\tif (item) {\r\n\t\t\t\t\titem.remove();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!newValue && item) {\r\n\t\t\t\titem.remove();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (!item) {\r\n\t\t\t\titem = document.createElement('option');\r\n\t\t\t\ttarget.add(item, null);\r\n\t\t\t}\r\n\t\t\titem.text = newValue;\r\n\t\t\titem.value = newValue;\r\n\t\t});\r\n\t}\r\n\r\n\tprivate createTargets(targets: HTMLSelectElement[]) {\r\n\t\ttargets.forEach((target) => {\r\n\t\t\twhile (target.options.length > 0) {\r\n\t\t\t\ttarget.remove(target.options.length - 1);\r\n\t\t\t}\r\n\t\t\tfor (let i = 0; i < this.items.length; i++) {\r\n\t\t\t\tvar opt = document.createElement('option');\r\n\t\t\t\topt.text = this.items[i].value;\r\n\t\t\t\topt.value = this.items[i].value;\r\n\t\t\t\topt.selected = i == 0;\r\n\t\t\t\ttarget.add(opt, null);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate update(field: HTMLElement) {\r\n\t\tconst item = field.querySelector(\r\n\t\t\t'.js-form-select-updater-item'\r\n\t\t) as HTMLInputElement;\r\n\t\tif (item) {\r\n\t\t\tthis.items.push(item);\r\n\t\t\tthis.setupItem(item);\r\n\t\t}\r\n\r\n\t\tconst targets = Array.from(\r\n\t\t\tfield.querySelectorAll('.js-form-select-updater-target')\r\n\t\t) as HTMLSelectElement[];\r\n\t\tif (targets && targets.length > 0) {\r\n\t\t\tthis.targets = this.targets.concat(targets);\r\n\t\t\tthis.createTargets(targets);\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateRemoving(field: HTMLElement) {\r\n\t\tconst item = field.querySelector(\r\n\t\t\t'.js-form-select-updater-item'\r\n\t\t) as HTMLInputElement;\r\n\t\tif (item) {\r\n\t\t\tthis.items.splice(this.items.indexOf(item), 1);\r\n\t\t\tthis.updateTargets(item.value, undefined);\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { EventDispatcher } from '@opten/events/event-dispatcher';\r\nimport { toggleClass } from '@opten/dom/toggle-class';\r\n\r\n@Component({ className: 'js-form-templates' })\r\nexport class FormTemplatesComponent {\r\n\tstatic onFieldAdded = new EventDispatcher();\r\n\tstatic onFieldRemoved = new EventDispatcher();\r\n\r\n\tprivate template: Node;\r\n\tprivate adder: HTMLElement;\r\n\tprivate items: HTMLElement[];\r\n\tprivate namePrefix: string;\r\n\tprivate idPrefix: string;\r\n\tprivate min = 0;\r\n\tprivate max = Number.MAX_SAFE_INTEGER;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst shadow = element.querySelector(\r\n\t\t\t'.js-form-template-shadow'\r\n\t\t) as HTMLElement;\r\n\t\tconst shadowInput = shadow.querySelector('input');\r\n\t\tthis.namePrefix = shadowInput.name.substring(\r\n\t\t\t0,\r\n\t\t\tshadowInput.name.indexOf('Shadow')\r\n\t\t);\r\n\t\tthis.idPrefix = shadowInput.id.substring(\r\n\t\t\t0,\r\n\t\t\tshadowInput.id.indexOf('Shadow')\r\n\t\t);\r\n\t\tthis.template = shadow\r\n\t\t\t.querySelector('.js-form-template-item')\r\n\t\t\t.cloneNode(true);\r\n\t\tshadow.remove();\r\n\r\n\t\tthis.min = parseInt(element.getAttribute('data-min') || '0');\r\n\t\tthis.max = parseInt(element.getAttribute('data-max') || Number.MAX_SAFE_INTEGER.toString());\r\n\t\tthis.adder = element.querySelector(\r\n\t\t\t'.js-form-template-add'\r\n\t\t) as HTMLElement;\r\n\t\tthis.items = Array.from(\r\n\t\t\tthis.element.querySelectorAll('.js-form-template-item')\r\n\t\t) as HTMLElement[] || [];\r\n\r\n\t\tthis.adder.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tthis.add();\r\n\t\t});\r\n\r\n\t\tif (this.items && this.items.length > 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tthis.initItem(item);\r\n\t\t\t});\r\n\t\t\tthis.checkRemover();\r\n\t\t\tthis.checkAdder();\r\n\t\t}\r\n\r\n\t\twhile (!this.items || this.items.length < this.min) {\r\n\t\t\tthis.add();\r\n\t\t}\r\n\t}\r\n\r\n\tadd() {\r\n\t\tconst newItem = this.template.cloneNode(true);\r\n\t\tconst parent =\r\n\t\t\tthis.items && this.items.length > 0\r\n\t\t\t\t? this.items[this.items.length - 1].parentNode\r\n\t\t\t\t: this.adder.parentNode;\r\n\t\tconst newHtmlItem = parent.insertBefore(\r\n\t\t\tnewItem,\r\n\t\t\tthis.items && this.items.length > 0\r\n\t\t\t\t? this.items[this.items.length - 1].nextSibling\r\n\t\t\t\t: this.adder\r\n\t\t) as HTMLElement;\r\n\t\tconst newIndex = this.items.length;\r\n\t\tnewHtmlItem.innerHTML = newHtmlItem.innerHTML\r\n\t\t\t.replaceAll('Shadow_0', `_${newIndex}`)\r\n\t\t\t.replaceAll('Shadow[0]', `[${newIndex}]`);\r\n\t\tthis.items.push(newHtmlItem);\r\n\t\tthis.initItem(newHtmlItem);\r\n\t\tthis.checkRemover();\r\n\t\tthis.checkAdder();\r\n\t\tFormTemplatesComponent.onFieldAdded.dispatch(newHtmlItem);\r\n\t}\r\n\r\n\tremove(item: HTMLElement) {\r\n\t\tthis.items.splice(this.items.indexOf(item), 1);\r\n\t\titem.remove();\r\n\t\tthis.updateIndex();\r\n\t\tthis.checkRemover();\r\n\t\tthis.checkAdder();\r\n\t\tFormTemplatesComponent.onFieldRemoved.dispatch(item);\r\n\t}\r\n\r\n\tprivate initItem(item: HTMLElement) {\r\n\t\tconst remover = item.querySelector(\r\n\t\t\t'.js-form-template-remove'\r\n\t\t) as HTMLElement;\r\n\t\tif (remover) {\r\n\t\t\titem['Remover'] = remover;\r\n\t\t\tremover.addEventListener('click', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.remove(item);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateIndex() {\r\n\t\tif (this.items && this.items.length > 0) {\r\n\t\t\tthis.items.forEach((item, index) => {\r\n\t\t\t\tlet regExp = new RegExp(\r\n\t\t\t\t\t`${this.escapeRegExp(this.idPrefix)}_\\\\d+`\r\n\t\t\t\t);\r\n\t\t\t\tconst ids = item.querySelectorAll(`[id^=\"${this.idPrefix}_\"]`);\r\n\t\t\t\tids.forEach((elem) => {\r\n\t\t\t\t\telem.id = elem.id.replace(\r\n\t\t\t\t\t\tregExp,\r\n\t\t\t\t\t\t`${this.idPrefix}_${index}`\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tconst fors = item.querySelectorAll(\r\n\t\t\t\t\t`[for^=\"${this.idPrefix}_\"]`\r\n\t\t\t\t);\r\n\t\t\t\tfors.forEach((elem) => {\r\n\t\t\t\t\telem.setAttribute(\r\n\t\t\t\t\t\t'for',\r\n\t\t\t\t\t\telem\r\n\t\t\t\t\t\t\t.getAttribute('for')\r\n\t\t\t\t\t\t\t.replace(regExp, `${this.idPrefix}_${index}`)\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t\tregExp = new RegExp(\r\n\t\t\t\t\t`${this.escapeRegExp(this.namePrefix)}\\\\[\\\\d+`\r\n\t\t\t\t);\r\n\t\t\t\tconst names = item.querySelectorAll(\r\n\t\t\t\t\t`[name^=\"${this.namePrefix}[\"]`\r\n\t\t\t\t);\r\n\t\t\t\tnames.forEach((elem) => {\r\n\t\t\t\t\telem.setAttribute(\r\n\t\t\t\t\t\t'name',\r\n\t\t\t\t\t\telem\r\n\t\t\t\t\t\t\t.getAttribute('name')\r\n\t\t\t\t\t\t\t.replace(regExp, `${this.namePrefix}[${index}`)\r\n\t\t\t\t\t);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate checkRemover() {\r\n\t\tif (this.min >= 0 && this.items && this.items.length > 0) {\r\n\t\t\tthis.items.forEach((item) => {\r\n\t\t\t\tconst remover = item['Remover'];\r\n\t\t\t\tif (remover) {\r\n\t\t\t\t\ttoggleClass(\r\n\t\t\t\t\t\tremover,\r\n\t\t\t\t\t\t'd-none',\r\n\t\t\t\t\t\tthis.items.length <= this.min\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate checkAdder() {\r\n\t\ttoggleClass(\r\n\t\t\tthis.adder,\r\n\t\t\t'd-none',\r\n\t\t\tthis.items.length >= this.max\r\n\t\t);\r\n\t}\r\n\r\n\tprivate escapeRegExp(string) {\r\n\t\treturn string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\n@Component({ className: 'js-form-total' })\r\nexport class FormTotalComponent {\r\n\tprivate inputs: HTMLInputElement[];\r\n\r\n\tconstructor(private total: HTMLElement) {\r\n\t\tconst form = total.closest('form') as HTMLElement; \r\n\t\tthis.inputs = Array.from(\r\n\t\t\tform.querySelectorAll(\r\n\t\t\t\t`[data-group=\"${this.total.getAttribute('data-group')}\"]`\r\n\t\t\t)\r\n\t\t) as HTMLInputElement[];\r\n\t\tif (this.inputs && this.inputs.length > 0) {\r\n\t\t\tthis.inputs.forEach((input) => {\r\n\t\t\t\tinput.addEventListener('change', () => this.updateTotal());\r\n\t\t\t\tinput.addEventListener('input', () => this.updateTotal());\r\n\t\t\t});\r\n\t\t\tthis.updateTotal();\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateTotal() {\r\n\t\tlet total = 0;\r\n\t\tthis.inputs.forEach((input) => {\r\n\t\t\tconst factor = parseFloat(input.getAttribute('data-factor') || '1');\r\n\t\t\ttotal += factor * parseInt(input.value || '0');\r\n\t\t});\r\n\t\tthis.total.innerHTML = total.toString();\r\n\t}\r\n}\r\n","import { debounce } from '@opten/reactive/debounce';\r\n\r\nexport class GlobalVarsComponent {\r\n\tconstructor(private element: HTMLElement = document.documentElement) {\r\n\t\tthis.setGlobalVars();\r\n\t\twindow.addEventListener(\r\n\t\t\t'resize',\r\n\t\t\tdebounce(() => {\r\n\t\t\t\tthis.setGlobalVars();\r\n\t\t\t}, 300)\r\n\t\t);\r\n\t}\r\n\r\n\tsetGlobalVars() {\r\n\t\tthis.element.style.setProperty(\r\n\t\t\t'--window-height',\r\n\t\t\t`${window.innerHeight * 0.01 * 100}px`\r\n\t\t);\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { FormTemplatesComponent } from './form-templates';\r\n\r\ndeclare const Isotope: any;\r\n\r\n@Component({ className: 'js-grid' })\r\nexport class GridComponent {\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tconst grid = new Isotope(this.element, {\r\n\t\t\titemSelector: '.js-grid-item',\r\n\t\t\tlayoutMode: 'masonry',\r\n\t\t});\r\n\r\n\t\tFormTemplatesComponent.onFieldAdded.subscribe((field) => {\r\n\t\t\tgrid.arrange();\r\n\t\t});\r\n\t\tFormTemplatesComponent.onFieldRemoved.subscribe((field) => {\r\n\t\t\tgrid.arrange();\r\n\t\t});\r\n\t}\r\n}\r\n","import { Component } from \"@opten/compiler/metadata/component\";\r\nimport { toggleClass } from \"@opten/dom/toggle-class\";\r\n\r\n@Component({ className: \"js-input\" })\r\nexport class InputComponent {\r\n\tprivate formField: HTMLElement;\r\n\tprivate valueShadows: HTMLElement[];\r\n\tprivate labels: HTMLElement[];\r\n\tprivate hasValueClass = \"has-value\";\r\n\tprivate isActiveClass = \"is-active\";\r\n\r\n\tconstructor(private input: HTMLInputElement) {\r\n\t\tthis.formField = input.closest(\".c-formfield\") as HTMLElement;\r\n\t\tthis.valueShadows = Array.from(\r\n\t\t\tdocument.querySelectorAll(\r\n\t\t\t\t`.js-input-shadow[data-name='${this.input.name}']`\r\n\t\t\t)\r\n\t\t) as HTMLElement[];\r\n\t\tthis.labels = Array.from(\r\n\t\t\tinput\r\n\t\t\t\t.closest(\"form\")\r\n\t\t\t\t.querySelectorAll(`[data-group=\"${this.input.name}\"]`)\r\n\t\t) as HTMLElement[];\r\n\r\n\t\tinput.addEventListener(\"change\", () => this.setValueClass());\r\n\t\tinput.addEventListener(\"input\", () => this.setValueClass());\r\n\r\n\t\tthis.setValueClass();\r\n\t}\r\n\r\n\tprivate setValueClass() {\r\n\t\tconst hasData =\r\n\t\t\tthis.input.placeholder ||\r\n\t\t\tthis.input.value ||\r\n\t\t\tthis.input.type == \"date\" ||\r\n\t\t\tthis.input.type == \"time\" ||\r\n\t\t\tthis.input.type == \"file\";\r\n\t\ttoggleClass(this.formField, this.hasValueClass, !!hasData);\r\n\t\tthis.updateInputHeight();\r\n\t\tif (this.valueShadows && this.valueShadows.length > 0) {\r\n\t\t\tthis.valueShadows.forEach((shadow) => {\r\n\t\t\t\tshadow.innerHTML = this.input.value;\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (this.labels && this.labels.length > 0) {\r\n\t\t\tlet value = this.input.value;\r\n\t\t\tif (\r\n\t\t\t\tthis.input.type.toLowerCase() === \"radio\" ||\r\n\t\t\t\tthis.input.type.toLowerCase() === \"checkbox\"\r\n\t\t\t) {\r\n\t\t\t\tvalue = this.input.checked ? this.input.value : \"\";\r\n\t\t\t}\r\n\t\t\tthis.labels.forEach((label) => {\r\n\t\t\t\tconst isActiveClass =\r\n\t\t\t\t\tlabel.getAttribute(\"data-active-class\") ||\r\n\t\t\t\t\tthis.isActiveClass;\r\n\t\t\t\tconst htmlFor = label.htmlFor || label.getAttribute(\"data-for\");\r\n\t\t\t\ttoggleClass(\r\n\t\t\t\t\tlabel,\r\n\t\t\t\t\tisActiveClass,\r\n\t\t\t\t\tvalue && htmlFor == this.input.id\r\n\t\t\t\t);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tprivate updateInputHeight() {\r\n\t\tif (this.input.tagName.toLowerCase() === \"textarea\") {\r\n\t\t\tthis.input.style.height = \"\";\r\n\t\t\tthis.input.style.height =\r\n\t\t\t\t(this.input.scrollHeight || 65) + 2 + \"px\";\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { getCookie } from '@opten/cookie/get';\r\nimport { setCookie } from '@opten/cookie/set';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { hasClass } from '@opten/dom/has-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\nimport { toggleClass } from '@opten/dom/toggle-class';\r\n\r\n@Component({ className: 'js-modal' })\r\nexport class ModalComponent {\r\n\tprivate triggers: HTMLElement[];\r\n\tprivate cookieKey: string;\r\n\tprivate cookieDays: number;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.cookieKey = `modal-ignore-${element.id}`;\r\n\t\tthis.cookieDays =\r\n\t\t\tparseInt(this.element.getAttribute('data-cookie-ignore')) || -1;\r\n\r\n\t\tif (this.cookieDays >= 0 && getCookie(this.cookieKey) !== 'true') {\r\n\t\t\taddClass(this.element, 'is-open');\r\n\t\t}\r\n\r\n\t\tthis.triggers = Array.from(\r\n\t\t\tdocument.querySelectorAll(\r\n\t\t\t\t`[href=\"#${this.element.id}\"], [data-target=\"#${this.element.id}\"]`\r\n\t\t\t)\r\n\t\t);\r\n\r\n\t\tthis.triggers.forEach((trigger) => {\r\n\t\t\ttrigger.addEventListener('click', (e) => {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttoggleClass(this.element, 'is-open');\r\n\t\t\t\tif (hasClass(this.element, 'is-open') == false) {\r\n\t\t\t\t\tthis.closeEvent();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\r\n\t\tdocument.addEventListener('click', (e) => {\r\n\t\t\tif (\r\n\t\t\t\thasClass(this.element, 'is-open') &&\r\n\t\t\t\t(!e.target.closest('.c-modal__inner') ||\r\n\t\t\t\t\te.target.closest('.js-modal-close'))\r\n\t\t\t) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tremoveClass(this.element, 'is-open');\r\n\t\t\t\tthis.closeEvent();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprivate closeEvent() {\r\n\t\tif (this.cookieDays >= 0 && getCookie(this.cookieKey) !== 'true') {\r\n\t\t\tconst date = new Date();\r\n\t\t\tdate.setDate(date.getDate() + 1);\r\n\t\t\tsetCookie(this.cookieKey, 'true', date, '/');\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { getWindowScrollTop } from '@opten/dom/get-window-scroll-top';\r\nimport { toggleClass } from '@opten/dom/toggle-class';\r\nimport { debounce } from '@opten/reactive/debounce';\r\nimport { scrollToOffset } from '@opten/scroll/scroll-to-offset';\r\n\r\n@Component({ className: 'js-page-top' })\r\nexport class PageTopComponent {\r\n\tconstructor(\r\n\t\tprivate element: HTMLElement,\r\n\t\tprivate wrapper: HTMLElement | Window = window\r\n\t) {\r\n\t\tthis.setVisibility();\r\n\t\tthis.wrapper.addEventListener(\r\n\t\t\t'scroll',\r\n\t\t\tdebounce(() => this.setVisibility(), 300)\r\n\t\t);\r\n\t\telement.addEventListener('click', (e) => {\r\n\t\t\te.preventDefault();\r\n\t\t\tscrollToOffset(\r\n\t\t\t\tthis.scrollTop() * -1,\r\n\t\t\t\tundefined,\r\n\t\t\t\tundefined,\r\n\t\t\t\tundefined,\r\n\t\t\t\tthis.wrapper\r\n\t\t\t);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate setVisibility() {\r\n\t\ttoggleClass(this.element, 'is-visible', this.scrollTop() > 400);\r\n\t}\r\n\r\n\tprivate scrollTop() {\r\n\t\tif (this.wrapper instanceof Window || this.wrapper.clientHeight == 0) {\r\n\t\t\treturn getWindowScrollTop();\r\n\t\t} else {\r\n\t\t\treturn this.wrapper.scrollTop;\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { hasClass } from '@opten/dom/has-class';\r\nimport { EventDispatcher } from '@opten/events/event-dispatcher';\r\n\r\nimport barba from '@barba/core';\r\nimport barbaCss from '@barba/css';\r\n\r\ndeclare const Cookiebot: any;\r\n\r\n@Component({ className: 'js-page-transition' })\r\nexport class PageTransitionComponent {\r\n\tstatic onPageChange = new EventDispatcher();\r\n\r\n\t// tslint:disable-next-line: max-func-body-length\r\n\tconstructor(private element: HTMLElement) {\r\n\t\t// const _listeners = [];\r\n\r\n\t\t// window.EventTarget || (window.EventTarget = function () {});\r\n\t\t// EventTarget.prototype.addEventListenerBase =\r\n\t\t// \tEventTarget.prototype.addEventListener;\r\n\t\t// EventTarget.prototype.addEventListener = function (\r\n\t\t// \ttype,\r\n\t\t// \tlistener,\r\n\t\t// \toptions?\r\n\t\t// ) {\r\n\t\t// \t_listeners.push({\r\n\t\t// \t\ttarget: this,\r\n\t\t// \t\ttype: type,\r\n\t\t// \t\tlistener: listener,\r\n\t\t// \t\toptions: options,\r\n\t\t// \t});\r\n\t\t// \tif (this) {\r\n\t\t// \t\tthis.addEventListenerBase(type, listener, options);\r\n\t\t// \t}\r\n\t\t// };\r\n\r\n\t\t// EventTarget.prototype.removeEventListeners = function (targetTypes) {\r\n\t\t// \tfor (let index = 0; index != _listeners.length; index++) {\r\n\t\t// \t\tconst item = _listeners[index];\r\n\r\n\t\t// \t\tconst target = item.target;\r\n\t\t// \t\tconst type = item.type;\r\n\t\t// \t\tconst listener = item.listener;\r\n\r\n\t\t// \t\tif (\r\n\t\t// \t\t\ttarget == this &&\r\n\t\t// \t\t\t(Array.isArray(targetTypes)\r\n\t\t// \t\t\t\t? targetTypes.includes(type)\r\n\t\t// \t\t\t\t: type == targetTypes)\r\n\t\t// \t\t) {\r\n\t\t// \t\t\tthis.removeEventListener(type, listener);\r\n\t\t// \t\t}\r\n\t\t// \t}\r\n\t\t// };\r\n\r\n\t\tif (hasClass(this.element, 'barba--init') === false) {\r\n\t\t\tbarba.hooks.afterOnce(() => {\r\n\t\t\t\taddClass(this.element, 'barba--init');\r\n\t\t\t});\r\n\t\t\tbarba.hooks.after((e) => {\r\n\t\t\t\tPageTransitionComponent.onPageChange.dispatch(e.next.container);\r\n\t\t\t\tif ('Cookiebot' in window) {\r\n\t\t\t\t\tCookiebot.runScripts();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbarba.hooks.enter((data) => {\r\n\t\t\t\tconst startAt = data.next.container.querySelector(\r\n\t\t\t\t\t'.js-page-transition-start-at'\r\n\t\t\t\t) as HTMLElement;\r\n\t\t\t\tif (startAt) {\r\n\t\t\t\t\tconst pos = startAt.style.position;\r\n\t\t\t\t\tstartAt.style.position = 'relative';\r\n\t\t\t\t\tconst offset = startAt.offsetTop;\r\n\t\t\t\t\tstartAt.style.position = pos;\r\n\t\t\t\t\tif (window.scrollY > offset) {\r\n\t\t\t\t\t\twindow.scrollTo(0, offset);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\twindow.scrollTo(0, 0);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t// barba.hooks.beforeLeave(() => {\r\n\t\t\t// \twindow.removeEventListeners(['resize', 'scroll']);\r\n\t\t\t// \tdocument.removeEventListeners(['resize', 'scroll']);\r\n\t\t\t// });\r\n\t\t\tbarba.hooks.leave((data) => {\r\n\t\t\t\treturn new Promise((resolve) => {\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tdata.current.namespace === 'page' &&\r\n\t\t\t\t\t\tdata.next.namespace === 'page'\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}\r\n\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t}, 350);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t\tbarba.use(barbaCss);\r\n\t\t\tbarba.init({\r\n\t\t\t\ttimeout: 10000,\r\n\t\t\t\tprevent: ({ el }) =>\r\n\t\t\t\t\t!!el.closest('.js-page-transition-prevent') ||\r\n\t\t\t\t\t!el.closest('.js-page-transition-start-at'),\r\n\t\t\t\ttransitions: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'slide-in',\r\n\t\t\t\t\t\tto: {\r\n\t\t\t\t\t\t\tnamespace: ['page-slide'],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tenter() {},\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'slide-out',\r\n\t\t\t\t\t\tfrom: {\r\n\t\t\t\t\t\t\tnamespace: ['page-slide'],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tto: {\r\n\t\t\t\t\t\t\tnamespace: ['page'],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tenter() {},\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tname: 'fade',\r\n\t\t\t\t\t\tfrom: {\r\n\t\t\t\t\t\t\tnamespace: ['page'],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tto: {\r\n\t\t\t\t\t\t\tnamespace: ['page'],\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tenter() {},\r\n\t\t\t\t\t},\r\n\t\t\t\t],\r\n\t\t\t\trequestError: (trigger, action, url, response) => {\r\n\t\t\t\t\t// redirect to failed url (to show 404, 500 or just clean reload if timeout happend)\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { addClass } from '@opten/dom/add-class';\r\nimport { removeClass } from '@opten/dom/remove-class';\r\n\r\n@Component({ className: 'js-password-reveal' })\r\nexport class PasswordRevealComponent {\r\n\tprivate formField: HTMLElement;\r\n\tprivate input: HTMLInputElement;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.formField = element.closest('.c-formfield') as HTMLElement;\r\n\t\tthis.input = this.formField?.querySelector('input') as HTMLInputElement;\r\n\r\n\t\tif (this.input) {\r\n\t\t\tthis.element.addEventListener('click', () => {\r\n\t\t\t\tif (this.input.type.toLowerCase() == 'password') {\r\n\t\t\t\t\tthis.input.type = 'text';\r\n\t\t\t\t\tremoveClass(this.element, 'icon-eye');\r\n\t\t\t\t\taddClass(this.element, 'icon-eye-off');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.input.type = 'password';\r\n\t\t\t\t\taddClass(this.element, 'icon-eye');\r\n\t\t\t\t\tremoveClass(this.element, 'icon-eye-off');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\nimport { debounce } from '@opten/reactive/debounce';\r\n\r\n@Component({ className: 'js-progress' })\r\nexport class ProgressComponent {\r\n\tprivate svg: SVGElement;\r\n\tprivate cricleFill: SVGCircleElement;\r\n\tprivate circleState: SVGCircleElement;\r\n\r\n\tprivate stroke: number;\r\n\tprivate radius: number;\r\n\tprivate normalizedRadius: number;\r\n\tprivate circumference: number;\r\n\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tthis.svg = document.createElementNS(\r\n\t\t\t'http://www.w3.org/2000/svg',\r\n\t\t\t'svg'\r\n\t\t) as SVGElement;\r\n\t\tthis.cricleFill = document.createElementNS(\r\n\t\t\t'http://www.w3.org/2000/svg',\r\n\t\t\t'circle'\r\n\t\t) as SVGCircleElement;\r\n\t\tthis.circleState = this.cricleFill.cloneNode(true) as SVGCircleElement;\r\n\t\tthis.svg.classList.add('c-progress__svg');\r\n\t\tthis.cricleFill.classList.add('c-progress__fill');\r\n\t\tthis.circleState.classList.add('c-progress__state');\r\n\t\tthis.svg.appendChild(this.cricleFill);\r\n\t\tthis.svg.appendChild(this.circleState);\r\n\r\n\t\tthis.init();\r\n\r\n\t\tthis.element.appendChild(this.svg);\r\n\r\n\t\t// tslint:disable-next-line: no-inner-html\r\n\r\n\t\tconst observer = new IntersectionObserver(\r\n\t\t\t([e]) => {\r\n\t\t\t\tif (e.intersectionRatio >= 1) {\r\n\t\t\t\t\tthis.setProgress(\r\n\t\t\t\t\t\tparseFloat(this.element.getAttribute('data-progress'))\r\n\t\t\t\t\t);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t//this.setProgress(0);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\trootMargin: '0px',\r\n\t\t\t\tthreshold: [1],\r\n\t\t\t}\r\n\t\t);\r\n\t\tobserver.observe(element);\r\n\r\n\t\twindow.addEventListener(\r\n\t\t\t'resize',\r\n\t\t\tdebounce(() => {\r\n\t\t\t\tthis.init();\r\n\t\t\t}, 300)\r\n\t\t);\r\n\t}\r\n\r\n\tinit() {\r\n\t\tthis.stroke = parseInt(this.element.getAttribute('data-stroke'), 0);\r\n\t\tthis.radius = this.element.clientWidth / 2;\r\n\t\tthis.normalizedRadius = this.radius - this.stroke;\r\n\t\tthis.circumference = this.normalizedRadius * 2 * Math.PI;\r\n\r\n\t\tthis.cricleFill.setAttributeNS(\r\n\t\t\tnull,\r\n\t\t\t'stroke-dasharray',\r\n\t\t\t`${this.circumference} ${this.circumference}`\r\n\t\t);\r\n\t\tthis.cricleFill.setAttributeNS(null, 'stroke-width', `${this.stroke}`);\r\n\t\tthis.cricleFill.setAttributeNS(null, 'r', `${this.normalizedRadius}`);\r\n\t\tthis.cricleFill.setAttributeNS(null, 'cx', `${this.radius}`);\r\n\t\tthis.cricleFill.setAttributeNS(null, 'cy', `${this.radius}`);\r\n\t\tthis.circleState.setAttributeNS(\r\n\t\t\tnull,\r\n\t\t\t'stroke-dasharray',\r\n\t\t\t`${this.circumference} ${this.circumference}`\r\n\t\t);\r\n\t\tthis.circleState.setAttributeNS(null, 'stroke-width', `${this.stroke}`);\r\n\t\tthis.circleState.setAttributeNS(\r\n\t\t\tnull,\r\n\t\t\t'stroke-dashoffset',\r\n\t\t\t`${this.circumference}`\r\n\t\t);\r\n\t\tthis.circleState.setAttributeNS(null, 'r', `${this.normalizedRadius}`);\r\n\t\tthis.circleState.setAttributeNS(null, 'cx', `${this.radius}`);\r\n\t\tthis.circleState.setAttributeNS(null, 'cy', `${this.radius}`);\r\n\t}\r\n\r\n\tsetProgress(percent) {\r\n\t\tconst offset =\r\n\t\t\tthis.circumference - (percent / 100) * this.circumference;\r\n\t\tconst circle = this.element.querySelector(\r\n\t\t\t'.c-progress__state'\r\n\t\t);\r\n\t\tcircle.style.strokeDashoffset = `${offset}px`;\r\n\t}\r\n}\r\n","import { Component } from '@opten/compiler/metadata/component';\r\n\r\ndeclare const grecaptcha: any;\r\n\r\n@Component({ className: 'g-recaptcha' })\r\nexport class ReCaptchaComponent {\r\n\tconstructor(private element: HTMLElement) {\r\n\t\tgrecaptcha.ready(() => {\r\n\t\t\tgrecaptcha.render(this.element);\r\n\t\t});\r\n\t}\r\n}\r\n","// A type of promise-like that resolves synchronously and supports only one observer\nexport const _Pact = /*#__PURE__*/(function() {\n\tfunction _Pact() {}\n\t_Pact.prototype.then = function(onFulfilled, onRejected) {\n\t\tconst result = new _Pact();\n\t\tconst state = this.s;\n\t\tif (state) {\n\t\t\tconst callback = state & 1 ? onFulfilled : onRejected;\n\t\t\tif (callback) {\n\t\t\t\ttry {\n\t\t\t\t\t_settle(result, 1, callback(this.v));\n\t\t\t\t} catch (e) {\n\t\t\t\t\t_settle(result, 2, e);\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t\tthis.o = function(_this) {\n\t\t\ttry {\n\t\t\t\tconst value = _this.v;\n\t\t\t\tif (_this.s & 1) {\n\t\t\t\t\t_settle(result, 1, onFulfilled ? onFulfilled(value) : value);\n\t\t\t\t} else if (onRejected) {\n\t\t\t\t\t_settle(result, 1, onRejected(value));\n\t\t\t\t} else {\n\t\t\t\t\t_settle(result, 2, value);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(result, 2, e);\n\t\t\t}\n\t\t};\n\t\treturn result;\n\t}\n\treturn _Pact;\n})();\n\n// Settles a pact synchronously\nexport function _settle(pact, state, value) {\n\tif (!pact.s) {\n\t\tif (value instanceof _Pact) {\n\t\t\tif (value.s) {\n\t\t\t\tif (state & 1) {\n\t\t\t\t\tstate = value.s;\n\t\t\t\t}\n\t\t\t\tvalue = value.v;\n\t\t\t} else {\n\t\t\t\tvalue.o = _settle.bind(null, pact, state);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tif (value && value.then) {\n\t\t\tvalue.then(_settle.bind(null, pact, state), _settle.bind(null, pact, 2));\n\t\t\treturn;\n\t\t}\n\t\tpact.s = state;\n\t\tpact.v = value;\n\t\tconst observer = pact.o;\n\t\tif (observer) {\n\t\t\tobserver(pact);\n\t\t}\n\t}\n}\n\nexport function _isSettledPact(thenable) {\n\treturn thenable instanceof _Pact && thenable.s & 1;\n}\n\n// Converts argument to a function that always returns a Promise\nexport function _async(f) {\n\treturn function() {\n\t\tfor (var args = [], i = 0; i < arguments.length; i++) {\n\t\t\targs[i] = arguments[i];\n\t\t}\n\t\ttry {\n\t\t\treturn Promise.resolve(f.apply(this, args));\n\t\t} catch(e) {\n\t\t\treturn Promise.reject(e);\n\t\t}\n\t}\n}\n\n// Awaits on a value that may or may not be a Promise (equivalent to the await keyword in ES2015, with continuations passed explicitly)\nexport function _await(value, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(value) : value;\n\t}\n\tif (!value || !value.then) {\n\t\tvalue = Promise.resolve(value);\n\t}\n\treturn then ? value.then(then) : value;\n}\n\n// Awaits on a value that may or may not be a Promise, then ignores it\nexport function _awaitIgnored(value, direct) {\n\tif (!direct) {\n\t\treturn value && value.then ? value.then(_empty) : Promise.resolve();\n\t}\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continue(value, then) {\n\treturn value && value.then ? value.then(then) : then(value);\n}\n\n// Proceeds after a value has resolved, or proceeds immediately if the value is not thenable\nexport function _continueIgnored(value) {\n\tif (value && value.then) {\n\t\treturn value.then(_empty);\n\t}\n}\n\n// Asynchronously iterate through an object that has a length property, passing the index as the first argument to the callback (even as the length property changes)\nexport function _forTo(array, body, check) {\n\tvar i = -1, pact, reject;\n\tfunction _cycle(result) {\n\t\ttry {\n\t\t\twhile (++i < array.length && (!check || !check())) {\n\t\t\t\tresult = body(i);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (pact) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t} else {\n\t\t\t\tpact = result;\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t}\n\t}\n\t_cycle();\n\treturn pact;\n}\n\n// Asynchronously iterate through an object's properties (including properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forIn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tkeys.push(key);\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\n// Asynchronously iterate through an object's own properties (excluding properties inherited from the prototype)\n// Uses a snapshot of the object's properties\nexport function _forOwn(target, body, check) {\n\tvar keys = [];\n\tfor (var key in target) {\n\t\tif (Object.prototype.hasOwnProperty.call(target, key)) {\n\t\t\tkeys.push(key);\n\t\t}\n\t}\n\treturn _forTo(keys, function(i) { return body(keys[i]); }, check);\n}\n\nexport const _iteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.iterator || (Symbol.iterator = Symbol(\"Symbol.iterator\"))) : \"@@iterator\";\n\n// Asynchronously iterate through an object's values\n// Uses for...of if the runtime supports it, otherwise iterates until length on a copy\nexport function _forOf(target, body, check) {\n\tif (typeof target[_iteratorSymbol] === \"function\") {\n\t\tvar iterator = target[_iteratorSymbol](), step, pact, reject;\n\t\tfunction _cycle(result) {\n\t\t\ttry {\n\t\t\t\twhile (!(step = iterator.next()).done && (!check || !check())) {\n\t\t\t\t\tresult = body(step.value);\n\t\t\t\t\tif (result && result.then) {\n\t\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.then(_cycle, reject || (reject = _settle.bind(null, pact = new _Pact(), 2)));\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pact) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t} else {\n\t\t\t\t\tpact = result;\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\t_settle(pact || (pact = new _Pact()), 2, e);\n\t\t\t}\n\t\t}\n\t\t_cycle();\n\t\tif (iterator.return) {\n\t\t\tvar _fixup = function(value) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!step.done) {\n\t\t\t\t\t\titerator.return();\n\t\t\t\t\t}\n\t\t\t\t} catch(e) {\n\t\t\t\t}\n\t\t\t\treturn value;\n\t\t\t}\n\t\t\tif (pact && pact.then) {\n\t\t\t\treturn pact.then(_fixup, function(e) {\n\t\t\t\t\tthrow _fixup(e);\n\t\t\t\t});\n\t\t\t}\n\t\t\t_fixup();\n\t\t}\n\t\treturn pact;\n\t}\n\t// No support for Symbol.iterator\n\tif (!(\"length\" in target)) {\n\t\tthrow new TypeError(\"Object is not iterable\");\n\t}\n\t// Handle live collections properly\n\tvar values = [];\n\tfor (var i = 0; i < target.length; i++) {\n\t\tvalues.push(target[i]);\n\t}\n\treturn _forTo(values, function(i) { return body(values[i]); }, check);\n}\n\nexport const _asyncIteratorSymbol = /*#__PURE__*/ typeof Symbol !== \"undefined\" ? (Symbol.asyncIterator || (Symbol.asyncIterator = Symbol(\"Symbol.asyncIterator\"))) : \"@@asyncIterator\";\n\n// Asynchronously iterate on a value using it's async iterator if present, or its synchronous iterator if missing\nexport function _forAwaitOf(target, body, check) {\n\tif (typeof target[_asyncIteratorSymbol] === \"function\") {\n\t\tvar pact = new _Pact();\n\t\tvar iterator = target[_asyncIteratorSymbol]();\n\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\treturn pact;\n\t\tfunction _resumeAfterBody(result) {\n\t\t\tif (check && check()) {\n\t\t\t\treturn _settle(pact, 1, iterator.return ? iterator.return().then(function() { return result; }) : result);\n\t\t\t}\n\t\t\titerator.next().then(_resumeAfterNext).then(void 0, _reject);\n\t\t}\n\t\tfunction _resumeAfterNext(step) {\n\t\t\tif (step.done) {\n\t\t\t\t_settle(pact, 1);\n\t\t\t} else {\n\t\t\t\tPromise.resolve(body(step.value)).then(_resumeAfterBody).then(void 0, _reject);\n\t\t\t}\n\t\t}\n\t\tfunction _reject(error) {\n\t\t\t_settle(pact, 2, iterator.return ? iterator.return().then(function() { return error; }) : error);\n\t\t}\n\t}\n\treturn Promise.resolve(_forOf(target, function(value) { return Promise.resolve(value).then(body); }, check));\n}\n\n// Asynchronously implement a generic for loop\nexport function _for(test, update, body) {\n\tvar stage;\n\tfor (;;) {\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t\tif (shouldContinue.then) {\n\t\t\tstage = 0;\n\t\t\tbreak;\n\t\t}\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.s;\n\t\t\t} else {\n\t\t\t\tstage = 1;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (update) {\n\t\t\tvar updateValue = update();\n\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\tstage = 2;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tvar pact = new _Pact();\n\tvar reject = _settle.bind(null, pact, 2);\n\t(stage === 0 ? shouldContinue.then(_resumeAfterTest) : stage === 1 ? result.then(_resumeAfterBody) : updateValue.then(_resumeAfterUpdate)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tdo {\n\t\t\tif (update) {\n\t\t\t\tupdateValue = update();\n\t\t\t\tif (updateValue && updateValue.then && !_isSettledPact(updateValue)) {\n\t\t\t\t\tupdateValue.then(_resumeAfterUpdate).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tshouldContinue = test();\n\t\t\tif (!shouldContinue || (_isSettledPact(shouldContinue) && !shouldContinue.v)) {\n\t\t\t\t_settle(pact, 1, result);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t}\n\t\t} while (!result || !result.then);\n\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterBody(result);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n\tfunction _resumeAfterUpdate() {\n\t\tif (shouldContinue = test()) {\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t} else {\n\t\t\t\t_resumeAfterTest(shouldContinue);\n\t\t\t}\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a do ... while loop\nexport function _do(body, test) {\n\tvar awaitBody;\n\tdo {\n\t\tvar result = body();\n\t\tif (result && result.then) {\n\t\t\tif (_isSettledPact(result)) {\n\t\t\t\tresult = result.v;\n\t\t\t} else {\n\t\t\t\tawaitBody = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar shouldContinue = test();\n\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\tshouldContinue = shouldContinue.v;\n\t\t}\n\t\tif (!shouldContinue) {\n\t\t\treturn result;\n\t\t}\n\t} while (!shouldContinue.then);\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : shouldContinue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterBody(value) {\n\t\tresult = value;\n\t\tfor (;;) {\n\t\t\tshouldContinue = test();\n\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t}\n\t\t\tif (!shouldContinue) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (shouldContinue.then) {\n\t\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\tresult = result.v;\n\t\t\t\t} else {\n\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterTest(shouldContinue) {\n\t\tif (shouldContinue) {\n\t\t\tdo {\n\t\t\t\tresult = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tif (_isSettledPact(result)) {\n\t\t\t\t\t\tresult = result.v;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tshouldContinue = test();\n\t\t\t\tif (_isSettledPact(shouldContinue)) {\n\t\t\t\t\tshouldContinue = shouldContinue.v;\n\t\t\t\t}\n\t\t\t\tif (!shouldContinue) {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} while (!shouldContinue.then);\n\t\t\tshouldContinue.then(_resumeAfterTest).then(void 0, reject);\n\t\t} else {\n\t\t\t_settle(pact, 1, result);\n\t\t}\n\t}\n}\n\n// Asynchronously implement a switch statement\nexport function _switch(discriminant, cases) {\n\tvar dispatchIndex = -1;\n\tvar awaitBody;\n\touter: {\n\t\tfor (var i = 0; i < cases.length; i++) {\n\t\t\tvar test = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvar testValue = test();\n\t\t\t\tif (testValue && testValue.then) {\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tif (testValue === discriminant) {\n\t\t\t\t\tdispatchIndex = i;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Found the default case, set it as the pending dispatch case\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tif (dispatchIndex !== -1) {\n\t\t\tdo {\n\t\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\t\twhile (!body) {\n\t\t\t\t\tdispatchIndex++;\n\t\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t\t}\n\t\t\t\tvar result = body();\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tawaitBody = true;\n\t\t\t\t\tbreak outer;\n\t\t\t\t}\n\t\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\t\tdispatchIndex++;\n\t\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t\treturn result;\n\t\t}\n\t}\n\tconst pact = new _Pact();\n\tconst reject = _settle.bind(null, pact, 2);\n\t(awaitBody ? result.then(_resumeAfterBody) : testValue.then(_resumeAfterTest)).then(void 0, reject);\n\treturn pact;\n\tfunction _resumeAfterTest(value) {\n\t\tfor (;;) {\n\t\t\tif (value === discriminant) {\n\t\t\t\tdispatchIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (++i === cases.length) {\n\t\t\t\tif (dispatchIndex !== -1) {\n\t\t\t\t\tbreak;\n\t\t\t\t} else {\n\t\t\t\t\t_settle(pact, 1, result);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\ttest = cases[i][0];\n\t\t\tif (test) {\n\t\t\t\tvalue = test();\n\t\t\t\tif (value && value.then) {\n\t\t\t\t\tvalue.then(_resumeAfterTest).then(void 0, reject);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdispatchIndex = i;\n\t\t\t}\n\t\t}\n\t\tdo {\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tvar result = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tdispatchIndex++;\n\t\t} while (fallthroughCheck && !fallthroughCheck());\n\t\t_settle(pact, 1, result);\n\t}\n\tfunction _resumeAfterBody(result) {\n\t\tfor (;;) {\n\t\t\tvar fallthroughCheck = cases[dispatchIndex][2];\n\t\t\tif (!fallthroughCheck || fallthroughCheck()) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tdispatchIndex++;\n\t\t\tvar body = cases[dispatchIndex][1];\n\t\t\twhile (!body) {\n\t\t\t\tdispatchIndex++;\n\t\t\t\tbody = cases[dispatchIndex][1];\n\t\t\t}\n\t\t\tresult = body();\n\t\t\tif (result && result.then) {\n\t\t\t\tresult.then(_resumeAfterBody).then(void 0, reject);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\t_settle(pact, 1, result);\n\t}\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _call(body, then, direct) {\n\tif (direct) {\n\t\treturn then ? then(body()) : body();\n\t}\n\ttry {\n\t\tvar result = Promise.resolve(body());\n\t\treturn then ? result.then(then) : result;\n\t} catch (e) {\n\t\treturn Promise.reject(e);\n\t}\n}\n\n// Asynchronously call a function and swallow the result\nexport function _callIgnored(body, direct) {\n\treturn _call(body, _empty, direct);\n}\n\n// Asynchronously call a function and pass the result to explicitly passed continuations\nexport function _invoke(body, then) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(then);\n\t}\n\treturn then(result);\n}\n\n// Asynchronously call a function and swallow the result\nexport function _invokeIgnored(body) {\n\tvar result = body();\n\tif (result && result.then) {\n\t\treturn result.then(_empty);\n\t}\n}\n\n// Asynchronously call a function and send errors to recovery continuation\nexport function _catch(body, recover) {\n\ttry {\n\t\tvar result = body();\n\t} catch(e) {\n\t\treturn recover(e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(void 0, recover);\n\t}\n\treturn result;\n}\n\n// Asynchronously await a promise and pass the result to a finally continuation\nexport function _finallyRethrows(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer(true, e);\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer.bind(null, false), finalizer.bind(null, true));\n\t}\n\treturn finalizer(false, result);\n}\n\n// Asynchronously await a promise and invoke a finally continuation that always overrides the result\nexport function _finally(body, finalizer) {\n\ttry {\n\t\tvar result = body();\n\t} catch (e) {\n\t\treturn finalizer();\n\t}\n\tif (result && result.then) {\n\t\treturn result.then(finalizer, finalizer);\n\t}\n\treturn finalizer();\n}\n\n// Rethrow or return a value from a finally continuation\nexport function _rethrow(thrown, value) {\n\tif (thrown)\n\t\tthrow value;\n\treturn value;\n}\n\n// Empty function to implement break and other control flow that ignores asynchronous results\nexport function _empty() {\n}\n\n// Sentinel value for early returns in generators \nexport const _earlyReturn = /*#__PURE__*/ {};\n\n// Asynchronously call a function and send errors to recovery continuation, skipping early returns\nexport function _catchInGenerator(body, recover) {\n\treturn _catch(body, function(e) {\n\t\tif (e === _earlyReturn) {\n\t\t\tthrow e;\n\t\t}\n\t\treturn recover(e);\n\t});\n}\n\n// Asynchronous generator class; accepts the entrypoint of the generator, to which it passes itself when the generator should start\nexport const _AsyncGenerator = /*#__PURE__*/(function() {\n\tfunction _AsyncGenerator(entry) {\n\t\tthis._entry = entry;\n\t\tthis._pact = null;\n\t\tthis._resolve = null;\n\t\tthis._return = null;\n\t\tthis._promise = null;\n\t}\n\n\tfunction _wrapReturnedValue(value) {\n\t\treturn { value: value, done: true };\n\t}\n\tfunction _wrapYieldedValue(value) {\n\t\treturn { value: value, done: false };\n\t}\n\n\t_AsyncGenerator.prototype._yield = function(value) {\n\t\t// Yield the value to the pending next call\n\t\tthis._resolve(value && value.then ? value.then(_wrapYieldedValue) : _wrapYieldedValue(value));\n\t\t// Return a pact for an upcoming next/return/throw call\n\t\treturn this._pact = new _Pact();\n\t};\n\t_AsyncGenerator.prototype.next = function(value) {\n\t\t// Advance the generator, starting it if it has yet to be started\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tconst _entry = _this._entry;\n\t\t\t\tif (_entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the next call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Start the generator\n\t\t\t\t_this._entry = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\tfunction returnValue(value) {\n\t\t\t\t\t_this._resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t_this._resolve = null;\n\t\t\t\t}\n\t\t\t\tvar result = _entry(_this);\n\t\t\t\tif (result && result.then) {\n\t\t\t\t\tresult.then(returnValue, function(error) {\n\t\t\t\t\t\tif (error === _earlyReturn) {\n\t\t\t\t\t\t\treturnValue(_this._return);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst pact = new _Pact();\n\t\t\t\t\t\t\t_this._resolve(pact);\n\t\t\t\t\t\t\t_this._pact = null;\n\t\t\t\t\t\t\t_this._resolve = null;\n\t\t\t\t\t\t\t_resolve(pact, 2, error);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\treturnValue(result);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Generator is started and a yield expression is pending, settle it\n\t\t\t\t_this._pact = null;\n\t\t\t\t_this._resolve = resolve;\n\t\t\t\t_settle(_pact, 1, value);\n\t\t\t}\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.return = function(value) {\n\t\t// Early return from the generator if started, otherwise abandons the generator\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the return call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return the specified value\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn resolve(value && value.then ? value.then(_wrapReturnedValue) : _wrapReturnedValue(value));\n\t\t\t}\n\t\t\t// Settle the yield expression with a rejected \"early return\" value\n\t\t\t_this._return = value;\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, _earlyReturn);\n\t\t});\n\t};\n\t_AsyncGenerator.prototype.throw = function(error) {\n\t\t// Inject an exception into the pending yield expression\n\t\tconst _this = this;\n\t\treturn _this._promise = new Promise(function (resolve, reject) {\n\t\t\tconst _pact = _this._pact;\n\t\t\tif (_pact === null) {\n\t\t\t\tif (_this._entry === null) {\n\t\t\t\t\t// Generator is started, but not awaiting a yield expression\n\t\t\t\t\t// Abandon the throw call!\n\t\t\t\t\treturn resolve(_this._promise);\n\t\t\t\t}\n\t\t\t\t// Generator is not started, abandon it and return a rejected Promise containing the error\n\t\t\t\t_this._entry = null;\n\t\t\t\treturn reject(error);\n\t\t\t}\n\t\t\t// Settle the yield expression with the value as a rejection\n\t\t\t_this._resolve = resolve;\n\t\t\t_this._pact = null;\n\t\t\t_settle(_pact, 2, error);\n\t\t});\n\t};\n\n\t_AsyncGenerator.prototype[_asyncIteratorSymbol] = function() {\n\t\treturn this;\n\t};\n\t\n\treturn _AsyncGenerator;\n})();\n","/**\n * @barba/core/modules/Logger\n *

\n * ## Logger.\n *\n * - Display informations via the console\n *\n * @module core/modules/Logger\n * @preferred\n */\n\n/***/\n\n/**\n * Log levels, all lower level messages are printed\n *\n * 0. mute\n * 1. error = `console.error()`\n * 2. warning= `console.warn()`\n * 3. info = `console.info()`\n * 4. debug = `console.log()`\n */\nexport enum LogLevels {\n off = 0,\n error = 1,\n warning = 2,\n info = 3,\n debug = 4,\n}\n\n/**\n * Global log level\n */\nlet _level: number = LogLevels.off;\n\nexport class Logger {\n /**\n * Get global log level.\n */\n public static getLevel(): number {\n return _level;\n }\n\n /**\n * Set global log level.\n */\n public static setLevel(name: keyof typeof LogLevels): number {\n _level = LogLevels[name];\n\n return _level;\n }\n\n /**\n * Log \"prefix\".\n */\n private _source: string;\n\n /**\n * Creates an instance of Logger.\n */\n constructor(source: string) {\n this._source = source;\n }\n\n /**\n * Permanent, unremovable log.\n */\n // public print(...objects: any[]): void {\n // this._log(console.info, LogLevels.off, objects);\n // }\n\n /**\n * Error log.\n */\n public error(...objects: any[]): void {\n this._log(console.error, LogLevels.error, objects);\n }\n\n /**\n * Warn log.\n */\n public warn(...objects: any[]): void {\n this._log(console.warn, LogLevels.warning, objects);\n }\n\n /**\n * Info log.\n */\n public info(...objects: any[]): void {\n this._log(console.info, LogLevels.info, objects);\n }\n\n /**\n * Debug log.\n */\n public debug(...objects: any[]): void {\n this._log(console.log, LogLevels.debug, objects);\n }\n\n /**\n * Internal logger.\n */\n private _log(fn: () => void, level: number, objects: any[]): void {\n if (level <= Logger.getLevel()) {\n fn.apply(console, ([`[${this._source}] `].concat(objects) as unknown) as [\n\n ]);\n }\n }\n}\n","/**\n * Expose `pathToRegexp`.\n */\nmodule.exports = pathToRegexp\nmodule.exports.match = match\nmodule.exports.regexpToFunction = regexpToFunction\nmodule.exports.parse = parse\nmodule.exports.compile = compile\nmodule.exports.tokensToFunction = tokensToFunction\nmodule.exports.tokensToRegExp = tokensToRegExp\n\n/**\n * Default configs.\n */\nvar DEFAULT_DELIMITER = '/'\n\n/**\n * The main path matching regexp utility.\n *\n * @type {RegExp}\n */\nvar PATH_REGEXP = new RegExp([\n // Match escaped characters that would otherwise appear in future matches.\n // This allows the user to escape special characters that won't transform.\n '(\\\\\\\\.)',\n // Match Express-style parameters and un-named parameters with a prefix\n // and optional suffixes. Matches appear as:\n //\n // \":test(\\\\d+)?\" => [\"test\", \"\\d+\", undefined, \"?\"]\n // \"(\\\\d+)\" => [undefined, undefined, \"\\d+\", undefined]\n '(?:\\\\:(\\\\w+)(?:\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))?|\\\\(((?:\\\\\\\\.|[^\\\\\\\\()])+)\\\\))([+*?])?'\n].join('|'), 'g')\n\n/**\n * Parse a string for the raw tokens.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!Array}\n */\nfunction parse (str, options) {\n var tokens = []\n var key = 0\n var index = 0\n var path = ''\n var defaultDelimiter = (options && options.delimiter) || DEFAULT_DELIMITER\n var whitelist = (options && options.whitelist) || undefined\n var pathEscaped = false\n var res\n\n while ((res = PATH_REGEXP.exec(str)) !== null) {\n var m = res[0]\n var escaped = res[1]\n var offset = res.index\n path += str.slice(index, offset)\n index = offset + m.length\n\n // Ignore already escaped sequences.\n if (escaped) {\n path += escaped[1]\n pathEscaped = true\n continue\n }\n\n var prev = ''\n var name = res[2]\n var capture = res[3]\n var group = res[4]\n var modifier = res[5]\n\n if (!pathEscaped && path.length) {\n var k = path.length - 1\n var c = path[k]\n var matches = whitelist ? whitelist.indexOf(c) > -1 : true\n\n if (matches) {\n prev = c\n path = path.slice(0, k)\n }\n }\n\n // Push the current path onto the tokens.\n if (path) {\n tokens.push(path)\n path = ''\n pathEscaped = false\n }\n\n var repeat = modifier === '+' || modifier === '*'\n var optional = modifier === '?' || modifier === '*'\n var pattern = capture || group\n var delimiter = prev || defaultDelimiter\n\n tokens.push({\n name: name || key++,\n prefix: prev,\n delimiter: delimiter,\n optional: optional,\n repeat: repeat,\n pattern: pattern\n ? escapeGroup(pattern)\n : '[^' + escapeString(delimiter === defaultDelimiter ? delimiter : (delimiter + defaultDelimiter)) + ']+?'\n })\n }\n\n // Push any remaining characters.\n if (path || index < str.length) {\n tokens.push(path + str.substr(index))\n }\n\n return tokens\n}\n\n/**\n * Compile a string to a template function for the path.\n *\n * @param {string} str\n * @param {Object=} options\n * @return {!function(Object=, Object=)}\n */\nfunction compile (str, options) {\n return tokensToFunction(parse(str, options), options)\n}\n\n/**\n * Create path match function from `path-to-regexp` spec.\n */\nfunction match (str, options) {\n var keys = []\n var re = pathToRegexp(str, keys, options)\n return regexpToFunction(re, keys)\n}\n\n/**\n * Create a path match function from `path-to-regexp` output.\n */\nfunction regexpToFunction (re, keys) {\n return function (pathname, options) {\n var m = re.exec(pathname)\n if (!m) return false\n\n var path = m[0]\n var index = m.index\n var params = {}\n var decode = (options && options.decode) || decodeURIComponent\n\n for (var i = 1; i < m.length; i++) {\n if (m[i] === undefined) continue\n\n var key = keys[i - 1]\n\n if (key.repeat) {\n params[key.name] = m[i].split(key.delimiter).map(function (value) {\n return decode(value, key)\n })\n } else {\n params[key.name] = decode(m[i], key)\n }\n }\n\n return { path: path, index: index, params: params }\n }\n}\n\n/**\n * Expose a method for transforming tokens into the path function.\n */\nfunction tokensToFunction (tokens, options) {\n // Compile all the tokens into regexps.\n var matches = new Array(tokens.length)\n\n // Compile all the patterns before compilation.\n for (var i = 0; i < tokens.length; i++) {\n if (typeof tokens[i] === 'object') {\n matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))\n }\n }\n\n return function (data, options) {\n var path = ''\n var encode = (options && options.encode) || encodeURIComponent\n var validate = options ? options.validate !== false : true\n\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n path += token\n continue\n }\n\n var value = data ? data[token.name] : undefined\n var segment\n\n if (Array.isArray(value)) {\n if (!token.repeat) {\n throw new TypeError('Expected \"' + token.name + '\" to not repeat, but got array')\n }\n\n if (value.length === 0) {\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to not be empty')\n }\n\n for (var j = 0; j < value.length; j++) {\n segment = encode(value[j], token)\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected all \"' + token.name + '\" to match \"' + token.pattern + '\"')\n }\n\n path += (j === 0 ? token.prefix : token.delimiter) + segment\n }\n\n continue\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n segment = encode(String(value), token)\n\n if (validate && !matches[i].test(segment)) {\n throw new TypeError('Expected \"' + token.name + '\" to match \"' + token.pattern + '\", but got \"' + segment + '\"')\n }\n\n path += token.prefix + segment\n continue\n }\n\n if (token.optional) continue\n\n throw new TypeError('Expected \"' + token.name + '\" to be ' + (token.repeat ? 'an array' : 'a string'))\n }\n\n return path\n }\n}\n\n/**\n * Escape a regular expression string.\n *\n * @param {string} str\n * @return {string}\n */\nfunction escapeString (str) {\n return str.replace(/([.+*?=^!:${}()[\\]|/\\\\])/g, '\\\\$1')\n}\n\n/**\n * Escape the capturing group by escaping special characters and meaning.\n *\n * @param {string} group\n * @return {string}\n */\nfunction escapeGroup (group) {\n return group.replace(/([=!:$/()])/g, '\\\\$1')\n}\n\n/**\n * Get the flags for a regexp from the options.\n *\n * @param {Object} options\n * @return {string}\n */\nfunction flags (options) {\n return options && options.sensitive ? '' : 'i'\n}\n\n/**\n * Pull out keys from a regexp.\n *\n * @param {!RegExp} path\n * @param {Array=} keys\n * @return {!RegExp}\n */\nfunction regexpToRegexp (path, keys) {\n if (!keys) return path\n\n // Use a negative lookahead to match only capturing groups.\n var groups = path.source.match(/\\((?!\\?)/g)\n\n if (groups) {\n for (var i = 0; i < groups.length; i++) {\n keys.push({\n name: i,\n prefix: null,\n delimiter: null,\n optional: false,\n repeat: false,\n pattern: null\n })\n }\n }\n\n return path\n}\n\n/**\n * Transform an array into a regexp.\n *\n * @param {!Array} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction arrayToRegexp (path, keys, options) {\n var parts = []\n\n for (var i = 0; i < path.length; i++) {\n parts.push(pathToRegexp(path[i], keys, options).source)\n }\n\n return new RegExp('(?:' + parts.join('|') + ')', flags(options))\n}\n\n/**\n * Create a path regexp from string input.\n *\n * @param {string} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction stringToRegexp (path, keys, options) {\n return tokensToRegExp(parse(path, options), keys, options)\n}\n\n/**\n * Expose a function for taking tokens and returning a RegExp.\n *\n * @param {!Array} tokens\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction tokensToRegExp (tokens, keys, options) {\n options = options || {}\n\n var strict = options.strict\n var start = options.start !== false\n var end = options.end !== false\n var delimiter = options.delimiter || DEFAULT_DELIMITER\n var endsWith = [].concat(options.endsWith || []).map(escapeString).concat('$').join('|')\n var route = start ? '^' : ''\n\n // Iterate over the tokens and create our regexp string.\n for (var i = 0; i < tokens.length; i++) {\n var token = tokens[i]\n\n if (typeof token === 'string') {\n route += escapeString(token)\n } else {\n var capture = token.repeat\n ? '(?:' + token.pattern + ')(?:' + escapeString(token.delimiter) + '(?:' + token.pattern + '))*'\n : token.pattern\n\n if (keys) keys.push(token)\n\n if (token.optional) {\n if (!token.prefix) {\n route += '(' + capture + ')?'\n } else {\n route += '(?:' + escapeString(token.prefix) + '(' + capture + '))?'\n }\n } else {\n route += escapeString(token.prefix) + '(' + capture + ')'\n }\n }\n }\n\n if (end) {\n if (!strict) route += '(?:' + escapeString(delimiter) + ')?'\n\n route += endsWith === '$' ? '$' : '(?=' + endsWith + ')'\n } else {\n var endToken = tokens[tokens.length - 1]\n var isEndDelimited = typeof endToken === 'string'\n ? endToken[endToken.length - 1] === delimiter\n : endToken === undefined\n\n if (!strict) route += '(?:' + escapeString(delimiter) + '(?=' + endsWith + '))?'\n if (!isEndDelimited) route += '(?=' + escapeString(delimiter) + '|' + endsWith + ')'\n }\n\n return new RegExp(route, flags(options))\n}\n\n/**\n * Normalize the given path string, returning a regular expression.\n *\n * An empty array can be passed in for the keys, which will hold the\n * placeholder key descriptions. For example, using `/user/:id`, `keys` will\n * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.\n *\n * @param {(string|RegExp|Array)} path\n * @param {Array=} keys\n * @param {Object=} options\n * @return {!RegExp}\n */\nfunction pathToRegexp (path, keys, options) {\n if (path instanceof RegExp) {\n return regexpToRegexp(path, keys)\n }\n\n if (Array.isArray(path)) {\n return arrayToRegexp(/** @type {!Array} */ (path), keys, options)\n }\n\n return stringToRegexp(/** @type {string} */ (path), keys, options)\n}\n","/**\n * @barba/core/schemas\n *

\n * ## Schemas description.\n *\n * @module core/schemas\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { ISchemaAttribute } from '../defs';\n\n/**\n * See [[ISchemaAttribute]]\n */\nexport const schemaAttribute: ISchemaAttribute = {\n container: 'container',\n history: 'history',\n namespace: 'namespace',\n prefix: 'data-barba',\n prevent: 'prevent',\n wrapper: 'wrapper',\n};\n","/**\n * @barba/core/utils/dom\n *

\n * ## Dom utils\n *\n * - Access DOM contents\n * - DOM vs string conversions\n *\n * @module core/utils/dom\n * @preferred\n */\n\n/***/\n\nimport path from 'path';\n\n// Definitions\nimport { ISchemaAttribute, Link, Scope, Wrapper } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n\nexport class Dom {\n private _attr: ISchemaAttribute = schemaAttribute;\n private _parser: DOMParser = new DOMParser();\n\n /**\n * Convert HTMLDocument to string.\n */\n public toString(el: HTMLElement): string {\n return el.outerHTML;\n }\n\n /**\n * Parse HTML string to HTMLDocument.\n */\n // see https://github.com/barbajs/barba/issues/362\n // Seems that using DOMParser.parseFromString causes this issue.\n public toDocument(htmlString: string): HTMLDocument {\n return this._parser.parseFromString(htmlString, 'text/html');\n }\n\n /**\n * Parse HTML string to DIVElement.\n *\n * DOMParser.parseFromString fails with img[srcset] on iOS.\n * see https://github.com/barbajs/barba/issues/362\n */\n public toElement(htmlString: string): HTMLDivElement {\n const div = document.createElement('div');\n\n div.innerHTML = htmlString;\n return div;\n }\n\n /**\n * Get HTML content.\n */\n public getHtml(doc: HTMLDocument = document): string {\n return this.toString(doc.documentElement);\n }\n\n /**\n * Get full document content.\n */\n // getDocument(el = document.documentElement) {\n // return this.toStr(el);\n // },\n\n /**\n * Get `[data-barba=\"wrapper\"]`.\n */\n public getWrapper(scope: Scope = document): Wrapper {\n return scope.querySelector(\n `[${this._attr.prefix}=\"${this._attr.wrapper}\"]`\n );\n }\n\n /**\n * Get `[data-barba=\"container\"]`.\n */\n public getContainer(scope: Scope = document): HTMLElement | null {\n return scope.querySelector(\n `[${this._attr.prefix}=\"${this._attr.container}\"]`\n );\n }\n\n /**\n * Remove container and store next sibling (if applicable).\n */\n public removeContainer(container: HTMLElement) {\n if (document.body.contains(container)) {\n container.parentNode.removeChild(container);\n }\n }\n\n /**\n * Add container before next sibling or at the end of the wrapper.\n */\n public addContainer(container: HTMLElement, wrapper: HTMLElement) {\n const existingContainer = this.getContainer();\n\n if (existingContainer) {\n this._insertAfter(container, existingContainer);\n } else {\n wrapper.appendChild(container);\n }\n }\n\n /**\n * Get `[data-barba-namespace]`.\n */\n public getNamespace(scope: Scope = document): string | null {\n const ns = scope.querySelector(\n `[${this._attr.prefix}-${this._attr.namespace}]`\n );\n\n return ns\n ? ns.getAttribute(`${this._attr.prefix}-${this._attr.namespace}`)\n : null;\n }\n\n /**\n * Get URL from `href` value.\n */\n public getHref(el: Link): string | null {\n // HTML tagName is UPPERCASE, xhtml tagName keeps existing case.\n if (el.tagName && el.tagName.toLowerCase() === 'a') {\n // HTMLAnchorElement, full URL available\n if (typeof el.href === 'string') {\n return el.href;\n }\n\n // Probably a SVGAElement…\n const href = el.getAttribute('href') || el.getAttribute('xlink:href');\n\n /* istanbul ignore else */\n if (href) {\n // When link comes from SVG, `href` returns an object, not a string.\n const attr: string =\n ((href as unknown) as SVGAnimatedString).baseVal || href;\n\n return this.resolveUrl(attr);\n }\n }\n return null;\n }\n\n // Copyright 2014 Simon Lydell\n // X11 (“MIT”) Licensed. (See LICENSE\n // https://github.com/lydell/resolve-url/blob/master/resolve-url.js\n /* istanbul ignore next */\n public resolveUrl(...urls: string[]) {\n const numUrls = urls.length;\n\n if (numUrls === 0) {\n throw new Error('resolveUrl requires at least one argument; got none.');\n }\n\n const base = document.createElement('base');\n base.href = arguments[0];\n\n if (numUrls === 1) {\n return base.href;\n }\n\n const head = document.getElementsByTagName('head')[0];\n head.insertBefore(base, head.firstChild);\n\n const a = document.createElement('a');\n let resolved;\n\n for (let index = 1; index < numUrls; index++) {\n a.href = arguments[index];\n resolved = a.href;\n base.href = resolved;\n }\n\n head.removeChild(base);\n\n return resolved;\n }\n\n /**\n * Insert node after another node.\n */\n private _insertAfter(newNode: Node, referenceNode: Node) {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);\n }\n}\n\nconst dom = new Dom();\n\nexport { dom };\n","import { HistoryAction, LinkEvent, Trigger } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n\n/**\n * @barba/core/utils/history\n *

\n * ## History manager.\n *\n * - Keep track of the navigation history\n *\n * @module core/utils/history\n * @preferred\n */\n\n/**\n * State item.\n *\n * @property from\n * @property index\n */\ninterface IHistoryItem {\n /** origin */\n from: string;\n /** index */\n index: number;\n /** states */\n states: IStateItem[];\n}\n\n/***/\ninterface ICoords {\n x: number;\n y: number;\n}\n\n/**\n * History item.\n *\n * @property namespace\n * @property scroll\n * @property URL\n */\ninterface IStateItem {\n /** namespace */\n ns: string | undefined;\n /** Scroll position */\n scroll: ICoords;\n /** URL */\n url: string;\n}\n\nexport class History {\n private _session: string;\n private _states: IStateItem[] = [];\n private _pointer = -1;\n\n /**\n * Init with first state.\n */\n public init(url: string, ns: string): void {\n this._session = 'barba';\n const index = 0;\n\n const state: IStateItem = {\n ns,\n scroll: {\n x: window.scrollX,\n y: window.scrollY,\n },\n url,\n };\n\n this._states.push(state);\n this._pointer = index;\n\n const item: IHistoryItem = {\n from: this._session,\n index,\n states: [...this._states],\n };\n\n window.history && window.history.replaceState(item, '', url);\n }\n\n public change(\n url: string,\n trigger: Trigger,\n e?: LinkEvent | PopStateEvent\n ): Trigger {\n if (e && (e as PopStateEvent).state) {\n // If popstate, move to existing state\n // and get back/forward direction.\n const { state }: { state: IHistoryItem } = e as PopStateEvent;\n const { index } = state;\n const diff = this._pointer - index;\n\n trigger = this._getDirection(diff);\n\n // Work with previous states\n this.replace(state.states);\n this._pointer = index;\n } else {\n // Add new state\n this.add(url, trigger);\n }\n\n return trigger;\n }\n\n /**\n * Add a new state.\n */\n public add(url: string, trigger: Trigger): void {\n // If no state, it will be updated later.\n const ns = 'tmp';\n const index = this.size;\n const action = this._getAction(trigger);\n const state: IStateItem = {\n ns,\n scroll: {\n x: window.scrollX,\n y: window.scrollY,\n },\n url,\n };\n\n this._states.push(state);\n this._pointer = index;\n\n const item: IHistoryItem = {\n from: this._session,\n index,\n states: [...this._states],\n };\n\n switch (action) {\n case 'push':\n window.history && window.history.pushState(item, '', url);\n break;\n case 'replace':\n window.history && window.history.replaceState(item, '', url);\n break;\n /* istanbul ignore next */\n default:\n }\n }\n\n /**\n * Update state.\n */\n public update(data: any, i?: number): void {\n const index = i || this._pointer;\n const existing = this.get(index);\n const state: IStateItem = {\n ...existing,\n ...data,\n };\n\n this.set(index, state);\n }\n\n /**\n * Remove last state.\n */\n public remove(i?: number): void {\n if (i) {\n this._states.splice(i, 1);\n } else {\n this._states.pop();\n }\n\n this._pointer--;\n }\n\n /**\n * Delete all states.\n */\n public clear(): void {\n this._states = [];\n this._pointer = -1;\n }\n\n /**\n * Replace all states.\n */\n public replace(newStates: IStateItem[]): void {\n this._states = newStates;\n }\n\n /**\n * Get state by index.\n */\n public get(index: number) {\n return this._states[index];\n }\n\n /**\n * Set state by index.\n */\n public set(i: number, state: IStateItem) {\n return (this._states[i] = state);\n }\n\n /**\n * Get the current state.\n */\n get current(): IStateItem {\n return this._states[this._pointer];\n }\n\n /**\n * Get the last state (top of the history stack).\n */\n get state(): IStateItem {\n return this._states[this._states.length - 1];\n }\n\n /**\n * Get the previous state.\n */\n get previous(): IStateItem | null {\n return this._pointer < 1 ? null : this._states[this._pointer - 1];\n }\n\n /**\n * Get the state size.\n */\n get size(): number {\n return this._states.length;\n }\n\n /**\n * Get the history action: push vs replace\n */\n private _getAction(trigger: Trigger): HistoryAction {\n let action: HistoryAction = 'push';\n\n // Manage `data-barba-history` attribute\n // to get the right action (push vs replace).\n const el = trigger as HTMLAnchorElement;\n const attr = `${schemaAttribute.prefix}-${schemaAttribute.history}`;\n\n if (el.hasAttribute && el.hasAttribute(attr)) {\n action = el.getAttribute(attr) as HistoryAction;\n }\n\n return action;\n }\n\n /**\n * Get the direction of popstate change\n */\n private _getDirection(diff: number): Trigger {\n // Check if \"session switch\"\n if (Math.abs(diff) > 1) {\n // Ex 6-0 > 0 -> forward, 0-6 < 0 -> back\n return diff > 0 ? 'forward' : 'back';\n } else {\n if (diff === 0) {\n return 'popstate';\n } else {\n // Ex 6-5 > 0 -> back, 5-6 < 0 -> forward\n return diff > 0 ? 'back' : 'forward';\n }\n }\n }\n}\n\nconst history = new History();\n\nexport { history };\n","/**\n * @barba/core/utils/helpers\n *

\n * ## Helpers\n *\n * - Update next page data\n *\n * @module core/utils/helpers\n * @preferred\n */\n\n/***/\n\n// Third-party\nimport ptr from 'path-to-regexp';\n// Definitions\nimport { ITransitionData } from '../defs';\n// Utils\nimport { dom } from './dom';\nimport { history } from './history';\n\n/**\n * Update `data.next`, the title and the history\n */\nexport const update = async (\n page: Promise,\n data: ITransitionData\n): Promise => {\n // If not already updated\n if (!data.next.html) {\n const html = await page;\n const { next } = data;\n\n if (html) {\n // see: https://github.com/barbajs/barba/issues/362\n // const nextDocument = dom.toDocument(html);\n const nextDocument = dom.toElement(html);\n\n next.namespace = dom.getNamespace(nextDocument);\n next.container = dom.getContainer(nextDocument);\n // see https://github.com/barbajs/barba/issues/362\n // next.html = dom.getHtml(nextDocument);\n // next.html = nextDocument.innerHTML;\n next.html = html;\n\n // Update history namespace (not available when initially set)\n history.update({ ns: next.namespace });\n\n // Update title.\n const { title } = dom.toDocument(html);\n\n document.title = title;\n }\n }\n};\n\n/**\n * Next tick\n */\nexport const nextTick = () =>\n new Promise(resolve => {\n window.requestAnimationFrame(resolve);\n // DEV: same result?\n // setTimeout(resolve, 0);\n });\n\n/**\n * Turn a route string such as `/user/:name` into a regular expression.\n *\n * Used for:\n *\n * - routes to ignore\n * - route transition resolution\n *\n * @see https://www.npmjs.com/package/path-to-regexp\n */\nconst pathToRegexp = ptr;\n\nexport { pathToRegexp };\n","/**\n * @barba/core/utils/url\n *

\n * ## URL utils.\n *\n * - Collect and structure informations from URLs\n *\n * @module core/utils/url\n */\n\n/***/\n\n// Definitions\nimport { IGenericObject, IUrlBase } from '../defs';\n\n/**\n * Get location href.\n */\nexport const getHref = () => window.location.href;\n\n/**\n * Get location origin.\n */\nexport const getOrigin = () => window.location.origin;\n\n/**\n * Get port based on URL or location.\n */\nexport const getPort = (url: string = window.location.href) => parse(url).port;\n\n/**\n * Get path from URL.\n */\nexport const getPath = (url: string = window.location.href) => parse(url).path;\n\n/**\n * Get query object from URL.\n */\n// export const getQuery = (url: string): IGenericObject => parse(url).query;\n\n/**\n * Get hash from URL.\n */\n// export const getHash = (url: string): string => parse(url).hash;\n\n/**\n * Parse URL for path, query and hash and more.\n */\nexport const parse = (url: string): IUrlBase => {\n // Port\n let port;\n const matches = url.match(/:\\d+/);\n\n if (matches === null) {\n if (/^http/.test(url)) {\n port = 80;\n }\n\n if (/^https/.test(url)) {\n port = 443;\n }\n } else {\n const portString = matches[0].substring(1);\n\n port = parseInt(portString, 10);\n }\n\n // Path\n let path = url.replace(getOrigin(), '');\n let hash;\n let query = {};\n\n // Hash\n const hashIndex = path.indexOf('#');\n\n if (hashIndex >= 0) {\n hash = path.slice(hashIndex + 1);\n path = path.slice(0, hashIndex);\n }\n\n // Query\n const queryIndex = path.indexOf('?');\n\n if (queryIndex >= 0) {\n query = parseQuery(path.slice(queryIndex + 1));\n path = path.slice(0, queryIndex);\n }\n\n return {\n hash,\n path,\n port,\n query,\n };\n};\n\n/**\n * Parse a query string to object.\n */\nexport const parseQuery = (str: string) =>\n str.split('&').reduce((acc: IGenericObject, el: string) => {\n const [key, value] = el.split('=');\n\n acc[key] = value;\n\n return acc;\n }, {});\n\n/**\n * Clean URL, remove \"hash\" and/or \"trailing slash\".\n */\nexport const clean = (url: string = window.location.href) =>\n url.replace(/(\\/#.*|\\/|#.*)$/, '');\n","/**\n * @barba/core/utils/request\n *

\n * ## Fetch pages for transitions.\n *\n * - Includes timeout\n * - Uses Fetch API\n * - Handles errors\n *\n * @module core/utils/request\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { RequestError } from '../defs';\n\n/**\n * Init a page request.\n * Fetch the page and returns a promise with the text content.\n */\nfunction request(\n url: string,\n ttl: number = 2e3,\n requestError: RequestError\n): Promise {\n return new Promise((resolve, reject) => {\n const xhr = new XMLHttpRequest();\n\n xhr.onreadystatechange = () => {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n if (xhr.status === 200) {\n resolve(xhr.responseText);\n } else if (xhr.status) {\n // HTTP code is not 200, reject with response.\n const res = {\n status: xhr.status,\n statusText: xhr.statusText,\n };\n requestError(url, res);\n reject(res);\n }\n }\n };\n xhr.ontimeout = () => {\n const err = new Error(`Timeout error [${ttl}]`);\n requestError(url, err);\n reject(err);\n };\n xhr.onerror = () => {\n const err = new Error(`Fetch error`);\n requestError(url, err);\n reject(err);\n };\n\n xhr.open('GET', url);\n xhr.timeout = ttl;\n xhr.setRequestHeader(\n 'Accept',\n 'text/html,application/xhtml+xml,application/xml'\n );\n xhr.setRequestHeader('x-barba', 'yes');\n xhr.send();\n });\n}\n\nexport { request };\n","module.exports = isPromise;\n\nfunction isPromise(obj) {\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';\n}\n","import isPromise from 'is-promise';\n\n// https://github.com/SBoudrias/run-async\n/* istanbul ignore next */\nexport function runAsync(\n func: (...args: any[]) => void | Promise,\n ctx: any = {}\n): (...args: any[]) => Promise {\n return (...args: any[]) => {\n let async = false;\n\n const promise = new Promise((resolve, reject) => {\n // Add async to context\n ctx.async = () => {\n async = true;\n\n return (err: any, value: any) => {\n if (err) {\n reject(err);\n } else {\n resolve(value);\n }\n };\n };\n\n const answer = func.apply(ctx, args as []);\n\n if (!async) {\n if (isPromise(answer)) {\n (answer as Promise).then(resolve, reject);\n } else {\n resolve(answer);\n }\n }\n });\n\n return promise;\n };\n}\n","/**\n * @barba/core/modules/hooks\n *

\n * ## Hooks manager.\n *\n * - Register and trigger hooks\n *\n * Hooks can be easily registered:\n *\n * ```js\n * hooks.leave(callback, context);\n * ```\n *\n * @module core/modules/hooks\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HookFunction, HookMethods, HooksAll } from './defs';\n// Modules\nimport { Logger } from './modules/Logger';\n// Utils\nimport { runAsync } from './utils';\n// Types\ninterface IHookInfos {\n ctx: any;\n fn: HookFunction;\n}\n\nexport class Hooks extends HookMethods {\n /**\n * Allow the use of `hooks[name](cb, ctx)`.\n */\n [key: string]: any;\n // [key in HooksAll]?: any;\n public logger: Logger = new Logger('@barba/core');\n /**\n * All available hooks.\n *\n * See [[HooksAll]]\n */\n // TODO: get hooks from defs (DRY)?\n public all: HooksAll[] = [\n 'ready',\n 'page',\n 'reset',\n 'currentAdded',\n 'currentRemoved',\n 'nextAdded',\n 'nextRemoved',\n 'beforeOnce',\n 'once',\n 'afterOnce',\n 'before',\n 'beforeLeave',\n 'leave',\n 'afterLeave',\n 'beforeEnter',\n 'enter',\n 'afterEnter',\n 'after',\n ];\n /**\n * Registered hooks.\n *\n * - Unique hook name\n * - Associated data set(s) (callback + context)\n */\n public registered: Map> = new Map();\n\n constructor() {\n super();\n this.init();\n }\n\n public init() {\n this.registered.clear();\n this.all.forEach(hook => {\n if (!this[hook]) {\n this[hook] = (fn: HookFunction, ctx?: any) => {\n if (!this.registered.has(hook)) {\n this.registered.set(hook, new Set());\n }\n const set = this.registered.get(hook);\n\n set.add({\n ctx: ctx || {},\n fn,\n });\n };\n }\n });\n }\n\n /**\n * Do hook.\n *\n * Trigger registered hooks.\n */\n public do(name: HooksAll, ...args: any): Promise {\n if (this.registered.has(name)) {\n // Let's start a chain of promises\n let chain = Promise.resolve();\n\n this.registered.get(name).forEach(hook => {\n // Chain async hooks promisified\n chain = chain.then(() => runAsync(hook.fn, hook.ctx)(...args));\n });\n\n return chain.catch(error => {\n this.logger.debug(`Hook error [${name}]`);\n this.logger.error(error);\n });\n }\n\n return Promise.resolve();\n }\n\n public clear(): void {\n this.all.forEach(hook => {\n delete this[hook];\n });\n\n this.init();\n }\n\n /**\n * Help, print available and registered hooks.\n */\n public help(): void {\n this.logger.info(`Available hooks: ${this.all.join(',')}`);\n const registered: string[] = [];\n this.registered.forEach((value, key) => registered.push(key));\n this.logger.info(`Registered hooks: ${registered.join(',')}`);\n }\n}\n\nconst hooks = new Hooks();\n\nexport { hooks };\n","/**\n * @module typings/core\n */\nimport { ITransitionData, ITransitionPage, IViewData } from './index';\n\nexport type HooksBarba =\n | 'ready'\n | 'page'\n | 'reset'\n | 'currentAdded'\n | 'currentRemoved'\n | 'nextAdded'\n | 'nextRemoved';\n\nexport type HooksOnce = 'beforeOnce' | 'once' | 'afterOnce';\n\nexport type HooksPage =\n | 'before'\n | 'beforeLeave'\n | 'leave'\n | 'afterLeave'\n | 'beforeEnter'\n | 'enter'\n | 'afterEnter'\n | 'after';\n\nexport type HooksBefore = 'beforeOnce' | 'beforeLeave' | 'beforeEnter';\nexport type HooksAfter = 'afterOnce' | 'afterLeave' | 'afterEnter';\n\nexport type HooksTransition = HooksOnce | HooksPage;\nexport type HooksView = HooksBefore | HooksAfter;\nexport type HooksAll = HooksBarba | HooksTransition;\n\n// Allow optional \"dynamically created\" hooks\nexport type HooksTransitionMap = { [key in HooksTransition]?: any };\n\nexport type HookFunction = (\n data?: ITransitionData | IViewData,\n t?: ITransitionPage\n) => Promise | void;\n\nexport class HookMethods {\n public before: (fn: HookFunction, ctx?: any) => void;\n public beforeLeave: (fn: HookFunction, ctx?: any) => void;\n public leave: (fn: HookFunction, ctx?: any) => void;\n public afterLeave: (fn: HookFunction, ctx?: any) => void;\n public beforeEnter: (fn: HookFunction, ctx?: any) => void;\n public enter: (fn: HookFunction, ctx?: any) => void;\n public afterEnter: (fn: HookFunction, ctx?: any) => void;\n public after: (fn: HookFunction, ctx?: any) => void;\n}\n","/**\n * @barba/core/modules/ignore\n *

\n * ## Manage ignore options.\n *\n * - cache\n * - prefetch\n *\n * @module core/modules/ignore\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { IgnoreOption } from '../defs';\n// Utils\nimport { pathToRegexp } from '../utils/helpers';\nimport { parse } from '../utils/url';\n\nexport class Ignore {\n private _ignoreAll: boolean;\n private _ignoreRegexes: RegExp[] = [];\n\n constructor(ignore: IgnoreOption) {\n if (typeof ignore === 'boolean') {\n this._ignoreAll = ignore;\n } else {\n const paths = Array.isArray(ignore) ? ignore : [ignore];\n\n this._ignoreRegexes = paths.map(p => pathToRegexp(p));\n }\n }\n\n public checkHref(href: string): boolean {\n if (typeof this._ignoreAll === 'boolean') {\n return this._ignoreAll;\n }\n\n const { path } = parse(href);\n\n return this._ignoreRegexes.some(regex => regex.exec(path) !== null);\n }\n}\n","/**\n * @barba/core/modules/cache\n *

\n * ## Cache for storing URL / HTML.\n *\n * @module core/modules/cache\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { CacheAction, CacheRequest, ICacheData, IgnoreOption } from '../defs';\n// Modules\nimport { Ignore } from './Ignore';\n\nexport class Cache extends Ignore {\n private _state: Map = new Map();\n\n constructor(ignore: IgnoreOption) {\n super(ignore);\n }\n\n /**\n * Set value to cache\n */\n public set(\n href: string,\n request: CacheRequest,\n action: CacheAction\n ): ICacheData {\n this._state.set(href, {\n action,\n request,\n });\n\n return {\n action,\n request,\n };\n }\n\n /**\n * Get data from cache\n */\n public get(href: string): ICacheData {\n return this._state.get(href);\n }\n\n /**\n * Get request from cache\n */\n public getRequest(href: string): CacheRequest {\n return this._state.get(href).request;\n }\n\n /**\n * Get action from cache\n */\n public getAction(href: string): CacheAction {\n return this._state.get(href).action;\n }\n\n /**\n * Check if value exists into cache\n */\n public has(href: string): boolean {\n /* istanbul ignore else */\n if (this.checkHref(href)) {\n return false;\n }\n return this._state.has(href);\n }\n\n /**\n * Delete value from cache\n */\n public delete(href: string): boolean {\n return this._state.delete(href);\n }\n\n /**\n * Update cache value\n */\n public update(href: string, data: ICacheData): ICacheData {\n const state = {\n ...this._state.get(href),\n ...data,\n };\n this._state.set(href, state);\n\n return state;\n }\n}\n","/**\n * @barba/core/modules/prevent\n *

\n * ## Prevent checks.\n *\n * - Gathers all the tests that allow Barba to work and play transitions\n *\n * @module core/modules/prevent\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { IgnoreOption, Link, PreventCheck } from '../defs';\n// Schemas\nimport { schemaAttribute } from '../schemas/attribute';\n// Utils\nimport { url } from '../utils';\n// Modules\nimport { Ignore } from './Ignore';\n\n/**\n * Make sure the browser supports `history.pushState`.\n */\nconst pushState: PreventCheck = () => !window.history.pushState;\n\n/**\n * Make sure there is an `el` and `href`.\n */\nconst exists: PreventCheck = ({ el, href }) => !el || !href;\n\n/**\n * If the user is pressing ctrl + click, the browser will open a new tab.\n */\nconst newTab: PreventCheck = ({ event }) =>\n (event as KeyboardEvent).which > 1 ||\n (event as KeyboardEvent).metaKey ||\n (event as KeyboardEvent).ctrlKey ||\n (event as KeyboardEvent).shiftKey ||\n (event as KeyboardEvent).altKey;\n\n/**\n * If the link has `_blank` target.\n */\nconst blank: PreventCheck = ({ el }) =>\n el.hasAttribute('target') && (el as Link).target === '_blank';\n\n/**\n * If the domain is the same (in order to avoid pushState cross origin security problem).\n * Note: SVGAElement do not have `protocol` neither `hostname` properties.\n */\nconst corsDomain: PreventCheck = ({ el }) =>\n ((el as HTMLAnchorElement).protocol !== undefined &&\n window.location.protocol !== (el as HTMLAnchorElement).protocol) ||\n ((el as HTMLAnchorElement).hostname !== undefined &&\n window.location.hostname !== (el as HTMLAnchorElement).hostname);\n\n/**\n * If the port is the same.\n * Note: SVGAElement do not have `port` property.\n */\nconst corsPort: PreventCheck = ({ el }) =>\n (el as HTMLAnchorElement).port !== undefined &&\n url.getPort() !== url.getPort((el as HTMLAnchorElement).href);\n\n/**\n * If the link has download attribute.\n */\nconst download: PreventCheck = ({ el }) =>\n el.getAttribute && typeof el.getAttribute('download') === 'string';\n\n/**\n * If the links contains [data-barba-prevent] or [data-barba-prevent=\"self\"].\n */\nconst preventSelf: PreventCheck = ({ el }) =>\n el.hasAttribute(`${schemaAttribute.prefix}-${schemaAttribute.prevent}`);\n\n/**\n * If some link ancestor contains [data-barba-prevent=\"all\"].\n */\nconst preventAll: PreventCheck = ({ el }) =>\n Boolean(\n el.closest(`[${schemaAttribute.prefix}-${schemaAttribute.prevent}=\"all\"]`)\n );\n\n/**\n * If the link is the current URL.\n *\n * > Not in the test suite.\n */\nconst sameUrl: PreventCheck = ({ href }) =>\n url.clean(href) === url.clean() && url.getPort(href) === url.getPort();\n\nexport class Prevent extends Ignore {\n public suite: string[] = [];\n public tests: Map = new Map();\n\n constructor(ignore: IgnoreOption) {\n super(ignore);\n this.init();\n }\n\n public init(): void {\n // Add defaults\n this.add('pushState', pushState);\n this.add('exists', exists);\n this.add('newTab', newTab);\n this.add('blank', blank);\n this.add('corsDomain', corsDomain);\n this.add('corsPort', corsPort);\n this.add('download', download);\n this.add('preventSelf', preventSelf);\n this.add('preventAll', preventAll);\n\n // Outside of the test suite\n this.add('sameUrl', sameUrl, false);\n }\n\n public add(name: string, check: PreventCheck, suite: boolean = true): void {\n this.tests.set(name, check);\n suite && this.suite.push(name);\n }\n\n /**\n * Run individual test\n */\n public run(name: string, el: Link, event: Event, href: string): boolean {\n return this.tests.get(name)({\n el,\n event,\n href,\n });\n }\n\n /**\n * Run test suite\n */\n public checkLink(el: Link, event: Event, href: string): boolean {\n return this.suite.some(name => this.run(name, el, event, href));\n }\n}\n","// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\nexport class BarbaError extends Error {\n /* istanbul ignore next */\n constructor(\n public error: Error,\n public label = 'Barba error',\n ...params: any[]\n ) {\n // Pass remaining arguments (including vendor specific ones) to parent constructor\n super(...params);\n\n // Maintains proper stack trace for where our error was thrown (only available on V8)\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, BarbaError);\n }\n\n this.name = 'BarbaError';\n }\n}\n","/**\n * @barba/core/modules/store\n *

\n * ## Transitions store.\n *\n * - Resolve transition\n * - Manage rules\n *\n * @module core/modules/store\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n IRule,\n IRules,\n ITransitionData,\n ITransitionFilters,\n ITransitionOnce,\n ITransitionPage,\n RuleName,\n} from '../defs';\n\n// Modules\nimport { Logger } from './Logger';\n\nexport class Store {\n public logger: Logger = new Logger('@barba/core');\n /**\n * All registered transitions.\n */\n public all: ITransitionPage[] = [];\n /**\n * \"Page only\" registered transitions.\n */\n public page: ITransitionPage[] = [];\n /**\n * \"Once only\" registered transitions.\n */\n public once: ITransitionOnce[] = [];\n /**\n * Rules for transition resolution.\n *\n * Defaults:\n *\n * - namespace\n * - custom\n */\n private _rules: IRule[] = [\n {\n name: 'namespace',\n type: 'strings',\n },\n {\n name: 'custom',\n type: 'function',\n },\n ];\n\n /**\n * Init store.\n */\n constructor(transitions: ITransitionPage[] = []) {\n /* istanbul ignore else */\n if (transitions) {\n // TODO: add check for valid transitions? criteria? (once || enter && leave)\n this.all = this.all.concat(transitions);\n }\n this.update();\n }\n\n /**\n * Add rule or transition.\n */\n public add(type: 'rule' | 'transition', data: any): void {\n switch (type) {\n case 'rule':\n // TODO: check for valid rule\n this._rules.splice(data.position || 0, 0, data.value);\n break;\n case 'transition':\n default:\n // TODO: check for valid transition\n this.all.push(data);\n break;\n }\n\n this.update();\n }\n\n /**\n * Resolve transition.\n */\n public resolve(\n data: ITransitionData,\n filters: ITransitionFilters = {}\n ): ITransitionOnce | ITransitionPage {\n // Filter on \"once\"\n let transitions = filters.once ? this.once : this.page;\n\n // Filter on \"self\"\n if (filters.self) {\n transitions = transitions.filter(t => t.name && t.name === 'self');\n } else {\n transitions = transitions.filter(t => !t.name || t.name !== 'self');\n }\n\n // All matching transition infos\n const matching = new Map();\n\n // Active = first of valid transitions\n // sorted by directions (from/to, from || to, …)\n const active = transitions.find(t => {\n let valid = true;\n const match = {};\n\n if (filters.self && t.name === 'self') {\n return true;\n }\n\n // Check rules\n this._rules.reverse().forEach(rule => {\n if (valid) {\n valid = this._check(t, rule, data, match);\n // From/to check\n if (t.from && t.to) {\n valid =\n this._check(t, rule, data, match, 'from') &&\n this._check(t, rule, data, match, 'to');\n }\n if (t.from && !t.to) {\n valid = this._check(t, rule, data, match, 'from');\n }\n if (!t.from && t.to) {\n valid = this._check(t, rule, data, match, 'to');\n }\n }\n });\n\n matching.set(t, match);\n\n return valid;\n });\n\n const activeMatch = matching.get(active);\n const transitionType = [];\n if (filters.once) {\n transitionType.push('once');\n } else {\n transitionType.push('page');\n }\n if (filters.self) {\n transitionType.push('self');\n }\n\n if (activeMatch) {\n // Log resolved transition\n const infos: any[] = [active];\n // Log if matching criteria\n Object.keys(activeMatch).length > 0 && infos.push(activeMatch);\n\n this.logger.info(\n `Transition found [${transitionType.join(',')}]`,\n ...infos\n );\n } else {\n this.logger.info(`No transition found [${transitionType.join(',')}]`);\n }\n\n return active;\n }\n\n /**\n * ### Update store.\n *\n * - Reorder transition by priorities\n * - Get wait indicator\n * - Get once transitions\n */\n public update(): void {\n // Reorder by priorities\n this.all = this.all\n .map(t => this._addPriority(t))\n .sort((a, b) => a.priority - b.priority)\n .reverse()\n .map(t => {\n delete t.priority;\n\n return t;\n });\n this.page = this.all.filter(\n t => t.leave !== undefined || t.enter !== undefined\n ) as ITransitionPage[];\n this.once = this.all.filter(t => t.once !== undefined) as ITransitionOnce[];\n }\n\n /**\n * ### Check if transition apply.\n *\n * Based on rule, page data and optional direction:\n *\n * 1. transition has no rule \"property\":\n * - always returns true\n * 2. transition has rule \"property\":\n * - \"strings\" should be present on both side (transition + page) and match\n * - \"function\" should return true\n */\n private _check(\n transition: ITransitionPage,\n rule: IRule,\n data: ITransitionData,\n match: any,\n direction?: 'from' | 'to'\n ): boolean {\n let isValid = true;\n let hasMatch = false;\n const t = transition;\n const { name, type } = rule;\n const strRule = name as IRules['strings'];\n const objRule = name as IRules['object'];\n const fnName = name as IRules['function'];\n const base = direction ? t[direction] : t; // = t || t.from || t.to\n const page = direction === 'to' ? data.next : data.current; // = current || next\n const exist = direction ? base && base[name] : base[name];\n\n // If transition rule exists\n if (exist) {\n switch (type) {\n case 'strings':\n default: {\n // Array support\n const names: string[] = Array.isArray(base[strRule])\n ? (base[strRule] as string[])\n : [base[strRule] as string];\n\n // For matching, prop should be present on both sides and match\n if (page[strRule] && names.indexOf(page[strRule]) !== -1) {\n hasMatch = true;\n }\n // If transition prop is different from current, not valid\n if (names.indexOf(page[strRule]) === -1) {\n isValid = false;\n }\n break;\n }\n\n case 'object': {\n // Array support\n const names: string[] = Array.isArray(base[objRule])\n ? (base[objRule] as string[])\n : [base[objRule] as string];\n\n // For matching, prop should be present on both sides and match\n if (page[objRule]) {\n if (\n page[objRule].name &&\n names.indexOf(page[objRule].name) !== -1\n ) {\n hasMatch = true;\n }\n // If transition prop is different from current, not valid\n if (names.indexOf(page[objRule].name) === -1) {\n isValid = false;\n }\n } else {\n isValid = false;\n }\n break;\n }\n\n case 'function':\n if (base[fnName](data)) {\n hasMatch = true;\n } else {\n isValid = false;\n }\n break;\n }\n\n if (hasMatch) {\n if (direction) {\n match[direction] = match[direction] || {};\n match[direction][name] = t[direction][name];\n } else {\n match[name] = t[name];\n }\n }\n }\n\n return isValid;\n }\n\n /**\n * ### Calculate transition priority.\n *\n * Based on:\n *\n * - rule \"position\" (index) give tens, hundreds, thousands, …\n * - from/to properties give units (0, 1 or 2)\n */\n private _calculatePriority(\n t: ITransitionPage,\n ruleName: RuleName,\n ruleIndex: number\n ): number {\n let priority = 0;\n\n if (\n t[ruleName] ||\n (t.from && t.from[ruleName]) ||\n (t.to && t.to[ruleName])\n ) {\n priority += Math.pow(10, ruleIndex);\n\n if (t.from && t.from[ruleName]) {\n priority += 1;\n }\n if (t.to && t.to[ruleName]) {\n priority += 2;\n }\n }\n\n return priority;\n }\n\n private _addPriority(t: ITransitionPage): ITransitionPage {\n t.priority = 0;\n let priority = 0;\n\n this._rules.forEach((rule, i) => {\n const { name } = rule;\n const index = i + 1;\n\n priority += this._calculatePriority(t, name, index);\n });\n\n t.priority = priority;\n\n return t;\n }\n}\n","/**\n * @barba/core/modules/transitions\n *

\n * ## Transitions manager.\n *\n * - Handle hooks and transition lifecycle\n *\n * @module core/modules/transitions\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n HooksTransition,\n HooksTransitionMap,\n ITransitionData,\n ITransitionFilters,\n ITransitionOnce,\n ITransitionPage,\n Wrapper,\n} from '../defs';\n// Hooks\nimport { hooks } from '../hooks';\n// Utils\nimport { dom, helpers, runAsync } from '../utils';\n// Modules\nimport { BarbaError } from './Error';\nimport { Logger } from './Logger';\nimport { Store } from './Store';\n\nexport class Transitions {\n public logger: Logger = new Logger('@barba/core');\n public store: Store;\n private _running: boolean = false;\n\n constructor(transitions: ITransitionPage[] = []) {\n this.store = new Store(transitions);\n }\n\n /**\n * Get resolved transition\n *\n * - based on data\n */\n public get(\n data: ITransitionData,\n filters?: ITransitionFilters\n ): ITransitionOnce | ITransitionPage {\n return this.store.resolve(data, filters);\n }\n\n /**\n * Animation running status.\n */\n get isRunning(): boolean {\n return this._running;\n }\n set isRunning(status: boolean) {\n this._running = status;\n }\n\n /**\n * Check for registered once transition(s).\n */\n get hasOnce(): boolean {\n return this.store.once.length > 0;\n }\n\n /**\n * Check for registered self transition.\n */\n get hasSelf(): boolean {\n return this.store.all.some(t => t.name === 'self');\n }\n\n /**\n * ### Wait indicator.\n *\n * Tells Barba to get next page data
\n * before starting the resolution
\n * because some registered transitions need
\n * next page data to be resolved (eg: `sync: true`, `to: { namespace }`, …)\n */\n get shouldWait(): boolean {\n return this.store.all.some(t => (t.to && !t.to.route) || t.sync);\n }\n\n /**\n * ### Do \"once\" transition.\n *\n * Hooks: see [[HooksOnce]].\n */\n public async doOnce({\n data,\n transition,\n }: {\n data: ITransitionData;\n transition: ITransitionOnce;\n }) {\n const t = transition || {};\n this._running = true;\n\n try {\n await this._doAsyncHook('beforeOnce', data, t);\n await this.once(data, t);\n await this._doAsyncHook('afterOnce', data, t);\n } catch (error) {\n this._running = false;\n\n this.logger.debug('Transition error [before/after/once]');\n this.logger.error(error);\n }\n\n this._running = false;\n }\n\n /**\n * ### Do \"page\" transition.\n *\n * Hooks: see [[HooksPage]].\n *\n * `sync: false` (default) order:\n *\n * 1. before\n * 2. beforeLeave\n * 3. leave\n * 4. afterLeave\n * 5. beforeEnter\n * 6. enter\n * 7. afterEnter\n * 8. after\n *\n * `sync: true` order:\n *\n * 1. before\n * 2. beforeLeave\n * 3. beforeEnter\n * 4. leave & enter\n * 5. afterLeave\n * 6. afterEnter\n * 7. after\n */\n public async doPage({\n data,\n transition,\n page,\n wrapper,\n }: {\n data: ITransitionData;\n transition: ITransitionPage;\n page: Promise;\n wrapper: Wrapper;\n }) {\n const t = transition || {};\n const sync = t.sync === true || false;\n\n this._running = true;\n\n try {\n // Check sync mode, wait for next content\n if (sync) {\n await helpers.update(page, data);\n }\n\n await this._doAsyncHook('before', data, t);\n\n if (sync) {\n try {\n await this.add(data, wrapper);\n // Before actions\n await this._doAsyncHook('beforeLeave', data, t);\n await this._doAsyncHook('beforeEnter', data, t);\n\n // Actions\n await Promise.all([this.leave(data, t), this.enter(data, t)]);\n\n // After actions\n await this._doAsyncHook('afterLeave', data, t);\n await this._doAsyncHook('afterEnter', data, t);\n } catch (error) {\n // this.logger.debug('Transition error [sync]');\n // this.logger.error(error);\n if (this._isTransitionError(error)) {\n throw new BarbaError(error, 'Transition error [sync]');\n }\n }\n } else {\n let leaveResult: any = false;\n\n try {\n // Leave\n await this._doAsyncHook('beforeLeave', data, t);\n\n leaveResult = await Promise.all([\n this.leave(data, t),\n helpers.update(page, data),\n ]).then(values => values[0]);\n\n await this._doAsyncHook('afterLeave', data, t);\n\n // TODO: check here \"valid\" page result\n // before going further\n } catch (error) {\n // this.logger.debug('Transition error [before/after/leave]');\n // this.logger.error(error);\n if (this._isTransitionError(error)) {\n throw new BarbaError(\n error,\n 'Transition error [before/after/leave]'\n );\n }\n }\n\n try {\n // Enter\n /* istanbul ignore else */\n if (leaveResult !== false) {\n await this.add(data, wrapper);\n\n await this._doAsyncHook('beforeEnter', data, t);\n await this.enter(data, t, leaveResult);\n await this._doAsyncHook('afterEnter', data, t);\n }\n } catch (error) {\n // this.logger.debug('Transition error [before/after/enter]');\n // this.logger.error(error);\n if (this._isTransitionError(error)) {\n throw new BarbaError(\n error,\n 'Transition error [before/after/enter]'\n );\n }\n }\n }\n\n // Remove current contaienr\n await this.remove(data);\n\n await this._doAsyncHook('after', data, t);\n } catch (error) {\n this._running = false;\n\n // If \"custom/specific\" barba error.\n /* istanbul ignore else */\n if (error.name && error.name === 'BarbaError') {\n this.logger.debug(error.label);\n this.logger.error(error.error);\n\n throw error;\n }\n\n this.logger.debug('Transition error [page]');\n this.logger.error(error);\n\n throw error;\n }\n\n this._running = false;\n }\n\n /**\n * Once hook + async \"once\" transition.\n */\n public async once(data: ITransitionData, t: ITransitionOnce): Promise {\n await hooks.do('once', data, t);\n\n return t.once ? runAsync(t.once, t)(data) : Promise.resolve();\n }\n\n /**\n * Leave hook + async \"leave\" transition.\n */\n public async leave(data: ITransitionData, t: ITransitionPage): Promise {\n await hooks.do('leave', data, t);\n\n return t.leave ? runAsync(t.leave, t)(data) : Promise.resolve();\n }\n\n /**\n * Enter hook + async \"enter\" transition.\n */\n public async enter(\n data: ITransitionData,\n t: ITransitionPage,\n leaveResult?: any\n ): Promise {\n await hooks.do('enter', data, t);\n\n return t.enter\n ? runAsync(t.enter, t)(data, leaveResult)\n : Promise.resolve();\n }\n\n /**\n * Add next container.\n */\n public async add(data: ITransitionData, wrapper: Wrapper): Promise {\n dom.addContainer(data.next.container, wrapper);\n hooks.do('nextAdded', data);\n }\n\n /**\n * Remove current container.\n */\n public async remove(data: ITransitionData): Promise {\n dom.removeContainer(data.current.container);\n hooks.do('currentRemoved', data);\n }\n\n private _isTransitionError(error: any) {\n if (error.message) {\n // Errors from request\n return !/Timeout error|Fetch error/.test(error.message);\n }\n\n if (error.status) {\n // Errors from request\n return false;\n }\n\n return true;\n }\n\n /**\n * Do hooks + async transition methods.\n */\n private async _doAsyncHook(\n hook: HooksTransition,\n data: ITransitionData,\n t: HooksTransitionMap\n ): Promise {\n await hooks.do(hook, data, t);\n\n return t[hook] ? runAsync(t[hook], t)(data) : Promise.resolve();\n }\n}\n","/**\n * @barba/core/modules/views\n *

\n * ## Views manager.\n *\n * @module core/modules/views\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport { HooksView, IView, IViewData } from '../defs';\n// Hooks\nimport { hooks } from '../hooks';\n// Utils\nimport { runAsync } from '../utils';\n// Types\ntype Hook = (data: IViewData) => Promise;\n\nexport class Views {\n /**\n * Available hook names for views.\n */\n public names: HooksView[] = [\n 'beforeLeave',\n 'afterLeave',\n 'beforeEnter',\n 'afterEnter',\n ];\n /**\n * Registered views by namespace.\n */\n public byNamespace: Map = new Map();\n\n /**\n * Init views.\n */\n constructor(views: IView[]) {\n if (views.length === 0) {\n return;\n }\n\n // TODO: add check\n // for valid views? criteria? (namespace property, string ?)\n // or duplicate\n views.forEach(view => {\n this.byNamespace.set(view.namespace, view);\n });\n\n this.names.forEach(name => {\n hooks[name](this._createHook(name));\n });\n }\n\n /**\n * Create the hook method.\n *\n * - get view based on namespace\n * - execute callback with transition data\n */\n private _createHook(name: HooksView): Hook {\n return data => {\n const { namespace } = name.match(/enter/i) ? data.next : data.current;\n const view = this.byNamespace.get(namespace);\n\n // TODO: manage self…\n // if (view && data.trigger !== 'self') {\n if (view && view[name]) {\n return runAsync(view[name], view)(data);\n }\n\n return Promise.resolve();\n };\n }\n}\n","// Element.prototype.matches polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches#Polyfill\nif (!Element.prototype.matches) {\n Element.prototype.matches =\n (Element as any).prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n}\n\n// Element.prototype.closest polyfill\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\nif (!Element.prototype.closest) {\n Element.prototype.closest = function closest(s: string) {\n let el = this;\n\n do {\n if (el.matches(s)) {\n return el;\n }\n\n el = (el.parentElement || el.parentNode) as Element;\n } while (el !== null && el.nodeType === 1);\n\n return null;\n };\n}\n","/**\n * @module core/schemas\n */\n\n// Definitions\nimport { ISchemaPage } from '../defs';\n\n/**\n * See [[ISchemaPage]]\n */\nexport const schemaPage: ISchemaPage = {\n container: null,\n html: '',\n namespace: '',\n url: {\n hash: '',\n href: '',\n path: '',\n port: null,\n query: {},\n },\n};\n","/**\n * @barba/core\n *

\n * ## Barba core object\n *\n * Main methods:\n *\n * - `.init()` for initialization with options\n * - `.use()` for plugins\n *\n * @module core\n */\n\n/***/\n\nimport { version } from '../package.json';\n// Definitions\nimport {\n IBarbaOptions,\n IBarbaPlugin,\n IgnoreOption,\n ISchemaPage,\n ITransitionData,\n ITransitionOnce,\n ITransitionPage,\n Link,\n LinkEvent,\n RequestCustomError,\n RequestErrorOrResponse,\n SchemaAttributeValues,\n Trigger,\n Wrapper,\n} from './defs';\n// Hooks\nimport { hooks } from './hooks';\n// Modules\nimport { Cache } from './modules/Cache';\nimport { Logger } from './modules/Logger';\nimport { Prevent } from './modules/Prevent';\nimport { Transitions } from './modules/Transitions';\nimport { Views } from './modules/Views';\n// Polyfills\nimport './polyfills';\n// Schemas\nimport { schemaAttribute } from './schemas/attribute';\nimport { schemaPage } from './schemas/page';\n// Utils\nimport { dom, helpers, history, request, url } from './utils';\n\nexport class Core {\n /**\n * Version.\n */\n public version: string = version;\n /**\n * Schemas.\n */\n public schemaPage: ISchemaPage = schemaPage;\n /**\n * Logger class, allows plugins to create Logger.\n */\n public Logger: typeof Logger = Logger;\n /**\n * Barba logger.\n */\n public logger: Logger = new Logger('@barba/core');\n /**\n * Plugins.\n */\n public plugins: Array> = [];\n /**\n * Options\n */\n public timeout: number;\n public cacheIgnore: IgnoreOption;\n public prefetchIgnore: IgnoreOption;\n public preventRunning: boolean;\n /**\n * Hooks\n */\n public hooks = hooks;\n /**\n * Modules.\n */\n // public history: History;\n public cache: Cache;\n public prevent: Prevent;\n public transitions: Transitions;\n public views: Views;\n /**\n * Utils.\n */\n public dom = dom;\n public helpers = helpers;\n public history = history;\n public request = request;\n public url = url;\n\n private _data: ITransitionData;\n private _requestCustomError: RequestCustomError;\n private _wrapper: Wrapper;\n\n /**\n * ### Init plugin with options.\n *\n * See [[IBarbaPlugin]] for more details.\n */\n public use(plugin: IBarbaPlugin, options?: T): void {\n const installedPlugins = this.plugins;\n\n // Plugin installation\n if (installedPlugins.indexOf(plugin) > -1) {\n this.logger.warn(`Plugin [${plugin.name}] already installed.`);\n\n return;\n }\n\n if (typeof plugin.install !== 'function') {\n this.logger.warn(`Plugin [${plugin.name}] has no \"install\" method.`);\n\n return;\n }\n\n plugin.install(this, options);\n installedPlugins.push(plugin);\n }\n\n /**\n * ### Init barba with options.\n *\n * See [[IBarbaOptions]] for more details.\n *\n * Default values are:\n *\n * - transitions: `[]`\n * - views: `[]`\n * - schema: [[SchemaAttribute]]\n * - timeout: `2e3`\n * - cacheIgnore: `false`\n * - prefetchIgnore: `false`\n * - preventRunning: `false`\n * - prevent: `null`,\n * - debug: `false`\n * - logLevel: `'debug'`\n */\n public init(\n /** @ignore */ {\n transitions = [],\n views = [],\n schema = schemaAttribute,\n requestError,\n timeout = 2e3,\n cacheIgnore = false,\n prefetchIgnore = false,\n /* istanbul ignore next */\n preventRunning = false,\n prevent: preventCustom = null,\n debug = false,\n logLevel = 'off',\n }: IBarbaOptions = {}\n ) {\n // 0. Set logger level and print version\n Logger.setLevel(debug === true ? 'debug' : logLevel);\n this.logger.info(this.version);\n\n // 1. Manage options\n Object.keys(schema).forEach(k => {\n const attr = k as SchemaAttributeValues;\n\n /* istanbul ignore else */\n if (schemaAttribute[attr]) {\n schemaAttribute[attr] = schema[attr];\n }\n });\n this._requestCustomError = requestError;\n this.timeout = timeout;\n this.cacheIgnore = cacheIgnore;\n this.prefetchIgnore = prefetchIgnore;\n this.preventRunning = preventRunning;\n\n // 2. Get and check wrapper\n this._wrapper = this.dom.getWrapper();\n if (!this._wrapper) {\n throw new Error('[@barba/core] No Barba wrapper found');\n }\n this._wrapper.setAttribute('aria-live', 'polite'); // A11y\n\n // 3. Init pages (get \"current\" data)\n this._resetData();\n\n const { current } = this.data;\n\n if (!current.container) {\n throw new Error('[@barba/core] No Barba container found');\n }\n\n // 4. Init other modules\n this.cache = new Cache(cacheIgnore);\n this.prevent = new Prevent(prefetchIgnore);\n this.transitions = new Transitions(transitions);\n this.views = new Views(views);\n\n // Add prevent custom\n if (preventCustom !== null) {\n if (typeof preventCustom !== 'function') {\n throw new Error('[@barba/core] Prevent should be a function');\n }\n\n this.prevent.add('preventCustom', preventCustom);\n }\n\n // 5. Use \"current\" data\n // Init history\n this.history.init(current.url.href, current.namespace);\n // Add to cache\n // TODO: do not cache renderer HTML, only request results…\n // this.cache.set(current.url.href, Promise.resolve(current.html), 'init');\n\n // 6. Bind context\n this._onLinkEnter = this._onLinkEnter.bind(this);\n this._onLinkClick = this._onLinkClick.bind(this);\n this._onStateChange = this._onStateChange.bind(this);\n this._bind();\n\n // 7. Init plugins\n this.plugins.forEach(plugin => plugin.init());\n\n // 8. Barba ready\n // Set next + trigger for once and `beforeEnter`/`afterEnter` view on page load.\n const onceData = this.data;\n\n onceData.trigger = 'barba';\n onceData.next = onceData.current;\n onceData.current = { ...this.schemaPage };\n this.hooks.do('ready', onceData);\n\n // 9. Finally, do once…\n this.once(onceData);\n\n // Clean data for first barba transition…\n this._resetData();\n }\n\n public destroy(): void {\n this._resetData();\n this._unbind();\n this.history.clear();\n this.hooks.clear();\n this.plugins = [];\n }\n\n get data(): ITransitionData {\n return this._data;\n }\n\n get wrapper(): HTMLElement {\n return this._wrapper;\n }\n\n /**\n * ### Force a page change without Barba transition.\n */\n public force(href: string): void {\n // DEV\n // Can be used waiting animation cancellation management…\n window.location.assign(href);\n }\n\n /**\n * ### Go for a Barba transition.\n *\n * Manage \"self page\" href:\n *\n * - if same url and no self transition, keep default behavior\n * - link: reload the page\n * - anchor: scroll to\n * - if same url with self transition, use it\n * - then start a page transition.\n */\n public go(\n href: string,\n trigger: Trigger = 'barba',\n e?: LinkEvent | PopStateEvent\n ): Promise {\n // If animation running, force reload\n if (this.transitions.isRunning) {\n this.force(href);\n\n return;\n }\n\n let self = false;\n\n // Check prevent sameURL against current history\n // + state check\n // + update trigger with direction\n if (trigger === 'popstate') {\n self =\n this.history.current &&\n this.url.getPath(this.history.current.url) === this.url.getPath(href);\n } else {\n self = this.prevent.run('sameUrl', null, null, href);\n }\n\n if (self && !this.transitions.hasSelf) {\n return;\n }\n\n trigger = this.history.change(href, trigger, e);\n\n if (e) {\n e.stopPropagation();\n e.preventDefault();\n }\n\n return this.page(href, trigger, self);\n }\n\n /**\n * ### Start an \"once\" transition.\n *\n * If some registered \"once\" transition,\n * get the \"resolved\" transition from the store and start it.\n */\n public async once(readyData: ITransitionData): Promise {\n await this.hooks.do('beforeEnter', readyData);\n\n // Check if once transition\n if (this.transitions.hasOnce) {\n const transition = this.transitions.get(readyData, {\n once: true,\n }) as ITransitionOnce;\n\n await this.transitions.doOnce({ transition, data: readyData });\n }\n\n await this.hooks.do('afterEnter', readyData);\n }\n\n /**\n * ### Start a \"page\" transition.\n *\n * 1. If no running transition, updates data with full URL properties and trigger.\n * 2. Get page from cache or init request.\n * 3. Wait if some transitions need \"next\" data (`sync: true`, `to: …`).\n * 4. Manage the history, depending on trigger.\n * 5. Get \"data\" and trigger \"go\" hook.\n * 6. Get the \"resolved\" transition from the store and start it.\n * 7. Update title and reset data (current, next = undefined).\n *\n * > If \"self\", use the \"self\" transition\n */\n public async page(\n href: string,\n trigger: Trigger,\n self: boolean\n ): Promise {\n this.data.next.url = {\n href,\n ...this.url.parse(href),\n };\n this.data.trigger = trigger;\n\n const page = this.cache.has(href)\n ? this.cache.update(href, { action: 'click' }).request\n : this.cache.set(\n href,\n this.request(\n href,\n this.timeout,\n this.onRequestError.bind(this, trigger)\n ),\n 'click'\n ).request;\n\n // Need to wait before getting the right transition\n if (this.transitions.shouldWait) {\n await helpers.update(page, this.data);\n }\n\n const data = this.data;\n\n // Hook: between trigger and transition\n // Can be used to resolve \"route\"…\n await this.hooks.do('page', data);\n\n try {\n const transition = this.transitions.get(data, {\n once: false,\n self,\n }) as ITransitionPage;\n\n await this.transitions.doPage({\n data,\n page,\n transition,\n wrapper: this._wrapper,\n });\n\n this._resetData();\n } catch (error) {\n // Something went wrong (rejected promise, error, 404, 505, other…)\n // TODO: manage / use cases for cancellation\n // this.logger.debug('Transition cancelled');\n\n // If transition error and no debug mode, force reload page.\n /* istanbul ignore else */\n if (Logger.getLevel() === 0) {\n this.force(data.current.url.href);\n }\n }\n }\n\n /**\n * When a request error occurs.\n *\n * Allow the user to manage request error. (E.g: 404)\n */\n public onRequestError(trigger: Trigger, ...args: any): boolean {\n // Cancel transition status\n this.transitions.isRunning = false;\n\n const [href, response]: [string, RequestErrorOrResponse] = args;\n const action = this.cache.getAction(href);\n this.cache.delete(href);\n\n // Custom requestError returning false will return here.\n if (\n this._requestCustomError &&\n this._requestCustomError(trigger, action, href, response) === false\n ) {\n return false;\n }\n\n // Force page change\n if (action === 'click') {\n this.force(href);\n }\n return false;\n }\n\n /**\n * Programmatically prefetch\n */\n public prefetch(href: string) {\n // Already in cache\n /* istanbul ignore next */\n if (this.cache.has(href)) {\n return;\n }\n\n this.cache.set(\n href,\n this.request(\n href,\n this.timeout,\n this.onRequestError.bind(this, 'barba')\n ).catch((error: RequestErrorOrResponse) => {\n this.logger.error(error);\n }),\n 'prefetch'\n );\n }\n\n /**\n * Bind event listeners.\n */\n private _bind(): void {\n /* istanbul ignore else */\n if (this.prefetchIgnore !== true) {\n document.addEventListener('mouseover', this._onLinkEnter);\n document.addEventListener('touchstart', this._onLinkEnter);\n }\n document.addEventListener('click', this._onLinkClick);\n window.addEventListener('popstate', this._onStateChange);\n }\n\n /**\n * Bind event listeners.\n */\n private _unbind(): void {\n /* istanbul ignore else */\n if (this.prefetchIgnore !== true) {\n document.removeEventListener('mouseover', this._onLinkEnter);\n document.removeEventListener('touchstart', this._onLinkEnter);\n }\n document.removeEventListener('click', this._onLinkClick);\n window.removeEventListener('popstate', this._onStateChange);\n }\n\n /**\n * When a element is entered.\n *\n * Get valid link element.\n * Cache URL if needed.\n */\n private _onLinkEnter(e: LinkEvent): void {\n const link = this._getLinkElement(e);\n\n if (!link) {\n return;\n }\n\n const href = this.dom.getHref(link);\n\n if (this.prevent.checkHref(href)) {\n return;\n }\n\n // Already in cache\n if (this.cache.has(href)) {\n return;\n }\n\n this.cache.set(\n href,\n this.request(\n href,\n this.timeout,\n this.onRequestError.bind(this, link)\n ).catch((error: RequestErrorOrResponse) => {\n this.logger.error(error);\n }),\n 'enter'\n );\n }\n\n /**\n * When an element is clicked.\n *\n * Get valid link element.\n * Prevent same URL.\n * Go for a Barba transition.\n */\n private _onLinkClick(e: LinkEvent): void {\n // This use `prevent.checkLink` under the hood to get eligible link.\n const link = this._getLinkElement(e);\n\n if (!link) {\n return;\n }\n\n if (this.transitions.isRunning && this.preventRunning) {\n e.preventDefault();\n e.stopPropagation();\n\n return;\n }\n\n this.go(this.dom.getHref(link), link, e);\n }\n\n /**\n * When History state changes.\n *\n * Get \"href\" from URL\n * Go for a Barba transition.\n */\n private _onStateChange(e: PopStateEvent): void {\n this.go(this.url.getHref(), 'popstate', e);\n }\n\n /**\n * Get a valid link ancestor.\n *\n * Check for a \"href\" attribute.\n * Then check if eligible for Barba.\n */\n private _getLinkElement(e: LinkEvent): Link {\n let el = e.target as Link;\n\n while (el && !this.dom.getHref(el)) {\n el = (el as HTMLElement).parentNode as Link;\n }\n\n // Check prevent\n if (!el || this.prevent.checkLink(el, e, this.dom.getHref(el))) {\n return;\n }\n\n return el;\n }\n\n /**\n * Reset pages data.\n *\n * Set \"current\" and unset \"next\".\n */\n private _resetData() {\n const href = this.url.getHref();\n const current = {\n container: this.dom.getContainer(),\n html: this.dom.getHtml(),\n namespace: this.dom.getNamespace(),\n url: {\n href,\n ...this.url.parse(href),\n },\n };\n\n this._data = {\n current,\n next: { ...this.schemaPage },\n trigger: undefined,\n };\n\n this.hooks.do('reset', this.data);\n }\n}\n\nconst core = new Core();\n\nexport default core;\n","/**\n * @barba/css\n *

\n * ## Barba CSS.\n *\n * - Add CSS classes\n * - Manage CSS transitions\n *\n * @module css\n * @preferred\n */\n\n/***/\n\n// Definitions\nimport {\n IBarbaPlugin,\n ITransitionData,\n ITransitionPage,\n} from '@barba/core/src/defs';\n\nimport { Core } from '@barba/core/src/core';\nimport { Logger } from '@barba/core/src/modules/Logger';\n\nimport { ICssCallbacks } from './defs';\n\nimport { version } from '../package.json';\n\nexport class Css implements IBarbaPlugin<{}> {\n public name = '@barba/css';\n public version = version;\n public barba: Core;\n public logger: Logger;\n\n public prefix: string = 'barba';\n public callbacks: ICssCallbacks = {};\n public cb: any;\n\n // Check if transition property applied\n private _hasTransition: boolean = false;\n\n /**\n * Plugin installation.\n */\n public install(barba: Core) {\n this.logger = new barba.Logger(this.name);\n this.logger.info(this.version);\n this.barba = barba;\n this._once = this._once.bind(this);\n this._leave = this._leave.bind(this);\n this._enter = this._enter.bind(this);\n }\n\n /**\n * Plugin installation.\n */\n public init() {\n // Register hooks to get prefix\n this.barba.hooks.before(this._getPrefix, this);\n this.barba.hooks.beforeOnce(this._getPrefix, this);\n\n // Register hook for CSS classes\n this.barba.hooks.beforeOnce(this._beforeOnce, this);\n this.barba.hooks.afterOnce(this._afterOnce, this);\n this.barba.hooks.beforeLeave(this._beforeLeave, this);\n this.barba.hooks.afterLeave(this._afterLeave, this);\n this.barba.hooks.beforeEnter(this._beforeEnter, this);\n this.barba.hooks.afterEnter(this._afterEnter, this);\n\n // Override main transitions\n this.barba.transitions.once = this._once;\n this.barba.transitions.leave = this._leave;\n this.barba.transitions.enter = this._enter;\n\n // Add empty default transition (force prepend)\n /* istanbul ignore next */\n this.barba.transitions.store.all.unshift({\n name: 'barba',\n once() {}, // tslint:disable-line:no-empty\n leave() {}, // tslint:disable-line:no-empty\n enter() {}, // tslint:disable-line:no-empty\n });\n this.barba.transitions.store.update();\n }\n\n /**\n * Initial state.\n */\n public async start(container: HTMLElement, kind: string): Promise {\n // Set initial CSS values\n this.add(container, kind); // CSS: add kind\n await this.barba.helpers.nextTick();\n // Apply CSS transition\n this.add(container, `${kind}-active`); // CSS: add kind-active\n await this.barba.helpers.nextTick();\n }\n\n /**\n * Next frame state.\n */\n public async next(container: HTMLElement, kind: string): Promise {\n this._hasTransition = this._checkTransition(container);\n\n if (this._hasTransition) {\n // We need to listen the end of the animation\n return new Promise(async resolve => {\n this.cb = resolve;\n this.callbacks[kind] = resolve;\n\n container.addEventListener('transitionend', resolve, false);\n await this.barba.helpers.nextTick();\n this.remove(container, kind); // CSS: remove kind\n // await this.barba.helpers.nextTick();\n this.add(container, `${kind}-to`); // CSS: add kind-to\n await this.barba.helpers.nextTick();\n });\n } else {\n this.remove(container, kind); // CSS: remove kind\n await this.barba.helpers.nextTick();\n this.add(container, `${kind}-to`); // CSS: add kind-to\n await this.barba.helpers.nextTick();\n }\n }\n\n /**\n * Final state.\n */\n public async end(container: HTMLElement, kind: string): Promise {\n this.remove(container, `${kind}-to`); // CSS: remove kind-to\n this.remove(container, `${kind}-active`); // CSS: remove kind-active\n container.removeEventListener('transitionend', this.callbacks[kind]);\n this._hasTransition = false;\n }\n\n /**\n * Add CSS classes.\n */\n public add(el: HTMLElement, step: string): void {\n el.classList.add(`${this.prefix}-${step}`);\n }\n\n /**\n * Remove CSS classes.\n */\n public remove(el: HTMLElement, step: string): void {\n el.classList.remove(`${this.prefix}-${step}`);\n }\n\n /**\n * Get CSS prefix from transition `name` property.\n */\n private _getPrefix(data: ITransitionData, t: ITransitionPage): void {\n this.prefix = t.name || 'barba';\n }\n\n /**\n * Check if CSS transition is applied\n */\n private _checkTransition(container: HTMLElement) {\n // DEV: check for CSS animation property?\n return getComputedStyle(container).transitionDuration !== '0s';\n }\n\n /**\n * `beforeOnce` hook.\n */\n private _beforeOnce(data: ITransitionData): Promise {\n return this.start(data.next.container, 'once');\n }\n\n /**\n * `once` hook.\n */\n private async _once(data: ITransitionData, t: ITransitionPage): Promise {\n await this.barba.hooks.do('once', data, t);\n\n return this.next(data.next.container, 'once');\n }\n\n /**\n * `afterOnce` hook.\n */\n private _afterOnce(data: ITransitionData): Promise {\n return this.end(data.next.container, 'once');\n }\n\n /**\n * `beforeLeave` hook.\n */\n private _beforeLeave(data: ITransitionData): Promise {\n return this.start(data.current.container, 'leave');\n }\n\n /**\n * `leave` hook.\n */\n private async _leave(\n data: ITransitionData,\n t: ITransitionPage\n ): Promise {\n await this.barba.hooks.do('leave', data, t);\n\n return this.next(data.current.container, 'leave');\n }\n\n /**\n * `afterLeave` hook.\n */\n private _afterLeave(data: ITransitionData): Promise {\n this.end(data.current.container, 'leave');\n // For CSS transitions, we need to remove current container\n // directly after the leave transition\n this.barba.transitions.remove(data);\n\n return Promise.resolve();\n }\n\n /**\n * `beforeEnter` hook.\n */\n private _beforeEnter(data: ITransitionData): Promise {\n // Avoid on first load\n if (this.barba.history.size === 1) {\n return Promise.resolve();\n }\n return this.start(data.next.container, 'enter');\n }\n\n /**\n * `enter` hook.\n */\n private async _enter(\n data: ITransitionData,\n t: ITransitionPage\n ): Promise {\n await this.barba.hooks.do('enter', data, t);\n\n return this.next(data.next.container, 'enter');\n }\n\n /**\n * `afterEnter` hook.\n */\n private _afterEnter(data: ITransitionData): Promise {\n // Avoid on first load\n if (this.barba.history.size === 1) {\n return Promise.resolve();\n }\n return this.end(data.next.container, 'enter');\n }\n}\n\nconst css = new Css();\n\nexport default css;\n","class e{picker;options;priority=0;dependencies=[];attach(e){const t=this.getName(),s={...this.options};this.options={...this.options,...e.options[t]||{}};for(const i of Object.keys(s))if(null!==s[i]&&\"object\"==typeof s[i]&&Object.keys(s[i]).length&&t in e.options&&i in e.options[t]){const n={...e.options[t][i]};null!==n&&\"object\"==typeof n&&Object.keys(n).length&&Object.keys(n).every((e=>Object.keys(s[i]).includes(e)))&&(this.options[i]={...s[i],...n})}if(this.picker=e,this.dependenciesNotFound()){const e=this.dependencies.filter((e=>!this.pluginsAsStringArray().includes(e)));return void console.warn(`${this.getName()}: required dependencies (${e.join(\", \")}).`)}const i=this.camelCaseToKebab(this.getName());this.picker.ui.container.classList.add(i),this.onAttach()}detach(){const e=this.camelCaseToKebab(this.getName());this.picker.ui.container.classList.remove(e),\"function\"==typeof this.onDetach&&this.onDetach()}dependenciesNotFound(){return this.dependencies.length&&!this.dependencies.every((e=>this.pluginsAsStringArray().includes(e)))}pluginsAsStringArray(){return this.picker.options.plugins.map((e=>\"function\"==typeof e?(new e).getName():e))}camelCaseToKebab(e){return e.replace(/([a-zA-Z])(?=[A-Z])/g,\"$1-\").toLowerCase()}}export{e as BasePlugin};\n","import{DateTime as e}from\"@easepick/datetime\";class t{picker;constructor(e){this.picker=e}render(t,i){t||(t=new e),t.setDate(1),t.setHours(0,0,0,0),\"function\"==typeof this[`get${i}View`]&&this[`get${i}View`](t)}getContainerView(e){this.picker.ui.container.innerHTML=\"\",this.picker.options.header&&this.picker.trigger(\"render\",{date:e.clone(),view:\"Header\"}),this.picker.trigger(\"render\",{date:e.clone(),view:\"Main\"}),this.picker.options.autoApply||this.picker.trigger(\"render\",{date:e.clone(),view:\"Footer\"})}getHeaderView(e){const t=document.createElement(\"header\");this.picker.options.header instanceof HTMLElement&&t.appendChild(this.picker.options.header),\"string\"==typeof this.picker.options.header&&(t.innerHTML=this.picker.options.header),this.picker.ui.container.appendChild(t),this.picker.trigger(\"view\",{target:t,date:e.clone(),view:\"Header\"})}getMainView(e){const t=document.createElement(\"main\");this.picker.ui.container.appendChild(t);const i=document.createElement(\"div\");i.className=`calendars grid-${this.picker.options.grid}`;for(let t=0;t${e.toLocaleString(this.picker.options.lang,{month:\"long\"})} ${e.format(\"YYYY\")}`,t.appendChild(i);const n=document.createElement(\"button\");n.className=\"previous-button unit\",n.innerHTML=this.picker.options.locale.previousMonth,t.appendChild(n);const s=document.createElement(\"button\");return s.className=\"next-button unit\",s.innerHTML=this.picker.options.locale.nextMonth,t.appendChild(s),t}getCalendarDayNamesView(){const e=document.createElement(\"div\");e.className=\"daynames-row\";for(let t=1;t<=7;t++){const i=3+this.picker.options.firstDay+t,n=document.createElement(\"div\");n.className=\"dayname\",n.innerHTML=new Date(1970,0,i,12,0,0,0).toLocaleString(this.picker.options.lang,{weekday:\"short\"}),n.title=new Date(1970,0,i,12,0,0,0).toLocaleString(this.picker.options.lang,{weekday:\"long\"}),e.appendChild(n),this.picker.trigger(\"view\",{dayIdx:i,view:\"CalendarDayName\",target:n})}return e}getCalendarDaysView(e){const t=document.createElement(\"div\");t.className=\"days-grid\";const i=this.calcOffsetDays(e,this.picker.options.firstDay),n=32-new Date(e.getFullYear(),e.getMonth(),32).getDate();for(let e=0;e{\"function\"==typeof t?e.push(new t):\"string\"==typeof t&&\"undefined\"!=typeof easepick&&Object.prototype.hasOwnProperty.call(easepick,t)?e.push(new easepick[t]):console.warn(`easepick: ${t} not found.`)})),e.sort(((e,t)=>e.priority>t.priority?-1:e.priorityt.dependencies.length?1:e.dependencies.length{e.attach(this.picker),this.instances[e.getName()]=e}))}getInstance(e){return this.instances[e]}addInstance(e){if(Object.prototype.hasOwnProperty.call(this.instances,e))console.warn(`easepick: ${e} already added.`);else{if(\"undefined\"!=typeof easepick&&Object.prototype.hasOwnProperty.call(easepick,e)){const t=new easepick[e];return t.attach(this.picker),this.instances[t.getName()]=t,t}if(\"undefined\"!==this.getPluginFn(e)){const t=new(this.getPluginFn(e));return t.attach(this.picker),this.instances[t.getName()]=t,t}console.warn(`easepick: ${e} not found.`)}return null}removeInstance(e){return e in this.instances&&this.instances[e].detach(),delete this.instances[e]}reloadInstance(e){return this.removeInstance(e),this.addInstance(e)}getPluginFn(e){return[...this.picker.options.plugins].filter((t=>\"function\"==typeof t&&(new t).getName()===e)).shift()}}class n{Calendar=new t(this);PluginManager=new i(this);calendars=[];datePicked=[];cssLoaded=0;binds={hidePicker:this.hidePicker.bind(this),show:this.show.bind(this)};options={doc:document,css:[],element:null,firstDay:1,grid:1,calendars:1,lang:\"en-US\",date:null,format:\"YYYY-MM-DD\",readonly:!0,autoApply:!0,header:!1,inline:!1,locale:{nextMonth:'',previousMonth:'',cancel:\"Cancel\",apply:\"Apply\"},documentClick:this.binds.hidePicker,plugins:[]};ui={container:null,shadowRoot:null,wrapper:null};version=\"1.1.7\";constructor(e){const t={...this.options.locale,...e.locale};this.options={...this.options,...e},this.options.locale=t,this.handleOptions(),this.ui.wrapper=document.createElement(\"span\"),this.ui.wrapper.style.display=\"none\",this.ui.wrapper.style.position=\"absolute\",this.ui.wrapper.style.pointerEvents=\"none\",this.ui.wrapper.className=\"easepick-wrapper\",this.ui.wrapper.attachShadow({mode:\"open\"}),this.ui.shadowRoot=this.ui.wrapper.shadowRoot,this.ui.container=document.createElement(\"div\"),this.ui.container.className=\"container\",this.options.zIndex&&(this.ui.container.style.zIndex=String(this.options.zIndex)),this.options.inline&&(this.ui.wrapper.style.position=\"relative\",this.ui.container.classList.add(\"inline\")),this.ui.shadowRoot.appendChild(this.ui.container),this.options.element.after(this.ui.wrapper),this.handleCSS(),this.options.element.addEventListener(\"click\",this.binds.show),this.on(\"view\",this.onView.bind(this)),this.on(\"render\",this.onRender.bind(this)),this.PluginManager.initialize(),this.parseValues(),\"function\"==typeof this.options.setup&&this.options.setup(this),this.on(\"click\",this.onClick.bind(this)),this.renderAll()}on(e,t,i={}){this.ui.container.addEventListener(e,t,i)}off(e,t,i={}){this.ui.container.removeEventListener(e,t,i)}trigger(e,t={}){return this.ui.container.dispatchEvent(new CustomEvent(e,{detail:t}))}destroy(){this.options.element.removeEventListener(\"click\",this.binds.show),\"function\"==typeof this.options.documentClick&&document.removeEventListener(\"click\",this.options.documentClick,!0),Object.keys(this.PluginManager.instances).forEach((e=>{this.PluginManager.removeInstance(e)})),this.ui.wrapper.remove()}onRender(e){const{view:t,date:i}=e.detail;this.Calendar.render(i,t)}onView(e){const{view:t,target:i}=e.detail;if(\"Footer\"===t&&this.datePicked.length){i.querySelector(\".apply-button\").disabled=!1}}onClickHeaderButton(e){this.isCalendarHeaderButton(e)&&(e.classList.contains(\"next-button\")?this.calendars[0].add(1,\"month\"):this.calendars[0].subtract(1,\"month\"),this.renderAll(this.calendars[0]))}onClickCalendarDay(t){if(this.isCalendarDay(t)){const i=new e(t.dataset.time);this.options.autoApply?(this.setDate(i),this.trigger(\"select\",{date:this.getDate()}),this.hide()):(this.datePicked[0]=i,this.trigger(\"preselect\",{date:this.getDate()}),this.renderAll())}}onClickApplyButton(e){if(this.isApplyButton(e)){if(this.datePicked[0]instanceof Date){const e=this.datePicked[0].clone();this.setDate(e)}this.hide(),this.trigger(\"select\",{date:this.getDate()})}}onClickCancelButton(e){this.isCancelButton(e)&&this.hide()}onClick(e){const t=e.target;if(t instanceof HTMLElement){const e=t.closest(\".unit\");if(!(e instanceof HTMLElement))return;this.onClickHeaderButton(e),this.onClickCalendarDay(e),this.onClickApplyButton(e),this.onClickCancelButton(e)}}isShown(){return this.ui.container.classList.contains(\"inline\")||this.ui.container.classList.contains(\"show\")}show(e){if(this.isShown())return;const t=e&&\"target\"in e?e.target:this.options.element,{top:i,left:n}=this.adjustPosition(t);this.ui.container.style.top=`${i}px`,this.ui.container.style.left=`${n}px`,this.ui.container.classList.add(\"show\"),this.trigger(\"show\",{target:t})}hide(){this.ui.container.classList.remove(\"show\"),this.datePicked.length=0,this.renderAll(),this.trigger(\"hide\")}setDate(t){const i=new e(t,this.options.format);this.options.date=i.clone(),this.updateValues(),this.calendars.length&&this.renderAll()}getDate(){return this.options.date instanceof e?this.options.date.clone():null}parseValues(){this.options.date?this.setDate(this.options.date):this.options.element instanceof HTMLInputElement&&this.options.element.value.length&&this.setDate(this.options.element.value),this.options.date instanceof Date||(this.options.date=null)}updateValues(){const e=this.getDate(),t=e instanceof Date?e.format(this.options.format,this.options.lang):\"\",i=this.options.element;i instanceof HTMLInputElement?i.value=t:i instanceof HTMLElement&&(i.innerText=t)}hidePicker(e){let t=e.target,i=null;t.shadowRoot&&(t=e.composedPath()[0],i=t.getRootNode().host),this.isShown()&&i!==this.ui.wrapper&&t!==this.options.element&&this.hide()}renderAll(e){this.trigger(\"render\",{view:\"Container\",date:(e||this.calendars[0]).clone()})}isCalendarHeaderButton(e){return[\"previous-button\",\"next-button\"].some((t=>e.classList.contains(t)))}isCalendarDay(e){return e.classList.contains(\"day\")}isApplyButton(e){return e.classList.contains(\"apply-button\")}isCancelButton(e){return e.classList.contains(\"cancel-button\")}gotoDate(t){const i=new e(t,this.options.format);i.setDate(1),this.calendars[0]=i.clone(),this.renderAll()}clear(){this.options.date=null,this.datePicked.length=0,this.updateValues(),this.renderAll()}handleOptions(){this.options.element instanceof HTMLElement||(this.options.element=this.options.doc.querySelector(this.options.element)),\"function\"==typeof this.options.documentClick&&document.addEventListener(\"click\",this.options.documentClick,!0),this.options.element instanceof HTMLInputElement&&(this.options.element.readOnly=this.options.readonly),this.options.date?this.calendars[0]=new e(this.options.date,this.options.format):this.calendars[0]=new e}handleCSS(){if(Array.isArray(this.options.css))this.options.css.forEach((e=>{const t=document.createElement(\"link\");t.href=e,t.rel=\"stylesheet\";const i=()=>{this.cssLoaded++,this.cssLoaded===this.options.css.length&&(this.ui.wrapper.style.display=\"\")};t.addEventListener(\"load\",i),t.addEventListener(\"error\",i),this.ui.shadowRoot.append(t)}));else if(\"string\"==typeof this.options.css){const e=document.createElement(\"style\"),t=document.createTextNode(this.options.css);e.appendChild(t),this.ui.shadowRoot.append(e),this.ui.wrapper.style.display=\"\"}else\"function\"==typeof this.options.css&&(this.options.css.call(this,this),this.ui.wrapper.style.display=\"\")}adjustPosition(e){const t=e.getBoundingClientRect(),i=this.ui.wrapper.getBoundingClientRect();this.ui.container.classList.add(\"calc\");const n=this.ui.container.getBoundingClientRect();this.ui.container.classList.remove(\"calc\");let s=t.bottom-i.bottom,a=t.left-i.left;return\"undefined\"!=typeof window&&(window.innerHeight=0&&(s=t.top-i.top-n.height),window.innerWidth=0&&(a=t.right-i.right-n.width)),{left:a,top:s}}}var s=Object.freeze({__proto__:null,Core:n,create:n});export{n as Core,n as create,s as easepick};\n","class t extends Date{static parseDateTime(e,s=\"YYYY-MM-DD\",n=\"en-US\"){if(!e)return new Date((new Date).setHours(0,0,0,0));if(e instanceof t)return e.toJSDate();if(e instanceof Date)return e;if(/^-?\\d{10,}$/.test(String(e)))return new Date(Number(e));if(\"string\"==typeof e){const r=[];let a=null;for(;null!=(a=t.regex.exec(s));)\"\\\\\"!==a[1]&&r.push(a);if(r.length){const s={year:null,month:null,shortMonth:null,longMonth:null,day:null,hour:0,minute:0,second:0,ampm:null,value:\"\"};r[0].index>0&&(s.value+=\".*?\");for(const[e,a]of Object.entries(r)){const r=Number(e),{group:i,pattern:h}=t.formatPatterns(a[0],n);s[i]=r+1,s.value+=h,s.value+=\".*?\"}const a=new RegExp(`^${s.value}$`);if(a.test(e)){const r=a.exec(e),i=Number(r[s.year]);let h=null;s.month?h=Number(r[s.month])-1:s.shortMonth?h=t.shortMonths(n).indexOf(r[s.shortMonth]):s.longMonth&&(h=t.longMonths(n).indexOf(r[s.longMonth]));const g=Number(r[s.day])||1,o=Number(r[s.hour]);let u=Number.isNaN(o)?0:o;const c=Number(r[s.minute]),l=Number.isNaN(c)?0:c,m=Number(r[s.second]),d=Number.isNaN(m)?0:m,M=r[s.ampm];return M&&\"PM\"===M&&(u+=12,24===u&&(u=0)),new Date(i,h,g,u,l,d,0)}}}return new Date((new Date).setHours(0,0,0,0))}static regex=/(\\\\)?(Y{2,4}|M{1,4}|D{1,2}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|A|a)/g;static MONTH_JS=[0,1,2,3,4,5,6,7,8,9,10,11];static shortMonths(e){return t.MONTH_JS.map((t=>new Date(2019,t).toLocaleString(e,{month:\"short\"})))}static longMonths(e){return t.MONTH_JS.map((t=>new Date(2019,t).toLocaleString(e,{month:\"long\"})))}static formatPatterns(e,s){switch(e){case\"YY\":case\"YYYY\":return{group:\"year\",pattern:`(\\\\d{${e.length}})`};case\"M\":return{group:\"month\",pattern:\"(\\\\d{1,2})\"};case\"MM\":return{group:\"month\",pattern:\"(\\\\d{2})\"};case\"MMM\":return{group:\"shortMonth\",pattern:`(${t.shortMonths(s).join(\"|\")})`};case\"MMMM\":return{group:\"longMonth\",pattern:`(${t.longMonths(s).join(\"|\")})`};case\"D\":return{group:\"day\",pattern:\"(\\\\d{1,2})\"};case\"DD\":return{group:\"day\",pattern:\"(\\\\d{2})\"};case\"h\":case\"H\":return{group:\"hour\",pattern:\"(\\\\d{1,2})\"};case\"hh\":case\"HH\":return{group:\"hour\",pattern:\"(\\\\d{2})\"};case\"m\":return{group:\"minute\",pattern:\"(\\\\d{1,2})\"};case\"mm\":return{group:\"minute\",pattern:\"(\\\\d{2})\"};case\"s\":return{group:\"second\",pattern:\"(\\\\d{1,2})\"};case\"ss\":return{group:\"second\",pattern:\"(\\\\d{2})\"};case\"a\":case\"A\":return{group:\"ampm\",pattern:\"(AM|PM|am|pm)\"}}}lang;constructor(e=null,s=\"YYYY-MM-DD\",n=\"en-US\"){super(t.parseDateTime(e,s,n)),this.lang=n}getWeek(t){const e=new Date(this.midnight_ts(this)),s=(this.getDay()+(7-t))%7;e.setDate(e.getDate()-s);const n=e.getTime();return e.setMonth(0,1),e.getDay()!==t&&e.setMonth(0,1+(4-e.getDay()+7)%7),1+Math.ceil((n-e.getTime())/6048e5)}clone(){return new t(this)}toJSDate(){return new Date(this)}inArray(t,e=\"[]\"){return t.some((t=>t instanceof Array?this.isBetween(t[0],t[1],e):this.isSame(t,\"day\")))}isBetween(t,e,s=\"()\"){switch(s){default:case\"()\":return this.midnight_ts(this)>this.midnight_ts(t)&&this.midnight_ts(this)=this.midnight_ts(t)&&this.midnight_ts(this)this.midnight_ts(t)&&this.midnight_ts(this)<=this.midnight_ts(e);case\"[]\":return this.midnight_ts()>=this.midnight_ts(t)&&this.midnight_ts()<=this.midnight_ts(e)}}isBefore(t,e=\"days\"){switch(e){case\"day\":case\"days\":return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()>new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime();case\"month\":case\"months\":return new Date(t.getFullYear(),t.getMonth(),1).getTime()>new Date(this.getFullYear(),this.getMonth(),1).getTime();case\"year\":case\"years\":return t.getFullYear()>this.getFullYear()}throw new Error(\"isBefore: Invalid unit!\")}isSameOrBefore(t,e=\"days\"){switch(e){case\"day\":case\"days\":return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()>=new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime();case\"month\":case\"months\":return new Date(t.getFullYear(),t.getMonth(),1).getTime()>=new Date(this.getFullYear(),this.getMonth(),1).getTime()}throw new Error(\"isSameOrBefore: Invalid unit!\")}isAfter(t,e=\"days\"){switch(e){case\"day\":case\"days\":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()>new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case\"month\":case\"months\":return new Date(this.getFullYear(),this.getMonth(),1).getTime()>new Date(t.getFullYear(),t.getMonth(),1).getTime();case\"year\":case\"years\":return this.getFullYear()>t.getFullYear()}throw new Error(\"isAfter: Invalid unit!\")}isSameOrAfter(t,e=\"days\"){switch(e){case\"day\":case\"days\":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()>=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case\"month\":case\"months\":return new Date(this.getFullYear(),this.getMonth(),1).getTime()>=new Date(t.getFullYear(),t.getMonth(),1).getTime()}throw new Error(\"isSameOrAfter: Invalid unit!\")}isSame(t,e=\"days\"){switch(e){case\"day\":case\"days\":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()===new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case\"month\":case\"months\":return new Date(this.getFullYear(),this.getMonth(),1).getTime()===new Date(t.getFullYear(),t.getMonth(),1).getTime()}throw new Error(\"isSame: Invalid unit!\")}add(t,e=\"days\"){switch(e){case\"day\":case\"days\":this.setDate(this.getDate()+t);break;case\"month\":case\"months\":this.setMonth(this.getMonth()+t)}return this}subtract(t,e=\"days\"){switch(e){case\"day\":case\"days\":this.setDate(this.getDate()-t);break;case\"month\":case\"months\":this.setMonth(this.getMonth()-t)}return this}diff(t,e=\"days\"){switch(e){default:case\"day\":case\"days\":return Math.round((this.midnight_ts()-this.midnight_ts(t))/864e5);case\"month\":case\"months\":let e=12*(t.getFullYear()-this.getFullYear());return e-=t.getMonth(),e+=this.getMonth(),e}}format(e,s=\"en-US\"){let n=\"\";const r=[];let a=null;for(;null!=(a=t.regex.exec(e));)\"\\\\\"!==a[1]&&r.push(a);if(r.length){r[0].index>0&&(n+=e.substring(0,r[0].index));for(const[t,a]of Object.entries(r)){const i=Number(t);n+=this.formatTokens(a[0],s),r[i+1]&&(n+=e.substring(a.index+a[0].length,r[i+1].index)),i===r.length-1&&(n+=e.substring(a.index+a[0].length))}}return n.replace(/\\\\/g,\"\")}midnight_ts(t){return t?new Date(t.getFullYear(),t.getMonth(),t.getDate(),0,0,0,0).getTime():new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0,0).getTime()}formatTokens(e,s){switch(e){case\"YY\":return String(this.getFullYear()).slice(-2);case\"YYYY\":return String(this.getFullYear());case\"M\":return String(this.getMonth()+1);case\"MM\":return`0${this.getMonth()+1}`.slice(-2);case\"MMM\":return t.shortMonths(s)[this.getMonth()];case\"MMMM\":return t.longMonths(s)[this.getMonth()];case\"D\":return String(this.getDate());case\"DD\":return`0${this.getDate()}`.slice(-2);case\"H\":return String(this.getHours());case\"HH\":return`0${this.getHours()}`.slice(-2);case\"h\":return String(this.getHours()%12||12);case\"hh\":return`0${this.getHours()%12||12}`.slice(-2);case\"m\":return String(this.getMinutes());case\"mm\":return`0${this.getMinutes()}`.slice(-2);case\"s\":return String(this.getSeconds());case\"ss\":return`0${this.getSeconds()}`.slice(-2);case\"a\":return this.getHours()<12||24===this.getHours()?\"am\":\"pm\";case\"A\":return this.getHours()<12||24===this.getHours()?\"AM\":\"PM\";default:return\"\"}}}export{t as DateTime};\n","import{DateTime as t}from\"@easepick/datetime\";import{BasePlugin as i}from\"@easepick/base-plugin\";class s extends i{priority=1;binds={onView:this.onView.bind(this)};options={minDate:null,maxDate:null,minDays:null,maxDays:null,selectForward:null,selectBackward:null,presets:!0,inseparable:!1,filter:null};getName(){return\"LockPlugin\"}onAttach(){if(this.options.minDate&&(this.options.minDate=new t(this.options.minDate,this.picker.options.format,this.picker.options.lang)),this.options.maxDate&&(this.options.maxDate=new t(this.options.maxDate,this.picker.options.format,this.picker.options.lang),this.options.maxDate instanceof t&&this.picker.options.calendars>1&&this.picker.calendars[0].isSame(this.options.maxDate,\"month\"))){const t=this.picker.calendars[0].clone().subtract(1,\"month\");this.picker.gotoDate(t)}if((this.options.minDays||this.options.maxDays||this.options.selectForward||this.options.selectBackward)&&!this.picker.options.plugins.includes(\"RangePlugin\")){const t=[\"minDays\",\"maxDays\",\"selectForward\",\"selectBackward\"];console.warn(`${this.getName()}: options ${t.join(\", \")} required RangePlugin.`)}this.picker.on(\"view\",this.binds.onView)}onDetach(){this.picker.off(\"view\",this.binds.onView)}onView(i){const{view:s,target:e,date:a}=i.detail;if(\"CalendarHeader\"===s&&(this.options.minDate instanceof t&&a.isSameOrBefore(this.options.minDate,\"month\")&&e.classList.add(\"no-previous-month\"),this.options.maxDate instanceof t&&a.isSameOrAfter(this.options.maxDate,\"month\")&&e.classList.add(\"no-next-month\")),\"CalendarDay\"===s){const t=this.picker.datePicked.length?this.picker.datePicked[0]:null;if(this.testFilter(a))return void e.classList.add(\"locked\");if(this.options.inseparable){if(this.options.minDays){const t=a.clone().subtract(this.options.minDays-1,\"day\"),i=a.clone().add(this.options.minDays-1,\"day\");let s=!1,o=!1;for(;t.isBefore(a,\"day\");){if(this.testFilter(t)){s=!0;break}t.add(1,\"day\")}for(;i.isAfter(a,\"day\");){if(this.testFilter(i)){o=!0;break}i.subtract(1,\"day\")}s&&o&&e.classList.add(\"not-available\")}this.rangeIsNotAvailable(a,t)&&e.classList.add(\"not-available\")}this.dateIsNotAvailable(a,t)&&e.classList.add(\"not-available\")}if(this.options.presets&&\"PresetPluginButton\"===s){const i=new t(Number(e.dataset.start)),s=new t(Number(e.dataset.end)),a=s.diff(i,\"day\"),o=this.options.minDays&&athis.options.maxDays;(o||n||this.lockMinDate(i)||this.lockMaxDate(i)||this.lockMinDate(s)||this.lockMaxDate(s)||this.rangeIsNotAvailable(i,s))&&e.setAttribute(\"disabled\",\"disabled\")}}dateIsNotAvailable(t,i){return this.lockMinDate(t)||this.lockMaxDate(t)||this.lockMinDays(t,i)||this.lockMaxDays(t,i)||this.lockSelectForward(t)||this.lockSelectBackward(t)}rangeIsNotAvailable(t,i){if(!t||!i)return!1;const s=(t.isSameOrBefore(i,\"day\")?t:i).clone(),e=(i.isSameOrAfter(t,\"day\")?i:t).clone();for(;s.isSameOrBefore(e,\"day\");){if(this.testFilter(s))return!0;s.add(1,\"day\")}return!1}lockMinDate(i){return this.options.minDate instanceof t&&i.isBefore(this.options.minDate,\"day\")}lockMaxDate(i){return this.options.maxDate instanceof t&&i.isAfter(this.options.maxDate,\"day\")}lockMinDays(t,i){if(this.options.minDays&&i){const s=i.clone().subtract(this.options.minDays-1,\"day\"),e=i.clone().add(this.options.minDays-1,\"day\");return t.isBetween(s,e)}return!1}lockMaxDays(t,i){if(this.options.maxDays&&i){const s=i.clone().subtract(this.options.maxDays,\"day\"),e=i.clone().add(this.options.maxDays,\"day\");return!t.isBetween(s,e)}return!1}lockSelectForward(t){if(1===this.picker.datePicked.length&&this.options.selectForward){const i=this.picker.datePicked[0].clone();return t.isBefore(i,\"day\")}return!1}lockSelectBackward(t){if(1===this.picker.datePicked.length&&this.options.selectBackward){const i=this.picker.datePicked[0].clone();return t.isAfter(i,\"day\")}return!1}testFilter(t){return\"function\"==typeof this.options.filter&&this.options.filter(t,this.picker.datePicked)}}export{s as LockPlugin};\n","import{DateTime as t}from\"@easepick/datetime\";import{BasePlugin as e}from\"@easepick/base-plugin\";class i extends e{options={native:!1,seconds:!1,stepHours:1,stepMinutes:5,stepSeconds:5,format12:!1};rangePlugin;timePicked={input:null,start:null,end:null};timePrePicked={input:null,start:null,end:null};binds={getDate:this.getDate.bind(this),getStartDate:this.getStartDate.bind(this),getEndDate:this.getEndDate.bind(this),onView:this.onView.bind(this),onInput:this.onInput.bind(this),onChange:this.onChange.bind(this),onClick:this.onClick.bind(this),setTime:this.setTime.bind(this),setStartTime:this.setStartTime.bind(this),setEndTime:this.setEndTime.bind(this)};getName(){return\"TimePlugin\"}onAttach(){this.binds._getDate=this.picker.getDate,this.binds._getStartDate=this.picker.getStartDate,this.binds._getEndDate=this.picker.getEndDate,Object.defineProperties(this.picker,{getDate:{configurable:!0,value:this.binds.getDate},getStartDate:{configurable:!0,value:this.binds.getStartDate},getEndDate:{configurable:!0,value:this.binds.getEndDate},setTime:{configurable:!0,value:this.binds.setTime},setStartTime:{configurable:!0,value:this.binds.setStartTime},setEndTime:{configurable:!0,value:this.binds.setEndTime}}),this.rangePlugin=this.picker.PluginManager.getInstance(\"RangePlugin\"),this.parseValues(),this.picker.on(\"view\",this.binds.onView),this.picker.on(\"input\",this.binds.onInput),this.picker.on(\"change\",this.binds.onChange),this.picker.on(\"click\",this.binds.onClick)}onDetach(){delete this.picker.setTime,delete this.picker.setStartTime,delete this.picker.setEndTime,Object.defineProperties(this.picker,{getDate:{configurable:!0,value:this.binds._getDate},getStartDate:{configurable:!0,value:this.binds._getStartDate},getEndDate:{configurable:!0,value:this.binds._getEndDate}}),this.picker.off(\"view\",this.binds.onView),this.picker.off(\"input\",this.binds.onInput),this.picker.off(\"change\",this.binds.onChange),this.picker.off(\"click\",this.binds.onClick)}onView(t){const{view:e,target:i}=t.detail;if(\"Main\"===e){this.rangePlugin=this.picker.PluginManager.getInstance(\"RangePlugin\");const t=document.createElement(\"div\");if(t.className=\"time-plugin-container\",this.rangePlugin){const e=this.getStartInput();t.appendChild(e),this.picker.trigger(\"view\",{view:\"TimePluginInput\",target:e});const i=this.getEndInput();t.appendChild(i),this.picker.trigger(\"view\",{view:\"TimePluginInput\",target:i})}else{const e=this.getSingleInput();t.appendChild(e),this.picker.trigger(\"view\",{view:\"TimePluginInput\",target:e})}i.appendChild(t),this.picker.trigger(\"view\",{view:\"TimePluginContainer\",target:t})}}onInput(e){const i=e.target;if(i instanceof HTMLInputElement&&i.classList.contains(\"time-plugin-input\")){const e=this.timePicked[i.name]||new t,[n,s]=i.value.split(\":\");e.setHours(Number(n)||0,Number(s)||0,0,0),this.picker.options.autoApply?(this.timePicked[i.name]=e,this.picker.updateValues()):this.timePrePicked[i.name]=e}}onChange(e){const i=e.target;if(i instanceof HTMLSelectElement&&i.classList.contains(\"time-plugin-custom-input\")){const e=/(\\w+)\\[(\\w+)\\]/,[,n,s]=i.name.match(e),o=Number(i.value);let a=new t;switch(!this.picker.options.autoApply&&this.timePrePicked[n]instanceof Date?a=this.timePrePicked[n].clone():this.timePicked[n]instanceof Date&&(a=this.timePicked[n].clone()),s){case\"HH\":if(this.options.format12){const t=i.closest(\".time-plugin-custom-block\").querySelector(`select[name=\"${n}[period]\"]`).value,e=this.handleFormat12(t,a,o);a.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),0)}else a.setHours(o,a.getMinutes(),a.getSeconds(),0);break;case\"mm\":a.setHours(a.getHours(),o,a.getSeconds(),0);break;case\"ss\":a.setHours(a.getHours(),a.getMinutes(),o,0);break;case\"period\":if(this.options.format12){const t=i.closest(\".time-plugin-custom-block\").querySelector(`select[name=\"${n}[HH]\"]`).value,e=this.handleFormat12(i.value,a,Number(t));a.setHours(e.getHours(),e.getMinutes(),e.getSeconds(),0)}}if(this.picker.options.autoApply)this.timePicked[n]=a,this.picker.updateValues();else{this.timePrePicked[n]=a;const t=this.picker.ui.container.querySelector(\".apply-button\");if(this.rangePlugin){const e=this.rangePlugin.options,i=this.picker.datePicked,n=e.strict&&2===i.length||!e.strict&&i.length>0||!i.length&&e.strict&&e.startDate instanceof Date&&e.endDate instanceof Date||!i.length&&!e.strict&&(e.startDate instanceof Date||e.endDate instanceof Date);t.disabled=!n}else this.picker.datePicked.length&&(t.disabled=!1)}}}onClick(t){const e=t.target;if(e instanceof HTMLElement){const t=e.closest(\".unit\");if(!(t instanceof HTMLElement))return;this.picker.isApplyButton(t)&&(Object.keys(this.timePicked).forEach((t=>{this.timePrePicked[t]instanceof Date&&(this.timePicked[t]=this.timePrePicked[t].clone())})),this.picker.updateValues(),this.timePrePicked={input:null,start:null,end:null}),this.picker.isCancelButton(t)&&(this.timePrePicked={input:null,start:null,end:null},this.picker.renderAll())}}setTime(t){const e=this.handleTimeString(t);this.timePicked.input=e.clone(),this.picker.renderAll(),this.picker.updateValues()}setStartTime(t){const e=this.handleTimeString(t);this.timePicked.start=e.clone(),this.picker.renderAll(),this.picker.updateValues()}setEndTime(t){const e=this.handleTimeString(t);this.timePicked.end=e.clone(),this.picker.renderAll(),this.picker.updateValues()}handleTimeString(e){const i=new t,[n,s,o]=e.split(\":\").map((t=>Number(t))),a=n&&!Number.isNaN(n)?n:0,c=s&&!Number.isNaN(s)?s:0,r=o&&!Number.isNaN(o)?o:0;return i.setHours(a,c,r,0),i}getDate(){if(this.picker.options.date instanceof Date){const e=new t(this.picker.options.date,this.picker.options.format);if(this.timePicked.input instanceof Date){const t=this.timePicked.input;e.setHours(t.getHours(),t.getMinutes(),t.getSeconds(),0)}return e}return null}getStartDate(){if(this.rangePlugin.options.startDate instanceof Date){const e=new t(this.rangePlugin.options.startDate,this.picker.options.format);if(this.timePicked.start instanceof Date){const t=this.timePicked.start;e.setHours(t.getHours(),t.getMinutes(),t.getSeconds(),0)}return e}return null}getEndDate(){if(this.rangePlugin.options.endDate instanceof Date){const e=new t(this.rangePlugin.options.endDate,this.picker.options.format);if(this.timePicked.end instanceof Date){const t=this.timePicked.end;e.setHours(t.getHours(),t.getMinutes(),t.getSeconds(),0)}return e}return null}getSingleInput(){return this.options.native?this.getNativeInput(\"input\"):this.getCustomInput(\"input\")}getStartInput(){return this.options.native?this.getNativeInput(\"start\"):this.getCustomInput(\"start\")}getEndInput(){return this.options.native?this.getNativeInput(\"end\"):this.getCustomInput(\"end\")}getNativeInput(t){const e=document.createElement(\"input\");e.type=\"time\",e.name=t,e.className=\"time-plugin-input unit\";const i=this.timePicked[t];if(i){const t=`0${i.getHours()}`.slice(-2),n=`0${i.getMinutes()}`.slice(-2);e.value=`${t}:${n}`}return e}getCustomInput(t){const e=document.createElement(\"div\");e.className=\"time-plugin-custom-block\";const i=document.createElement(\"select\");i.className=\"time-plugin-custom-input unit\",i.name=`${t}[HH]`;const n=this.options.format12?1:0,s=this.options.format12?13:24;let o=null;!this.picker.options.autoApply&&this.timePrePicked[t]instanceof Date?o=this.timePrePicked[t].clone():this.timePicked[t]instanceof Date&&(o=this.timePicked[t].clone());for(let t=n;t{const e=document.createElement(\"option\");e.value=t,e.text=t,o&&\"PM\"===t&&o.getHours()>=12&&(e.selected=!0),i.appendChild(e)})),e.appendChild(i)}return e}handleFormat12(t,e,i){const n=e.clone();switch(t){case\"AM\":12===i?n.setHours(0,n.getMinutes(),n.getSeconds(),0):n.setHours(i,n.getMinutes(),n.getSeconds(),0);break;case\"PM\":12!==i?n.setHours(i+12,n.getMinutes(),n.getSeconds(),0):n.setHours(i,n.getMinutes(),n.getSeconds(),0)}return n}parseValues(){if(this.rangePlugin){if(this.rangePlugin.options.strict){if(this.rangePlugin.options.startDate&&this.rangePlugin.options.endDate){const e=new t(this.rangePlugin.options.startDate,this.picker.options.format),i=new t(this.rangePlugin.options.endDate,this.picker.options.format);this.timePicked.start=e.clone(),this.timePicked.end=i.clone()}}else{if(this.rangePlugin.options.startDate){const e=new t(this.rangePlugin.options.startDate,this.picker.options.format);this.timePicked.start=e.clone()}if(this.rangePlugin.options.endDate){const e=new t(this.rangePlugin.options.endDate,this.picker.options.format);this.timePicked.end=e.clone()}}if(this.rangePlugin.options.elementEnd)if(this.rangePlugin.options.strict){if(this.picker.options.element instanceof HTMLInputElement&&this.picker.options.element.value.length&&this.rangePlugin.options.elementEnd instanceof HTMLInputElement&&this.rangePlugin.options.elementEnd.value.length){const e=new t(this.picker.options.element.value,this.picker.options.format),i=new t(this.rangePlugin.options.elementEnd.value,this.picker.options.format);this.timePicked.start=e.clone(),this.timePicked.end=i.clone()}}else{if(this.picker.options.element instanceof HTMLInputElement&&this.picker.options.element.value.length){const e=new t(this.picker.options.element.value,this.picker.options.format);this.timePicked.start=e.clone()}if(this.rangePlugin.options.elementEnd instanceof HTMLInputElement&&this.rangePlugin.options.elementEnd.value.length){const e=new t(this.rangePlugin.options.elementEnd.value,this.picker.options.format);this.timePicked.start=e.clone()}}else if(this.picker.options.element instanceof HTMLInputElement&&this.picker.options.element.value.length){const[e,i]=this.picker.options.element.value.split(this.rangePlugin.options.delimiter);if(this.rangePlugin.options.strict){if(e&&i){const n=new t(e,this.picker.options.format),s=new t(i,this.picker.options.format);this.timePicked.start=n.clone(),this.timePicked.end=s.clone()}}else{if(e){const i=new t(e,this.picker.options.format);this.timePicked.start=i.clone()}if(i){const e=new t(i,this.picker.options.format);this.timePicked.start=e.clone()}}}}else{if(this.picker.options.date){const e=new t(this.picker.options.date,this.picker.options.format);this.timePicked.input=e.clone()}if(this.picker.options.element instanceof HTMLInputElement&&this.picker.options.element.value.length){const e=new t(this.picker.options.element.value,this.picker.options.format);this.timePicked.input=e.clone()}}}}export{i as TimePlugin};\n","export function linearTween(\n\ttimeElapsed: number,\n\tstart: number,\n\tdistance: number,\n\tduration: number\n) {\n\treturn (distance * timeElapsed) / duration + start;\n}\n","import { Component } from '@opten/compiler/metadata/component';\nimport { Collapse } from './initializer';\n\n@Component({ className: 'js-collapse' })\nexport class CollapseComponent {\n\tcollapse: Collapse;\n\tconstructor(private element: HTMLElement) {\n\t\tthis.collapse = new Collapse(element, {});\n\t}\n}\n","import { addClass } from '@opten/dom/add-class';\nimport { hasClass } from '@opten/dom/has-class';\nimport { removeClass } from '@opten/dom/remove-class';\n\nimport { getSelectorElementFromElement } from '@opten/dom/get-selector-element-from-element';\nimport { addTransitionEndListener } from '@opten/transition/add-transition-end-listener';\n\nimport { eventNamespaceFactory } from '@opten/events/event-namespace-factory';\n\nconst stringCollapse = 'Collapse';\n\nexport interface CollapseOptions {\n\tcomponentClass?: string;\n\tactiveClass?: string;\n\tactiveParentClass?: string;\n\tshowClass?: string;\n\tshowClassDesktop?: string;\n\tdesktopWidth?: number;\n\tcollapsingClass?: string;\n\tparentElement?: HTMLElement;\n\ttransitionDuration?: number;\n\tanimateProp?: 'height' | 'width' | false;\n\tisHideable?: boolean;\n\tcloseSiblings?: boolean;\n\tuseShowClassDesktop?: boolean;\n\tdataParentSelector?: string;\n\tdataTargetSelector?: string;\n\tdataToggleSelector?: string;\n\threfSelector?: string;\n}\n\nexport class Collapse {\n\t// TODO: Uggly naming\n\tget toggles(): HTMLElement[] {\n\t\treturn this.triggers;\n\t}\n\n\tconstructor(public element: HTMLElement, options?: CollapseOptions) {\n\t\tthis.options = {\n\t\t\t...this.options,\n\t\t\t...options,\n\t\t};\n\n\t\tif (!this.options.parentElement) {\n\t\t\tthis.options.parentElement = getSelectorElementFromElement(\n\t\t\t\telement,\n\t\t\t\tthis.options.dataParentSelector,\n\t\t\t\tfalse\n\t\t\t);\n\t\t}\n\n\t\tthis.init();\n\t}\n\tprivate options: CollapseOptions = {\n\t\tactiveClass: 'is-active',\n\t\tactiveParentClass: 'is-active',\n\t\tanimateProp: 'height',\n\t\tcollapsingClass: 'collapse--collapsing',\n\t\tcomponentClass: 'collapse',\n\t\tshowClass: 'collapse--show',\n\t\tshowClassDesktop: 'collapse--md-show',\n\t\tdesktopWidth: 1024,\n\t\ttransitionDuration: 600,\n\t\tisHideable: true,\n\t\tcloseSiblings: true,\n\t\tuseShowClassDesktop: false,\n\t\tdataParentSelector: 'data-parent',\n\t\tdataTargetSelector: 'data-target',\n\t\tdataToggleSelector: 'data-toggle',\n\t\threfSelector: 'href',\n\t};\n\n\tprivate parent: HTMLElement;\n\tprivate triggers: HTMLElement[];\n\n\tprivate target: Element;\n\tprivate isTransitioning = false; // when true it will prevent click handlers\n\n\t// event names\n\tprivate eventNamespaceFn = eventNamespaceFactory('opten.collapse');\n\n\tstatic getInstance(\n\t\telement: HTMLElement,\n\t\toptions?: CollapseOptions,\n\t\tcreate = true\n\t) {\n\t\tlet data = element[stringCollapse] as Collapse;\n\n\t\tif (!data && create) {\n\t\t\tdata = new Collapse(element, options);\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tisOpen(): boolean {\n\t\tif (\n\t\t\tthis.options.useShowClassDesktop &&\n\t\t\twindow.outerWidth >= this.options.desktopWidth &&\n\t\t\thasClass(this.element, this.options.showClassDesktop)\n\t\t) {\n\t\t\taddClass(this.element, this.options.showClass);\n\t\t}\n\t\tremoveClass(this.element, this.options.showClassDesktop);\n\t\treturn hasClass(this.element, this.options.showClass);\n\t}\n\n\ttoggle() {\n\t\tif (this.isOpen()) {\n\t\t\tif (this.options.isHideable) {\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t} else {\n\t\t\tthis.show();\n\t\t}\n\t}\n\n\tshow() {\n\t\tif (this.isTransitioning || this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.options.closeSiblings && this.parent) {\n\t\t\tconst selector = `[${this.options.dataParentSelector}=\"#${this.parent.id}\"]`;\n\t\t\tconst actives = Array.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`${selector}.${this.options.showClass}, ${selector}.${this.options.collapsingClass}`\n\t\t\t\t)\n\t\t\t).filter((active) => active !== this.target);\n\n\t\t\tif (actives && actives.length) {\n\t\t\t\tconst anyTransitioning = actives.filter((active) => {\n\t\t\t\t\tconst collapseInstance = active[stringCollapse] as Collapse;\n\t\t\t\t\treturn collapseInstance && collapseInstance.isTransitioning;\n\t\t\t\t});\n\n\t\t\t\tif (anyTransitioning.length) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tactives.forEach((active) =>\n\t\t\t\t\tCollapse.getInstance(active as HTMLElement).hide()\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis._handleShow(this.element, this.triggers);\n\t}\n\n\thide() {\n\t\tif (this.isTransitioning || !this.isOpen()) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._handleClose(this.element, this.triggers);\n\t}\n\n\tdestroy() {\n\t\tconst element = this.element;\n\n\t\tif (element[stringCollapse]) {\n\t\t\telement[stringCollapse] = null;\n\n\t\t\tremoveClass(element, this.options.componentClass);\n\t\t\tremoveClass(element, this.options.collapsingClass);\n\t\t\tremoveClass(element, this.options.showClass);\n\n\t\t\tif (this.options.animateProp) {\n\t\t\t\telement.style[this.options.animateProp] = null;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate init() {\n\t\t// todo: only initalize once, like bootstrap does it?\n\t\tthis.triggers = Array.from(\n\t\t\tdocument.querySelectorAll(\n\t\t\t\t`[${this.options.hrefSelector}=\"#${this.element.id}\"], [${this.options.dataTargetSelector}=\"#${this.element.id}\"]`\n\t\t\t)\n\t\t);\n\n\t\t// todo: why do we need that?\n\t\tconst toggles = Array.from(\n\t\t\tdocument.querySelectorAll(\n\t\t\t\t`[${this.options.dataToggleSelector}=\"collapse\"]`\n\t\t\t)\n\t\t);\n\t\tfor (const toggle of toggles) {\n\t\t\tconst target = getSelectorElementFromElement(\n\t\t\t\ttoggle,\n\t\t\t\tthis.options.dataTargetSelector\n\t\t\t);\n\t\t\tif (target !== null && target === this.element) {\n\t\t\t\tthis.target = target;\n\t\t\t\tthis.triggers.push(toggle as HTMLElement);\n\t\t\t}\n\t\t}\n\n\t\tthis.parent = this.options.parentElement;\n\n\t\t// init\n\t\tif (!(stringCollapse in this.element)) {\n\t\t\t// prevent adding event handlers twice\n\t\t\tthis.triggers.forEach((trigger) =>\n\t\t\t\ttrigger.addEventListener('click', this.handleClick, false)\n\t\t\t);\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tArray.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`[${this.options.dataToggleSelector}=\"collapse\"][${this.options.dataParentSelector}=\"#${this.parent.id}\"]`\n\t\t\t\t)\n\t\t\t).forEach((element) => {\n\t\t\t\tthis._addAriaAndCollapsedClass(\n\t\t\t\t\tgetSelectorElementFromElement(\n\t\t\t\t\t\telement,\n\t\t\t\t\t\tthis.options.dataTargetSelector\n\t\t\t\t\t),\n\t\t\t\t\t[element]\n\t\t\t\t);\n\t\t\t});\n\t\t} else {\n\t\t\tthis._addAriaAndCollapsedClass(this.element, this.triggers);\n\t\t}\n\n\t\taddClass(this.element, this.options.componentClass);\n\n\t\tthis.element[stringCollapse] = this;\n\t}\n\n\tprivate handleClick = (event: Event) => {\n\t\t// preventDefault only for elements (which change the URL) not inside the collapsible element\n\t\tconst trigger = event && (event.currentTarget as HTMLElement);\n\t\tif (trigger && trigger.tagName === 'A') {\n\t\t\tevent.preventDefault();\n\t\t}\n\n\t\tconst target = getSelectorElementFromElement(\n\t\t\ttrigger,\n\t\t\tthis.options.dataTargetSelector\n\t\t);\n\t\tlet data = target[stringCollapse] as Collapse;\n\n\t\tif (!data) {\n\t\t\tdata = trigger[stringCollapse] as Collapse;\n\t\t}\n\n\t\tif (target) {\n\t\t\tCollapse.getInstance(target, data.options).toggle();\n\t\t}\n\t};\n\n\tprivate _handleShow(collapseElement: HTMLElement, triggers?: Element[]) {\n\t\tthis.eventNamespaceFn(collapseElement, 'show');\n\n\t\tremoveClass(collapseElement, this.options.componentClass);\n\t\taddClass(collapseElement, this.options.collapsingClass);\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] =\n\t\t\t\tcollapseElement.scrollHeight + 'px';\n\t\t}\n\n\t\tif (triggers && triggers.length) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\taddClass(trigger, this.options.activeClass);\n\t\t\t\ttrigger.setAttribute('aria-expanded', 'true');\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\taddClass(this.parent, this.options.activeClass);\n\t\t}\n\n\t\tthis.isTransitioning = true;\n\n\t\taddTransitionEndListener(\n\t\t\tcollapseElement,\n\t\t\t() => {\n\t\t\t\tremoveClass(collapseElement, this.options.collapsingClass);\n\t\t\t\taddClass(collapseElement, this.options.componentClass);\n\t\t\t\taddClass(collapseElement, this.options.showClass);\n\n\t\t\t\tthis.isTransitioning = false;\n\t\t\t\tif (this.options.animateProp) {\n\t\t\t\t\tcollapseElement.style[this.options.animateProp] = null;\n\t\t\t\t}\n\n\t\t\t\tthis.eventNamespaceFn(collapseElement, 'shown');\n\t\t\t},\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tprivate _handleClose(collapseElement: HTMLElement, triggers?: Element[]) {\n\t\tthis.eventNamespaceFn(collapseElement, 'hide');\n\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] =\n\t\t\t\tcollapseElement.scrollHeight + 'px';\n\t\t}\n\n\t\taddClass(collapseElement, this.options.collapsingClass);\n\t\tremoveClass(collapseElement, this.options.componentClass);\n\t\tremoveClass(collapseElement, this.options.showClass);\n\t\t// force reflow to enable transition\n\t\tcollapseElement.offsetWidth; // tslint:disable-line\n\n\t\tif (triggers && triggers.length) {\n\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\tconst target = getSelectorElementFromElement(\n\t\t\t\t\ttrigger,\n\t\t\t\t\tthis.options.dataTargetSelector\n\t\t\t\t);\n\n\t\t\t\tif (target !== null) {\n\t\t\t\t\tif (!hasClass(target, this.options.showClass)) {\n\t\t\t\t\t\tremoveClass(trigger, this.options.activeClass);\n\t\t\t\t\t\ttrigger.setAttribute('aria-expanded', 'false');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\tif (this.parent) {\n\t\t\tconst selector = `[${this.options.dataParentSelector}=\"#${this.parent.id}\"]`;\n\t\t\tconst actives = Array.from(\n\t\t\t\tthis.parent.querySelectorAll(\n\t\t\t\t\t`${selector}.${this.options.showClass}, ${selector}.${this.options.collapsingClass}`\n\t\t\t\t)\n\t\t\t).filter((o) => o !== collapseElement);\n\n\t\t\tif (this.parent && actives.length === 0) {\n\t\t\t\tremoveClass(this.parent, this.options.activeParentClass);\n\t\t\t}\n\t\t}\n\n\t\tthis.isTransitioning = true;\n\t\tif (this.options.animateProp) {\n\t\t\tcollapseElement.style[this.options.animateProp] = null;\n\t\t}\n\n\t\taddTransitionEndListener(\n\t\t\tcollapseElement,\n\t\t\t() => {\n\t\t\t\tthis.isTransitioning = false;\n\n\t\t\t\tremoveClass(collapseElement, this.options.collapsingClass);\n\t\t\t\taddClass(collapseElement, this.options.componentClass);\n\n\t\t\t\tif (this.options.animateProp) {\n\t\t\t\t\tcollapseElement.style[this.options.animateProp] = null;\n\t\t\t\t}\n\n\t\t\t\tthis.eventNamespaceFn(collapseElement, 'hidden');\n\t\t\t},\n\t\t\tthis.options.transitionDuration\n\t\t);\n\t}\n\n\tprivate _addAriaAndCollapsedClass(element: Element, triggers: Element[]) {\n\t\tif (element) {\n\t\t\tconst isOpen = hasClass(element, this.options.showClass);\n\n\t\t\tif (triggers && triggers.length) {\n\t\t\t\ttriggers.forEach((trigger) => {\n\t\t\t\t\tisOpen\n\t\t\t\t\t\t? addClass(trigger, this.options.activeClass)\n\t\t\t\t\t\t: removeClass(trigger, this.options.activeClass);\n\n\t\t\t\t\ttrigger.setAttribute(\n\t\t\t\t\t\t'aria-expanded',\n\t\t\t\t\t\tisOpen.toString().toLowerCase()\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function collapse(\n\telement: HTMLElement,\n\toptions?: CollapseOptions\n): Collapse {\n\tconsole.error(\n\t\t'collapse deprecated: use new Collapse(element, options) instead. (initialized elements can be accessed via Collapse.getInstance()'\n\t);\n\tlet data = element[stringCollapse] as Collapse;\n\n\tif (!data) {\n\t\tdata = new Collapse(element, options);\n\t}\n\n\treturn data;\n}\n","import { asHTMLElement } from '@opten/dom/as-html-element';\nimport { hasClass } from '@opten/dom/has-class';\nimport { isHTMLElement } from '@opten/dom/is-html-element';\n\nimport { Compiler } from '../';\nimport { Component } from '../metadata/component';\nimport { Reflector } from '../reflector';\nimport { Resolver } from '../resolver';\n\n// todo: cache, static, inject?\nconst reflector = new Reflector();\nconst resolver = new Resolver(reflector);\nconst compiler = new Compiler(resolver);\n\nexport function factory(components: any[]) {\n\treturn (rootElement: HTMLElement) => {\n\t\tconst observables = new Map();\n\t\tcomponents.forEach((componentType) => {\n\t\t\t// todo: inject resolver, or cache?\n\t\t\t// todo: static or something to cache?\n\t\t\tconst component = resolver.resolve(componentType);\n\n\t\t\tif (component) {\n\t\t\t\tconst safeRootElement =\n\t\t\t\t\trootElement === document.body ? document : rootElement;\n\t\t\t\tArray.from(\n\t\t\t\t\tsafeRootElement.getElementsByClassName(component.className)\n\t\t\t\t).forEach((node) =>\n\t\t\t\t\tcompiler.compile(component, node as HTMLElement, componentType)\n\t\t\t\t);\n\n\t\t\t\tif (component.observe) {\n\t\t\t\t\tobservables.set(component, componentType);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`No @Component annotation for ${\n\t\t\t\t\t\tcomponentType ? componentType.name : componentType\n\t\t\t\t\t} found!`\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\tif (observables.size) {\n\t\t\tnew MutationObserver((mutations) => {\n\t\t\t\tconst componentInitializer = new Map void>();\n\n\t\t\t\tmutations.forEach((mutation) => {\n\t\t\t\t\tobservables.forEach((value, key) =>\n\t\t\t\t\t\tArray.from(mutation.addedNodes)\n\t\t\t\t\t\t\t.filter((node) => isHTMLElement(node))\n\t\t\t\t\t\t\t.map((node) => asHTMLElement(node))\n\t\t\t\t\t\t\t.forEach((node) => {\n\t\t\t\t\t\t\t\tconst comps = Array.from(\n\t\t\t\t\t\t\t\t\tnode.getElementsByClassName(key.className)\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tif (hasClass(node, key.className)) {\n\t\t\t\t\t\t\t\t\tcomps.push(node);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tcomps.forEach((component) => {\n\t\t\t\t\t\t\t\t\tcomponentInitializer.set(component as HTMLElement, () =>\n\t\t\t\t\t\t\t\t\t\tcompiler.compile(key, component as HTMLElement, value)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t})\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\t\tcomponentInitializer.forEach((c) => c());\n\t\t\t}).observe(document.body, {\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true,\n\t\t\t});\n\t\t}\n\t};\n}\n","import { Component } from './metadata/component';\nimport { Query } from './metadata/di';\nimport { OnInit } from './metadata/lifecycle';\nimport { Resolver } from './resolver';\nimport { isType } from './util/type';\n\n// todo: move whole project to @opten/initializer?\nexport class Compiler {\n\tprivate componentCache = new Map();\n\n\tconstructor(private resolver: Resolver) {}\n\n\tcompile(\n\t\tcomponent: Component,\n\t\tnode: HTMLElement,\n\t\tcomponentType: /*Type*/ any\n\t) {\n\t\t// todo: cache everything?\n\n\t\t// todo: cache that also?\n\t\tconst constructor = new componentType(node);\n\n\t\tif (this.componentCache.has(node)) {\n\t\t\tthis.componentCache.get(node).push(constructor);\n\t\t} else {\n\t\t\tthis.componentCache.set(node, [constructor]);\n\t\t}\n\n\t\tObject.keys(component.queries).forEach((propName) => {\n\t\t\tconst query: Query = component.queries[propName];\n\n\t\t\t// todo: why do we have to inject the resolver?\n\t\t\t// can we not get the class name by some other way?\n\t\t\tconst target = this.resolver.resolve(query.selector);\n\n\t\t\tif (target) {\n\t\t\t\tconst targetNode = query.descendants ? node : document;\n\t\t\t\tconst nodes = targetNode.getElementsByClassName(target.className);\n\n\t\t\t\tconst cache = Array.from(nodes)\n\t\t\t\t\t.filter((o) => (query.filter ? query.filter(o) : true))\n\t\t\t\t\t.map((e) => this.componentCache.get(e as HTMLElement))\n\t\t\t\t\t.filter((e) => e !== undefined && e !== null)\n\t\t\t\t\t.reduce((acc, val) => acc.concat(val), [])\n\t\t\t\t\t.filter((f) => f.constructor === query.selector);\n\n\t\t\t\tconstructor[propName] = query.first ? cache[0] : cache;\n\t\t\t}\n\t\t});\n\n\t\tif (isType(constructor.onInit)) {\n\t\t\t(constructor as OnInit).onInit();\n\t\t}\n\t}\n}\n","import { makeDecorator, TypeDecorator } from '../util/decorators';\nimport { makeMetadataFactory, MetadataFactory } from '../util/factories';\n\nexport interface ComponentDecorator {\n\t(obj: Component): TypeDecorator;\n\tnew (obj: Component): Component;\n}\n\nexport interface Component {\n\tclassName?: string;\n\tobserve?: boolean;\n\tqueries?: { [key: string]: any };\n}\n\n// tslint:disable-next-line:variable-name\nexport const Component: ComponentDecorator = makeDecorator(\n\t'Component',\n\t(c: Component = {}) => ({ ...c })\n);\n\nexport const createComponent: MetadataFactory = makeMetadataFactory<\n\tComponent\n>('Component', (c: Component = {}) => ({ ...c }));\n","import { ANNOTATIONS, PROP_METADATA } from '../util/decorators';\nimport { isType, Type } from '../util/type';\n\n// todo: @opten/reflector? or @opten/initializer/reflector?\nexport class Reflector {\n\tannotations(typeOrFunc: Type): any[] {\n\t\tif (!isType(typeOrFunc)) {\n\t\t\treturn [];\n\t\t}\n\t\tconst parentCtor = getParentCtor(typeOrFunc);\n\t\tconst ownAnnotations = this._ownAnnotations(typeOrFunc, parentCtor) || [];\n\t\tconst parentAnnotations =\n\t\t\tparentCtor !== Object ? this.annotations(parentCtor) : [];\n\t\treturn parentAnnotations.concat(ownAnnotations);\n\t}\n\n\tpropMetadata(typeOrFunc: any): { [key: string]: any[] } {\n\t\tif (!isType(typeOrFunc)) {\n\t\t\treturn {};\n\t\t}\n\t\tconst parentCtor = getParentCtor(typeOrFunc);\n\t\tconst propMetadata: { [key: string]: any[] } = {};\n\t\tif (parentCtor !== Object) {\n\t\t\tconst parentPropMetadata = this.propMetadata(parentCtor);\n\t\t\tObject.keys(parentPropMetadata).forEach((propName) => {\n\t\t\t\tpropMetadata[propName] = parentPropMetadata[propName];\n\t\t\t});\n\t\t}\n\t\tconst ownPropMetadata = this._ownPropMetadata(typeOrFunc, parentCtor);\n\t\tif (ownPropMetadata) {\n\t\t\tObject.keys(ownPropMetadata).forEach((propName) => {\n\t\t\t\tconst decorators: any[] = [];\n\t\t\t\tif (propMetadata.hasOwnProperty(propName)) {\n\t\t\t\t\tdecorators.push(...propMetadata[propName]);\n\t\t\t\t}\n\t\t\t\tdecorators.push(...ownPropMetadata[propName]);\n\t\t\t\tpropMetadata[propName] = decorators;\n\t\t\t});\n\t\t}\n\t\treturn propMetadata;\n\t}\n\n\tprivate _ownAnnotations(\n\t\ttypeOrFunc: Type,\n\t\tparentCtor: any\n\t): any[] | null {\n\t\t// API for metadata created by invoking the decorators.\n\t\tif (typeOrFunc.hasOwnProperty(ANNOTATIONS)) {\n\t\t\treturn (typeOrFunc as any)[ANNOTATIONS];\n\t\t}\n\t\treturn null;\n\t}\n\n\tprivate _ownPropMetadata(\n\t\ttypeOrFunc: any,\n\t\tparentCtor: any\n\t): { [key: string]: any[] } | null {\n\t\t// API for metadata created by invoking the decorators.\n\t\tif (typeOrFunc.hasOwnProperty(PROP_METADATA)) {\n\t\t\treturn (typeOrFunc as any)[PROP_METADATA];\n\t\t}\n\t\treturn null;\n\t}\n}\n\nfunction getParentCtor(ctor: Type): Type {\n\tconst parentProto = Object.getPrototypeOf(ctor.prototype);\n\tconst parentCtor = parentProto ? parentProto.constructor : null;\n\t// Note: We always use `Object` as the null value\n\t// to simplify checking later on.\n\treturn parentCtor || Object;\n}\n","import { Component, createComponent } from '../metadata/component';\nimport { Query } from '../metadata/di';\nimport { Reflector } from '../reflector';\n\nconst QUERY_METADATA_IDENTIFIERS = [\n\t'ComponentRef',\n\t'ComponentRefs',\n\t'ChildRef',\n\t'ChildrenRef',\n];\n\n// todo: @opten/resolver? or @opten/initializer/resolver?\nexport class Resolver {\n\tconstructor(private reflector: Reflector) {}\n\n\t// propertyCache = new Map();\n\n\tresolve(type: any /*Type*/): Component | null {\n\t\tconst typeMetadata = this.reflector.annotations(type);\n\n\t\tif (typeMetadata) {\n\t\t\tconst metadata = findLast(\n\t\t\t\ttypeMetadata,\n\t\t\t\t(c) => c && c.metadataName === 'Component'\n\t\t\t);\n\n\t\t\tif (metadata) {\n\t\t\t\tconst propertyMetadata = this.reflector.propMetadata(type);\n\n\t\t\t\treturn this._mergeWithPropertyMetadata(\n\t\t\t\t\tmetadata,\n\t\t\t\t\tpropertyMetadata,\n\t\t\t\t\ttype\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tprivate _mergeWithPropertyMetadata(\n\t\tcomponent: Component,\n\t\tpropertyMetadata: { [key: string]: any[] },\n\t\tcomponentType: /*Type*/ any\n\t): Component {\n\t\tconst queries: { [key: string]: any } = {};\n\n\t\tObject.keys(propertyMetadata).forEach((propName: string) => {\n\t\t\tconst query = findLast(propertyMetadata[propName], (a) =>\n\t\t\t\tQUERY_METADATA_IDENTIFIERS.some((i) => i && i === a.metadataName)\n\t\t\t);\n\n\t\t\tif (query) {\n\t\t\t\tqueries[propName] = query;\n\t\t\t}\n\t\t});\n\n\t\treturn this._merge(component, queries, componentType);\n\t}\n\n\tprivate _merge(\n\t\tcomponent: Component,\n\t\tqueries: { [key: string]: any },\n\t\tcomponentType: /*Type*/ any\n\t): Component {\n\t\tconst mergedQueries = component.queries\n\t\t\t? { ...component.queries, ...queries }\n\t\t\t: queries;\n\n\t\treturn createComponent({\n\t\t\tclassName: component.className,\n\t\t\tobserve: component.observe,\n\t\t\tqueries: mergedQueries,\n\t\t});\n\t}\n\n\tprivate _getQueriesMetadata(queries: { [key: string]: Query }): any[] {\n\t\tconst res: any[] = [];\n\n\t\tObject.keys(queries).forEach((propertyName: string) => {\n\t\t\tconst query = queries[propertyName];\n\t\t\tres.push(this._getQueryMetadata(query, propertyName));\n\t\t});\n\n\t\treturn res;\n\t}\n\n\tprivate _getQueryMetadata(q: Query, propertyName: string): any {\n\t\treturn {\n\t\t\tdescendants: q.descendants,\n\t\t\tfirst: q.first,\n\t\t\tpropertyName,\n\t\t\tread: false,\n\t\t\tselector: q.selector,\n\t\t};\n\t}\n}\n\nfunction findLast(arr: T[], condition: (value: T) => boolean): T | null {\n\tfor (let i = arr.length - 1; i >= 0; i--) {\n\t\tif (condition(arr[i])) {\n\t\t\treturn arr[i];\n\t\t}\n\t}\n\treturn null;\n}\n","import { Type } from './type';\n\nexport const ANNOTATIONS = '__annotations__';\nexport const PROP_METADATA = '__prop__metadata__';\n\nexport interface TypeDecorator {\n\t// Invoke as ES7 decorator.\n\t>(type: T): T;\n\n\t// Make TypeDecorator assignable to built-in ParameterDecorator type.\n\t// ParameterDecorator is declared in lib.d.ts as a `declare type`\n\t// so we cannot declare this interface as a subtype.\n\t// see https://github.com/angular/angular/issues/3379#issuecomment-126169417\n\t(\n\t\ttarget: object,\n\t\tpropertyKey?: string | symbol,\n\t\tparameterIndex?: number\n\t): void;\n}\n\nexport function makeDecorator(\n\tname: string,\n\tprops?: (...args: any[]) => any,\n\tparentClass?: any,\n\tchainFn?: (fn: TypeDecorator) => void,\n\ttypeFn?: (type: Type, ...args: any[]) => void\n): {\n\tnew (...args: any[]): any;\n\t(...args: any[]): any;\n\t(...args: any[]): (cls: any) => any;\n} {\n\tconst metaCtor = makeMetadataCtor(props);\n\n\tfunction DecoratorFactory(...args: any[]): (cls: any) => any {\n\t\tif (this instanceof DecoratorFactory) {\n\t\t\tmetaCtor.call(this, ...args);\n\t\t\treturn this;\n\t\t}\n\n\t\tconst annotationInstance = new (DecoratorFactory as any)(...args);\n\t\tconst typeDecorator: TypeDecorator = (cls: Type) => {\n\t\t\tif (typeFn) {\n\t\t\t\ttypeFn(cls, ...args);\n\t\t\t}\n\t\t\t// Use of Object.defineProperty is important since it creates non-enumerable property which\n\t\t\t// prevents the property is copied during subclassing.\n\t\t\tconst annotations = cls.hasOwnProperty(ANNOTATIONS)\n\t\t\t\t? (cls as any)[ANNOTATIONS]\n\t\t\t\t: Object.defineProperty(cls, ANNOTATIONS, { value: [] })[ANNOTATIONS];\n\t\t\tannotations.push(annotationInstance);\n\t\t\treturn cls;\n\t\t};\n\t\tif (chainFn) {\n\t\t\tchainFn(typeDecorator);\n\t\t}\n\t\treturn typeDecorator;\n\t}\n\n\tif (parentClass) {\n\t\tDecoratorFactory.prototype = Object.create(parentClass.prototype);\n\t}\n\n\tDecoratorFactory.prototype.metadataName = name;\n\treturn DecoratorFactory as any;\n}\n\nfunction makeMetadataCtor(props?: (...args: any[]) => any): any {\n\treturn function ctor(...args: any[]) {\n\t\tif (props) {\n\t\t\tconst values = props(...args);\n\t\t\tfor (const propName in values) {\n\t\t\t\tif (values.hasOwnProperty(propName)) {\n\t\t\t\t\tthis[propName] = values[propName];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\nexport function makePropDecorator(\n\tname: string,\n\tprops?: (...args: any[]) => any,\n\tparentClass?: any\n): any {\n\tconst metaCtor = makeMetadataCtor(props);\n\n\tfunction PropDecoratorFactory(...args: any[]): any {\n\t\tif (this instanceof PropDecoratorFactory) {\n\t\t\tmetaCtor.apply(this, args);\n\t\t\treturn this;\n\t\t}\n\n\t\tconst decoratorInstance = new (PropDecoratorFactory as any)(...args);\n\n\t\treturn function PropDecorator(target: any, metaName: string) {\n\t\t\tconst constructor = target.constructor;\n\t\t\t// Use of Object.defineProperty is important since it creates non-enumerable property which\n\t\t\t// prevents the property is copied during subclassing.\n\t\t\tconst meta = constructor.hasOwnProperty(PROP_METADATA)\n\t\t\t\t? (constructor as any)[PROP_METADATA]\n\t\t\t\t: Object.defineProperty(constructor, PROP_METADATA, {\n\t\t\t\t\t\tvalue: {},\n\t\t\t\t })[PROP_METADATA];\n\t\t\tmeta[metaName] = (meta.hasOwnProperty(metaName) && meta[metaName]) || [];\n\t\t\tmeta[metaName].unshift(decoratorInstance);\n\t\t};\n\t}\n\n\tif (parentClass) {\n\t\tPropDecoratorFactory.prototype = Object.create(parentClass.prototype);\n\t}\n\n\tPropDecoratorFactory.prototype.metadataName = name;\n\treturn PropDecoratorFactory;\n}\n","export interface MetadataFactory {\n\t(...args: any[]): T;\n\tmetadataName: string;\n\tisTypeOf(obj: any): obj is T;\n}\n\nexport function makeMetadataFactory(\n\tname: string,\n\tprops?: (...args: any[]) => T\n): MetadataFactory {\n\tconst factory: any = (...args: any[]) => {\n\t\tconst values = props ? props(...args) : {};\n\t\treturn {\n\t\t\tmetadataName: name,\n\t\t\t...values,\n\t\t};\n\t};\n\tfactory.isTypeOf = (obj: any) => obj && obj.metadataName === name;\n\tfactory.metadataName = name;\n\treturn factory;\n}\n","// tslint:disable-next-line:variable-name\nexport const Type = Function;\n\nexport function isType(v: any): v is Type {\n\treturn typeof v === 'function';\n}\n\nexport type Type = new (...args: any[]) => T;\n","export function getCookie(key: string) {\n\tif (!key) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\tdecodeURIComponent(\n\t\t\tdocument.cookie.replace(\n\t\t\t\tnew RegExp(\n\t\t\t\t\t`(?:(?:^|.*;)\\\\s*${encodeURIComponent(key).replace(\n\t\t\t\t\t\t/[\\-\\.\\+\\*]/g,\n\t\t\t\t\t\t'\\\\$&'\n\t\t\t\t\t)}\\\\s*\\\\=\\\\s*([^;]*).*$)|^.*$`\n\t\t\t\t),\n\t\t\t\t'$1'\n\t\t\t)\n\t\t) || null\n\t);\n}\n","export function setCookie(\n\tkey: string,\n\tvalue: string,\n\tend: number | string | Date,\n\tpath = '/',\n\tdomain = '',\n\tsecure = false\n) {\n\tif (!key || /^(?:expires|max\\-age|path|domain|secure)$/i.test(key)) {\n\t\treturn false;\n\t}\n\tlet expires = '';\n\tif (end) {\n\t\tswitch (end.constructor) {\n\t\t\tcase Number:\n\t\t\t\texpires =\n\t\t\t\t\tend === Infinity\n\t\t\t\t\t\t? '; expires=Fri, 31 Dec 9999 23:59:59 GMT'\n\t\t\t\t\t\t: '; max-age=' + end;\n\t\t\t\tbreak;\n\t\t\tcase String:\n\t\t\t\texpires = `; expires=${end}`;\n\t\t\t\tbreak;\n\t\t\tcase Date:\n\t\t\t\texpires = `; expires=${(end as Date).toUTCString()}`;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\texpires = '';\n\t\t}\n\t}\n\tconst keyStr = encodeURIComponent(key);\n\tconst valueStr = encodeURIComponent(value);\n\tconst domainStr = `${domain ? `; domain=${domain}` : ''}`;\n\tconst pathStr = `${path ? `; path=${path}` : ''}`;\n\tconst secureStr = `${secure ? '; secure' : ''}`;\n\tdocument.cookie = `${keyStr}=${valueStr}${expires}${domainStr}${pathStr}${secureStr}`;\n\n\treturn true;\n}\n","import { getClass } from '../get-class';\r\nimport { hasClass } from '../has-class';\r\n\r\nexport function addClass(element: Element, className: string) {\r\n\tif (element && !hasClass(element, className)) {\r\n\t\telement.setAttribute('class', getClass(element).trim() + ' ' + className);\r\n\t}\r\n}\r\n","import { isHTMLElement } from '../is-html-element';\r\n\r\nexport function asHTMLElement(o: any): HTMLElement {\r\n\tif (isHTMLElement(o)) {\r\n\t\treturn o as HTMLElement;\r\n\t}\r\n\treturn null;\r\n}\r\n","import { addClass } from '../add-class';\r\nimport { removeClass } from '../remove-class';\r\n\r\nexport function changeClass(element: Element, className: string, add = true) {\r\n\tif (add) {\r\n\t\taddClass(element, className);\r\n\t} else {\r\n\t\tremoveClass(element, className);\r\n\t}\r\n}\r\n","const classRegexCache = {};\r\nexport function classRegex(className: string): RegExp {\r\n\tif (!classRegexCache[className]) {\r\n\t\tclassRegexCache[className] = new RegExp('(\\\\s|^)' + className + '(\\\\s|$)');\r\n\t}\r\n\treturn classRegexCache[className];\r\n}\r\n","export function getClass(element: Element) {\r\n\treturn element.getAttribute('class') || '';\r\n}\r\n","import { getSelectorFromElement } from '../get-selector-from-element';\r\n\r\nexport function getSelectorElementFromElement(\r\n\telement: Element,\r\n\tattribute = 'data-target',\r\n\tfallbackHref = true\r\n): HTMLElement {\r\n\tconst selector = getSelectorFromElement(element, attribute, fallbackHref);\r\n\r\n\tif (selector && selector.indexOf('#') === 0) {\r\n\t\treturn document.getElementById(selector.substr(1, selector.length - 1));\r\n\t}\r\n\r\n\treturn null;\r\n}\r\n","export function getSelectorFromElement(\r\n\telement: Element,\r\n\tattribute = 'data-target',\r\n\tfallbackHref = true\r\n): string {\r\n\tlet selector = element.getAttribute(attribute);\r\n\r\n\tif (!selector && fallbackHref) {\r\n\t\tselector = element.getAttribute('href') || '';\r\n\t\tselector = /^#.*/i.test(selector) ? selector : null;\r\n\t}\r\n\r\n\treturn selector;\r\n}\r\n","export function getWindowScrollTop() {\r\n\treturn window.pageYOffset !== undefined\r\n\t\t? window.pageYOffset\r\n\t\t: ((document.documentElement ||\r\n\t\t\t\tdocument.body.parentNode ||\r\n\t\t\t\tdocument.body) as HTMLElement).scrollTop;\r\n}\r\n","import { classRegex } from '../class-regex';\r\nimport { getClass } from '../get-class';\r\n\r\nexport function hasClass(element: Element, className: string): boolean {\r\n\treturn element && classRegex(className).test(getClass(element));\r\n}\r\n","export function isHTMLElement(o: any) {\r\n\treturn typeof HTMLElement === 'object'\r\n\t\t? o instanceof HTMLElement\r\n\t\t: o &&\r\n\t\t\t\ttypeof o === 'object' &&\r\n\t\t\t\to !== null &&\r\n\t\t\t\to.nodeType === 1 &&\r\n\t\t\t\ttypeof o.nodeName === 'string';\r\n}\r\n","import { classRegex } from '../class-regex';\r\nimport { getClass } from '../get-class';\r\nimport { hasClass } from '../has-class';\r\n\r\nexport function removeClass(element: Element, className: string) {\r\n\tif (element && hasClass(element, className)) {\r\n\t\tconst regex = classRegex(className);\r\n\t\telement.setAttribute('class', getClass(element).replace(regex, ' ').trim());\r\n\t}\r\n}\r\n\r\nexport function removeClassFactory(className: string) {\r\n\treturn (element: Element) => {\r\n\t\tremoveClass(element, className);\r\n\t};\r\n}\r\n\r\nexport function removeClassOnCollection(\r\n\telements: Element[],\r\n\tclassName: string\r\n) {\r\n\telements.forEach(removeClassFactory(className));\r\n}\r\n","import { changeClass } from '../change-class';\r\nimport { hasClass } from '../has-class';\r\n\r\nexport function toggleClass(\r\n\telement: Element,\r\n\tclassName: string,\r\n\tstate?: boolean\r\n) {\r\n\tchangeClass(\r\n\t\telement,\r\n\t\tclassName,\r\n\t\tstate === undefined ? !hasClass(element, className) : state\r\n\t);\r\n}\r\n","export function dispatchCustomEvent(element: EventTarget, eventName: string) {\n\tconst event = new CustomEvent(eventName);\n\telement.dispatchEvent(event);\n}\n","export type IEventHandler = (args: TArgs) => void;\n\nclass Subscription {\n\tisExecuted = false;\n\n\tconstructor(public handler: IEventHandler, public isOnce: boolean) {}\n\n\texecute(args: TArgs) {\n\t\tif (!this.isOnce || !this.isExecuted) {\n\t\t\tthis.isExecuted = true;\n\t\t\tthis.handler(args);\n\t\t}\n\t}\n}\n\nexport class EventDispatcher {\n\tprivate subscriptions = new Array>();\n\n\tdispatch(args: TArgs): void {\n\t\tfor (const sub of [...this.subscriptions]) {\n\t\t\tsub.execute(args);\n\t\t\tthis.cleanup(sub);\n\t\t}\n\t}\n\n\tsubscribe(fn: IEventHandler) {\n\t\tif (fn) {\n\t\t\tthis.subscriptions.push(new Subscription(fn, false));\n\t\t}\n\t\treturn this;\n\t}\n\n\tone(fn: IEventHandler) {\n\t\tif (fn) {\n\t\t\tthis.subscriptions.push(new Subscription(fn, true));\n\t\t}\n\t\treturn this;\n\t}\n\n\thas(fn: IEventHandler): boolean {\n\t\tif (!fn) {\n\t\t\treturn false;\n\t\t}\n\t\treturn this.subscriptions.some((sub) => sub.handler === fn);\n\t}\n\n\tunsubscribe(fn: IEventHandler) {\n\t\tif (!fn) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (let i = 0; i < this.subscriptions.length; i++) {\n\t\t\tif (this.subscriptions[i].handler === fn) {\n\t\t\t\tthis.subscriptions.splice(i, 1);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tclear(): void {\n\t\tthis.subscriptions.splice(0, this.subscriptions.length);\n\t}\n\n\tprivate cleanup(sub: Subscription) {\n\t\tif (sub.isOnce && sub.isExecuted) {\n\t\t\tconst i = this.subscriptions.indexOf(sub);\n\t\t\tif (i > -1) {\n\t\t\t\tthis.subscriptions.splice(i, 1);\n\t\t\t}\n\t\t}\n\t}\n}\n","import { dispatchCustomEvent } from '../dispatch-custom-event';\n\nexport function eventNamespaceFactory(namespace: string) {\n\treturn (element: EventTarget, eventName: string) =>\n\t\tdispatchCustomEvent(element, eventName + '.' + namespace);\n}\n","export function debounce(func: Function, wait: number, immediate?: boolean) {\n\tlet timeout;\n\tlet result;\n\treturn function debounceFn() {\n\t\tconst context = this;\n\t\tconst args = arguments;\n\t\tconst later = () => {\n\t\t\ttimeout = null;\n\t\t\tif (!immediate) {\n\t\t\t\tresult = func.apply(context, args);\n\t\t\t}\n\t\t};\n\t\tconst callNow = immediate && !timeout;\n\t\tclearTimeout(timeout);\n\t\ttimeout = setTimeout(later, wait);\n\t\tif (callNow) {\n\t\t\tresult = func.apply(context, args);\n\t\t}\n\t\treturn result;\n\t};\n}\n","import { AnimationFunction } from '@opten/animation/animation-function';\r\nimport { linearTween } from '@opten/animation/linear-tween';\r\nimport { scrollTo } from '../scroll-to';\r\n\r\nexport function scrollToOffset(\r\n\tdistance: number,\r\n\tanimationFunction: AnimationFunction = linearTween,\r\n\tduration = 300,\r\n\toffset = 0,\r\n\twrapper: HTMLElement | Window = window\r\n) {\r\n\tscrollTo(distance + offset, animationFunction, duration, wrapper);\r\n}\r\n","import { AnimationFunction } from '@opten/animation/animation-function';\r\nimport { getWindowScrollTop } from '@opten/dom/get-window-scroll-top';\r\n\r\nexport function scrollTo(\r\n\tdistance: number,\r\n\tanimationFunction: AnimationFunction = (t, b, c, d) => {\r\n\t\treturn (c * t) / d + b;\r\n\t},\r\n\tduration = 300,\r\n\twrapper: HTMLElement | Window = window\r\n) {\r\n\tlet start = getWindowScrollTop();\r\n\tlet timeStart: number;\r\n\tlet timeElapsed: number;\r\n\r\n\tif (wrapper instanceof HTMLElement) {\r\n\t\tstart = wrapper.scrollTop;\r\n\t}\r\n\r\n\trequestAnimationFrame.call(window, (time) => {\r\n\t\ttimeStart = time;\r\n\t\tloop(time);\r\n\t});\r\n\r\n\tfunction loop(time) {\r\n\t\ttimeElapsed = time - timeStart;\r\n\r\n\t\tif (wrapper instanceof Window) {\r\n\t\t\twrapper.scrollTo(\r\n\t\t\t\t0,\r\n\t\t\t\tanimationFunction(timeElapsed, start, distance, duration)\r\n\t\t\t);\r\n\r\n\t\t\tif (timeElapsed < duration) {\r\n\t\t\t\trequestAnimationFrame.call(window, loop);\r\n\t\t\t} else {\r\n\t\t\t\twrapper.scrollTo(0, start + distance);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\twrapper.scrollTop = animationFunction(\r\n\t\t\t\ttimeElapsed,\r\n\t\t\t\tstart,\r\n\t\t\t\tdistance,\r\n\t\t\t\tduration\r\n\t\t\t);\r\n\r\n\t\t\tif (timeElapsed < duration) {\r\n\t\t\t\trequestAnimationFrame.call(window, loop);\r\n\t\t\t} else {\r\n\t\t\t\twrapper.scrollTop = start + distance;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n","import { dispatchCustomEvent } from '@opten/events/dispatch-custom-event';\nimport { getTransitionEndEventName } from '../get-transition-end-event-name';\n\nconst transitionEndEventName = getTransitionEndEventName();\n\nexport function addTransitionEndListener(\n\telement: Element,\n\tcallback: () => void,\n\tfallbackDuration = 0,\n\tremove = true\n): void {\n\tlet called = false;\n\tconst listener = (event: Event) => {\n\t\tcalled = true;\n\t\tif (remove) {\n\t\t\telement.removeEventListener(transitionEndEventName as string, listener);\n\t\t}\n\t\tcallback();\n\t};\n\n\tif (transitionEndEventName === false) {\n\t\tsetTimeout(() => {\n\t\t\tcallback();\n\t\t}, fallbackDuration);\n\t} else {\n\t\telement.addEventListener(transitionEndEventName, listener);\n\t\t// https://github.com/twbs/bootstrap/blob/v4.0.0/js/src/util.js#L49\n\t\tif (fallbackDuration) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!called) {\n\t\t\t\t\tdispatchCustomEvent(element, transitionEndEventName);\n\t\t\t\t}\n\t\t\t}, fallbackDuration);\n\t\t}\n\t}\n}\n","export function getTransitionEndEventName(): string | false {\n\tconst element = document.createElement('_');\n\tconst transitions = {\n\t\tWebkitTransition: 'webkitTransitionEnd',\n\t\ttransition: 'transitionend',\n\t};\n\n\tfor (const transition in transitions) {\n\t\tif (element.style[transition] !== undefined) {\n\t\t\treturn transitions[transition];\n\t\t}\n\t}\n\n\treturn false;\n}\n","/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as 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.1\";\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 const {segments, points} = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments) {\n const {start, end} = segment;\n const firstPoint = points[start];\n const lastPoint = points[findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {move: lineLoop});\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction 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","/*!\n * Chart.js v3.7.1\n * https://www.chartjs.org\n * (c) 2022 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.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","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tif(__webpack_module_cache__[moduleId]) {\n\t\treturn __webpack_module_cache__[moduleId].exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","import { CollapseComponent } from '@opten/collapse';\r\nimport { factory } from '@opten/compiler/factory';\r\nimport {\r\n\tChart,\r\n\tFiller,\r\n\tLineElement,\r\n\tPointElement,\r\n\tRadarController,\r\n\tRadialLinearScale,\r\n} from 'chart.js';\r\nimport { AlertComponent } from './components/shared/alert';\r\n\r\nimport { ChartComponent } from './components/pgf/chart';\r\nimport { TabComponent } from './components/pgf/tab';\r\nimport { DatepickerComponent } from './components/shared/datepicker';\r\nimport { FilterComponent } from './components/shared/filter';\r\nimport { FormCheckboxesComponent } from './components/shared/form-checkboxes';\r\nimport { FormSelectUpdateComponent } from './components/shared/form-select-updater';\r\nimport { FormTemplatesComponent } from './components/shared/form-templates';\r\nimport { FormTotalComponent } from './components/shared/form-total';\r\nimport { GlobalVarsComponent } from './components/shared/globalvars';\r\nimport { GridComponent } from './components/shared/grid';\r\nimport { InputComponent } from './components/shared/input';\r\nimport { ModalComponent } from './components/shared/modal';\r\nimport { PageTopComponent } from './components/shared/page-top';\r\nimport { PageTransitionComponent } from './components/shared/page-transition';\r\nimport { PasswordRevealComponent } from './components/shared/password-reveal';\r\nimport { ProgressComponent } from './components/shared/progress';\r\nimport { ReCaptchaComponent } from './components/shared/recaptcha';\r\n\r\nChart.register(\r\n\tRadarController,\r\n\tRadialLinearScale,\r\n\tPointElement,\r\n\tLineElement,\r\n\tFiller\r\n);\r\n\r\nconst initialize = factory([\r\n\tCollapseComponent,\r\n\tModalComponent,\r\n\tFilterComponent,\r\n\tProgressComponent,\r\n\tInputComponent,\r\n\tFormTotalComponent,\r\n\tFormTemplatesComponent,\r\n\tFormCheckboxesComponent,\r\n\tFormSelectUpdateComponent,\r\n\tPasswordRevealComponent,\r\n\tDatepickerComponent,\r\n\tPageTransitionComponent,\r\n\tGridComponent,\r\n\tReCaptchaComponent,\r\n\tPageTopComponent,\r\n\tChartComponent,\r\n\tTabComponent,\r\n\tAlertComponent,\r\n]);\r\n\r\ninitialize(document.body);\r\n\r\nPageTransitionComponent.onPageChange.subscribe((container) => {\r\n\tinitialize(container);\r\n});\r\n\r\nconst vars = new GlobalVarsComponent();\r\n"],"sourceRoot":""}