{"version":3,"file":"36bcf0ca-7d871022e8c265fcb3bb.js","mappings":"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","sources":["webpack://Level1Analytics/./node_modules/chart.js/dist/chart.esm.js"],"sourcesContent":["import _assertThisInitialized from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\assertThisInitialized.js\";\nimport _get from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\get.js\";\nimport _inherits from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\inherits.js\";\nimport _possibleConstructorReturn from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\possibleConstructorReturn.js\";\nimport _getPrototypeOf from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\getPrototypeOf.js\";\nimport _slicedToArray from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\slicedToArray.js\";\nimport _defineProperty from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\defineProperty.js\";\nimport _toConsumableArray from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\toConsumableArray.js\";\nimport _classCallCheck from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\classCallCheck.js\";\nimport _createClass from \"C:\\\\inetpub\\\\deploy\\\\node_modules\\\\@babel\\\\runtime\\\\helpers\\\\esm\\\\createClass.js\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }\n\n/*!\n * Chart.js v3.7.0\n * https://www.chartjs.org\n * (c) 2021 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as _color, d as defaults, i as isObject, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as createContext, j as defined, s as sign, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as isNumber, w as _limitValue, x as _lookupByKey, y as getRelativePosition$1, z as _isPointInArea, A as _rlookupByKey, B as getAngleFromPoint, C as toPadding, D as each, E as _getMaximumSize, F as _getParentNode, G as readUsedSize, I as throttled, J as supportsEventListenerOptions, K as _isDomSupported, L as log10, M as _factorize, N as finiteOrDefault, O as callback, Q as _addGrace, R as toDegrees, S as _measureText, U as _int16Range, V as _alignPixel, W as clipArea, X as renderText, Y as unclipArea, Z as toFont, $ as _toLeftRightCenter, a0 as _alignStartEnd, a1 as overrides, a2 as merge, a3 as _capitalize, a4 as descriptors, a5 as isFunction, a6 as _attachContext, a7 as _createResolver, a8 as _descriptors, a9 as mergeIf, aa as uid, ab as debounce, ac as retinaScale, ad as clearCanvas, ae as setsEqual, af as _elementsEqual, ag as _isClickEvent, ah as _isBetween, ai as _readValueToProps, aj as _updateBezierControlPoints, ak as _computeSegments, al as _boundSegments, am as _steppedInterpolation, an as _bezierInterpolation, ao as _pointInLine, ap as _steppedLineTo, aq as _bezierCurveTo, ar as drawPoint, as as addRoundedRectPath, at as toTRBL, au as toTRBLCorners, av as _boundSegment, aw as _normalizeAngle, ax as getRtlAdapter, ay as overrideTextDirection, az as _textX, aA as restoreTextDirection, aB as noop, aC as distanceBetweenPoints, aD as _setMinAndMaxByKey, aE as niceNum, aF as almostWhole, aG as almostEquals, aH as _decimalPlaces, aI as _longestText, aJ as _filterBetween, aK as _lookup } from './chunks/helpers.segment.js';\nexport { d as defaults } from './chunks/helpers.segment.js';\n\nvar Animator = /*#__PURE__*/function () {\n function Animator() {\n _classCallCheck(this, Animator);\n\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n\n _createClass(Animator, [{\n key: \"_notify\",\n value: function _notify(chart, anims, date, type) {\n var callbacks = anims.listeners[type];\n var numSteps = anims.duration;\n callbacks.forEach(function (fn) {\n return fn({\n chart: chart,\n initial: anims.initial,\n numSteps: numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n });\n });\n }\n }, {\n key: \"_refresh\",\n value: function _refresh() {\n var _this = this;\n\n if (this._request) {\n return;\n }\n\n this._running = true;\n this._request = requestAnimFrame.call(window, function () {\n _this._update();\n\n _this._request = null;\n\n if (_this._running) {\n _this._refresh();\n }\n });\n }\n }, {\n key: \"_update\",\n value: function _update() {\n var _this2 = this;\n\n var date = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Date.now();\n var remaining = 0;\n\n this._charts.forEach(function (anims, chart) {\n if (!anims.running || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n var draw = false;\n var item;\n\n for (; i >= 0; --i) {\n item = items[i];\n\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n\n if (draw) {\n chart.draw();\n\n _this2._notify(chart, anims, date, 'progress');\n }\n\n if (!items.length) {\n anims.running = false;\n\n _this2._notify(chart, anims, date, 'complete');\n\n anims.initial = false;\n }\n\n remaining += items.length;\n });\n\n this._lastDate = date;\n\n if (remaining === 0) {\n this._running = false;\n }\n }\n }, {\n key: \"_getAnims\",\n value: function _getAnims(chart) {\n var charts = this._charts;\n var anims = charts.get(chart);\n\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\n return anims;\n }\n }, {\n key: \"listen\",\n value: function listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n }, {\n key: \"add\",\n value: function add(chart, items) {\n var _this$_getAnims$items;\n\n if (!items || !items.length) {\n return;\n }\n\n (_this$_getAnims$items = this._getAnims(chart).items).push.apply(_this$_getAnims$items, _toConsumableArray(items));\n }\n }, {\n key: \"has\",\n value: function has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n }, {\n key: \"start\",\n value: function start(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims) {\n return;\n }\n\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce(function (acc, cur) {\n return Math.max(acc, cur._duration);\n }, 0);\n\n this._refresh();\n }\n }, {\n key: \"running\",\n value: function running(chart) {\n if (!this._running) {\n return false;\n }\n\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n\n return true;\n }\n }, {\n key: \"stop\",\n value: function stop(chart) {\n var anims = this._charts.get(chart);\n\n if (!anims || !anims.items.length) {\n return;\n }\n\n var items = anims.items;\n var i = items.length - 1;\n\n for (; i >= 0; --i) {\n items[i].cancel();\n }\n\n anims.items = [];\n\n this._notify(chart, anims, Date.now(), 'complete');\n }\n }, {\n key: \"remove\",\n value: function remove(chart) {\n return this._charts.delete(chart);\n }\n }]);\n\n return Animator;\n}();\n\nvar animator = new Animator();\nvar transparent = 'transparent';\nvar interpolators = {\n boolean: function boolean(from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color: function color(from, to, factor) {\n var c0 = _color(from || transparent);\n\n var c1 = c0.valid && _color(to || transparent);\n\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number: function number(from, to, factor) {\n return from + (to - from) * factor;\n }\n};\n\nvar Animation = /*#__PURE__*/function () {\n function Animation(cfg, target, prop, to) {\n _classCallCheck(this, Animation);\n\n var currentValue = target[prop];\n to = resolve([cfg.to, to, currentValue, cfg.from]);\n var from = resolve([cfg.from, currentValue, to]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n\n _createClass(Animation, [{\n key: \"active\",\n value: function active() {\n return this._active;\n }\n }, {\n key: \"update\",\n value: function update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n\n var currentValue = this._target[this._prop];\n var elapsed = date - this._start;\n var remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([cfg.to, to, currentValue, cfg.from]);\n this._from = resolve([cfg.from, currentValue, to]);\n }\n }\n }, {\n key: \"cancel\",\n value: function cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n\n this._notify(false);\n }\n }\n }, {\n key: \"tick\",\n value: function tick(date) {\n var elapsed = date - this._start;\n var duration = this._duration;\n var prop = this._prop;\n var from = this._from;\n var loop = this._loop;\n var to = this._to;\n var factor;\n this._active = from !== to && (loop || elapsed < duration);\n\n if (!this._active) {\n this._target[prop] = to;\n\n this._notify(true);\n\n return;\n }\n\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\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 }, {\n key: \"wait\",\n value: function wait() {\n var promises = this._promises || (this._promises = []);\n return new Promise(function (res, rej) {\n promises.push({\n res: res,\n rej: rej\n });\n });\n }\n }, {\n key: \"_notify\",\n value: function _notify(resolved) {\n var method = resolved ? 'res' : 'rej';\n var promises = this._promises || [];\n\n for (var i = 0; i < promises.length; i++) {\n promises[i][method]();\n }\n }\n }]);\n\n return Animation;\n}();\n\nvar numbers = ['x', 'y', 'borderWidth', 'radius', 'tension'];\nvar colors = ['color', 'borderColor', 'backgroundColor'];\ndefaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n});\nvar animationOptions = Object.keys(defaults.animation);\ndefaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: function _scriptable(name) {\n return name !== 'onProgress' && name !== 'onComplete' && name !== 'fn';\n }\n});\ndefaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n});\ndefaults.describe('animations', {\n _fallback: 'animation'\n});\ndefaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: function fn(v) {\n return v | 0;\n }\n }\n }\n }\n});\n\nvar Animations = /*#__PURE__*/function () {\n function Animations(chart, config) {\n _classCallCheck(this, Animations);\n\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n\n _createClass(Animations, [{\n key: \"configure\",\n value: function configure(config) {\n if (!isObject(config)) {\n return;\n }\n\n var animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach(function (key) {\n var cfg = config[key];\n\n if (!isObject(cfg)) {\n return;\n }\n\n var resolved = {};\n\n var _iterator = _createForOfIteratorHelper(animationOptions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n var option = _step.value;\n resolved[option] = cfg[option];\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n (isArray(cfg.properties) && cfg.properties || [key]).forEach(function (prop) {\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n }, {\n key: \"_animateOptions\",\n value: function _animateOptions(target, values) {\n var newOptions = values.options;\n var options = resolveTargetOptions(target, newOptions);\n\n if (!options) {\n return [];\n }\n\n var animations = this._createAnimations(options, newOptions);\n\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(function () {\n target.options = newOptions;\n }, function () {});\n }\n\n return animations;\n }\n }, {\n key: \"_createAnimations\",\n value: function _createAnimations(target, values) {\n var animatedProps = this._properties;\n var animations = [];\n var running = target.$animations || (target.$animations = {});\n var props = Object.keys(values);\n var date = Date.now();\n var i;\n\n for (i = props.length - 1; i >= 0; --i) {\n var prop = props[i];\n\n if (prop.charAt(0) === '$') {\n continue;\n }\n\n if (prop === 'options') {\n animations.push.apply(animations, _toConsumableArray(this._animateOptions(target, values)));\n continue;\n }\n\n var value = values[prop];\n var animation = running[prop];\n var cfg = animatedProps.get(prop);\n\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n\n return animations;\n }\n }, {\n key: \"update\",\n value: function update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n\n var animations = this._createAnimations(target, values);\n\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n }]);\n\n return Animations;\n}();\n\nfunction awaitAll(animations, properties) {\n var running = [];\n var keys = Object.keys(properties);\n\n for (var i = 0; i < keys.length; i++) {\n var anim = animations[keys[i]];\n\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n\n return Promise.all(running);\n}\n\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n\n var options = target.options;\n\n if (!options) {\n target.options = newOptions;\n return;\n }\n\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n var opts = scale && scale.options || {};\n var reverse = opts.reverse;\n var min = opts.min === undefined ? allowedOverflow : 0;\n var max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\n\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n\n var x = scaleClip(xScale, allowedOverflow);\n var y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\n\nfunction toClip(value) {\n var t, r, b, l;\n\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\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\n\nfunction getSortedDatasetIndices(chart, filterVisible) {\n var keys = [];\n\n var metasets = chart._getSortedDatasetMetas(filterVisible);\n\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n keys.push(metasets[i].index);\n }\n\n return keys;\n}\n\nfunction _applyStack(stack, value, dsIndex) {\n var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};\n var keys = stack.keys;\n var singleMode = options.mode === 'single';\n var i, ilen, datasetIndex, otherValue;\n\n if (value === null) {\n return;\n }\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n datasetIndex = +keys[i];\n\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n\n break;\n }\n\n otherValue = stack.values[datasetIndex];\n\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n\n return value;\n}\n\nfunction convertObjectDataToArray(data) {\n var keys = Object.keys(data);\n var adata = new Array(keys.length);\n var i, ilen, key;\n\n for (i = 0, ilen = keys.length; i < ilen; ++i) {\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n\n return adata;\n}\n\nfunction isStacked(scale, meta) {\n var stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\n\nfunction getStackKey(indexScale, valueScale, meta) {\n return \"\".concat(indexScale.id, \".\").concat(valueScale.id, \".\").concat(meta.stack || meta.type);\n}\n\nfunction getUserBounds(scale) {\n var _scale$getUserBounds = scale.getUserBounds(),\n min = _scale$getUserBounds.min,\n max = _scale$getUserBounds.max,\n minDefined = _scale$getUserBounds.minDefined,\n maxDefined = _scale$getUserBounds.maxDefined;\n\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\n\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n var subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\n\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n var _iterator2 = _createForOfIteratorHelper(vScale.getMatchingVisibleMetas(type).reverse()),\n _step2;\n\n try {\n for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {\n var meta = _step2.value;\n var value = stack[meta.index];\n\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n } catch (err) {\n _iterator2.e(err);\n } finally {\n _iterator2.f();\n }\n\n return null;\n}\n\nfunction updateStacks(controller, parsed) {\n var chart = controller.chart,\n meta = controller._cachedMeta;\n var stacks = chart._stacks || (chart._stacks = {});\n var iScale = meta.iScale,\n vScale = meta.vScale,\n datasetIndex = meta.index;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var key = getStackKey(iScale, vScale, meta);\n var ilen = parsed.length;\n var stack;\n\n for (var i = 0; i < ilen; ++i) {\n var item = parsed[i];\n var index = item[iAxis],\n value = item[vAxis];\n var itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n }\n}\n\nfunction getFirstScaleId(chart, axis) {\n var scales = chart.scales;\n return Object.keys(scales).filter(function (key) {\n return scales[key].axis === axis;\n }).shift();\n}\n\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index: index,\n mode: 'default',\n type: 'dataset'\n });\n}\n\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element: element,\n index: index,\n mode: 'default',\n type: 'data'\n });\n}\n\nfunction clearStacks(meta, items) {\n var datasetIndex = meta.controller.index;\n var axis = meta.vScale && meta.vScale.axis;\n\n if (!axis) {\n return;\n }\n\n items = items || meta._parsed;\n\n var _iterator3 = _createForOfIteratorHelper(items),\n _step3;\n\n try {\n for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {\n var parsed = _step3.value;\n var stacks = parsed._stacks;\n\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n\n delete stacks[axis][datasetIndex];\n }\n } catch (err) {\n _iterator3.e(err);\n } finally {\n _iterator3.f();\n }\n}\n\nvar isDirectUpdateMode = function isDirectUpdateMode(mode) {\n return mode === 'reset' || mode === 'none';\n};\n\nvar cloneIfNotShared = function cloneIfNotShared(cached, shared) {\n return shared ? cached : Object.assign({}, cached);\n};\n\nvar createStack = function createStack(canStack, meta, chart) {\n return canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\n};\n\nvar DatasetController = /*#__PURE__*/function () {\n function DatasetController(chart, datasetIndex) {\n _classCallCheck(this, DatasetController);\n\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.$context = undefined;\n this._syncList = [];\n this.initialize();\n }\n\n _createClass(DatasetController, [{\n key: \"initialize\",\n value: function initialize() {\n var meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n }\n }, {\n key: \"updateIndex\",\n value: function updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n\n this.index = datasetIndex;\n }\n }, {\n key: \"linkScales\",\n value: function linkScales() {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var dataset = this.getDataset();\n\n var chooseId = function chooseId(axis, x, y, r) {\n return axis === 'x' ? x : axis === 'r' ? r : y;\n };\n\n var xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n var yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n var rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n var indexAxis = meta.indexAxis;\n var iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n var 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 }, {\n key: \"getDataset\",\n value: function getDataset() {\n return this.chart.data.datasets[this.index];\n }\n }, {\n key: \"getMeta\",\n value: function getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n }, {\n key: \"getScaleForId\",\n value: function getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n }, {\n key: \"_getOtherScale\",\n value: function _getOtherScale(scale) {\n var meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._update('reset');\n }\n }, {\n key: \"_destroy\",\n value: function _destroy() {\n var meta = this._cachedMeta;\n\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n }, {\n key: \"_dataCheck\",\n value: function _dataCheck() {\n var dataset = this.getDataset();\n var data = dataset.data || (dataset.data = []);\n var _data = this._data;\n\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n var meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n\n this._syncList = [];\n this._data = data;\n }\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n var meta = this._cachedMeta;\n\n this._dataCheck();\n\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n }, {\n key: \"buildOrUpdateElements\",\n value: function buildOrUpdateElements(resetNewElements) {\n var meta = this._cachedMeta;\n var dataset = this.getDataset();\n var stackChanged = false;\n\n this._dataCheck();\n\n var oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n\n this._resyncElements(resetNewElements);\n\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var config = this.chart.config;\n var scopeKeys = config.datasetScopeKeys(this._type);\n var 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 }, {\n key: \"parse\",\n value: function parse(start, count) {\n var meta = this._cachedMeta,\n data = this._data;\n var iScale = meta.iScale,\n _stacked = meta._stacked;\n var iAxis = iScale.axis;\n var sorted = start === 0 && count === data.length ? true : meta._sorted;\n var prev = start > 0 && meta._parsed[start - 1];\n var i, cur, parsed;\n\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\n var isNotInOrderComparedToPrev = function isNotInOrderComparedToPrev() {\n return cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n };\n\n for (i = 0; i < count; ++i) {\n meta._parsed[i + start] = cur = parsed[i];\n\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n\n prev = cur;\n }\n }\n\n meta._sorted = sorted;\n }\n\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n }, {\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = new Array(count);\n var i, ilen, index;\n\n for (i = 0, ilen = count; i < ilen; ++i) {\n var _parsed$i;\n\n index = i + start;\n parsed[i] = (_parsed$i = {}, _defineProperty(_parsed$i, iAxis, singleScale || iScale.parse(labels[index], index)), _defineProperty(_parsed$i, vAxis, vScale.parse(data[index], index)), _parsed$i);\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\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\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var _this$_parsing = this._parsing,\n _this$_parsing$xAxisK = _this$_parsing.xAxisKey,\n xAxisKey = _this$_parsing$xAxisK === void 0 ? 'x' : _this$_parsing$xAxisK,\n _this$_parsing$yAxisK = _this$_parsing.yAxisKey,\n yAxisKey = _this$_parsing$yAxisK === void 0 ? 'y' : _this$_parsing$yAxisK;\n var parsed = new Array(count);\n var i, ilen, index, item;\n\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\n return parsed;\n }\n }, {\n key: \"getParsed\",\n value: function getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n }, {\n key: \"getDataElement\",\n value: function getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n }, {\n key: \"applyStack\",\n value: function applyStack(scale, parsed, mode) {\n var chart = this.chart;\n var meta = this._cachedMeta;\n var value = parsed[scale.axis];\n var stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]\n };\n return _applyStack(stack, value, meta.index, {\n mode: mode\n });\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n var parsedValue = parsed[scale.axis];\n var value = parsedValue === null ? NaN : parsedValue;\n var values = stack && parsed._stacks[scale.axis];\n\n if (stack && values) {\n stack.values = values;\n value = _applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n }, {\n key: \"getMinMax\",\n value: function getMinMax(scale, canStack) {\n var meta = this._cachedMeta;\n var _parsed = meta._parsed;\n var sorted = meta._sorted && scale === meta.iScale;\n var ilen = _parsed.length;\n\n var otherScale = this._getOtherScale(scale);\n\n var stack = createStack(canStack, meta, this.chart);\n var range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n\n var _getUserBounds = getUserBounds(otherScale),\n otherMin = _getUserBounds.min,\n otherMax = _getUserBounds.max;\n\n var i, parsed;\n\n function _skip() {\n parsed = _parsed[i];\n var otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n\n for (i = 0; i < ilen; ++i) {\n if (_skip()) {\n continue;\n }\n\n this.updateRangeFromParsed(range, scale, parsed, stack);\n\n if (sorted) {\n break;\n }\n }\n\n if (sorted) {\n for (i = ilen - 1; i >= 0; --i) {\n if (_skip()) {\n continue;\n }\n\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n\n return range;\n }\n }, {\n key: \"getAllParsedValues\",\n value: function getAllParsedValues(scale) {\n var parsed = this._cachedMeta._parsed;\n var values = [];\n var i, ilen, value;\n\n for (i = 0, ilen = parsed.length; i < ilen; ++i) {\n value = parsed[i][scale.axis];\n\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n\n return values;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return false;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var 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 }, {\n key: \"_update\",\n value: function _update(mode) {\n var 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 }, {\n key: \"update\",\n value: function update(mode) {}\n }, {\n key: \"draw\",\n value: function draw() {\n var ctx = this._ctx;\n var chart = this.chart;\n var meta = this._cachedMeta;\n var elements = meta.data || [];\n var area = chart.chartArea;\n var active = [];\n var start = this._drawStart || 0;\n var count = this._drawCount || elements.length - start;\n var drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n var i;\n\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n\n for (i = start; i < start + count; ++i) {\n var element = elements[i];\n\n if (element.hidden) {\n continue;\n }\n\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n\n for (i = 0; i < active.length; ++i) {\n active[i].draw(ctx, area);\n }\n }\n }, {\n key: \"getStyle\",\n value: function getStyle(index, active) {\n var mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n }, {\n key: \"getContext\",\n value: function getContext(index, active, mode) {\n var dataset = this.getDataset();\n var context;\n\n if (index >= 0 && index < this._cachedMeta.data.length) {\n var 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\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n }, {\n key: \"resolveDatasetElementOptions\",\n value: function resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n }, {\n key: \"_resolveElementOptions\",\n value: function _resolveElementOptions(elementType) {\n var _this3 = this;\n\n var mode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';\n var index = arguments.length > 2 ? arguments[2] : undefined;\n var active = mode === 'active';\n var cache = this._cachedDataOpts;\n var cacheKey = elementType + '-' + mode;\n var cached = cache[cacheKey];\n var sharing = this.enableOptionSharing && defined(index);\n\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n\n var config = this.chart.config;\n var scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n var prefixes = active ? [\"\".concat(elementType, \"Hover\"), 'hover', elementType, ''] : [elementType, ''];\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n var names = Object.keys(defaults.elements[elementType]);\n\n var context = function context() {\n return _this3.getContext(index, active);\n };\n\n var values = config.resolveNamedOptions(scopes, names, context, prefixes);\n\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n\n return values;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations(index, transition, active) {\n var chart = this.chart;\n var cache = this._cachedDataOpts;\n var cacheKey = \"animation-\".concat(transition);\n var cached = cache[cacheKey];\n\n if (cached) {\n return cached;\n }\n\n var options;\n\n if (chart.options.animation !== false) {\n var config = this.chart.config;\n var scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n var scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n\n var animations = new Animations(chart, options && options.animations);\n\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getSharedOptions\",\n value: function getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n }, {\n key: \"includeOptions\",\n value: function includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n }, {\n key: \"updateElement\",\n value: function 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 }, {\n key: \"updateSharedOptions\",\n value: function updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n }, {\n key: \"_setStyle\",\n value: function _setStyle(element, index, mode, active) {\n element.active = active;\n var options = this.getStyle(index, active);\n\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n }, {\n key: \"removeHoverStyle\",\n value: function removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n }, {\n key: \"setHoverStyle\",\n value: function setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n }, {\n key: \"_removeDatasetHoverStyle\",\n value: function _removeDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n }, {\n key: \"_setDatasetHoverStyle\",\n value: function _setDatasetHoverStyle() {\n var element = this._cachedMeta.dataset;\n\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n }, {\n key: \"_resyncElements\",\n value: function _resyncElements(resetNewElements) {\n var data = this._data;\n var elements = this._cachedMeta.data;\n\n var _iterator4 = _createForOfIteratorHelper(this._syncList),\n _step4;\n\n try {\n for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {\n var _step4$value = _slicedToArray(_step4.value, 3),\n method = _step4$value[0],\n arg1 = _step4$value[1],\n arg2 = _step4$value[2];\n\n this[method](arg1, arg2);\n }\n } catch (err) {\n _iterator4.e(err);\n } finally {\n _iterator4.f();\n }\n\n this._syncList = [];\n var numMeta = elements.length;\n var numData = data.length;\n var count = Math.min(numData, numMeta);\n\n if (count) {\n this.parse(0, count);\n }\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 }, {\n key: \"_insertElements\",\n value: function _insertElements(start, count) {\n var resetNewElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n var meta = this._cachedMeta;\n var data = meta.data;\n var end = start + count;\n var i;\n\n var move = function move(arr) {\n arr.length += count;\n\n for (i = arr.length - 1; i >= end; i--) {\n arr[i] = arr[i - count];\n }\n };\n\n move(data);\n\n for (i = start; i < end; ++i) {\n data[i] = new this.dataElementType();\n }\n\n if (this._parsing) {\n move(meta._parsed);\n }\n\n this.parse(start, count);\n\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(element, start, count, mode) {}\n }, {\n key: \"_removeElements\",\n value: function _removeElements(start, count) {\n var meta = this._cachedMeta;\n\n if (this._parsing) {\n var removed = meta._parsed.splice(start, count);\n\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n\n meta.data.splice(start, count);\n }\n }, {\n key: \"_sync\",\n value: function _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n var _args2 = _slicedToArray(args, 3),\n method = _args2[0],\n arg1 = _args2[1],\n arg2 = _args2[2];\n\n this[method](arg1, arg2);\n }\n\n this.chart._dataChanges.push([this.index].concat(_toConsumableArray(args)));\n }\n }, {\n key: \"_onDataPush\",\n value: function _onDataPush() {\n var count = arguments.length;\n\n this._sync(['_insertElements', this.getDataset().data.length - count, count]);\n }\n }, {\n key: \"_onDataPop\",\n value: function _onDataPop() {\n this._sync(['_removeElements', this._cachedMeta.data.length - 1, 1]);\n }\n }, {\n key: \"_onDataShift\",\n value: function _onDataShift() {\n this._sync(['_removeElements', 0, 1]);\n }\n }, {\n key: \"_onDataSplice\",\n value: function _onDataSplice(start, count) {\n if (count) {\n this._sync(['_removeElements', start, count]);\n }\n\n var newCount = arguments.length - 2;\n\n if (newCount) {\n this._sync(['_insertElements', start, newCount]);\n }\n }\n }, {\n key: \"_onDataUnshift\",\n value: function _onDataUnshift() {\n this._sync(['_insertElements', 0, arguments.length]);\n }\n }]);\n\n return DatasetController;\n}();\n\nDatasetController.defaults = {};\nDatasetController.prototype.datasetElementType = null;\nDatasetController.prototype.dataElementType = null;\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n var visibleMetas = scale.getMatchingVisibleMetas(type);\n var values = [];\n\n for (var i = 0, ilen = visibleMetas.length; i < ilen; i++) {\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n\n scale._cache.$bar = _arrayUnique(values.sort(function (a, b) {\n return a - b;\n }));\n }\n\n return scale._cache.$bar;\n}\n\nfunction computeMinSampleSize(meta) {\n var scale = meta.iScale;\n var values = getAllScaleValues(scale, meta.type);\n var min = scale._length;\n var i, ilen, curr, prev;\n\n var updateMinAndPrev = function updateMinAndPrev() {\n if (curr === 32767 || curr === -32768) {\n return;\n }\n\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n\n prev = curr;\n };\n\n for (i = 0, ilen = values.length; i < ilen; ++i) {\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n\n prev = undefined;\n\n for (i = 0, ilen = scale.ticks.length; i < ilen; ++i) {\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n\n return min;\n}\n\nfunction computeFitCategoryTraits(index, ruler, options, stackCount) {\n var thickness = options.barThickness;\n var size, ratio;\n\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\n return {\n chunk: size / stackCount,\n ratio: ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n\nfunction computeFlexCategoryTraits(index, ruler, options, stackCount) {\n var pixels = ruler.pixels;\n var curr = pixels[index];\n var prev = index > 0 ? pixels[index - 1] : null;\n var next = index < pixels.length - 1 ? pixels[index + 1] : null;\n var percent = options.categoryPercentage;\n\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n\n if (next === null) {\n next = curr + curr - prev;\n }\n\n var start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n var size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start: start\n };\n}\n\nfunction parseFloatBar(entry, item, vScale, i) {\n var startValue = vScale.parse(entry[0], i);\n var endValue = vScale.parse(entry[1], i);\n var min = Math.min(startValue, endValue);\n var max = Math.max(startValue, endValue);\n var barStart = min;\n var barEnd = max;\n\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart: barStart,\n barEnd: barEnd,\n start: startValue,\n end: endValue,\n min: min,\n max: max\n };\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\n return item;\n}\n\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n var iScale = meta.iScale;\n var vScale = meta.vScale;\n var labels = iScale.getLabels();\n var singleScale = iScale === vScale;\n var parsed = [];\n var i, ilen, item, entry;\n\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\n return parsed;\n}\n\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\n\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\n\nfunction borderProps(properties) {\n var reverse, start, end, top, bottom;\n\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\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n\n return {\n start: start,\n end: end,\n reverse: reverse,\n top: top,\n bottom: bottom\n };\n}\n\nfunction setBorderSkipped(properties, options, stack, index) {\n var edge = options.borderSkipped;\n var res = {};\n\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n\n var _borderProps = borderProps(properties),\n start = _borderProps.start,\n end = _borderProps.end,\n reverse = _borderProps.reverse,\n top = _borderProps.top,\n bottom = _borderProps.bottom;\n\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n\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\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\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\n return edge;\n}\n\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\n\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\n\nfunction setInflateAmount(properties, _ref, ratio) {\n var inflateAmount = _ref.inflateAmount;\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\n\nvar BarController = /*#__PURE__*/function (_DatasetController) {\n _inherits(BarController, _DatasetController);\n\n var _super = _createSuper(BarController);\n\n function BarController() {\n _classCallCheck(this, BarController);\n\n return _super.apply(this, arguments);\n }\n\n _createClass(BarController, [{\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var _this$_parsing2 = this._parsing,\n _this$_parsing2$xAxis = _this$_parsing2.xAxisKey,\n xAxisKey = _this$_parsing2$xAxis === void 0 ? 'x' : _this$_parsing2$xAxis,\n _this$_parsing2$yAxis = _this$_parsing2.yAxisKey,\n yAxisKey = _this$_parsing2$yAxis === void 0 ? 'y' : _this$_parsing2$yAxis;\n var iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n var vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n var parsed = [];\n var i, ilen, item, obj;\n\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\n return parsed;\n }\n }, {\n key: \"updateRangeFromParsed\",\n value: function updateRangeFromParsed(range, scale, parsed, stack) {\n _get(_getPrototypeOf(BarController.prototype), \"updateRangeFromParsed\", this).call(this, range, scale, parsed, stack);\n\n var custom = parsed._custom;\n\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 }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var iScale = meta.iScale,\n vScale = meta.vScale;\n var parsed = this.getParsed(index);\n var custom = parsed._custom;\n var value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value: value\n };\n }\n }, {\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BarController.prototype), \"initialize\", this).call(this);\n\n var meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(bars, start, count, mode) {\n var reset = mode === 'reset';\n var index = this.index,\n vScale = this._cachedMeta.vScale;\n var base = vScale.getBasePixel();\n var horizontal = vScale.isHorizontal();\n\n var ruler = this._getRuler();\n\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions);\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n\n for (var i = start; i < start + count; i++) {\n var parsed = this.getParsed(i);\n var vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base: base,\n head: base\n } : this._calculateBarValuePixels(i);\n\n var ipixels = this._calculateBarIndexPixels(i, ruler);\n\n var stack = (parsed._stacks || {})[vScale.axis];\n var properties = {\n horizontal: 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\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n\n var 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 }, {\n key: \"_getStacks\",\n value: function _getStacks(last, dataIndex) {\n var meta = this._cachedMeta;\n var iScale = meta.iScale;\n var metasets = iScale.getMatchingVisibleMetas(this._type);\n var stacked = iScale.options.stacked;\n var ilen = metasets.length;\n var stacks = [];\n var i, item;\n\n for (i = 0; i < ilen; ++i) {\n item = metasets[i];\n\n if (!item.controller.options.grouped) {\n continue;\n }\n\n if (typeof dataIndex !== 'undefined') {\n var val = item.controller.getParsed(dataIndex)[item.controller._cachedMeta.vScale.axis];\n\n if (isNullOrUndef(val) || isNaN(val)) {\n continue;\n }\n }\n\n if (stacked === false || stacks.indexOf(item.stack) === -1 || stacked === undefined && item.stack === undefined) {\n stacks.push(item.stack);\n }\n\n if (item.index === last) {\n break;\n }\n }\n\n if (!stacks.length) {\n stacks.push(undefined);\n }\n\n return stacks;\n }\n }, {\n key: \"_getStackCount\",\n value: function _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n }, {\n key: \"_getStackIndex\",\n value: function _getStackIndex(datasetIndex, name, dataIndex) {\n var stacks = this._getStacks(datasetIndex, dataIndex);\n\n var index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n }, {\n key: \"_getRuler\",\n value: function _getRuler() {\n var opts = this.options;\n var meta = this._cachedMeta;\n var iScale = meta.iScale;\n var pixels = [];\n var i, ilen;\n\n for (i = 0, ilen = meta.data.length; i < ilen; ++i) {\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n\n var barThickness = opts.barThickness;\n var min = barThickness || computeMinSampleSize(meta);\n return {\n min: min,\n pixels: 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 }, {\n key: \"_calculateBarValuePixels\",\n value: function _calculateBarValuePixels(index) {\n var _this$_cachedMeta = this._cachedMeta,\n vScale = _this$_cachedMeta.vScale,\n _stacked = _this$_cachedMeta._stacked,\n _this$options = this.options,\n baseValue = _this$options.base,\n minBarLength = _this$options.minBarLength;\n var actualBase = baseValue || 0;\n var parsed = this.getParsed(index);\n var custom = parsed._custom;\n var floating = isFloatBar(custom);\n var value = parsed[vScale.axis];\n var start = 0;\n var length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n var head, size;\n\n if (length !== value) {\n start = length - value;\n length = value;\n }\n\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n\n start += value;\n }\n\n var startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n var base = vScale.getPixelForValue(startValue);\n\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n\n size = head - base;\n\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n\n if (value === actualBase) {\n base -= size / 2;\n }\n\n head = base + size;\n }\n\n if (base === vScale.getPixelForValue(actualBase)) {\n var halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n\n return {\n size: size,\n base: base,\n head: head,\n center: head + size / 2\n };\n }\n }, {\n key: \"_calculateBarIndexPixels\",\n value: function _calculateBarIndexPixels(index, ruler) {\n var scale = ruler.scale;\n var options = this.options;\n var skipNull = options.skipNull;\n var maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n var center, size;\n\n if (ruler.grouped) {\n var stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n var range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n\n var stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n\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\n return {\n base: center - size / 2,\n head: center + size / 2,\n center: center,\n size: size\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var meta = this._cachedMeta;\n var vScale = meta.vScale;\n var rects = meta.data;\n var ilen = rects.length;\n var i = 0;\n\n for (; i < ilen; ++i) {\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n }]);\n\n return BarController;\n}(DatasetController);\n\nBarController.id = 'bar';\nBarController.defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'base', 'width', 'height']\n }\n }\n};\nBarController.overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n};\n\nvar BubbleController = /*#__PURE__*/function (_DatasetController2) {\n _inherits(BubbleController, _DatasetController2);\n\n var _super2 = _createSuper(BubbleController);\n\n function BubbleController() {\n _classCallCheck(this, BubbleController);\n\n return _super2.apply(this, arguments);\n }\n\n _createClass(BubbleController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(BubbleController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"parsePrimitiveData\",\n value: function parsePrimitiveData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parsePrimitiveData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n\n return parsed;\n }\n }, {\n key: \"parseArrayData\",\n value: function parseArrayData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseArrayData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n var item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n\n return parsed;\n }\n }, {\n key: \"parseObjectData\",\n value: function parseObjectData(meta, data, start, count) {\n var parsed = _get(_getPrototypeOf(BubbleController.prototype), \"parseObjectData\", this).call(this, meta, data, start, count);\n\n for (var i = 0; i < parsed.length; i++) {\n var item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n\n return parsed;\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var data = this._cachedMeta.data;\n var max = 0;\n\n for (var i = data.length - 1; i >= 0; --i) {\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n\n return max > 0 && max;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var xScale = meta.xScale,\n yScale = meta.yScale;\n var parsed = this.getParsed(index);\n var x = xScale.getLabelForValue(parsed.x);\n var y = yScale.getLabelForValue(parsed.y);\n var r = parsed._custom;\n return {\n label: meta.label,\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta2 = this._cachedMeta,\n iScale = _this$_cachedMeta2.iScale,\n vScale = _this$_cachedMeta2.vScale;\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions);\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var parsed = !reset && this.getParsed(i);\n var properties = {};\n var iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n var vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n\n if (includeOptions) {\n properties.options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n\n if (reset) {\n properties.options.radius = 0;\n }\n }\n\n this.updateElement(point, i, properties, mode);\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"resolveDataElementOptions\",\n value: function resolveDataElementOptions(index, mode) {\n var parsed = this.getParsed(index);\n\n var values = _get(_getPrototypeOf(BubbleController.prototype), \"resolveDataElementOptions\", this).call(this, index, mode);\n\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n\n var radius = values.radius;\n\n if (mode !== 'active') {\n values.radius = 0;\n }\n\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n }]);\n\n return BubbleController;\n}(DatasetController);\n\nBubbleController.id = 'bubble';\nBubbleController.defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'borderWidth', 'radius']\n }\n }\n};\nBubbleController.overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n }\n }\n }\n }\n};\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n var ratioX = 1;\n var ratioY = 1;\n var offsetX = 0;\n var offsetY = 0;\n\n if (circumference < TAU) {\n var startAngle = rotation;\n var endAngle = startAngle + circumference;\n var startX = Math.cos(startAngle);\n var startY = Math.sin(startAngle);\n var endX = Math.cos(endAngle);\n var endY = Math.sin(endAngle);\n\n var calcMax = function calcMax(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n };\n\n var calcMin = function calcMin(angle, a, b) {\n return _angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n };\n\n var maxX = calcMax(0, startX, endX);\n var maxY = calcMax(HALF_PI, startY, endY);\n var minX = calcMin(PI, startX, endX);\n var 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\n return {\n ratioX: ratioX,\n ratioY: ratioY,\n offsetX: offsetX,\n offsetY: offsetY\n };\n}\n\nvar DoughnutController = /*#__PURE__*/function (_DatasetController3) {\n _inherits(DoughnutController, _DatasetController3);\n\n var _super3 = _createSuper(DoughnutController);\n\n function DoughnutController(chart, datasetIndex) {\n var _this4;\n\n _classCallCheck(this, DoughnutController);\n\n _this4 = _super3.call(this, chart, datasetIndex);\n _this4.enableOptionSharing = true;\n _this4.innerRadius = undefined;\n _this4.outerRadius = undefined;\n _this4.offsetX = undefined;\n _this4.offsetY = undefined;\n return _this4;\n }\n\n _createClass(DoughnutController, [{\n key: \"linkScales\",\n value: function linkScales() {}\n }, {\n key: \"parse\",\n value: function parse(start, count) {\n var data = this.getDataset().data;\n var meta = this._cachedMeta;\n\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n var getter = function getter(i) {\n return +data[i];\n };\n\n if (isObject(data[start])) {\n var _this$_parsing$key = this._parsing.key,\n key = _this$_parsing$key === void 0 ? 'value' : _this$_parsing$key;\n\n getter = function getter(i) {\n return +resolveObjectKey(data[i], key);\n };\n }\n\n var i, ilen;\n\n for (i = start, ilen = start + count; i < ilen; ++i) {\n meta._parsed[i] = getter(i);\n }\n }\n }\n }, {\n key: \"_getRotation\",\n value: function _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n }, {\n key: \"_getCircumference\",\n value: function _getCircumference() {\n return toRadians(this.options.circumference);\n }\n }, {\n key: \"_getRotationExtents\",\n value: function _getRotationExtents() {\n var min = TAU;\n var max = -TAU;\n\n for (var i = 0; i < this.chart.data.datasets.length; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n var controller = this.chart.getDatasetMeta(i).controller;\n\n var rotation = controller._getRotation();\n\n var circumference = controller._getCircumference();\n\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n\n return {\n rotation: min,\n circumference: max - min\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var chart = this.chart;\n var chartArea = chart.chartArea;\n var meta = this._cachedMeta;\n var arcs = meta.data;\n var spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n var maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n var cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n\n var chartWeight = this._getRingWeight(this.index);\n\n var _this$_getRotationExt = this._getRotationExtents(),\n circumference = _this$_getRotationExt.circumference,\n rotation = _this$_getRotationExt.rotation;\n\n var _getRatioAndOffset = getRatioAndOffset(rotation, circumference, cutout),\n ratioX = _getRatioAndOffset.ratioX,\n ratioY = _getRatioAndOffset.ratioY,\n offsetX = _getRatioAndOffset.offsetX,\n offsetY = _getRatioAndOffset.offsetY;\n\n var maxWidth = (chartArea.width - spacing) / ratioX;\n var maxHeight = (chartArea.height - spacing) / ratioY;\n var maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n var outerRadius = toDimension(this.options.radius, maxRadius);\n var innerRadius = Math.max(outerRadius * cutout, 0);\n\n var radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n\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 }, {\n key: \"_circumference\",\n value: function _circumference(i, reset) {\n var opts = this.options;\n var meta = this._cachedMeta;\n\n var circumference = this._getCircumference();\n\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var reset = mode === 'reset';\n var chart = this.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var animationOpts = opts.animation;\n var centerX = (chartArea.left + chartArea.right) / 2;\n var centerY = (chartArea.top + chartArea.bottom) / 2;\n var animateScale = reset && animationOpts.animateScale;\n var innerRadius = animateScale ? 0 : this.innerRadius;\n var outerRadius = animateScale ? 0 : this.outerRadius;\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions);\n\n var startAngle = this._getRotation();\n\n var i;\n\n for (i = 0; i < start; ++i) {\n startAngle += this._circumference(i, reset);\n }\n\n for (i = start; i < start + count; ++i) {\n var circumference = this._circumference(i, reset);\n\n var arc = arcs[i];\n var properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle: startAngle,\n endAngle: startAngle + circumference,\n circumference: circumference,\n outerRadius: outerRadius,\n innerRadius: innerRadius\n };\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"calculateTotal\",\n value: function calculateTotal() {\n var meta = this._cachedMeta;\n var metaData = meta.data;\n var total = 0;\n var i;\n\n for (i = 0; i < metaData.length; i++) {\n var value = meta._parsed[i];\n\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n\n return total;\n }\n }, {\n key: \"calculateCircumference\",\n value: function calculateCircumference(value) {\n var total = this._cachedMeta.total;\n\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n\n return 0;\n }\n }, {\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var chart = this.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"getMaxBorderWidth\",\n value: function getMaxBorderWidth(arcs) {\n var max = 0;\n var chart = this.chart;\n var i, ilen, meta, controller, options;\n\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\n if (!arcs) {\n return 0;\n }\n\n for (i = 0, ilen = arcs.length; i < ilen; ++i) {\n options = controller.resolveDataElementOptions(i);\n\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n\n return max;\n }\n }, {\n key: \"getMaxOffset\",\n value: function getMaxOffset(arcs) {\n var max = 0;\n\n for (var i = 0, ilen = arcs.length; i < ilen; ++i) {\n var options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n\n return max;\n }\n }, {\n key: \"_getRingWeightOffset\",\n value: function _getRingWeightOffset(datasetIndex) {\n var ringWeightOffset = 0;\n\n for (var i = 0; i < datasetIndex; ++i) {\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n\n return ringWeightOffset;\n }\n }, {\n key: \"_getRingWeight\",\n value: function _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n }, {\n key: \"_getVisibleDatasetWeightTotal\",\n value: function _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n }]);\n\n return DoughnutController;\n}(DatasetController);\n\nDoughnutController.id = 'doughnut';\nDoughnutController.defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['circumference', 'endAngle', 'innerRadius', 'outerRadius', 'startAngle', 'x', 'y', 'offset', 'borderWidth', 'spacing']\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n};\nDoughnutController.descriptors = {\n _scriptable: function _scriptable(name) {\n return name !== 'spacing';\n },\n _indexable: function _indexable(name) {\n return name !== 'spacing';\n }\n};\nDoughnutController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n var pointStyle = chart.legend.options.labels.pointStyle;\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(tooltipItem) {\n var dataLabel = tooltipItem.label;\n var value = ': ' + tooltipItem.formattedValue;\n\n if (isArray(dataLabel)) {\n dataLabel = dataLabel.slice();\n dataLabel[0] += value;\n } else {\n dataLabel += value;\n }\n\n return dataLabel;\n }\n }\n }\n }\n};\n\nvar LineController = /*#__PURE__*/function (_DatasetController4) {\n _inherits(LineController, _DatasetController4);\n\n var _super4 = _createSuper(LineController);\n\n function LineController() {\n _classCallCheck(this, LineController);\n\n return _super4.apply(this, arguments);\n }\n\n _createClass(LineController, [{\n key: \"initialize\",\n value: function initialize() {\n this.enableOptionSharing = true;\n\n _get(_getPrototypeOf(LineController.prototype), \"initialize\", this).call(this);\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n var line = meta.dataset,\n _meta$data = meta.data,\n points = _meta$data === void 0 ? [] : _meta$data,\n _dataset = meta._dataset;\n var animationsDisabled = this.chart._animationsDisabled;\n\n var _getStartAndCountOfVi = getStartAndCountOfVisiblePoints(meta, points, animationsDisabled),\n start = _getStartAndCountOfVi.start,\n count = _getStartAndCountOfVi.count;\n\n this._drawStart = start;\n this._drawCount = count;\n\n if (scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n var options = this.resolveDatasetElementOptions(mode);\n\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options: options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var reset = mode === 'reset';\n var _this$_cachedMeta3 = this._cachedMeta,\n iScale = _this$_cachedMeta3.iScale,\n vScale = _this$_cachedMeta3.vScale,\n _stacked = _this$_cachedMeta3._stacked,\n _dataset = _this$_cachedMeta3._dataset;\n var firstOpts = this.resolveDataElementOptions(start, mode);\n var sharedOptions = this.getSharedOptions(firstOpts);\n var includeOptions = this.includeOptions(mode, sharedOptions);\n var iAxis = iScale.axis;\n var vAxis = vScale.axis;\n var _this$options2 = this.options,\n spanGaps = _this$options2.spanGaps,\n segment = _this$options2.segment;\n var maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n var directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n var prevParsed = start > 0 && this.getParsed(start - 1);\n\n for (var i = start; i < start + count; ++i) {\n var point = points[i];\n var parsed = this.getParsed(i);\n var properties = directUpdate ? point : {};\n var nullData = isNullOrUndef(parsed[vAxis]);\n var iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n var vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && parsed[iAxis] - prevParsed[iAxis] > maxGapLength;\n\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n\n prevParsed = parsed;\n }\n\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n }, {\n key: \"getMaxOverflow\",\n value: function getMaxOverflow() {\n var meta = this._cachedMeta;\n var dataset = meta.dataset;\n var border = dataset.options && dataset.options.borderWidth || 0;\n var data = meta.data || [];\n\n if (!data.length) {\n return border;\n }\n\n var firstPoint = data[0].size(this.resolveDataElementOptions(0));\n var lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n\n _get(_getPrototypeOf(LineController.prototype), \"draw\", this).call(this);\n }\n }]);\n\n return LineController;\n}(DatasetController);\n\nLineController.id = 'line';\nLineController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n};\nLineController.overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n};\n\nfunction getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n var pointCount = points.length;\n var start = 0;\n var count = pointCount;\n\n if (meta._sorted) {\n var iScale = meta.iScale,\n _parsed = meta._parsed;\n var axis = iScale.axis;\n\n var _iScale$getUserBounds = iScale.getUserBounds(),\n min = _iScale$getUserBounds.min,\n max = _iScale$getUserBounds.max,\n minDefined = _iScale$getUserBounds.minDefined,\n maxDefined = _iScale$getUserBounds.maxDefined;\n\n if (minDefined) {\n start = _limitValue(Math.min(_lookupByKey(_parsed, iScale.axis, min).lo, animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n\n if (maxDefined) {\n count = _limitValue(Math.max(_lookupByKey(_parsed, iScale.axis, max).hi + 1, animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max)).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n\n return {\n start: start,\n count: count\n };\n}\n\nfunction scaleRangesChanged(meta) {\n var xScale = meta.xScale,\n yScale = meta.yScale,\n _scaleRanges = meta._scaleRanges;\n var newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n\n var 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\nvar PolarAreaController = /*#__PURE__*/function (_DatasetController5) {\n _inherits(PolarAreaController, _DatasetController5);\n\n var _super5 = _createSuper(PolarAreaController);\n\n function PolarAreaController(chart, datasetIndex) {\n var _this5;\n\n _classCallCheck(this, PolarAreaController);\n\n _this5 = _super5.call(this, chart, datasetIndex);\n _this5.innerRadius = undefined;\n _this5.outerRadius = undefined;\n return _this5;\n }\n\n _createClass(PolarAreaController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var meta = this._cachedMeta;\n var chart = this.chart;\n var labels = chart.data.labels || [];\n var value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value: value\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var arcs = this._cachedMeta.data;\n\n this._updateRadius();\n\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n }, {\n key: \"_updateRadius\",\n value: function _updateRadius() {\n var chart = this.chart;\n var chartArea = chart.chartArea;\n var opts = chart.options;\n var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n var outerRadius = Math.max(minSize / 2, 0);\n var innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n var radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(arcs, start, count, mode) {\n var reset = mode === 'reset';\n var chart = this.chart;\n var dataset = this.getDataset();\n var opts = chart.options;\n var animationOpts = opts.animation;\n var scale = this._cachedMeta.rScale;\n var centerX = scale.xCenter;\n var centerY = scale.yCenter;\n var datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n var angle = datasetStartAngle;\n var i;\n var defaultAngle = 360 / this.countVisibleElements();\n\n for (i = 0; i < start; ++i) {\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n\n for (i = start; i < start + count; i++) {\n var arc = arcs[i];\n var startAngle = angle;\n\n var endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n\n var outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(dataset.data[i]) : 0;\n angle = endAngle;\n\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n\n var properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius: outerRadius,\n startAngle: startAngle,\n endAngle: endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n }, {\n key: \"countVisibleElements\",\n value: function countVisibleElements() {\n var _this6 = this;\n\n var dataset = this.getDataset();\n var meta = this._cachedMeta;\n var count = 0;\n meta.data.forEach(function (element, index) {\n if (!isNaN(dataset.data[index]) && _this6.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n }, {\n key: \"_computeAngle\",\n value: function _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n }]);\n\n return PolarAreaController;\n}(DatasetController);\n\nPolarAreaController.id = 'polarArea';\nPolarAreaController.defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius']\n }\n },\n indexAxis: 'r',\n startAngle: 0\n};\nPolarAreaController.overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels: function generateLabels(chart) {\n var data = chart.data;\n\n if (data.labels.length && data.datasets.length) {\n var pointStyle = chart.legend.options.labels.pointStyle;\n return data.labels.map(function (label, i) {\n var meta = chart.getDatasetMeta(0);\n var style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n\n return [];\n }\n },\n onClick: function onClick(e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n },\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(context) {\n return context.chart.data.labels[context.dataIndex] + ': ' + context.formattedValue;\n }\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n};\n\nvar PieController = /*#__PURE__*/function (_DoughnutController) {\n _inherits(PieController, _DoughnutController);\n\n var _super6 = _createSuper(PieController);\n\n function PieController() {\n _classCallCheck(this, PieController);\n\n return _super6.apply(this, arguments);\n }\n\n return _createClass(PieController);\n}(DoughnutController);\n\nPieController.id = 'pie';\nPieController.defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n};\n\nvar RadarController = /*#__PURE__*/function (_DatasetController6) {\n _inherits(RadarController, _DatasetController6);\n\n var _super7 = _createSuper(RadarController);\n\n function RadarController() {\n _classCallCheck(this, RadarController);\n\n return _super7.apply(this, arguments);\n }\n\n _createClass(RadarController, [{\n key: \"getLabelAndValue\",\n value: function getLabelAndValue(index) {\n var vScale = this._cachedMeta.vScale;\n var parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var meta = this._cachedMeta;\n var line = meta.dataset;\n var points = meta.data || [];\n var labels = meta.iScale.getLabels();\n line.points = points;\n\n if (mode !== 'resize') {\n var options = this.resolveDatasetElementOptions(mode);\n\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n\n var properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options: options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n\n this.updateElements(points, 0, points.length, mode);\n }\n }, {\n key: \"updateElements\",\n value: function updateElements(points, start, count, mode) {\n var dataset = this.getDataset();\n var scale = this._cachedMeta.rScale;\n var reset = mode === 'reset';\n\n for (var i = start; i < start + count; i++) {\n var point = points[i];\n var options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n var pointPosition = scale.getPointPositionForValue(i, dataset.data[i]);\n var x = reset ? scale.xCenter : pointPosition.x;\n var y = reset ? scale.yCenter : pointPosition.y;\n var properties = {\n x: x,\n y: y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options: options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n }]);\n\n return RadarController;\n}(DatasetController);\n\nRadarController.id = 'radar';\nRadarController.defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n};\nRadarController.overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n};\n\nvar ScatterController = /*#__PURE__*/function (_LineController) {\n _inherits(ScatterController, _LineController);\n\n var _super8 = _createSuper(ScatterController);\n\n function ScatterController() {\n _classCallCheck(this, ScatterController);\n\n return _super8.apply(this, arguments);\n }\n\n return _createClass(ScatterController);\n}(LineController);\n\nScatterController.id = 'scatter';\nScatterController.defaults = {\n showLine: false,\n fill: false\n};\nScatterController.overrides = {\n interaction: {\n mode: 'point'\n },\n plugins: {\n tooltip: {\n callbacks: {\n title: function title() {\n return '';\n },\n label: function label(item) {\n return '(' + item.label + ', ' + item.formattedValue + ')';\n }\n }\n }\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n};\nvar controllers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n BarController: BarController,\n BubbleController: BubbleController,\n DoughnutController: DoughnutController,\n LineController: LineController,\n PolarAreaController: PolarAreaController,\n PieController: PieController,\n RadarController: RadarController,\n ScatterController: ScatterController\n});\n\nfunction abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n\nvar DateAdapter = /*#__PURE__*/function () {\n function DateAdapter(options) {\n _classCallCheck(this, DateAdapter);\n\n this.options = options || {};\n }\n\n _createClass(DateAdapter, [{\n key: \"formats\",\n value: function formats() {\n return abstract();\n }\n }, {\n key: \"parse\",\n value: function parse(value, format) {\n return abstract();\n }\n }, {\n key: \"format\",\n value: function format(timestamp, _format) {\n return abstract();\n }\n }, {\n key: \"add\",\n value: function add(timestamp, amount, unit) {\n return abstract();\n }\n }, {\n key: \"diff\",\n value: function diff(a, b, unit) {\n return abstract();\n }\n }, {\n key: \"startOf\",\n value: function startOf(timestamp, unit, weekday) {\n return abstract();\n }\n }, {\n key: \"endOf\",\n value: function endOf(timestamp, unit) {\n return abstract();\n }\n }]);\n\n return DateAdapter;\n}();\n\nDateAdapter.override = function (members) {\n Object.assign(DateAdapter.prototype, members);\n};\n\nvar adapters = {\n _date: DateAdapter\n};\n\nfunction getRelativePosition(e, chart) {\n if ('native' in e) {\n return {\n x: e.x,\n y: e.y\n };\n }\n\n return getRelativePosition$1(e, chart);\n}\n\nfunction evaluateAllVisibleItems(chart, handler) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var index, data, element;\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i = metasets[i];\n index = _metasets$i.index;\n data = _metasets$i.data;\n\n for (var j = 0, jlen = data.length; j < jlen; ++j) {\n element = data[j];\n\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\nfunction binarySearch(metaset, axis, value, intersect) {\n var controller = metaset.controller,\n data = metaset.data,\n _sorted = metaset._sorted;\n var iScale = controller._cachedMeta.iScale;\n\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n var lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n var el = data[0];\n var range = typeof el.getRange === 'function' && el.getRange(axis);\n\n if (range) {\n var start = lookupMethod(data, axis, value - range);\n var end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n\nfunction optimizedEvaluateItems(chart, axis, position, handler, intersect) {\n var metasets = chart.getSortedVisibleDatasetMetas();\n var value = position[axis];\n\n for (var i = 0, ilen = metasets.length; i < ilen; ++i) {\n var _metasets$i2 = metasets[i],\n index = _metasets$i2.index,\n data = _metasets$i2.data;\n\n var _binarySearch = binarySearch(metasets[i], axis, value, intersect),\n lo = _binarySearch.lo,\n hi = _binarySearch.hi;\n\n for (var j = lo; j <= hi; ++j) {\n var element = data[j];\n\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n\nfunction getDistanceMetricForAxis(axis) {\n var useX = axis.indexOf('x') !== -1;\n var useY = axis.indexOf('y') !== -1;\n return function (pt1, pt2) {\n var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n\nfunction getIntersectItems(chart, position, axis, useFinalPosition) {\n var items = [];\n\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return items;\n }\n\n var evaluationFunc = function evaluationFunc(element, datasetIndex, index) {\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n };\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n\nfunction getNearestRadialItems(chart, position, axis, useFinalPosition) {\n var items = [];\n\n function evaluationFunc(element, datasetIndex, index) {\n var _element$getProps = element.getProps(['startAngle', 'endAngle'], useFinalPosition),\n startAngle = _element$getProps.startAngle,\n endAngle = _element$getProps.endAngle;\n\n var _getAngleFromPoint = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n }),\n angle = _getAngleFromPoint.angle;\n\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n }\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition) {\n var items = [];\n var distanceMetric = getDistanceMetricForAxis(axis);\n var minDistance = Number.POSITIVE_INFINITY;\n\n function evaluationFunc(element, datasetIndex, index) {\n var inRange = element.inRange(position.x, position.y, useFinalPosition);\n\n if (intersect && !inRange) {\n return;\n }\n\n var center = element.getCenterPoint(useFinalPosition);\n\n var pointInArea = _isPointInArea(center, chart.chartArea, chart._minPadding);\n\n if (!pointInArea && !inRange) {\n return;\n }\n\n var distance = distanceMetric(position, center);\n\n if (distance < minDistance) {\n items = [{\n element: element,\n datasetIndex: datasetIndex,\n index: index\n }];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n }\n\n optimizedEvaluateItems(chart, axis, position, evaluationFunc);\n return items;\n}\n\nfunction getNearestItems(chart, position, axis, intersect, useFinalPosition) {\n if (!_isPointInArea(position, chart.chartArea, chart._minPadding)) {\n return [];\n }\n\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition);\n}\n\nfunction getAxisItems(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var items = [];\n var axis = options.axis;\n var rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n var intersectsItem = false;\n evaluateAllVisibleItems(chart, function (element, datasetIndex, index) {\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element: element,\n datasetIndex: datasetIndex,\n index: index\n });\n }\n\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n intersectsItem = true;\n }\n });\n\n if (options.intersect && !intersectsItem) {\n return [];\n }\n\n return items;\n}\n\nvar Interaction = {\n modes: {\n index: function index(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'x';\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);\n var elements = [];\n\n if (!items.length) {\n return [];\n }\n\n chart.getSortedVisibleDatasetMetas().forEach(function (meta) {\n var index = items[0].index;\n var element = meta.data[index];\n\n if (element && !element.skip) {\n elements.push({\n element: element,\n datasetIndex: meta.index,\n index: index\n });\n }\n });\n return elements;\n },\n dataset: function dataset(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n var items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition) : getNearestItems(chart, position, axis, false, useFinalPosition);\n\n if (items.length > 0) {\n var datasetIndex = items[0].datasetIndex;\n var data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n\n for (var i = 0; i < data.length; ++i) {\n items.push({\n element: data[i],\n datasetIndex: datasetIndex,\n index: i\n });\n }\n }\n\n return items;\n },\n point: function point(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n return getIntersectItems(chart, position, axis, useFinalPosition);\n },\n nearest: function nearest(chart, e, options, useFinalPosition) {\n var position = getRelativePosition(e, chart);\n var axis = options.axis || 'xy';\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition);\n },\n x: function x(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {\n axis: 'x',\n intersect: options.intersect\n }, useFinalPosition);\n },\n y: function y(chart, e, options, useFinalPosition) {\n return getAxisItems(chart, e, {\n axis: 'y',\n intersect: options.intersect\n }, useFinalPosition);\n }\n }\n};\nvar STATIC_POSITIONS = ['left', 'top', 'right', 'bottom'];\n\nfunction filterByPosition(array, position) {\n return array.filter(function (v) {\n return v.pos === position;\n });\n}\n\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter(function (v) {\n return STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis;\n });\n}\n\nfunction sortByWeight(array, reverse) {\n return array.sort(function (a, b) {\n var v0 = reverse ? b : a;\n var v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\n\nfunction wrapBoxes(boxes) {\n var layoutBoxes = [];\n var i, ilen, box, pos, stack, stackWeight;\n\n for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {\n box = boxes[i];\n var _box = box;\n pos = _box.position;\n var _box$options = _box.options;\n stack = _box$options.stack;\n var _box$options$stackWei = _box$options.stackWeight;\n stackWeight = _box$options$stackWei === void 0 ? 1 : _box$options$stackWei;\n layoutBoxes.push({\n index: i,\n box: box,\n pos: pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight: stackWeight\n });\n }\n\n return layoutBoxes;\n}\n\nfunction buildStacks(layouts) {\n var stacks = {};\n\n var _iterator5 = _createForOfIteratorHelper(layouts),\n _step5;\n\n try {\n for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {\n var wrap = _step5.value;\n var stack = wrap.stack,\n pos = wrap.pos,\n stackWeight = wrap.stackWeight;\n\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n\n var _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n\n _stack.count++;\n _stack.weight += stackWeight;\n }\n } catch (err) {\n _iterator5.e(err);\n } finally {\n _iterator5.f();\n }\n\n return stacks;\n}\n\nfunction setLayoutDims(layouts, params) {\n var stacks = buildStacks(layouts);\n var vBoxMaxWidth = params.vBoxMaxWidth,\n hBoxMaxHeight = params.hBoxMaxHeight;\n var i, ilen, layout;\n\n for (i = 0, ilen = layouts.length; i < ilen; ++i) {\n layout = layouts[i];\n var fullSize = layout.box.fullSize;\n var stack = stacks[layout.stack];\n var factor = stack && layout.stackWeight / stack.weight;\n\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\n return stacks;\n}\n\nfunction buildLayoutBoxes(boxes) {\n var layoutBoxes = wrapBoxes(boxes);\n var fullSize = sortByWeight(layoutBoxes.filter(function (wrap) {\n return wrap.box.fullSize;\n }), true);\n var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n var centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n var centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize: 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}\n\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\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}\n\nfunction updateDims(chartArea, params, layout, stacks) {\n var pos = layout.pos,\n box = layout.box;\n var maxPadding = chartArea.maxPadding;\n\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n\n var 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\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n\n var newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n var newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n var widthChanged = newWidth !== chartArea.w;\n var 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}\n\nfunction handleMaxPadding(chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function updatePos(pos) {\n var change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\n\nfunction getMargins(horizontal, chartArea) {\n var maxPadding = chartArea.maxPadding;\n\n function marginForPositions(positions) {\n var margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach(function (pos) {\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n\n return horizontal ? marginForPositions(['left', 'right']) : marginForPositions(['top', 'bottom']);\n}\n\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n var refitBoxes = [];\n var i, ilen, layout, box, refit, changed;\n\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\n var _updateDims = updateDims(chartArea, params, layout, stacks),\n same = _updateDims.same,\n other = _updateDims.other;\n\n refit |= same && refitBoxes.length;\n changed = changed || other;\n\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\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}\n\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n var userPadding = params.padding;\n var x = chartArea.x,\n y = chartArea.y;\n\n var _iterator6 = _createForOfIteratorHelper(boxes),\n _step6;\n\n try {\n for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {\n var layout = _step6.value;\n var box = layout.box;\n var stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n var weight = layout.stackWeight / stack.weight || 1;\n\n if (layout.horizontal) {\n var width = chartArea.w * weight;\n var height = stack.size || box.height;\n\n if (defined(stack.start)) {\n y = stack.start;\n }\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\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n var _height = chartArea.h * weight;\n\n var _width = stack.size || box.width;\n\n if (defined(stack.start)) {\n x = stack.start;\n }\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\n stack.start = x;\n stack.placed += _height;\n x = box.right;\n }\n }\n } catch (err) {\n _iterator6.e(err);\n } finally {\n _iterator6.f();\n }\n\n chartArea.x = x;\n chartArea.y = y;\n}\n\ndefaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n});\nvar layouts = {\n addBox: function addBox(chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n\n item._layers = item._layers || function () {\n return [{\n z: 0,\n draw: function draw(chartArea) {\n item.draw(chartArea);\n }\n }];\n };\n\n chart.boxes.push(item);\n },\n removeBox: function removeBox(chart, layoutItem) {\n var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure: function configure(chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update: function update(chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n\n var padding = toPadding(chart.options.layout.padding);\n var availableWidth = Math.max(width - padding.width, 0);\n var availableHeight = Math.max(height - padding.height, 0);\n var boxes = buildLayoutBoxes(chart.boxes);\n var verticalBoxes = boxes.vertical;\n var horizontalBoxes = boxes.horizontal;\n each(chart.boxes, function (box) {\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n var visibleVerticalBoxCount = verticalBoxes.reduce(function (total, wrap) {\n return wrap.box.options && wrap.box.options.display === false ? total : total + 1;\n }, 0) || 1;\n var params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding: padding,\n availableWidth: availableWidth,\n availableHeight: availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n var maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n var chartArea = Object.assign({\n maxPadding: maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n var stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\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, function (layout) {\n var 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\nvar BasePlatform = /*#__PURE__*/function () {\n function BasePlatform() {\n _classCallCheck(this, BasePlatform);\n }\n\n _createClass(BasePlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {}\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n return false;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {}\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type, listener) {}\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return 1;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width: width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n return true;\n }\n }, {\n key: \"updateConfig\",\n value: function updateConfig(config) {}\n }]);\n\n return BasePlatform;\n}();\n\nvar BasicPlatform = /*#__PURE__*/function (_BasePlatform) {\n _inherits(BasicPlatform, _BasePlatform);\n\n var _super9 = _createSuper(BasicPlatform);\n\n function BasicPlatform() {\n _classCallCheck(this, BasicPlatform);\n\n return _super9.apply(this, arguments);\n }\n\n _createClass(BasicPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n }, {\n key: \"updateConfig\",\n value: function updateConfig(config) {\n config.options.animation = false;\n }\n }]);\n\n return BasicPlatform;\n}(BasePlatform);\n\nvar EXPANDO_KEY = '$chartjs';\nvar 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};\n\nvar isNullOrEmpty = function isNullOrEmpty(value) {\n return value === null || value === '';\n};\n\nfunction initCanvas(canvas, aspectRatio) {\n var style = canvas.style;\n var renderHeight = canvas.getAttribute('height');\n var 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\n if (isNullOrEmpty(renderWidth)) {\n var displayWidth = readUsedSize(canvas, 'width');\n\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n var displayHeight = readUsedSize(canvas, 'height');\n\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n\n return canvas;\n}\n\nvar eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\n\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\n\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\n\nfunction fromNativeEvent(event, chart) {\n var type = EVENT_TYPES[event.type] || event.type;\n\n var _getRelativePosition$ = getRelativePosition$1(event, chart),\n x = _getRelativePosition$.x,\n y = _getRelativePosition$.y;\n\n return {\n type: type,\n chart: chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\n\nfunction nodeListContains(nodeList, canvas) {\n var _iterator7 = _createForOfIteratorHelper(nodeList),\n _step7;\n\n try {\n for (_iterator7.s(); !(_step7 = _iterator7.n()).done;) {\n var node = _step7.value;\n\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n } catch (err) {\n _iterator7.e(err);\n } finally {\n _iterator7.f();\n }\n}\n\nfunction createAttachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator8 = _createForOfIteratorHelper(entries),\n _step8;\n\n try {\n for (_iterator8.s(); !(_step8 = _iterator8.n()).done;) {\n var entry = _step8.value;\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n } catch (err) {\n _iterator8.e(err);\n } finally {\n _iterator8.f();\n }\n\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\n\nfunction createDetachObserver(chart, type, listener) {\n var canvas = chart.canvas;\n var observer = new MutationObserver(function (entries) {\n var trigger = false;\n\n var _iterator9 = _createForOfIteratorHelper(entries),\n _step9;\n\n try {\n for (_iterator9.s(); !(_step9 = _iterator9.n()).done;) {\n var entry = _step9.value;\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n } catch (err) {\n _iterator9.e(err);\n } finally {\n _iterator9.f();\n }\n\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\n\nvar drpListeningCharts = new Map();\nvar oldDevicePixelRatio = 0;\n\nfunction onWindowResize() {\n var dpr = window.devicePixelRatio;\n\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach(function (resize, chart) {\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\n\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n\n drpListeningCharts.set(chart, resize);\n}\n\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\n\nfunction createResizeObserver(chart, type, listener) {\n var canvas = chart.canvas;\n\n var container = canvas && _getParentNode(canvas);\n\n if (!container) {\n return;\n }\n\n var resize = throttled(function (width, height) {\n var w = container.clientWidth;\n listener(width, height);\n\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n var observer = new ResizeObserver(function (entries) {\n var entry = entries[0];\n var width = entry.contentRect.width;\n var height = entry.contentRect.height;\n\n if (width === 0 && height === 0) {\n return;\n }\n\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\n\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\n\nfunction createProxyAndListen(chart, type, listener) {\n var canvas = chart.canvas;\n var proxy = throttled(function (event) {\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart, function (args) {\n var event = args[0];\n return [event, event.offsetX, event.offsetY];\n });\n addListener(canvas, type, proxy);\n return proxy;\n}\n\nvar DomPlatform = /*#__PURE__*/function (_BasePlatform2) {\n _inherits(DomPlatform, _BasePlatform2);\n\n var _super10 = _createSuper(DomPlatform);\n\n function DomPlatform() {\n _classCallCheck(this, DomPlatform);\n\n return _super10.apply(this, arguments);\n }\n\n _createClass(DomPlatform, [{\n key: \"acquireContext\",\n value: function acquireContext(canvas, aspectRatio) {\n var context = canvas && canvas.getContext && canvas.getContext('2d');\n\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n\n return null;\n }\n }, {\n key: \"releaseContext\",\n value: function releaseContext(context) {\n var canvas = context.canvas;\n\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n\n var initial = canvas[EXPANDO_KEY].initial;\n ['height', 'width'].forEach(function (prop) {\n var value = initial[prop];\n\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n var style = initial.style || {};\n Object.keys(style).forEach(function (key) {\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n }, {\n key: \"addEventListener\",\n value: function addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n var proxies = chart.$proxies || (chart.$proxies = {});\n var handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n var handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n }, {\n key: \"removeEventListener\",\n value: function removeEventListener(chart, type) {\n var proxies = chart.$proxies || (chart.$proxies = {});\n var proxy = proxies[type];\n\n if (!proxy) {\n return;\n }\n\n var handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n var handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n }, {\n key: \"getDevicePixelRatio\",\n value: function getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n }, {\n key: \"getMaximumSize\",\n value: function getMaximumSize(canvas, width, height, aspectRatio) {\n return _getMaximumSize(canvas, width, height, aspectRatio);\n }\n }, {\n key: \"isAttached\",\n value: function isAttached(canvas) {\n var container = _getParentNode(canvas);\n\n return !!(container && container.isConnected);\n }\n }]);\n\n return DomPlatform;\n}(BasePlatform);\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n\n return DomPlatform;\n}\n\nvar Element = /*#__PURE__*/function () {\n function Element() {\n _classCallCheck(this, Element);\n\n this.x = undefined;\n this.y = undefined;\n this.active = false;\n this.options = undefined;\n this.$animations = undefined;\n }\n\n _createClass(Element, [{\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n var _this$getProps = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps.x,\n y = _this$getProps.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"hasValue\",\n value: function hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n }, {\n key: \"getProps\",\n value: function getProps(props, final) {\n var _this7 = this;\n\n var anims = this.$animations;\n\n if (!final || !anims) {\n return this;\n }\n\n var ret = {};\n props.forEach(function (prop) {\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : _this7[prop];\n });\n return ret;\n }\n }]);\n\n return Element;\n}();\n\nElement.defaults = {};\nElement.defaultRoutes = undefined;\nvar formatters = {\n values: function values(value) {\n return isArray(value) ? value : '' + value;\n },\n numeric: function numeric(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var locale = this.chart.options.locale;\n var notation;\n var delta = tickValue;\n\n if (ticks.length > 1) {\n var maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n\n delta = calculateDelta(tickValue, ticks);\n }\n\n var logDelta = log10(Math.abs(delta));\n var numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n var options = {\n notation: 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: function logarithmic(tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n\n var remain = tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n\n if (remain === 1 || remain === 2 || remain === 5) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n\n return '';\n }\n};\n\nfunction calculateDelta(tickValue, ticks) {\n var delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n\n return delta;\n}\n\nvar Ticks = {\n formatters: formatters\n};\ndefaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawBorder: true,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: function tickWidth(_ctx, options) {\n return options.lineWidth;\n },\n tickColor: function tickColor(_ctx, options) {\n return options.color;\n },\n offset: false,\n borderDash: [],\n borderDashOffset: 0.0,\n borderWidth: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n});\ndefaults.route('scale.ticks', 'color', '', 'color');\ndefaults.route('scale.grid', 'color', '', 'borderColor');\ndefaults.route('scale.grid', 'borderColor', '', 'borderColor');\ndefaults.route('scale.title', 'color', '', 'color');\ndefaults.describe('scale', {\n _fallback: false,\n _scriptable: function _scriptable(name) {\n return !name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser';\n },\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'tickBorderDash';\n }\n});\ndefaults.describe('scales', {\n _fallback: 'scale'\n});\ndefaults.describe('scale.ticks', {\n _scriptable: function _scriptable(name) {\n return name !== 'backdropPadding' && name !== 'callback';\n },\n _indexable: function _indexable(name) {\n return name !== 'backdropPadding';\n }\n});\n\nfunction autoSkip(scale, ticks) {\n var tickOpts = scale.options.ticks;\n var ticksLimit = tickOpts.maxTicksLimit || determineMaxTicks(scale);\n var majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n var numMajorIndices = majorIndices.length;\n var first = majorIndices[0];\n var last = majorIndices[numMajorIndices - 1];\n var newTicks = [];\n\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n\n var spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n\n if (numMajorIndices > 0) {\n var i, ilen;\n var avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n\n for (i = 0, ilen = numMajorIndices - 1; i < ilen; i++) {\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\n\nfunction determineMaxTicks(scale) {\n var offset = scale.options.offset;\n\n var tickLength = scale._tickSize();\n\n var maxScale = scale._length / tickLength + (offset ? 0 : 1);\n var maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n\nfunction calculateSpacing(majorIndices, ticks, ticksLimit) {\n var evenMajorSpacing = getEvenSpacing(majorIndices);\n var spacing = ticks.length / ticksLimit;\n\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n\n var factors = _factorize(evenMajorSpacing);\n\n for (var i = 0, ilen = factors.length - 1; i < ilen; i++) {\n var factor = factors[i];\n\n if (factor > spacing) {\n return factor;\n }\n }\n\n return Math.max(spacing, 1);\n}\n\nfunction getMajorIndices(ticks) {\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n if (ticks[i].major) {\n result.push(i);\n }\n }\n\n return result;\n}\n\nfunction skipMajors(ticks, newTicks, majorIndices, spacing) {\n var count = 0;\n var next = majorIndices[0];\n var i;\n spacing = Math.ceil(spacing);\n\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\nfunction skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n var start = valueOrDefault(majorStart, 0);\n var end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n var count = 0;\n var length, i, next;\n spacing = Math.ceil(spacing);\n\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n\n next = start;\n\n while (next < 0) {\n count++;\n next = Math.round(start + count * spacing);\n }\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\nfunction getEvenSpacing(arr) {\n var len = arr.length;\n var i, diff;\n\n if (len < 2) {\n return false;\n }\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\n return diff;\n}\n\nvar reverseAlign = function reverseAlign(align) {\n return align === 'left' ? 'right' : align === 'right' ? 'left' : align;\n};\n\nvar offsetFromEdge = function offsetFromEdge(scale, edge, offset) {\n return edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\n};\n\nfunction sample(arr, numItems) {\n var result = [];\n var increment = arr.length / numItems;\n var len = arr.length;\n var i = 0;\n\n for (; i < len; i += increment) {\n result.push(arr[Math.floor(i)]);\n }\n\n return result;\n}\n\nfunction getPixelForGridLine(scale, index, offsetGridLines) {\n var length = scale.ticks.length;\n var validIndex = Math.min(index, length - 1);\n var start = scale._startPixel;\n var end = scale._endPixel;\n var epsilon = 1e-6;\n var lineValue = scale.getPixelForTick(validIndex);\n var offset;\n\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\n lineValue += validIndex < index ? offset : -offset;\n\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n\n return lineValue;\n}\n\nfunction garbageCollect(caches, length) {\n each(caches, function (cache) {\n var gc = cache.gc;\n var gcLen = gc.length / 2;\n var i;\n\n if (gcLen > length) {\n for (i = 0; i < gcLen; ++i) {\n delete cache.data[gc[i]];\n }\n\n gc.splice(0, gcLen);\n }\n });\n}\n\nfunction getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n\nfunction getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n\n var font = toFont(options.font, fallback);\n var padding = toPadding(options.padding);\n var lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\n\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale: scale,\n type: 'scale'\n });\n}\n\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick: tick,\n index: index,\n type: 'tick'\n });\n}\n\nfunction titleAlign(align, position, reverse) {\n var ret = _toLeftRightCenter(align);\n\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n\n return ret;\n}\n\nfunction titleArgs(scale, offset, position, align) {\n var top = scale.top,\n left = scale.left,\n bottom = scale.bottom,\n right = scale.right,\n chart = scale.chart;\n var chartArea = chart.chartArea,\n scales = chart.scales;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n var height = bottom - top;\n var width = right - left;\n\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n\n if (isObject(position)) {\n var positionAxisID = Object.keys(position)[0];\n var 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\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n var _positionAxisID = Object.keys(position)[0];\n var _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\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n}\n\nvar Scale = /*#__PURE__*/function (_Element) {\n _inherits(Scale, _Element);\n\n var _super11 = _createSuper(Scale);\n\n function Scale(cfg) {\n var _this8;\n\n _classCallCheck(this, Scale);\n\n _this8 = _super11.call(this);\n _this8.id = cfg.id;\n _this8.type = cfg.type;\n _this8.options = undefined;\n _this8.ctx = cfg.ctx;\n _this8.chart = cfg.chart;\n _this8.top = undefined;\n _this8.bottom = undefined;\n _this8.left = undefined;\n _this8.right = undefined;\n _this8.width = undefined;\n _this8.height = undefined;\n _this8._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n _this8.maxWidth = undefined;\n _this8.maxHeight = undefined;\n _this8.paddingTop = undefined;\n _this8.paddingBottom = undefined;\n _this8.paddingLeft = undefined;\n _this8.paddingRight = undefined;\n _this8.axis = undefined;\n _this8.labelRotation = undefined;\n _this8.min = undefined;\n _this8.max = undefined;\n _this8._range = undefined;\n _this8.ticks = [];\n _this8._gridLineItems = null;\n _this8._labelItems = null;\n _this8._labelSizes = null;\n _this8._length = 0;\n _this8._maxLength = 0;\n _this8._longestTextCache = {};\n _this8._startPixel = undefined;\n _this8._endPixel = undefined;\n _this8._reversePixels = false;\n _this8._userMax = undefined;\n _this8._userMin = undefined;\n _this8._suggestedMax = undefined;\n _this8._suggestedMin = undefined;\n _this8._ticksLength = 0;\n _this8._borderValue = 0;\n _this8._cache = {};\n _this8._dataLimitsCached = false;\n _this8.$context = undefined;\n return _this8;\n }\n\n _createClass(Scale, [{\n key: \"init\",\n value: function 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 }, {\n key: \"parse\",\n value: function parse(raw, index) {\n return raw;\n }\n }, {\n key: \"getUserBounds\",\n value: function getUserBounds() {\n var _userMin = this._userMin,\n _userMax = this._userMax,\n _suggestedMin = this._suggestedMin,\n _suggestedMax = this._suggestedMax;\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 }, {\n key: \"getMinMax\",\n value: function getMinMax(canStack) {\n var _this$getUserBounds = this.getUserBounds(),\n min = _this$getUserBounds.min,\n max = _this$getUserBounds.max,\n minDefined = _this$getUserBounds.minDefined,\n maxDefined = _this$getUserBounds.maxDefined;\n\n var range;\n\n if (minDefined && maxDefined) {\n return {\n min: min,\n max: max\n };\n }\n\n var metas = this.getMatchingVisibleMetas();\n\n for (var i = 0, ilen = metas.length; i < ilen; ++i) {\n range = metas[i].controller.getMinMax(this, canStack);\n\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\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 }, {\n key: \"getPadding\",\n value: function 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 }, {\n key: \"getTicks\",\n value: function getTicks() {\n return this.ticks;\n }\n }, {\n key: \"getLabels\",\n value: function getLabels() {\n var data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n }, {\n key: \"beforeUpdate\",\n value: function beforeUpdate() {\n callback(this.options.beforeUpdate, [this]);\n }\n }, {\n key: \"update\",\n value: function update(maxWidth, maxHeight, margins) {\n var _this$options3 = this.options,\n beginAtZero = _this$options3.beginAtZero,\n grace = _this$options3.grace,\n tickOpts = _this$options3.ticks;\n var 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\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\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n var samplingEnabled = sampleSize < this.ticks.length;\n\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n }\n\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var reversePixels = this.options.reverse;\n var startPixel, endPixel;\n\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\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 }, {\n key: \"afterUpdate\",\n value: function afterUpdate() {\n callback(this.options.afterUpdate, [this]);\n }\n }, {\n key: \"beforeSetDimensions\",\n value: function beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [this]);\n }\n }, {\n key: \"setDimensions\",\n value: function 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\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n }, {\n key: \"afterSetDimensions\",\n value: function afterSetDimensions() {\n callback(this.options.afterSetDimensions, [this]);\n }\n }, {\n key: \"_callHooks\",\n value: function _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [this]);\n }\n }, {\n key: \"beforeDataLimits\",\n value: function beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {}\n }, {\n key: \"afterDataLimits\",\n value: function afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n }, {\n key: \"beforeBuildTicks\",\n value: function beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n return [];\n }\n }, {\n key: \"afterBuildTicks\",\n value: function afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n }, {\n key: \"beforeTickToLabelConversion\",\n value: function beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [this]);\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var tickOpts = this.options.ticks;\n var i, ilen, tick;\n\n for (i = 0, ilen = ticks.length; i < ilen; i++) {\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [tick.value, i, ticks], this);\n }\n }\n }, {\n key: \"afterTickToLabelConversion\",\n value: function afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [this]);\n }\n }, {\n key: \"beforeCalculateLabelRotation\",\n value: function beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [this]);\n }\n }, {\n key: \"calculateLabelRotation\",\n value: function calculateLabelRotation() {\n var options = this.options;\n var tickOpts = options.ticks;\n var numTicks = this.ticks.length;\n var minRotation = tickOpts.minRotation || 0;\n var maxRotation = tickOpts.maxRotation;\n var labelRotation = minRotation;\n var tickWidth, maxHeight, maxLabelDiagonal;\n\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n\n var labelSizes = this._getLabelSizes();\n\n var maxLabelWidth = labelSizes.widest.width;\n var maxLabelHeight = labelSizes.highest.height;\n\n var maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n\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\n this.labelRotation = labelRotation;\n }\n }, {\n key: \"afterCalculateLabelRotation\",\n value: function afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [this]);\n }\n }, {\n key: \"beforeFit\",\n value: function beforeFit() {\n callback(this.options.beforeFit, [this]);\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var minSize = {\n width: 0,\n height: 0\n };\n var chart = this.chart,\n _this$options4 = this.options,\n tickOpts = _this$options4.ticks,\n titleOpts = _this$options4.title,\n gridOpts = _this$options4.grid;\n\n var display = this._isVisible();\n\n var isHorizontal = this.isHorizontal();\n\n if (display) {\n var titleHeight = getTitleHeight(titleOpts, chart.options.font);\n\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\n if (tickOpts.display && this.ticks.length) {\n var _this$_getLabelSizes = this._getLabelSizes(),\n first = _this$_getLabelSizes.first,\n last = _this$_getLabelSizes.last,\n widest = _this$_getLabelSizes.widest,\n highest = _this$_getLabelSizes.highest;\n\n var tickPadding = tickOpts.padding * 2;\n var angleRadians = toRadians(this.labelRotation);\n var cos = Math.cos(angleRadians);\n var sin = Math.sin(angleRadians);\n\n if (isHorizontal) {\n var labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n var labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n\n this._calculatePadding(first, last, sin, cos);\n }\n }\n\n this._handleMargins();\n\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 }, {\n key: \"_calculatePadding\",\n value: function _calculatePadding(first, last, sin, cos) {\n var _this$options5 = this.options,\n _this$options5$ticks = _this$options5.ticks,\n align = _this$options5$ticks.align,\n padding = _this$options5$ticks.padding,\n position = _this$options5.position;\n var isRotated = this.labelRotation !== 0;\n var labelsBelowTicks = position !== 'top' && this.axis === 'x';\n\n if (this.isHorizontal()) {\n var offsetLeft = this.getPixelForTick(0) - this.left;\n var offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n var paddingLeft = 0;\n var paddingRight = 0;\n\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n\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 var paddingTop = last.height / 2;\n var paddingBottom = first.height / 2;\n\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\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n }, {\n key: \"_handleMargins\",\n value: function _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 }, {\n key: \"afterFit\",\n value: function afterFit() {\n callback(this.options.afterFit, [this]);\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var _this$options6 = this.options,\n axis = _this$options6.axis,\n position = _this$options6.position;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n }, {\n key: \"isFullSize\",\n value: function isFullSize() {\n return this.options.fullSize;\n }\n }, {\n key: \"_convertTicksToLabels\",\n value: function _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n var i, ilen;\n\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\n this.afterTickToLabelConversion();\n }\n }, {\n key: \"_getLabelSizes\",\n value: function _getLabelSizes() {\n var labelSizes = this._labelSizes;\n\n if (!labelSizes) {\n var sampleSize = this.options.ticks.sampleSize;\n var ticks = this.ticks;\n\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length);\n }\n\n return labelSizes;\n }\n }, {\n key: \"_computeLabelSizes\",\n value: function _computeLabelSizes(ticks, length) {\n var ctx = this.ctx,\n caches = this._longestTextCache;\n var widths = [];\n var heights = [];\n var widestLabelSize = 0;\n var highestLabelSize = 0;\n var i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n\n for (i = 0; i < length; ++i) {\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n\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\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\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\n garbageCollect(caches, length);\n var widest = widths.indexOf(widestLabelSize);\n var highest = heights.indexOf(highestLabelSize);\n\n var valueAt = function valueAt(idx) {\n return {\n width: widths[idx] || 0,\n height: heights[idx] || 0\n };\n };\n\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths: widths,\n heights: heights\n };\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value;\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value, index) {\n return NaN;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {}\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var ticks = this.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return this.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getPixelForDecimal\",\n value: function getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n\n var pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n }, {\n key: \"getDecimalForPixel\",\n value: function getDecimalForPixel(pixel) {\n var decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n }, {\n key: \"getBaseValue\",\n value: function getBaseValue() {\n var min = this.min,\n max = this.max;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n }, {\n key: \"getContext\",\n value: function getContext(index) {\n var ticks = this.ticks || [];\n\n if (index >= 0 && index < ticks.length) {\n var tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n }, {\n key: \"_tickSize\",\n value: function _tickSize() {\n var optionTicks = this.options.ticks;\n var rot = toRadians(this.labelRotation);\n var cos = Math.abs(Math.cos(rot));\n var sin = Math.abs(Math.sin(rot));\n\n var labelSizes = this._getLabelSizes();\n\n var padding = optionTicks.autoSkipPadding || 0;\n var w = labelSizes ? labelSizes.widest.width + padding : 0;\n var 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 }, {\n key: \"_isVisible\",\n value: function _isVisible() {\n var display = this.options.display;\n\n if (display !== 'auto') {\n return !!display;\n }\n\n return this.getMatchingVisibleMetas().length > 0;\n }\n }, {\n key: \"_computeGridLineItems\",\n value: function _computeGridLineItems(chartArea) {\n var axis = this.axis;\n var chart = this.chart;\n var options = this.options;\n var grid = options.grid,\n position = options.position;\n var offset = grid.offset;\n var isHorizontal = this.isHorizontal();\n var ticks = this.ticks;\n var ticksLength = ticks.length + (offset ? 1 : 0);\n var tl = getTickMarkLength(grid);\n var items = [];\n var borderOpts = grid.setContext(this.getContext());\n var axisWidth = borderOpts.drawBorder ? borderOpts.borderWidth : 0;\n var axisHalfWidth = axisWidth / 2;\n\n var alignBorderValue = function alignBorderValue(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n\n var borderValue, i, lineValue, alignedLineValue;\n var tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n\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 var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\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 var _positionAxisID2 = Object.keys(position)[0];\n var _value2 = position[_positionAxisID2];\n borderValue = alignBorderValue(this.chart.scales[_positionAxisID2].getPixelForValue(_value2));\n }\n\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n\n var limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n var step = Math.max(1, Math.ceil(ticksLength / limit));\n\n for (i = 0; i < ticksLength; i += step) {\n var optsAtIndex = grid.setContext(this.getContext(i));\n var lineWidth = optsAtIndex.lineWidth;\n var lineColor = optsAtIndex.color;\n var borderDash = grid.borderDash || [];\n var borderDashOffset = optsAtIndex.borderDashOffset;\n var tickWidth = optsAtIndex.tickWidth;\n var tickColor = optsAtIndex.tickColor;\n var tickBorderDash = optsAtIndex.tickBorderDash || [];\n var tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n\n if (lineValue === undefined) {\n continue;\n }\n\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n\n items.push({\n tx1: tx1,\n ty1: ty1,\n tx2: tx2,\n ty2: ty2,\n x1: x1,\n y1: y1,\n x2: x2,\n y2: y2,\n width: lineWidth,\n color: lineColor,\n borderDash: borderDash,\n borderDashOffset: borderDashOffset,\n tickWidth: tickWidth,\n tickColor: tickColor,\n tickBorderDash: tickBorderDash,\n tickBorderDashOffset: tickBorderDashOffset\n });\n }\n\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n }, {\n key: \"_computeLabelItems\",\n value: function _computeLabelItems(chartArea) {\n var axis = this.axis;\n var options = this.options;\n var position = options.position,\n optionTicks = options.ticks;\n var isHorizontal = this.isHorizontal();\n var ticks = this.ticks;\n var align = optionTicks.align,\n crossAlign = optionTicks.crossAlign,\n padding = optionTicks.padding,\n mirror = optionTicks.mirror;\n var tl = getTickMarkLength(options.grid);\n var tickAndPadding = tl + padding;\n var hTickAndPadding = mirror ? -padding : tickAndPadding;\n var rotation = -toRadians(this.labelRotation);\n var items = [];\n var i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n var textBaseline = 'middle';\n\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 var ret = this._getYAxisLabelAlignment(tl);\n\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n var _ret = this._getYAxisLabelAlignment(tl);\n\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 var positionAxisID = Object.keys(position)[0];\n var value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\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 var _positionAxisID3 = Object.keys(position)[0];\n var _value3 = position[_positionAxisID3];\n x = this.chart.scales[_positionAxisID3].getPixelForValue(_value3);\n }\n\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n\n var labelSizes = this._getLabelSizes();\n\n for (i = 0, ilen = ticks.length; i < ilen; ++i) {\n tick = ticks[i];\n label = tick.label;\n var 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 var halfCount = lineCount / 2;\n var color = optsAtIndex.color;\n var strokeColor = optsAtIndex.textStrokeColor;\n var strokeWidth = optsAtIndex.textStrokeWidth;\n\n if (isHorizontal) {\n x = pixel;\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\n if (mirror) {\n textOffset *= -1;\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n\n var backdrop = void 0;\n\n if (optsAtIndex.showLabelBackdrop) {\n var labelPadding = toPadding(optsAtIndex.backdropPadding);\n var height = labelSizes.heights[i];\n var width = labelSizes.widths[i];\n var top = y + textOffset - labelPadding.top;\n var left = x - labelPadding.left;\n\n switch (textBaseline) {\n case 'middle':\n top -= height / 2;\n break;\n\n case 'bottom':\n top -= height;\n break;\n }\n\n switch (textAlign) {\n case 'center':\n left -= width / 2;\n break;\n\n case 'right':\n left -= width;\n break;\n }\n\n backdrop = {\n left: left,\n top: top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n\n items.push({\n rotation: rotation,\n label: label,\n font: font,\n color: color,\n strokeColor: strokeColor,\n strokeWidth: strokeWidth,\n textOffset: textOffset,\n textAlign: textAlign,\n textBaseline: textBaseline,\n translation: [x, y],\n backdrop: backdrop\n });\n }\n\n return items;\n }\n }, {\n key: \"_getXAxisLabelAlignment\",\n value: function _getXAxisLabelAlignment() {\n var _this$options7 = this.options,\n position = _this$options7.position,\n ticks = _this$options7.ticks;\n var rotation = -toRadians(this.labelRotation);\n\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n\n var align = 'center';\n\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n }\n\n return align;\n }\n }, {\n key: \"_getYAxisLabelAlignment\",\n value: function _getYAxisLabelAlignment(tl) {\n var _this$options8 = this.options,\n position = _this$options8.position,\n _this$options8$ticks = _this$options8.ticks,\n crossAlign = _this$options8$ticks.crossAlign,\n mirror = _this$options8$ticks.mirror,\n padding = _this$options8$ticks.padding;\n\n var labelSizes = this._getLabelSizes();\n\n var tickAndPadding = tl + padding;\n var widest = labelSizes.widest.width;\n var textAlign;\n var x;\n\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n\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\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\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\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\n return {\n textAlign: textAlign,\n x: x\n };\n }\n }, {\n key: \"_computeLabelArea\",\n value: function _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n\n var chart = this.chart;\n var position = this.options.position;\n\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\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 }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var ctx = this.ctx,\n backgroundColor = this.options.backgroundColor,\n left = this.left,\n top = this.top,\n width = this.width,\n height = this.height;\n\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n }, {\n key: \"getLineWidthForValue\",\n value: function getLineWidthForValue(value) {\n var grid = this.options.grid;\n\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n\n var ticks = this.ticks;\n var index = ticks.findIndex(function (t) {\n return t.value === value;\n });\n\n if (index >= 0) {\n var opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n\n return 0;\n }\n }, {\n key: \"drawGrid\",\n value: function drawGrid(chartArea) {\n var grid = this.options.grid;\n var ctx = this.ctx;\n\n var items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n\n var i, ilen;\n\n var drawLine = function drawLine(p1, p2, style) {\n if (!style.width || !style.color) {\n return;\n }\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\n if (grid.display) {\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n\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\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 }, {\n key: \"drawBorder\",\n value: function drawBorder() {\n var chart = this.chart,\n ctx = this.ctx,\n grid = this.options.grid;\n var borderOpts = grid.setContext(this.getContext());\n var axisWidth = grid.drawBorder ? borderOpts.borderWidth : 0;\n\n if (!axisWidth) {\n return;\n }\n\n var lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n var borderValue = this._borderValue;\n var x1, x2, y1, y2;\n\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\n ctx.save();\n ctx.lineWidth = borderOpts.borderWidth;\n ctx.strokeStyle = borderOpts.borderColor;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n }, {\n key: \"drawLabels\",\n value: function drawLabels(chartArea) {\n var optionTicks = this.options.ticks;\n\n if (!optionTicks.display) {\n return;\n }\n\n var ctx = this.ctx;\n\n var area = this._computeLabelArea();\n\n if (area) {\n clipArea(ctx, area);\n }\n\n var items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n\n var i, ilen;\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n var item = items[i];\n var tickFont = item.font;\n var label = item.label;\n\n if (item.backdrop) {\n ctx.fillStyle = item.backdrop.color;\n ctx.fillRect(item.backdrop.left, item.backdrop.top, item.backdrop.width, item.backdrop.height);\n }\n\n var y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, item);\n }\n\n if (area) {\n unclipArea(ctx);\n }\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var ctx = this.ctx,\n _this$options9 = this.options,\n position = _this$options9.position,\n title = _this$options9.title,\n reverse = _this$options9.reverse;\n\n if (!title.display) {\n return;\n }\n\n var font = toFont(title.font);\n var padding = toPadding(title.padding);\n var align = title.align;\n var offset = font.lineHeight / 2;\n\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n\n var _titleArgs = titleArgs(this, offset, position, align),\n titleX = _titleArgs.titleX,\n titleY = _titleArgs.titleY,\n maxWidth = _titleArgs.maxWidth,\n rotation = _titleArgs.rotation;\n\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }, {\n key: \"draw\",\n value: function draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n }, {\n key: \"_layers\",\n value: function _layers() {\n var _this9 = this;\n\n var opts = this.options;\n var tz = opts.ticks && opts.ticks.z || 0;\n var gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [{\n z: tz,\n draw: function draw(chartArea) {\n _this9.draw(chartArea);\n }\n }];\n }\n\n return [{\n z: gz,\n draw: function draw(chartArea) {\n _this9.drawBackground();\n\n _this9.drawGrid(chartArea);\n\n _this9.drawTitle();\n }\n }, {\n z: gz + 1,\n draw: function draw() {\n _this9.drawBorder();\n }\n }, {\n z: tz,\n draw: function draw(chartArea) {\n _this9.drawLabels(chartArea);\n }\n }];\n }\n }, {\n key: \"getMatchingVisibleMetas\",\n value: function getMatchingVisibleMetas(type) {\n var metas = this.chart.getSortedVisibleDatasetMetas();\n var axisID = this.axis + 'AxisID';\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n var meta = metas[i];\n\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"_resolveTickFontOptions\",\n value: function _resolveTickFontOptions(index) {\n var opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n }, {\n key: \"_maxDigits\",\n value: function _maxDigits() {\n var fontSize = this._resolveTickFontOptions(0).lineHeight;\n\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n }]);\n\n return Scale;\n}(Element);\n\nvar TypedRegistry = /*#__PURE__*/function () {\n function TypedRegistry(type, scope, override) {\n _classCallCheck(this, TypedRegistry);\n\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n\n _createClass(TypedRegistry, [{\n key: \"isForType\",\n value: function isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n }, {\n key: \"register\",\n value: function register(item) {\n var proto = Object.getPrototypeOf(item);\n var parentScope;\n\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n\n var items = this.items;\n var id = item.id;\n var scope = this.scope + '.' + id;\n\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n\n if (id in items) {\n return scope;\n }\n\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n\n return scope;\n }\n }, {\n key: \"get\",\n value: function get(id) {\n return this.items[id];\n }\n }, {\n key: \"unregister\",\n value: function unregister(item) {\n var items = this.items;\n var id = item.id;\n var scope = this.scope;\n\n if (id in items) {\n delete items[id];\n }\n\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n }]);\n\n return TypedRegistry;\n}();\n\nfunction registerDefaults(item, scope, parentScope) {\n var itemDefaults = merge(Object.create(null), [parentScope ? defaults.get(parentScope) : {}, defaults.get(scope), item.defaults]);\n defaults.set(scope, itemDefaults);\n\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\n\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach(function (property) {\n var propertyParts = property.split('.');\n var sourceName = propertyParts.pop();\n var sourceScope = [scope].concat(propertyParts).join('.');\n var parts = routes[property].split('.');\n var targetName = parts.pop();\n var targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\n\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nvar Registry = /*#__PURE__*/function () {\n function Registry() {\n _classCallCheck(this, Registry);\n\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [this.controllers, this.scales, this.elements];\n }\n\n _createClass(Registry, [{\n key: \"add\",\n value: function add() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n this._each('register', args);\n }\n }, {\n key: \"remove\",\n value: function remove() {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n this._each('unregister', args);\n }\n }, {\n key: \"addControllers\",\n value: function addControllers() {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n this._each('register', args, this.controllers);\n }\n }, {\n key: \"addElements\",\n value: function addElements() {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n this._each('register', args, this.elements);\n }\n }, {\n key: \"addPlugins\",\n value: function addPlugins() {\n for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {\n args[_key5] = arguments[_key5];\n }\n\n this._each('register', args, this.plugins);\n }\n }, {\n key: \"addScales\",\n value: function addScales() {\n for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {\n args[_key6] = arguments[_key6];\n }\n\n this._each('register', args, this.scales);\n }\n }, {\n key: \"getController\",\n value: function getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n }, {\n key: \"getElement\",\n value: function getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n }, {\n key: \"getPlugin\",\n value: function getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n }, {\n key: \"getScale\",\n value: function getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n }, {\n key: \"removeControllers\",\n value: function removeControllers() {\n for (var _len7 = arguments.length, args = new Array(_len7), _key7 = 0; _key7 < _len7; _key7++) {\n args[_key7] = arguments[_key7];\n }\n\n this._each('unregister', args, this.controllers);\n }\n }, {\n key: \"removeElements\",\n value: function removeElements() {\n for (var _len8 = arguments.length, args = new Array(_len8), _key8 = 0; _key8 < _len8; _key8++) {\n args[_key8] = arguments[_key8];\n }\n\n this._each('unregister', args, this.elements);\n }\n }, {\n key: \"removePlugins\",\n value: function removePlugins() {\n for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {\n args[_key9] = arguments[_key9];\n }\n\n this._each('unregister', args, this.plugins);\n }\n }, {\n key: \"removeScales\",\n value: function removeScales() {\n for (var _len10 = arguments.length, args = new Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {\n args[_key10] = arguments[_key10];\n }\n\n this._each('unregister', args, this.scales);\n }\n }, {\n key: \"_each\",\n value: function _each(method, args, typedRegistry) {\n var _this10 = this;\n\n _toConsumableArray(args).forEach(function (arg) {\n var reg = typedRegistry || _this10._getRegistryForType(arg);\n\n if (typedRegistry || reg.isForType(arg) || reg === _this10.plugins && arg.id) {\n _this10._exec(method, reg, arg);\n } else {\n each(arg, function (item) {\n var itemReg = typedRegistry || _this10._getRegistryForType(item);\n\n _this10._exec(method, itemReg, item);\n });\n }\n });\n }\n }, {\n key: \"_exec\",\n value: function _exec(method, registry, component) {\n var camelMethod = _capitalize(method);\n\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n }, {\n key: \"_getRegistryForType\",\n value: function _getRegistryForType(type) {\n for (var i = 0; i < this._typedRegistries.length; i++) {\n var reg = this._typedRegistries[i];\n\n if (reg.isForType(type)) {\n return reg;\n }\n }\n\n return this.plugins;\n }\n }, {\n key: \"_get\",\n value: function _get(id, typedRegistry, type) {\n var item = typedRegistry.get(id);\n\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n\n return item;\n }\n }]);\n\n return Registry;\n}();\n\nvar registry = new Registry();\n\nvar PluginService = /*#__PURE__*/function () {\n function PluginService() {\n _classCallCheck(this, PluginService);\n\n this._init = [];\n }\n\n _createClass(PluginService, [{\n key: \"notify\",\n value: function notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n\n this._notify(this._init, chart, 'install');\n }\n\n var descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n\n var result = this._notify(descriptors, chart, hook, args);\n\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n\n this._notify(this._init, chart, 'uninstall');\n }\n\n return result;\n }\n }, {\n key: \"_notify\",\n value: function _notify(descriptors, chart, hook, args) {\n args = args || {};\n\n var _iterator10 = _createForOfIteratorHelper(descriptors),\n _step10;\n\n try {\n for (_iterator10.s(); !(_step10 = _iterator10.n()).done;) {\n var descriptor = _step10.value;\n var plugin = descriptor.plugin;\n var method = plugin[hook];\n var params = [chart, args, descriptor.options];\n\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n } catch (err) {\n _iterator10.e(err);\n } finally {\n _iterator10.f();\n }\n\n return true;\n }\n }, {\n key: \"invalidate\",\n value: function invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n }, {\n key: \"_descriptors\",\n value: function _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n\n var descriptors = this._cache = this._createDescriptors(chart);\n\n this._notifyStateChanges(chart);\n\n return descriptors;\n }\n }, {\n key: \"_createDescriptors\",\n value: function _createDescriptors(chart, all) {\n var config = chart && chart.config;\n var options = valueOrDefault(config.options && config.options.plugins, {});\n var plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n }, {\n key: \"_notifyStateChanges\",\n value: function _notifyStateChanges(chart) {\n var previousDescriptors = this._oldCache || [];\n var descriptors = this._cache;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.plugin.id === y.plugin.id;\n });\n });\n };\n\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n }]);\n\n return PluginService;\n}();\n\nfunction allPlugins(config) {\n var plugins = [];\n var keys = Object.keys(registry.plugins.items);\n\n for (var i = 0; i < keys.length; i++) {\n plugins.push(registry.getPlugin(keys[i]));\n }\n\n var local = config.plugins || [];\n\n for (var _i = 0; _i < local.length; _i++) {\n var plugin = local[_i];\n\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n }\n }\n\n return plugins;\n}\n\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n\n if (options === true) {\n return {};\n }\n\n return options;\n}\n\nfunction createDescriptors(chart, plugins, options, all) {\n var result = [];\n var context = chart.getContext();\n\n for (var i = 0; i < plugins.length; i++) {\n var plugin = plugins[i];\n var id = plugin.id;\n var opts = getOpts(options[id], all);\n\n if (opts === null) {\n continue;\n }\n\n result.push({\n plugin: plugin,\n options: pluginOpts(chart.config, plugin, opts, context)\n });\n }\n\n return result;\n}\n\nfunction pluginOpts(config, plugin, opts, context) {\n var keys = config.pluginScopeKeys(plugin);\n var scopes = config.getOptionScopes(opts, keys);\n return config.createResolver(scopes, context, [''], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n var datasetDefaults = defaults.datasets[type] || {};\n var datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\n\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n var axis = id;\n\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n\n return axis;\n}\n\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\n\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\n\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y') {\n return id;\n }\n\n return scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.charAt(0).toLowerCase();\n}\n\nfunction mergeScaleConfig(config, options) {\n var chartDefaults = overrides[config.type] || {\n scales: {}\n };\n var configScales = options.scales || {};\n var chartIndexAxis = getIndexAxis(config.type, options);\n var firstIDs = Object.create(null);\n var scales = Object.create(null);\n Object.keys(configScales).forEach(function (id) {\n var scaleConf = configScales[id];\n\n if (!isObject(scaleConf)) {\n return console.error(\"Invalid scale configuration for scale: \".concat(id));\n }\n\n if (scaleConf._proxy) {\n return console.warn(\"Ignoring resolver passed as options for scale: \".concat(id));\n }\n\n var axis = determineAxis(id, scaleConf);\n var defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n var defaultScaleOptions = chartDefaults.scales || {};\n firstIDs[axis] = firstIDs[axis] || id;\n scales[id] = mergeIf(Object.create(null), [{\n axis: axis\n }, scaleConf, defaultScaleOptions[axis], defaultScaleOptions[defaultId]]);\n });\n config.data.datasets.forEach(function (dataset) {\n var type = dataset.type || config.type;\n var indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n var datasetDefaults = overrides[type] || {};\n var defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach(function (defaultID) {\n var axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n var id = dataset[axis + 'AxisID'] || firstIDs[axis] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [{\n axis: axis\n }, configScales[id], defaultScaleOptions[defaultID]]);\n });\n });\n Object.keys(scales).forEach(function (key) {\n var scale = scales[key];\n mergeIf(scale, [defaults.scales[scale.type], defaults.scale]);\n });\n return scales;\n}\n\nfunction initOptions(config) {\n var options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\n\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\n\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\n\nvar keyCache = new Map();\nvar keysCached = new Set();\n\nfunction cachedKeys(cacheKey, generate) {\n var keys = keyCache.get(cacheKey);\n\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n\n return keys;\n}\n\nvar addIfFound = function addIfFound(set, obj, key) {\n var opts = resolveObjectKey(obj, key);\n\n if (opts !== undefined) {\n set.add(opts);\n }\n};\n\nvar Config = /*#__PURE__*/function () {\n function Config(config) {\n _classCallCheck(this, Config);\n\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n\n _createClass(Config, [{\n key: \"platform\",\n get: function get() {\n return this._config.platform;\n }\n }, {\n key: \"type\",\n get: function get() {\n return this._config.type;\n },\n set: function set(type) {\n this._config.type = type;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this._config.data;\n },\n set: function set(data) {\n this._config.data = initData(data);\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._config.options;\n },\n set: function set(options) {\n this._config.options = options;\n }\n }, {\n key: \"plugins\",\n get: function get() {\n return this._config.plugins;\n }\n }, {\n key: \"update\",\n value: function update() {\n var config = this._config;\n this.clearCache();\n initOptions(config);\n }\n }, {\n key: \"clearCache\",\n value: function clearCache() {\n this._scopeCache.clear();\n\n this._resolverCache.clear();\n }\n }, {\n key: \"datasetScopeKeys\",\n value: function datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, function () {\n return [[\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetAnimationScopeKeys\",\n value: function datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(\"\".concat(datasetType, \".transition.\").concat(transition), function () {\n return [[\"datasets.\".concat(datasetType, \".transitions.\").concat(transition), \"transitions.\".concat(transition)], [\"datasets.\".concat(datasetType), '']];\n });\n }\n }, {\n key: \"datasetElementScopeKeys\",\n value: function datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(\"\".concat(datasetType, \"-\").concat(elementType), function () {\n return [[\"datasets.\".concat(datasetType, \".elements.\").concat(elementType), \"datasets.\".concat(datasetType), \"elements.\".concat(elementType), '']];\n });\n }\n }, {\n key: \"pluginScopeKeys\",\n value: function pluginScopeKeys(plugin) {\n var id = plugin.id;\n var type = this.type;\n return cachedKeys(\"\".concat(type, \"-plugin-\").concat(id), function () {\n return [[\"plugins.\".concat(id)].concat(_toConsumableArray(plugin.additionalOptionScopes || []))];\n });\n }\n }, {\n key: \"_cachedScopes\",\n value: function _cachedScopes(mainScope, resetCache) {\n var _scopeCache = this._scopeCache;\n\n var cache = _scopeCache.get(mainScope);\n\n if (!cache || resetCache) {\n cache = new Map();\n\n _scopeCache.set(mainScope, cache);\n }\n\n return cache;\n }\n }, {\n key: \"getOptionScopes\",\n value: function getOptionScopes(mainScope, keyLists, resetCache) {\n var options = this.options,\n type = this.type;\n\n var cache = this._cachedScopes(mainScope, resetCache);\n\n var cached = cache.get(keyLists);\n\n if (cached) {\n return cached;\n }\n\n var scopes = new Set();\n keyLists.forEach(function (keys) {\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach(function (key) {\n return addIfFound(scopes, mainScope, key);\n });\n }\n\n keys.forEach(function (key) {\n return addIfFound(scopes, options, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, overrides[type] || {}, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, defaults, key);\n });\n keys.forEach(function (key) {\n return addIfFound(scopes, descriptors, key);\n });\n });\n var array = Array.from(scopes);\n\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n\n return array;\n }\n }, {\n key: \"chartOptionScopes\",\n value: function chartOptionScopes() {\n var options = this.options,\n type = this.type;\n return [options, overrides[type] || {}, defaults.datasets[type] || {}, {\n type: type\n }, defaults, descriptors];\n }\n }, {\n key: \"resolveNamedOptions\",\n value: function resolveNamedOptions(scopes, names, context) {\n var prefixes = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [''];\n var result = {\n $shared: true\n };\n\n var _getResolver = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver.resolver,\n subPrefixes = _getResolver.subPrefixes;\n\n var options = resolver;\n\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n var subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n\n var _iterator11 = _createForOfIteratorHelper(names),\n _step11;\n\n try {\n for (_iterator11.s(); !(_step11 = _iterator11.n()).done;) {\n var prop = _step11.value;\n result[prop] = options[prop];\n }\n } catch (err) {\n _iterator11.e(err);\n } finally {\n _iterator11.f();\n }\n\n return result;\n }\n }, {\n key: \"createResolver\",\n value: function createResolver(scopes, context) {\n var prefixes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [''];\n var descriptorDefaults = arguments.length > 3 ? arguments[3] : undefined;\n\n var _getResolver2 = getResolver(this._resolverCache, scopes, prefixes),\n resolver = _getResolver2.resolver;\n\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n }]);\n\n return Config;\n}();\n\nfunction getResolver(resolverCache, scopes, prefixes) {\n var cache = resolverCache.get(scopes);\n\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n\n var cacheKey = prefixes.join();\n var cached = cache.get(cacheKey);\n\n if (!cached) {\n var resolver = _createResolver(scopes, prefixes);\n\n cached = {\n resolver: resolver,\n subPrefixes: prefixes.filter(function (p) {\n return !p.toLowerCase().includes('hover');\n })\n };\n cache.set(cacheKey, cached);\n }\n\n return cached;\n}\n\nvar hasFunction = function hasFunction(value) {\n return isObject(value) && Object.getOwnPropertyNames(value).reduce(function (acc, key) {\n return acc || isFunction(value[key]);\n }, false);\n};\n\nfunction needContext(proxy, names) {\n var _descriptors2 = _descriptors(proxy),\n isScriptable = _descriptors2.isScriptable,\n isIndexable = _descriptors2.isIndexable;\n\n var _iterator12 = _createForOfIteratorHelper(names),\n _step12;\n\n try {\n for (_iterator12.s(); !(_step12 = _iterator12.n()).done;) {\n var prop = _step12.value;\n var scriptable = isScriptable(prop);\n var indexable = isIndexable(prop);\n var value = (indexable || scriptable) && proxy[prop];\n\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n } catch (err) {\n _iterator12.e(err);\n } finally {\n _iterator12.f();\n }\n\n return false;\n}\n\nvar version = \"3.7.0\";\nvar KNOWN_POSITIONS = ['top', 'bottom', 'left', 'right', 'chartArea'];\n\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\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}\n\nfunction onAnimationsComplete(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [context], chart);\n}\n\nfunction onAnimationProgress(context) {\n var chart = context.chart;\n var animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [context], chart);\n}\n\nfunction getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n\n if (item && item.canvas) {\n item = item.canvas;\n }\n\n return item;\n}\n\nvar instances = {};\n\nvar getChart = function getChart(key) {\n var canvas = getCanvas(key);\n return Object.values(instances).filter(function (c) {\n return c.canvas === canvas;\n }).pop();\n};\n\nfunction moveNumericKeys(obj, start, move) {\n var keys = Object.keys(obj);\n\n for (var _i2 = 0, _keys = keys; _i2 < _keys.length; _i2++) {\n var key = _keys[_i2];\n var intKey = +key;\n\n if (intKey >= start) {\n var value = obj[key];\n delete obj[key];\n\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n\nfunction determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n\n if (isClick) {\n return lastEvent;\n }\n\n return e;\n}\n\nvar Chart = /*#__PURE__*/function () {\n function Chart(item, userConfig) {\n var _this11 = this;\n\n _classCallCheck(this, Chart);\n\n var config = this.config = new Config(userConfig);\n var initialCanvas = getCanvas(item);\n var existingChart = getChart(initialCanvas);\n\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas can be reused.');\n }\n\n var options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n var context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n var canvas = context && context.canvas;\n var height = canvas && canvas.height;\n var 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(function (mode) {\n return _this11.update(mode);\n }, options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n\n this._initialize();\n\n if (this.attached) {\n this.update();\n }\n }\n\n _createClass(Chart, [{\n key: \"aspectRatio\",\n get: function get() {\n var _this$options10 = this.options,\n aspectRatio = _this$options10.aspectRatio,\n maintainAspectRatio = _this$options10.maintainAspectRatio,\n width = this.width,\n height = this.height,\n _aspectRatio = this._aspectRatio;\n\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n\n return height ? width / height : null;\n }\n }, {\n key: \"data\",\n get: function get() {\n return this.config.data;\n },\n set: function set(data) {\n this.config.data = data;\n }\n }, {\n key: \"options\",\n get: function get() {\n return this._options;\n },\n set: function set(options) {\n this.config.options = options;\n }\n }, {\n key: \"_initialize\",\n value: function _initialize() {\n this.notifyPlugins('beforeInit');\n\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n }, {\n key: \"clear\",\n value: function clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n }, {\n key: \"stop\",\n value: function stop() {\n animator.stop(this);\n return this;\n }\n }, {\n key: \"resize\",\n value: function resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width: width,\n height: height\n };\n }\n }\n }, {\n key: \"_resize\",\n value: function _resize(width, height) {\n var options = this.options;\n var canvas = this.canvas;\n var aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n var newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n var newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n var mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [this, newSize], this);\n\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n }, {\n key: \"ensureScalesHaveIDs\",\n value: function ensureScalesHaveIDs() {\n var options = this.options;\n var scalesOptions = options.scales || {};\n each(scalesOptions, function (axisOptions, axisID) {\n axisOptions.id = axisID;\n });\n }\n }, {\n key: \"buildOrUpdateScales\",\n value: function buildOrUpdateScales() {\n var _this12 = this;\n\n var options = this.options;\n var scaleOpts = options.scales;\n var scales = this.scales;\n var updated = Object.keys(scales).reduce(function (obj, id) {\n obj[id] = false;\n return obj;\n }, {});\n var items = [];\n\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map(function (id) {\n var scaleOptions = scaleOpts[id];\n var axis = determineAxis(id, scaleOptions);\n var isRadial = axis === 'r';\n var isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n\n each(items, function (item) {\n var scaleOptions = item.options;\n var id = scaleOptions.id;\n var axis = determineAxis(id, scaleOptions);\n var scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n\n updated[id] = true;\n var scale = null;\n\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n var scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id: id,\n type: scaleType,\n ctx: _this12.ctx,\n chart: _this12\n });\n scales[scale.id] = scale;\n }\n\n scale.init(scaleOptions, options);\n });\n each(updated, function (hasUpdated, id) {\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, function (scale) {\n layouts.configure(_this12, scale, scale.options);\n layouts.addBox(_this12, scale);\n });\n }\n }, {\n key: \"_updateMetasets\",\n value: function _updateMetasets() {\n var metasets = this._metasets;\n var numData = this.data.datasets.length;\n var numMeta = metasets.length;\n metasets.sort(function (a, b) {\n return a.index - b.index;\n });\n\n if (numMeta > numData) {\n for (var i = numData; i < numMeta; ++i) {\n this._destroyDatasetMeta(i);\n }\n\n metasets.splice(numData, numMeta - numData);\n }\n\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n }, {\n key: \"_removeUnreferencedMetasets\",\n value: function _removeUnreferencedMetasets() {\n var _this13 = this;\n\n var metasets = this._metasets,\n datasets = this.data.datasets;\n\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n\n metasets.forEach(function (meta, index) {\n if (datasets.filter(function (x) {\n return x === meta._dataset;\n }).length === 0) {\n _this13._destroyDatasetMeta(index);\n }\n });\n }\n }, {\n key: \"buildOrUpdateControllers\",\n value: function buildOrUpdateControllers() {\n var newControllers = [];\n var datasets = this.data.datasets;\n var i, ilen;\n\n this._removeUnreferencedMetasets();\n\n for (i = 0, ilen = datasets.length; i < ilen; i++) {\n var dataset = datasets[i];\n var meta = this.getDatasetMeta(i);\n var type = dataset.type || this.config.type;\n\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n\n meta = this.getDatasetMeta(i);\n }\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\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n var ControllerClass = registry.getController(type);\n var _defaults$datasets$ty = defaults.datasets[type],\n datasetElementType = _defaults$datasets$ty.datasetElementType,\n dataElementType = _defaults$datasets$ty.dataElementType;\n Object.assign(ControllerClass.prototype, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n\n this._updateMetasets();\n\n return newControllers;\n }\n }, {\n key: \"_resetElements\",\n value: function _resetElements() {\n var _this14 = this;\n\n each(this.data.datasets, function (dataset, datasetIndex) {\n _this14.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n }, {\n key: \"reset\",\n value: function reset() {\n this._resetElements();\n\n this.notifyPlugins('reset');\n }\n }, {\n key: \"update\",\n value: function update(mode) {\n var config = this.config;\n config.update();\n var options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n var animsDisabled = this._animationsDisabled = !options.animation;\n\n this._updateScales();\n\n this._checkEventBindings();\n\n this._updateHiddenIndices();\n\n this._plugins.invalidate();\n\n if (this.notifyPlugins('beforeUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n var newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n var minPadding = 0;\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; i++) {\n var _this$getDatasetMeta = this.getDatasetMeta(i),\n controller = _this$getDatasetMeta.controller;\n\n var reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n\n this._updateLayout(minPadding);\n\n if (!animsDisabled) {\n each(newControllers, function (controller) {\n controller.reset();\n });\n }\n\n this._updateDatasets(mode);\n\n this.notifyPlugins('afterUpdate', {\n mode: mode\n });\n\n this._layers.sort(compare2Level('z', '_idx'));\n\n var _active = this._active,\n _lastEvent = this._lastEvent;\n\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n\n this.render();\n }\n }, {\n key: \"_updateScales\",\n value: function _updateScales() {\n var _this15 = this;\n\n each(this.scales, function (scale) {\n layouts.removeBox(_this15, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n }, {\n key: \"_checkEventBindings\",\n value: function _checkEventBindings() {\n var options = this.options;\n var existingEvents = new Set(Object.keys(this._listeners));\n var newEvents = new Set(options.events);\n\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n }, {\n key: \"_updateHiddenIndices\",\n value: function _updateHiddenIndices() {\n var _hiddenIndices = this._hiddenIndices;\n var changes = this._getUniformDataChanges() || [];\n\n var _iterator13 = _createForOfIteratorHelper(changes),\n _step13;\n\n try {\n for (_iterator13.s(); !(_step13 = _iterator13.n()).done;) {\n var _step13$value = _step13.value,\n method = _step13$value.method,\n start = _step13$value.start,\n count = _step13$value.count;\n var move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n } catch (err) {\n _iterator13.e(err);\n } finally {\n _iterator13.f();\n }\n }\n }, {\n key: \"_getUniformDataChanges\",\n value: function _getUniformDataChanges() {\n var _dataChanges = this._dataChanges;\n\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n\n this._dataChanges = [];\n var datasetCount = this.data.datasets.length;\n\n var makeSet = function makeSet(idx) {\n return new Set(_dataChanges.filter(function (c) {\n return c[0] === idx;\n }).map(function (c, i) {\n return i + ',' + c.splice(1).join(',');\n }));\n };\n\n var changeSet = makeSet(0);\n\n for (var i = 1; i < datasetCount; i++) {\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n\n return Array.from(changeSet).map(function (c) {\n return c.split(',');\n }).map(function (a) {\n return {\n method: a[1],\n start: +a[2],\n count: +a[3]\n };\n });\n }\n }, {\n key: \"_updateLayout\",\n value: function _updateLayout(minPadding) {\n var _this16 = this;\n\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n\n layouts.update(this, this.width, this.height, minPadding);\n var area = this.chartArea;\n var noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, function (box) {\n var _this16$_layers;\n\n if (noArea && box.position === 'chartArea') {\n return;\n }\n\n if (box.configure) {\n box.configure();\n }\n\n (_this16$_layers = _this16._layers).push.apply(_this16$_layers, _toConsumableArray(box._layers()));\n }, this);\n\n this._layers.forEach(function (item, index) {\n item._idx = index;\n });\n\n this.notifyPlugins('afterLayout');\n }\n }, {\n key: \"_updateDatasets\",\n value: function _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode: mode,\n cancelable: true\n }) === false) {\n return;\n }\n\n for (var i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this.getDatasetMeta(i).controller.configure();\n }\n\n for (var _i3 = 0, _ilen = this.data.datasets.length; _i3 < _ilen; ++_i3) {\n this._updateDataset(_i3, isFunction(mode) ? mode({\n datasetIndex: _i3\n }) : mode);\n }\n\n this.notifyPlugins('afterDatasetsUpdate', {\n mode: mode\n });\n }\n }, {\n key: \"_updateDataset\",\n value: function _updateDataset(index, mode) {\n var meta = this.getDatasetMeta(index);\n var args = {\n meta: meta,\n index: index,\n mode: mode,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n\n meta.controller._update(mode);\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n }, {\n key: \"render\",\n value: function render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\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 }, {\n key: \"draw\",\n value: function draw() {\n var i;\n\n if (this._resizeBeforeDraw) {\n var _this$_resizeBeforeDr = this._resizeBeforeDraw,\n width = _this$_resizeBeforeDr.width,\n height = _this$_resizeBeforeDr.height;\n\n this._resize(width, height);\n\n this._resizeBeforeDraw = null;\n }\n\n this.clear();\n\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var layers = this._layers;\n\n for (i = 0; i < layers.length && layers[i].z <= 0; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this._drawDatasets();\n\n for (; i < layers.length; ++i) {\n layers[i].draw(this.chartArea);\n }\n\n this.notifyPlugins('afterDraw');\n }\n }, {\n key: \"_getSortedDatasetMetas\",\n value: function _getSortedDatasetMetas(filterVisible) {\n var metasets = this._sortedMetasets;\n var result = [];\n var i, ilen;\n\n for (i = 0, ilen = metasets.length; i < ilen; ++i) {\n var meta = metasets[i];\n\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n\n return result;\n }\n }, {\n key: \"getSortedVisibleDatasetMetas\",\n value: function getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n }, {\n key: \"_drawDatasets\",\n value: function _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n\n var metasets = this.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n this._drawDataset(metasets[i]);\n }\n\n this.notifyPlugins('afterDatasetsDraw');\n }\n }, {\n key: \"_drawDataset\",\n value: function _drawDataset(meta) {\n var ctx = this.ctx;\n var clip = meta._clip;\n var useClip = !clip.disabled;\n var area = this.chartArea;\n var args = {\n meta: meta,\n index: meta.index,\n cancelable: true\n };\n\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\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\n meta.controller.draw();\n\n if (useClip) {\n unclipArea(ctx);\n }\n\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n }, {\n key: \"getElementsAtEventForMode\",\n value: function getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n var method = Interaction.modes[mode];\n\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n\n return [];\n }\n }, {\n key: \"getDatasetMeta\",\n value: function getDatasetMeta(datasetIndex) {\n var dataset = this.data.datasets[datasetIndex];\n var metasets = this._metasets;\n var meta = metasets.filter(function (x) {\n return x && x._dataset === dataset;\n }).pop();\n\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\n return meta;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n }, {\n key: \"getVisibleDatasetCount\",\n value: function getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n }, {\n key: \"isDatasetVisible\",\n value: function isDatasetVisible(datasetIndex) {\n var dataset = this.data.datasets[datasetIndex];\n\n if (!dataset) {\n return false;\n }\n\n var meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n }, {\n key: \"setDatasetVisibility\",\n value: function setDatasetVisibility(datasetIndex, visible) {\n var meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n }, {\n key: \"toggleDataVisibility\",\n value: function toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n }, {\n key: \"getDataVisibility\",\n value: function getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n }, {\n key: \"_updateVisibility\",\n value: function _updateVisibility(datasetIndex, dataIndex, visible) {\n var mode = visible ? 'show' : 'hide';\n var meta = this.getDatasetMeta(datasetIndex);\n\n var anims = meta.controller._resolveAnimations(undefined, mode);\n\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: visible\n });\n this.update(function (ctx) {\n return ctx.datasetIndex === datasetIndex ? mode : undefined;\n });\n }\n }\n }, {\n key: \"hide\",\n value: function hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n }, {\n key: \"show\",\n value: function show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n }, {\n key: \"_destroyDatasetMeta\",\n value: function _destroyDatasetMeta(datasetIndex) {\n var meta = this._metasets[datasetIndex];\n\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n\n delete this._metasets[datasetIndex];\n }\n }, {\n key: \"_stop\",\n value: function _stop() {\n var i, ilen;\n this.stop();\n animator.remove(this);\n\n for (i = 0, ilen = this.data.datasets.length; i < ilen; ++i) {\n this._destroyDatasetMeta(i);\n }\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.notifyPlugins('beforeDestroy');\n var canvas = this.canvas,\n ctx = this.ctx;\n\n this._stop();\n\n this.config.clearCache();\n\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\n this.notifyPlugins('destroy');\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n }, {\n key: \"toBase64Image\",\n value: function toBase64Image() {\n var _this$canvas;\n\n return (_this$canvas = this.canvas).toDataURL.apply(_this$canvas, arguments);\n }\n }, {\n key: \"bindEvents\",\n value: function bindEvents() {\n this.bindUserEvents();\n\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n }, {\n key: \"bindUserEvents\",\n value: function bindUserEvents() {\n var _this17 = this;\n\n var listeners = this._listeners;\n var platform = this.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(_this17, type, listener);\n listeners[type] = listener;\n };\n\n var listener = function listener(e, x, y) {\n e.offsetX = x;\n e.offsetY = y;\n\n _this17._eventHandler(e);\n };\n\n each(this.options.events, function (type) {\n return _add(type, listener);\n });\n }\n }, {\n key: \"bindResponsiveEvents\",\n value: function bindResponsiveEvents() {\n var _this18 = this;\n\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n\n var listeners = this._responsiveListeners;\n var platform = this.platform;\n\n var _add = function _add(type, listener) {\n platform.addEventListener(_this18, type, listener);\n listeners[type] = listener;\n };\n\n var _remove = function _remove(type, listener) {\n if (listeners[type]) {\n platform.removeEventListener(_this18, type, listener);\n delete listeners[type];\n }\n };\n\n var listener = function listener(width, height) {\n if (_this18.canvas) {\n _this18.resize(width, height);\n }\n };\n\n var detached;\n\n var attached = function attached() {\n _remove('attach', attached);\n\n _this18.attached = true;\n\n _this18.resize();\n\n _add('resize', listener);\n\n _add('detach', detached);\n };\n\n detached = function detached() {\n _this18.attached = false;\n\n _remove('resize', listener);\n\n _this18._stop();\n\n _this18._resize(0, 0);\n\n _add('attach', attached);\n };\n\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n }, {\n key: \"unbindEvents\",\n value: function unbindEvents() {\n var _this19 = this;\n\n each(this._listeners, function (listener, type) {\n _this19.platform.removeEventListener(_this19, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, function (listener, type) {\n _this19.platform.removeEventListener(_this19, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n }, {\n key: \"updateHoverStyle\",\n value: function updateHoverStyle(items, mode, enabled) {\n var prefix = enabled ? 'set' : 'remove';\n var meta, item, i, ilen;\n\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n\n for (i = 0, ilen = items.length; i < ilen; ++i) {\n item = items[i];\n var controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements) {\n var _this20 = this;\n\n var lastActive = this._active || [];\n var active = activeElements.map(function (_ref2) {\n var datasetIndex = _ref2.datasetIndex,\n index = _ref2.index;\n\n var meta = _this20.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n\n this._updateHoverStyles(active, lastActive);\n }\n }\n }, {\n key: \"notifyPlugins\",\n value: function notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n }, {\n key: \"_updateHoverStyles\",\n value: function _updateHoverStyles(active, lastActive, replay) {\n var hoverOptions = this.options.hover;\n\n var diff = function diff(a, b) {\n return a.filter(function (x) {\n return !b.some(function (y) {\n return x.datasetIndex === y.datasetIndex && x.index === y.index;\n });\n });\n };\n\n var deactivated = diff(lastActive, active);\n var activated = replay ? active : diff(active, lastActive);\n\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n }, {\n key: \"_eventHandler\",\n value: function _eventHandler(e, replay) {\n var _this21 = this;\n\n var args = {\n event: e,\n replay: replay,\n cancelable: true,\n inChartArea: _isPointInArea(e, this.chartArea, this._minPadding)\n };\n\n var eventFilter = function eventFilter(plugin) {\n return (plugin.options.events || _this21.options.events).includes(e.native.type);\n };\n\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n\n var changed = this._handleEvent(e, replay, args.inChartArea);\n\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n\n if (changed || args.changed) {\n this.render();\n }\n\n return this;\n }\n }, {\n key: \"_handleEvent\",\n value: function _handleEvent(e, replay, inChartArea) {\n var _this$_active = this._active,\n lastActive = _this$_active === void 0 ? [] : _this$_active,\n options = this.options;\n var useFinalPosition = replay;\n\n var active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n\n var isClick = _isClickEvent(e);\n\n var lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [e, active, this], this);\n\n if (isClick) {\n callback(options.onClick, [e, active, this], this);\n }\n }\n\n var changed = !_elementsEqual(active, lastActive);\n\n if (changed || replay) {\n this._active = active;\n\n this._updateHoverStyles(active, lastActive, replay);\n }\n\n this._lastEvent = lastEvent;\n return changed;\n }\n }, {\n key: \"_getActiveElements\",\n value: function _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n return lastActive;\n }\n\n var hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n }]);\n\n return Chart;\n}();\n\nvar invalidatePlugins = function invalidatePlugins() {\n return each(Chart.instances, function (chart) {\n return chart._plugins.invalidate();\n });\n};\n\nvar enumerable = true;\nObject.defineProperties(Chart, {\n defaults: {\n enumerable: enumerable,\n value: defaults\n },\n instances: {\n enumerable: enumerable,\n value: instances\n },\n overrides: {\n enumerable: enumerable,\n value: overrides\n },\n registry: {\n enumerable: enumerable,\n value: registry\n },\n version: {\n enumerable: enumerable,\n value: version\n },\n getChart: {\n enumerable: enumerable,\n value: getChart\n },\n register: {\n enumerable: enumerable,\n value: function value() {\n registry.add.apply(registry, arguments);\n invalidatePlugins();\n }\n },\n unregister: {\n enumerable: enumerable,\n value: function value() {\n registry.remove.apply(registry, arguments);\n invalidatePlugins();\n }\n }\n});\n\nfunction clipArc(ctx, element, endAngle) {\n var startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n x = element.x,\n y = element.y,\n outerRadius = element.outerRadius,\n innerRadius = element.innerRadius;\n var angleMargin = pixelMargin / outerRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n\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\n ctx.closePath();\n ctx.clip();\n}\n\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, ['outerStart', 'outerEnd', 'innerStart', 'innerEnd']);\n}\n\nfunction parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n var o = toRadiusCorners(arc.options.borderRadius);\n var halfThickness = (outerRadius - innerRadius) / 2;\n var innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n\n var computeOuterLimit = function computeOuterLimit(val) {\n var outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\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\nfunction rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n\nfunction pathArc(ctx, element, offset, spacing, end) {\n var x = element.x,\n y = element.y,\n start = element.startAngle,\n pixelMargin = element.pixelMargin,\n innerR = element.innerRadius;\n var outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n var innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n var spacingOffset = 0;\n var alpha = end - start;\n\n if (spacing) {\n var noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n var noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n var avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n var adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n\n var beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n var angleOffset = (alpha - beta) / 2;\n var startAngle = start + angleOffset + spacingOffset;\n var endAngle = end - angleOffset - spacingOffset;\n\n var _parseBorderRadius$ = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle),\n outerStart = _parseBorderRadius$.outerStart,\n outerEnd = _parseBorderRadius$.outerEnd,\n innerStart = _parseBorderRadius$.innerStart,\n innerEnd = _parseBorderRadius$.innerEnd;\n\n var outerStartAdjustedRadius = outerRadius - outerStart;\n var outerEndAdjustedRadius = outerRadius - outerEnd;\n var outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n var outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n var innerStartAdjustedRadius = innerRadius + innerStart;\n var innerEndAdjustedRadius = innerRadius + innerEnd;\n var innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n var innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerEndAdjustedAngle);\n\n if (outerEnd > 0) {\n var pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n\n var p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n\n if (innerEnd > 0) {\n var _pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n\n ctx.arc(_pCenter.x, _pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, startAngle + innerStart / innerRadius, true);\n\n if (innerStart > 0) {\n var _pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter2.x, _pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n\n var p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n\n if (outerStart > 0) {\n var _pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n\n ctx.arc(_pCenter3.x, _pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n\n ctx.closePath();\n}\n\nfunction drawArc(ctx, element, offset, spacing) {\n var fullCircles = element.fullCircles,\n startAngle = element.startAngle,\n circumference = element.circumference;\n var endAngle = element.endAngle;\n\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, startAngle + TAU);\n\n for (var i = 0; i < fullCircles; ++i) {\n ctx.fill();\n }\n\n if (!isNaN(circumference)) {\n endAngle = startAngle + circumference % TAU;\n\n if (circumference % TAU === 0) {\n endAngle += TAU;\n }\n }\n }\n\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.fill();\n return endAngle;\n}\n\nfunction drawFullCircleBorders(ctx, element, inner) {\n var x = element.x,\n y = element.y,\n startAngle = element.startAngle,\n pixelMargin = element.pixelMargin,\n fullCircles = element.fullCircles;\n var outerRadius = Math.max(element.outerRadius - pixelMargin, 0);\n var innerRadius = element.innerRadius + pixelMargin;\n var i;\n\n if (inner) {\n clipArc(ctx, element, startAngle + TAU);\n }\n\n ctx.beginPath();\n ctx.arc(x, y, innerRadius, startAngle + TAU, startAngle, true);\n\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle, startAngle + TAU);\n\n for (i = 0; i < fullCircles; ++i) {\n ctx.stroke();\n }\n}\n\nfunction drawBorder(ctx, element, offset, spacing, endAngle) {\n var options = element.options;\n var borderWidth = options.borderWidth,\n borderJoinStyle = options.borderJoinStyle;\n var inner = options.borderAlign === 'inner';\n\n if (!borderWidth) {\n return;\n }\n\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n\n if (element.fullCircles) {\n drawFullCircleBorders(ctx, element, inner);\n }\n\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n\n pathArc(ctx, element, offset, spacing, endAngle);\n ctx.stroke();\n}\n\nvar ArcElement = /*#__PURE__*/function (_Element2) {\n _inherits(ArcElement, _Element2);\n\n var _super12 = _createSuper(ArcElement);\n\n function ArcElement(cfg) {\n var _this22;\n\n _classCallCheck(this, ArcElement);\n\n _this22 = _super12.call(this);\n _this22.options = undefined;\n _this22.circumference = undefined;\n _this22.startAngle = undefined;\n _this22.endAngle = undefined;\n _this22.innerRadius = undefined;\n _this22.outerRadius = undefined;\n _this22.pixelMargin = 0;\n _this22.fullCircles = 0;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this22), cfg);\n }\n\n return _this22;\n }\n\n _createClass(ArcElement, [{\n key: \"inRange\",\n value: function inRange(chartX, chartY, useFinalPosition) {\n var point = this.getProps(['x', 'y'], useFinalPosition);\n\n var _getAngleFromPoint2 = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n }),\n angle = _getAngleFromPoint2.angle,\n distance = _getAngleFromPoint2.distance;\n\n var _this$getProps2 = this.getProps(['startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n startAngle = _this$getProps2.startAngle,\n endAngle = _this$getProps2.endAngle,\n innerRadius = _this$getProps2.innerRadius,\n outerRadius = _this$getProps2.outerRadius,\n circumference = _this$getProps2.circumference;\n\n var rAdjust = this.options.spacing / 2;\n\n var _circumference = valueOrDefault(circumference, endAngle - startAngle);\n\n var betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n\n var withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n\n return betweenAngles && withinRadius;\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps3 = this.getProps(['x', 'y', 'startAngle', 'endAngle', 'innerRadius', 'outerRadius', 'circumference'], useFinalPosition),\n x = _this$getProps3.x,\n y = _this$getProps3.y,\n startAngle = _this$getProps3.startAngle,\n endAngle = _this$getProps3.endAngle,\n innerRadius = _this$getProps3.innerRadius,\n outerRadius = _this$getProps3.outerRadius;\n\n var _this$options11 = this.options,\n offset = _this$options11.offset,\n spacing = _this$options11.spacing;\n var halfAngle = (startAngle + endAngle) / 2;\n var 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 }, {\n key: \"tooltipPosition\",\n value: function tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options,\n circumference = this.circumference;\n var offset = (options.offset || 0) / 2;\n var spacing = (options.spacing || 0) / 2;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n\n ctx.save();\n var radiusOffset = 0;\n\n if (offset) {\n radiusOffset = offset / 2;\n var halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * radiusOffset, Math.sin(halfAngle) * radiusOffset);\n\n if (this.circumference >= PI) {\n radiusOffset = offset;\n }\n }\n\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n var endAngle = drawArc(ctx, this, radiusOffset, spacing);\n drawBorder(ctx, this, radiusOffset, spacing, endAngle);\n ctx.restore();\n }\n }]);\n\n return ArcElement;\n}(Element);\n\nArcElement.id = 'arc';\nArcElement.defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined\n};\nArcElement.defaultRoutes = {\n backgroundColor: 'backgroundColor'\n};\n\nfunction setStyle(ctx, options) {\n var style = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 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}\n\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n\n return lineTo;\n}\n\nfunction pathVars(points, segment) {\n var params = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var count = points.length;\n var _params$start = params.start,\n paramsStart = _params$start === void 0 ? 0 : _params$start,\n _params$end = params.end,\n paramsEnd = _params$end === void 0 ? count - 1 : _params$end;\n var segmentStart = segment.start,\n segmentEnd = segment.end;\n var start = Math.max(paramsStart, segmentStart);\n var end = Math.min(paramsEnd, segmentEnd);\n var outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count: count,\n start: start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n\nfunction pathSegment(ctx, line, segment, params) {\n var points = line.points,\n options = line.options;\n\n var _pathVars = pathVars(points, segment, params),\n count = _pathVars.count,\n start = _pathVars.start,\n loop = _pathVars.loop,\n ilen = _pathVars.ilen;\n\n var lineMethod = getLineMethod(options);\n\n var _ref3 = params || {},\n _ref3$move = _ref3.move,\n move = _ref3$move === void 0 ? true : _ref3$move,\n reverse = _ref3.reverse;\n\n var i, point, prev;\n\n for (i = 0; i <= ilen; ++i) {\n point = points[(start + (reverse ? ilen - i : i)) % count];\n\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\n prev = point;\n }\n\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n\n return !!loop;\n}\n\nfunction fastPathSegment(ctx, line, segment, params) {\n var points = line.points;\n\n var _pathVars2 = pathVars(points, segment, params),\n count = _pathVars2.count,\n start = _pathVars2.start,\n ilen = _pathVars2.ilen;\n\n var _ref4 = params || {},\n _ref4$move = _ref4.move,\n move = _ref4$move === void 0 ? true : _ref4$move,\n reverse = _ref4.reverse;\n\n var avgX = 0;\n var countX = 0;\n var i, point, prevX, minY, maxY, lastY;\n\n var pointIndex = function pointIndex(index) {\n return (start + (reverse ? ilen - index : index)) % count;\n };\n\n var drawX = function drawX() {\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n\n for (i = 0; i <= ilen; ++i) {\n point = points[pointIndex(i)];\n\n if (point.skip) {\n continue;\n }\n\n var x = point.x;\n var y = point.y;\n var truncX = x | 0;\n\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\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\n lastY = y;\n }\n\n drawX();\n}\n\nfunction _getSegmentMethod(line) {\n var opts = line.options;\n var borderDash = opts.borderDash && opts.borderDash.length;\n var useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n\nfunction _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n\n return _pointInLine;\n}\n\nfunction strokePathWithCache(ctx, line, start, count) {\n var path = line._path;\n\n if (!path) {\n path = line._path = new Path2D();\n\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\n\nfunction strokePathDirect(ctx, line, start, count) {\n var segments = line.segments,\n options = line.options;\n\n var segmentMethod = _getSegmentMethod(line);\n\n var _iterator14 = _createForOfIteratorHelper(segments),\n _step14;\n\n try {\n for (_iterator14.s(); !(_step14 = _iterator14.n()).done;) {\n var segment = _step14.value;\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n\n if (segmentMethod(ctx, line, segment, {\n start: start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n\n ctx.stroke();\n }\n } catch (err) {\n _iterator14.e(err);\n } finally {\n _iterator14.f();\n }\n}\n\nvar usePath2D = typeof Path2D === 'function';\n\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}\n\nvar LineElement = /*#__PURE__*/function (_Element3) {\n _inherits(LineElement, _Element3);\n\n var _super13 = _createSuper(LineElement);\n\n function LineElement(cfg) {\n var _this23;\n\n _classCallCheck(this, LineElement);\n\n _this23 = _super13.call(this);\n _this23.animated = true;\n _this23.options = undefined;\n _this23._chart = undefined;\n _this23._loop = undefined;\n _this23._fullLoop = undefined;\n _this23._path = undefined;\n _this23._points = undefined;\n _this23._segments = undefined;\n _this23._decimated = false;\n _this23._pointsUpdated = false;\n _this23._datasetIndex = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this23), cfg);\n }\n\n return _this23;\n }\n\n _createClass(LineElement, [{\n key: \"updateControlPoints\",\n value: function updateControlPoints(chartArea, indexAxis) {\n var options = this.options;\n\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n var loop = options.spanGaps ? this._loop : this._fullLoop;\n\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n\n this._pointsUpdated = true;\n }\n }\n }, {\n key: \"points\",\n get: function get() {\n return this._points;\n },\n set: function set(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n }, {\n key: \"segments\",\n get: function get() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n }, {\n key: \"first\",\n value: function first() {\n var segments = this.segments;\n var points = this.points;\n return segments.length && points[segments[0].start];\n }\n }, {\n key: \"last\",\n value: function last() {\n var segments = this.segments;\n var points = this.points;\n var count = segments.length;\n return count && points[segments[count - 1].end];\n }\n }, {\n key: \"interpolate\",\n value: function interpolate(point, property) {\n var options = this.options;\n var value = point[property];\n var points = this.points;\n\n var segments = _boundSegments(this, {\n property: property,\n start: value,\n end: value\n });\n\n if (!segments.length) {\n return;\n }\n\n var result = [];\n\n var _interpolate = _getInterpolationMethod(options);\n\n var i, ilen;\n\n for (i = 0, ilen = segments.length; i < ilen; ++i) {\n var _segments$i = segments[i],\n start = _segments$i.start,\n end = _segments$i.end;\n var p1 = points[start];\n var p2 = points[end];\n\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n\n var t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n\n var interpolated = _interpolate(p1, p2, t, options.stepped);\n\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n\n return result.length === 1 ? result[0] : result;\n }\n }, {\n key: \"pathSegment\",\n value: function pathSegment(ctx, segment, params) {\n var segmentMethod = _getSegmentMethod(this);\n\n return segmentMethod(ctx, this, segment, params);\n }\n }, {\n key: \"path\",\n value: function path(ctx, start, count) {\n var segments = this.segments;\n\n var segmentMethod = _getSegmentMethod(this);\n\n var loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n\n var _iterator15 = _createForOfIteratorHelper(segments),\n _step15;\n\n try {\n for (_iterator15.s(); !(_step15 = _iterator15.n()).done;) {\n var segment = _step15.value;\n loop &= segmentMethod(ctx, this, segment, {\n start: start,\n end: start + count - 1\n });\n }\n } catch (err) {\n _iterator15.e(err);\n } finally {\n _iterator15.f();\n }\n\n return !!loop;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, chartArea, start, count) {\n var options = this.options || {};\n var points = this.points || [];\n\n if (points.length && options.borderWidth) {\n ctx.save();\n\n _draw(ctx, this, start, count);\n\n ctx.restore();\n }\n\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n }]);\n\n return LineElement;\n}(Element);\n\nLineElement.id = 'line';\nLineElement.defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n};\nLineElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nLineElement.descriptors = {\n _scriptable: true,\n _indexable: function _indexable(name) {\n return name !== 'borderDash' && name !== 'fill';\n }\n};\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n var options = el.options;\n\n var _el$getProps = el.getProps([axis], useFinalPosition),\n value = _el$getProps[axis];\n\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\n\nvar PointElement = /*#__PURE__*/function (_Element4) {\n _inherits(PointElement, _Element4);\n\n var _super14 = _createSuper(PointElement);\n\n function PointElement(cfg) {\n var _this24;\n\n _classCallCheck(this, PointElement);\n\n _this24 = _super14.call(this);\n _this24.options = undefined;\n _this24.parsed = undefined;\n _this24.skip = undefined;\n _this24.stop = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this24), cfg);\n }\n\n return _this24;\n }\n\n _createClass(PointElement, [{\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n var options = this.options;\n\n var _this$getProps4 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps4.x,\n y = _this$getProps4.y;\n\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps5 = this.getProps(['x', 'y'], useFinalPosition),\n x = _this$getProps5.x,\n y = _this$getProps5.y;\n\n return {\n x: x,\n y: y\n };\n }\n }, {\n key: \"size\",\n value: function size(options) {\n options = options || this.options || {};\n var radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n var borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n }, {\n key: \"draw\",\n value: function draw(ctx, area) {\n var options = this.options;\n\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\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 }, {\n key: \"getRange\",\n value: function getRange() {\n var options = this.options || {};\n return options.radius + options.hitRadius;\n }\n }]);\n\n return PointElement;\n}(Element);\n\nPointElement.id = 'point';\nPointElement.defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n};\nPointElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\n\nfunction getBarBounds(bar, useFinalPosition) {\n var _bar$getProps = bar.getProps(['x', 'y', 'base', 'width', 'height'], useFinalPosition),\n x = _bar$getProps.x,\n y = _bar$getProps.y,\n base = _bar$getProps.base,\n width = _bar$getProps.width,\n height = _bar$getProps.height;\n\n var left, right, top, bottom, half;\n\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\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n}\n\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\n\nfunction parseBorderWidth(bar, maxW, maxH) {\n var value = bar.options.borderWidth;\n var skip = bar.borderSkipped;\n var 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}\n\nfunction parseBorderRadius(bar, maxW, maxH) {\n var _bar$getProps2 = bar.getProps(['enableBorderRadius']),\n enableBorderRadius = _bar$getProps2.enableBorderRadius;\n\n var value = bar.options.borderRadius;\n var o = toTRBLCorners(value);\n var maxR = Math.min(maxW, maxH);\n var skip = bar.borderSkipped;\n var 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}\n\nfunction boundingRects(bar) {\n var bounds = getBarBounds(bar);\n var width = bounds.right - bounds.left;\n var height = bounds.bottom - bounds.top;\n var border = parseBorderWidth(bar, width / 2, height / 2);\n var 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: 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}\n\nfunction _inRange(bar, x, y, useFinalPosition) {\n var skipX = x === null;\n var skipY = y === null;\n var skipBoth = skipX && skipY;\n var bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\n\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n\nfunction addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\n\nfunction inflateRect(rect, amount) {\n var refRect = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var x = rect.x !== refRect.x ? -amount : 0;\n var y = rect.y !== refRect.y ? -amount : 0;\n var w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n var 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}\n\nvar BarElement = /*#__PURE__*/function (_Element5) {\n _inherits(BarElement, _Element5);\n\n var _super15 = _createSuper(BarElement);\n\n function BarElement(cfg) {\n var _this25;\n\n _classCallCheck(this, BarElement);\n\n _this25 = _super15.call(this);\n _this25.options = undefined;\n _this25.horizontal = undefined;\n _this25.base = undefined;\n _this25.width = undefined;\n _this25.height = undefined;\n _this25.inflateAmount = undefined;\n\n if (cfg) {\n Object.assign(_assertThisInitialized(_this25), cfg);\n }\n\n return _this25;\n }\n\n _createClass(BarElement, [{\n key: \"draw\",\n value: function draw(ctx) {\n var inflateAmount = this.inflateAmount,\n _this$options12 = this.options,\n borderColor = _this$options12.borderColor,\n backgroundColor = _this$options12.backgroundColor;\n\n var _boundingRects = boundingRects(this),\n inner = _boundingRects.inner,\n outer = _boundingRects.outer;\n\n var addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n\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\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }, {\n key: \"inRange\",\n value: function inRange(mouseX, mouseY, useFinalPosition) {\n return _inRange(this, mouseX, mouseY, useFinalPosition);\n }\n }, {\n key: \"inXRange\",\n value: function inXRange(mouseX, useFinalPosition) {\n return _inRange(this, mouseX, null, useFinalPosition);\n }\n }, {\n key: \"inYRange\",\n value: function inYRange(mouseY, useFinalPosition) {\n return _inRange(this, null, mouseY, useFinalPosition);\n }\n }, {\n key: \"getCenterPoint\",\n value: function getCenterPoint(useFinalPosition) {\n var _this$getProps6 = this.getProps(['x', 'y', 'base', 'horizontal'], useFinalPosition),\n x = _this$getProps6.x,\n y = _this$getProps6.y,\n base = _this$getProps6.base,\n horizontal = _this$getProps6.horizontal;\n\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n }, {\n key: \"getRange\",\n value: function getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n }]);\n\n return BarElement;\n}(Element);\n\nBarElement.id = 'bar';\nBarElement.defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n};\nBarElement.defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n};\nvar elements = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ArcElement: ArcElement,\n LineElement: LineElement,\n PointElement: PointElement,\n BarElement: BarElement\n});\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n var samples = options.samples || availableWidth;\n\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n\n var decimated = [];\n var bucketWidth = (count - 2) / (samples - 2);\n var sampledIndex = 0;\n var endIndex = start + count - 1;\n var a = start;\n var i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n\n for (i = 0; i < samples - 2; i++) {\n var avgX = 0;\n var avgY = 0;\n var j = void 0;\n var avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n var avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n var avgRangeLength = avgRangeEnd - avgRangeStart;\n\n for (j = avgRangeStart; j < avgRangeEnd; j++) {\n avgX += data[j].x;\n avgY += data[j].y;\n }\n\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n var rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n var rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n var _data$a = data[a],\n pointAx = _data$a.x,\n pointAy = _data$a.y;\n maxArea = area = -1;\n\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\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\n\nfunction minMaxDecimation(data, start, count, availableWidth) {\n var avgX = 0;\n var countX = 0;\n var i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n var decimated = [];\n var endIndex = start + count - 1;\n var xMin = data[start].x;\n var xMax = data[endIndex].x;\n var dx = xMax - xMin;\n\n for (i = start; i < start + count; ++i) {\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n var truncX = x | 0;\n\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\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n var lastIndex = i - 1;\n\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n var intermediateIndex1 = Math.min(minIndex, maxIndex);\n var intermediateIndex2 = Math.max(minIndex, maxIndex);\n\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex1]), {}, {\n x: avgX\n }));\n }\n\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push(_objectSpread(_objectSpread({}, data[intermediateIndex2]), {}, {\n x: avgX\n }));\n }\n }\n\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n\n return decimated;\n}\n\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n var data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n value: data\n });\n }\n}\n\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach(function (dataset) {\n cleanDecimatedDataset(dataset);\n });\n}\n\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n var pointCount = points.length;\n var start = 0;\n var count;\n var iScale = meta.iScale;\n\n var _iScale$getUserBounds2 = iScale.getUserBounds(),\n min = _iScale$getUserBounds2.min,\n max = _iScale$getUserBounds2.max,\n minDefined = _iScale$getUserBounds2.minDefined,\n maxDefined = _iScale$getUserBounds2.maxDefined;\n\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\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\n return {\n start: start,\n count: count\n };\n}\n\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: function beforeElementsUpdate(chart, args, options) {\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n\n var availableWidth = chart.width;\n chart.data.datasets.forEach(function (dataset, datasetIndex) {\n var _data = dataset._data,\n indexAxis = dataset.indexAxis;\n var meta = chart.getDatasetMeta(datasetIndex);\n var data = _data || dataset.data;\n\n if (resolve([indexAxis, chart.options.indexAxis]) === 'y') {\n return;\n }\n\n if (meta.type !== 'line') {\n return;\n }\n\n var xAxis = chart.scales[meta.xAxisID];\n\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n\n if (chart.options.parsing) {\n return;\n }\n\n var _getStartAndCountOfVi2 = getStartAndCountOfVisiblePointsSimplified(meta, data),\n start = _getStartAndCountOfVi2.start,\n count = _getStartAndCountOfVi2.count;\n\n var threshold = options.threshold || 4 * availableWidth;\n\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\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 get() {\n return this._decimated;\n },\n set: function set(d) {\n this._data = d;\n }\n });\n }\n\n var decimated;\n\n switch (options.algorithm) {\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n\n default:\n throw new Error(\"Unsupported decimation algorithm '\".concat(options.algorithm, \"'\"));\n }\n\n dataset._decimated = decimated;\n });\n },\n destroy: function destroy(chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction getLineByIndex(chart, index) {\n var meta = chart.getDatasetMeta(index);\n var visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\n\nfunction parseFillOption(line) {\n var options = line.options;\n var fillOption = options.fill;\n var fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n\n if (fill === false || fill === null) {\n return false;\n }\n\n if (fill === true) {\n return 'origin';\n }\n\n return fill;\n}\n\nfunction decodeFill(line, index, count) {\n var fill = parseFillOption(line);\n\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n\n var target = parseFloat(fill);\n\n if (isNumberFinite(target) && Math.floor(target) === target) {\n if (fill[0] === '-' || fill[0] === '+') {\n target = index + target;\n }\n\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n\n return target;\n }\n\n return ['origin', 'start', 'end', 'stack', 'shape'].indexOf(fill) >= 0 && fill;\n}\n\nfunction computeLinearBoundary(source) {\n var _source$scale = source.scale,\n scale = _source$scale === void 0 ? {} : _source$scale,\n fill = source.fill;\n var target = null;\n var horizontal;\n\n if (fill === 'start') {\n target = scale.bottom;\n } else if (fill === 'end') {\n target = scale.top;\n } else if (isObject(fill)) {\n target = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n target = scale.getBasePixel();\n }\n\n if (isNumberFinite(target)) {\n horizontal = scale.isHorizontal();\n return {\n x: horizontal ? target : null,\n y: horizontal ? null : target\n };\n }\n\n return null;\n}\n\nvar simpleArc = /*#__PURE__*/function () {\n function simpleArc(opts) {\n _classCallCheck(this, simpleArc);\n\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n\n _createClass(simpleArc, [{\n key: \"pathSegment\",\n value: function pathSegment(ctx, bounds, opts) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\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 }, {\n key: \"interpolate\",\n value: function interpolate(point) {\n var x = this.x,\n y = this.y,\n radius = this.radius;\n var angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle: angle\n };\n }\n }]);\n\n return simpleArc;\n}();\n\nfunction computeCircularBoundary(source) {\n var scale = source.scale,\n fill = source.fill;\n var options = scale.options;\n var length = scale.getLabels().length;\n var target = [];\n var start = options.reverse ? scale.max : scale.min;\n var end = options.reverse ? scale.min : scale.max;\n var i, center, value;\n\n if (fill === 'start') {\n value = start;\n } else if (fill === 'end') {\n value = end;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n\n if (options.grid.circular) {\n center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n\n for (i = 0; i < length; ++i) {\n target.push(scale.getPointPositionForValue(i, value));\n }\n\n return target;\n}\n\nfunction computeBoundary(source) {\n var scale = source.scale || {};\n\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n\n return computeLinearBoundary(source);\n}\n\nfunction findSegmentEnd(start, end, points) {\n for (; end > start; end--) {\n var point = points[end];\n\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n\n return end;\n}\n\nfunction pointsFromSegments(boundary, line) {\n var _ref5 = boundary || {},\n _ref5$x = _ref5.x,\n x = _ref5$x === void 0 ? null : _ref5$x,\n _ref5$y = _ref5.y,\n y = _ref5$y === void 0 ? null : _ref5$y;\n\n var linePoints = line.points;\n var points = [];\n line.segments.forEach(function (_ref6) {\n var start = _ref6.start,\n end = _ref6.end;\n end = findSegmentEnd(start, end, linePoints);\n var first = linePoints[start];\n var last = linePoints[end];\n\n if (y !== null) {\n points.push({\n x: first.x,\n y: y\n });\n points.push({\n x: last.x,\n y: y\n });\n } else if (x !== null) {\n points.push({\n x: x,\n y: first.y\n });\n points.push({\n x: x,\n y: last.y\n });\n }\n });\n return points;\n}\n\nfunction buildStackLine(source) {\n var scale = source.scale,\n index = source.index,\n line = source.line;\n var points = [];\n var segments = line.segments;\n var sourcePoints = line.points;\n var linesBelow = getLinesBelow(scale, index);\n linesBelow.push(createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n\n for (var j = segment.start; j <= segment.end; j++) {\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n\n return new LineElement({\n points: points,\n options: {}\n });\n}\n\nfunction getLinesBelow(scale, index) {\n var below = [];\n var metas = scale.getMatchingVisibleMetas('line');\n\n for (var i = 0; i < metas.length; i++) {\n var meta = metas[i];\n\n if (meta.index === index) {\n break;\n }\n\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n\n return below;\n}\n\nfunction addPointsBelow(points, sourcePoint, linesBelow) {\n var postponed = [];\n\n for (var j = 0; j < linesBelow.length; j++) {\n var line = linesBelow[j];\n\n var _findPoint = findPoint(line, sourcePoint, 'x'),\n first = _findPoint.first,\n last = _findPoint.last,\n point = _findPoint.point;\n\n if (!point || first && last) {\n continue;\n }\n\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n\n if (!last) {\n break;\n }\n }\n }\n\n points.push.apply(points, postponed);\n}\n\nfunction findPoint(line, sourcePoint, property) {\n var point = line.interpolate(sourcePoint, property);\n\n if (!point) {\n return {};\n }\n\n var pointValue = point[property];\n var segments = line.segments;\n var linePoints = line.points;\n var first = false;\n var last = false;\n\n for (var i = 0; i < segments.length; i++) {\n var segment = segments[i];\n var firstValue = linePoints[segment.start][property];\n var lastValue = linePoints[segment.end][property];\n\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n\n return {\n first: first,\n last: last,\n point: point\n };\n}\n\nfunction getTarget(source) {\n var chart = source.chart,\n fill = source.fill,\n line = source.line;\n\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n\n if (fill === 'stack') {\n return buildStackLine(source);\n }\n\n if (fill === 'shape') {\n return true;\n }\n\n var boundary = computeBoundary(source);\n\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n\n return createBoundaryLine(boundary, line);\n}\n\nfunction createBoundaryLine(boundary, line) {\n var points = [];\n var _loop = false;\n\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = pointsFromSegments(boundary, line);\n }\n\n return points.length ? new LineElement({\n points: points,\n options: {\n tension: 0\n },\n _loop: _loop,\n _fullLoop: _loop\n }) : null;\n}\n\nfunction resolveTarget(sources, index, propagate) {\n var source = sources[index];\n var fill = source.fill;\n var visited = [index];\n var target;\n\n if (!propagate) {\n return fill;\n }\n\n while (fill !== false && visited.indexOf(fill) === -1) {\n if (!isNumberFinite(fill)) {\n return fill;\n }\n\n target = sources[fill];\n\n if (!target) {\n return false;\n }\n\n if (target.visible) {\n return fill;\n }\n\n visited.push(fill);\n fill = target.fill;\n }\n\n return false;\n}\n\nfunction _clip(ctx, target, clipY) {\n ctx.beginPath();\n target.path(ctx);\n ctx.lineTo(target.last().x, clipY);\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\n\nfunction getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n\n var start = first[property];\n var end = last[property];\n\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n\n return {\n property: property,\n start: start,\n end: end\n };\n}\n\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _segments(line, target, property) {\n var segments = line.segments;\n var points = line.points;\n var tpoints = target.points;\n var parts = [];\n\n var _iterator16 = _createForOfIteratorHelper(segments),\n _step16;\n\n try {\n for (_iterator16.s(); !(_step16 = _iterator16.n()).done;) {\n var segment = _step16.value;\n var start = segment.start,\n end = segment.end;\n end = findSegmentEnd(start, end, points);\n var bounds = getBounds(property, points[start], points[end], segment.loop);\n\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\n var targetSegments = _boundSegments(target, bounds);\n\n var _iterator17 = _createForOfIteratorHelper(targetSegments),\n _step17;\n\n try {\n for (_iterator17.s(); !(_step17 = _iterator17.n()).done;) {\n var tgt = _step17.value;\n var subBounds = getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n\n var fillSources = _boundSegment(segment, points, subBounds);\n\n var _iterator18 = _createForOfIteratorHelper(fillSources),\n _step18;\n\n try {\n for (_iterator18.s(); !(_step18 = _iterator18.n()).done;) {\n var fillSource = _step18.value;\n parts.push({\n source: fillSource,\n target: tgt,\n start: _defineProperty({}, property, _getEdge(bounds, subBounds, 'start', Math.max)),\n end: _defineProperty({}, property, _getEdge(bounds, subBounds, 'end', Math.min))\n });\n }\n } catch (err) {\n _iterator18.e(err);\n } finally {\n _iterator18.f();\n }\n }\n } catch (err) {\n _iterator17.e(err);\n } finally {\n _iterator17.f();\n }\n }\n } catch (err) {\n _iterator16.e(err);\n } finally {\n _iterator16.f();\n }\n\n return parts;\n}\n\nfunction clipBounds(ctx, scale, bounds) {\n var _scale$chart$chartAre = scale.chart.chartArea,\n top = _scale$chart$chartAre.top,\n bottom = _scale$chart$chartAre.bottom;\n\n var _ref7 = bounds || {},\n property = _ref7.property,\n start = _ref7.start,\n end = _ref7.end;\n\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\n\nfunction interpolatedLineTo(ctx, target, point, property) {\n var interpolatedPoint = target.interpolate(point, property);\n\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nfunction _fill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n property = cfg.property,\n color = cfg.color,\n scale = cfg.scale;\n\n var segments = _segments(line, target, property);\n\n var _iterator19 = _createForOfIteratorHelper(segments),\n _step19;\n\n try {\n for (_iterator19.s(); !(_step19 = _iterator19.n()).done;) {\n var _step19$value = _step19.value,\n src = _step19$value.source,\n tgt = _step19$value.target,\n start = _step19$value.start,\n end = _step19$value.end;\n var _src$style = src.style;\n _src$style = _src$style === void 0 ? {} : _src$style;\n var _src$style$background = _src$style.backgroundColor,\n backgroundColor = _src$style$background === void 0 ? color : _src$style$background;\n var notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && getBounds(property, start, end));\n ctx.beginPath();\n var lineLoop = !!line.pathSegment(ctx, src);\n var loop = void 0;\n\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n\n var targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n } catch (err) {\n _iterator19.e(err);\n } finally {\n _iterator19.f();\n }\n}\n\nfunction doFill(ctx, cfg) {\n var line = cfg.line,\n target = cfg.target,\n above = cfg.above,\n below = cfg.below,\n area = cfg.area,\n scale = cfg.scale;\n var property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n\n if (property === 'x' && below !== above) {\n _clip(ctx, target, area.top);\n\n _fill(ctx, {\n line: line,\n target: target,\n color: above,\n scale: scale,\n property: property\n });\n\n ctx.restore();\n ctx.save();\n\n _clip(ctx, target, area.bottom);\n }\n\n _fill(ctx, {\n line: line,\n target: target,\n color: below,\n scale: scale,\n property: property\n });\n\n ctx.restore();\n}\n\nfunction drawfill(ctx, source, area) {\n var target = getTarget(source);\n var line = source.line,\n scale = source.scale,\n axis = source.axis;\n var lineOpts = line.options;\n var fillOption = lineOpts.fill;\n var color = lineOpts.backgroundColor;\n\n var _ref8 = fillOption || {},\n _ref8$above = _ref8.above,\n above = _ref8$above === void 0 ? color : _ref8$above,\n _ref8$below = _ref8.below,\n below = _ref8$below === void 0 ? color : _ref8$below;\n\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line: line,\n target: target,\n above: above,\n below: below,\n area: area,\n scale: scale,\n axis: axis\n });\n unclipArea(ctx);\n }\n}\n\nvar plugin_filler = {\n id: 'filler',\n afterDatasetsUpdate: function afterDatasetsUpdate(chart, _args, options) {\n var count = (chart.data.datasets || []).length;\n var sources = [];\n var meta, i, line, source;\n\n for (i = 0; i < count; ++i) {\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n\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: chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line: line\n };\n }\n\n meta.$filler = source;\n sources.push(source);\n }\n\n for (i = 0; i < count; ++i) {\n source = sources[i];\n\n if (!source || source.fill === false) {\n continue;\n }\n\n source.fill = resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw: function beforeDraw(chart, _args, options) {\n var draw = options.drawTime === 'beforeDraw';\n var metasets = chart.getSortedVisibleDatasetMetas();\n var area = chart.chartArea;\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (!source) {\n continue;\n }\n\n source.line.updateControlPoints(area, source.axis);\n\n if (draw) {\n drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw: function beforeDatasetsDraw(chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n\n var metasets = chart.getSortedVisibleDatasetMetas();\n\n for (var i = metasets.length - 1; i >= 0; --i) {\n var source = metasets[i].$filler;\n\n if (source) {\n drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw: function beforeDatasetDraw(chart, args, options) {\n var source = args.meta.$filler;\n\n if (!source || source.fill === false || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n\n drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nvar getBoxSize = function getBoxSize(labelOpts, fontSize) {\n var _labelOpts$boxHeight = labelOpts.boxHeight,\n boxHeight = _labelOpts$boxHeight === void 0 ? fontSize : _labelOpts$boxHeight,\n _labelOpts$boxWidth = labelOpts.boxWidth,\n boxWidth = _labelOpts$boxWidth === void 0 ? fontSize : _labelOpts$boxWidth;\n\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = Math.min(boxWidth, fontSize);\n }\n\n return {\n boxWidth: boxWidth,\n boxHeight: boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\n\nvar itemsEqual = function itemsEqual(a, b) {\n return a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\n};\n\nvar Legend = /*#__PURE__*/function (_Element6) {\n _inherits(Legend, _Element6);\n\n var _super16 = _createSuper(Legend);\n\n function Legend(config) {\n var _this26;\n\n _classCallCheck(this, Legend);\n\n _this26 = _super16.call(this);\n _this26._added = false;\n _this26.legendHitBoxes = [];\n _this26._hoveredItem = null;\n _this26.doughnutMode = false;\n _this26.chart = config.chart;\n _this26.options = config.options;\n _this26.ctx = config.ctx;\n _this26.legendItems = undefined;\n _this26.columnSizes = undefined;\n _this26.lineWidths = undefined;\n _this26.maxHeight = undefined;\n _this26.maxWidth = undefined;\n _this26.top = undefined;\n _this26.bottom = undefined;\n _this26.left = undefined;\n _this26.right = undefined;\n _this26.height = undefined;\n _this26.width = undefined;\n _this26._margins = undefined;\n _this26.position = undefined;\n _this26.weight = undefined;\n _this26.fullSize = undefined;\n return _this26;\n }\n\n _createClass(Legend, [{\n key: \"update\",\n value: function 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 }, {\n key: \"setDimensions\",\n value: function 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 }, {\n key: \"buildLabels\",\n value: function buildLabels() {\n var _this27 = this;\n\n var labelOpts = this.options.labels || {};\n var legendItems = callback(labelOpts.generateLabels, [this.chart], this) || [];\n\n if (labelOpts.filter) {\n legendItems = legendItems.filter(function (item) {\n return labelOpts.filter(item, _this27.chart.data);\n });\n }\n\n if (labelOpts.sort) {\n legendItems = legendItems.sort(function (a, b) {\n return labelOpts.sort(a, b, _this27.chart.data);\n });\n }\n\n if (this.options.reverse) {\n legendItems.reverse();\n }\n\n this.legendItems = legendItems;\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var options = this.options,\n ctx = this.ctx;\n\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n\n var labelOpts = options.labels;\n var labelFont = toFont(labelOpts.font);\n var fontSize = labelFont.size;\n\n var titleHeight = this._computeTitleHeight();\n\n var _getBoxSize = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize.boxWidth,\n itemHeight = _getBoxSize.itemHeight;\n\n var width, height;\n ctx.font = labelFont.string;\n\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n }\n\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n }, {\n key: \"_fitRows\",\n value: function _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n var ctx = this.ctx,\n maxWidth = this.maxWidth,\n padding = this.options.labels.padding;\n var hitboxes = this.legendHitBoxes = [];\n var lineWidths = this.lineWidths = [0];\n var lineHeight = itemHeight + padding;\n var totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n var row = -1;\n var top = -lineHeight;\n this.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\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\n hitboxes[i] = {\n left: 0,\n top: top,\n row: row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n }, {\n key: \"_fitCols\",\n value: function _fitCols(titleHeight, fontSize, boxWidth, itemHeight) {\n var ctx = this.ctx,\n maxHeight = this.maxHeight,\n padding = this.options.labels.padding;\n var hitboxes = this.legendHitBoxes = [];\n var columnSizes = this.columnSizes = [];\n var heightLimit = maxHeight - titleHeight;\n var totalWidth = padding;\n var currentColWidth = 0;\n var currentColHeight = 0;\n var left = 0;\n var col = 0;\n this.legendItems.forEach(function (legendItem, i) {\n var itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n\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\n hitboxes[i] = {\n left: left,\n top: currentColHeight,\n col: 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 }, {\n key: \"adjustHitBoxes\",\n value: function adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n\n var titleHeight = this._computeTitleHeight();\n\n var hitboxes = this.legendHitBoxes,\n _this$options13 = this.options,\n align = _this$options13.align,\n padding = _this$options13.labels.padding,\n rtl = _this$options13.rtl;\n var rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n\n if (this.isHorizontal()) {\n var row = 0;\n\n var left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n\n var _iterator20 = _createForOfIteratorHelper(hitboxes),\n _step20;\n\n try {\n for (_iterator20.s(); !(_step20 = _iterator20.n()).done;) {\n var hitbox = _step20.value;\n\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\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 } catch (err) {\n _iterator20.e(err);\n } finally {\n _iterator20.f();\n }\n } else {\n var col = 0;\n\n var top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n\n var _iterator21 = _createForOfIteratorHelper(hitboxes),\n _step21;\n\n try {\n for (_iterator21.s(); !(_step21 = _iterator21.n()).done;) {\n var _hitbox = _step21.value;\n\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\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 } catch (err) {\n _iterator21.e(err);\n } finally {\n _iterator21.f();\n }\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n }, {\n key: \"draw\",\n value: function draw() {\n if (this.options.display) {\n var ctx = this.ctx;\n clipArea(ctx, this);\n\n this._draw();\n\n unclipArea(ctx);\n }\n }\n }, {\n key: \"_draw\",\n value: function _draw() {\n var _this28 = this;\n\n var opts = this.options,\n columnSizes = this.columnSizes,\n lineWidths = this.lineWidths,\n ctx = this.ctx;\n var align = opts.align,\n labelOpts = opts.labels;\n var defaultColor = defaults.color;\n var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n var labelFont = toFont(labelOpts.font);\n var fontColor = labelOpts.color,\n padding = labelOpts.padding;\n var fontSize = labelFont.size;\n var halfFontSize = fontSize / 2;\n var 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\n var _getBoxSize2 = getBoxSize(labelOpts, fontSize),\n boxWidth = _getBoxSize2.boxWidth,\n boxHeight = _getBoxSize2.boxHeight,\n itemHeight = _getBoxSize2.itemHeight;\n\n var drawLegendBox = function drawLegendBox(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n\n ctx.save();\n var 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\n if (labelOpts.usePointStyle) {\n var drawOptions = {\n radius: boxWidth * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n var centerX = rtlHelper.xPlus(x, boxWidth / 2);\n var centerY = y + halfFontSize;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n var yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n var xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n var borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\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\n ctx.fill();\n\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n\n ctx.restore();\n };\n\n var fillText = function fillText(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\n var isHorizontal = this.isHorizontal();\n\n var titleHeight = this._computeTitleHeight();\n\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\n overrideTextDirection(this.ctx, opts.textDirection);\n var lineHeight = itemHeight + padding;\n this.legendItems.forEach(function (legendItem, i) {\n ctx.strokeStyle = legendItem.fontColor || fontColor;\n ctx.fillStyle = legendItem.fontColor || fontColor;\n var textWidth = ctx.measureText(legendItem.text).width;\n var textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n var width = boxWidth + halfFontSize + textWidth;\n var x = cursor.x;\n var y = cursor.y;\n rtlHelper.setWidth(_this28.width);\n\n if (isHorizontal) {\n if (i > 0 && x + width + padding > _this28.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, _this28.left + padding, _this28.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > _this28.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, _this28.top + titleHeight + padding, _this28.bottom - columnSizes[cursor.line].height);\n }\n\n var realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : _this28.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n\n if (isHorizontal) {\n cursor.x += width + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {\n var opts = this.options;\n var titleOpts = opts.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n\n if (!titleOpts.display) {\n return;\n }\n\n var rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n var ctx = this.ctx;\n var position = titleOpts.position;\n var halfFontSize = titleFont.size / 2;\n var topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n var y;\n var left = this.left;\n var maxWidth = this.width;\n\n if (this.isHorizontal()) {\n maxWidth = Math.max.apply(Math, _toConsumableArray(this.lineWidths));\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n var maxHeight = this.columnSizes.reduce(function (acc, size) {\n return Math.max(acc, size.height);\n }, 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n\n var x = _alignStartEnd(position, left, left + maxWidth);\n\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 }, {\n key: \"_computeTitleHeight\",\n value: function _computeTitleHeight() {\n var titleOpts = this.options.title;\n var titleFont = toFont(titleOpts.font);\n var titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n }, {\n key: \"_getLegendItemAt\",\n value: function _getLegendItemAt(x, y) {\n var i, hitBox, lh;\n\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n\n for (i = 0; i < lh.length; ++i) {\n hitBox = lh[i];\n\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\n return null;\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e) {\n var opts = this.options;\n\n if (!isListened(e.type, opts)) {\n return;\n }\n\n var hoveredItem = this._getLegendItemAt(e.x, e.y);\n\n if (e.type === 'mousemove') {\n var previous = this._hoveredItem;\n var sameItem = itemsEqual(previous, hoveredItem);\n\n if (previous && !sameItem) {\n callback(opts.onLeave, [e, previous, this], this);\n }\n\n this._hoveredItem = hoveredItem;\n\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [e, hoveredItem, this], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [e, hoveredItem, this], this);\n }\n }\n }]);\n\n return Legend;\n}(Element);\n\nfunction isListened(type, opts) {\n if (type === 'mousemove' && (opts.onHover || opts.onLeave)) {\n return true;\n }\n\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n\n return false;\n}\n\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start: function start(chart, _args, options) {\n var legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate: function afterUpdate(chart) {\n var legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent: function 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: function onClick(e, legendItem, legend) {\n var index = legendItem.datasetIndex;\n var ci = legend.chart;\n\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: function color(ctx) {\n return ctx.chart.options.color;\n },\n boxWidth: 40,\n padding: 10,\n generateLabels: function generateLabels(chart) {\n var datasets = chart.data.datasets;\n var _chart$legend$options = chart.legend.options.labels,\n usePointStyle = _chart$legend$options.usePointStyle,\n pointStyle = _chart$legend$options.pointStyle,\n textAlign = _chart$legend$options.textAlign,\n color = _chart$legend$options.color;\n return chart._getSortedDatasetMetas().map(function (meta) {\n var style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n var borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: 0,\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: function color(ctx) {\n return ctx.chart.options.color;\n },\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return !name.startsWith('on');\n },\n labels: {\n _scriptable: function _scriptable(name) {\n return !['generateLabels', 'filter', 'sort'].includes(name);\n }\n }\n }\n};\n\nvar Title = /*#__PURE__*/function (_Element7) {\n _inherits(Title, _Element7);\n\n var _super17 = _createSuper(Title);\n\n function Title(config) {\n var _this29;\n\n _classCallCheck(this, Title);\n\n _this29 = _super17.call(this);\n _this29.chart = config.chart;\n _this29.options = config.options;\n _this29.ctx = config.ctx;\n _this29._padding = undefined;\n _this29.top = undefined;\n _this29.bottom = undefined;\n _this29.left = undefined;\n _this29.right = undefined;\n _this29.width = undefined;\n _this29.height = undefined;\n _this29.position = undefined;\n _this29.weight = undefined;\n _this29.fullSize = undefined;\n return _this29;\n }\n\n _createClass(Title, [{\n key: \"update\",\n value: function update(maxWidth, maxHeight) {\n var opts = this.options;\n this.left = 0;\n this.top = 0;\n\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n var lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n\n var textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n }, {\n key: \"isHorizontal\",\n value: function isHorizontal() {\n var pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n }, {\n key: \"_drawArgs\",\n value: function _drawArgs(offset) {\n var top = this.top,\n left = this.left,\n bottom = this.bottom,\n right = this.right,\n options = this.options;\n var align = options.align;\n var rotation = 0;\n var maxWidth, titleX, titleY;\n\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\n maxWidth = bottom - top;\n }\n\n return {\n titleX: titleX,\n titleY: titleY,\n maxWidth: maxWidth,\n rotation: rotation\n };\n }\n }, {\n key: \"draw\",\n value: function draw() {\n var ctx = this.ctx;\n var opts = this.options;\n\n if (!opts.display) {\n return;\n }\n\n var fontOpts = toFont(opts.font);\n var lineHeight = fontOpts.lineHeight;\n var offset = lineHeight / 2 + this._padding.top;\n\n var _this$_drawArgs = this._drawArgs(offset),\n titleX = _this$_drawArgs.titleX,\n titleY = _this$_drawArgs.titleY,\n maxWidth = _this$_drawArgs.maxWidth,\n rotation = _this$_drawArgs.rotation;\n\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth: maxWidth,\n rotation: rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [titleX, titleY]\n });\n }\n }]);\n\n return Title;\n}(Element);\n\nfunction createTitle(chart, titleOpts) {\n var title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart: chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\n\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start: function start(chart, _args, options) {\n createTitle(chart, options);\n },\n stop: function stop(chart) {\n var titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var 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};\nvar map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start: function start(chart, _args, options) {\n var title = new Title({\n ctx: chart.ctx,\n options: options,\n chart: chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop: function stop(chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n var 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};\nvar positioners = {\n average: function average(items) {\n if (!items.length) {\n return false;\n }\n\n var i, len;\n var x = 0;\n var y = 0;\n var count = 0;\n\n for (i = 0, len = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest: function nearest(items, eventPosition) {\n if (!items.length) {\n return false;\n }\n\n var x = eventPosition.x;\n var y = eventPosition.y;\n var minDistance = Number.POSITIVE_INFINITY;\n var i, len, nearestElement;\n\n for (i = 0, len = items.length; i < len; ++i) {\n var el = items[i].element;\n\n if (el && el.hasValue()) {\n var center = el.getCenterPoint();\n var d = distanceBetweenPoints(eventPosition, center);\n\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n\n if (nearestElement) {\n var tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n\n return {\n x: x,\n y: y\n };\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\n return base;\n}\n\nfunction splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n\n return str;\n}\n\nfunction createTooltipItem(chart, item) {\n var element = item.element,\n datasetIndex = item.datasetIndex,\n index = item.index;\n var controller = chart.getDatasetMeta(datasetIndex).controller;\n\n var _controller$getLabelA = controller.getLabelAndValue(index),\n label = _controller$getLabelA.label,\n value = _controller$getLabelA.value;\n\n return {\n chart: chart,\n label: 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: datasetIndex,\n element: element\n };\n}\n\nfunction getTooltipSize(tooltip, options) {\n var ctx = tooltip.chart.ctx;\n var body = tooltip.body,\n footer = tooltip.footer,\n title = tooltip.title;\n var boxWidth = options.boxWidth,\n boxHeight = options.boxHeight;\n var bodyFont = toFont(options.bodyFont);\n var titleFont = toFont(options.titleFont);\n var footerFont = toFont(options.footerFont);\n var titleLineCount = title.length;\n var footerLineCount = footer.length;\n var bodyLineItemCount = body.length;\n var padding = toPadding(options.padding);\n var height = padding.height;\n var width = 0;\n var combinedBodyLength = body.reduce(function (count, bodyItem) {\n return count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length;\n }, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n\n if (combinedBodyLength) {\n var bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n\n var widthPadding = 0;\n\n var maxLineWidth = function maxLineWidth(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\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, function (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: width,\n height: height\n };\n}\n\nfunction determineYAlign(chart, size) {\n var y = size.y,\n height = size.height;\n\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n\n return 'center';\n}\n\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n var x = size.x,\n width = size.width;\n var caret = options.caretSize + options.caretPadding;\n\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\n\nfunction determineXAlign(chart, options, size, yAlign) {\n var x = size.x,\n width = size.width;\n var chartWidth = chart.width,\n _chart$chartArea = chart.chartArea,\n left = _chart$chartArea.left,\n right = _chart$chartArea.right;\n var xAlign = 'center';\n\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\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n\n return xAlign;\n}\n\nfunction determineAlignment(chart, options, size) {\n var yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign: yAlign\n };\n}\n\nfunction alignX(size, xAlign) {\n var x = size.x,\n width = size.width;\n\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n\n return x;\n}\n\nfunction alignY(size, yAlign, paddingAndSize) {\n var y = size.y,\n height = size.height;\n\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n\n return y;\n}\n\nfunction getBackgroundPoint(options, size, alignment, chart) {\n var caretSize = options.caretSize,\n caretPadding = options.caretPadding,\n cornerRadius = options.cornerRadius;\n var xAlign = alignment.xAlign,\n yAlign = alignment.yAlign;\n var paddingAndSize = caretSize + caretPadding;\n\n var _toTRBLCorners = toTRBLCorners(cornerRadius),\n topLeft = _toTRBLCorners.topLeft,\n topRight = _toTRBLCorners.topRight,\n bottomLeft = _toTRBLCorners.bottomLeft,\n bottomRight = _toTRBLCorners.bottomRight;\n\n var x = alignX(size, xAlign);\n var y = alignY(size, yAlign, paddingAndSize);\n\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\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\n\nfunction getAlignedX(tooltip, align, options) {\n var 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\nfunction getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\n\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip: tooltip,\n tooltipItems: tooltipItems,\n type: 'tooltip'\n });\n}\n\nfunction overrideCallbacks(callbacks, context) {\n var override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\n\nvar Tooltip = /*#__PURE__*/function (_Element8) {\n _inherits(Tooltip, _Element8);\n\n var _super18 = _createSuper(Tooltip);\n\n function Tooltip(config) {\n var _this30;\n\n _classCallCheck(this, Tooltip);\n\n _this30 = _super18.call(this);\n _this30.opacity = 0;\n _this30._active = [];\n _this30._eventPosition = undefined;\n _this30._size = undefined;\n _this30._cachedAnimations = undefined;\n _this30._tooltipItems = [];\n _this30.$animations = undefined;\n _this30.$context = undefined;\n _this30.chart = config.chart || config._chart;\n _this30._chart = _this30.chart;\n _this30.options = config.options;\n _this30.dataPoints = undefined;\n _this30.title = undefined;\n _this30.beforeBody = undefined;\n _this30.body = undefined;\n _this30.afterBody = undefined;\n _this30.footer = undefined;\n _this30.xAlign = undefined;\n _this30.yAlign = undefined;\n _this30.x = undefined;\n _this30.y = undefined;\n _this30.height = undefined;\n _this30.width = undefined;\n _this30.caretX = undefined;\n _this30.caretY = undefined;\n _this30.labelColors = undefined;\n _this30.labelPointStyles = undefined;\n _this30.labelTextColors = undefined;\n return _this30;\n }\n\n _createClass(Tooltip, [{\n key: \"initialize\",\n value: function initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n }, {\n key: \"_resolveAnimations\",\n value: function _resolveAnimations() {\n var cached = this._cachedAnimations;\n\n if (cached) {\n return cached;\n }\n\n var chart = this.chart;\n var options = this.options.setContext(this.getContext());\n var opts = options.enabled && chart.options.animation && options.animations;\n var animations = new Animations(this.chart, opts);\n\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n\n return animations;\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n }, {\n key: \"getTitle\",\n value: function getTitle(context, options) {\n var callbacks = options.callbacks;\n var beforeTitle = callbacks.beforeTitle.apply(this, [context]);\n var title = callbacks.title.apply(this, [context]);\n var afterTitle = callbacks.afterTitle.apply(this, [context]);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n }, {\n key: \"getBeforeBody\",\n value: function getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.beforeBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getBody\",\n value: function getBody(tooltipItems, options) {\n var _this31 = this;\n\n var callbacks = options.callbacks;\n var bodyItems = [];\n each(tooltipItems, function (context) {\n var bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n var scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(scoped.beforeLabel.call(_this31, context)));\n pushOrConcat(bodyItem.lines, scoped.label.call(_this31, context));\n pushOrConcat(bodyItem.after, splitNewlines(scoped.afterLabel.call(_this31, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n }, {\n key: \"getAfterBody\",\n value: function getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(options.callbacks.afterBody.apply(this, [tooltipItems]));\n }\n }, {\n key: \"getFooter\",\n value: function getFooter(tooltipItems, options) {\n var callbacks = options.callbacks;\n var beforeFooter = callbacks.beforeFooter.apply(this, [tooltipItems]);\n var footer = callbacks.footer.apply(this, [tooltipItems]);\n var afterFooter = callbacks.afterFooter.apply(this, [tooltipItems]);\n var lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n }, {\n key: \"_createItems\",\n value: function _createItems(options) {\n var _this32 = this;\n\n var active = this._active;\n var data = this.chart.data;\n var labelColors = [];\n var labelPointStyles = [];\n var labelTextColors = [];\n var tooltipItems = [];\n var i, len;\n\n for (i = 0, len = active.length; i < len; ++i) {\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n\n if (options.filter) {\n tooltipItems = tooltipItems.filter(function (element, index, array) {\n return options.filter(element, index, array, data);\n });\n }\n\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort(function (a, b) {\n return options.itemSort(a, b, data);\n });\n }\n\n each(tooltipItems, function (context) {\n var scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(scoped.labelColor.call(_this32, context));\n labelPointStyles.push(scoped.labelPointStyle.call(_this32, context));\n labelTextColors.push(scoped.labelTextColor.call(_this32, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n }, {\n key: \"update\",\n value: function update(changed, replay) {\n var options = this.options.setContext(this.getContext());\n var active = this._active;\n var properties;\n var tooltipItems = [];\n\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n var 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 var size = this._size = getTooltipSize(this, options);\n var positionAndSize = Object.assign({}, position, size);\n var alignment = determineAlignment(this.chart, options, positionAndSize);\n var 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\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay: replay\n });\n }\n }\n }, {\n key: \"drawCaret\",\n value: function drawCaret(tooltipPoint, ctx, size, options) {\n var 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 }, {\n key: \"getCaretPosition\",\n value: function getCaretPosition(tooltipPoint, size, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var caretSize = options.caretSize,\n cornerRadius = options.cornerRadius;\n\n var _toTRBLCorners2 = toTRBLCorners(cornerRadius),\n topLeft = _toTRBLCorners2.topLeft,\n topRight = _toTRBLCorners2.topRight,\n bottomLeft = _toTRBLCorners2.bottomLeft,\n bottomRight = _toTRBLCorners2.bottomRight;\n\n var ptX = tooltipPoint.x,\n ptY = tooltipPoint.y;\n var width = size.width,\n height = size.height;\n var x1, x2, x3, y1, y2, y3;\n\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n\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\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\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\n y3 = y1;\n }\n\n return {\n x1: x1,\n x2: x2,\n x3: x3,\n y1: y1,\n y2: y2,\n y3: y3\n };\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle(pt, ctx, options) {\n var title = this.title;\n var length = title.length;\n var titleFont, titleSpacing, i;\n\n if (length) {\n var 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\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\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n }, {\n key: \"_drawColorBox\",\n value: function _drawColorBox(ctx, pt, i, rtlHelper, options) {\n var labelColors = this.labelColors[i];\n var labelPointStyle = this.labelPointStyles[i];\n var boxHeight = options.boxHeight,\n boxWidth = options.boxWidth,\n boxPadding = options.boxPadding;\n var bodyFont = toFont(options.bodyFont);\n var colorX = getAlignedX(this, 'left', options);\n var rtlColorX = rtlHelper.x(colorX);\n var yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n var colorY = pt.y + yOffSet;\n\n if (options.usePointStyle) {\n var drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n var centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n var centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n var outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n var innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n var borderRadius = toTRBLCorners(labelColors.borderRadius);\n\n if (Object.values(borderRadius).some(function (v) {\n return v !== 0;\n })) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n\n ctx.fillStyle = this.labelTextColors[i];\n }\n }, {\n key: \"drawBody\",\n value: function drawBody(pt, ctx, options) {\n var body = this.body;\n var bodySpacing = options.bodySpacing,\n bodyAlign = options.bodyAlign,\n displayColors = options.displayColors,\n boxHeight = options.boxHeight,\n boxWidth = options.boxWidth,\n boxPadding = options.boxPadding;\n var bodyFont = toFont(options.bodyFont);\n var bodyLineHeight = bodyFont.lineHeight;\n var xLinePadding = 0;\n var rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n\n var fillLineOfText = function fillLineOfText(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n\n var bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n var 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\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\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n\n for (j = 0, jlen = lines.length; j < jlen; ++j) {\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n\n each(bodyItem.after, fillLineOfText);\n }\n\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n }, {\n key: \"drawFooter\",\n value: function drawFooter(pt, ctx, options) {\n var footer = this.footer;\n var length = footer.length;\n var footerFont, i;\n\n if (length) {\n var 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\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 }, {\n key: \"drawBackground\",\n value: function drawBackground(pt, ctx, tooltipSize, options) {\n var xAlign = this.xAlign,\n yAlign = this.yAlign;\n var x = pt.x,\n y = pt.y;\n var width = tooltipSize.width,\n height = tooltipSize.height;\n\n var _toTRBLCorners3 = toTRBLCorners(options.cornerRadius),\n topLeft = _toTRBLCorners3.topLeft,\n topRight = _toTRBLCorners3.topRight,\n bottomLeft = _toTRBLCorners3.bottomLeft,\n bottomRight = _toTRBLCorners3.bottomRight;\n\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\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n }, {\n key: \"_updateAnimationTarget\",\n value: function _updateAnimationTarget(options) {\n var chart = this.chart;\n var anims = this.$animations;\n var animX = anims && anims.x;\n var animY = anims && anims.y;\n\n if (animX || animY) {\n var position = positioners[options.position].call(this, this._active, this._eventPosition);\n\n if (!position) {\n return;\n }\n\n var size = this._size = getTooltipSize(this, options);\n var positionAndSize = Object.assign({}, position, this._size);\n var alignment = determineAlignment(chart, options, positionAndSize);\n var point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n\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\n this._resolveAnimations().update(this, point);\n }\n }\n }\n }, {\n key: \"draw\",\n value: function draw(ctx) {\n var options = this.options.setContext(this.getContext());\n var opacity = this.opacity;\n\n if (!opacity) {\n return;\n }\n\n this._updateAnimationTarget(options);\n\n var tooltipSize = {\n width: this.width,\n height: this.height\n };\n var pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n var padding = toPadding(options.padding);\n var hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n\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 }, {\n key: \"getActiveElements\",\n value: function getActiveElements() {\n return this._active || [];\n }\n }, {\n key: \"setActiveElements\",\n value: function setActiveElements(activeElements, eventPosition) {\n var _this33 = this;\n\n var lastActive = this._active;\n var active = activeElements.map(function (_ref9) {\n var datasetIndex = _ref9.datasetIndex,\n index = _ref9.index;\n\n var meta = _this33.chart.getDatasetMeta(datasetIndex);\n\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n\n return {\n datasetIndex: datasetIndex,\n element: meta.data[index],\n index: index\n };\n });\n var changed = !_elementsEqual(lastActive, active);\n\n var positionChanged = this._positionChanged(active, eventPosition);\n\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n }, {\n key: \"handleEvent\",\n value: function handleEvent(e, replay) {\n var inChartArea = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n\n this._ignoreReplayEvents = false;\n var options = this.options;\n var lastActive = this._active || [];\n\n var active = this._getActiveElements(e, lastActive, replay, inChartArea);\n\n var positionChanged = this._positionChanged(active, e);\n\n var changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n\n if (changed) {\n this._active = active;\n\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\n return changed;\n }\n }, {\n key: \"_getActiveElements\",\n value: function _getActiveElements(e, lastActive, replay, inChartArea) {\n var options = this.options;\n\n if (e.type === 'mouseout') {\n return [];\n }\n\n if (!inChartArea) {\n return lastActive;\n }\n\n var active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n\n if (options.reverse) {\n active.reverse();\n }\n\n return active;\n }\n }, {\n key: \"_positionChanged\",\n value: function _positionChanged(active, e) {\n var caretX = this.caretX,\n caretY = this.caretY,\n options = this.options;\n var position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n }]);\n\n return Tooltip;\n}(Element);\n\nTooltip.positioners = positioners;\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners: positioners,\n afterInit: function afterInit(chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart: chart,\n options: options\n });\n }\n },\n beforeUpdate: function beforeUpdate(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset: function reset(chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw: function afterDraw(chart) {\n var tooltip = chart.tooltip;\n var args = {\n tooltip: tooltip\n };\n\n if (chart.notifyPlugins('beforeTooltipDraw', args) === false) {\n return;\n }\n\n if (tooltip) {\n tooltip.draw(chart.ctx);\n }\n\n chart.notifyPlugins('afterTooltipDraw', args);\n },\n afterEvent: function afterEvent(chart, args) {\n if (chart.tooltip) {\n var useFinalPosition = args.replay;\n\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: function boxHeight(ctx, opts) {\n return opts.bodyFont.size;\n },\n boxWidth: function boxWidth(ctx, opts) {\n return opts.bodyFont.size;\n },\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: ['x', 'y', 'width', 'height', 'caretX', 'caretY']\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: {\n beforeTitle: noop,\n title: function title(tooltipItems) {\n if (tooltipItems.length > 0) {\n var item = tooltipItems[0];\n var labels = item.chart.data.labels;\n var labelCount = labels ? labels.length : 0;\n\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\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label: function label(tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n\n var label = tooltipItem.dataset.label || '';\n\n if (label) {\n label += ': ';\n }\n\n var value = tooltipItem.formattedValue;\n\n if (!isNullOrUndef(value)) {\n label += value;\n }\n\n return label;\n },\n labelColor: function labelColor(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var 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: function labelTextColor() {\n return this.options.bodyColor;\n },\n labelPointStyle: function labelPointStyle(tooltipItem) {\n var meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n var options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n }\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: function _scriptable(name) {\n return name !== 'filter' && name !== 'itemSort' && name !== 'external';\n },\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: ['interaction']\n};\nvar plugins = /*#__PURE__*/Object.freeze({\n __proto__: null,\n Decimation: plugin_decimation,\n Filler: plugin_filler,\n Legend: plugin_legend,\n SubTitle: plugin_subtitle,\n Title: plugin_title,\n Tooltip: plugin_tooltip\n});\n\nvar addIfString = function addIfString(labels, raw, index, addedLabels) {\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index: index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n\n return index;\n};\n\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n var first = labels.indexOf(raw);\n\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n\n var last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\n\nvar validIndex = function validIndex(index, max) {\n return index === null ? null : _limitValue(Math.round(index), 0, max);\n};\n\nvar CategoryScale = /*#__PURE__*/function (_Scale) {\n _inherits(CategoryScale, _Scale);\n\n var _super19 = _createSuper(CategoryScale);\n\n function CategoryScale(cfg) {\n var _this34;\n\n _classCallCheck(this, CategoryScale);\n\n _this34 = _super19.call(this, cfg);\n _this34._startValue = undefined;\n _this34._valueRange = 0;\n _this34._addedLabels = [];\n return _this34;\n }\n\n _createClass(CategoryScale, [{\n key: \"init\",\n value: function init(scaleOptions) {\n var added = this._addedLabels;\n\n if (added.length) {\n var labels = this.getLabels();\n\n var _iterator22 = _createForOfIteratorHelper(added),\n _step22;\n\n try {\n for (_iterator22.s(); !(_step22 = _iterator22.n()).done;) {\n var _step22$value = _step22.value,\n index = _step22$value.index,\n label = _step22$value.label;\n\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n } catch (err) {\n _iterator22.e(err);\n } finally {\n _iterator22.f();\n }\n\n this._addedLabels = [];\n }\n\n _get(_getPrototypeOf(CategoryScale.prototype), \"init\", this).call(this, scaleOptions);\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n var 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 }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getUserBounds2 = this.getUserBounds(),\n minDefined = _this$getUserBounds2.minDefined,\n maxDefined = _this$getUserBounds2.maxDefined;\n\n var _this$getMinMax = this.getMinMax(true),\n min = _this$getMinMax.min,\n max = _this$getMinMax.max;\n\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var min = this.min;\n var max = this.max;\n var offset = this.options.offset;\n var ticks = [];\n var 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\n for (var value = min; value <= max; value++) {\n ticks.push({\n value: value\n });\n }\n\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var labels = this.getLabels();\n\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n\n return value;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n _get(_getPrototypeOf(CategoryScale.prototype), \"configure\", this).call(this);\n\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getPixelForTick\",\n value: function getPixelForTick(index) {\n var ticks = this.ticks;\n\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n\n return this.getPixelForValue(ticks[index].value);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n }, {\n key: \"getBasePixel\",\n value: function getBasePixel() {\n return this.bottom;\n }\n }]);\n\n return CategoryScale;\n}(Scale);\n\nCategoryScale.id = 'category';\nCategoryScale.defaults = {\n ticks: {\n callback: CategoryScale.prototype.getLabelForValue\n }\n};\n\nfunction generateTicks$1(generationOptions, dataRange) {\n var ticks = [];\n var MIN_SPACING = 1e-14;\n var bounds = generationOptions.bounds,\n step = generationOptions.step,\n min = generationOptions.min,\n max = generationOptions.max,\n precision = generationOptions.precision,\n count = generationOptions.count,\n maxTicks = generationOptions.maxTicks,\n maxDigits = generationOptions.maxDigits,\n includeBounds = generationOptions.includeBounds;\n var unit = step || 1;\n var maxSpaces = maxTicks - 1;\n var rmin = dataRange.min,\n rmax = dataRange.max;\n var minDefined = !isNullOrUndef(min);\n var maxDefined = !isNullOrUndef(max);\n var countDefined = !isNullOrUndef(count);\n var minSpacing = (rmax - rmin) / (maxDigits + 1);\n var spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n var factor, niceMin, niceMax, numSpaces;\n\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [{\n value: rmin\n }, {\n value: rmax\n }];\n }\n\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\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\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\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n\n var 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 var j = 0;\n\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n\n if (niceMin < min) {\n j++;\n }\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\n for (; j < numSpaces; ++j) {\n ticks.push({\n value: Math.round((niceMin + j * spacing) * factor) / factor\n });\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\n return ticks;\n}\n\nfunction relativeLabelSize(value, minSpacing, _ref10) {\n var horizontal = _ref10.horizontal,\n minRotation = _ref10.minRotation;\n var rad = toRadians(minRotation);\n var ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n var length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\n\nvar LinearScaleBase = /*#__PURE__*/function (_Scale2) {\n _inherits(LinearScaleBase, _Scale2);\n\n var _super20 = _createSuper(LinearScaleBase);\n\n function LinearScaleBase(cfg) {\n var _this35;\n\n _classCallCheck(this, LinearScaleBase);\n\n _this35 = _super20.call(this, cfg);\n _this35.start = undefined;\n _this35.end = undefined;\n _this35._startValue = undefined;\n _this35._endValue = undefined;\n _this35._valueRange = 0;\n return _this35;\n }\n\n _createClass(LinearScaleBase, [{\n key: \"parse\",\n value: function parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n\n return +raw;\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var beginAtZero = this.options.beginAtZero;\n\n var _this$getUserBounds3 = this.getUserBounds(),\n minDefined = _this$getUserBounds3.minDefined,\n maxDefined = _this$getUserBounds3.maxDefined;\n\n var min = this.min,\n max = this.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n if (beginAtZero) {\n var minSign = sign(min);\n var maxSign = sign(max);\n\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n\n if (min === max) {\n var offset = 1;\n\n if (max >= Number.MAX_SAFE_INTEGER || min <= Number.MIN_SAFE_INTEGER) {\n offset = Math.abs(max * 0.05);\n }\n\n setMax(max + offset);\n\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"getTickLimit\",\n value: function getTickLimit() {\n var tickOpts = this.options.ticks;\n var maxTicksLimit = tickOpts.maxTicksLimit,\n stepSize = tickOpts.stepSize;\n var maxTicks;\n\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n\n if (maxTicks > 1000) {\n console.warn(\"scales.\".concat(this.id, \".ticks.stepSize: \").concat(stepSize, \" would result generating up to \").concat(maxTicks, \" ticks. Limiting to 1000.\"));\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n\n return maxTicks;\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var opts = this.options;\n var tickOpts = opts.ticks;\n var maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n var numericGeneratorOptions = {\n maxTicks: 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 var dataRange = this._range || this;\n var ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\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\n return ticks;\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var ticks = this.ticks;\n var start = this.min;\n var end = this.max;\n\n _get(_getPrototypeOf(LinearScaleBase.prototype), \"configure\", this).call(this);\n\n if (this.options.offset && ticks.length) {\n var offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n }]);\n\n return LinearScaleBase;\n}(Scale);\n\nvar LinearScale = /*#__PURE__*/function (_LinearScaleBase) {\n _inherits(LinearScale, _LinearScaleBase);\n\n var _super21 = _createSuper(LinearScale);\n\n function LinearScale() {\n _classCallCheck(this, LinearScale);\n\n return _super21.apply(this, arguments);\n }\n\n _createClass(LinearScale, [{\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax2 = this.getMinMax(true),\n min = _this$getMinMax2.min,\n max = _this$getMinMax2.max;\n\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n var horizontal = this.isHorizontal();\n var length = horizontal ? this.width : this.height;\n var minRotation = toRadians(this.options.ticks.minRotation);\n var ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n\n var tickFont = this._resolveTickFontOptions(0);\n\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n }]);\n\n return LinearScale;\n}(LinearScaleBase);\n\nLinearScale.id = 'linear';\nLinearScale.defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n};\n\nfunction isMajor(tickVal) {\n var remain = tickVal / Math.pow(10, Math.floor(log10(tickVal)));\n return remain === 1;\n}\n\nfunction generateTicks(generationOptions, dataRange) {\n var endExp = Math.floor(log10(dataRange.max));\n var endSignificand = Math.ceil(dataRange.max / Math.pow(10, endExp));\n var ticks = [];\n var tickVal = finiteOrDefault(generationOptions.min, Math.pow(10, Math.floor(log10(dataRange.min))));\n var exp = Math.floor(log10(tickVal));\n var significand = Math.floor(tickVal / Math.pow(10, exp));\n var precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n\n do {\n ticks.push({\n value: tickVal,\n major: isMajor(tickVal)\n });\n ++significand;\n\n if (significand === 10) {\n significand = 1;\n ++exp;\n precision = exp >= 0 ? 1 : precision;\n }\n\n tickVal = Math.round(significand * Math.pow(10, exp) * precision) / precision;\n } while (exp < endExp || exp === endExp && significand < endSignificand);\n\n var lastTick = finiteOrDefault(generationOptions.max, tickVal);\n ticks.push({\n value: lastTick,\n major: isMajor(tickVal)\n });\n return ticks;\n}\n\nvar LogarithmicScale = /*#__PURE__*/function (_Scale3) {\n _inherits(LogarithmicScale, _Scale3);\n\n var _super22 = _createSuper(LogarithmicScale);\n\n function LogarithmicScale(cfg) {\n var _this36;\n\n _classCallCheck(this, LogarithmicScale);\n\n _this36 = _super22.call(this, cfg);\n _this36.start = undefined;\n _this36.end = undefined;\n _this36._startValue = undefined;\n _this36._valueRange = 0;\n return _this36;\n }\n\n _createClass(LogarithmicScale, [{\n key: \"parse\",\n value: function parse(raw, index) {\n var value = LinearScaleBase.prototype.parse.apply(this, [raw, index]);\n\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax3 = this.getMinMax(true),\n min = _this$getMinMax3.min,\n max = _this$getMinMax3.max;\n\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n\n this.handleTickRangeOptions();\n }\n }, {\n key: \"handleTickRangeOptions\",\n value: function handleTickRangeOptions() {\n var _this$getUserBounds4 = this.getUserBounds(),\n minDefined = _this$getUserBounds4.minDefined,\n maxDefined = _this$getUserBounds4.maxDefined;\n\n var min = this.min;\n var max = this.max;\n\n var setMin = function setMin(v) {\n return min = minDefined ? min : v;\n };\n\n var setMax = function setMax(v) {\n return max = maxDefined ? max : v;\n };\n\n var exp = function exp(v, m) {\n return Math.pow(10, Math.floor(log10(v)) + m);\n };\n\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(exp(min, -1));\n setMax(exp(max, +1));\n }\n }\n\n if (min <= 0) {\n setMin(exp(max, -1));\n }\n\n if (max <= 0) {\n setMax(exp(min, +1));\n }\n\n if (this._zero && this.min !== this._suggestedMin && min === exp(this.min, 0)) {\n setMin(exp(min, -1));\n }\n\n this.min = min;\n this.max = max;\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var opts = this.options;\n var generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n var ticks = generateTicks(generationOptions, this);\n\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\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\n return ticks;\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n }, {\n key: \"configure\",\n value: function configure() {\n var start = this.min;\n\n _get(_getPrototypeOf(LogarithmicScale.prototype), \"configure\", this).call(this);\n\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n\n if (value === null || isNaN(value)) {\n return NaN;\n }\n\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n }]);\n\n return LogarithmicScale;\n}(Scale);\n\nLogarithmicScale.id = 'logarithmic';\nLogarithmicScale.defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n};\n\nfunction getTickBackdropHeight(opts) {\n var tickOpts = opts.ticks;\n\n if (tickOpts.display && opts.display) {\n var padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n\n return 0;\n}\n\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [label];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\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\n return {\n start: pos,\n end: pos + size\n };\n}\n\nfunction fitWithPointLabels(scale) {\n var 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 var limits = Object.assign({}, orig);\n var labelSizes = [];\n var padding = [];\n var valueCount = scale._pointLabels.length;\n var pointLabelOpts = scale.options.pointLabels;\n var additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n\n for (var i = 0; i < valueCount; i++) {\n var opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n var pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n var plFont = toFont(opts.font);\n var textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n\n var angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n\n var angle = Math.round(toDegrees(angleRadians));\n var hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n var vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\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}\n\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n var sin = Math.abs(Math.sin(angle));\n var cos = Math.abs(Math.cos(angle));\n var x = 0;\n var y = 0;\n\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\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}\n\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n var items = [];\n var valueCount = scale._pointLabels.length;\n var opts = scale.options;\n var extra = getTickBackdropHeight(opts) / 2;\n var outerDistance = scale.drawingArea;\n var additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n\n for (var i = 0; i < valueCount; i++) {\n var pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n var angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n var size = labelSizes[i];\n var y = yForAngle(pointLabelPosition.y, size.h, angle);\n var textAlign = getTextAlignForAngle(angle);\n var left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y: y,\n textAlign: textAlign,\n left: left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n\n return items;\n}\n\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n\n return 'right';\n}\n\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n\n return x;\n}\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\n return y;\n}\n\nfunction drawPointLabels(scale, labelCount) {\n var ctx = scale.ctx,\n pointLabels = scale.options.pointLabels;\n\n for (var i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n var plFont = toFont(optsAtIndex.font);\n var _scale$_pointLabelIte = scale._pointLabelItems[i],\n x = _scale$_pointLabelIte.x,\n y = _scale$_pointLabelIte.y,\n textAlign = _scale$_pointLabelIte.textAlign,\n left = _scale$_pointLabelIte.left,\n top = _scale$_pointLabelIte.top,\n right = _scale$_pointLabelIte.right,\n bottom = _scale$_pointLabelIte.bottom;\n var backdropColor = optsAtIndex.backdropColor;\n\n if (!isNullOrUndef(backdropColor)) {\n var padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n ctx.fillRect(left - padding.left, top - padding.top, right - left + padding.width, bottom - top + padding.height);\n }\n\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}\n\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n var ctx = scale.ctx;\n\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n var pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n\n for (var i = 1; i < labelCount; i++) {\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\n\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount) {\n var ctx = scale.ctx;\n var circular = gridLineOpts.circular;\n var color = gridLineOpts.color,\n lineWidth = gridLineOpts.lineWidth;\n\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(gridLineOpts.borderDash);\n ctx.lineDashOffset = gridLineOpts.borderDashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\n\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label: label,\n index: index,\n type: 'pointLabel'\n });\n}\n\nvar RadialLinearScale = /*#__PURE__*/function (_LinearScaleBase2) {\n _inherits(RadialLinearScale, _LinearScaleBase2);\n\n var _super23 = _createSuper(RadialLinearScale);\n\n function RadialLinearScale(cfg) {\n var _this37;\n\n _classCallCheck(this, RadialLinearScale);\n\n _this37 = _super23.call(this, cfg);\n _this37.xCenter = undefined;\n _this37.yCenter = undefined;\n _this37.drawingArea = undefined;\n _this37._pointLabels = [];\n _this37._pointLabelItems = [];\n return _this37;\n }\n\n _createClass(RadialLinearScale, [{\n key: \"setDimensions\",\n value: function setDimensions() {\n var padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n var w = this.width = this.maxWidth - padding.width;\n var 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 }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var _this$getMinMax4 = this.getMinMax(false),\n min = _this$getMinMax4.min,\n max = _this$getMinMax4.max;\n\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n }, {\n key: \"computeTickLimit\",\n value: function computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var _this38 = this;\n\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map(function (value, index) {\n var label = callback(_this38.options.pointLabels.callback, [value, index], _this38);\n return label || label === 0 ? label : '';\n }).filter(function (v, i) {\n return _this38.chart.getDataVisibility(i);\n });\n }\n }, {\n key: \"fit\",\n value: function fit() {\n var opts = this.options;\n\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n }, {\n key: \"setCenterPoint\",\n value: function 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 }, {\n key: \"getIndexAngle\",\n value: function getIndexAngle(index) {\n var angleMultiplier = TAU / (this._pointLabels.length || 1);\n var startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n }, {\n key: \"getDistanceFromCenterForValue\",\n value: function getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n\n var scalingFactor = this.drawingArea / (this.max - this.min);\n\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n\n return (value - this.min) * scalingFactor;\n }\n }, {\n key: \"getValueForDistanceFromCenter\",\n value: function getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n\n var scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n }, {\n key: \"getPointLabelContext\",\n value: function getPointLabelContext(index) {\n var pointLabels = this._pointLabels || [];\n\n if (index >= 0 && index < pointLabels.length) {\n var pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n }, {\n key: \"getPointPosition\",\n value: function getPointPosition(index, distanceFromCenter) {\n var additionalAngle = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n var 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: angle\n };\n }\n }, {\n key: \"getPointPositionForValue\",\n value: function getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n }, {\n key: \"getBasePosition\",\n value: function getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n }, {\n key: \"getPointLabelPosition\",\n value: function getPointLabelPosition(index) {\n var _this$_pointLabelItem = this._pointLabelItems[index],\n left = _this$_pointLabelItem.left,\n top = _this$_pointLabelItem.top,\n right = _this$_pointLabelItem.right,\n bottom = _this$_pointLabelItem.bottom;\n return {\n left: left,\n top: top,\n right: right,\n bottom: bottom\n };\n }\n }, {\n key: \"drawBackground\",\n value: function drawBackground() {\n var _this$options14 = this.options,\n backgroundColor = _this$options14.backgroundColor,\n circular = _this$options14.grid.circular;\n\n if (backgroundColor) {\n var 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 }, {\n key: \"drawGrid\",\n value: function drawGrid() {\n var _this39 = this;\n\n var ctx = this.ctx;\n var opts = this.options;\n var angleLines = opts.angleLines,\n grid = opts.grid;\n var labelCount = this._pointLabels.length;\n var i, offset, position;\n\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n\n if (grid.display) {\n this.ticks.forEach(function (tick, index) {\n if (index !== 0) {\n offset = _this39.getDistanceFromCenterForValue(tick.value);\n var optsAtIndex = grid.setContext(_this39.getContext(index - 1));\n drawRadiusLine(_this39, optsAtIndex, offset, labelCount);\n }\n });\n }\n\n if (angleLines.display) {\n ctx.save();\n\n for (i = labelCount - 1; i >= 0; i--) {\n var optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n var color = optsAtIndex.color,\n lineWidth = optsAtIndex.lineWidth;\n\n if (!lineWidth || !color) {\n continue;\n }\n\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n\n ctx.restore();\n }\n }\n }, {\n key: \"drawBorder\",\n value: function drawBorder() {}\n }, {\n key: \"drawLabels\",\n value: function drawLabels() {\n var _this40 = this;\n\n var ctx = this.ctx;\n var opts = this.options;\n var tickOpts = opts.ticks;\n\n if (!tickOpts.display) {\n return;\n }\n\n var startAngle = this.getIndexAngle(0);\n var 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(function (tick, index) {\n if (index === 0 && !opts.reverse) {\n return;\n }\n\n var optsAtIndex = tickOpts.setContext(_this40.getContext(index));\n var tickFont = toFont(optsAtIndex.font);\n offset = _this40.getDistanceFromCenterForValue(_this40.ticks[index].value);\n\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n var 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\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n }, {\n key: \"drawTitle\",\n value: function drawTitle() {}\n }]);\n\n return RadialLinearScale;\n}(LinearScaleBase);\n\nRadialLinearScale.id = 'radialLinear';\nRadialLinearScale.defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback: function callback(label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n};\nRadialLinearScale.defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n};\nRadialLinearScale.descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n};\nvar 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};\nvar UNITS = Object.keys(INTERVALS);\n\nfunction sorter(a, b) {\n return a - b;\n}\n\nfunction _parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n\n var adapter = scale._adapter;\n var _scale$_parseOpts = scale._parseOpts,\n parser = _scale$_parseOpts.parser,\n round = _scale$_parseOpts.round,\n isoWeekday = _scale$_parseOpts.isoWeekday;\n var value = input;\n\n if (typeof parser === 'function') {\n value = parser(value);\n }\n\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n\n if (value === null) {\n return null;\n }\n\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n\n return +value;\n}\n\nfunction determineUnitForAutoTicks(minUnit, min, max, capacity) {\n var ilen = UNITS.length;\n\n for (var i = UNITS.indexOf(minUnit); i < ilen - 1; ++i) {\n var interval = INTERVALS[UNITS[i]];\n var factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n\n return UNITS[ilen - 1];\n}\n\nfunction determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for (var i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--) {\n var unit = UNITS[i];\n\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n\nfunction determineMajorUnit(unit) {\n for (var 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\nfunction addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n var _lookup2 = _lookup(timestamps, time),\n lo = _lookup2.lo,\n hi = _lookup2.hi;\n\n var timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n\nfunction setMajorTicks(scale, ticks, map, majorUnit) {\n var adapter = scale._adapter;\n var first = +adapter.startOf(ticks[0].value, majorUnit);\n var last = ticks[ticks.length - 1].value;\n var major, index;\n\n for (major = first; major <= last; major = +adapter.add(major, 1, majorUnit)) {\n index = map[major];\n\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n\n return ticks;\n}\n\nfunction ticksFromTimestamps(scale, values, majorUnit) {\n var ticks = [];\n var map = {};\n var ilen = values.length;\n var i, value;\n\n for (i = 0; i < ilen; ++i) {\n value = values[i];\n map[value] = i;\n ticks.push({\n value: value,\n major: false\n });\n }\n\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\n\nvar TimeScale = /*#__PURE__*/function (_Scale4) {\n _inherits(TimeScale, _Scale4);\n\n var _super24 = _createSuper(TimeScale);\n\n function TimeScale(props) {\n var _this41;\n\n _classCallCheck(this, TimeScale);\n\n _this41 = _super24.call(this, props);\n _this41._cache = {\n data: [],\n labels: [],\n all: []\n };\n _this41._unit = 'day';\n _this41._majorUnit = undefined;\n _this41._offsets = {};\n _this41._normalized = false;\n _this41._parseOpts = undefined;\n return _this41;\n }\n\n _createClass(TimeScale, [{\n key: \"init\",\n value: function init(scaleOpts, opts) {\n var time = scaleOpts.time || (scaleOpts.time = {});\n var adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n\n _get(_getPrototypeOf(TimeScale.prototype), \"init\", this).call(this, scaleOpts);\n\n this._normalized = opts.normalized;\n }\n }, {\n key: \"parse\",\n value: function parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n\n return _parse(this, raw);\n }\n }, {\n key: \"beforeLayout\",\n value: function beforeLayout() {\n _get(_getPrototypeOf(TimeScale.prototype), \"beforeLayout\", this).call(this);\n\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n }, {\n key: \"determineDataLimits\",\n value: function determineDataLimits() {\n var options = this.options;\n var adapter = this._adapter;\n var unit = options.time.unit || 'day';\n\n var _this$getUserBounds5 = this.getUserBounds(),\n min = _this$getUserBounds5.min,\n max = _this$getUserBounds5.max,\n minDefined = _this$getUserBounds5.minDefined,\n maxDefined = _this$getUserBounds5.maxDefined;\n\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\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 }, {\n key: \"_getLabelBounds\",\n value: function _getLabelBounds() {\n var arr = this.getLabelTimestamps();\n var min = Number.POSITIVE_INFINITY;\n var max = Number.NEGATIVE_INFINITY;\n\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n\n return {\n min: min,\n max: max\n };\n }\n }, {\n key: \"buildTicks\",\n value: function buildTicks() {\n var options = this.options;\n var timeOpts = options.time;\n var tickOpts = options.ticks;\n var timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n\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\n var min = this.min;\n var max = this.max;\n\n var ticks = _filterBetween(timestamps, min, max);\n\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\n if (options.reverse) {\n ticks.reverse();\n }\n\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n }, {\n key: \"initOffsets\",\n value: function initOffsets(timestamps) {\n var start = 0;\n var end = 0;\n var first, last;\n\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n\n var 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: start,\n end: end,\n factor: 1 / (start + 1 + end)\n };\n }\n }, {\n key: \"_generate\",\n value: function _generate() {\n var adapter = this._adapter;\n var min = this.min;\n var max = this.max;\n var options = this.options;\n var timeOpts = options.time;\n var minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n var stepSize = valueOrDefault(timeOpts.stepSize, 1);\n var weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n var hasWeekday = isNumber(weekday) || weekday === true;\n var ticks = {};\n var first = min;\n var time, count;\n\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n\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\n var timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n\n for (time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++) {\n addTick(ticks, time, timestamps);\n }\n\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n\n return Object.keys(ticks).sort(function (a, b) {\n return a - b;\n }).map(function (x) {\n return +x;\n });\n }\n }, {\n key: \"getLabelForValue\",\n value: function getLabelForValue(value) {\n var adapter = this._adapter;\n var timeOpts = this.options.time;\n\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n }, {\n key: \"_tickFormatFunction\",\n value: function _tickFormatFunction(time, index, ticks, format) {\n var options = this.options;\n var formats = options.time.displayFormats;\n var unit = this._unit;\n var majorUnit = this._majorUnit;\n var minorFormat = unit && formats[unit];\n var majorFormat = majorUnit && formats[majorUnit];\n var tick = ticks[index];\n var major = majorUnit && majorFormat && tick && tick.major;\n\n var label = this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n\n var formatter = options.ticks.callback;\n return formatter ? callback(formatter, [label, index, ticks], this) : label;\n }\n }, {\n key: \"generateTickLabels\",\n value: function generateTickLabels(ticks) {\n var i, ilen, tick;\n\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 }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n }, {\n key: \"getPixelForValue\",\n value: function getPixelForValue(value) {\n var offsets = this._offsets;\n var pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var offsets = this._offsets;\n var pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n }, {\n key: \"_getLabelSize\",\n value: function _getLabelSize(label) {\n var ticksOpts = this.options.ticks;\n var tickLabelWidth = this.ctx.measureText(label).width;\n var angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n var cosRotation = Math.cos(angle);\n var sinRotation = Math.sin(angle);\n\n var tickFontSize = this._resolveTickFontOptions(0).size;\n\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n }, {\n key: \"_getLabelCapacity\",\n value: function _getLabelCapacity(exampleTime) {\n var timeOpts = this.options.time;\n var displayFormats = timeOpts.displayFormats;\n var format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n\n var exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [exampleTime], this._majorUnit), format);\n\n var size = this._getLabelSize(exampleLabel);\n\n var capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n }, {\n key: \"getDataTimestamps\",\n value: function getDataTimestamps() {\n var timestamps = this._cache.data || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var metas = this.getMatchingVisibleMetas();\n\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n\n for (i = 0, ilen = metas.length; i < ilen; ++i) {\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n\n return this._cache.data = this.normalize(timestamps);\n }\n }, {\n key: \"getLabelTimestamps\",\n value: function getLabelTimestamps() {\n var timestamps = this._cache.labels || [];\n var i, ilen;\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var labels = this.getLabels();\n\n for (i = 0, ilen = labels.length; i < ilen; ++i) {\n timestamps.push(_parse(this, labels[i]));\n }\n\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n }, {\n key: \"normalize\",\n value: function normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n }]);\n\n return TimeScale;\n}(Scale);\n\nTimeScale.id = 'time';\nTimeScale.defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n major: {\n enabled: false\n }\n }\n};\n\nfunction interpolate(table, val, reverse) {\n var lo = 0;\n var hi = table.length - 1;\n var prevSource, nextSource, prevTarget, nextTarget;\n\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n var _lookupByKey2 = _lookupByKey(table, 'pos', val);\n\n lo = _lookupByKey2.lo;\n hi = _lookupByKey2.hi;\n }\n\n var _table$lo = table[lo];\n prevSource = _table$lo.pos;\n prevTarget = _table$lo.time;\n var _table$hi = table[hi];\n nextSource = _table$hi.pos;\n nextTarget = _table$hi.time;\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n var _lookupByKey3 = _lookupByKey(table, 'time', val);\n\n lo = _lookupByKey3.lo;\n hi = _lookupByKey3.hi;\n }\n\n var _table$lo2 = table[lo];\n prevSource = _table$lo2.time;\n prevTarget = _table$lo2.pos;\n var _table$hi2 = table[hi];\n nextSource = _table$hi2.time;\n nextTarget = _table$hi2.pos;\n }\n\n var span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\n\nvar TimeSeriesScale = /*#__PURE__*/function (_TimeScale) {\n _inherits(TimeSeriesScale, _TimeScale);\n\n var _super25 = _createSuper(TimeSeriesScale);\n\n function TimeSeriesScale(props) {\n var _this42;\n\n _classCallCheck(this, TimeSeriesScale);\n\n _this42 = _super25.call(this, props);\n _this42._table = [];\n _this42._minPos = undefined;\n _this42._tableRange = undefined;\n return _this42;\n }\n\n _createClass(TimeSeriesScale, [{\n key: \"initOffsets\",\n value: function initOffsets() {\n var timestamps = this._getTimestampsForTable();\n\n var table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n\n _get(_getPrototypeOf(TimeSeriesScale.prototype), \"initOffsets\", this).call(this, timestamps);\n }\n }, {\n key: \"buildLookupTable\",\n value: function buildLookupTable(timestamps) {\n var min = this.min,\n max = this.max;\n var items = [];\n var table = [];\n var i, ilen, prev, curr, next;\n\n for (i = 0, ilen = timestamps.length; i < ilen; ++i) {\n curr = timestamps[i];\n\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n\n if (items.length < 2) {\n return [{\n time: min,\n pos: 0\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\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n\n return table;\n }\n }, {\n key: \"_getTimestampsForTable\",\n value: function _getTimestampsForTable() {\n var timestamps = this._cache.all || [];\n\n if (timestamps.length) {\n return timestamps;\n }\n\n var data = this.getDataTimestamps();\n var label = this.getLabelTimestamps();\n\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n }, {\n key: \"getDecimalForValue\",\n value: function getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n }, {\n key: \"getValueForPixel\",\n value: function getValueForPixel(pixel) {\n var offsets = this._offsets;\n var decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n }]);\n\n return TimeSeriesScale;\n}(TimeScale);\n\nTimeSeriesScale.id = 'timeseries';\nTimeSeriesScale.defaults = TimeScale.defaults;\nvar scales = /*#__PURE__*/Object.freeze({\n __proto__: null,\n CategoryScale: CategoryScale,\n LinearScale: LinearScale,\n LogarithmicScale: LogarithmicScale,\n RadialLinearScale: RadialLinearScale,\n TimeScale: TimeScale,\n TimeSeriesScale: TimeSeriesScale\n});\nvar registerables = [controllers, elements, plugins, scales];\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, plugin_filler as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };"],"names":["ownKeys","object","enumerableOnly","keys","Object","getOwnPropertySymbols","symbols","filter","sym","getOwnPropertyDescriptor","enumerable","push","apply","_objectSpread","target","i","arguments","length","source","forEach","key","getOwnPropertyDescriptors","defineProperties","defineProperty","_createSuper","Derived","hasNativeReflectConstruct","Reflect","construct","sham","Proxy","Boolean","prototype","valueOf","call","e","_isNativeReflectConstruct","result","Super","NewTarget","this","constructor","_createForOfIteratorHelper","o","allowArrayLike","it","Symbol","iterator","Array","isArray","minLen","_arrayLikeToArray","n","toString","slice","name","from","test","_unsupportedIterableToArray","F","s","done","value","_e","f","TypeError","err","normalCompletion","didErr","step","next","_e2","return","arr","len","arr2","Animator","_request","_charts","Map","_running","_lastDate","undefined","chart","anims","date","type","callbacks","listeners","numSteps","duration","fn","initial","currentStep","Math","min","start","_this","r","window","_update","_refresh","_this2","Date","now","remaining","running","items","item","draw","_active","_total","tick","pop","_notify","charts","get","complete","progress","set","event","cb","_getAnims","_this$_getAnims$items","reduce","acc","cur","max","_duration","cancel","delete","animator","transparent","interpolators","boolean","to","factor","color","c0","c1","valid","mix","hexString","number","Animation","cfg","prop","currentValue","_fn","_easing","easing","_start","floor","delay","_loop","loop","_target","_prop","_from","_to","_promises","elapsed","remain","promises","Promise","res","rej","resolved","method","d","animationOptions","_fallback","_indexable","_scriptable","colors","properties","numbers","active","animation","resize","show","animations","visible","hide","v","Animations","config","_chart","_properties","configure","animatedProps","getOwnPropertyNames","_step","_iterator","option","has","values","newOptions","options","$shared","assign","$animations","resolveTargetOptions","_createAnimations","anim","wait","all","awaitAll","then","props","charAt","update","_animateOptions","size","add","scaleClip","scale","allowedOverflow","opts","reverse","end","getSortedDatasetIndices","filterVisible","ilen","metasets","_getSortedDatasetMetas","index","_applyStack","stack","dsIndex","datasetIndex","otherValue","singleMode","mode","isStacked","meta","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","vScale","positive","_step2","_iterator2","getMatchingVisibleMetas","updateStacks","controller","parsed","_cachedMeta","_stacks","iScale","iAxis","axis","vAxis","indexScale","valueScale","concat","id","getStackKey","_top","_bottom","getFirstScaleId","scales","shift","clearStacks","_step3","_iterator3","_parsed","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_ctx","ctx","_cachedDataOpts","getMeta","_type","_parsing","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","$context","_syncList","initialize","linkScales","_stacked","addElements","dataset","getDataset","chooseId","x","y","xid","xAxisID","yid","yAxisID","rid","rAxisID","indexAxis","iid","iAxisID","vid","vAxisID","xScale","getScaleForId","yScale","rScale","data","datasets","getDatasetMeta","scaleID","u","adata","convertObjectDataToArray","isExtensible","l","_dataCheck","datasetElementType","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","scopes","getOptionScopes","createResolver","getContext","parsing","count","sorted","_sorted","prev","parseArrayData","parseObjectData","parsePrimitiveData","labels","getLabels","singleScale","_parsed$i","parse","_this$_parsing","_this$_parsing$xAxisK","xAxisKey","_this$_parsing$yAxisK","yAxisKey","range","parsedValue","NaN","canStack","otherScale","_getOtherScale","hidden","createStack","Number","POSITIVE_INFINITY","NEGATIVE_INFINITY","_getUserBounds","_scale$getUserBounds","getUserBounds","minDefined","maxDefined","otherMin","otherMax","_skip","updateRangeFromParsed","getParsed","label","getLabelForValue","t","b","_clip","clip","top","right","bottom","left","defaultClip","getMaxOverflow","disabled","elements","area","chartArea","drawActiveElementsOnTop","element","resolveDatasetElementOptions","resolveDataElementOptions","context","parent","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","dataElementType","elementType","_this3","cache","cacheKey","sharing","datasetElementScopeKeys","prefixes","names","resolveNamedOptions","freeze","transition","datasetAnimationScopeKeys","_cacheable","sharedOptions","_animationsDisabled","_resolveAnimations","getStyle","getSharedOptions","_setStyle","_step4","_iterator4","_step4$value","arg1","arg2","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","splice","args","_args2","_dataChanges","_sync","newCount","computeMinSampleSize","curr","_cache","$bar","visibleMetas","getAllParsedValues","_","sort","a","getAllScaleValues","_length","updateMinAndPrev","abs","getPixelForValue","ticks","getPixelForTick","parseValue","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","_borderProps","horizontal","base","borderProps","enableBorderRadius","parseEdge","orig","v1","v2","startEnd","setInflateAmount","_ref","ratio","inflateAmount","defaults","BarController","_DatasetController","_super","obj","_this$_parsing2","_this$_parsing2$xAxis","_this$_parsing2$yAxis","iAxisKey","vAxisKey","bars","reset","getBasePixel","isHorizontal","ruler","_getRuler","firstOpts","includeOptions","updateSharedOptions","vpixels","head","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","height","width","updateElement","last","grouped","val","isNaN","indexOf","_getStacks","pixels","barThickness","_startPixel","_endPixel","stackCount","_getStackCount","categoryPercentage","barPercentage","_this$_cachedMeta","_this$options","baseValue","minBarLength","actualBase","floating","applyStack","getDataVisibility","barSign","halfGrid","getLineWidthForValue","skipNull","maxBarThickness","Infinity","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","stackIndex","_getStackIndex","rects","overrides","_index_","offset","grid","_value_","beginAtZero","BubbleController","_DatasetController2","_super2","radius","points","_this$_cachedMeta2","point","iPixel","getPixelForDecimal","vPixel","skip","plugins","tooltip","title","DoughnutController","_DatasetController3","_super3","_this4","innerRadius","outerRadius","offsetX","offsetY","getter","_this$_parsing$key","rotation","circumference","T","isDatasetVisible","_getRotation","_getCircumference","arcs","spacing","getMaxBorderWidth","getMaxOffset","maxSize","cutout","chartWeight","_getRingWeight","_this$_getRotationExt","_getRotationExtents","_getRatioAndOffset","ratioX","ratioY","startAngle","endAngle","startX","cos","startY","sin","endX","endY","calcMax","angle","calcMin","maxX","maxY","H","minX","P","minY","getRatioAndOffset","maxWidth","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","animateRotate","calculateCircumference","animationOpts","centerX","centerY","animateScale","_circumference","arc","metaData","locale","borderAlign","borderWidth","hoverBorderWidth","hoverOffset","ringWeightOffset","weight","descriptors","aspectRatio","legend","generateLabels","pointStyle","map","style","text","fillStyle","backgroundColor","strokeStyle","borderColor","lineWidth","onClick","legendItem","toggleDataVisibility","tooltipItem","dataLabel","formattedValue","LineController","_DatasetController4","_super4","line","_meta$data","_dataset","animationsDisabled","_getStartAndCountOfVi","pointCount","_iScale$getUserBounds","lo","hi","getStartAndCountOfVisiblePoints","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","scaleRangesChanged","_datasetIndex","_decimated","showLine","segment","animated","_this$_cachedMeta3","_this$options2","spanGaps","maxGapLength","directUpdate","prevParsed","nullData","stop","border","firstPoint","lastPoint","updateControlPoints","PolarAreaController","_DatasetController5","_super5","_this5","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","_this6","angleLines","display","circular","pointLabels","PieController","_DoughnutController","_super6","RadarController","_DatasetController6","_super7","_fullLoop","pointPosition","getPointPositionForValue","fill","ScatterController","_LineController","_super8","interaction","controllers","__proto__","abstract","Error","DateAdapter","format","timestamp","_format","amount","unit","weekday","override","members","adapters","_date","getRelativePosition","binarySearch","metaset","intersect","lookupMethod","_reversePixels","el","getRange","optimizedEvaluateItems","position","handler","getSortedVisibleDatasetMetas","_metasets$i2","_binarySearch","j","getIntersectItems","useFinalPosition","_minPadding","inRange","getNearestCartesianItems","distanceMetric","useX","useY","pt1","pt2","deltaX","deltaY","sqrt","pow","getDistanceMetricForAxis","minDistance","getCenterPoint","distance","getNearestItems","_element$getProps","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","_metasets$i","jlen","evaluateAllVisibleItems","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","array","pos","filterDynamicPositionByAxis","box","sortByWeight","v0","setLayoutDims","layouts","params","layout","_step5","_iterator5","wrap","stackWeight","includes","_stack","placed","buildStacks","vBoxMaxWidth","hBoxMaxHeight","fullSize","availableWidth","availableHeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","w","heightChanged","h","same","other","getMargins","marginForPositions","positions","margin","fitBoxes","boxes","refit","refitBoxes","_updateDims","setBoxDims","placeBoxes","_step6","userPadding","padding","_iterator6","_height","_width","autoPadding","_layers","z","layoutItem","minPadding","layoutBoxes","_box","_box$options","_box$options$stackWei","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","updatePos","change","handleMaxPadding","BasePlatform","canvas","listener","BasicPlatform","_BasePlatform","_super9","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","passive","removeListener","removeEventListener","nodeListContains","nodeList","_step7","_iterator7","node","contains","createAttachObserver","observer","MutationObserver","entries","_step8","trigger","_iterator8","addedNodes","removedNodes","observe","document","childList","subtree","createDetachObserver","_step9","_iterator9","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","devicePixelRatio","currentDevicePixelRatio","createResizeObserver","container","clientWidth","ResizeObserver","contentRect","addEventListener","listenDevicePixelRatioChanges","releaseObserver","disconnect","unlistenDevicePixelRatioChanges","createProxyAndListen","proxy","_getRelativePosition$","native","fromNativeEvent","addListener","DomPlatform","_BasePlatform2","_super10","renderHeight","getAttribute","renderWidth","boxSizing","displayWidth","displayHeight","initCanvas","removeAttribute","setAttribute","proxies","$proxies","attach","detach","isConnected","Element","_this$getProps","final","_this7","ret","defaultRoutes","formatters","numeric","tickValue","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","Ticks","autoSkip","tickOpts","ticksLimit","maxTicksLimit","tickLength","_tickSize","maxScale","maxChart","_maxLength","determineMaxTicks","majorIndices","major","enabled","getMajorIndices","numMajorIndices","first","newTicks","ceil","skipMajors","evenMajorSpacing","diff","getEvenSpacing","factors","calculateSpacing","avgMajorSpacing","round","majorStart","majorEnd","bounds","grace","drawBorder","drawOnChartArea","drawTicks","tickWidth","tickColor","borderDash","borderDashOffset","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkipPadding","labelOffset","callback","minor","align","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","startsWith","offsetFromEdge","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","epsilon","lineValue","getTickMarkLength","getTitleHeight","fallback","font","lineHeight","titleAlign","reverseAlign","Scale","_Element","_super11","_this8","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","setContext","suggestedMin","suggestedMax","_this$getUserBounds","metas","getMinMax","xLabels","yLabels","beforeUpdate","margins","_this$options3","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","beforeFit","fit","afterFit","afterUpdate","startPixel","endPixel","reversePixels","_alignToPixels","alignToPixels","notifyPlugins","_callHooks","beforeTickToLabelConversion","afterTickToLabelConversion","maxLabelDiagonal","numTicks","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","_this$options4","titleOpts","gridOpts","titleHeight","_this$_getLabelSizes","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","_this$options5","_this$options5$ticks","isRotated","labelsBelowTicks","offsetLeft","offsetRight","_this$options6","generateTickLabels","_computeLabelSizes","tickFont","fontString","nestedLabel","caches","widths","heights","widestLabelSize","highestLabelSize","_resolveTickFontOptions","string","gc","gcLen","garbageCollect","valueAt","idx","pixel","decimal","getBaseValue","createTickContext","optionTicks","rot","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","ticksLength","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","positionAxisID","_positionAxisID2","_value2","limit","optsAtIndex","lineColor","tickBorderDash","tickBorderDashOffset","textAlign","lineCount","textOffset","tickAndPadding","hTickAndPadding","textBaseline","_getXAxisLabelAlignment","_getYAxisLabelAlignment","_ret","_positionAxisID3","_value3","halfCount","strokeColor","strokeWidth","backdrop","labelPadding","translation","_this$options7","_this$options8","_this$options8$ticks","save","fillRect","restore","findIndex","_computeGridLineItems","drawLine","p1","p2","setLineDash","lineDashOffset","beginPath","moveTo","lineTo","stroke","lastLineWidth","_computeLabelArea","_computeLabelItems","_this$options9","_titleArgs","titleX","titleY","_positionAxisID","_value","titleArgs","drawBackground","drawGrid","drawTitle","drawLabels","_this9","tz","gz","axisID","fontSize","TypedRegistry","scope","create","isPrototypeOf","parentScope","proto","getPrototypeOf","isIChartComponent","register","itemDefaults","routes","property","propertyParts","split","sourceName","sourceScope","join","parts","targetName","targetScope","routeDefaults","registerDefaults","Registry","_typedRegistries","_len","_key","_each","_len2","_key2","_len3","_key3","_len4","_key4","_len5","_key5","_len6","_key6","_get","_len7","_key7","_len8","_key8","_len9","_key9","_len10","_key10","typedRegistry","_this10","arg","reg","_getRegistryForType","isForType","_exec","itemReg","registry","component","camelMethod","PluginService","_init","hook","_createDescriptors","_descriptors","_step10","_iterator10","descriptor","plugin","cancelable","_oldCache","_notifyStateChanges","getPlugin","local","_i","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","some","pluginScopeKeys","scriptable","indexable","allKeys","getIndexAxis","datasetDefaults","determineAxis","scaleOptions","toLowerCase","initOptions","chartDefaults","configScales","chartIndexAxis","firstIDs","scaleConf","console","error","_proxy","warn","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","Set","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","platform","clearCache","clear","datasetType","additionalOptionScopes","mainScope","resetCache","keyLists","_cachedScopes","_getResolver","getResolver","resolver","subPrefixes","needContext","subResolver","_step11","_iterator11","descriptorDefaults","_getResolver2","resolverCache","p","hasFunction","_step12","_descriptors2","isScriptable","isIndexable","_iterator12","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onComplete","onAnimationProgress","onProgress","getCanvas","getElementById","instances","getChart","c","moveNumericKeys","_i2","_keys","intKey","Chart","userConfig","_this11","initialCanvas","existingChart","chartOptionScopes","OffscreenCanvas","_detectPlatform","updateConfig","acquireContext","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","listen","_initialize","_this$options10","maintainAspectRatio","responsive","bindEvents","_resizeBeforeDraw","_resize","newSize","getMaximumSize","newRatio","getDevicePixelRatio","onResize","render","scalesOptions","axisOptions","_this12","scaleOpts","updated","isRadial","dposition","dtype","scaleType","getScale","init","hasUpdated","_destroyDatasetMeta","_this13","newControllers","_removeUnreferencedMetasets","order","updateIndex","ControllerClass","getController","_defaults$datasets$ty","getElement","_updateMetasets","_this14","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","invalidate","buildOrUpdateControllers","buildOrUpdateElements","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","_this15","ensureScalesHaveIDs","buildOrUpdateScales","existingEvents","newEvents","events","unbindEvents","_step13","_iterator13","_getUniformDataChanges","_step13$value","datasetCount","makeSet","changeSet","_this16","noArea","_this16$_layers","_idx","_i3","_ilen","_updateDataset","_this$_resizeBeforeDr","layers","_drawDatasets","_drawDataset","useClip","setDatasetVisibility","_updateVisibility","_destroy","remove","_stop","releaseContext","_this$canvas","toDataURL","bindUserEvents","bindResponsiveEvents","_this17","_add","_this18","detached","_remove","isAttached","_this19","prefix","activeElements","_this20","lastActive","_ref2","notify","replay","hoverOptions","hover","deactivated","activated","updateHoverStyle","_this21","inChartArea","eventFilter","_handleEvent","_this$_active","_getActiveElements","isClick","lastEvent","determineLastEvent","onHover","getElementsAtEventForMode","invalidatePlugins","clipArc","pixelMargin","angleMargin","closePath","parseBorderRadius$1","angleDelta","borderRadius","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","outerStart","outerEnd","innerStart","innerEnd","rThetaToXY","theta","pathArc","innerR","spacingOffset","alpha","avNogSpacingRadius","angleOffset","_parseBorderRadius$","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","pCenter","p4","_pCenter","PI","_pCenter2","p8","_pCenter3","borderJoinStyle","inner","lineJoin","fullCircles","drawFullCircleBorders","version","unregister","ArcElement","_Element2","_super12","_this22","chartX","chartY","_getAngleFromPoint2","_this$getProps2","rAdjust","betweenAngles","withinRadius","_this$getProps3","_this$options11","halfAngle","halfRadius","radiusOffset","translate","drawArc","setStyle","lineCap","borderCapStyle","previous","pathVars","_params$start","paramsStart","_params$end","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","_pathVars","lineMethod","stepped","tension","cubicInterpolationMode","getLineMethod","_ref3","_ref3$move","fastPathSegment","prevX","lastY","_pathVars2","_ref4","_ref4$move","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","_draw","path","_path","strokePathWithCache","_step14","segments","segmentMethod","_iterator14","strokePathDirect","LineElement","_Element3","_super13","_this23","_points","_segments","_pointsUpdated","_interpolate","_getInterpolationMethod","_segments$i","interpolated","_step15","_iterator15","inRange$1","hitRadius","capBezierPoints","PointElement","_Element4","_super14","_this24","mouseX","mouseY","_this$getProps4","_this$getProps5","hoverRadius","getBarBounds","bar","half","_bar$getProps","skipOrLimit","boundingRects","maxW","maxH","parseBorderWidth","maxR","enableBorder","topLeft","topRight","bottomLeft","bottomRight","parseBorderRadius","outer","_inRange","skipX","skipY","addNormalRectPath","rect","inflateRect","refRect","BarElement","_Element5","_super15","_this25","_this$options12","_boundingRects","addRectPath","_this$getProps6","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","_getStartAndCountOfVi2","_iScale$getUserBounds2","getStartAndCountOfVisiblePointsSimplified","threshold","decimated","configurable","samples","maxAreaPoint","maxArea","nextA","bucketWidth","sampledIndex","endIndex","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","_data$a","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","destroy","decodeFill","fillOption","parseFillOption","parseFloat","simpleArc","computeBoundary","computeCircularBoundary","_source$scale","computeLinearBoundary","findSegmentEnd","addPointsBelow","sourcePoint","linesBelow","postponed","_findPoint","findPoint","unshift","interpolate","pointValue","linePoints","firstValue","lastValue","getTarget","getLineByIndex","sourcePoints","below","getLinesBelow","createBoundaryLine","buildStackLine","boundary","_ref5","_ref5$x","_ref5$y","_ref6","pointsFromSegments","resolveTarget","sources","propagate","visited","clipY","getBounds","_getEdge","clipBounds","_scale$chart$chartAre","_ref7","interpolatedLineTo","interpolatedPoint","_fill","_step19","_step16","tpoints","_iterator16","_step17","_iterator17","_step18","tgt","subBounds","_iterator18","fillSource","_iterator19","_step19$value","src","_src$style","_src$style$background","notShape","lineLoop","targetLoop","drawfill","lineOpts","_ref8","_ref8$above","above","_ref8$below","doFill","plugin_filler","afterDatasetsUpdate","_args","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","_labelOpts$boxHeight","boxHeight","_labelOpts$boxWidth","boxWidth","usePointStyle","itemHeight","Legend","_Element6","_super16","_this26","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","_this27","labelFont","_computeTitleHeight","_getBoxSize","_fitRows","_fitCols","hitboxes","totalHeight","row","itemWidth","measureText","heightLimit","totalWidth","currentColWidth","currentColHeight","col","_this$options13","rtl","rtlHelper","_step20","_iterator20","hitbox","leftForLtr","_step21","_iterator21","_hitbox","cursor","_this28","defaultColor","fontColor","halfFontSize","_getBoxSize2","textDirection","textWidth","setWidth","lineDash","drawOptions","SQRT2","xPlus","yBoxTop","xBoxLeft","drawLegendBox","strikethrough","fillText","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","onLeave","isListened","hoveredItem","_getLegendItemAt","sameItem","plugin_legend","_element","adjustHitBoxes","afterEvent","handleEvent","ci","_chart$legend$options","Title","_Element7","_super17","_this29","_padding","textSize","fontOpts","_this$_drawArgs","_drawArgs","plugin_title","titleBlock","createTitle","WeakMap","plugin_subtitle","positioners","average","hasValue","tooltipPosition","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","str","String","getTooltipSize","body","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","before","lines","after","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","_chart$chartArea","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","cornerRadius","paddingAndSize","_toTRBLCorners","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","Tooltip","_Element8","_super18","_this30","opacity","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","tooltipItems","beforeTitle","afterTitle","_this31","bodyItems","scoped","beforeLabel","afterLabel","beforeFooter","afterFooter","_controller$getLabelA","_this32","getLabelAndValue","itemSort","labelColor","labelPointStyle","labelTextColor","_createItems","getTitle","getBeforeBody","getBody","getAfterBody","getFooter","positionAndSize","backgroundPoint","external","tooltipPoint","caretPosition","getCaretPosition","x3","y3","_toTRBLCorners2","ptX","ptY","pt","titleColor","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","textColor","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","bodyColor","_drawColorBox","footerAlign","footerColor","tooltipSize","_toTRBLCorners3","drawCaret","quadraticCurveTo","animX","animY","_updateAnimationTarget","hasTooltipContent","globalAlpha","drawBody","drawFooter","_this33","_ref9","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","labelCount","Decimation","Filler","SubTitle","findOrAddLabel","addedLabels","addIfString","lastIndexOf","CategoryScale","_Scale","_super19","_this34","_startValue","_valueRange","_addedLabels","added","_step22","_iterator22","_step22$value","isFinite","_this$getUserBounds2","_this$getMinMax","getDecimalForPixel","relativeLabelSize","minSpacing","_ref10","rad","LinearScaleBase","_Scale2","_super20","_this35","_endValue","_this$getUserBounds3","setMin","setMax","minSign","maxSign","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","maxTicks","stepSize","computeTickLimit","getTickLimit","generationOptions","dataRange","niceMin","niceMax","numSpaces","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","decimalPlaces","generateTicks$1","_maxDigits","LinearScale","_LinearScaleBase","_super21","_this$getMinMax2","handleTickRangeOptions","isMajor","tickVal","LogarithmicScale","_Scale3","_super22","_this36","_zero","_this$getMinMax3","_this$getUserBounds4","exp","m","endExp","endSignificand","significand","lastTick","generateTicks","getTickBackdropHeight","determineLimits","fitWithPointLabels","limits","valueCount","_pointLabels","pointLabelOpts","additionalAngle","centerPointLabels","getPointLabelContext","getPointPosition","drawingArea","plFont","updateLimits","setCenterPoint","_pointLabelItems","extra","outerDistance","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","buildPointLabelItems","hLimits","vLimits","pathRadiusLine","RadialLinearScale","_LinearScaleBase2","_super23","_this37","_this$getMinMax4","_this38","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","_this$_pointLabelItem","_this$options14","_this39","_scale$_pointLabelIte","drawPointLabels","gridLineOpts","drawRadiusLine","_this40","rotate","animate","INTERVALS","millisecond","common","steps","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","_parse","input","adapter","_adapter","_scale$_parseOpts","_parseOpts","parser","isoWeekday","startOf","determineUnitForAutoTicks","minUnit","capacity","interval","addTick","time","timestamps","_lookup2","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","_Scale4","_super24","_this41","_unit","_majorUnit","_offsets","_normalized","displayFormats","formats","normalized","_this$getUserBounds5","_applyBounds","_getLabelBounds","endOf","getLabelTimestamps","timeOpts","_generate","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","getDecimalForValue","hasWeekday","getDataTimestamps","tooltipFormat","datetime","minorFormat","majorFormat","formatter","_tickFormatFunction","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","_getLabelSize","normalize","table","prevSource","nextSource","prevTarget","nextTarget","_lookupByKey2","_table$lo","_table$hi","_lookupByKey3","_table$lo2","_table$hi2","span","TimeSeriesScale","_TimeScale","_super25","_this42","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables"],"sourceRoot":""}