{"version":3,"file":"js/378-a1152f317bf76bce3a14.js","mappings":"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","sources":["webpack://relier-react-webpack-rails/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://relier-react-webpack-rails/./node_modules/@kanety/stimulus-accordion/dist/index.module.js","webpack://relier-react-webpack-rails/./node_modules/debounce/index.js","webpack://relier-react-webpack-rails/./node_modules/@kurkle/color/dist/color.esm.js","webpack://relier-react-webpack-rails/./node_modules/chart.js/dist/chunks/helpers.segment.js","webpack://relier-react-webpack-rails/./node_modules/chart.js/dist/chart.js","webpack://relier-react-webpack-rails/./node_modules/chart.js/auto/auto.js"],"sourcesContent":["/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import{Controller as t}from\"@hotwired/stimulus\";class e{constructor(t){this.controller=t}get togglers(){return this.controller.togglers}get openedTogglers(){return this.controller.openedTogglers}get key(){return this.controller.storeKeyValue}load(){if(this.key){var t=this.constructor.load(this.key);if(t){var e=new Set(t);this.togglers.forEach(t=>{var s=this.controller.findContent(t);e.has(this.controller.getID(t))?this.controller.show(t,s):this.controller.hide(t,s)})}}}save(){if(this.key){var t=this.openedTogglers.map(t=>this.controller.getID(t));this.constructor.save(this.key,t)}}static load(t){var e=sessionStorage.getItem(t);try{return JSON.parse(e)}catch(t){return console.error(t),null}}static save(t,e){try{sessionStorage.setItem(t,JSON.stringify(e))}catch(t){return console.error(t),null}}}class s extends t{get togglers(){return this.context.bindingObserver.bindings.filter(t=>\"toggle\"==t.action.methodName).map(t=>t.action.element)}get openedTogglers(){return this.togglers.filter(t=>this.isOpened(t))}get contents(){return this.scope.findAllElements(\"[data-accordion-id]\")}connect(){this.init(),this.store=new e(this),this.store.load()}init(){this.togglers.forEach(t=>{var e=this.findContent(t);this.isOpened(t)?this.show(t,e,!1):this.hide(t,e,!1)})}toggle(t){this.togglers.forEach(e=>{e.contains(t.target)?this.isOpened(e)?this.close(e):this.open(e):this.isOpened(e)&&this.close(e)}),t.preventDefault()}open(t){var e=this.findContent(t);this.show(t,e),this.store.save(),this.dispatch(\"opened\",{detail:{toggler:t,content:e}})}close(t){var e=this.findContent(t);this.hide(t,e),this.store.save(),this.dispatch(\"closed\",{detail:{toggler:t,content:e}})}show(t,e,s){void 0===s&&(s=!0),s&&(e.style.height=\"0px\",e.removeEventListener(\"transitionend\",this.transitionEnd),e.addEventListener(\"transitionend\",this.transitionEnd),setTimeout(()=>{e.style.height=e.scrollHeight+\"px\"})),this.toggleClass(t,e,!0),this.toggleText(t,!0)}hide(t,e,s){void 0===s&&(s=!0),s&&(e.style.height=e.scrollHeight+\"px\",e.removeEventListener(\"transitionend\",this.transitionEnd),e.addEventListener(\"transitionend\",this.transitionEnd),setTimeout(()=>{e.style.height=\"0px\"})),this.toggleClass(t,e,!1),this.toggleText(t,!1)}transitionEnd(t){t.target.style.height=\"\"}toggleClass(t,e,s){s?(t.classList.add(\"st-accordion__icon--opened\"),e.classList.add(\"st-accordion__content--visible\")):(t.classList.remove(\"st-accordion__icon--opened\"),e.classList.remove(\"st-accordion__content--visible\"))}toggleText(t,e){var s;(s=t.getAttribute(e?\"data-accordion-opened-text-param\":\"data-accordion-closed-text-param\"))&&(t.innerHTML=s)}isOpened(t){return t.matches(\".st-accordion__icon--opened\")}findContent(t){var e=this.getID(t);return this.scope.findElement('[data-accordion-id=\"'+e+'\"]')}getID(t){return t.getAttribute(\"href\").replace(/^#/,\"\")}}s.values={storeKey:String};export{s as default};\n//# sourceMappingURL=index.module.js.map\n","/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.5\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function 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}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _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}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\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(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _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 // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _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(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\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/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const 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 almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function 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}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _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 almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _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}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _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}\n// Gets the angle from vertical upright to the point about a centre.\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; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\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}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _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 || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((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 {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _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 ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\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: [\n listener\n ]\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}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function 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}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _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(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _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 || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\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;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -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 ? 0.5 * t * t * t : 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 ? 0.5 * t * t * t * t : -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 ? 0.5 * t * t * t * t * t : 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 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 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 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 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 : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 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 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.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 });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.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 });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\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 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 = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\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}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\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 },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 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 });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.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' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function 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}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\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 apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ 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 applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _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}\n/**\n * @private\n */ // eslint-disable-next-line complexity\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 // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\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}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _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}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\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 includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, 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 width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\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}\n/**\n * @private\n */ function _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}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\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 /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\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 drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\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 (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\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 += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function 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) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function 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}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function 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 = undefined;\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}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function 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}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _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\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _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 /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\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' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\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]; // resolve from proxy\n // resolve with context\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 // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, 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 let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\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 (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\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 : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\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 = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\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 (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : 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 (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\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 // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\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}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function 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}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function 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 // Calculate slopes (deltaK) and initialize tangents (mK)\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 // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n 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}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\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(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\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);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, 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 = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\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;\n// eslint-disable-next-line complexity\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 ? 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 // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function 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 = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\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 || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function 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\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\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 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 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 {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\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({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _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}\n function 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 {\n start,\n end\n };\n}\n function 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({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\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({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _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, [\n {\n start,\n end,\n loop\n }\n ], 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}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function 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({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n 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 if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.5\n * https://www.chartjs.org\n * (c) 2024 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\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 = /* #__PURE__ */ 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 ? c1.mix(c0, factor).hexString() : 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([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\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([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\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({\n res,\n rej\n });\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\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 animationOptions = Object.keys(defaults.animation);\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 || [\n key\n ]).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, {\n $shared: false,\n $animations: {}\n });\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, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\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 [iAxisKey]: key,\n [vAxisKey]: 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 const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\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 active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\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 if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\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),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\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 if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\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 ? meta.vScale : 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 const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\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 meta._stacked = isStacked(meta.vScale, meta);\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]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\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 = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : 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 || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n 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 ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\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 _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\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([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\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}\n function 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}\n function 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}\n function 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 {\n start,\n end,\n reverse,\n top,\n bottom\n };\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 if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\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' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static 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: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static 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 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) ? '[' + custom.start + ', ' + custom.end + ']' : '' + 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 { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : 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 { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.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 ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : 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 , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\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' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : 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 && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\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 labels = this.chart.data.labels || [];\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: labels[index] || '',\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 { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\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 = sharedOptions || 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 }\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, {\n $shared: false\n });\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}\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 {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static 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: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static 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 , color } } = 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 fontColor: color,\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 }\n };\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) && this.chart.getDatasetMeta(i).type === this._type) {\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 { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\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 }\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}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\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 const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\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}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static 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 , color } } = 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 fontColor: color,\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 },\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 constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\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 return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = 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 if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\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 options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\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 const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\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}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function 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}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\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 ? v0.index - v1.index : 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] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function 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] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n 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,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\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 = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\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(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\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] || {\n count: 1,\n placed: 0,\n weight: 1\n };\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}\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 {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\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)=>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, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\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';\n const 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 === '';\n function 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 ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\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, {\n childList: true,\n subtree: true\n });\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);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class 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 [\n 'height',\n 'width'\n ].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 = canvas && _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 static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\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 // let's not create an object, if not needed\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}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\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}\n function 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}\n function 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}\n function 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}\n function 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}\n function 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;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function 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}\n function 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}\n function 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}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function 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 {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\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 {\n min,\n max\n };\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 getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\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() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\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, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\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, [\n this\n ]);\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, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\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) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\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, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\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 += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n 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)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\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 : min > 0 && max > 0 ? min : 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 || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (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() ? h * cos > w * sin ? w / cos : h / sin : 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 , border } = 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 = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 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 context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\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 = textOffset - labelPadding.top;\n let left = 0 - 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 case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\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 label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\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 {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n 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,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 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.width;\n ctx.strokeStyle = borderOpts.color;\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.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\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: [\n titleX,\n titleY\n ]\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 const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\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 = [\n scope\n ].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 = [\n this.controllers,\n this.scales,\n this.elements\n ];\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 [\n ...args\n ].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 = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\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}\n function allPlugins(config) {\n const localIds = {};\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 localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\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 , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\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, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\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 idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\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 (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\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, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\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'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\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 }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\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 }\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 }\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 {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\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 = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : 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) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\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)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.5\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\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] ? a[l2] - b[l2] : 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, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function 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}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\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('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n 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 get registry() {\n return registry;\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 = {\n width,\n height\n };\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', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], 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(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 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, {\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', {\n mode,\n cancelable: true\n }) === 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', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\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).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === 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', {\n mode,\n cancelable: true\n }) === 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({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\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', {\n cancelable: true\n }) === 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({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === 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', {\n cancelable: true\n }) === 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 = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\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, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\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, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function 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 // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\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}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\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 // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the 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 if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\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 // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\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 // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\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 // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\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 } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\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([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\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 + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\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 ], 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) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\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 const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\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}\n function 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}\n function 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}\n function 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}\n function _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}\n function _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, {\n start,\n end: start + count - 1\n })) {\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 static id = 'line';\n static 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 };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\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, {\n property,\n start: value,\n end: value\n });\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, {\n start,\n end: start + count - 1\n });\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}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\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([\n 'x',\n 'y'\n ], 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([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\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 // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], 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 {\n left,\n top,\n right,\n bottom\n };\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([\n 'enableBorderRadius'\n ]);\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 && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function 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 static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\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([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], 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}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\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((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\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', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\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 {\n start,\n count\n };\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([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\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({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\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}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, 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({\n points,\n options: {}\n });\n}\n function 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}\n function 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}\n function 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 {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\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 (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || 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 = labelOpts.pointStyleWidth || 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, [\n this.chart\n ], 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, labelFont, 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 = [\n 0\n ];\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] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, 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 , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n 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 { 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: boxHeight * 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 drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\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;\n ctx.fillStyle = legendItem.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 if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + 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) && _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) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\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 , useBorderRadius , borderRadius } } = 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: useBorderRadius && (borderRadius || style.borderRadius),\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)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].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 {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\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: [\n titleX,\n titleY\n ]\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 xSet = new Set();\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 xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\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}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function 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}\n function 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 + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (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 {\n width,\n height\n };\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}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function 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' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function 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}\nconst defaultCallbacks = {\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 function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\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 || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', 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(invokeCallbackWithFallback(options.callbacks, 'beforeBody', 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(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', 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(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', 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, {\n chart: this.chart,\n tooltip: this,\n replay\n });\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 {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\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 labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = 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 = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.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 = labelColor.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 = labelColor.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' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n 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: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\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: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\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);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\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 : 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({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, 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}\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 [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\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(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\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 const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n 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 = max === 0 ? 1 : Math.abs(max * 0.05);\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 static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\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}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\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, [\n raw,\n index\n ]);\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 if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\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 if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(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 ? '0' : 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 ? 0 : (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}\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 : [\n label\n ];\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}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\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}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\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 drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\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, borderOpts) {\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(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.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 && this.min >= 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(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function 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' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function 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}\n function 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}\n function 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}\n function 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}\n function 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}\n function 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 static id = 'time';\n static 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 callback: false,\n major: {\n enabled: false\n }\n }\n };\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 adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n 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 {\n min,\n max\n };\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 ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\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(options.ticks.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(sorter).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 format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\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 return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\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, [\n exampleTime\n ], 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}\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 static id = 'timeseries';\n static defaults = TimeScale.defaults;\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 {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\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}\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, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n"],"names":["EventListener","constructor","eventTarget","eventName","eventOptions","this","unorderedBindings","Set","connect","addEventListener","disconnect","removeEventListener","bindingConnected","binding","add","bindingDisconnected","delete","handleEvent","event","extendedEvent","stopImmediatePropagation","Object","assign","immediatePropagationStopped","call","extendEvent","bindings","hasBindings","size","Array","from","sort","left","right","leftIndex","index","rightIndex","Dispatcher","application","eventListenerMaps","Map","started","start","eventListeners","forEach","eventListener","stop","values","reduce","listeners","map","concat","fetchEventListenerForBinding","clearEventListeners","clearEventListenersForBinding","handleError","error","message","detail","removeMappedEventListenerFor","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","fetchEventListener","get","createEventListener","set","parts","keys","key","push","join","defaultActionDescriptorFilters","value","stopPropagation","prevent","preventDefault","self","element","target","descriptorPattern","parseEventTarget","eventTargetName","window","document","camelize","replace","_","char","toUpperCase","namespaceCamelize","capitalize","charAt","slice","dasherize","toLowerCase","isSomething","object","undefined","hasProperty","property","prototype","hasOwnProperty","allModifiers","Action","descriptor","schema","tagName","defaultEventNames","getDefaultEventNameForElement","identifier","methodName","keyFilter","forToken","token","descriptorString","matches","trim","match","includes","split","options","test","parseActionDescriptorString","content","toString","eventFilter","shouldIgnoreKeyboardEvent","filters","keyFilterDissatisfied","standardFilter","filter","keyMappings","shouldIgnoreMouseEvent","params","pattern","RegExp","name","attributes","typecast","meta","ctrl","alt","shift","modifier","metaKey","ctrlKey","altKey","shiftKey","a","button","form","details","input","e","getAttribute","select","textarea","Error","JSON","parse","o_O","Binding","context","action","actionEvent","prepareActionEvent","willBeInvokedByEvent","applyEventModifiers","invokeWithEvent","method","controller","actionDescriptorFilters","passes","entries","currentTarget","logDebugActivity","KeyboardEvent","MouseEvent","Element","contains","scope","containsElement","ElementObserver","delegate","mutationObserverInit","childList","subtree","elements","mutationObserver","MutationObserver","mutations","processMutations","observe","refresh","pause","callback","takeRecords","matchElementsInTree","has","removeElement","addElement","mutation","processMutation","type","processAttributeChange","attributeName","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","node","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","Node","ELEMENT_NODE","isConnected","elementMatched","elementUnmatched","AttributeObserver","elementObserver","selector","hasAttribute","querySelectorAll","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","fetch","del","prune","Multimap","valuesByKey","hasKey","hasValue","some","getValuesForKey","getKeysForValue","_key","_values","SelectorObserver","_selector","matchesByElement","selectorMatchElement","selectorMatched","selectors","selectorUnmatched","_attributeName","matchedBefore","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","length","Math","max","zip","findIndex","previousToken","currentToken","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","WeakMap","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","connectAction","disconnectAction","clear","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","data","rawValue","rawOldValue","changedMethodName","changedMethod","reader","TypeError","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","_a","targetConnected","targetDisconnected","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","definition","isArray","getOwnStaticArrayValues","readInheritableStaticObjectPairs","pairs","getOwnStaticObjectPairs","getPrototypeOf","reverse","OutletObserver","outletsByName","outletElementsByName","selectorObserverMap","attributeObserverMap","outletDefinitions","outletName","setupSelectorObserverForOutlet","setupAttributeObserverForOutlet","dependentContexts","observer","disconnectAllOutlets","stopSelectorObservers","stopAttributeObservers","outlet","getOutlet","connectOutlet","getOutletFromMap","disconnectOutlet","hasOutlet","hasOutletController","controllerAttribute","_element","getOutletNameFromOutletAttributeName","updateSelectorObserverForOutlet","outletConnected","outletDisconnected","selectorObserver","body","attributeNameForOutletName","outlets","getSelectorForOutletName","outletAttributeForScope","find","outletDependencies","dependencies","router","modules","module","controllerConstructor","dependentControllerIdentifiers","identifiers","contexts","getControllerForElementAndIdentifier","Context","functionName","bindingObserver","dispatcher","valueObserver","targetObserver","outletObserver","initialize","parentElement","invokeControllerMethod","args","bless","properties","shadowConstructor","extend","shadowProperties","getOwnKeys","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","defineProperties","shadow","blessings","blessedProperties","blessing","getBlessedProperties","getOwnPropertySymbols","getOwnPropertyNames","extendWithReflect","extended","Reflect","construct","arguments","create","setPrototypeOf","b","testReflectExtension","Module","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","setAttribute","removeAttribute","Guide","logger","warnedKeysByObject","warn","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","findTarget","findLegacyTarget","findAll","targets","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","OutletSet","controllerElement","outletNames","findOutlet","findAllOutlets","queryElements","matchesElement","Scope","classes","closest","controllerSelector","documentScope","isDocumentScope","documentElement","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","parseValueForElementAndIdentifier","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","loadDefinition","unloadIdentifier","connectModule","afterLoad","disconnectModule","getContextForElementAndIdentifier","proposeToConnectScopeForElementAndIdentifier","console","defaultSchema","enter","tab","esc","space","up","down","home","end","page_up","page_down","objectFromEntries","c","n","array","memo","k","v","Application","debug","logFormattedMessage","Promise","resolve","readyState","register","load","registerActionOption","head","rest","shouldLoad","unload","controllers","onerror","groupCollapsed","log","groupEnd","getOutletController","getControllerAndEnsureConnectedScope","outletController","parseValueDefinitionPair","typeDefinition","payload","typeObject","typeFromObject","hasType","hasDefault","default","fullObject","onlyType","onlyDefault","parseValueTypeConstant","typeFromDefaultValue","parseValueTypeDefault","parseValueTypeObject","typeFromConstant","propertyPath","parseValueTypeDefinition","constant","defaultValuesByType","constantFromType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","Number","String","boolean","number","string","writeJSON","stringify","Controller","_identifier","_application","dispatch","prefix","bubbles","cancelable","CustomEvent","dispatchEvent","classDefinition","targetDefinition","valueDefinitionPairs","propertyDescriptorMap","result","valueDefinitionPair","valueDescriptor","read","write","propertiesForValueDefinitionPair","outletDefinition","camelizedName","outletElement","propertiesForOutletDefinition","t","togglers","openedTogglers","storeKeyValue","s","findContent","getID","show","hide","save","sessionStorage","getItem","setItem","isOpened","contents","init","store","toggle","close","open","toggler","style","height","transitionEnd","setTimeout","scrollHeight","toggleClass","toggleText","classList","remove","innerHTML","storeKey","debounce","func","wait","immediate","timeout","timestamp","later","last","Date","now","apply","debounced","callNow","clearTimeout","flush","exports","round","lim","l","h","min","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","d","f","hex","h1","h2","eq","hexString","r","g","isShort","alpha","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","i","rgb2hsl","hueValue","calln","hsl2rgb","hue","hueParse","str","m","exec","p1","p2","hwb2rgb","hsv2rgb","x","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","names","nameParse","unpacked","tkeys","j","ok","nk","parseInt","unpack","transparent","RGB_RE","to","pow","modHSL","ratio","tmp","clone","proto","fromObject","functionParse","rgbParse","Color","ret","len","_rgb","_valid","valid","obj","rgbString","hslString","mix","color","weight","c1","c2","w2","p","w1","interpolate","rgb1","rgb2","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","noop","uid","id","isNullOrUndef","isObject","isNumberFinite","isFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","endsWith","parseFloat","fn","thisArg","each","loopable","_elementsEqual","a0","a1","ilen","v0","v1","datasetIndex","source","klen","isValidKey","indexOf","_merger","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","keyResolvers","o","y","resolveObjectKey","resolver","part","_splitKey","_getKeyResolver","_capitalize","defined","isFunction","setsEqual","item","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","abs","niceNum","range","roundedRange","niceRange","floor","fraction","isNumber","isNaN","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","listener","stub","_chartjs","splice","_arrayUnique","items","requestAnimFrame","requestAnimationFrame","throttled","argsToUse","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","_sorted","iScale","_parsed","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","formatNumber","num","locale","formatter","Intl","NumberFormat","getNumberFormat","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","getScope$1","root","Defaults","_descriptors","_appliers","animation","backgroundColor","borderColor","datasets","devicePixelRatio","platform","getDevicePixelRatio","events","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","mode","intersect","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","scopeObject","targetScopeObject","privateName","writable","enumerable","local","appliers","defaults","_scriptable","startsWith","_indexable","_fallback","delay","duration","easing","loop","active","resize","animations","visible","autoPadding","padding","top","bottom","display","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","width","title","text","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","cache","garbageCollect","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","point","area","margin","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","line","opts","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","lines","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","_readValueToProps","props","objProps","prop","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","info","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","Symbol","toStringTag","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","isScriptable","getValue","_resolveScriptable","isIndexable","arr","_resolveArray","_resolveWithContext","allKeys","configurable","scriptable","indexable","_allKeys","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","splineCurveMonotone","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","capControlPoint","pt","_updateBezierControlPoints","controlPoints","spanGaps","cubicInterpolationMode","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parentNode","host","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","ownerDocument","defaultView","positions","getPositionedStyle","styles","suffix","pos","getRelativePosition","borderBox","boxSizing","paddings","borders","box","touches","offsetX","offsetY","shadowRoot","useOffsetPos","getBoundingClientRect","clientX","clientY","getCanvasPosition","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","maxHeight","containerSize","container","containerStyle","containerBorder","containerPadding","clientWidth","clientHeight","getContainerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","passive","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","splitByStyles","segmentOptions","chartContext","_chart","baseStyle","readStyle","_datasetIndex","prevStyle","addStyle","st","dir","p0","p0DataIndex","p1DataIndex","styleChanged","doSplitByStyles","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","replacer","Animator","_request","_charts","_running","_lastDate","_notify","anims","date","callbacks","numSteps","initial","currentStep","_refresh","_update","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","complete","progress","listen","cb","acc","cur","_duration","cancel","animator","interpolators","factor","c0","Animation","cfg","currentValue","_fn","_easing","_start","_loop","_target","_prop","_from","_to","_promises","update","elapsed","promises","res","rej","resolved","Animations","config","_properties","configure","animationOptions","animatedProps","option","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","all","awaitAll","then","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","static","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","dataset","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","defineProperty","base","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","hidden","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","label","getLabelForValue","_clip","disabled","toClip","defaultClip","chartArea","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","elementType","sharing","datasetElementScopeKeys","resolveNamedOptions","freeze","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","spacing","legend","generateLabels","fontColor","getDataVisibility","legendItem","toggleDataVisibility","super","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","bind","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","__proto__","BarController","categoryPercentage","barPercentage","grouped","_index_","_value_","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","currentParsed","iScaleValue","skipNull","_getStackCount","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","baseValue","minBarLength","actualBase","floating","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","rects","BubbleController","LineController","_dataset","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","DateAdapterBase","members","formats","diff","startOf","endOf","adapters","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","position","handler","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestCartesianItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","setLayoutDims","layouts","wrap","stackWeight","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","other","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","setBoxDims","placeBoxes","userPadding","addBox","_layers","z","removeBox","layoutItem","minPadding","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","acquireContext","releaseContext","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","removeListener","nodeListContains","nodeList","createAttachObserver","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","addListener","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","tooltipPosition","final","tickOpts","determinedMaxTicks","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","ticksLimit","maxTicksLimit","majorIndices","enabled","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","majorStart","majorEnd","offsetFromEdge","getTicksLimit","ticksLength","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","idx","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","lineDashOffset","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","axisID","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","arg","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","notify","hook","_createDescriptors","plugin","invalidate","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","determineAxis","scaleOptions","getAxisFromDataset","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","initOptions","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","clearCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","moveNumericKeys","intKey","getSizeForArea","field","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","render","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","useClip","getDatasetArea","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","destroy","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","fullCircles","inner","lineJoin","angleMargin","clipArc","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","path","_path","strokePathWithCache","segmentMethod","strokePathDirect","LineElement","_points","_segments","_pointsUpdated","findStartAndEnd","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","inRange$1","hitRadius","getBarBounds","bar","half","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","outer","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","ArcElement","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","BarElement","addRectPath","mouseX","mouseY","inXRange","inYRange","PointElement","hoverRadius","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","getColorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","unshift","pointValue","firstValue","lastValue","simpleArc","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","_drawfill","lineOpts","above","clipVertical","doFill","clipY","lineLoop","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","src","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","lineDash","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","isListened","hoveredItem","sameItem","plugin_legend","afterEvent","ci","useBorderRadius","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","Colors","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","lastIndexOf","_getLabelForValue","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","relativeLabelSize","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","stepSize","computeTickLimit","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","generateTicks","minExp","exp","startExp","lastTick","LogarithmicScale","_zero","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","itemOpts","extra","createPointLabelItem","isNotOverlapped","buildPointLabelItems","hLimits","vLimits","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","animate","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","adapter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","addTick","time","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","CategoryScale","_addedLabels","added","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"sourceRoot":""}