{"version":3,"file":"application-80f08868.js","sources":["../../../node_modules/@oddcamp/cocoon-vanilla-js/index.js","../../../assets/javascript/shared/atoms/form-field.js","../../../assets/javascript/shared/atoms/form-hint.js","../../../assets/javascript/shared/atoms/form-failure.js","../../../assets/javascript/shared/components/confirm-modal.js","../../../assets/javascript/shared/components/session-modal.js","../../../assets/javascript/shared/components/private-confirmation.js","../../../assets/javascript/shared/components/click-reveal.js","../../../assets/javascript/application/components/common-card.js","../../../assets/javascript/application/components/account-card.js","../../../assets/javascript/application/components/account-dropdown.js","../../../node_modules/chart.js/dist/chunks/helpers.segment.js","../../../node_modules/chart.js/dist/chart.esm.js","../../../assets/javascript/application/components/account-pie-chart.js","../../../assets/javascript/application/components/account-renamer.js","../../../assets/javascript/application/components/delete-confrimation.js","../../../assets/javascript/application/components/withdraw.js","../../../assets/javascript/application/components/withdraw-confirmation.js","../../../assets/javascript/application/components/withdraw-account-details.js","../../../node_modules/nanoid/url-alphabet/index.js","../../../node_modules/nanoid/index.browser.js","../../../assets/javascript/shared/utils/input-required.js","../../../assets/javascript/application/pages/auth-page.js","../../../node_modules/sticky-sidebar/src/sticky-sidebar.js","../../../assets/javascript/application/pages/home-page.js","../../../assets/javascript/application/pages/kyc-page.js","../../../assets/javascript/application/pages/transfers-page.js","../../../assets/javascript/application/pages/new-payment-page.js","../../../assets/javascript/application/pages/new-fixed-term-account.js"],"sourcesContent":["let cocoon_element_counter = 0;\n\nconst create_new_id = function() {\n return (new Date().getTime() + cocoon_element_counter++);\n};\n\nconst newcontent_braced = function(id) {\n return '[' + id + ']$1';\n};\n\nconst newcontent_underscord = function(id) {\n return '_' + id + '_$1';\n};\n\nconst getInsertionNodeElem = function(insertionNode, insertionTraversal, btn) {\n if(!insertionNode){\n return btn.parentNode;\n }\n\n if(typeof insertionNode === 'function') {\n if(insertionTraversal) {\n console.warn('association-insertion-traversal is ignored, because association-insertion-node is given as a function.');\n }\n return insertionNode(btn);\n }\n\n if(typeof insertionNode == 'string') {\n if (insertionTraversal) {\n // @TODO\n // - prevUntil\n // - nextUntil\n\n const prevNext = {\n prev: 'previousElementSibling',\n next: 'nextElementSibling',\n }[insertionTraversal]\n\n if (prevNext) {\n const el = btn[prevNext].closest(insertionNode)\n if (el === btn[prevNext]) return el\n }\n else if (insertionTraversal == 'closest') {\n return btn.closest(insertionNode)\n }\n else {\n console.warn('The provided association-insertion-traversal is not supported');\n }\n }\n else {\n return insertionNode == 'this' ? btn : document.querySelector(insertionNode);\n }\n }\n};\n\nconst addFieldsHandler = (btn) => {\n const assoc = btn.getAttribute('data-association');\n const assocs = btn.getAttribute('data-associations');\n const content = btn.getAttribute('data-association-insertion-template');\n const insertionNode = btn.getAttribute('data-association-insertion-node');\n const insertionTraversal = btn.getAttribute('data-association-insertion-traversal');\n let insertionMethod = btn.getAttribute('data-association-insertion-method') || btn.getAttribute('data-association-insertion-position') || 'before';\n let new_id = create_new_id();\n let count = parseInt(btn.getAttribute('data-count'), 10);\n let regexp_braced = new RegExp('\\\\[new_' + assoc + '\\\\](.*?\\\\s)', 'g');\n let regexp_underscord = new RegExp('_new_' + assoc + '_(\\\\w*)', 'g');\n let new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n let new_contents = [];\n\n if(new_content == content) {\n regexp_braced = new RegExp('\\\\[new_' + assocs + '\\\\](.*?\\\\s)', 'g');\n regexp_underscord = new RegExp('_new_' + assocs + '_(\\\\w*)', 'g');\n new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n }\n\n new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n new_contents = [new_content];\n\n count = (isNaN(count) ? 1 : Math.max(count, 1));\n count -= 1;\n\n while(count) {\n new_id = create_new_id();\n new_content = content.replace(regexp_braced, newcontent_braced(new_id));\n new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));\n new_contents.push(new_content);\n count -= 1;\n }\n\n const insertionNodeElem = getInsertionNodeElem(insertionNode, insertionTraversal, btn);\n\n if(!insertionNodeElem || (insertionNodeElem.length == 0)) {\n console.warn(\"Couldn't find the element to insert the template. Make sure your `data-association-insertion-*` on `link_to_add_association` is correct.\");\n }\n\n new_contents.forEach((node) => {\n const event = new CustomEvent('cocoon:before-insert', {detail: node, bubbles: true, cancelable: true});\n insertionNodeElem.dispatchEvent(event);\n\n if(!event.defaultPrevented) {\n switch(insertionMethod) {\n default:\n case 'before':\n insertionMethod = 'beforebegin';\n break;\n case 'after':\n insertionMethod = 'afterend';\n break;\n case 'append':\n insertionMethod = 'beforeend';\n break;\n case 'prepend':\n insertionMethod = 'afterbegin';\n break;\n }\n\n insertionNodeElem.insertAdjacentHTML(insertionMethod, node);\n insertionNodeElem.dispatchEvent(\n new CustomEvent('cocoon:after-insert', {detail: node, bubbles: true, cancelable: true})\n );\n }\n });\n};\n\ndocument.addEventListener('click', (e) => {\n if(e.target.closest('.add_fields')) {\n e.preventDefault();\n e.stopPropagation();\n addFieldsHandler(e.target.closest('.add_fields'));\n }\n});\n\nconst removeFieldsHandler = (btn) => {\n const wrapperClass = btn.getAttribute('data-wrapper-class') || 'nested-fields';\n const nodeToDelete = btn.closest(`.${wrapperClass}`);\n const triggerNode = nodeToDelete.parentNode;\n\n const event = new CustomEvent('cocoon:before-remove', {detail: nodeToDelete, bubbles: true, cancelable: true});\n triggerNode.dispatchEvent(event);\n\n if(!event.defaultPrevented) {\n const timeout = triggerNode.getAttribute('data-remove-timeout') || 0;\n\n setTimeout(() => {\n if(btn.classList.contains('dynamic')) {\n // nodeToDelete.remove();\n nodeToDelete.parentNode.removeChild(nodeToDelete);\n }\n else {\n const input = nodeToDelete.querySelector('input[type=hidden][name*=\"[_destroy]\"');\n if(input) {\n input.value = 1;\n }\n nodeToDelete.style.display = 'none';\n }\n\n triggerNode.dispatchEvent(\n new CustomEvent('cocoon:after-remove', {detail: nodeToDelete, bubbles: true, cancelable: true})\n );\n }, timeout);\n }\n};\n\ndocument.addEventListener('click', (e) => {\n const btn =\n e.target.closest('.remove_fields.dynamic') ||\n e.target.closest('.remove_fields.existing');\n\n if(btn) {\n e.preventDefault();\n e.stopPropagation();\n removeFieldsHandler(btn);\n }\n});\n\nconst hideFields = () => {\n Array.from(document.querySelectorAll('.remove_fields.existing.destroyed')).forEach((btn) => {\n const wrapperClass = btn.getAttribute('data-wrapper-class') || 'nested-fields';\n btn.closest(`.${wrapperClass}`).style.display = 'none';\n });\n};\n\ndocument.addEventListener('DOMContentLoaded', hideFields);\ndocument.addEventListener('turbolinks:load', hideFields);\ndocument.addEventListener('page:load', hideFields);\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass FormField extends Controller {\n static targets = [`input`, `label`, `note`, `error`]\n\n connect() {\n this.element.addEventListener(`setRequired`, this.setRequired)\n\n if (this.hasInputTarget)\n this.inputTarget.addEventListener(`setValid`, this.toggleValid)\n\n if (this.hasErrorTarget) {\n this.element.addEventListener(`setError`, this.setError)\n\n if (this.hasInputTarget)\n this.inputTarget.addEventListener(`setError`, this.setError)\n }\n\n if (this.hasNoteTarget) {\n this.element.addEventListener(`setNote`, this.setError)\n\n if (this.hasInputTarget)\n this.inputTarget.addEventListener(`setNote`, this.setNote)\n }\n }\n\n setRequired = (e) => {\n const { required } = e.detail\n\n if (this.hasInputTarget) {\n this.inputTargets.forEach((i) => {\n i.required = required\n i.ariaRequired = required\n })\n }\n\n if (this.hasLabelTarget) {\n const labelEl = this.labelTarget.querySelector(`label`)\n\n if (labelEl) {\n const requiredEl = labelEl.querySelector(`abbr`)\n\n if (required) {\n if (requiredEl) {\n requiredEl.classList.remove(`hidden`)\n } else {\n labelEl.insertAdjacentHTML(\n `beforeend`,\n ` ${labelEl.dataset.requiredHtml}`\n )\n }\n } else {\n if (requiredEl) {\n requiredEl.classList.add(`hidden`)\n }\n }\n }\n }\n }\n\n setError = (e) => {\n const { message } = e.detail\n const isError = !!message\n this.element.classList.toggle(`form-field--error`, isError)\n this.errorTarget.innerHTML = message\n\n if (this.hasInputTarget) {\n this.inputTargets.forEach((i) => i.setAttribute(`aria-invalid`, isError))\n }\n }\n\n setNote = (e) => {\n const { message } = e.detail\n this.element.classList.toggle(`form-field--note`, !!message)\n this.noteTarget.innerHTML = message\n }\n\n toggleValid = (e) => {\n this.element.classList.toggle(`form-field--valid`, e.detail.valid)\n }\n}\n\nStimulus.register(`form-field`, FormField)\n","import { Controller } from \"@hotwired/stimulus\"\nimport tippy from \"tippy.js\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass FormHint extends Controller {\n static values = { placeholder: String }\n #tippy = null\n\n connect() {\n this.#tippy = tippy(this.element, {\n content: this.element.innerHTML,\n allowHTML: true,\n interactive: true,\n interactiveBorder: 30,\n })\n\n this.element.innerHTML = this.placeholderValue\n }\n\n disconnect() {\n this.#tippy.destroy()\n }\n}\n\nStimulus.register(`form-hint`, FormHint)\n","import domReady from \"../utils/dom-ready\"\n\nconst scrollToIt = (el) => {\n el.tabIndex = 0\n el.focus()\n el.scrollIntoView(true)\n}\n\n// for turbo forms\n// scroll to `.form-failure` element if form submission failed.\n// usually Turbo forms scroll viewport to the top of the form automatically,\n// we need to patch the cases when the `.form-element` is placed somewhere\n// else rather than beginning of the form\n\ndocument.documentElement.addEventListener(`turbo:submit-end`, (e) =>\n window.setTimeout(() => {\n const formId = e.detail.formSubmission.formElement.id\n if (formId) {\n const formEl = document.getElementById(formId)\n if (formEl) {\n const failureEl = formEl.querySelector(`.form-failure`)\n if (failureEl) {\n scrollToIt(failureEl)\n }\n }\n }\n }, 50)\n)\n\n// for usual forms\n// scrolls to the very first `.form-failure` is it exists\n\ndomReady(() => {\n const failureEl = document.querySelector(`.form-failure`)\n if (failureEl) {\n scrollToIt(failureEl)\n }\n})\n","import { Controller } from \"@hotwired/stimulus\"\nimport throttle from \"raf-throttle\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass ConfirmModal extends Controller {\n static targets = [`box`, `cancel`, `confirm`]\n static values = { show: Boolean }\n\n #winResizeHandler = null\n #alignmentEl =\n document.querySelector(`.auth-page-layout__main`) ||\n document.querySelector(`.layout-users__main`)\n\n connect() {\n this.element.__MODAL__.on(`show`, () => {\n if (this.hasCancelTarget) this.cancelTarget.focus()\n else if (this.hasConfirmTarget) this.confirmTarget.focus()\n })\n\n if (this.#alignmentEl) {\n this.element.__MODAL__.on(`show`, this.align)\n this.#winResizeHandler = throttle(this.align)\n window.addEventListener(`resize`, this.#winResizeHandler)\n }\n\n if (this.showValue) this.element.__MODAL__.show()\n }\n\n disconnect() {\n window.addEventListener(`resize`, this.#winResizeHandler)\n }\n\n cancel = () => {\n this.element.__MODAL__.hide()\n }\n\n align = () => {\n if (!this.element.__MODAL__.shown) return\n\n const { x, width } = this.#alignmentEl.getBoundingClientRect()\n const pos = x ? x / 2 : 0\n\n this.boxTarget.style.maxWidth = null\n const maxWidth = Math.min(\n parseFloat(\n window.getComputedStyle(this.boxTarget).getPropertyValue(`max-width`)\n ),\n width\n )\n this.boxTarget.style.maxWidth = `${maxWidth}px`\n this.boxTarget.style.transform = `translateX(${pos}px)`\n }\n}\n\nStimulus.register(`confirm-modal`, ConfirmModal)\n","import { Controller } from \"@hotwired/stimulus\"\nimport { triggerEvent } from \"@oddcamp/js-utils/src/event\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nconst nowSecs = () => Math.round(+new Date() / 1000)\n\n// countdown\n\nclass SessionModalCountdown extends Controller {\n static values = {\n renewUrl: String,\n expires: Number,\n nextTry: Number,\n tolerance: Number,\n autoRenew: Boolean,\n }\n static targets = [`timer`]\n #countdownStarted = false\n #interval = null\n #userActivity = nowSecs()\n\n connect() {\n this.start()\n this.initTrackUserActivity()\n }\n\n disconnect = () => {\n this.stop()\n this.deinitTrackUserActivity()\n }\n\n start = () => {\n this.stop()\n this.#countdownStarted = false\n this.#interval = window.setInterval(this.update, 1000)\n }\n\n stop = () => {\n window.clearInterval(this.#interval)\n }\n\n update = () => {\n const now = nowSecs()\n const expiresIn = window.parseInt(this.expiresValue) - now\n const nextTryIn = window.parseInt(this.nextTryValue) - now\n // console.log(`update`, expiresIn, nextTryIn, now - this.#userActivity)\n\n if (expiresIn < 0) this.renew()\n else if (nextTryIn < 0) {\n if (!this.#countdownStarted) {\n const isUserActive = now - this.#userActivity < this.toleranceValue\n // console.log(`isUserActive`, isUserActive)\n\n if (isUserActive || this.autoRenewValue) this.renew()\n else {\n this.#countdownStarted = true\n this.element.__MODAL__.show()\n }\n }\n\n if (this.#countdownStarted) {\n this.timerTarget.innerHTML = new Date(expiresIn * 1000)\n .toISOString()\n .slice(14, 19)\n }\n }\n }\n\n renew = () => {\n this.stop()\n this.element.__MODAL__.hide()\n\n navigator.locks.request(\n `session-modal-countdown`,\n async () => await this._renew()\n )\n }\n\n _renew = () => {\n return new Promise((resolve) => {\n // console.log(`renew`)\n window.Rails.ajax({\n url: this.renewUrlValue,\n type: `post`,\n success: (response) => {\n // console.log(`renew`, response)\n if ([`expired`, `not_signed_in`].includes(response.status))\n triggerEvent(document, `sessionModalExpired:show`)\n else {\n this.expiresValue = response.expires\n this.nextTryValue = response.next_try\n this.start()\n }\n window.setTimeout(resolve, 5000)\n },\n })\n })\n }\n\n initTrackUserActivity = () => {\n window.addEventListener(`scroll`, this.trackUserActivity, { passive: true })\n window.addEventListener(`keyup`, this.trackUserActivity, { passive: true })\n window.addEventListener(`click`, this.trackUserActivity, { passive: true })\n window.addEventListener(`mousemove`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n window.addEventListener(`touchstart`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n }\n\n deinitTrackUserActivity = () => {\n window.removeEventListener(`scroll`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n window.removeEventListener(`keyup`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n window.removeEventListener(`click`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n window.removeEventListener(`mousemove`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n window.removeEventListener(`touchstart`, this.trackUserActivity, { passive: true }) // eslint-disable-line prettier/prettier\n }\n\n trackUserActivity = () => {\n // console.log(`trackUserActivity`)\n this.#userActivity = nowSecs()\n }\n}\n\nStimulus.register(`session-modal-countdown`, SessionModalCountdown)\n\n// expired\n\nclass SessionModalExpired extends Controller {\n show = () => {\n this.element.__MODAL__.show()\n }\n}\n\nStimulus.register(`session-modal-expired`, SessionModalExpired)\n","import { Controller } from \"@hotwired/stimulus\"\nimport Cookies from \"js-cookie\"\n\nimport application from \"../utils/stimulus\"\n\nclass PrivateConfirmation extends Controller {\n static values = { confirmationId: String }\n\n close() {\n Cookies.set(`private-confirmation`, this.confirmationIdValue, {\n sameSite: `Lax`,\n })\n this.element.remove()\n }\n}\n\napplication.register(`private-confirmation`, PrivateConfirmation)\n","import { Controller } from \"@hotwired/stimulus\"\nimport { addClass, removeClass } from \"@oddcamp/js-utils/src/attribute\"\n\nimport Stimulus from \"../utils/stimulus\"\n\nclass ClickReveal extends Controller {\n static targets = [`trigger`, `body`]\n open() {\n addClass(this.triggerTarget, `hidden`)\n removeClass(this.bodyTarget, `hidden`)\n }\n\n close() {\n addClass(this.bodyTarget, `hidden`)\n removeClass(this.triggerTarget, `hidden`)\n }\n}\n\nStimulus.register(`click-reveal`, ClickReveal)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass CommonCard extends Controller {\n static targets = [`footer`]\n\n connect() {\n if (this.hasFooterTarget) {\n this.element.addEventListener(`commonCard:showFooter`, this.showFooter)\n this.element.addEventListener(`commonCard:hideFooter`, this.hideFooter)\n }\n }\n\n disconnect() {\n if (this.hasFooterTarget) {\n this.element.removeEventListener(`commonCard:showFooter`, this.showFooter)\n this.element.removeEventListener(`commonCard:hideFooter`, this.hideFooter)\n }\n }\n\n showFooter = () => {\n this.footerTarget.classList.remove(`hidden`)\n }\n\n hideFooter = () => {\n this.footerTarget.classList.add(`hidden`)\n }\n}\n\nStimulus.register(`common-card`, CommonCard)\n","import { Controller } from \"@hotwired/stimulus\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass AccountCard extends Controller {\n static targets = [`title`]\n\n rename(name) {\n if (this.hasTitleTarget) this.titleTarget.innerHTML = name\n }\n}\n\nStimulus.register(`account-card`, AccountCard)\n","import { Controller } from \"@hotwired/stimulus\"\nimport { hasClosest } from \"@oddcamp/js-utils/src/selector\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass AccountDropdown extends Controller {\n static values = { open: Boolean }\n\n connect() {\n document.addEventListener(`click`, this.docClick, { passive: true })\n }\n\n disconnect() {\n document.removeEventListener(`click`, this.docClick, { passive: true })\n }\n\n toggle = () => {\n this.openValue = !this.openValue\n }\n\n docClick = (e) => {\n if (this.openValue && !hasClosest(e.target, this.element)) this.toggle()\n }\n}\n\nStimulus.register(`account-dropdown`, AccountDropdown)\n","/*!\n * Chart.js v3.6.2\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\nconst requestAnimFrame = (function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}());\nfunction throttled(fn, thisArg, updateFn) {\n const updateArgs = updateFn || ((args) => Array.prototype.slice.call(args));\n let ticking = false;\n let args = [];\n return function(...rest) {\n args = updateArgs(rest);\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, () => {\n ticking = false;\n fn.apply(thisArg, args);\n });\n }\n };\n}\nfunction debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\nconst _toLeftRightCenter = (align) => align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\nconst _alignStartEnd = (align, start, end) => align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\nconst _textX = (align, left, right, rtl) => {\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n\nfunction noop() {}\nconst uid = (function() {\n let id = 0;\n return function() {\n return id++;\n };\n}());\nfunction isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\nfunction isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {\n return true;\n }\n return false;\n}\nfunction isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\nconst isNumberFinite = (value) => (typeof value === 'number' || value instanceof Number) && isFinite(+value);\nfunction finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\nfunction valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100\n : value / dimension;\nconst toDimension = (value, dimension) =>\n typeof value === 'string' && value.endsWith('%') ?\n parseFloat(value) / 100 * dimension\n : +value;\nfunction callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for (i = len - 1; i >= 0; i--) {\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for (i = 0; i < len; i++) {\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\nfunction _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for (i = 0, ilen = a0.length; i < ilen; ++i) {\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\nfunction clone$1(source) {\n if (isArray(source)) {\n return source.map(clone$1);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for (; k < klen; ++k) {\n target[keys[k]] = clone$1(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;\n}\nfunction _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n merge(tval, sval, options);\n } else {\n target[key] = clone$1(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [source];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n for (let i = 0; i < ilen; ++i) {\n source = sources[i];\n if (!isObject(source)) {\n continue;\n }\n const keys = Object.keys(source);\n for (let k = 0, klen = keys.length; k < klen; ++k) {\n merger(keys[k], target, source, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n return merge(target, source, {merger: _mergerIf});\n}\nfunction _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone$1(sval);\n }\n}\nfunction _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous +\n\t\t\t'\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\nconst emptyString = '';\nconst dot = '.';\nfunction indexOfDotOrLength(key, start) {\n const idx = key.indexOf(dot, start);\n return idx === -1 ? key.length : idx;\n}\nfunction resolveObjectKey(obj, key) {\n if (key === emptyString) {\n return obj;\n }\n let pos = 0;\n let idx = indexOfDotOrLength(key, pos);\n while (obj && idx > pos) {\n obj = obj[key.substr(pos, idx - pos)];\n pos = idx + 1;\n idx = indexOfDotOrLength(key, pos);\n }\n return obj;\n}\nfunction _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value) => typeof value !== 'undefined';\nconst isFunction = (value) => typeof value === 'function';\nconst setsEqual = (a, b) => {\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a) {\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\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.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) {\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, scope);\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);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key);\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) {\n while (key) {\n key = addScopes(set, allScopes, key, fallback);\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 { _alignStartEnd as $, _rlookupByKey as A, toPadding as B, each as C, getMaximumSize as D, _getParentNode as E, readUsedSize as F, throttled as G, HALF_PI as H, supportsEventListenerOptions as I, _isDomSupported as J, log10 as K, _factorize as L, finiteOrDefault as M, callback as N, _addGrace as O, PI as P, toDegrees as Q, _measureText as R, _int16Range as S, TAU as T, _alignPixel as U, clipArea as V, renderText as W, unclipArea as X, toFont as Y, _toLeftRightCenter as Z, _arrayUnique as _, resolve as a, overrides as a0, merge as a1, _capitalize as a2, descriptors as a3, isFunction as a4, _attachContext as a5, _createResolver as a6, _descriptors as a7, mergeIf as a8, uid as a9, noop as aA, distanceBetweenPoints as aB, _setMinAndMaxByKey as aC, niceNum as aD, almostWhole as aE, almostEquals as aF, _decimalPlaces as aG, _longestText as aH, _filterBetween as aI, _lookup as aJ, getHoverColor as aK, clone$1 as aL, _merger as aM, _mergerIf as aN, _deprecated as aO, toFontString as aP, splineCurve as aQ, splineCurveMonotone as aR, getStyle as aS, fontString as aT, toLineHeight as aU, PITAU as aV, INFINITY as aW, RAD_PER_DEG as aX, QUARTER_PI as aY, TWO_THIRDS_PI as aZ, _angleDiff as a_, debounce as aa, retinaScale as ab, clearCanvas as ac, setsEqual as ad, _elementsEqual as ae, getAngleFromPoint as af, _isBetween as ag, _readValueToProps as ah, _updateBezierControlPoints as ai, _computeSegments as aj, _boundSegments as ak, _steppedInterpolation as al, _bezierInterpolation as am, _pointInLine as an, _steppedLineTo as ao, _bezierCurveTo as ap, drawPoint as aq, addRoundedRectPath as ar, toTRBL as as, toTRBLCorners as at, _boundSegment as au, _normalizeAngle as av, getRtlAdapter as aw, overrideTextDirection as ax, _textX as ay, restoreTextDirection as az, isArray as b, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, createContext as h, isObject as i, defined as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, isNumber as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _limitValue as w, _lookupByKey as x, getRelativePosition as y, _isPointInArea as z };\n","/*!\n * Chart.js v3.6.2\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as toPadding, C as each, D as getMaximumSize, E as _getParentNode, F as readUsedSize, G as throttled, I as supportsEventListenerOptions, J as _isDomSupported, K as log10, L as _factorize, M as finiteOrDefault, N as callback, O as _addGrace, Q as toDegrees, R as _measureText, S as _int16Range, U as _alignPixel, V as clipArea, W as renderText, X as unclipArea, Y as toFont, Z as _toLeftRightCenter, $ as _alignStartEnd, a0 as overrides, a1 as merge, a2 as _capitalize, a3 as descriptors, a4 as isFunction, a5 as _attachContext, a6 as _createResolver, a7 as _descriptors, a8 as mergeIf, a9 as uid, aa as debounce, ab as retinaScale, ac as clearCanvas, ad as setsEqual, ae as _elementsEqual, af as getAngleFromPoint, ag as _isBetween, ah as _readValueToProps, ai as _updateBezierControlPoints, aj as _computeSegments, ak as _boundSegments, al as _steppedInterpolation, am as _bezierInterpolation, an as _pointInLine, ao as _steppedLineTo, ap as _bezierCurveTo, aq as drawPoint, ar as addRoundedRectPath, as as toTRBL, at as toTRBLCorners, au as _boundSegment, av as _normalizeAngle, aw as getRtlAdapter, ax as overrideTextDirection, ay as _textX, az as restoreTextDirection, aA as noop, aB as distanceBetweenPoints, aC as _setMinAndMaxByKey, aD as niceNum, aE as almostWhole, aF as almostEquals, aG as _decimalPlaces, aH as _longestText, aI as _filterBetween, aJ 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 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) {\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 && _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 getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n let items = [];\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (intersect && !element.inRange(position.x, position.y, useFinalPosition)) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n if (!_isPointInArea(center, chart.chartArea, chart._minPadding) && !element.inRange(position.x, position.y, useFinalPosition)) {\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 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 === 'destroy') {\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.6.2\";\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}\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 if (this._lastEvent) {\n this._eventHandler(this._lastEvent, 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 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 }\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._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 = {event: e, replay, cancelable: true};\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);\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) {\n const {_active: lastActive = [], options} = this;\n const hoverOptions = options.hover;\n const useFinalPosition = replay;\n let active = [];\n let changed = false;\n let lastEvent = null;\n if (e.type !== 'mouseout') {\n active = this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n lastEvent = e.type === 'click' ? this._lastEvent : e;\n }\n this._lastEvent = null;\n if (_isPointInArea(e, this.chartArea, this._minPadding)) {\n callback(options.onHover, [e, active, this], this);\n if (e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu') {\n callback(options.onClick, [e, active, this], this);\n }\n }\n 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}\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 inner = options.borderAlign === 'inner';\n if (!options.borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = options.borderWidth * 2;\n ctx.lineJoin = 'round';\n } else {\n ctx.lineWidth = options.borderWidth;\n ctx.lineJoin = '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 borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const {start: paramsStart = 0, end: paramsEnd = count - 1} = params;\n const {start: segmentStart, end: segmentEnd} = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\nfunction pathSegment(ctx, line, segment, params) {\n const {points, options} = line;\n const {count, start, loop, ilen} = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let {move = true, reverse} = params || {};\n let i, point, prev;\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\nfunction fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const {count, start, ilen} = pathVars(points, segment, params);\n const {move = true, reverse} = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index) => (start + (reverse ? ilen - index : index)) % count;\n const drawX = () => {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\nfunction _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const {segments, options} = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments) {\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {start, end: start + count - 1})) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n constructor(cfg) {\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {property, start: value, end: value});\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n const {start, end} = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || (this.points.length - start);\n for (const segment of segments) {\n loop &= segmentMethod(ctx, this, segment, {start, end: start + count - 1});\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0,\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: (name) => name !== 'borderDash' && name !== 'fill',\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const {[axis]: value} = el.getProps([axis], useFinalPosition);\n return (Math.abs(pos - value) < options.radius + options.hitRadius);\n}\nclass PointElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return ((Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2)) < Math.pow(options.hitRadius + options.radius, 2));\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y} = this.getProps(['x', 'y'], useFinalPosition);\n return {x, y};\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n return options.radius + options.hitRadius;\n }\n}\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n const {x, y, base, width, height} = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {left, top, right, bottom};\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const {enableBorderRadius} = bar.getProps(['enableBorderRadius']);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r)),\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds\n\t\t&& (skipX || _isBetween(x, bounds.left, bounds.right))\n\t\t&& (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n constructor(cfg) {\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const {inflateAmount, options: {borderColor, backgroundColor}} = this;\n const {inner, outer} = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const {x, y, base, horizontal} = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for (i = 0; i < samples - 2; i++) {\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const {x: pointAx, y: pointAy} = data[a];\n maxArea = area = -1;\n for (j = rangeOffs; j < rangeTo; j++) {\n area = 0.5 * Math.abs(\n (pointAx - avgX) * (data[j].y - pointAy) -\n (pointAx - data[j].x) * (avgY - pointAy)\n );\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX,\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {value: data});\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset) => {\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const {iScale} = meta;\n const {min, max, minDefined, maxDefined} = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {start, count};\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false,\n },\n beforeElementsUpdate: (chart, args, options) => {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex) => {\n const {_data, indexAxis} = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n if (meta.type !== 'line') {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let {start, count} = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\nfunction decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n }\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\nfunction computeLinearBoundary(source) {\n const {scale = {}, fill} = source;\n let target = null;\n let horizontal;\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n return null;\n}\nclass simpleArc {\n constructor(opts) {\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const {x, y, radius} = this;\n bounds = bounds || {start: 0, end: TAU};\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const {x, y, radius} = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\nfunction computeCircularBoundary(source) {\n const {scale, fill} = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const target = [];\n const start = options.reverse ? scale.max : scale.min;\n const end = options.reverse ? scale.min : scale.max;\n let i, center, value;\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction findSegmentEnd(start, end, points) {\n for (;end > start; end--) {\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction pointsFromSegments(boundary, line) {\n const {x = null, y = null} = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({start, end}) => {\n end = findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({x: first.x, y});\n points.push({x: last.x, y});\n } else if (x !== null) {\n points.push({x, y: first.y});\n points.push({x, y: last.y});\n }\n });\n return points;\n}\nfunction buildStackLine(source) {\n const {scale, index, line} = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(createBoundaryLine({x: null, y: scale.bottom}, line));\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n for (let j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({points, options: {}});\n}\nfunction getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for (let i = 0; i < metas.length; i++) {\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for (let j = 0; j < linesBelow.length; j++) {\n const line = linesBelow[j];\n const {first, last, point} = findPoint(line, sourcePoint, 'x');\n if (!point || (first && last)) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\nfunction findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {first, last, point};\n}\nfunction getTarget(source) {\n const {chart, fill, line} = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return createBoundaryLine(boundary, line);\n}\nfunction createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {tension: 0},\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [index];\n let target;\n if (!propagate) {\n return fill;\n }\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {property, start, end};\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments) {\n let {start, end} = segment;\n end = findSegmentEnd(start, end, points);\n const bounds = getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments) {\n const subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources) {\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction clipBounds(ctx, scale, bounds) {\n const {top, bottom} = scale.chart.chartArea;\n const {property, start, end} = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\nfunction _fill(ctx, cfg) {\n const {line, target, property, color, scale} = cfg;\n const segments = _segments(line, target, property);\n for (const {source: src, target: tgt, start, end} of segments) {\n const {style: {backgroundColor = color} = {}} = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {move: lineLoop, reverse: true});\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction doFill(ctx, cfg) {\n const {line, target, above, below, area, scale} = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n _fill(ctx, {line, target, color: above, scale, property});\n ctx.restore();\n ctx.save();\n _clip(ctx, target, area.bottom);\n }\n _fill(ctx, {line, target, color: below, scale, property});\n ctx.restore();\n}\nfunction drawfill(ctx, source, area) {\n const target = getTarget(source);\n const {line, scale, axis} = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const {above = color, below = color} = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {line, target, above, below, area, scale, axis});\n unclipArea(ctx);\n }\n}\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate(chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line,\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for (i = 0; i < count; ++i) {\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw(chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for (let i = metasets.length - 1; i >= 0; --i) {\n const source = metasets[i].$filler;\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw(chart, args, options) {\n const source = args.meta.$filler;\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize) => {\n let {boxHeight = fontSize, boxWidth = fontSize} = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b) => a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config) {\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item) => labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b) => labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const {options, ctx} = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const {boxWidth, itemHeight} = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxWidth, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [0];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {left: 0, top, row, width: itemWidth, height: itemHeight};\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n const {ctx, maxHeight, options: {labels: {padding}}} = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i) => {\n const itemWidth = boxWidth + (fontSize / 2) + ctx.measureText(legendItem.text).width;\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {left, top: currentColHeight, col, width: itemWidth, height: itemHeight};\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({width: currentColWidth, height: currentColHeight});\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const {legendHitBoxes: hitboxes, options: {align, labels: {padding}, rtl}} = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes) {\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes) {\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const {options: opts, columnSizes, lineWidths, ctx} = this;\n const {align, labels: labelOpts} = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const {color: fontColor, padding} = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const {boxWidth, boxHeight, itemHeight} = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some(v => v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius,\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + (itemHeight / 2), labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i) => {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size) => Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right)\n && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width)\n && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n}\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start(chart, _args, options) {\n const legend = chart.legend = new Legend({ctx: chart.ctx, options, chart});\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate(chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate(chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent(chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick(e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx) => ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels(chart) {\n const datasets = chart.data.datasets;\n const {labels: {usePointStyle, pointStyle, textAlign, color}} = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta) => {\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx) => ctx.chart.options.color,\n display: false,\n position: 'center',\n text: '',\n }\n },\n descriptors: {\n _scriptable: (name) => !name.startsWith('on'),\n labels: {\n _scriptable: (name) => !['generateLabels', 'filter', 'sort'].includes(name),\n }\n },\n};\n\nclass Title extends Element {\n constructor(config) {\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const {top, left, bottom, right, options} = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {titleX, titleY, maxWidth, rotation};\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const {titleX, titleY, maxWidth, rotation} = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY],\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop(chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate(chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold',\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start(chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate(chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal',\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false,\n },\n};\n\nconst positioners = {\n average(items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for (i = 0, len = items.length; i < len; ++i) {\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\nfunction createTooltipItem(chart, item) {\n const {element, datasetIndex, index} = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const {label, value} = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\nfunction getTooltipSize(tooltip, options) {\n const ctx = tooltip._chart.ctx;\n const {body, footer, title} = tooltip;\n const {boxWidth, boxHeight} = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem) => count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight\n\t\t\t+ (titleLineCount - 1) * options.titleSpacing\n\t\t\t+ options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight\n\t\t\t+ (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight\n\t\t\t+ (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop\n\t\t\t+ footerLineCount * footerFont.lineHeight\n\t\t\t+ (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? (boxWidth + 2 + options.boxPadding) : 0;\n each(body, (bodyItem) => {\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {width, height};\n}\nfunction determineYAlign(chart, size) {\n const {y, height} = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > (chart.height - height / 2)) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const {x, width} = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const {x, width} = size;\n const {width: chartWidth, chartArea: {left, right}} = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\nfunction determineAlignment(chart, options, size) {\n const yAlign = options.yAlign || determineYAlign(chart, size);\n return {\n 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._chart = config._chart;\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.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.update(true);\n }\n }\n handleEvent(e, replay) {\n const options = this.options;\n const lastActive = this._active || [];\n let changed = false;\n let active = [];\n if (e.type !== 'mouseout') {\n active = this._chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n }\n const positionChanged = this._positionChanged(active, e);\n 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 _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: 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)) {\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 furthestLimits = {\n l: 0,\n r: scale.width,\n t: 0,\n b: scale.height - scale.paddingTop\n };\n const furthestAngles = {};\n const labelSizes = [];\n const padding = [];\n const valueCount = scale.getLabels().length;\n for (let i = 0; i < valueCount; i++) {\n const opts = scale.options.pointLabels.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i]);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = scale.getIndexAngle(i);\n const angle = 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 if (hLimits.start < furthestLimits.l) {\n furthestLimits.l = hLimits.start;\n furthestAngles.l = angleRadians;\n }\n if (hLimits.end > furthestLimits.r) {\n furthestLimits.r = hLimits.end;\n furthestAngles.r = angleRadians;\n }\n if (vLimits.start < furthestLimits.t) {\n furthestLimits.t = vLimits.start;\n furthestAngles.t = angleRadians;\n }\n if (vLimits.end > furthestLimits.b) {\n furthestLimits.b = vLimits.end;\n furthestAngles.b = angleRadians;\n }\n }\n scale._setReductions(scale.drawingArea, furthestLimits, furthestAngles);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale.getLabels().length;\n const opts = scale.options;\n const tickBackdropHeight = getTickBackdropHeight(opts);\n const outerDistance = scale.getDistanceFromCenterForValue(opts.ticks.reverse ? scale.min : scale.max);\n for (let i = 0; i < valueCount; i++) {\n const extra = (i === 0 ? tickBackdropHeight / 2 : 0);\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i]);\n const angle = toDegrees(scale.getIndexAngle(i));\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 numberOrZero(param) {\n return isNumber(param) ? param : 0;\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 this.width = this.maxWidth;\n this.height = this.maxHeight;\n this.paddingTop = getTickBackdropHeight(this.options) / 2;\n this.xCenter = Math.floor(this.width / 2);\n this.yCenter = Math.floor((this.height - this.paddingTop) / 2);\n this.drawingArea = Math.min(this.height - this.paddingTop, this.width) / 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().map((value, index) => {\n const label = callback(this.options.pointLabels.callback, [value, index], this);\n return label || label === 0 ? label : '';\n });\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 _setReductions(largestPossibleRadius, furthestLimits, furthestAngles) {\n let radiusReductionLeft = furthestLimits.l / Math.sin(furthestAngles.l);\n let radiusReductionRight = Math.max(furthestLimits.r - this.width, 0) / Math.sin(furthestAngles.r);\n let radiusReductionTop = -furthestLimits.t / Math.cos(furthestAngles.t);\n let radiusReductionBottom = -Math.max(furthestLimits.b - (this.height - this.paddingTop), 0) / Math.cos(furthestAngles.b);\n radiusReductionLeft = numberOrZero(radiusReductionLeft);\n radiusReductionRight = numberOrZero(radiusReductionRight);\n radiusReductionTop = numberOrZero(radiusReductionTop);\n radiusReductionBottom = numberOrZero(radiusReductionBottom);\n this.drawingArea = Math.max(largestPossibleRadius / 2, Math.min(\n Math.floor(largestPossibleRadius - (radiusReductionLeft + radiusReductionRight) / 2),\n Math.floor(largestPossibleRadius - (radiusReductionTop + radiusReductionBottom) / 2)));\n this.setCenterPoint(radiusReductionLeft, radiusReductionRight, radiusReductionTop, radiusReductionBottom);\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n const maxRight = this.width - rightMovement - this.drawingArea;\n const maxLeft = leftMovement + this.drawingArea;\n const maxTop = topMovement + this.drawingArea;\n const maxBottom = (this.height - this.paddingTop) - bottomMovement - this.drawingArea;\n this.xCenter = Math.floor(((maxLeft + maxRight) / 2) + this.left);\n this.yCenter = Math.floor(((maxTop + maxBottom) / 2) + this.top + this.paddingTop);\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / this.getLabels().length;\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) {\n const angle = this.getIndexAngle(index) - HALF_PI;\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.getLabels().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.getLabels().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 = this.getLabels().length - 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 }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\n\nconst INTERVALS = {\n millisecond: {common: true, size: 1, steps: 1000},\n second: {common: true, size: 1000, steps: 60},\n minute: {common: true, size: 60000, steps: 60},\n hour: {common: true, size: 3600000, steps: 24},\n day: {common: true, size: 86400000, steps: 30},\n week: {common: false, size: 604800000, steps: 4},\n month: {common: true, size: 2.628e9, steps: 12},\n quarter: {common: false, size: 7.884e9, steps: 4},\n year: {common: true, size: 3.154e10}\n};\nconst UNITS = (Object.keys(INTERVALS));\nfunction sorter(a, b) {\n return a - b;\n}\nfunction parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const {parser, round, isoWeekday} = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string'\n ? adapter.parse(value, parser)\n : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true)\n ? adapter.startOf(value, 'isoWeek', isoWeekday)\n : adapter.startOf(value, round);\n }\n return +value;\n}\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for (let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\nfunction determineMajorUnit(unit) {\n for (let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i) {\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const {lo, hi} = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return (ilen === 0 || !majorUnit) ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n constructor(props) {\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let {min, max, minDefined, maxDefined} = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {min, max};\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip\n ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min))\n : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined\n : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n initOffsets(timestamps) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {start, end, factor: 1 / (start + 1 + end)};\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(timeOpts.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b) => a - b).map(x => +x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n const label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n const formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: (tickLabelWidth * cosRotation) + (tickFontSize * sinRotation),\n h: (tickLabelWidth * sinRotation) + (tickFontSize * cosRotation)\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return (this._cache.data = metas[0].controller.getAllParsedValues(this));\n }\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return (this._cache.data = this.normalize(timestamps));\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(parse(this, labels[i]));\n }\n return (this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps));\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({lo, hi} = _lookupByKey(table, 'pos', val));\n }\n ({pos: prevSource, time: prevTarget} = table[lo]);\n ({pos: nextSource, time: nextTarget} = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({lo, hi} = _lookupByKey(table, 'time', val));\n }\n ({time: prevSource, pos: prevTarget} = table[lo]);\n ({time: nextSource, pos: nextTarget} = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n constructor(props) {\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const {min, max} = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {time: min, pos: 0},\n {time: max, pos: 1}\n ];\n }\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({time: curr, pos: i / (ilen - 1)});\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales,\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n","import { Controller } from \"@hotwired/stimulus\"\nimport {\n Chart,\n ArcElement,\n DoughnutController,\n CategoryScale,\n LinearScale,\n PointElement,\n Tooltip,\n} from \"chart.js\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass AccountPieChart extends Controller {\n static values = { data: Array, currency: String, animation: Boolean }\n static targets = [`chart`]\n #chart = null\n\n connect() {\n this.element.addEventListener(\n `accountPieChart:setChartLabel`,\n this.setChartLabel\n )\n\n if (Chart.getChart(this.chartTarget)) {\n Chart.getChart(this.chartTarget).destroy()\n }\n\n Chart.register(\n ArcElement,\n DoughnutController,\n CategoryScale,\n LinearScale,\n PointElement,\n Tooltip\n )\n\n this.#chart = new Chart(this.chartTarget, {\n type: `doughnut`,\n data: {\n labels: this.dataValue.map((v) => v[`label`]),\n datasets: [\n {\n data: this.dataValue.map((v) => v[`value`]),\n backgroundColor: this.dataValue.map((v) => v[`color`]),\n },\n ],\n },\n options: {\n elements: {\n arc: {\n borderWidth: 0,\n },\n },\n animation: this.animationValue ? undefined : false,\n plugins: {\n tooltip: {\n displayColors: false,\n callbacks: {\n label: (context) => {\n const { label, raw } = context\n\n const amount = new Intl.NumberFormat(\n document.documentElement.lang,\n {\n style: `currency`,\n currency: this.currencyValue,\n currencyDisplay: `code`,\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }\n ).format(raw)\n\n return `${label}: ${amount}`\n },\n },\n },\n },\n },\n })\n }\n\n setChartLabel = (e) => {\n const index = this.dataValue.findIndex((v) => v.id == e.detail.id)\n this.#chart.data.labels[index] = e.detail.label\n }\n}\n\nStimulus.register(`account-pie-chart`, AccountPieChart)\n","import { Controller } from \"@hotwired/stimulus\"\nimport throttle from \"raf-throttle\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass AccountRenamer extends Controller {\n static targets = [`box`, `input`, `button`]\n static values = { endpoint: String }\n\n #winResizeHandler = null\n #alignmentEl =\n document.querySelector(`.auth-page-layout__main`) ||\n document.querySelector(`.layout-users__main`)\n\n connect() {\n this.element.__MODAL__.on(`show`, () => {\n this.inputTarget.value = ``\n this.inputTarget.focus()\n this.buttonController.toggleLoadingDisabled(false)\n })\n\n if (this.#alignmentEl) {\n this.element.__MODAL__.on(`show`, this.align)\n this.#winResizeHandler = throttle(this.align)\n window.addEventListener(`resize`, this.#winResizeHandler)\n }\n }\n\n disconnect() {\n window.addEventListener(`resize`, this.#winResizeHandler)\n }\n\n cancel() {\n this.element.__MODAL__.hide()\n }\n\n submit = (e) => {\n e.preventDefault()\n this.buttonController.toggleLoadingDisabled(true)\n\n const id = this.element.__MODAL_TRIGGER__.dataset.accountRenamerId\n const name = this.inputTarget.value\n const url = window.decodeURI(this.endpointValue).replaceAll(`{{ID}}`, id)\n\n window.Rails.ajax({\n url: url,\n type: `post`,\n data: new URLSearchParams({\n nickname: name,\n }).toString(),\n complete: () => {\n this.cancel()\n if (this.accountCardController) this.accountCardController.rename(name)\n },\n })\n }\n\n align = () => {\n if (!this.element.__MODAL__.shown) return\n\n const { x, width } = this.#alignmentEl.getBoundingClientRect()\n const pos = x ? x / 2 : 0\n\n this.boxTarget.style.maxWidth = null\n const maxWidth = Math.min(\n parseFloat(\n window.getComputedStyle(this.boxTarget).getPropertyValue(`max-width`)\n ),\n width\n )\n this.boxTarget.style.maxWidth = `${maxWidth}px`\n this.boxTarget.style.transform = `translateX(${pos}px)`\n }\n\n get buttonController() {\n return this.application.getControllerForElementAndIdentifier(\n this.buttonTarget,\n `button`\n )\n }\n\n get accountCardController() {\n const element = this.element.__MODAL_TRIGGER__.closest(\n `[data-controller*=\"account-card\"]`\n )\n if (!element) return null\n\n return this.application.getControllerForElementAndIdentifier(\n element,\n `account-card`\n )\n }\n}\n\nStimulus.register(`account-renamer`, AccountRenamer)\n","import { Controller } from \"@hotwired/stimulus\"\nimport throttle from \"raf-throttle\"\nimport { delegateEventListener } from \"@oddcamp/js-utils/src/event\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass DeleteConfirmation extends Controller {\n static targets = [`box`, `button`, `title`]\n static values = { endpoint: String }\n\n #winResizeHandler = null\n #alignmentEl =\n document.querySelector(`.auth-page-layout__main`) ||\n document.querySelector(`.layout-users__main`)\n\n #modalTrigger = document.getElementsByClassName(`dynamic-delete`)\n\n connect() {\n delegateEventListener(\n `[data-modal-show=\"${this.element.id.replace(/^modal-/, ``)}\"]`,\n `click`,\n () => {\n this.titleTarget.innerHTML = this.#modalTrigger[0].dataset.deleteContent\n }\n )\n\n this.element.__MODAL__.on(`show`, () => {\n if (this.hasCancelTarget) this.cancelTarget.focus()\n else if (this.hasConfirmTarget) this.confirmTarget.focus()\n })\n\n if (this.#alignmentEl) {\n this.element.__MODAL__.on(`show`, this.align)\n this.#winResizeHandler = throttle(this.align)\n window.addEventListener(`resize`, this.#winResizeHandler)\n }\n\n if (this.showValue) this.element.__MODAL__.show()\n }\n\n disconnect() {\n window.addEventListener(`resize`, this.#winResizeHandler)\n }\n\n cancel() {\n this.element.__MODAL__.hide()\n this.buttonController.toggleLoadingDisabled(false)\n }\n\n submit = () => {\n this.buttonController.toggleLoadingDisabled(true)\n const id = this.element.__MODAL_TRIGGER__.dataset.deletePath\n\n window.Rails.ajax({\n url: id,\n type: `delete`,\n complete: () => {\n this.element.__MODAL_TRIGGER__.closest(`turbo-frame`).reload()\n\n window.setTimeout(() => {\n this.cancel()\n }, 2000)\n },\n })\n }\n\n align = () => {\n if (!this.element.__MODAL__.shown) return\n\n const { x, width } = this.#alignmentEl.getBoundingClientRect()\n const pos = x ? x / 2 : 0\n\n this.boxTarget.style.maxWidth = null\n const maxWidth = Math.min(\n parseFloat(\n window.getComputedStyle(this.boxTarget).getPropertyValue(`max-width`)\n ),\n width\n )\n this.boxTarget.style.maxWidth = `${maxWidth}px`\n this.boxTarget.style.transform = `translateX(${pos}px)`\n }\n\n get buttonController() {\n return this.application.getControllerForElementAndIdentifier(\n this.buttonTarget,\n `button`\n )\n }\n}\n\nStimulus.register(`delete-confirmation`, DeleteConfirmation)\n","import { Controller } from \"@hotwired/stimulus\"\nimport { hasClosest } from \"@oddcamp/js-utils/src/selector\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass Withdraw extends Controller {\n static outlets = [`confirm-modal`]\n static targets = [`amount`, `button`]\n\n get buttonController() {\n return this.application.getControllerForElementAndIdentifier(\n this.buttonTarget,\n `button`\n )\n }\n\n confirm(evt) {\n if (parseFloat(this.amountTarget.value) >= 100000) {\n evt.preventDefault()\n this.confirmModalOutlet.element.__MODAL__.show()\n }\n }\n\n submit() {\n this.buttonController.toggleLoadingDisabled(true)\n this.element.submit()\n }\n}\n\nStimulus.register(`withdraw`, Withdraw)\n","import { Controller } from \"@hotwired/stimulus\"\nimport { hasClosest } from \"@oddcamp/js-utils/src/selector\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass WithdrawConfirmation extends Controller {\n static outlets = [`withdraw`]\n\n get buttonController() {\n return this.application.getControllerForElementAndIdentifier(\n this.buttonTarget,\n `button`\n )\n }\n\n confirm(evt) {\n evt.preventDefault()\n this.element.__MODAL__.hide()\n this.withdrawOutlet.submit()\n }\n}\n\nStimulus.register(`withdraw-confirmation`, WithdrawConfirmation)\n","import { Controller } from \"@hotwired/stimulus\"\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass WithdrawAccountDetails extends Controller {\n get buttonController() {\n return this.application.getControllerForElementAndIdentifier(\n this.buttonTarget,\n `button`\n )\n }\n\n copy(evt) {\n navigator.clipboard.writeText(\n evt.target.dataset.withdrawAccountDetailsValue\n )\n evt.target.classList.add(`--copied`)\n window.setTimeout(() => evt.target.classList.remove(`--copied`), 2000)\n }\n}\n\nStimulus.register(`withdraw-account-details`, WithdrawAccountDetails)\n","export const urlAlphabet =\n 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\n","import { urlAlphabet as scopedUrlAlphabet } from './url-alphabet/index.js'\nexport { urlAlphabet } from './url-alphabet/index.js'\nexport let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nexport let customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nexport let customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nexport let nanoid = (size = 21) => {\n let id = ''\n let bytes = crypto.getRandomValues(new Uint8Array(size))\n while (size--) {\n id += scopedUrlAlphabet[bytes[size] & 63]\n }\n return id\n}\n","const inputRequiredDisable = (els) => {\n els.forEach((el) => {\n if (el.required) {\n el.__required = true\n el.required = false\n el.ariaRequired = false\n }\n })\n}\n\nconst inputRequiredRestore = (els) => {\n els.forEach((el) => {\n if (el.__required === true) {\n el.required = true\n el.ariaRequired = true\n }\n })\n}\n\nexport { inputRequiredDisable, inputRequiredRestore }\n","import { Controller } from \"@hotwired/stimulus\"\nimport { debounce } from \"lodash\"\nimport { nanoid } from \"nanoid\"\nimport {\n addClass,\n removeClass,\n toggleClass,\n} from \"@oddcamp/js-utils/src/attribute\"\nimport { getParents } from \"@oddcamp/js-utils/src/selector\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\nimport {\n inputRequiredDisable,\n inputRequiredRestore,\n} from \"../../shared/utils/input-required\"\n\n// faq\n\nclass AuthPageFaq extends Controller {\n static targets = [`frame`]\n\n connect() {\n this.element.__MODAL__.on(`show`, () =>\n this.frameTarget.removeAttribute(`loading`)\n )\n }\n}\n\nStimulus.register(`auth-page-faq`, AuthPageFaq)\n\n// personal\n\nclass AuthPagePersonal extends Controller {\n static targets = [`inputPep`, `pepFalseShow`, `pepTrueShow`, `submitButton`]\n\n connect() {\n this.setPep()\n }\n\n setPep = () => {\n const checkedEl = this.inputPepTargets.find((i) => i.checked)\n if (!checkedEl || checkedEl.value == `false`) {\n removeClass(this.pepFalseShowTargets, `hidden`)\n addClass(this.pepTrueShowTargets, `hidden`)\n this.submitButtonTarget.disabled = false\n } else {\n removeClass(this.pepTrueShowTargets, `hidden`)\n addClass(this.pepFalseShowTargets, `hidden`)\n this.submitButtonTarget.disabled = true\n }\n }\n}\n\nStimulus.register(`auth-page-personal`, AuthPagePersonal)\n\n// citizenships\n\nclass AuthPageCitizenships extends Controller {\n static targets = [\n `nationalitiesInput`,\n `submitButton`,\n `citizenshipCard`,\n `swedishPersonInput`,\n `usPerson`,\n `usPersonInput`,\n `nationality1`,\n `nationality1Input`,\n `multipleNationalities`,\n `multipleNationalitiesInput`,\n `nationality2`,\n `nationality2Input`,\n `taxation`,\n `taxations`,\n `swedishTaxationInput`,\n `taxationCountries`,\n `taxationCountriesAdd`,\n `taxationCountriesAddButton`,\n `taxationItem`,\n `taxationCountryLabel`,\n `taxationCountryInput`,\n `taxationCountryTinInput`,\n `taxationCountryRemove`,\n ]\n\n static values = {\n swedishPerson: String,\n usPerson: String,\n nationality1: String,\n multipleNationalities: String,\n nationality2: String,\n swedishTaxation: String,\n }\n\n #updateRelatedFields = false\n #setTaxationOnInsertUs = false\n\n connect() {\n this.taxationsTarget.addEventListener(\n `cocoon:after-insert`,\n this.taxationInserted\n )\n\n setTimeout(() => {\n this.#updateRelatedFields = true\n this.validateTinCodes()\n }, 0)\n }\n\n // changers\n\n swedishPersonValueChanged() {\n if (this.#updateRelatedFields) {\n this.usPersonValue = ``\n this.usPersonInputTargets.forEach((t) => (t.checked = false))\n }\n\n this.usPersonTarget.classList.toggle(`hidden`, !this.swedishPersonValue)\n }\n\n usPersonValueChanged() {\n this.nationality1Value = nanoid()\n\n const showNationality1 =\n this.swedishPersonValue == `false` && this.usPersonValue == `false`\n\n this.nationality1Target.classList.toggle(`hidden`, !showNationality1)\n\n if (this.#updateRelatedFields) {\n this.nationality1InputTarget.value = ``\n if (this.nationality1InputTarget.__CHOICES)\n this.nationality1InputTarget.__CHOICES.setChoiceByValue(``)\n\n this.nationalitiesInputTargets.forEach((t) => (t.value = ``))\n if (this.swedishPersonValue == `true`)\n this.nationalitiesInputTargets[0].value = `SE`\n if (this.usPersonValue == `true`)\n this.nationalitiesInputTargets[this.swedishPersonValue == `true` ? 1 : 0].value = `US` // eslint-disable-line prettier/prettier\n }\n }\n\n nationality1ValueChanged() {\n const showMultipleNationalities =\n this.swedishPersonValue &&\n this.usPersonValue &&\n (this.swedishPersonValue == `false` || this.usPersonValue == `false`)\n\n this.multipleNationalitiesTarget.classList.toggle(\n `hidden`,\n !showMultipleNationalities\n )\n\n if (this.#updateRelatedFields) {\n this.multipleNationalitiesValue =\n this.swedishPersonValue == `true` && this.usPersonValue == `true`\n ? `false`\n : ``\n this.multipleNationalitiesInputTargets.forEach((t) => (t.checked = false))\n\n if (this.nationality2InputTarget.__CHOICES) {\n const options = [...this.nationality2InputTarget.__CHOICES_OPTIONS]\n options.forEach(\n (o) => (o.disabled = o.value && o.value == this.nationality1Value)\n )\n this.nationality2InputTarget.__CHOICES.setChoices(\n options,\n `value`,\n `label`,\n true\n )\n }\n\n if (\n this.nationality1Value.length == 2 &&\n this.swedishPersonValue &&\n this.usPersonValue &&\n this.swedishPersonValue == `false` &&\n this.usPersonValue == `false`\n )\n this.nationalitiesInputTargets[0].value = this.nationality1Value\n }\n }\n\n multipleNationalitiesValueChanged(value) {\n this.toggleCitizenshipCardFooterVisibility(true)\n\n if (this.#updateRelatedFields) {\n this.swedishTaxationValue = ``\n this.swedishTaxationInputTargets.forEach((t) => (t.checked = false))\n this.nationality2Value = ``\n this.nationality2InputTarget.value = ``\n if (this.nationality2InputTarget.__CHOICES)\n this.nationality2InputTarget.__CHOICES.setChoiceByValue(``)\n }\n\n if (value) {\n this.nationality2Target.classList.toggle(`hidden`, value != `true`)\n this.taxationTarget.classList.toggle(`hidden`, value == `true`)\n setTimeout(() => {\n this.toggleCitizenshipCardFooterVisibility(\n value === `true` && !this.nationality2Value.value\n )\n }, 0)\n } else {\n this.nationality2Target.classList.add(`hidden`)\n this.taxationTarget.classList.add(`hidden`)\n }\n }\n\n nationality2ValueChanged(value) {\n if (this.#updateRelatedFields) {\n this.swedishTaxationValue = ``\n this.swedishTaxationInputTargets.forEach((t) => (t.checked = false))\n\n if (this.swedishPersonValue == `false` || this.usPersonValue == `false`)\n this.nationalitiesInputTargets[1].value = value\n }\n\n if (value) {\n this.taxationTarget.classList.toggle(`hidden`, !value)\n this.toggleCitizenshipCardFooterVisibility(!value)\n } else if (!this.multipleNationalitiesValue) {\n this.taxationTarget.classList.add(`hidden`)\n this.toggleCitizenshipCardFooterVisibility(true)\n }\n }\n\n swedishTaxationValueChanged(value) {\n if (this.#updateRelatedFields) {\n this.taxationItemTargets.slice(1).forEach((t) => t.remove())\n this.taxationCountryInputTarget.value = ``\n this.taxationCountryTinInputTarget.value = ``\n if (this.taxationCountryInputTarget.__CHOICES)\n this.taxationCountryInputTarget.__CHOICES.setChoiceByValue(``).enable()\n this.taxationCountryRemoveTarget.classList.add(`hidden`)\n this.taxationCountryRemoveTarget.classList.remove(`--hidden`)\n this.taxationCountriesTarget.classList.toggle(`hidden`, !value)\n this.taxationCountriesAddTarget.classList.remove(`hidden`)\n this.toggleButtonEnabled(value == `true`)\n }\n\n if (value == `true`) {\n this.taxationCountryRemoveTarget.classList.add(`--hidden`)\n\n if (this.#updateRelatedFields)\n this.taxationCountryInputTarget.__CHOICES.setChoiceByValue(`SE`)\n\n setTimeout(() => {\n this.taxationCountryInputTarget.__CHOICES.disable()\n }, 0)\n }\n\n if (this.usPersonValue == `true`) {\n if (value == `true`) {\n this.#setTaxationOnInsertUs = true\n\n if (this.#updateRelatedFields) {\n this.taxationCountriesAddButtonTarget.click()\n }\n } else {\n this.taxationCountryRemoveTarget.classList.add(`--hidden`)\n\n if (this.#updateRelatedFields)\n this.taxationCountryInputTarget.__CHOICES\n .setChoiceByValue(`US`)\n .disable()\n }\n }\n\n if (this.#updateRelatedFields) {\n this.taxationCountryInputTarget.dispatchEvent(new CustomEvent(`change`))\n // this.setNationalitiesInputValue()\n }\n }\n\n // actions\n\n setSwedishPerson() {\n this.swedishPersonValue = (\n this.swedishPersonInputTargets.find((t) => t.checked) || { value: `` }\n ).value\n }\n\n setUsPerson() {\n this.usPersonValue = (\n this.usPersonInputTargets.find((t) => t.checked) || { value: `` }\n ).value\n }\n\n setNationality1() {\n this.nationality1Value = this.nationality1InputTarget.value\n }\n\n setMultipleNationalities() {\n this.multipleNationalitiesValue = (\n this.multipleNationalitiesInputTargets.find((t) => t.checked) || {\n value: ``,\n }\n ).value\n }\n\n setNationality2() {\n this.nationality2Value = this.nationality2InputTarget.value\n }\n\n setSwedishTaxation() {\n this.swedishTaxationValue = (\n this.swedishTaxationInputTargets.find((t) => t.checked) || { value: `` }\n ).value\n }\n\n trackTaxationInputChange = debounce(() => {\n let valid = true\n\n this.taxationCountryInputTargets.forEach((t) => {\n if (!t.value) valid = false\n })\n\n if (valid) {\n valid = this.validateTinCodes()\n }\n\n this.toggleCitizenshipTaxationCountryLabels()\n this.toggleButtonEnabled(valid)\n }, 500)\n\n beforeSubmit() {\n this.taxationCountryInputTargets.map((t) => t.__CHOICES.enable())\n }\n\n // event handlers\n\n taxationInserted = () => {\n if (this.#setTaxationOnInsertUs) {\n this.#setTaxationOnInsertUs = false\n this.taxationCountryRemoveTargets[1].classList.add(`--hidden`)\n this.taxationCountryInputTargets[1].value = `US`\n\n window.setTimeout(() => {\n this.taxationCountryInputTargets[1].__CHOICES\n .setChoiceByValue(`US`)\n .disable()\n }, 50)\n }\n }\n\n // helpers\n\n toggleButtonEnabled = (enabled) => {\n this.submitButtonTargets.forEach((t) => (t.disabled = !enabled))\n }\n\n toggleCitizenshipCardFooterVisibility = (on) => {\n this.citizenshipCardTarget.dispatchEvent(\n new CustomEvent(on ? `commonCard:showFooter` : `commonCard:hideFooter`)\n )\n }\n\n validateTinCodes = () => {\n return this.taxationCountryTinInputTargets.reduce((allFieldsValid, t) => {\n let valid = true\n\n if (t.required && !t.value) valid = false\n\n // Get parent container for this field\n const parent = getParents(t, `.auth-page-taxation`)\n let selectedCountry = false\n\n // Grab what country is selected for this block\n if (parent[0])\n selectedCountry = parent[0].dataset.authPageTaxationSelectedCountryValue\n\n // For specific countries, add a regex pattern to the input\n if (selectedCountry) {\n switch (selectedCountry) {\n case `US`:\n t.pattern = `(\\\\d{3})(-|)(\\\\d{2})(-|)(\\\\d{4})` // eslint-disable-line\n t.placeholder = `XXX-XX-XXXX`\n t.title = `Felaktigt format. Exempel: XXX-XX-XXXX`\n break\n case `DK`:\n t.pattern = `(\\\\d{6})-(\\\\d{4})` // eslint-disable-line\n t.placeholder = `XXXXXX-XXXX`\n t.title = `Felaktigt format. Exempel: XXXXXX-XXXX`\n break\n case `NO`:\n t.pattern = `(\\\\d{11})` // eslint-disable-line\n t.placeholder = `XXXXXXXXXXX`\n t.title = `Felaktigt format. Exempel: XXXXXXXXXXX`\n break\n case `FI`:\n t.pattern = `(\\\\d{6})(\\\\+|-|A)(\\\\d{3})([A-Z0-9]{1})` // eslint-disable-line\n t.placeholder = `XXXXXXAXXXE`\n t.title = `Felaktigt format. Exempel: XXXXXXAXXXE`\n break\n case `IS`:\n t.pattern = `(\\\\d{6})-(\\\\d{4})` // eslint-disable-line\n t.placeholder = `XXXXXX-XXXX`\n t.title = `Felaktigt format. Exempel: XXXXXX-XXXX`\n break\n }\n }\n\n return allFieldsValid && valid\n }, true)\n }\n\n // setNationalitiesInputValue = () => {\n // this.nationalitiesInputTargets[0].value =\n // this.swedishPersonValue == `true` ? `SE` : this.nationality1Value\n\n // this.nationalitiesInputTargets[1].value =\n // this.usPersonValue == `true` ? `US` : this.nationality2Value\n // }\n\n toggleCitizenshipTaxationCountryLabels = () => {\n this.taxationCountryLabelTargets.forEach((t, i) =>\n t.classList.toggle(`--primary`, i == 0)\n )\n }\n}\n\nStimulus.register(`auth-page-citizenships`, AuthPageCitizenships)\n\n// taxations\n\nclass AuthPageTaxations extends Controller {\n static targets = [`add`, `item`, `itemRemove`, `country`]\n\n connect() {\n this.element.addEventListener(`cocoon:after-insert`, this.setThings)\n this.element.addEventListener(`cocoon:after-remove`, this.setThings)\n this.setThings()\n }\n\n setThings = () => {\n this.addTarget.classList.toggle(`hidden`, this.itemTargets.length >= 3)\n\n this.itemRemoveTarget.classList.toggle(\n `hidden`,\n this.itemTargets.length == 1\n )\n\n window.setTimeout(this.normalizeCountryOptions, 50)\n }\n\n normalizeCountryOptions = () => {\n const disabled = []\n\n this.countryTargets.forEach(\n (country) =>\n country.__CHOICES && disabled.push(country.__CHOICES.getValue(true))\n )\n\n this.countryTargets.forEach((country) => {\n if (country.__CHOICES) {\n const options = [...country.__CHOICES_OPTIONS]\n\n options.forEach((option) => {\n const value = country.__CHOICES.getValue(true)\n option.selected = option.value == value\n option.disabled = !option.selected && disabled.includes(option.value)\n })\n\n country.__CHOICES.setChoices(options, `value`, `label`, true)\n }\n })\n }\n\n countrySelected = () => {\n this.normalizeCountryOptions()\n }\n}\n\nStimulus.register(`auth-page-taxations`, AuthPageTaxations)\n\n// taxation\n\nclass AuthPageTaxation extends Controller {\n static targets = [`tin`, `country`]\n static values = {\n tinCountries: Array,\n noTinCountries: Array,\n selectedCountry: String,\n }\n\n connect() {\n this.countrySelected()\n }\n\n countrySelected = () => {\n this.selectedCountryValue = this.countryTarget.value\n }\n\n selectedCountryValueChanged = () => {\n this.tinTarget.dispatchEvent(\n new CustomEvent(`setRequired`, {\n detail: {\n required: this.tinCountriesValue.includes(this.selectedCountryValue),\n },\n })\n )\n\n this.tinTarget.classList.toggle(\n `hidden`,\n this.noTinCountriesValue.includes(this.selectedCountryValue)\n )\n }\n}\n\nStimulus.register(`auth-page-taxation`, AuthPageTaxation)\n\n// autogiro\n\nclass AuthPageAutogiro extends Controller {\n static values = { selected: String }\n static targets = [`group`]\n\n connect() {\n this.toggleGroups()\n }\n\n selectedValueChanged = () => {\n this.toggleGroups()\n }\n\n setSelected = (e) => {\n this.selectedValue = e.target.value\n }\n\n toggleGroups = () => {\n addClass(this.groupTargets, `hidden`)\n this.groupTargets.forEach((g) =>\n inputRequiredDisable(g.querySelectorAll(`input, select, textarea`))\n )\n\n if (this.selectedValue) {\n const activeGroupEl = this.groupTargets.find(\n (g) => g.dataset.value == this.selectedValue\n )\n\n if (activeGroupEl) {\n activeGroupEl.classList.remove(`hidden`)\n inputRequiredRestore(\n activeGroupEl.querySelectorAll(`input, select, textarea`)\n )\n }\n }\n }\n}\n\nStimulus.register(`auth-page-autogiro`, AuthPageAutogiro)\n\n// savings\n\nclass AuthPageSavings extends Controller {\n static targets = [\n `occupation`,\n `occupationSpecification`,\n `requiredField`,\n `employmentField`,\n `employer`,\n `fundsOwnerInput`,\n `fundsOwnerInputField`,\n `fundsOwnerDependant`,\n `submitButton`,\n ]\n\n static values = { fundsOwnerError: String }\n\n connect() {\n window.setTimeout(this.occupationChange, 50)\n window.setTimeout(this.fundsOwnerChange, 50)\n }\n\n occupationChange = () => {\n const isOther = this.occupationTarget.value == `OTHER`\n const isEmployee = [\n `EMPLOYEE`,\n `EXECUTIVE_EMPLOYEE`,\n `SELF_EMPLOYED`,\n ].includes(this.occupationTarget.value)\n\n this.occupationSpecificationTarget.classList.toggle(`hidden`, !isOther)\n this.occupationSpecificationTarget.dispatchEvent(\n new CustomEvent(`setRequired`, {\n detail: { required: isOther },\n })\n )\n\n this.requiredFieldTargets.forEach((f) => {\n f.dispatchEvent(\n new CustomEvent(`setRequired`, {\n detail: { required: isEmployee },\n })\n )\n })\n\n toggleClass(this.employmentFieldTargets, `hidden`, !isEmployee)\n\n if (this.occupationTarget.value === `SELF_EMPLOYED`) {\n toggleClass(this.employerTarget, `hidden`, true)\n }\n }\n\n fundsOwnerChange = () => {\n const checkedEl = this.fundsOwnerInputTargets.find((i) => i.checked)\n const isNotOwner = checkedEl && checkedEl.value == `false` ? true : false\n\n toggleClass(this.fundsOwnerDependantTargets, `hidden`, isNotOwner)\n this.submitButtonTarget.disabled = isNotOwner\n\n this.fundsOwnerInputFieldTarget.dispatchEvent(\n new CustomEvent(`setError`, {\n detail: { message: isNotOwner ? this.fundsOwnerErrorValue : `` },\n })\n )\n }\n}\n\nStimulus.register(`auth-page-savings`, AuthPageSavings)\n\n// status\n\nclass AuthPageStatus extends Controller {\n static values = { url: String }\n #timeout\n\n connect() {\n this.check()\n }\n\n disconnect() {\n window.clearTimeout(this.#timeout)\n }\n\n check = () => {\n this.#timeout = window.setTimeout(this.callApi, 2000)\n }\n\n callApi = () => {\n window.Rails.ajax({\n url: this.urlValue,\n type: `get`,\n success: (response) => {\n if (response.path) {\n window.location.href = response.path\n } else {\n this.check()\n }\n },\n })\n }\n}\n\nStimulus.register(`auth-page-status`, AuthPageStatus)\n","/**\r\n * Sticky Sidebar JavaScript Plugin.\r\n * @version 3.3.1\r\n * @author Ahmed Bouhuolia \r\n * @license The MIT License (MIT)\r\n */\r\nconst StickySidebar = (() => {\r\n \r\n // ---------------------------------\r\n // # Define Constants\r\n // ---------------------------------\r\n //\r\n const EVENT_KEY = '.stickySidebar';\r\n const VERSION = '3.3.1';\r\n \r\n const DEFAULTS = {\r\n \r\n /**\r\n * Additional top spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\r\n topSpacing: 0,\r\n \r\n /**\r\n * Additional bottom spacing of the element when it becomes sticky.\r\n * @type {Numeric|Function}\r\n */\r\n bottomSpacing: 0,\r\n \r\n /**\r\n * Container sidebar selector to know what the beginning and end of sticky element.\r\n * @type {String|False}\r\n */\r\n containerSelector: false,\r\n \r\n /**\r\n * Inner wrapper selector.\r\n * @type {String}\r\n */\r\n innerWrapperSelector: '.inner-wrapper-sticky',\r\n \r\n /**\r\n * The name of CSS class to apply to elements when they have become stuck.\r\n * @type {String|False}\r\n */\r\n stickyClass: 'is-affixed',\r\n \r\n /**\r\n * Detect when sidebar and its container change height so re-calculate their dimensions.\r\n * @type {Boolean}\r\n */\r\n resizeSensor: true,\r\n \r\n /**\r\n * The sidebar returns to its normal position if its width below this value.\r\n * @type {Numeric}\r\n */\r\n minWidth: false\r\n };\r\n \r\n // ---------------------------------\r\n // # Class Definition\r\n // ---------------------------------\r\n //\r\n /**\r\n * Sticky Sidebar Class.\r\n * @public\r\n */\r\n class StickySidebar{\r\n \r\n /**\r\n * Sticky Sidebar Constructor.\r\n * @constructor\r\n * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector.\r\n * @param {Object} options - The options of sticky sidebar.\r\n */\r\n constructor(sidebar, options = {}){\r\n this.options = StickySidebar.extend(DEFAULTS, options);\r\n \r\n // Sidebar element query if there's no one, throw error.\r\n this.sidebar = ('string' === typeof sidebar ) ? document.querySelector(sidebar) : sidebar;\r\n if( 'undefined' === typeof this.sidebar )\r\n throw new Error(\"There is no specific sidebar element.\");\r\n \r\n this.sidebarInner = false;\r\n this.container = this.sidebar.parentElement;\r\n \r\n // Current Affix Type of sidebar element.\r\n this.affixedType = 'STATIC';\r\n this.direction = 'down';\r\n this.support = {\r\n transform: false,\r\n transform3d: false\r\n };\r\n \r\n this._initialized = false;\r\n this._reStyle = false;\r\n this._breakpoint = false;\r\n this._resizeListeners = [];\r\n \r\n // Dimensions of sidebar, container and screen viewport.\r\n this.dimensions = {\r\n translateY: 0,\r\n topSpacing: 0,\r\n lastTopSpacing: 0,\r\n bottomSpacing: 0,\r\n lastBottomSpacing: 0,\r\n sidebarHeight: 0,\r\n sidebarWidth: 0,\r\n containerTop: 0,\r\n containerHeight: 0,\r\n viewportHeight: 0,\r\n viewportTop: 0, \r\n lastViewportTop: 0,\r\n };\r\n \r\n // Bind event handlers for referencability.\r\n ['handleEvent'].forEach( (method) => {\r\n this[method] = this[method].bind(this);\r\n });\r\n \r\n // Initialize sticky sidebar for first time.\r\n this.initialize();\r\n }\r\n \r\n /**\r\n * Initializes the sticky sidebar by adding inner wrapper, define its container, \r\n * min-width breakpoint, calculating dimensions, adding helper classes and inline style.\r\n * @private\r\n */\r\n initialize(){\r\n this._setSupportFeatures();\r\n \r\n // Get sticky sidebar inner wrapper, if not found, will create one.\r\n if( this.options.innerWrapperSelector ){\r\n this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector);\r\n \r\n if( null === this.sidebarInner )\r\n this.sidebarInner = false;\r\n }\r\n \r\n if( ! this.sidebarInner ){\r\n let wrapper = document.createElement('div');\r\n wrapper.setAttribute('class', 'inner-wrapper-sticky');\r\n this.sidebar.appendChild(wrapper);\r\n \r\n while( this.sidebar.firstChild != wrapper )\r\n wrapper.appendChild(this.sidebar.firstChild);\r\n \r\n this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky');\r\n }\r\n \r\n // Container wrapper of the sidebar.\r\n if( this.options.containerSelector ){\r\n let containers = document.querySelectorAll(this.options.containerSelector);\r\n containers = Array.prototype.slice.call(containers);\r\n \r\n containers.forEach((container, item) => {\r\n if( ! container.contains(this.sidebar) ) return;\r\n this.container = container;\r\n });\r\n \r\n if( ! containers.length )\r\n throw new Error(\"The container does not contains on the sidebar.\");\r\n }\r\n \r\n // If top/bottom spacing is not function parse value to integer.\r\n if( 'function' !== typeof this.options.topSpacing )\r\n this.options.topSpacing = parseInt(this.options.topSpacing) || 0;\r\n \r\n if( 'function' !== typeof this.options.bottomSpacing )\r\n this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0;\r\n \r\n // Breakdown sticky sidebar if screen width below `options.minWidth`.\r\n this._widthBreakpoint();\r\n \r\n // Calculate dimensions of sidebar, container and viewport.\r\n this.calcDimensions();\r\n \r\n // Affix sidebar in proper position.\r\n this.stickyPosition();\r\n \r\n // Bind all events.\r\n this.bindEvents();\r\n \r\n // Inform other properties the sticky sidebar is initialized.\r\n this._initialized = true;\r\n }\r\n \r\n /**\r\n * Bind all events of sticky sidebar plugin.\r\n * @protected\r\n */\r\n bindEvents(){\r\n window.addEventListener('resize', this, {passive: true, capture: false});\r\n window.addEventListener('scroll', this, {passive: true, capture: false});\r\n \r\n this.sidebar.addEventListener('update' + EVENT_KEY, this);\r\n \r\n if( this.options.resizeSensor && 'undefined' !== typeof ResizeSensor ){\r\n new ResizeSensor(this.sidebarInner, this.handleEvent);\r\n new ResizeSensor(this.container, this.handleEvent);\r\n }\r\n }\r\n \r\n /**\r\n * Handles all events of the plugin.\r\n * @param {Object} event - Event object passed from listener.\r\n */\r\n handleEvent(event){\r\n this.updateSticky(event);\r\n }\r\n \r\n /**\r\n * Calculates dimensions of sidebar, container and screen viewpoint\r\n * @public\r\n */\r\n calcDimensions(){\r\n if( this._breakpoint ) return;\r\n var dims = this.dimensions;\r\n \r\n // Container of sticky sidebar dimensions.\r\n dims.containerTop = StickySidebar.offsetRelative(this.container).top;\r\n dims.containerHeight = this.container.clientHeight;\r\n dims.containerBottom = dims.containerTop + dims.containerHeight;\r\n \r\n // Sidebar dimensions.\r\n dims.sidebarHeight = this.sidebarInner.offsetHeight;\r\n dims.sidebarWidth = this.sidebar.offsetWidth;\r\n \r\n // Screen viewport dimensions.\r\n dims.viewportHeight = window.innerHeight;\r\n \r\n this._calcDimensionsWithScroll();\r\n }\r\n \r\n /**\r\n * Some dimensions values need to be up-to-date when scrolling the page.\r\n * @private\r\n */\r\n _calcDimensionsWithScroll(){\r\n var dims = this.dimensions;\r\n \r\n dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left;\r\n \r\n dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop;\r\n dims.viewportBottom = dims.viewportTop + dims.viewportHeight;\r\n dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft;\r\n \r\n dims.topSpacing = this.options.topSpacing;\r\n dims.bottomSpacing = this.options.bottomSpacing;\r\n \r\n if( 'function' === typeof dims.topSpacing )\r\n dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0;\r\n \r\n if( 'function' === typeof dims.bottomSpacing )\r\n dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0;\r\n \r\n if( 'VIEWPORT-TOP' === this.affixedType ){\r\n // Adjust translate Y in the case decrease top spacing value.\r\n if( dims.topSpacing < dims.lastTopSpacing ){\r\n dims.translateY += dims.lastTopSpacing - dims.topSpacing;\r\n this._reStyle = true; \r\n }\r\n \r\n } else if( 'VIEWPORT-BOTTOM' === this.affixedType ){\r\n // Adjust translate Y in the case decrease bottom spacing value.\r\n if( dims.bottomSpacing < dims.lastBottomSpacing ){\r\n dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing;\r\n this._reStyle = true;\r\n }\r\n }\r\n \r\n dims.lastTopSpacing = dims.topSpacing;\r\n dims.lastBottomSpacing = dims.bottomSpacing;\r\n }\r\n \r\n /**\r\n * Determine whether the sidebar is bigger than viewport.\r\n * @public\r\n * @return {Boolean}\r\n */\r\n isSidebarFitsViewport(){\r\n return this.dimensions.sidebarHeight < this.dimensions.viewportHeight;\r\n }\r\n \r\n /**\r\n * Observe browser scrolling direction top and down.\r\n */\r\n observeScrollDir(){\r\n var dims = this.dimensions;\r\n if( dims.lastViewportTop === dims.viewportTop ) return;\r\n \r\n var furthest = 'down' === this.direction ? Math.min : Math.max;\r\n \r\n // If the browser is scrolling not in the same direction.\r\n if( dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop) )\r\n this.direction = 'down' === this.direction ? 'up' : 'down';\r\n }\r\n \r\n /**\r\n * Gets affix type of sidebar according to current scrollTop and scrollLeft.\r\n * Holds all logical affix of the sidebar when scrolling up and down and when sidebar \r\n * is bigger than viewport and vice versa.\r\n * @public\r\n * @return {String|False} - Proper affix type.\r\n */\r\n getAffixType(){\r\n var dims = this.dimensions, affixType = false;\r\n \r\n this._calcDimensionsWithScroll();\r\n \r\n var sidebarBottom = dims.sidebarHeight + dims.containerTop;\r\n var colliderTop = dims.viewportTop + dims.topSpacing;\r\n var colliderBottom = dims.viewportBottom - dims.bottomSpacing;\r\n \r\n // When browser is scrolling top.\r\n if( 'up' === this.direction ){\r\n if( colliderTop <= dims.containerTop ){\r\n dims.translateY = 0;\r\n affixType = 'STATIC';\r\n \r\n } else if( colliderTop <= dims.translateY + dims.containerTop ){\r\n dims.translateY = colliderTop - dims.containerTop;\r\n affixType = 'VIEWPORT-TOP';\r\n \r\n } else if( ! this.isSidebarFitsViewport() && dims.containerTop <= colliderTop ){\r\n affixType = 'VIEWPORT-UNBOTTOM';\r\n }\r\n // When browser is scrolling up.\r\n } else {\r\n // When sidebar element is not bigger than screen viewport.\r\n if( this.isSidebarFitsViewport() ){\r\n \r\n if( dims.sidebarHeight + colliderTop >= dims.containerBottom ){\r\n dims.translateY = dims.containerBottom - sidebarBottom;\r\n affixType = 'CONTAINER-BOTTOM'; \r\n \r\n } else if( colliderTop >= dims.containerTop ){\r\n dims.translateY = colliderTop - dims.containerTop;\r\n affixType = 'VIEWPORT-TOP';\r\n }\r\n // When sidebar element is bigger than screen viewport.\r\n } else {\r\n \r\n if( dims.containerBottom <= colliderBottom ){\r\n dims.translateY = dims.containerBottom - sidebarBottom; \r\n affixType = 'CONTAINER-BOTTOM'; \r\n \r\n } else if( sidebarBottom + dims.translateY <= colliderBottom ){\r\n dims.translateY = colliderBottom - sidebarBottom;\r\n affixType = 'VIEWPORT-BOTTOM';\r\n \r\n } else if( dims.containerTop + dims.translateY <= colliderTop ){\r\n affixType = 'VIEWPORT-UNBOTTOM';\r\n }\r\n }\r\n }\r\n \r\n // Make sure the translate Y is not bigger than container height.\r\n dims.translateY = Math.max(0, dims.translateY);\r\n dims.translateY = Math.min(dims.containerHeight, dims.translateY);\r\n \r\n dims.lastViewportTop = dims.viewportTop;\r\n return affixType;\r\n }\r\n \r\n /**\r\n * Gets inline style of sticky sidebar wrapper and inner wrapper according \r\n * to its affix type.\r\n * @private\r\n * @param {String} affixType - Affix type of sticky sidebar.\r\n * @return {Object}\r\n */\r\n _getStyle(affixType){\r\n if( 'undefined' === typeof affixType ) return;\r\n \r\n var style = {inner: {}, outer: {}};\r\n var dims = this.dimensions;\r\n \r\n switch( affixType ){\r\n case 'VIEWPORT-TOP':\r\n style.inner = {position: 'fixed', top: dims.topSpacing,\r\n left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth};\r\n break;\r\n case 'VIEWPORT-BOTTOM':\r\n style.inner = {position: 'fixed', top: 'auto', left: dims.sidebarLeft,\r\n bottom: dims.bottomSpacing, width: dims.sidebarWidth};\r\n break;\r\n case 'CONTAINER-BOTTOM':\r\n case 'VIEWPORT-UNBOTTOM':\r\n let translate = this._getTranslate(0, dims.translateY + 'px');\r\n \r\n if( translate )\r\n style.inner = {transform: translate};\r\n else \r\n style.inner = {position: 'absolute', top: dims.translateY, width: dims.sidebarWidth};\r\n break;\r\n }\r\n \r\n switch( affixType ){\r\n case 'VIEWPORT-TOP':\r\n case 'VIEWPORT-BOTTOM':\r\n case 'VIEWPORT-UNBOTTOM':\r\n case 'CONTAINER-BOTTOM':\r\n style.outer = {height: dims.sidebarHeight, position: 'relative'};\r\n break;\r\n }\r\n \r\n style.outer = StickySidebar.extend({height: '', position: ''}, style.outer);\r\n style.inner = StickySidebar.extend({position: 'relative', top: '', left: '',\r\n bottom: '', width: '', transform: this._getTranslate()}, style.inner);\r\n \r\n return style;\r\n }\r\n \r\n /**\r\n * Cause the sidebar to be sticky according to affix type by adding inline\r\n * style, adding helper class and trigger events.\r\n * @function\r\n * @protected\r\n * @param {string} force - Update sticky sidebar position by force.\r\n */\r\n stickyPosition(force){\r\n if( this._breakpoint ) return;\r\n \r\n force = this._reStyle || force || false;\r\n \r\n var offsetTop = this.options.topSpacing;\r\n var offsetBottom = this.options.bottomSpacing;\r\n \r\n var affixType = this.getAffixType();\r\n var style = this._getStyle(affixType);\r\n \r\n if( (this.affixedType != affixType || force) && affixType ){\r\n let affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\r\n StickySidebar.eventTrigger(this.sidebar, affixEvent);\r\n \r\n if( 'STATIC' === affixType )\r\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\r\n else\r\n StickySidebar.addClass(this.sidebar, this.options.stickyClass);\r\n \r\n for( let key in style.outer ){\r\n let _unit = ('number' === typeof style.outer[key]) ? 'px' : '';\r\n this.sidebar.style[key] = style.outer[key];\r\n }\r\n \r\n for( let key in style.inner ){\r\n let _unit = ('number' === typeof style.inner[key]) ? 'px' : '';\r\n this.sidebarInner.style[key] = style.inner[key] + _unit;\r\n }\r\n \r\n let affixedEvent = 'affixed.'+ affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY;\r\n StickySidebar.eventTrigger(this.sidebar, affixedEvent);\r\n } else {\r\n if( this._initialized ) this.sidebarInner.style.left = style.inner.left;\r\n }\r\n \r\n this.affixedType = affixType;\r\n }\r\n \r\n /**\r\n * Breakdown sticky sidebar when window width is below `options.minWidth` value.\r\n * @protected\r\n */\r\n _widthBreakpoint(){\r\n \r\n if( window.innerWidth <= this.options.minWidth ){\r\n this._breakpoint = true;\r\n this.affixedType = 'STATIC';\r\n \r\n this.sidebar.removeAttribute('style');\r\n StickySidebar.removeClass(this.sidebar, this.options.stickyClass);\r\n this.sidebarInner.removeAttribute('style');\r\n } else {\r\n this._breakpoint = false;\r\n }\r\n }\r\n \r\n /**\r\n * Switches between functions stack for each event type, if there's no \r\n * event, it will re-initialize sticky sidebar.\r\n * @public\r\n */\r\n updateSticky(event = {}){\r\n if( this._running ) return;\r\n this._running = true;\r\n \r\n ((eventType) => {\r\n\r\n requestAnimationFrame(() => {\r\n switch( eventType ){\r\n // When browser is scrolling and re-calculate just dimensions\r\n // within scroll. \r\n case 'scroll':\r\n this._calcDimensionsWithScroll();\r\n this.observeScrollDir();\r\n this.stickyPosition();\r\n break;\r\n \r\n // When browser is resizing or there's no event, observe width\r\n // breakpoint and re-calculate dimensions.\r\n case 'resize':\r\n default: \r\n this._widthBreakpoint();\r\n this.calcDimensions();\r\n this.stickyPosition(true);\r\n break;\r\n }\r\n this._running = false;\r\n });\r\n })(event.type);\r\n }\r\n \r\n /**\r\n * Set browser support features to the public property.\r\n * @private\r\n */\r\n _setSupportFeatures(){\r\n var support = this.support;\r\n \r\n support.transform = StickySidebar.supportTransform();\r\n support.transform3d = StickySidebar.supportTransform(true);\r\n }\r\n \r\n /**\r\n * Get translate value, if the browser supports transfrom3d, it will adopt it.\r\n * and the same with translate. if browser doesn't support both return false.\r\n * @param {Number} y - Value of Y-axis.\r\n * @param {Number} x - Value of X-axis.\r\n * @param {Number} z - Value of Z-axis.\r\n * @return {String|False}\r\n */\r\n _getTranslate(y = 0, x = 0, z = 0){\r\n if( this.support.transform3d ) return 'translate3d(' + y +', '+ x +', '+ z +')';\r\n else if( this.support.translate ) return 'translate('+ y +', '+ x +')';\r\n else return false;\r\n }\r\n \r\n /**\r\n * Destroy sticky sidebar plugin.\r\n * @public\r\n */\r\n destroy(){\r\n window.removeEventListener('resize', this, {caption: false});\r\n window.removeEventListener('scroll', this, {caption: false});\r\n \r\n this.sidebar.classList.remove(this.options.stickyClass);\r\n this.sidebar.style.minHeight = '';\r\n \r\n this.sidebar.removeEventListener('update' + EVENT_KEY, this);\r\n \r\n var styleReset = {inner: {}, outer: {}};\r\n \r\n styleReset.inner = {position: '', top: '', left: '', bottom: '', width: '', transform: ''};\r\n styleReset.outer = {height: '', position: ''};\r\n \r\n for( let key in styleReset.outer )\r\n this.sidebar.style[key] = styleReset.outer[key];\r\n \r\n for( let key in styleReset.inner )\r\n this.sidebarInner.style[key] = styleReset.inner[key];\r\n \r\n if( this.options.resizeSensor && 'undefined' !== typeof ResizeSensor ){\r\n ResizeSensor.detach(this.sidebarInner, this.handleEvent);\r\n ResizeSensor.detach(this.container, this.handleEvent);\r\n }\r\n }\r\n \r\n /**\r\n * Determine if the browser supports CSS transform feature.\r\n * @function\r\n * @static\r\n * @param {Boolean} transform3d - Detect transform with translate3d.\r\n * @return {String}\r\n */\r\n static supportTransform(transform3d){\r\n var result = false,\r\n property = (transform3d) ? 'perspective' : 'transform',\r\n upper = property.charAt(0).toUpperCase() + property.slice(1),\r\n prefixes = ['Webkit', 'Moz', 'O', 'ms'],\r\n support = document.createElement('support'),\r\n style = support.style;\r\n \r\n (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function(property, i) {\r\n if (style[property] !== undefined) {\r\n result = property;\r\n return false;\r\n }\r\n });\r\n return result;\r\n }\r\n \r\n /**\r\n * Trigger custom event.\r\n * @static\r\n * @param {DOMObject} element - Target element on the DOM.\r\n * @param {String} eventName - Event name.\r\n * @param {Object} data - \r\n */\r\n static eventTrigger(element, eventName, data){\r\n try{\r\n var event = new CustomEvent(eventName, {detail: data});\r\n } catch(e){\r\n var event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, true, data);\r\n }\r\n element.dispatchEvent(event);\r\n }\r\n \r\n /**\r\n * Extend options object with defaults.\r\n * @function\r\n * @static\r\n */\r\n static extend(defaults, options){\r\n var results = {};\r\n for( let key in defaults ){\r\n if( 'undefined' !== typeof options[key] ) results[key] = options[key];\r\n else results[key] = defaults[key];\r\n }\r\n return results;\r\n }\r\n \r\n /**\r\n * Get current coordinates left and top of specific element.\r\n * @static\r\n */\r\n static offsetRelative(element){\r\n var result = {left: 0, top: 0};\r\n\r\n do{\r\n let offsetTop = element.offsetTop;\r\n let offsetLeft = element.offsetLeft;\r\n \r\n if( ! isNaN(offsetTop) )\r\n result.top += offsetTop;\r\n \r\n if( ! isNaN(offsetLeft) )\r\n result.left += offsetLeft;\r\n\r\n element = ( 'BODY' === element.tagName ) ?\r\n element.parentElement : element.offsetParent;\r\n } while(element)\r\n return result;\r\n }\r\n \r\n /**\r\n * Add specific class name to specific element.\r\n * @static \r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static addClass(element, className){\r\n if( ! StickySidebar.hasClass(element, className) ){\r\n if (element.classList)\r\n element.classList.add(className);\r\n else\r\n element.className += ' ' + className;\r\n }\r\n }\r\n \r\n /**\r\n * Remove specific class name to specific element\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static removeClass(element, className){\r\n if( StickySidebar.hasClass(element, className) ){\r\n if (element.classList)\r\n element.classList.remove(className);\r\n else\r\n element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\r\n }\r\n }\r\n\r\n /**\r\n * Determine weather the element has specific class name.\r\n * @static\r\n * @param {ObjectDOM} element \r\n * @param {String} className \r\n */\r\n static hasClass(element, className){\r\n if (element.classList)\r\n return element.classList.contains(className);\r\n else\r\n return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\r\n }\r\n }\r\n \r\n return StickySidebar;\r\n })();\r\n \r\n export default StickySidebar;\r\n \r\n // Global\r\n // -------------------------\r\n window.StickySidebar = StickySidebar;","import { Controller } from \"@hotwired/stimulus\"\nimport StickySidebar from \"sticky-sidebar\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\n// savings\n\nclass HomePageSavings extends Controller {\n static targets = [`pie`, `chart`]\n\n connect() {\n new StickySidebar(this.pieTarget, { topSpacing: 20 })\n\n document.documentElement.addEventListener(\n `turbo:frame-render`,\n this.turboFrameRender\n )\n }\n\n turboFrameRender = (e) => {\n if (\n !e.target.classList.contains(`js--home-page-savings-account-card-frame`)\n )\n return\n\n this.chartTarget.dispatchEvent(\n new CustomEvent(`accountPieChart:setChartLabel`, {\n detail: {\n id: e.target.dataset.accountId,\n label: e.target.querySelector(`.account-card`).dataset.title,\n },\n })\n )\n }\n}\n\nStimulus.register(`home-page-savings`, HomePageSavings)\n","import { Controller } from \"@hotwired/stimulus\"\nimport { debounce } from \"lodash\"\nimport { nanoid } from \"nanoid\"\nimport { addClass, toggleClass } from \"@oddcamp/js-utils/src/attribute\"\nimport { getParents } from \"@oddcamp/js-utils/src/selector\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\nimport {\n inputRequiredDisable,\n inputRequiredRestore,\n} from \"../../shared/utils/input-required\"\n\n// citizenships\n\nclass KycPageCitizenships extends Controller {\n static targets = [\n `nationalitiesInput`,\n `submitButton`,\n `citizenshipCard`,\n `swedishPersonInput`,\n `usPerson`,\n `usPersonInput`,\n `nationality1`,\n `nationality1Input`,\n `multipleNationalities`,\n `multipleNationalitiesInput`,\n `nationality2`,\n `nationality2Input`,\n `taxation`,\n `taxations`,\n `swedishTaxationInput`,\n `taxationCountries`,\n `taxationCountriesAdd`,\n `taxationCountriesAddButton`,\n `taxationItem`,\n `taxationCountryLabel`,\n `taxationCountryInput`,\n `taxationCountryTinInput`,\n `taxationCountryRemove`,\n ]\n\n static values = {\n swedishPerson: String,\n usPerson: String,\n nationality1: String,\n multipleNationalities: String,\n nationality2: String,\n swedishTaxation: String,\n }\n\n #isValueResetNeeded = false\n #setTaxationOnInsertUs = false\n\n connect() {\n this.taxationsTarget.addEventListener(\n `cocoon:after-insert`,\n this.taxationInserted\n )\n\n setTimeout(() => {\n this.#isValueResetNeeded = true\n this.validateTinCodes()\n }, 0)\n }\n\n // changers\n\n swedishPersonValueChanged() {\n if (this.#isValueResetNeeded) {\n this.usPersonValue = ``\n this.usPersonInputTargets.forEach((t) => (t.checked = false))\n }\n\n this.usPersonTarget.classList.toggle(`hidden`, !this.swedishPersonValue)\n }\n\n usPersonValueChanged() {\n this.nationality1Value = nanoid()\n\n const showNationality1 =\n this.swedishPersonValue == `false` && this.usPersonValue == `false`\n\n this.nationality1Target.classList.toggle(`hidden`, !showNationality1)\n\n if (this.#isValueResetNeeded) {\n this.nationality1InputTarget.value = ``\n if (this.nationality1InputTarget.__CHOICES)\n this.nationality1InputTarget.__CHOICES.setChoiceByValue(``)\n\n this.nationalitiesInputTargets.forEach((t) => (t.value = ``))\n if (this.swedishPersonValue == `true`)\n this.nationalitiesInputTargets[0].value = `SE`\n if (this.usPersonValue == `true`)\n this.nationalitiesInputTargets[this.swedishPersonValue == `true` ? 1 : 0].value = `US` // eslint-disable-line prettier/prettier\n }\n }\n\n nationality1ValueChanged() {\n const showMultipleNationalities =\n this.swedishPersonValue &&\n this.usPersonValue &&\n (this.swedishPersonValue == `false` || this.usPersonValue == `false`)\n\n this.multipleNationalitiesTarget.classList.toggle(\n `hidden`,\n !showMultipleNationalities\n )\n\n if (this.#isValueResetNeeded) {\n this.multipleNationalitiesValue =\n this.swedishPersonValue == `true` && this.usPersonValue == `true`\n ? `false`\n : ``\n this.multipleNationalitiesInputTargets.forEach((t) => (t.checked = false))\n\n if (this.nationality2InputTarget.__CHOICES) {\n const options = [...this.nationality2InputTarget.__CHOICES_OPTIONS]\n options.forEach(\n (o) => (o.disabled = o.value && o.value == this.nationality1Value)\n )\n this.nationality2InputTarget.__CHOICES.setChoices(\n options,\n `value`,\n `label`,\n true\n )\n }\n\n if (\n this.nationality1Value.length == 2 &&\n this.swedishPersonValue &&\n this.usPersonValue &&\n this.swedishPersonValue == `false` &&\n this.usPersonValue == `false`\n )\n this.nationalitiesInputTargets[0].value = this.nationality1Value\n }\n }\n\n multipleNationalitiesValueChanged(value) {\n this.toggleCitizenshipCardFooterVisibility(true)\n\n if (this.#isValueResetNeeded) {\n this.swedishTaxationValue = ``\n this.swedishTaxationInputTargets.forEach((t) => (t.checked = false))\n this.nationality2Value = ``\n this.nationality2InputTarget.value = ``\n if (this.nationality2InputTarget.__CHOICES)\n this.nationality2InputTarget.__CHOICES.setChoiceByValue(``)\n }\n\n if (value) {\n this.nationality2Target.classList.toggle(`hidden`, value != `true`)\n this.toggleCitizenshipCardFooterVisibility(value == `true`)\n } else {\n this.nationality2Target.classList.add(`hidden`)\n }\n }\n\n nationality2ValueChanged(value) {\n if (this.#isValueResetNeeded) {\n this.swedishTaxationValue = ``\n this.swedishTaxationInputTargets.forEach((t) => (t.checked = false))\n\n if (this.swedishPersonValue == `false` || this.usPersonValue == `false`)\n this.nationalitiesInputTargets[1].value = value\n }\n\n if (value) {\n this.toggleCitizenshipCardFooterVisibility(!value)\n } else if (!this.multipleNationalitiesValue) {\n this.toggleCitizenshipCardFooterVisibility(true)\n }\n }\n\n swedishTaxationValueChanged(value) {\n if (this.#isValueResetNeeded) {\n this.taxationItemTargets.slice(1).forEach((t) => t.remove())\n this.taxationCountryInputTarget.value = ``\n this.taxationCountryTinInputTarget.value = ``\n if (this.taxationCountryInputTarget.__CHOICES)\n this.taxationCountryInputTarget.__CHOICES.setChoiceByValue(``).enable()\n this.taxationCountryRemoveTarget.classList.add(`hidden`)\n this.taxationCountryRemoveTarget.classList.remove(`--hidden`)\n this.taxationCountriesTarget.classList.toggle(`hidden`, !value)\n this.taxationCountriesAddTarget.classList.remove(`hidden`)\n this.toggleButtonEnabled(value == `true`)\n }\n\n if (value == `true`) {\n this.taxationCountryRemoveTarget.classList.add(`--hidden`)\n\n if (this.#isValueResetNeeded)\n this.taxationCountryInputTarget.__CHOICES\n .setChoiceByValue(`SE`)\n .disable()\n }\n\n if (this.usPersonValue == `true`) {\n if (value == `true`) {\n this.#setTaxationOnInsertUs = true\n\n if (this.#isValueResetNeeded) {\n this.taxationCountriesAddButtonTarget.click()\n }\n } else {\n this.taxationCountryRemoveTarget.classList.add(`--hidden`)\n\n if (this.#isValueResetNeeded)\n this.taxationCountryInputTarget.__CHOICES\n .setChoiceByValue(`US`)\n .disable()\n }\n }\n\n if (this.#isValueResetNeeded) {\n this.taxationCountryInputTarget.dispatchEvent(new CustomEvent(`change`))\n // this.setNationalitiesInputValue()\n }\n }\n\n // actions\n\n setSwedishPerson() {\n this.swedishPersonValue = (\n this.swedishPersonInputTargets.find((t) => t.checked) || { value: `` }\n ).value\n }\n\n setUsPerson() {\n this.usPersonValue = (\n this.usPersonInputTargets.find((t) => t.checked) || { value: `` }\n ).value\n }\n\n setNationality1() {\n this.nationality1Value = this.nationality1InputTarget.value\n }\n\n setMultipleNationalities() {\n this.multipleNationalitiesValue = (\n this.multipleNationalitiesInputTargets.find((t) => t.checked) || {\n value: ``,\n }\n ).value\n }\n\n setNationality2() {\n this.nationality2Value = this.nationality2InputTarget.value\n }\n\n setSwedishTaxation() {\n this.swedishTaxationValue = (\n this.swedishTaxationInputTargets.find((t) => t.checked) || { value: `` }\n ).value\n }\n\n trackTaxationInputChange = debounce(() => {\n let valid = true\n\n this.taxationCountryInputTargets.forEach((t) => {\n if (!t.value) valid = false\n })\n\n if (valid) {\n valid = this.validateTinCodes()\n }\n\n this.toggleCitizenshipTaxationCountryLabels()\n this.toggleButtonEnabled(valid)\n }, 500)\n\n beforeSubmit() {\n this.taxationCountryInputTargets.map((t) => t.__CHOICES.enable())\n }\n\n // event handlers\n\n taxationInserted = () => {\n if (this.#setTaxationOnInsertUs) {\n this.#setTaxationOnInsertUs = false\n this.taxationCountryRemoveTargets[1].classList.add(`--hidden`)\n this.taxationCountryInputTargets[1].value = `US`\n\n window.setTimeout(() => {\n this.taxationCountryInputTargets[1].__CHOICES\n .setChoiceByValue(`US`)\n .disable()\n }, 50)\n }\n }\n\n // helpers\n\n toggleButtonEnabled = (enabled) => {\n this.submitButtonTargets.forEach((t) => (t.disabled = !enabled))\n }\n\n toggleCitizenshipCardFooterVisibility = (on) => {\n this.citizenshipCardTarget.dispatchEvent(\n new CustomEvent(on ? `commonCard:showFooter` : `commonCard:hideFooter`)\n )\n }\n\n validateTinCodes = () => {\n return this.taxationCountryTinInputTargets.reduce((allFieldsValid, t) => {\n let valid = true\n\n if (t.required && !t.value) valid = false\n\n // Get parent container for this field\n const parent = getParents(t, `.kyc-page-taxation`)\n let selectedCountry = false\n\n // Grab what country is selected for this block\n if (parent[0])\n selectedCountry = parent[0].dataset.kycPageTaxationSelectedCountryValue\n\n // For specific countries, add a regex pattern to the input\n if (selectedCountry) {\n switch (selectedCountry) {\n case `US`:\n t.pattern = `(\\\\d{3})(-|)(\\\\d{2})(-|)(\\\\d{4})` // eslint-disable-line\n t.placeholder = `XXX-XX-XXXX`\n t.title = `Felaktigt format. Exempel: XXX-XX-XXXX`\n break\n case `DK`:\n t.pattern = `(\\\\d{6})-(\\\\d{4})` // eslint-disable-line\n t.placeholder = `XXXXXX-XXXX`\n t.title = `Felaktigt format. Exempel: XXXXXX-XXXX`\n break\n case `NO`:\n t.pattern = `(\\\\d{11})` // eslint-disable-line\n t.placeholder = `XXXXXXXXXXX`\n t.title = `Felaktigt format. Exempel: XXXXXXXXXXX`\n break\n case `FI`:\n t.pattern = `(\\\\d{6})(\\\\+|-|A)(\\\\d{3})([A-Z0-9]{1})` // eslint-disable-line\n t.placeholder = `XXXXXXAXXXE`\n t.title = `Felaktigt format. Exempel: XXXXXXAXXXE`\n break\n case `IS`:\n t.pattern = `(\\\\d{6})-(\\\\d{4})` // eslint-disable-line\n t.placeholder = `XXXXXX-XXXX`\n t.title = `Felaktigt format. Exempel: XXXXXX-XXXX`\n break\n }\n }\n\n return allFieldsValid && valid\n }, true)\n }\n\n // setNationalitiesInputValue = () => {\n // this.nationalitiesInputTargets[0].value =\n // this.swedishPersonValue == `true` ? `SE` : this.nationality1Value\n\n // this.nationalitiesInputTargets[1].value =\n // this.usPersonValue == `true` ? `US` : this.nationality2Value\n // }\n\n toggleCitizenshipTaxationCountryLabels = () => {\n this.taxationCountryLabelTargets.forEach((t, i) =>\n t.classList.toggle(`--primary`, i == 0)\n )\n }\n}\n\nStimulus.register(`kyc-page-citizenships`, KycPageCitizenships)\n\n// taxations\n\nclass KycPageTaxations extends Controller {\n static targets = [`add`, `item`, `itemRemove`, `country`]\n\n connect() {\n this.element.addEventListener(`cocoon:after-insert`, this.setThings)\n this.element.addEventListener(`cocoon:after-remove`, this.setThings)\n this.setThings()\n }\n\n setThings = () => {\n this.addTarget.classList.toggle(`hidden`, this.itemTargets.length >= 3)\n\n this.itemRemoveTarget.classList.toggle(\n `hidden`,\n this.itemTargets.length == 1\n )\n\n window.setTimeout(this.normalizeCountryOptions, 50)\n }\n\n normalizeCountryOptions = () => {\n const disabled = []\n\n this.countryTargets.forEach(\n (country) =>\n country.__CHOICES && disabled.push(country.__CHOICES.getValue(true))\n )\n\n this.countryTargets.forEach((country) => {\n if (country.__CHOICES) {\n const options = [...country.__CHOICES_OPTIONS]\n\n options.forEach((option) => {\n const value = country.__CHOICES.getValue(true)\n option.selected = option.value == value\n option.disabled = !option.selected && disabled.includes(option.value)\n })\n\n country.__CHOICES.setChoices(options, `value`, `label`, true)\n }\n })\n }\n\n countrySelected = () => {\n this.normalizeCountryOptions()\n }\n}\n\nStimulus.register(`kyc-page-taxations`, KycPageTaxations)\n\n// taxation\n\nclass KycPageTaxation extends Controller {\n static targets = [`tin`, `country`]\n static values = {\n tinCountries: Array,\n noTinCountries: Array,\n selectedCountry: String,\n }\n\n connect() {\n this.countrySelected()\n }\n\n countrySelected = () => {\n this.selectedCountryValue = this.countryTarget.value\n }\n\n selectedCountryValueChanged = () => {\n this.tinTarget.dispatchEvent(\n new CustomEvent(`setRequired`, {\n detail: {\n required: this.tinCountriesValue.includes(this.selectedCountryValue),\n },\n })\n )\n\n this.tinTarget.classList.toggle(\n `hidden`,\n this.noTinCountriesValue.includes(this.selectedCountryValue)\n )\n }\n}\n\nStimulus.register(`kyc-page-taxation`, KycPageTaxation)\n\n// autogiro\n\nclass KycPageAutogiro extends Controller {\n static values = { selected: String }\n static targets = [`group`]\n\n connect() {\n this.toggleGroups()\n }\n\n selectedValueChanged = () => {\n this.toggleGroups()\n }\n\n setSelected = (e) => {\n this.selectedValue = e.target.value\n }\n\n toggleGroups = () => {\n addClass(this.groupTargets, `hidden`)\n this.groupTargets.forEach((g) =>\n inputRequiredDisable(g.querySelectorAll(`input, select, textarea`))\n )\n\n if (this.selectedValue) {\n const activeGroupEl = this.groupTargets.find(\n (g) => g.dataset.value == this.selectedValue\n )\n\n if (activeGroupEl) {\n activeGroupEl.classList.remove(`hidden`)\n inputRequiredRestore(\n activeGroupEl.querySelectorAll(`input, select, textarea`)\n )\n }\n }\n }\n}\n\nStimulus.register(`kyc-page-autogiro`, KycPageAutogiro)\n\n// savings\n\nclass KycPageSavings extends Controller {\n static targets = [\n `occupation`,\n `occupationSpecification`,\n `requiredField`,\n `employmentField`,\n `employer`,\n `fundsOwnerInput`,\n `fundsOwnerInputField`,\n `fundsOwnerDependant`,\n `submitButton`,\n ]\n\n static values = { fundsOwnerError: String }\n\n connect() {\n window.setTimeout(this.occupationChange, 50)\n window.setTimeout(this.fundsOwnerChange, 50)\n }\n\n occupationChange = () => {\n const isOther = this.occupationTarget.value == `OTHER`\n const isEmployee = [\n `EMPLOYEE`,\n `EXECUTIVE_EMPLOYEE`,\n `SELF_EMPLOYED`,\n ].includes(this.occupationTarget.value)\n\n this.occupationSpecificationTarget.classList.toggle(`hidden`, !isOther)\n this.occupationSpecificationTarget.dispatchEvent(\n new CustomEvent(`setRequired`, {\n detail: { required: isOther },\n })\n )\n\n this.requiredFieldTargets.forEach((f) => {\n f.dispatchEvent(\n new CustomEvent(`setRequired`, {\n detail: { required: isEmployee },\n })\n )\n })\n\n toggleClass(this.employmentFieldTargets, `hidden`, !isEmployee)\n\n if (this.occupationTarget.value === `SELF_EMPLOYED`) {\n toggleClass(this.employerTarget, `hidden`, true)\n }\n }\n\n fundsOwnerChange = () => {\n const checkedEl = this.fundsOwnerInputTargets.find((i) => i.checked)\n const isNotOwner = checkedEl && checkedEl.value == `false` ? true : false\n\n toggleClass(this.fundsOwnerDependantTargets, `hidden`, isNotOwner)\n this.submitButtonTarget.disabled = isNotOwner\n\n this.fundsOwnerInputFieldTarget.dispatchEvent(\n new CustomEvent(`setError`, {\n detail: { message: isNotOwner ? this.fundsOwnerErrorValue : `` },\n })\n )\n }\n}\n\nStimulus.register(`kyc-page-savings`, KycPageSavings)\n\n// status\n\nclass KycPageStatus extends Controller {\n static values = { url: String }\n #timeout\n\n connect() {\n this.check()\n }\n\n disconnect() {\n window.clearTimeout(this.#timeout)\n }\n\n check = () => {\n this.#timeout = window.setTimeout(this.callApi, 2000)\n }\n\n callApi = () => {\n window.Rails.ajax({\n url: this.urlValue,\n type: `get`,\n success: (response) => {\n if (response.path) {\n window.location.href = response.path\n } else {\n this.check()\n }\n },\n })\n }\n}\n\nStimulus.register(`kyc-page-status`, KycPageStatus)\n","import { Controller } from \"@hotwired/stimulus\"\nimport throttle from \"raf-throttle\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\n// number\n\nclass TransfersPageNumber extends Controller {\n static values = { number: String }\n\n copy(e) {\n navigator.clipboard.writeText(this.numberValue)\n e.target.classList.add(`--copied`)\n window.setTimeout(() => e.target.classList.remove(`--copied`), 2000)\n }\n}\n\nStimulus.register(`transfers-page-number`, TransfersPageNumber)\n\n// table (order)\n\nclass TransfersPageOrder extends Controller {\n static targets = [`ref`, `refToggle`, `refCopy`]\n static values = { ref: String, refActive: Boolean }\n\n refActiveValueChanged() {\n if (this.hasRefTarget && this.hasRefToggleTarget) {\n this.refTarget.classList.toggle(`--active`, this.refActiveValue)\n this.refToggleTarget.classList.toggle(`--active`, this.refActiveValue)\n }\n }\n\n toggleRef = () => (this.refActiveValue = !this.refActiveValue)\n\n copyRef = () => {\n navigator.clipboard.writeText(this.refValue)\n this.refCopyTarget.classList.add(`--copied`)\n window.setTimeout(\n () => this.refCopyTarget.classList.remove(`--copied`),\n 2000\n )\n }\n}\n\nStimulus.register(`transfers-page-order`, TransfersPageOrder)\n\n// table\n\nclass TransfersPageOrderDescription extends Controller {\n static targets = [`text`, `button`]\n static values = { active: Boolean }\n #resizeHandler = null\n\n connect() {\n this.#resizeHandler = throttle(this.toggleButtonVisibility)\n window.addEventListener(`resize`, this.#resizeHandler)\n this.toggleButtonVisibility()\n }\n\n disconnect() {\n window.removeEventListener(`resize`, this.#resizeHandler)\n }\n\n toggle = () => (this.activeValue = !this.activeValue)\n\n toggleButtonVisibility = () => {\n this.buttonTarget.classList.toggle(\n `hidden`,\n this.textTarget.offsetWidth >= this.textTarget.scrollWidth\n )\n }\n}\n\nStimulus.register(\n `transfers-page-order-description`,\n TransfersPageOrderDescription\n)\n\n// deposit tabs + button visibility\n\ndocument.addEventListener(`tabbedContent:tabSwitched`, (e) => {\n const { element, activeIndex } = e.detail\n if (element.classList.contains(`transfers-page-deposit-tabs`)) {\n const cardEl = element.closest(`.common-card`)\n if (cardEl) {\n cardEl.dispatchEvent(\n new CustomEvent(\n activeIndex === 0 ? `commonCard:hideFooter` : `commonCard:showFooter`\n )\n )\n }\n }\n})\n","import { Controller } from \"@hotwired/stimulus\"\nimport { addClass, removeClass } from \"@oddcamp/js-utils/src/attribute\"\n\nimport Stimulus from \"../../shared/utils/stimulus\"\n\nclass NewPaymentPage extends Controller {\n static targets = [`inputRec`, `recTrueShow`, `submitButton`]\n connect() {\n this.setRec()\n }\n\n setRec = () => {\n const checkedEl = this.inputRecTargets.find((i) => i.checked)\n\n if (checkedEl?.value == `false`) {\n addClass(this.recTrueShowTargets, `hidden`)\n removeClass(this.submitButtonTarget, `button--disabled`)\n this.submitButtonTarget.disabled = false\n } else if (checkedEl?.value == `true`) {\n removeClass(this.recTrueShowTargets, `hidden`)\n removeClass(this.submitButtonTarget, `button--disabled`)\n this.submitButtonTarget.disabled = false\n }\n }\n}\n\nStimulus.register(`new-payment-page`, NewPaymentPage)\n","import { Controller } from \"@hotwired/stimulus\"\nimport Stimulus from \"../../shared/utils/stimulus\"\nimport { toggleClass } from \"@oddcamp/js-utils/src/attribute\"\n\nclass NewFixedTermAccount extends Controller {\n static targets = [\n `occupation`,\n `occupationSpecification`,\n `requiredField`,\n `employmentField`,\n `fundsOwnerInput`,\n `fundsOwnerInputField`,\n `fundsOwnerDependant`,\n `submitButton`,\n ]\n\n static values = { fundsOwnerError: String }\n\n connect() {\n window.setTimeout(this.fundsOwnerChange, 50)\n }\n\n fundsOwnerChange = () => {\n const checkedEl = this.fundsOwnerInputTargets.find((i) => i.checked)\n const isNotOwner = checkedEl && checkedEl.value == `false` ? true : false\n\n toggleClass(this.fundsOwnerDependantTargets, `hidden`, isNotOwner)\n this.submitButtonTarget.disabled = isNotOwner\n\n this.fundsOwnerInputFieldTarget.dispatchEvent(\n new CustomEvent(`setError`, {\n detail: { message: isNotOwner ? this.fundsOwnerErrorValue : `` },\n })\n )\n }\n}\n\nStimulus.register(`new-fixed-term-account`, NewFixedTermAccount)\n"],"names":["cocoon_element_counter","create_new_id","newcontent_braced","id","newcontent_underscord","getInsertionNodeElem","insertionNode","insertionTraversal","btn","prevNext","el","addFieldsHandler","assoc","assocs","content","insertionMethod","new_id","count","regexp_braced","regexp_underscord","new_content","new_contents","insertionNodeElem","node","event","e","removeFieldsHandler","wrapperClass","nodeToDelete","triggerNode","timeout","input","hideFields","FormField","Controller","__publicField","required","i","labelEl","requiredEl","message","isError","Stimulus","FormHint","__privateAdd","_tippy","__privateSet","tippy","__privateGet","scrollToIt","formId","formEl","failureEl","domReady","ConfirmModal","_winResizeHandler","_alignmentEl","x","width","pos","maxWidth","throttle","nowSecs","SessionModalCountdown","_countdownStarted","_interval","_userActivity","now","expiresIn","nextTryIn","resolve","response","triggerEvent","SessionModalExpired","PrivateConfirmation","Cookies","application","ClickReveal","addClass","removeClass","CommonCard","AccountCard","name","AccountDropdown","hasClosest","requestAnimFrame","callback","throttled","fn","thisArg","updateFn","updateArgs","args","ticking","rest","debounce","delay","_toLeftRightCenter","align","_alignStartEnd","start","end","noop","uid","isNullOrUndef","value","isArray","type","isObject","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","toDimension","each","loopable","reverse","len","keys","_elementsEqual","a0","a1","ilen","v0","v1","clone$1","source","target","klen","k","isValidKey","key","_merger","options","tval","sval","merge","sources","merger","mergeIf","_mergerIf","emptyString","dot","indexOfDotOrLength","idx","resolveObjectKey","obj","_capitalize","str","defined","isFunction","setsEqual","a","b","item","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","niceNum","range","roundedRange","almostEquals","niceRange","fraction","_factorize","result","sqrt","isNumber","n","y","epsilon","almostWhole","rounded","_setMinAndMaxByKey","array","property","toRadians","degrees","toDegrees","radians","_decimalPlaces","p","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","s","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","min","max","_int16Range","_isBetween","atEdge","t","elasticIn","elasticOut","effects","map","hex","h1","h2","eq","isShort","v","hexParse","ret","hexString","f","round","lim","l","h","p2b","n2b","b2n","n2p","RGB_RE","rgbParse","m","r","g","rgbString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","d","calln","c","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","map$1","names","unpack","unpacked","tkeys","j","ok","nk","names$1","nameParse","modHSL","ratio","tmp","clone","proto","fromObject","functionParse","Color","color","weight","me","c1","c2","w2","w1","val","index_esm","isPatternOrGradient","getHoverColor","overrides","descriptors","getScope$1","set","root","scope","values","Defaults","_descriptors","context","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","defaults","toFontString","font","_measureText","data","gc","longest","string","textWidth","_longestText","arrayOfThings","cache","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","xOffset","yOffset","size","cornerRadius","style","rotation","radius","rad","_isPointInArea","point","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","mode","midpoint","_bezierCurveTo","renderText","text","opts","lines","stroke","line","setRenderOpts","decorateText","metrics","left","right","top","bottom","yDecoration","addRoundedRectPath","rect","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","props","objProps","read","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","inputs","index","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","createContext","parentContext","_lookup","table","cmp","hi","lo","mid","_lookupByKey","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","listener","method","base","res","object","unlistenArrayEvents","stub","listeners","_arrayUnique","items","_createResolver","scopes","prefixes","rootScopes","getTarget","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","storage","_attachContext","proxy","subProxy","descriptorDefaults","receiver","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","prefix","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","_stack","createSubResolver","isIndexable","arr","resolver","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","points","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","current","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","delta","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","prev","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","getStyle","positions","getPositionedStyle","styles","suffix","useOffsetPos","getCanvasPosition","evt","touches","offsetX","offsetY","box","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","height","getContainerSize","maxHeight","container","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","intlCache","getNumberFormat","locale","cacheKey","formatter","formatNumber","num","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","rtl","overrideTextDirection","direction","original","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","spanGaps","solidSegments","last","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","st","dir","styleChanged","Animator","anims","date","callbacks","numSteps","remaining","draw","charts","cb","acc","animator","transparent","interpolators","from","to","factor","c0","Animation","cfg","currentValue","elapsed","remain","duration","promises","rej","resolved","numbers","colors","animationOptions","Animations","config","animatedProps","option","newOptions","resolveTargetOptions","animations","awaitAll","running","animation","properties","anim","scaleClip","scale","allowedOverflow","defaultClip","xScale","yScale","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","stack","dsIndex","singleMode","otherValue","convertObjectDataToArray","adata","isStacked","meta","stacked","getStackKey","indexScale","valueScale","getUserBounds","minDefined","maxDefined","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","updateStacks","controller","parsed","iScale","iAxis","vAxis","itemStacks","getFirstScaleId","axis","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","parsedValue","_parsed","otherScale","otherMin","otherMax","_skip","elements","active","elementType","sharing","transition","sharedOptions","arg1","arg2","numMeta","numData","move","removed","newCount","getAllScaleValues","visibleMetas","computeMinSampleSize","curr","updateMinAndPrev","computeFitCategoryTraits","ruler","stackCount","thickness","computeFlexCategoryTraits","pixels","percent","parseFloatBar","entry","startValue","endValue","barStart","barEnd","parseValue","parseArrayOrPrimitive","isFloatBar","custom","barSign","actualBase","borderProps","setBorderSkipped","edge","parseEdge","swap","startEnd","orig","v2","setInflateAmount","inflateAmount","BarController","iAxisKey","vAxisKey","bars","reset","horizontal","firstOpts","includeOptions","vpixels","ipixels","dataIndex","barThickness","baseValue","minBarLength","floating","length","head","halfGrid","skipNull","maxBarThickness","center","stackIndex","rects","BubbleController","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","getter","chartArea","arcs","spacing","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","animationOpts","centerX","centerY","animateScale","arc","metaData","total","ringWeightOffset","pointStyle","label","legendItem","legend","tooltipItem","dataLabel","LineController","_dataset","animationsDisabled","getStartAndCountOfVisiblePoints","scaleRangesChanged","maxGapLength","directUpdate","prevParsed","nullData","border","lastPoint","pointCount","_scaleRanges","newRanges","changed","PolarAreaController","minSize","datasetStartAngle","defaultAngle","PieController","RadarController","pointPosition","ScatterController","abstract","DateAdapter","format","timestamp","amount","unit","weekday","members","adapters","getRelativePosition$1","evaluateAllVisibleItems","handler","binarySearch","metaset","intersect","_sorted","lookupMethod","optimizedEvaluateItems","position","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","getNearestItems","distanceMetric","minDistance","distance","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","setLayoutDims","params","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","marginForPositions","fitBoxes","refitBoxes","refit","same","other","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","padding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","entries","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","Element","final","formatters","tickValue","ticks","notation","maxTick","calculateDelta","logDelta","numDecimal","Ticks","_ctx","autoSkip","tickOpts","ticksLimit","determineMaxTicks","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","offset","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","factors","majorStart","majorEnd","diff","reverseAlign","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","startPixel","endPixel","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","tickFont","fontString","lineHeight","nestedLabel","valueAt","decimal","optionTicks","rot","grid","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","step","optsAtIndex","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","strokeWidth","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","title","tz","gz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","parts","Registry","typedRegistry","arg","reg","itemReg","registry","component","camelMethod","PluginService","hook","filter","descriptor","plugin","all","plugins","allPlugins","createDescriptors","previousDescriptors","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","axisFromPosition","determineAxis","scaleOptions","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","version","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","Chart","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","visible","platform","_add","_remove","detached","attached","enabled","activeElements","lastActive","replay","hoverOptions","deactivated","activated","eventFilter","lastEvent","invalidatePlugins","enumerable","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","o","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","p8","drawArc","fullCircles","drawFullCircleBorders","inner","drawBorder","ArcElement","chartX","chartY","rAdjust","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","path","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","borderWidth","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","inRange","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","refRect","BarElement","borderColor","outer","addRectPath","positioners","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","body","footer","boxWidth","boxHeight","bodyFont","titleFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","Tooltip","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","rtlHelper","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","drawOptions","outerX","innerX","borderRadius","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","opacity","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","_args","labelCount","addIfString","addedLabels","findOrAddLabel","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","maxTicksLimit","stepSize","numericGeneratorOptions","LinearScale","isMajor","tickVal","generateTicks","endExp","endSignificand","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","furthestLimits","furthestAngles","valueCount","plFont","textSize","hLimits","vLimits","buildPointLabelItems","tickBackdropHeight","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabels","pointLabels","backdropColor","pathRadiusLine","circular","drawRadiusLine","gridLineOpts","param","createPointLabelContext","RadialLinearScale","largestPossibleRadius","radiusReductionLeft","radiusReductionRight","radiusReductionTop","radiusReductionBottom","leftMovement","rightMovement","topMovement","bottomMovement","maxRight","maxLeft","maxTop","maxBottom","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","adapter","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","time","timestamps","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","hasWeekday","formats","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","interpolate","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","AccountPieChart","_chart","AccountRenamer","url","DeleteConfirmation","_modalTrigger","delegateEventListener","Withdraw","WithdrawConfirmation","WithdrawAccountDetails","urlAlphabet","nanoid","bytes","scopedUrlAlphabet","inputRequiredDisable","els","inputRequiredRestore","AuthPageFaq","AuthPagePersonal","checkedEl","AuthPageCitizenships","_updateRelatedFields","_setTaxationOnInsertUs","valid","on","allFieldsValid","getParents","selectedCountry","showNationality1","showMultipleNationalities","AuthPageTaxations","disabled","country","AuthPageTaxation","AuthPageAutogiro","activeGroupEl","AuthPageSavings","isOther","isEmployee","toggleClass","isNotOwner","AuthPageStatus","_timeout","StickySidebar","EVENT_KEY","DEFAULTS","sidebar","wrapper","containers","dims","furthest","affixType","sidebarBottom","colliderTop","colliderBottom","translate","force","affixEvent","_unit","affixedEvent","eventType","support","z","styleReset","transform3d","upper","eventName","results","offsetTop","className","HomePageSavings","KycPageCitizenships","_isValueResetNeeded","KycPageTaxations","KycPageTaxation","KycPageAutogiro","KycPageSavings","KycPageStatus","TransfersPageNumber","TransfersPageOrder","TransfersPageOrderDescription","_resizeHandler","activeIndex","cardEl","NewPaymentPage","NewFixedTermAccount"],"mappings":"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"}