{"version":3,"file":"base_chart_controller-CIuQluu6.js","sources":["../../../node_modules/pluralize/pluralize.js","../../../node_modules/chart.js/auto/auto.js","../../../node_modules/chartjs-plugin-annotation/dist/chartjs-plugin-annotation.esm.js","../../../node_modules/dayjs/plugin/relativeTime.js","../../../app/javascript/entrypoints/controllers/base_chart_controller.jsx"],"sourcesContent":["/* global define */\n\n(function (root, pluralize) {\n /* istanbul ignore else */\n if (typeof require === 'function' && typeof exports === 'object' && typeof module === 'object') {\n // Node.\n module.exports = pluralize();\n } else if (typeof define === 'function' && define.amd) {\n // AMD, registers as an anonymous module.\n define(function () {\n return pluralize();\n });\n } else {\n // Browser global.\n root.pluralize = pluralize();\n }\n})(this, function () {\n // Rule storage - pluralize and singularize need to be run sequentially,\n // while other rules can be optimized using an object for instant lookups.\n var pluralRules = [];\n var singularRules = [];\n var uncountables = {};\n var irregularPlurals = {};\n var irregularSingles = {};\n\n /**\n * Sanitize a pluralization rule to a usable regular expression.\n *\n * @param {(RegExp|string)} rule\n * @return {RegExp}\n */\n function sanitizeRule (rule) {\n if (typeof rule === 'string') {\n return new RegExp('^' + rule + '$', 'i');\n }\n\n return rule;\n }\n\n /**\n * Pass in a word token to produce a function that can replicate the case on\n * another word.\n *\n * @param {string} word\n * @param {string} token\n * @return {Function}\n */\n function restoreCase (word, token) {\n // Tokens are an exact match.\n if (word === token) return token;\n\n // Lower cased words. E.g. \"hello\".\n if (word === word.toLowerCase()) return token.toLowerCase();\n\n // Upper cased words. E.g. \"WHISKY\".\n if (word === word.toUpperCase()) return token.toUpperCase();\n\n // Title cased words. E.g. \"Title\".\n if (word[0] === word[0].toUpperCase()) {\n return token.charAt(0).toUpperCase() + token.substr(1).toLowerCase();\n }\n\n // Lower cased words. E.g. \"test\".\n return token.toLowerCase();\n }\n\n /**\n * Interpolate a regexp string.\n *\n * @param {string} str\n * @param {Array} args\n * @return {string}\n */\n function interpolate (str, args) {\n return str.replace(/\\$(\\d{1,2})/g, function (match, index) {\n return args[index] || '';\n });\n }\n\n /**\n * Replace a word using a rule.\n *\n * @param {string} word\n * @param {Array} rule\n * @return {string}\n */\n function replace (word, rule) {\n return word.replace(rule[0], function (match, index) {\n var result = interpolate(rule[1], arguments);\n\n if (match === '') {\n return restoreCase(word[index - 1], result);\n }\n\n return restoreCase(match, result);\n });\n }\n\n /**\n * Sanitize a word by passing in the word and sanitization rules.\n *\n * @param {string} token\n * @param {string} word\n * @param {Array} rules\n * @return {string}\n */\n function sanitizeWord (token, word, rules) {\n // Empty string or doesn't need fixing.\n if (!token.length || uncountables.hasOwnProperty(token)) {\n return word;\n }\n\n var len = rules.length;\n\n // Iterate over the sanitization rules and use the first one to match.\n while (len--) {\n var rule = rules[len];\n\n if (rule[0].test(word)) return replace(word, rule);\n }\n\n return word;\n }\n\n /**\n * Replace a word with the updated word.\n *\n * @param {Object} replaceMap\n * @param {Object} keepMap\n * @param {Array} rules\n * @return {Function}\n */\n function replaceWord (replaceMap, keepMap, rules) {\n return function (word) {\n // Get the correct token and case restoration functions.\n var token = word.toLowerCase();\n\n // Check against the keep object map.\n if (keepMap.hasOwnProperty(token)) {\n return restoreCase(word, token);\n }\n\n // Check against the replacement map for a direct word replacement.\n if (replaceMap.hasOwnProperty(token)) {\n return restoreCase(word, replaceMap[token]);\n }\n\n // Run all the rules against the word.\n return sanitizeWord(token, word, rules);\n };\n }\n\n /**\n * Check if a word is part of the map.\n */\n function checkWord (replaceMap, keepMap, rules, bool) {\n return function (word) {\n var token = word.toLowerCase();\n\n if (keepMap.hasOwnProperty(token)) return true;\n if (replaceMap.hasOwnProperty(token)) return false;\n\n return sanitizeWord(token, token, rules) === token;\n };\n }\n\n /**\n * Pluralize or singularize a word based on the passed in count.\n *\n * @param {string} word The word to pluralize\n * @param {number} count How many of the word exist\n * @param {boolean} inclusive Whether to prefix with the number (e.g. 3 ducks)\n * @return {string}\n */\n function pluralize (word, count, inclusive) {\n var pluralized = count === 1\n ? pluralize.singular(word) : pluralize.plural(word);\n\n return (inclusive ? count + ' ' : '') + pluralized;\n }\n\n /**\n * Pluralize a word.\n *\n * @type {Function}\n */\n pluralize.plural = replaceWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Check if a word is plural.\n *\n * @type {Function}\n */\n pluralize.isPlural = checkWord(\n irregularSingles, irregularPlurals, pluralRules\n );\n\n /**\n * Singularize a word.\n *\n * @type {Function}\n */\n pluralize.singular = replaceWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Check if a word is singular.\n *\n * @type {Function}\n */\n pluralize.isSingular = checkWord(\n irregularPlurals, irregularSingles, singularRules\n );\n\n /**\n * Add a pluralization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addPluralRule = function (rule, replacement) {\n pluralRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add a singularization rule to the collection.\n *\n * @param {(string|RegExp)} rule\n * @param {string} replacement\n */\n pluralize.addSingularRule = function (rule, replacement) {\n singularRules.push([sanitizeRule(rule), replacement]);\n };\n\n /**\n * Add an uncountable word rule.\n *\n * @param {(string|RegExp)} word\n */\n pluralize.addUncountableRule = function (word) {\n if (typeof word === 'string') {\n uncountables[word.toLowerCase()] = true;\n return;\n }\n\n // Set singular and plural references for the word.\n pluralize.addPluralRule(word, '$0');\n pluralize.addSingularRule(word, '$0');\n };\n\n /**\n * Add an irregular word definition.\n *\n * @param {string} single\n * @param {string} plural\n */\n pluralize.addIrregularRule = function (single, plural) {\n plural = plural.toLowerCase();\n single = single.toLowerCase();\n\n irregularSingles[single] = plural;\n irregularPlurals[plural] = single;\n };\n\n /**\n * Irregular rules.\n */\n [\n // Pronouns.\n ['I', 'we'],\n ['me', 'us'],\n ['he', 'they'],\n ['she', 'they'],\n ['them', 'them'],\n ['myself', 'ourselves'],\n ['yourself', 'yourselves'],\n ['itself', 'themselves'],\n ['herself', 'themselves'],\n ['himself', 'themselves'],\n ['themself', 'themselves'],\n ['is', 'are'],\n ['was', 'were'],\n ['has', 'have'],\n ['this', 'these'],\n ['that', 'those'],\n // Words ending in with a consonant and `o`.\n ['echo', 'echoes'],\n ['dingo', 'dingoes'],\n ['volcano', 'volcanoes'],\n ['tornado', 'tornadoes'],\n ['torpedo', 'torpedoes'],\n // Ends with `us`.\n ['genus', 'genera'],\n ['viscus', 'viscera'],\n // Ends with `ma`.\n ['stigma', 'stigmata'],\n ['stoma', 'stomata'],\n ['dogma', 'dogmata'],\n ['lemma', 'lemmata'],\n ['schema', 'schemata'],\n ['anathema', 'anathemata'],\n // Other irregular rules.\n ['ox', 'oxen'],\n ['axe', 'axes'],\n ['die', 'dice'],\n ['yes', 'yeses'],\n ['foot', 'feet'],\n ['eave', 'eaves'],\n ['goose', 'geese'],\n ['tooth', 'teeth'],\n ['quiz', 'quizzes'],\n ['human', 'humans'],\n ['proof', 'proofs'],\n ['carve', 'carves'],\n ['valve', 'valves'],\n ['looey', 'looies'],\n ['thief', 'thieves'],\n ['groove', 'grooves'],\n ['pickaxe', 'pickaxes'],\n ['passerby', 'passersby']\n ].forEach(function (rule) {\n return pluralize.addIrregularRule(rule[0], rule[1]);\n });\n\n /**\n * Pluralization rules.\n */\n [\n [/s?$/i, 's'],\n [/[^\\u0000-\\u007F]$/i, '$0'],\n [/([^aeiou]ese)$/i, '$1'],\n [/(ax|test)is$/i, '$1es'],\n [/(alias|[^aou]us|t[lm]as|gas|ris)$/i, '$1es'],\n [/(e[mn]u)s?$/i, '$1s'],\n [/([^l]ias|[aeiou]las|[ejzr]as|[iu]am)$/i, '$1'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1i'],\n [/(alumn|alg|vertebr)(?:a|ae)$/i, '$1ae'],\n [/(seraph|cherub)(?:im)?$/i, '$1im'],\n [/(her|at|gr)o$/i, '$1oes'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|automat|quor)(?:a|um)$/i, '$1a'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)(?:a|on)$/i, '$1a'],\n [/sis$/i, 'ses'],\n [/(?:(kni|wi|li)fe|(ar|l|ea|eo|oa|hoo)f)$/i, '$1$2ves'],\n [/([^aeiouy]|qu)y$/i, '$1ies'],\n [/([^ch][ieo][ln])ey$/i, '$1ies'],\n [/(x|ch|ss|sh|zz)$/i, '$1es'],\n [/(matr|cod|mur|sil|vert|ind|append)(?:ix|ex)$/i, '$1ices'],\n [/\\b((?:tit)?m|l)(?:ice|ouse)$/i, '$1ice'],\n [/(pe)(?:rson|ople)$/i, '$1ople'],\n [/(child)(?:ren)?$/i, '$1ren'],\n [/eaux$/i, '$0'],\n [/m[ae]n$/i, 'men'],\n ['thou', 'you']\n ].forEach(function (rule) {\n return pluralize.addPluralRule(rule[0], rule[1]);\n });\n\n /**\n * Singularization rules.\n */\n [\n [/s$/i, ''],\n [/(ss)$/i, '$1'],\n [/(wi|kni|(?:after|half|high|low|mid|non|night|[^\\w]|^)li)ves$/i, '$1fe'],\n [/(ar|(?:wo|[ae])l|[eo][ao])ves$/i, '$1f'],\n [/ies$/i, 'y'],\n [/\\b([pl]|zomb|(?:neck|cross)?t|coll|faer|food|gen|goon|group|lass|talk|goal|cut)ies$/i, '$1ie'],\n [/\\b(mon|smil)ies$/i, '$1ey'],\n [/\\b((?:tit)?m|l)ice$/i, '$1ouse'],\n [/(seraph|cherub)im$/i, '$1'],\n [/(x|ch|ss|sh|zz|tto|go|cho|alias|[^aou]us|t[lm]as|gas|(?:her|at|gr)o|[aeiou]ris)(?:es)?$/i, '$1'],\n [/(analy|diagno|parenthe|progno|synop|the|empha|cri|ne)(?:sis|ses)$/i, '$1sis'],\n [/(movie|twelve|abuse|e[mn]u)s$/i, '$1'],\n [/(test)(?:is|es)$/i, '$1is'],\n [/(alumn|syllab|vir|radi|nucle|fung|cact|stimul|termin|bacill|foc|uter|loc|strat)(?:us|i)$/i, '$1us'],\n [/(agend|addend|millenni|dat|extrem|bacteri|desiderat|strat|candelabr|errat|ov|symposi|curricul|quor)a$/i, '$1um'],\n [/(apheli|hyperbat|periheli|asyndet|noumen|phenomen|criteri|organ|prolegomen|hedr|automat)a$/i, '$1on'],\n [/(alumn|alg|vertebr)ae$/i, '$1a'],\n [/(cod|mur|sil|vert|ind)ices$/i, '$1ex'],\n [/(matr|append)ices$/i, '$1ix'],\n [/(pe)(rson|ople)$/i, '$1rson'],\n [/(child)ren$/i, '$1'],\n [/(eau)x?$/i, '$1'],\n [/men$/i, 'man']\n ].forEach(function (rule) {\n return pluralize.addSingularRule(rule[0], rule[1]);\n });\n\n /**\n * Uncountable rules.\n */\n [\n // Singular words with no plurals.\n 'adulthood',\n 'advice',\n 'agenda',\n 'aid',\n 'aircraft',\n 'alcohol',\n 'ammo',\n 'analytics',\n 'anime',\n 'athletics',\n 'audio',\n 'bison',\n 'blood',\n 'bream',\n 'buffalo',\n 'butter',\n 'carp',\n 'cash',\n 'chassis',\n 'chess',\n 'clothing',\n 'cod',\n 'commerce',\n 'cooperation',\n 'corps',\n 'debris',\n 'diabetes',\n 'digestion',\n 'elk',\n 'energy',\n 'equipment',\n 'excretion',\n 'expertise',\n 'firmware',\n 'flounder',\n 'fun',\n 'gallows',\n 'garbage',\n 'graffiti',\n 'hardware',\n 'headquarters',\n 'health',\n 'herpes',\n 'highjinks',\n 'homework',\n 'housework',\n 'information',\n 'jeans',\n 'justice',\n 'kudos',\n 'labour',\n 'literature',\n 'machinery',\n 'mackerel',\n 'mail',\n 'media',\n 'mews',\n 'moose',\n 'music',\n 'mud',\n 'manga',\n 'news',\n 'only',\n 'personnel',\n 'pike',\n 'plankton',\n 'pliers',\n 'police',\n 'pollution',\n 'premises',\n 'rain',\n 'research',\n 'rice',\n 'salmon',\n 'scissors',\n 'series',\n 'sewage',\n 'shambles',\n 'shrimp',\n 'software',\n 'species',\n 'staff',\n 'swine',\n 'tennis',\n 'traffic',\n 'transportation',\n 'trout',\n 'tuna',\n 'wealth',\n 'welfare',\n 'whiting',\n 'wildebeest',\n 'wildlife',\n 'you',\n /pok[eé]mon$/i,\n // Regexes.\n /[^aeiou]ese$/i, // \"chinese\", \"japanese\"\n /deer$/i, // \"deer\", \"reindeer\"\n /fish$/i, // \"fish\", \"blowfish\", \"angelfish\"\n /measles$/i,\n /o[iu]s$/i, // \"carnivorous\"\n /pox$/i, // \"chickpox\", \"smallpox\"\n /sheep$/i\n ].forEach(pluralize.addUncountableRule);\n\n return pluralize;\n});\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","/*!\n* chartjs-plugin-annotation v3.0.1\n* https://www.chartjs.org/chartjs-plugin-annotation/index\n * (c) 2023 chartjs-plugin-annotation Contributors\n * Released under the MIT License\n */\nimport { Element, defaults, Animations, Chart } from 'chart.js';\nimport { distanceBetweenPoints, defined, isFunction, callback, isObject, valueOrDefault, toRadians, isArray, toFont, addRoundedRectPath, toTRBLCorners, QUARTER_PI, PI, HALF_PI, TWO_THIRDS_PI, TAU, isNumber, RAD_PER_DEG, toPadding, isFinite, toDegrees, clipArea, unclipArea } from 'chart.js/helpers';\n\n/**\n * @typedef { import(\"chart.js\").ChartEvent } ChartEvent\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst interaction = {\n modes: {\n /**\n * Point mode returns all elements that hit test based on the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @return {AnnotationElement[]} - elements that are found\n */\n point(state, event) {\n return filterElements(state, event, {intersect: true});\n },\n\n /**\n * Nearest mode returns the element closest to the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found (only 1 element)\n */\n nearest(state, event, options) {\n return getNearestItem(state, event, options);\n },\n /**\n * x mode returns the elements that hit-test at the current x coordinate\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n x(state, event, options) {\n return filterElements(state, event, {intersect: options.intersect, axis: 'x'});\n },\n\n /**\n * y mode returns the elements that hit-test at the current y coordinate\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\n y(state, event, options) {\n return filterElements(state, event, {intersect: options.intersect, axis: 'y'});\n }\n }\n};\n\n/**\n * Returns all elements that hit test based on the event position\n * @param {Object} state - the state of the plugin\n * @param {ChartEvent} event - the event we are find things at\n * @param {Object} options - interaction options to use\n * @return {AnnotationElement[]} - elements that are found\n */\nfunction getElements(state, event, options) {\n const mode = interaction.modes[options.mode] || interaction.modes.nearest;\n return mode(state, event, options);\n}\n\nfunction inRangeByAxis(element, event, axis) {\n if (axis !== 'x' && axis !== 'y') {\n return element.inRange(event.x, event.y, 'x', true) || element.inRange(event.x, event.y, 'y', true);\n }\n return element.inRange(event.x, event.y, axis, true);\n}\n\nfunction getPointByAxis(event, center, axis) {\n if (axis === 'x') {\n return {x: event.x, y: center.y};\n } else if (axis === 'y') {\n return {x: center.x, y: event.y};\n }\n return center;\n}\n\nfunction filterElements(state, event, options) {\n return state.visibleElements.filter((element) => options.intersect ? element.inRange(event.x, event.y) : inRangeByAxis(element, event, options.axis));\n}\n\nfunction getNearestItem(state, event, options) {\n let minDistance = Number.POSITIVE_INFINITY;\n\n return filterElements(state, event, options)\n .reduce((nearestItems, element) => {\n const center = element.getCenterPoint();\n const evenPoint = getPointByAxis(event, center, options.axis);\n const distance = distanceBetweenPoints(event, evenPoint);\n if (distance < minDistance) {\n nearestItems = [element];\n minDistance = distance;\n } else if (distance === minDistance) {\n // Can have multiple items at the same distance in which case we sort by size\n nearestItems.push(element);\n }\n\n return nearestItems;\n }, [])\n .sort((a, b) => a._index - b._index)\n .slice(0, 1); // return only the top item;\n}\n\nconst isOlderPart = (act, req) => req > act || (act.length > req.length && act.slice(0, req.length) === req);\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('chart.js').InteractionAxis } InteractionAxis\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst EPSILON = 0.001;\nconst clamp = (x, from, to) => Math.min(to, Math.max(from, x));\n\n/**\n * @param {Object} obj\n * @param {number} from\n * @param {number} to\n * @returns {Object}\n */\nfunction clampAll(obj, from, to) {\n for (const key of Object.keys(obj)) {\n obj[key] = clamp(obj[key], from, to);\n }\n return obj;\n}\n\n/**\n * @param {Point} point\n * @param {Point} center\n * @param {number} radius\n * @param {number} borderWidth\n * @returns {boolean}\n */\nfunction inPointRange(point, center, radius, borderWidth) {\n if (!point || !center || radius <= 0) {\n return false;\n }\n const hBorderWidth = borderWidth / 2;\n return (Math.pow(point.x - center.x, 2) + Math.pow(point.y - center.y, 2)) <= Math.pow(radius + hBorderWidth, 2);\n}\n\n/**\n * @param {Point} point\n * @param {{x: number, y: number, x2: number, y2: number}} rect\n * @param {InteractionAxis} axis\n * @param {number} borderWidth\n * @returns {boolean}\n */\nfunction inBoxRange(point, {x, y, x2, y2}, axis, borderWidth) {\n const hBorderWidth = borderWidth / 2;\n const inRangeX = point.x >= x - hBorderWidth - EPSILON && point.x <= x2 + hBorderWidth + EPSILON;\n const inRangeY = point.y >= y - hBorderWidth - EPSILON && point.y <= y2 + hBorderWidth + EPSILON;\n if (axis === 'x') {\n return inRangeX;\n } else if (axis === 'y') {\n return inRangeY;\n }\n return inRangeX && inRangeY;\n}\n\n/**\n * @param {AnnotationElement} element\n * @param {boolean} useFinalPosition\n * @returns {Point}\n */\nfunction getElementCenterPoint(element, useFinalPosition) {\n const {centerX, centerY} = element.getProps(['centerX', 'centerY'], useFinalPosition);\n return {x: centerX, y: centerY};\n}\n\n/**\n * @param {string} pkg\n * @param {string} min\n * @param {string} ver\n * @param {boolean} [strict=true]\n * @returns {boolean}\n */\nfunction requireVersion(pkg, min, ver, strict = true) {\n const parts = ver.split('.');\n let i = 0;\n for (const req of min.split('.')) {\n const act = parts[i++];\n if (parseInt(req, 10) < parseInt(act, 10)) {\n break;\n }\n if (isOlderPart(act, req)) {\n if (strict) {\n throw new Error(`${pkg} v${ver} is not supported. v${min} or newer is required.`);\n } else {\n return false;\n }\n }\n }\n return true;\n}\n\nconst isPercentString = (s) => typeof s === 'string' && s.endsWith('%');\nconst toPercent = (s) => parseFloat(s) / 100;\nconst toPositivePercent = (s) => clamp(toPercent(s), 0, 1);\n\nconst boxAppering = (x, y) => ({x, y, x2: x, y2: y, width: 0, height: 0});\nconst defaultInitAnimation = {\n box: (properties) => boxAppering(properties.centerX, properties.centerY),\n ellipse: (properties) => ({centerX: properties.centerX, centerY: properties.centerX, radius: 0, width: 0, height: 0}),\n label: (properties) => boxAppering(properties.centerX, properties.centerY),\n line: (properties) => boxAppering(properties.x, properties.y),\n point: (properties) => ({centerX: properties.centerX, centerY: properties.centerY, radius: 0, width: 0, height: 0}),\n polygon: (properties) => boxAppering(properties.centerX, properties.centerY)\n};\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n * @typedef { import('../../types/options').AnnotationPointCoordinates } AnnotationPointCoordinates\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/label').LabelPositionObject } LabelPositionObject\n */\n\n/**\n * @param {number} size\n * @param {number|string} position\n * @returns {number}\n */\nfunction getRelativePosition(size, position) {\n if (position === 'start') {\n return 0;\n }\n if (position === 'end') {\n return size;\n }\n if (isPercentString(position)) {\n return toPositivePercent(position) * size;\n }\n return size / 2;\n}\n\n/**\n * @param {number} size\n * @param {number|string} value\n * @param {boolean} [positivePercent=true]\n * @returns {number}\n */\nfunction getSize(size, value, positivePercent = true) {\n if (typeof value === 'number') {\n return value;\n } else if (isPercentString(value)) {\n return (positivePercent ? toPositivePercent(value) : toPercent(value)) * size;\n }\n return size;\n}\n\n/**\n * @param {{x: number, width: number}} size\n * @param {CoreLabelOptions} options\n * @returns {number}\n */\nfunction calculateTextAlignment(size, options) {\n const {x, width} = size;\n const textAlign = options.textAlign;\n if (textAlign === 'center') {\n return x + width / 2;\n } else if (textAlign === 'end' || textAlign === 'right') {\n return x + width;\n }\n return x;\n}\n\n/**\n * @param {{x: number|string, y: number|string}|string|number} value\n * @param {string|number} defaultValue\n * @returns {{x: number|string, y: number|string}}\n */\nfunction toPosition(value, defaultValue = 'center') {\n if (isObject(value)) {\n return {\n x: valueOrDefault(value.x, defaultValue),\n y: valueOrDefault(value.y, defaultValue),\n };\n }\n value = valueOrDefault(value, defaultValue);\n return {\n x: value,\n y: value\n };\n}\n\n/**\n * @param {AnnotationPointCoordinates} options\n * @returns {boolean}\n */\nfunction isBoundToPoint(options) {\n return options && (defined(options.xValue) || defined(options.yValue));\n}\n\n/**\n * @param {Chart} chart\n * @param {AnnotationBoxModel} properties\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationElement}\n */\nfunction initAnimationProperties(chart, properties, options) {\n const initAnim = options.init;\n if (!initAnim) {\n return;\n } else if (initAnim === true) {\n return applyDefault(properties, options);\n }\n return execCallback(chart, properties, options);\n}\n\n/**\n * @param {Object} options\n * @param {Array} hooks\n * @param {Object} hooksContainer\n * @returns {boolean}\n */\nfunction loadHooks(options, hooks, hooksContainer) {\n let activated = false;\n hooks.forEach(hook => {\n if (isFunction(options[hook])) {\n activated = true;\n hooksContainer[hook] = options[hook];\n } else if (defined(hooksContainer[hook])) {\n delete hooksContainer[hook];\n }\n });\n return activated;\n}\n\nfunction applyDefault(properties, options) {\n const type = options.type || 'line';\n return defaultInitAnimation[type](properties);\n}\n\nfunction execCallback(chart, properties, options) {\n const result = callback(options.init, [{chart, properties, options}]);\n if (result === true) {\n return applyDefault(properties, options);\n } else if (isObject(result)) {\n return result;\n }\n}\n\nconst widthCache = new Map();\nconst notRadius = (radius) => isNaN(radius) || radius <= 0;\nconst fontsKey = (fonts) => fonts.reduce(function(prev, item) {\n prev += item.string;\n return prev;\n}, '');\n\n/**\n * @typedef { import('chart.js').Point } Point\n * @typedef { import('../../types/label').CoreLabelOptions } CoreLabelOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n */\n\n/**\n * Determine if content is an image or a canvas.\n * @param {*} content\n * @returns boolean|undefined\n * @todo move this function to chart.js helpers\n */\nfunction isImageOrCanvas(content) {\n if (content && typeof content === 'object') {\n const type = content.toString();\n return (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]');\n }\n}\n\n/**\n * Set the translation on the canvas if the rotation must be applied.\n * @param {CanvasRenderingContext2D} ctx - chart canvas context\n * @param {Point} point - the point of translation\n * @param {number} rotation - rotation (in degrees) to apply\n */\nfunction translate(ctx, {x, y}, rotation) {\n if (rotation) {\n ctx.translate(x, y);\n ctx.rotate(toRadians(rotation));\n ctx.translate(-x, -y);\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n * @returns {boolean|undefined}\n */\nfunction setBorderStyle(ctx, options) {\n if (options && options.borderWidth) {\n ctx.lineCap = options.borderCapStyle;\n ctx.setLineDash(options.borderDash);\n ctx.lineDashOffset = options.borderDashOffset;\n ctx.lineJoin = options.borderJoinStyle;\n ctx.lineWidth = options.borderWidth;\n ctx.strokeStyle = options.borderColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {Object} options\n */\nfunction setShadowStyle(ctx, options) {\n ctx.shadowColor = options.backgroundShadowColor;\n ctx.shadowBlur = options.shadowBlur;\n ctx.shadowOffsetX = options.shadowOffsetX;\n ctx.shadowOffsetY = options.shadowOffsetY;\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {CoreLabelOptions} options\n * @returns {{width: number, height: number}}\n */\nfunction measureLabelSize(ctx, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n return {\n width: getSize(content.width, options.width),\n height: getSize(content.height, options.height)\n };\n }\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)];\n const strokeWidth = options.textStrokeWidth;\n const lines = isArray(content) ? content : [content];\n const mapKey = lines.join() + fontsKey(fonts) + strokeWidth + (ctx._measureText ? '-spriting' : '');\n if (!widthCache.has(mapKey)) {\n widthCache.set(mapKey, calculateLabelSize(ctx, lines, fonts, strokeWidth));\n }\n return widthCache.get(mapKey);\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {Object} options\n */\nfunction drawBox(ctx, rect, options) {\n const {x, y, width, height} = rect;\n ctx.save();\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n ctx.fillStyle = options.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x, y, w: width, h: height,\n radius: clampAll(toTRBLCorners(options.borderRadius), 0, Math.min(width, height) / 2)\n });\n ctx.closePath();\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{x: number, y: number, width: number, height: number}} rect\n * @param {CoreLabelOptions} options\n */\nfunction drawLabel(ctx, rect, options) {\n const content = options.content;\n if (isImageOrCanvas(content)) {\n ctx.save();\n ctx.globalAlpha = getOpacity(options.opacity, content.style.opacity);\n ctx.drawImage(content, rect.x, rect.y, rect.width, rect.height);\n ctx.restore();\n return;\n }\n const labels = isArray(content) ? content : [content];\n const optFont = options.font;\n const fonts = isArray(optFont) ? optFont.map(f => toFont(f)) : [toFont(optFont)];\n const optColor = options.color;\n const colors = isArray(optColor) ? optColor : [optColor];\n const x = calculateTextAlignment(rect, options);\n const y = rect.y + options.textStrokeWidth / 2;\n ctx.save();\n ctx.textBaseline = 'middle';\n ctx.textAlign = options.textAlign;\n if (setTextStrokeStyle(ctx, options)) {\n applyLabelDecoration(ctx, {x, y}, labels, fonts);\n }\n applyLabelContent(ctx, {x, y}, labels, {fonts, colors});\n ctx.restore();\n}\n\nfunction setTextStrokeStyle(ctx, options) {\n if (options.textStrokeWidth > 0) {\n // https://stackoverflow.com/questions/13627111/drawing-text-with-an-outer-stroke-with-html5s-canvas\n ctx.lineJoin = 'round';\n ctx.miterLimit = 2;\n ctx.lineWidth = options.textStrokeWidth;\n ctx.strokeStyle = options.textStrokeColor;\n return true;\n }\n}\n\n/**\n * @param {CanvasRenderingContext2D} ctx\n * @param {{radius: number, options: PointAnnotationOptions}} element\n * @param {number} x\n * @param {number} y\n */\nfunction drawPoint(ctx, element, x, y) {\n const {radius, options} = element;\n const style = options.pointStyle;\n const rotation = options.rotation;\n let rad = (rotation || 0) * RAD_PER_DEG;\n\n if (isImageOrCanvas(style)) {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n if (notRadius(radius)) {\n return;\n }\n drawPointStyle(ctx, {x, y, radius, rotation, style, rad});\n}\n\nfunction drawPointStyle(ctx, {x, y, radius, rotation, style, rad}) {\n let xOffset, yOffset, size, cornerRadius;\n ctx.beginPath();\n\n switch (style) {\n // Default includes circle\n default:\n ctx.arc(x, y, radius, 0, TAU);\n ctx.closePath();\n break;\n case 'triangle':\n ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n ctx.rect(x - size, y - size, 2 * size, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */\n case 'rectRot':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + yOffset, y - xOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */\n case 'cross':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'star':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n rad += QUARTER_PI;\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n ctx.moveTo(x + yOffset, y - xOffset);\n ctx.lineTo(x - yOffset, y + xOffset);\n break;\n case 'line':\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);\n break;\n }\n\n ctx.fill();\n}\n\nfunction calculateLabelSize(ctx, lines, fonts, strokeWidth) {\n ctx.save();\n const count = lines.length;\n let width = 0;\n let height = strokeWidth;\n for (let i = 0; i < count; i++) {\n const font = fonts[Math.min(i, fonts.length - 1)];\n ctx.font = font.string;\n const text = lines[i];\n width = Math.max(width, ctx.measureText(text).width + strokeWidth);\n height += font.lineHeight;\n }\n ctx.restore();\n return {width, height};\n}\n\nfunction applyLabelDecoration(ctx, {x, y}, labels, fonts) {\n ctx.beginPath();\n let lhs = 0;\n labels.forEach(function(l, i) {\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.font = f.string;\n ctx.strokeText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n });\n ctx.stroke();\n}\n\nfunction applyLabelContent(ctx, {x, y}, labels, {fonts, colors}) {\n let lhs = 0;\n labels.forEach(function(l, i) {\n const c = colors[Math.min(i, colors.length - 1)];\n const f = fonts[Math.min(i, fonts.length - 1)];\n const lh = f.lineHeight;\n ctx.beginPath();\n ctx.font = f.string;\n ctx.fillStyle = c;\n ctx.fillText(l, x, y + lh / 2 + lhs);\n lhs += lh;\n ctx.fill();\n });\n}\n\nfunction getOpacity(value, elementValue) {\n const opacity = isNumber(value) ? value : elementValue;\n return isNumber(opacity) ? clamp(opacity, 0, 1) : 1;\n}\n\nconst limitedLineScale = {\n xScaleID: {min: 'xMin', max: 'xMax', start: 'left', end: 'right', startProp: 'x', endProp: 'x2'},\n yScaleID: {min: 'yMin', max: 'yMax', start: 'bottom', end: 'top', startProp: 'y', endProp: 'y2'}\n};\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import(\"chart.js\").Point } Point\n * @typedef { import('../../types/element').AnnotationBoxModel } AnnotationBoxModel\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n * @typedef { import('../../types/options').LineAnnotationOptions } LineAnnotationOptions\n * @typedef { import('../../types/options').PointAnnotationOptions } PointAnnotationOptions\n * @typedef { import('../../types/options').PolygonAnnotationOptions } PolygonAnnotationOptions\n */\n\n/**\n * @param {Scale} scale\n * @param {number|string} value\n * @param {number} fallback\n * @returns {number}\n */\nfunction scaleValue(scale, value, fallback) {\n value = typeof value === 'number' ? value : scale.parse(value);\n return isFinite(value) ? scale.getPixelForValue(value) : fallback;\n}\n\n/**\n * Search the scale defined in chartjs by the axis related to the annotation options key.\n * @param {{ [key: string]: Scale }} scales\n * @param {CoreAnnotationOptions} options\n * @param {string} key\n * @returns {string}\n */\nfunction retrieveScaleID(scales, options, key) {\n const scaleID = options[key];\n if (scaleID || key === 'scaleID') {\n return scaleID;\n }\n const axis = key.charAt(0);\n const axes = Object.values(scales).filter((scale) => scale.axis && scale.axis === axis);\n if (axes.length) {\n return axes[0].id;\n }\n return axis;\n}\n\n/**\n * @param {Scale} scale\n * @param {{min: number, max: number, start: number, end: number}} options\n * @returns {{start: number, end: number}|undefined}\n */\nfunction getDimensionByScale(scale, options) {\n if (scale) {\n const reverse = scale.options.reverse;\n const start = scaleValue(scale, options.min, reverse ? options.end : options.start);\n const end = scaleValue(scale, options.max, reverse ? options.start : options.end);\n return {\n start,\n end\n };\n }\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {Point}\n */\nfunction getChartPoint(chart, options) {\n const {chartArea, scales} = chart;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n let x = chartArea.width / 2;\n let y = chartArea.height / 2;\n\n if (xScale) {\n x = scaleValue(xScale, options.xValue, xScale.left + xScale.width / 2);\n }\n\n if (yScale) {\n y = scaleValue(yScale, options.yValue, yScale.top + yScale.height / 2);\n }\n return {x, y};\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxProperties(chart, options) {\n const scales = chart.scales;\n const xScale = scales[retrieveScaleID(scales, options, 'xScaleID')];\n const yScale = scales[retrieveScaleID(scales, options, 'yScaleID')];\n\n if (!xScale && !yScale) {\n return {};\n }\n\n let {left: x, right: x2} = xScale || chart.chartArea;\n let {top: y, bottom: y2} = yScale || chart.chartArea;\n const xDim = getChartDimensionByScale(xScale, {min: options.xMin, max: options.xMax, start: x, end: x2});\n x = xDim.start;\n x2 = xDim.end;\n const yDim = getChartDimensionByScale(yScale, {min: options.yMin, max: options.yMax, start: y2, end: y});\n y = yDim.start;\n y2 = yDim.end;\n\n return {\n x,\n y,\n x2,\n y2,\n width: x2 - x,\n height: y2 - y,\n centerX: x + (x2 - x) / 2,\n centerY: y + (y2 - y) / 2\n };\n}\n\n/**\n * @param {Chart} chart\n * @param {PointAnnotationOptions|PolygonAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolvePointProperties(chart, options) {\n if (!isBoundToPoint(options)) {\n const box = resolveBoxProperties(chart, options);\n let radius = options.radius;\n if (!radius || isNaN(radius)) {\n radius = Math.min(box.width, box.height) / 2;\n options.radius = radius;\n }\n const size = radius * 2;\n const adjustCenterX = box.centerX + options.xAdjust;\n const adjustCenterY = box.centerY + options.yAdjust;\n return {\n x: adjustCenterX - radius,\n y: adjustCenterY - radius,\n x2: adjustCenterX + radius,\n y2: adjustCenterY + radius,\n centerX: adjustCenterX,\n centerY: adjustCenterY,\n width: size,\n height: size,\n radius\n };\n }\n return getChartCircle(chart, options);\n}\n/**\n * @param {Chart} chart\n * @param {LineAnnotationOptions} options\n * @returns {AnnotationBoxModel}\n */\nfunction resolveLineProperties(chart, options) {\n const {scales, chartArea} = chart;\n const scale = scales[options.scaleID];\n const area = {x: chartArea.left, y: chartArea.top, x2: chartArea.right, y2: chartArea.bottom};\n\n if (scale) {\n resolveFullLineProperties(scale, area, options);\n } else {\n resolveLimitedLineProperties(scales, area, options);\n }\n return area;\n}\n\n/**\n * @param {Chart} chart\n * @param {CoreAnnotationOptions} options\n * @param {boolean} [centerBased=false]\n * @returns {AnnotationBoxModel}\n */\nfunction resolveBoxAndLabelProperties(chart, options) {\n const properties = resolveBoxProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options);\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: resolveLabelElementProperties$1(chart, properties, options),\n initProperties: properties.initProperties\n }];\n return properties;\n}\n\nfunction getChartCircle(chart, options) {\n const point = getChartPoint(chart, options);\n const size = options.radius * 2;\n return {\n x: point.x - options.radius + options.xAdjust,\n y: point.y - options.radius + options.yAdjust,\n x2: point.x + options.radius + options.xAdjust,\n y2: point.y + options.radius + options.yAdjust,\n centerX: point.x + options.xAdjust,\n centerY: point.y + options.yAdjust,\n radius: options.radius,\n width: size,\n height: size\n };\n}\n\nfunction getChartDimensionByScale(scale, options) {\n const result = getDimensionByScale(scale, options) || options;\n return {\n start: Math.min(result.start, result.end),\n end: Math.max(result.start, result.end)\n };\n}\n\nfunction resolveFullLineProperties(scale, area, options) {\n const min = scaleValue(scale, options.value, NaN);\n const max = scaleValue(scale, options.endValue, min);\n if (scale.isHorizontal()) {\n area.x = min;\n area.x2 = max;\n } else {\n area.y = min;\n area.y2 = max;\n }\n}\n\nfunction resolveLimitedLineProperties(scales, area, options) {\n for (const scaleId of Object.keys(limitedLineScale)) {\n const scale = scales[retrieveScaleID(scales, options, scaleId)];\n if (scale) {\n const {min, max, start, end, startProp, endProp} = limitedLineScale[scaleId];\n const dim = getDimensionByScale(scale, {min: options[min], max: options[max], start: scale[start], end: scale[end]});\n area[startProp] = dim.start;\n area[endProp] = dim.end;\n }\n }\n}\n\nfunction calculateX({properties, options}, labelSize, position, padding) {\n const {x: start, x2: end, width: size} = properties;\n return calculatePosition$1({start, end, size, borderWidth: options.borderWidth}, {\n position: position.x,\n padding: {start: padding.left, end: padding.right},\n adjust: options.label.xAdjust,\n size: labelSize.width\n });\n}\n\nfunction calculateY({properties, options}, labelSize, position, padding) {\n const {y: start, y2: end, height: size} = properties;\n return calculatePosition$1({start, end, size, borderWidth: options.borderWidth}, {\n position: position.y,\n padding: {start: padding.top, end: padding.bottom},\n adjust: options.label.yAdjust,\n size: labelSize.height\n });\n}\n\nfunction calculatePosition$1(boxOpts, labelOpts) {\n const {start, end, borderWidth} = boxOpts;\n const {position, padding: {start: padStart, end: padEnd}, adjust} = labelOpts;\n const availableSize = end - borderWidth - start - padStart - padEnd - labelOpts.size;\n return start + borderWidth / 2 + adjust + getRelativePosition(availableSize, position);\n}\n\nfunction resolveLabelElementProperties$1(chart, properties, options) {\n const label = options.label;\n label.backgroundColor = 'transparent';\n label.callout.display = false;\n const position = toPosition(label.position);\n const padding = toPadding(label.padding);\n const labelSize = measureLabelSize(chart.ctx, label);\n const x = calculateX({properties, options}, labelSize, position, padding);\n const y = calculateY({properties, options}, labelSize, position, padding);\n const width = labelSize.width + padding.width;\n const height = labelSize.height + padding.height;\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2,\n rotation: label.rotation\n };\n\n}\n\n/**\n * @typedef {import('chart.js').Point} Point\n */\n\n/**\n * Rotate a `point` relative to `center` point by `angle`\n * @param {Point} point - the point to rotate\n * @param {Point} center - center point for rotation\n * @param {number} angle - angle for rotation, in radians\n * @returns {Point} rotated point\n */\nfunction rotated(point, center, angle) {\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const cx = center.x;\n const cy = center.y;\n\n return {\n x: cx + cos * (point.x - cx) - sin * (point.y - cy),\n y: cy + sin * (point.x - cx) + cos * (point.y - cy)\n };\n}\n\nconst moveHooks = ['enter', 'leave'];\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\nconst eventHooks = moveHooks.concat('click');\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateListeners(chart, state, options) {\n state.listened = loadHooks(options, eventHooks, state.listeners);\n state.moveListened = false;\n state._getElements = getElements; // for testing\n\n moveHooks.forEach(hook => {\n if (isFunction(options[hook])) {\n state.moveListened = true;\n }\n });\n\n if (!state.listened || !state.moveListened) {\n state.annotations.forEach(scope => {\n if (!state.listened && isFunction(scope.click)) {\n state.listened = true;\n }\n if (!state.moveListened) {\n moveHooks.forEach(hook => {\n if (isFunction(scope[hook])) {\n state.listened = true;\n state.moveListened = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {ChartEvent} event\n * @param {AnnotationPluginOptions} options\n * @return {boolean|undefined}\n */\nfunction handleEvent(state, event, options) {\n if (state.listened) {\n switch (event.type) {\n case 'mousemove':\n case 'mouseout':\n return handleMoveEvents(state, event, options);\n case 'click':\n return handleClickEvents(state, event, options);\n }\n }\n}\n\nfunction handleMoveEvents(state, event, options) {\n if (!state.moveListened) {\n return;\n }\n\n let elements;\n\n if (event.type === 'mousemove') {\n elements = getElements(state, event, options.interaction);\n } else {\n elements = [];\n }\n\n const previous = state.hovered;\n state.hovered = elements;\n\n const context = {state, event};\n let changed = dispatchMoveEvents(context, 'leave', previous, elements);\n return dispatchMoveEvents(context, 'enter', elements, previous) || changed;\n}\n\nfunction dispatchMoveEvents({state, event}, hook, elements, checkElements) {\n let changed;\n for (const element of elements) {\n if (checkElements.indexOf(element) < 0) {\n changed = dispatchEvent(element.options[hook] || state.listeners[hook], element, event) || changed;\n }\n }\n return changed;\n}\n\nfunction handleClickEvents(state, event, options) {\n const listeners = state.listeners;\n const elements = getElements(state, event, options.interaction);\n let changed;\n for (const element of elements) {\n changed = dispatchEvent(element.options.click || listeners.click, element, event) || changed;\n }\n return changed;\n}\n\nfunction dispatchEvent(handler, element, event) {\n return callback(handler, [element.$context, event]) === true;\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n * @typedef { import('../../types/element').AnnotationElement } AnnotationElement\n */\n\nconst elementHooks = ['afterDraw', 'beforeDraw'];\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n */\nfunction updateHooks(chart, state, options) {\n const visibleElements = state.visibleElements;\n state.hooked = loadHooks(options, elementHooks, state.hooks);\n\n if (!state.hooked) {\n visibleElements.forEach(scope => {\n if (!state.hooked) {\n elementHooks.forEach(hook => {\n if (isFunction(scope.options[hook])) {\n state.hooked = true;\n }\n });\n }\n });\n }\n}\n\n/**\n * @param {Object} state\n * @param {AnnotationElement} element\n * @param {string} hook\n */\nfunction invokeHook(state, element, hook) {\n if (state.hooked) {\n const callbackHook = element.options[hook] || state.hooks[hook];\n return callback(callbackHook, [element.$context]);\n }\n}\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").Scale } Scale\n * @typedef { import('../../types/options').CoreAnnotationOptions } CoreAnnotationOptions\n */\n\n/**\n * @param {Chart} chart\n * @param {Scale} scale\n * @param {CoreAnnotationOptions[]} annotations\n */\nfunction adjustScaleRange(chart, scale, annotations) {\n const range = getScaleLimits(chart.scales, scale, annotations);\n let changed = changeScaleLimit(scale, range, 'min', 'suggestedMin');\n changed = changeScaleLimit(scale, range, 'max', 'suggestedMax') || changed;\n if (changed && isFunction(scale.handleTickRangeOptions)) {\n scale.handleTickRangeOptions();\n }\n}\n\n/**\n * @param {CoreAnnotationOptions[]} annotations\n * @param {{ [key: string]: Scale }} scales\n */\nfunction verifyScaleOptions(annotations, scales) {\n for (const annotation of annotations) {\n verifyScaleIDs(annotation, scales);\n }\n}\n\nfunction changeScaleLimit(scale, range, limit, suggestedLimit) {\n if (isFinite(range[limit]) && !scaleLimitDefined(scale.options, limit, suggestedLimit)) {\n const changed = scale[limit] !== range[limit];\n scale[limit] = range[limit];\n return changed;\n }\n}\n\nfunction scaleLimitDefined(scaleOptions, limit, suggestedLimit) {\n return defined(scaleOptions[limit]) || defined(scaleOptions[suggestedLimit]);\n}\n\nfunction verifyScaleIDs(annotation, scales) {\n for (const key of ['scaleID', 'xScaleID', 'yScaleID']) {\n const scaleID = retrieveScaleID(scales, annotation, key);\n if (scaleID && !scales[scaleID] && verifyProperties(annotation, key)) {\n console.warn(`No scale found with id '${scaleID}' for annotation '${annotation.id}'`);\n }\n }\n}\n\nfunction verifyProperties(annotation, key) {\n if (key === 'scaleID') {\n return true;\n }\n const axis = key.charAt(0);\n for (const prop of ['Min', 'Max', 'Value']) {\n if (defined(annotation[axis + prop])) {\n return true;\n }\n }\n return false;\n}\n\nfunction getScaleLimits(scales, scale, annotations) {\n const axis = scale.axis;\n const scaleID = scale.id;\n const scaleIDOption = axis + 'ScaleID';\n const limits = {\n min: valueOrDefault(scale.min, Number.NEGATIVE_INFINITY),\n max: valueOrDefault(scale.max, Number.POSITIVE_INFINITY)\n };\n for (const annotation of annotations) {\n if (annotation.scaleID === scaleID) {\n updateLimits(annotation, scale, ['value', 'endValue'], limits);\n } else if (retrieveScaleID(scales, annotation, scaleIDOption) === scaleID) {\n updateLimits(annotation, scale, [axis + 'Min', axis + 'Max', axis + 'Value'], limits);\n }\n }\n return limits;\n}\n\nfunction updateLimits(annotation, scale, props, limits) {\n for (const prop of props) {\n const raw = annotation[prop];\n if (defined(raw)) {\n const value = scale.parse(raw);\n limits.min = Math.min(limits.min, value);\n limits.max = Math.max(limits.max, value);\n }\n }\n}\n\nclass BoxAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.options.rotation);\n drawBox(ctx, this, this.options);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n}\n\nBoxAnnotation.id = 'boxAnnotation';\n\nBoxAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n label: {\n backgroundColor: 'transparent',\n borderWidth: 0,\n callout: {\n display: false\n },\n color: 'black',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: undefined,\n textAlign: 'start',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nBoxAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nBoxAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nconst positions = ['left', 'bottom', 'top', 'right'];\n\nclass LabelAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y} = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.rotation));\n return inBoxRange({x, y}, this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis, this.options.borderWidth);\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const visible = !defined(this._visible) || this._visible;\n if (!options.display || !options.content || !visible) {\n return;\n }\n ctx.save();\n translate(ctx, this.getCenterPoint(), this.rotation);\n drawCallout(ctx, this);\n drawBox(ctx, this, options);\n drawLabel(ctx, getLabelSize(this), options);\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n let point;\n if (!isBoundToPoint(options)) {\n const {centerX, centerY} = resolveBoxProperties(chart, options);\n point = {x: centerX, y: centerY};\n } else {\n point = getChartPoint(chart, options);\n }\n const padding = toPadding(options.padding);\n const labelSize = measureLabelSize(chart.ctx, options);\n const boxSize = measureRect(point, labelSize, options, padding);\n return {\n initProperties: initAnimationProperties(chart, boxSize, options),\n pointX: point.x,\n pointY: point.y,\n ...boxSize,\n rotation: options.rotation\n };\n }\n}\n\nLabelAnnotation.id = 'labelAnnotation';\n\nLabelAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundColor: 'transparent',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 0,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: {\n borderCapStyle: 'butt',\n borderColor: undefined,\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 1,\n display: false,\n margin: 5,\n position: 'auto',\n side: 5,\n start: '50%',\n },\n color: 'black',\n content: null,\n display: true,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: undefined\n },\n height: undefined,\n init: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nLabelAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction measureRect(point, size, options, padding) {\n const width = size.width + padding.width + options.borderWidth;\n const height = size.height + padding.height + options.borderWidth;\n const position = toPosition(options.position, 'center');\n const x = calculatePosition(point.x, width, options.xAdjust, position.x);\n const y = calculatePosition(point.y, height, options.yAdjust, position.y);\n\n return {\n x,\n y,\n x2: x + width,\n y2: y + height,\n width,\n height,\n centerX: x + width / 2,\n centerY: y + height / 2\n };\n}\n\nfunction calculatePosition(start, size, adjust = 0, position) {\n return start - getRelativePosition(size, position) + adjust;\n}\n\nfunction drawCallout(ctx, element) {\n const {pointX, pointY, options} = element;\n const callout = options.callout;\n const calloutPosition = callout && callout.display && resolveCalloutPosition(element, callout);\n if (!calloutPosition || isPointInRange(element, callout, calloutPosition)) {\n return;\n }\n\n ctx.save();\n ctx.beginPath();\n const stroke = setBorderStyle(ctx, callout);\n if (!stroke) {\n return ctx.restore();\n }\n const {separatorStart, separatorEnd} = getCalloutSeparatorCoord(element, calloutPosition);\n const {sideStart, sideEnd} = getCalloutSideCoord(element, calloutPosition, separatorStart);\n if (callout.margin > 0 || options.borderWidth === 0) {\n ctx.moveTo(separatorStart.x, separatorStart.y);\n ctx.lineTo(separatorEnd.x, separatorEnd.y);\n }\n ctx.moveTo(sideStart.x, sideStart.y);\n ctx.lineTo(sideEnd.x, sideEnd.y);\n const rotatedPoint = rotated({x: pointX, y: pointY}, element.getCenterPoint(), toRadians(-element.rotation));\n ctx.lineTo(rotatedPoint.x, rotatedPoint.y);\n ctx.stroke();\n ctx.restore();\n}\n\nfunction getCalloutSeparatorCoord(element, position) {\n const {x, y, x2, y2} = element;\n const adjust = getCalloutSeparatorAdjust(element, position);\n let separatorStart, separatorEnd;\n if (position === 'left' || position === 'right') {\n separatorStart = {x: x + adjust, y};\n separatorEnd = {x: separatorStart.x, y: y2};\n } else {\n // position 'top' or 'bottom'\n separatorStart = {x, y: y + adjust};\n separatorEnd = {x: x2, y: separatorStart.y};\n }\n return {separatorStart, separatorEnd};\n}\n\nfunction getCalloutSeparatorAdjust(element, position) {\n const {width, height, options} = element;\n const adjust = options.callout.margin + options.borderWidth / 2;\n if (position === 'right') {\n return width + adjust;\n } else if (position === 'bottom') {\n return height + adjust;\n }\n return -adjust;\n}\n\nfunction getCalloutSideCoord(element, position, separatorStart) {\n const {y, width, height, options} = element;\n const start = options.callout.start;\n const side = getCalloutSideAdjust(position, options.callout);\n let sideStart, sideEnd;\n if (position === 'left' || position === 'right') {\n sideStart = {x: separatorStart.x, y: y + getSize(height, start)};\n sideEnd = {x: sideStart.x + side, y: sideStart.y};\n } else {\n // position 'top' or 'bottom'\n sideStart = {x: separatorStart.x + getSize(width, start), y: separatorStart.y};\n sideEnd = {x: sideStart.x, y: sideStart.y + side};\n }\n return {sideStart, sideEnd};\n}\n\nfunction getCalloutSideAdjust(position, options) {\n const side = options.side;\n if (position === 'left' || position === 'top') {\n return -side;\n }\n return side;\n}\n\nfunction resolveCalloutPosition(element, options) {\n const position = options.position;\n if (positions.includes(position)) {\n return position;\n }\n return resolveCalloutAutoPosition(element, options);\n}\n\nfunction resolveCalloutAutoPosition(element, options) {\n const {x, y, x2, y2, width, height, pointX, pointY, centerX, centerY, rotation} = element;\n const center = {x: centerX, y: centerY};\n const start = options.start;\n const xAdjust = getSize(width, start);\n const yAdjust = getSize(height, start);\n const xPoints = [x, x + xAdjust, x + xAdjust, x2];\n const yPoints = [y + yAdjust, y2, y, y2];\n const result = [];\n for (let index = 0; index < 4; index++) {\n const rotatedPoint = rotated({x: xPoints[index], y: yPoints[index]}, center, toRadians(rotation));\n result.push({\n position: positions[index],\n distance: distanceBetweenPoints(rotatedPoint, {x: pointX, y: pointY})\n });\n }\n return result.sort((a, b) => a.distance - b.distance)[0].position;\n}\n\nfunction getLabelSize({x, y, width, height, options}) {\n const hBorderWidth = options.borderWidth / 2;\n const padding = toPadding(options.padding);\n return {\n x: x + padding.left + hBorderWidth,\n y: y + padding.top + hBorderWidth,\n width: width - padding.left - padding.right - options.borderWidth,\n height: height - padding.top - padding.bottom - options.borderWidth\n };\n}\n\nfunction isPointInRange(element, callout, position) {\n const {pointX, pointY} = element;\n const margin = callout.margin;\n let x = pointX;\n let y = pointY;\n if (position === 'left') {\n x += margin;\n } else if (position === 'right') {\n x -= margin;\n } else if (position === 'top') {\n y += margin;\n } else if (position === 'bottom') {\n y -= margin;\n }\n return element.inRange(x, y);\n}\n\nconst pointInLine = (p1, p2, t) => ({x: p1.x + t * (p2.x - p1.x), y: p1.y + t * (p2.y - p1.y)});\nconst interpolateX = (y, p1, p2) => pointInLine(p1, p2, Math.abs((y - p1.y) / (p2.y - p1.y))).x;\nconst interpolateY = (x, p1, p2) => pointInLine(p1, p2, Math.abs((x - p1.x) / (p2.x - p1.x))).y;\nconst sqr = v => v * v;\nconst rangeLimit = (mouseX, mouseY, {x, y, x2, y2}, axis) => axis === 'y' ? {start: Math.min(y, y2), end: Math.max(y, y2), value: mouseY} : {start: Math.min(x, x2), end: Math.max(x, x2), value: mouseX};\n// http://www.independent-software.com/determining-coordinates-on-a-html-canvas-bezier-curve.html\nconst coordInCurve = (start, cp, end, t) => (1 - t) * (1 - t) * start + 2 * (1 - t) * t * cp + t * t * end;\nconst pointInCurve = (start, cp, end, t) => ({x: coordInCurve(start.x, cp.x, end.x, t), y: coordInCurve(start.y, cp.y, end.y, t)});\nconst coordAngleInCurve = (start, cp, end, t) => 2 * (1 - t) * (cp - start) + 2 * t * (end - cp);\nconst angleInCurve = (start, cp, end, t) => -Math.atan2(coordAngleInCurve(start.x, cp.x, end.x, t), coordAngleInCurve(start.y, cp.y, end.y, t)) + 0.5 * PI;\n\nclass LineAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const hBorderWidth = this.options.borderWidth / 2;\n if (axis !== 'x' && axis !== 'y') {\n const point = {mouseX, mouseY};\n const {path, ctx} = this;\n if (path) {\n setBorderStyle(ctx, this.options);\n const {chart} = this.$context;\n const mx = mouseX * chart.currentDevicePixelRatio;\n const my = mouseY * chart.currentDevicePixelRatio;\n const result = ctx.isPointInStroke(path, mx, my) || isOnLabel(this, point, useFinalPosition);\n ctx.restore();\n return result;\n }\n const epsilon = sqr(hBorderWidth);\n return intersects(this, point, epsilon, useFinalPosition) || isOnLabel(this, point, useFinalPosition);\n }\n return inAxisRange(this, {mouseX, mouseY}, axis, {hBorderWidth, useFinalPosition});\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {x, y, x2, y2, cp, options} = this;\n\n ctx.save();\n if (!setBorderStyle(ctx, options)) {\n // no border width, then line is not drawn\n return ctx.restore();\n }\n setShadowStyle(ctx, options);\n\n const length = Math.sqrt(Math.pow(x2 - x, 2) + Math.pow(y2 - y, 2));\n if (options.curve && cp) {\n drawCurve(ctx, this, cp, length);\n return ctx.restore();\n }\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(this);\n const angle = Math.atan2(y2 - y, x2 - x);\n ctx.translate(x, y);\n ctx.rotate(angle);\n ctx.beginPath();\n ctx.moveTo(0 + startAdjust, 0);\n ctx.lineTo(length - endAdjust, 0);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n drawArrowHead(ctx, 0, startAdjust, startOpts);\n drawArrowHead(ctx, length, -endAdjust, endOpts);\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n const area = resolveLineProperties(chart, options);\n const {x, y, x2, y2} = area;\n const inside = isLineInArea(area, chart.chartArea);\n const properties = inside\n ? limitLineToArea({x, y}, {x: x2, y: y2}, chart.chartArea)\n : {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n properties.centerX = (x2 + x) / 2;\n properties.centerY = (y2 + y) / 2;\n properties.initProperties = initAnimationProperties(chart, properties, options);\n if (options.curve) {\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n properties.cp = getControlPoint(properties, options, distanceBetweenPoints(p1, p2));\n }\n const labelProperties = resolveLabelElementProperties(chart, properties, options.label);\n // additonal prop to manage zoom/pan\n labelProperties._visible = inside;\n\n properties.elements = [{\n type: 'label',\n optionScope: 'label',\n properties: labelProperties,\n initProperties: properties.initProperties\n }];\n return properties;\n }\n}\n\nLineAnnotation.id = 'lineAnnotation';\n\nconst arrowHeadsDefaults = {\n backgroundColor: undefined,\n backgroundShadowColor: undefined,\n borderColor: undefined,\n borderDash: undefined,\n borderDashOffset: undefined,\n borderShadowColor: undefined,\n borderWidth: undefined,\n display: undefined,\n fill: undefined,\n length: undefined,\n shadowBlur: undefined,\n shadowOffsetX: undefined,\n shadowOffsetY: undefined,\n width: undefined\n};\n\nLineAnnotation.defaults = {\n adjustScaleRange: true,\n arrowHeads: {\n display: false,\n end: Object.assign({}, arrowHeadsDefaults),\n fill: false,\n length: 12,\n start: Object.assign({}, arrowHeadsDefaults),\n width: 6\n },\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 2,\n curve: false,\n controlPoint: {\n y: '-50%'\n },\n display: true,\n endValue: undefined,\n init: undefined,\n label: {\n backgroundColor: 'rgba(0,0,0,0.8)',\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderColor: 'black',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderRadius: 6,\n borderShadowColor: 'transparent',\n borderWidth: 0,\n callout: Object.assign({}, LabelAnnotation.defaults.callout),\n color: '#fff',\n content: null,\n display: false,\n drawTime: undefined,\n font: {\n family: undefined,\n lineHeight: undefined,\n size: undefined,\n style: undefined,\n weight: 'bold'\n },\n height: undefined,\n opacity: undefined,\n padding: 6,\n position: 'center',\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n textAlign: 'center',\n textStrokeColor: undefined,\n textStrokeWidth: 0,\n width: undefined,\n xAdjust: 0,\n yAdjust: 0,\n z: undefined\n },\n scaleID: undefined,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n value: undefined,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nLineAnnotation.descriptors = {\n arrowHeads: {\n start: {\n _fallback: true\n },\n end: {\n _fallback: true\n },\n _fallback: true\n }\n};\n\nLineAnnotation.defaultRoutes = {\n borderColor: 'color'\n};\n\nfunction inAxisRange(element, {mouseX, mouseY}, axis, {hBorderWidth, useFinalPosition}) {\n const limit = rangeLimit(mouseX, mouseY, element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition), axis);\n return (limit.value >= limit.start - hBorderWidth && limit.value <= limit.end + hBorderWidth) || isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis);\n}\n\nfunction isLineInArea({x, y, x2, y2}, {top, right, bottom, left}) {\n return !(\n (x < left && x2 < left) ||\n (x > right && x2 > right) ||\n (y < top && y2 < top) ||\n (y > bottom && y2 > bottom)\n );\n}\n\nfunction limitPointToArea({x, y}, p2, {top, right, bottom, left}) {\n if (x < left) {\n y = interpolateY(left, {x, y}, p2);\n x = left;\n }\n if (x > right) {\n y = interpolateY(right, {x, y}, p2);\n x = right;\n }\n if (y < top) {\n x = interpolateX(top, {x, y}, p2);\n y = top;\n }\n if (y > bottom) {\n x = interpolateX(bottom, {x, y}, p2);\n y = bottom;\n }\n return {x, y};\n}\n\nfunction limitLineToArea(p1, p2, area) {\n const {x, y} = limitPointToArea(p1, p2, area);\n const {x: x2, y: y2} = limitPointToArea(p2, p1, area);\n return {x, y, x2, y2, width: Math.abs(x2 - x), height: Math.abs(y2 - y)};\n}\n\nfunction intersects(element, {mouseX, mouseY}, epsilon = EPSILON, useFinalPosition) {\n // Adapted from https://stackoverflow.com/a/6853926/25507\n const {x: x1, y: y1, x2, y2} = element.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const dx = x2 - x1;\n const dy = y2 - y1;\n const lenSq = sqr(dx) + sqr(dy);\n const t = lenSq === 0 ? -1 : ((mouseX - x1) * dx + (mouseY - y1) * dy) / lenSq;\n let xx, yy;\n if (t < 0) {\n xx = x1;\n yy = y1;\n } else if (t > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + t * dx;\n yy = y1 + t * dy;\n }\n return (sqr(mouseX - xx) + sqr(mouseY - yy)) <= epsilon;\n}\n\nfunction isOnLabel(element, {mouseX, mouseY}, useFinalPosition, axis) {\n const label = element.label;\n return label.options.display && label.inRange(mouseX, mouseY, axis, useFinalPosition);\n}\n\nfunction resolveLabelElementProperties(chart, properties, options) {\n const borderWidth = options.borderWidth;\n const padding = toPadding(options.padding);\n const textSize = measureLabelSize(chart.ctx, options);\n const width = textSize.width + padding.width + borderWidth;\n const height = textSize.height + padding.height + borderWidth;\n return calculateLabelPosition(properties, options, {width, height, padding}, chart.chartArea);\n}\n\nfunction calculateAutoRotation(properties) {\n const {x, y, x2, y2} = properties;\n const rotation = Math.atan2(y2 - y, x2 - x);\n // Flip the rotation if it goes > PI/2 or < -PI/2, so label stays upright\n return rotation > PI / 2 ? rotation - PI : rotation < PI / -2 ? rotation + PI : rotation;\n}\n\nfunction calculateLabelPosition(properties, label, sizes, chartArea) {\n const {width, height, padding} = sizes;\n const {xAdjust, yAdjust} = label;\n const p1 = {x: properties.x, y: properties.y};\n const p2 = {x: properties.x2, y: properties.y2};\n const rotation = label.rotation === 'auto' ? calculateAutoRotation(properties) : toRadians(label.rotation);\n const size = rotatedSize(width, height, rotation);\n const t = calculateT(properties, label, {labelSize: size, padding}, chartArea);\n const pt = properties.cp ? pointInCurve(p1, properties.cp, p2, t) : pointInLine(p1, p2, t);\n const xCoordinateSizes = {size: size.w, min: chartArea.left, max: chartArea.right, padding: padding.left};\n const yCoordinateSizes = {size: size.h, min: chartArea.top, max: chartArea.bottom, padding: padding.top};\n const centerX = adjustLabelCoordinate(pt.x, xCoordinateSizes) + xAdjust;\n const centerY = adjustLabelCoordinate(pt.y, yCoordinateSizes) + yAdjust;\n return {\n x: centerX - (width / 2),\n y: centerY - (height / 2),\n x2: centerX + (width / 2),\n y2: centerY + (height / 2),\n centerX,\n centerY,\n pointX: pt.x,\n pointY: pt.y,\n width,\n height,\n rotation: toDegrees(rotation)\n };\n}\n\nfunction rotatedSize(width, height, rotation) {\n const cos = Math.cos(rotation);\n const sin = Math.sin(rotation);\n return {\n w: Math.abs(width * cos) + Math.abs(height * sin),\n h: Math.abs(width * sin) + Math.abs(height * cos)\n };\n}\n\nfunction calculateT(properties, label, sizes, chartArea) {\n let t;\n const space = spaceAround(properties, chartArea);\n if (label.position === 'start') {\n t = calculateTAdjust({w: properties.x2 - properties.x, h: properties.y2 - properties.y}, sizes, label, space);\n } else if (label.position === 'end') {\n t = 1 - calculateTAdjust({w: properties.x - properties.x2, h: properties.y - properties.y2}, sizes, label, space);\n } else {\n t = getRelativePosition(1, label.position);\n }\n return t;\n}\n\nfunction calculateTAdjust(lineSize, sizes, label, space) {\n const {labelSize, padding} = sizes;\n const lineW = lineSize.w * space.dx;\n const lineH = lineSize.h * space.dy;\n const x = (lineW > 0) && ((labelSize.w / 2 + padding.left - space.x) / lineW);\n const y = (lineH > 0) && ((labelSize.h / 2 + padding.top - space.y) / lineH);\n return clamp(Math.max(x, y), 0, 0.25);\n}\n\nfunction spaceAround(properties, chartArea) {\n const {x, x2, y, y2} = properties;\n const t = Math.min(y, y2) - chartArea.top;\n const l = Math.min(x, x2) - chartArea.left;\n const b = chartArea.bottom - Math.max(y, y2);\n const r = chartArea.right - Math.max(x, x2);\n return {\n x: Math.min(l, r),\n y: Math.min(t, b),\n dx: l <= r ? 1 : -1,\n dy: t <= b ? 1 : -1\n };\n}\n\nfunction adjustLabelCoordinate(coordinate, labelSizes) {\n const {size, min, max, padding} = labelSizes;\n const halfSize = size / 2;\n if (size > max - min) {\n // if it does not fit, display as much as possible\n return (max + min) / 2;\n }\n if (min >= (coordinate - padding - halfSize)) {\n coordinate = min + padding + halfSize;\n }\n if (max <= (coordinate + padding + halfSize)) {\n coordinate = max - padding - halfSize;\n }\n return coordinate;\n}\n\nfunction getArrowHeads(line) {\n const options = line.options;\n const arrowStartOpts = options.arrowHeads && options.arrowHeads.start;\n const arrowEndOpts = options.arrowHeads && options.arrowHeads.end;\n return {\n startOpts: arrowStartOpts,\n endOpts: arrowEndOpts,\n startAdjust: getLineAdjust(line, arrowStartOpts),\n endAdjust: getLineAdjust(line, arrowEndOpts)\n };\n}\n\nfunction getLineAdjust(line, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return 0;\n }\n const {length, width} = arrowOpts;\n const adjust = line.options.borderWidth / 2;\n const p1 = {x: length, y: width + adjust};\n const p2 = {x: 0, y: adjust};\n return Math.abs(interpolateX(0, p1, p2));\n}\n\nfunction drawArrowHead(ctx, offset, adjust, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n const {length, width, fill, backgroundColor, borderColor} = arrowOpts;\n const arrowOffsetX = Math.abs(offset - length) + adjust;\n ctx.beginPath();\n setShadowStyle(ctx, arrowOpts);\n setBorderStyle(ctx, arrowOpts);\n ctx.moveTo(arrowOffsetX, -width);\n ctx.lineTo(offset + adjust, 0);\n ctx.lineTo(arrowOffsetX, width);\n if (fill === true) {\n ctx.fillStyle = backgroundColor || borderColor;\n ctx.closePath();\n ctx.fill();\n ctx.shadowColor = 'transparent';\n } else {\n ctx.shadowColor = arrowOpts.borderShadowColor;\n }\n ctx.stroke();\n}\n\nfunction getControlPoint(properties, options, distance) {\n const {x, y, x2, y2, centerX, centerY} = properties;\n const angle = Math.atan2(y2 - y, x2 - x);\n const cp = toPosition(options.controlPoint, 0);\n const point = {\n x: centerX + getSize(distance, cp.x, false),\n y: centerY + getSize(distance, cp.y, false)\n };\n return rotated(point, {x: centerX, y: centerY}, angle);\n}\n\nfunction drawArrowHeadOnCurve(ctx, {x, y}, {angle, adjust}, arrowOpts) {\n if (!arrowOpts || !arrowOpts.display) {\n return;\n }\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(angle);\n drawArrowHead(ctx, 0, -adjust, arrowOpts);\n ctx.restore();\n}\n\nfunction drawCurve(ctx, element, cp, length) {\n const {x, y, x2, y2, options} = element;\n const {startOpts, endOpts, startAdjust, endAdjust} = getArrowHeads(element);\n const p1 = {x, y};\n const p2 = {x: x2, y: y2};\n const startAngle = angleInCurve(p1, cp, p2, 0);\n const endAngle = angleInCurve(p1, cp, p2, 1) - PI;\n const ps = pointInCurve(p1, cp, p2, startAdjust / length);\n const pe = pointInCurve(p1, cp, p2, 1 - endAdjust / length);\n\n const path = new Path2D();\n ctx.beginPath();\n path.moveTo(ps.x, ps.y);\n path.quadraticCurveTo(cp.x, cp.y, pe.x, pe.y);\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke(path);\n element.path = path;\n element.ctx = ctx;\n drawArrowHeadOnCurve(ctx, ps, {angle: startAngle, adjust: startAdjust}, startOpts);\n drawArrowHeadOnCurve(ctx, pe, {angle: endAngle, adjust: endAdjust}, endOpts);\n}\n\nclass EllipseAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const rotation = this.options.rotation;\n const borderWidth = this.options.borderWidth;\n if (axis !== 'x' && axis !== 'y') {\n return pointInEllipse({x: mouseX, y: mouseY}, this.getProps(['width', 'height', 'centerX', 'centerY'], useFinalPosition), rotation, borderWidth);\n }\n const {x, y, x2, y2} = this.getProps(['x', 'y', 'x2', 'y2'], useFinalPosition);\n const hBorderWidth = borderWidth / 2;\n const limit = axis === 'y' ? {start: y, end: y2} : {start: x, end: x2};\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-rotation));\n return rotatedPoint[axis] >= limit.start - hBorderWidth - EPSILON && rotatedPoint[axis] <= limit.end + hBorderWidth + EPSILON;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {width, height, centerX, centerY, options} = this;\n ctx.save();\n translate(ctx, this.getCenterPoint(), options.rotation);\n setShadowStyle(ctx, this.options);\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n const stroke = setBorderStyle(ctx, options);\n ctx.ellipse(centerX, centerY, height / 2, width / 2, PI / 2, 0, 2 * PI);\n ctx.fill();\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n get label() {\n return this.elements && this.elements[0];\n }\n\n resolveElementProperties(chart, options) {\n return resolveBoxAndLabelProperties(chart, options);\n }\n\n}\n\nEllipseAnnotation.id = 'ellipseAnnotation';\n\nEllipseAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n label: Object.assign({}, BoxAnnotation.defaults.label),\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n z: 0\n};\n\nEllipseAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nEllipseAnnotation.descriptors = {\n label: {\n _fallback: true\n }\n};\n\nfunction pointInEllipse(p, ellipse, rotation, borderWidth) {\n const {width, height, centerX, centerY} = ellipse;\n const xRadius = width / 2;\n const yRadius = height / 2;\n\n if (xRadius <= 0 || yRadius <= 0) {\n return false;\n }\n // https://stackoverflow.com/questions/7946187/point-and-ellipse-rotated-position-test-algorithm\n const angle = toRadians(rotation || 0);\n const hBorderWidth = borderWidth / 2 || 0;\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const a = Math.pow(cosAngle * (p.x - centerX) + sinAngle * (p.y - centerY), 2);\n const b = Math.pow(sinAngle * (p.x - centerX) - cosAngle * (p.y - centerY), 2);\n return (a / Math.pow(xRadius + hBorderWidth, 2)) + (b / Math.pow(yRadius + hBorderWidth, 2)) <= 1.0001;\n}\n\nclass PointAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n const {x, y, x2, y2, width} = this.getProps(['x', 'y', 'x2', 'y2', 'width'], useFinalPosition);\n const borderWidth = this.options.borderWidth;\n if (axis !== 'x' && axis !== 'y') {\n return inPointRange({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), width / 2, borderWidth);\n }\n const hBorderWidth = borderWidth / 2;\n const limit = axis === 'y' ? {start: y, end: y2, value: mouseY} : {start: x, end: x2, value: mouseX};\n return limit.value >= limit.start - hBorderWidth && limit.value <= limit.end + hBorderWidth;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const options = this.options;\n const borderWidth = options.borderWidth;\n if (options.radius < 0.1) {\n return;\n }\n ctx.save();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n drawPoint(ctx, this, this.centerX, this.centerY);\n if (stroke && !isImageOrCanvas(options.pointStyle)) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n options.borderWidth = borderWidth;\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n properties.initProperties = initAnimationProperties(chart, properties, options);\n return properties;\n }\n}\n\nPointAnnotation.id = 'pointAnnotation';\n\nPointAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderDash: [],\n borderDashOffset: 0,\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n pointStyle: 'circle',\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPointAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nclass PolygonAnnotation extends Element {\n\n inRange(mouseX, mouseY, axis, useFinalPosition) {\n if (axis !== 'x' && axis !== 'y') {\n return this.options.radius >= 0.1 && this.elements.length > 1 && pointIsInPolygon(this.elements, mouseX, mouseY, useFinalPosition);\n }\n const rotatedPoint = rotated({x: mouseX, y: mouseY}, this.getCenterPoint(useFinalPosition), toRadians(-this.options.rotation));\n const axisPoints = this.elements.map((point) => axis === 'y' ? point.bY : point.bX);\n const start = Math.min(...axisPoints);\n const end = Math.max(...axisPoints);\n return rotatedPoint[axis] >= start && rotatedPoint[axis] <= end;\n }\n\n getCenterPoint(useFinalPosition) {\n return getElementCenterPoint(this, useFinalPosition);\n }\n\n draw(ctx) {\n const {elements, options} = this;\n ctx.save();\n ctx.beginPath();\n ctx.fillStyle = options.backgroundColor;\n setShadowStyle(ctx, options);\n const stroke = setBorderStyle(ctx, options);\n let first = true;\n for (const el of elements) {\n if (first) {\n ctx.moveTo(el.x, el.y);\n first = false;\n } else {\n ctx.lineTo(el.x, el.y);\n }\n }\n ctx.closePath();\n ctx.fill();\n // If no border, don't draw it\n if (stroke) {\n ctx.shadowColor = options.borderShadowColor;\n ctx.stroke();\n }\n ctx.restore();\n }\n\n resolveElementProperties(chart, options) {\n const properties = resolvePointProperties(chart, options);\n const {sides, rotation} = options;\n const elements = [];\n const angle = (2 * PI) / sides;\n let rad = rotation * RAD_PER_DEG;\n for (let i = 0; i < sides; i++, rad += angle) {\n const elProps = buildPointElement(properties, options, rad);\n elProps.initProperties = initAnimationProperties(chart, properties, options);\n elements.push(elProps);\n }\n properties.elements = elements;\n return properties;\n }\n}\n\nPolygonAnnotation.id = 'polygonAnnotation';\n\nPolygonAnnotation.defaults = {\n adjustScaleRange: true,\n backgroundShadowColor: 'transparent',\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderShadowColor: 'transparent',\n borderWidth: 1,\n display: true,\n init: undefined,\n point: {\n radius: 0\n },\n radius: 10,\n rotation: 0,\n shadowBlur: 0,\n shadowOffsetX: 0,\n shadowOffsetY: 0,\n sides: 3,\n xAdjust: 0,\n xMax: undefined,\n xMin: undefined,\n xScaleID: undefined,\n xValue: undefined,\n yAdjust: 0,\n yMax: undefined,\n yMin: undefined,\n yScaleID: undefined,\n yValue: undefined,\n z: 0\n};\n\nPolygonAnnotation.defaultRoutes = {\n borderColor: 'color',\n backgroundColor: 'color'\n};\n\nfunction buildPointElement({centerX, centerY}, {radius, borderWidth}, rad) {\n const halfBorder = borderWidth / 2;\n const sin = Math.sin(rad);\n const cos = Math.cos(rad);\n const point = {x: centerX + sin * radius, y: centerY - cos * radius};\n return {\n type: 'point',\n optionScope: 'point',\n properties: {\n x: point.x,\n y: point.y,\n centerX: point.x,\n centerY: point.y,\n bX: centerX + sin * (radius + halfBorder),\n bY: centerY - cos * (radius + halfBorder)\n }\n };\n}\n\nfunction pointIsInPolygon(points, x, y, useFinalPosition) {\n let isInside = false;\n let A = points[points.length - 1].getProps(['bX', 'bY'], useFinalPosition);\n for (const point of points) {\n const B = point.getProps(['bX', 'bY'], useFinalPosition);\n if ((B.bY > y) !== (A.bY > y) && x < (A.bX - B.bX) * (y - B.bY) / (A.bY - B.bY) + B.bX) {\n isInside = !isInside;\n }\n A = B;\n }\n return isInside;\n}\n\nconst annotationTypes = {\n box: BoxAnnotation,\n ellipse: EllipseAnnotation,\n label: LabelAnnotation,\n line: LineAnnotation,\n point: PointAnnotation,\n polygon: PolygonAnnotation\n};\n\n/**\n * Register fallback for annotation elements\n * For example lineAnnotation options would be looked through:\n * - the annotation object (options.plugins.annotation.annotations[id])\n * - element options (options.elements.lineAnnotation)\n * - element defaults (defaults.elements.lineAnnotation)\n * - annotation plugin defaults (defaults.plugins.annotation, this is what we are registering here)\n */\nObject.keys(annotationTypes).forEach(key => {\n defaults.describe(`elements.${annotationTypes[key].id}`, {\n _fallback: 'plugins.annotation.common'\n });\n});\n\nconst directUpdater = {\n update: Object.assign\n};\n\nconst hooks$1 = eventHooks.concat(elementHooks);\nconst resolve = (value, optDefs) => isObject(optDefs) ? resolveObj(value, optDefs) : value;\n\n\n/**\n * @typedef { import(\"chart.js\").Chart } Chart\n * @typedef { import(\"chart.js\").UpdateMode } UpdateMode\n * @typedef { import('../../types/options').AnnotationPluginOptions } AnnotationPluginOptions\n */\n\n/**\n * @param {string} prop\n * @returns {boolean}\n */\nconst isIndexable = (prop) => prop === 'color' || prop === 'font';\n\n/**\n * Resolve the annotation type, checking if is supported.\n * @param {string} [type=line] - annotation type\n * @returns {string} resolved annotation type\n */\nfunction resolveType(type = 'line') {\n if (annotationTypes[type]) {\n return type;\n }\n console.warn(`Unknown annotation type: '${type}', defaulting to 'line'`);\n return 'line';\n}\n\n/**\n * @param {Chart} chart\n * @param {Object} state\n * @param {AnnotationPluginOptions} options\n * @param {UpdateMode} mode\n */\nfunction updateElements(chart, state, options, mode) {\n const animations = resolveAnimations(chart, options.animations, mode);\n\n const annotations = state.annotations;\n const elements = resyncElements(state.elements, annotations);\n\n for (let i = 0; i < annotations.length; i++) {\n const annotationOptions = annotations[i];\n const element = getOrCreateElement(elements, i, annotationOptions.type);\n const resolver = annotationOptions.setContext(getContext(chart, element, annotationOptions));\n const properties = element.resolveElementProperties(chart, resolver);\n\n properties.skip = toSkip(properties);\n\n if ('elements' in properties) {\n updateSubElements(element, properties.elements, resolver, animations);\n // Remove the sub-element definitions from properties, so the actual elements\n // are not overwritten by their definitions\n delete properties.elements;\n }\n\n if (!defined(element.x)) {\n // If the element is newly created, assing the properties directly - to\n // make them readily awailable to any scriptable options. If we do not do this,\n // the properties retruned by `resolveElementProperties` are available only\n // after options resolution.\n Object.assign(element, properties);\n }\n\n Object.assign(element, properties.initProperties);\n properties.options = resolveAnnotationOptions(resolver);\n\n animations.update(element, properties);\n }\n}\n\nfunction toSkip(properties) {\n return isNaN(properties.x) || isNaN(properties.y);\n}\n\nfunction resolveAnimations(chart, animOpts, mode) {\n if (mode === 'reset' || mode === 'none' || mode === 'resize') {\n return directUpdater;\n }\n return new Animations(chart, animOpts);\n}\n\nfunction updateSubElements(mainElement, elements, resolver, animations) {\n const subElements = mainElement.elements || (mainElement.elements = []);\n subElements.length = elements.length;\n for (let i = 0; i < elements.length; i++) {\n const definition = elements[i];\n const properties = definition.properties;\n const subElement = getOrCreateElement(subElements, i, definition.type, definition.initProperties);\n const subResolver = resolver[definition.optionScope].override(definition);\n properties.options = resolveAnnotationOptions(subResolver);\n animations.update(subElement, properties);\n }\n}\n\nfunction getOrCreateElement(elements, index, type, initProperties) {\n const elementClass = annotationTypes[resolveType(type)];\n let element = elements[index];\n if (!element || !(element instanceof elementClass)) {\n element = elements[index] = new elementClass();\n Object.assign(element, initProperties);\n }\n return element;\n}\n\nfunction resolveAnnotationOptions(resolver) {\n const elementClass = annotationTypes[resolveType(resolver.type)];\n const result = {};\n result.id = resolver.id;\n result.type = resolver.type;\n result.drawTime = resolver.drawTime;\n Object.assign(result,\n resolveObj(resolver, elementClass.defaults),\n resolveObj(resolver, elementClass.defaultRoutes));\n for (const hook of hooks$1) {\n result[hook] = resolver[hook];\n }\n return result;\n}\n\nfunction resolveObj(resolver, defs) {\n const result = {};\n for (const prop of Object.keys(defs)) {\n const optDefs = defs[prop];\n const value = resolver[prop];\n if (isIndexable(prop) && isArray(value)) {\n result[prop] = value.map((item) => resolve(item, optDefs));\n } else {\n result[prop] = resolve(value, optDefs);\n }\n }\n return result;\n}\n\nfunction getContext(chart, element, annotation) {\n return element.$context || (element.$context = Object.assign(Object.create(chart.getContext()), {\n element,\n id: annotation.id,\n type: 'annotation'\n }));\n}\n\nfunction resyncElements(elements, annotations) {\n const count = annotations.length;\n const start = elements.length;\n\n if (start < count) {\n const add = count - start;\n elements.splice(start, 0, ...new Array(add));\n } else if (start > count) {\n elements.splice(count, start - count);\n }\n return elements;\n}\n\nvar version = \"3.0.1\";\n\nconst chartStates = new Map();\nconst hooks = eventHooks.concat(elementHooks);\n\nvar annotation = {\n id: 'annotation',\n\n version,\n\n beforeRegister() {\n requireVersion('chart.js', '4.0', Chart.version);\n },\n\n afterRegister() {\n Chart.register(annotationTypes);\n },\n\n afterUnregister() {\n Chart.unregister(annotationTypes);\n },\n\n beforeInit(chart) {\n chartStates.set(chart, {\n annotations: [],\n elements: [],\n visibleElements: [],\n listeners: {},\n listened: false,\n moveListened: false,\n hooks: {},\n hooked: false,\n hovered: []\n });\n },\n\n beforeUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n const annotations = state.annotations = [];\n\n let annotationOptions = options.annotations;\n if (isObject(annotationOptions)) {\n Object.keys(annotationOptions).forEach(key => {\n const value = annotationOptions[key];\n if (isObject(value)) {\n value.id = key;\n annotations.push(value);\n }\n });\n } else if (isArray(annotationOptions)) {\n annotations.push(...annotationOptions);\n }\n verifyScaleOptions(annotations, chart.scales);\n },\n\n afterDataLimits(chart, args) {\n const state = chartStates.get(chart);\n adjustScaleRange(chart, args.scale, state.annotations.filter(a => a.display && a.adjustScaleRange));\n },\n\n afterUpdate(chart, args, options) {\n const state = chartStates.get(chart);\n updateListeners(chart, state, options);\n updateElements(chart, state, options, args.mode);\n state.visibleElements = state.elements.filter(el => !el.skip && el.options.display);\n updateHooks(chart, state, options);\n },\n\n beforeDatasetsDraw(chart, _args, options) {\n draw(chart, 'beforeDatasetsDraw', options.clip);\n },\n\n afterDatasetsDraw(chart, _args, options) {\n draw(chart, 'afterDatasetsDraw', options.clip);\n },\n\n beforeDraw(chart, _args, options) {\n draw(chart, 'beforeDraw', options.clip);\n },\n\n afterDraw(chart, _args, options) {\n draw(chart, 'afterDraw', options.clip);\n },\n\n beforeEvent(chart, args, options) {\n const state = chartStates.get(chart);\n if (handleEvent(state, args.event, options)) {\n args.changed = true;\n }\n },\n\n afterDestroy(chart) {\n chartStates.delete(chart);\n },\n\n _getState(chart) {\n return chartStates.get(chart);\n },\n\n defaults: {\n animations: {\n numbers: {\n properties: ['x', 'y', 'x2', 'y2', 'width', 'height', 'centerX', 'centerY', 'pointX', 'pointY', 'radius'],\n type: 'number'\n },\n },\n clip: true,\n interaction: {\n mode: undefined,\n axis: undefined,\n intersect: undefined\n },\n common: {\n drawTime: 'afterDatasetsDraw',\n init: false,\n label: {\n }\n }\n },\n\n descriptors: {\n _indexable: false,\n _scriptable: (prop) => !hooks.includes(prop) && prop !== 'init',\n annotations: {\n _allKeys: false,\n _fallback: (prop, opts) => `elements.${annotationTypes[resolveType(opts.type)].id}`\n },\n interaction: {\n _fallback: true\n },\n common: {\n label: {\n _indexable: isIndexable,\n _fallback: true\n },\n _indexable: isIndexable\n }\n },\n\n additionalOptionScopes: ['']\n};\n\nfunction draw(chart, caller, clip) {\n const {ctx, chartArea} = chart;\n const state = chartStates.get(chart);\n\n if (clip) {\n clipArea(ctx, chartArea);\n }\n\n const drawableElements = getDrawableElements(state.visibleElements, caller).sort((a, b) => a.element.options.z - b.element.options.z);\n for (const item of drawableElements) {\n drawElement(ctx, chartArea, state, item);\n }\n\n if (clip) {\n unclipArea(ctx);\n }\n}\n\nfunction getDrawableElements(elements, caller) {\n const drawableElements = [];\n for (const el of elements) {\n if (el.options.drawTime === caller) {\n drawableElements.push({element: el, main: true});\n }\n if (el.elements && el.elements.length) {\n for (const sub of el.elements) {\n if (sub.options.display && sub.options.drawTime === caller) {\n drawableElements.push({element: sub});\n }\n }\n }\n }\n return drawableElements;\n}\n\nfunction drawElement(ctx, chartArea, state, item) {\n const el = item.element;\n if (item.main) {\n invokeHook(state, el, 'beforeDraw');\n el.draw(ctx, chartArea);\n invokeHook(state, el, 'afterDraw');\n } else {\n el.draw(ctx, chartArea);\n }\n}\n\nexport { annotation as default };\n","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","/** @jsx renderer.create */\nimport { Controller } from \"@hotwired/stimulus\";\n\nimport Chart from \"chart.js/auto\";\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\n\nimport _ from \"lodash\";\nimport annotationPlugin from \"chartjs-plugin-annotation\";\n\nimport dayjs from \"dayjs\";\n\nimport relativeTime from \"dayjs/plugin/relativeTime\";\n\nimport currency from \"currency.js\";\n\nimport numbro from \"numbro\";\n\nimport { CommonDOMRenderer } from \"render-jsx/dom\";\n\nimport { numberFormatter } from \"../utils\";\n\nimport { get } from \"@rails/request.js\";\nimport pluralize from \"pluralize\";\n\nimport { ticksCallback } from \"../utils\";\n\ndayjs.extend(relativeTime);\n\nconst tooltipWidth = 350;\nconst red = \"rgba(255, 0, 0, 1)\";\nconst black = \"rgb(0, 0, 0, 1)\";\n\nChart.register(annotationPlugin, ChartDataLabels);\n\nexport default class extends Controller {\n chart = null;\n initial = false;\n values = [];\n labels = [];\n rows = [];\n rendered = false;\n goal = null;\n originalLabels = [];\n\n static targets = [\"chart\"];\n\n static values = {\n jsonData: Object,\n };\n\n initialize() {\n this.resize = _.throttle(this.resize, 750).bind(this);\n this.windowResize = _.throttle(this.windowResize, 750).bind(this);\n }\n\n chartTargetDisconnect(element) {\n const chart = Chart.getChart(element.id);\n if (chart) {\n chart.destroy();\n }\n }\n\n datasetSettings = () => {\n return {\n display: true,\n color: \"black\",\n textStrokeWidth: 0.5,\n align: \"top\",\n offset: 12,\n font: {\n size: 14,\n },\n };\n };\n\n setCommonVariables(jsonData) {\n const data = jsonData;\n\n this.rows = data.rows;\n\n this.name = data.name;\n this.min = data.min;\n this.max = data.max;\n this.autoScale = data.auto_scale;\n this.dataType = data.data_type;\n this.reverse = data.upside_down;\n this.decimalPlaces = data.decimal_places;\n this.tracking = data.tracking;\n this.endOfWeek = data.end_of_week;\n this.goal = data.goal;\n\n if (this.tracking == \"week\") {\n this.labels = Object.keys(data.rows).map((key) => this.endOfWeek[key]);\n this.originalLabels = Object.keys(data.rows);\n } else {\n this.labels = Object.keys(data.rows) || [];\n }\n\n this.values = Object.values(data.rows) || [];\n }\n\n createChart = (ctx, data, element) => {\n let delayed;\n\n new Chart(ctx, {\n type: \"line\",\n data: {\n labels: this.labels,\n datasets: [\n {\n data: this.values,\n ...this.lineChartSettings(),\n datalabels: this.datasetSettings(),\n },\n ],\n },\n options: {\n animation: {\n onComplete: () => {\n delayed = true;\n this.rendered = true;\n },\n delay: (context) => {\n let delay = 0;\n if (\n context.type === \"data\" &&\n context.mode === \"default\" &&\n !delayed\n ) {\n delay = context.dataIndex * 50 + context.datasetIndex * 25;\n }\n\n return delay;\n },\n },\n font: {\n family: \"Inter var\",\n size: 14,\n },\n ...this.options(data),\n },\n });\n };\n\n isCreated() {\n return this.rendered;\n }\n\n resize() {\n [...this.chartTargets].forEach((element) => {\n const chart = Chart.getChart(element.id);\n if (chart) {\n chart.resize();\n }\n });\n }\n\n windowResize({ width, height, event }) {\n [...this.chartTargets].forEach((element) => {\n const chart = Chart.getChart(element.id);\n if (chart) {\n chart.resize();\n }\n });\n }\n\n datalabelsFormatter = (value, context) => {\n if (context.dataset.data[context.dataIndex] === \"NR\") {\n return \"NR\";\n }\n\n if (this.dataType === \"currency\") {\n return currency(context.dataset.data[context.dataIndex] || 0, {\n precision: this.decimalPlaces,\n }).format();\n }\n\n if (this.dataType === \"percentage\") {\n return `${context.dataset.data[context.dataIndex] || 0}%`;\n }\n\n return numbro(value).format({\n thousandSeparated: true,\n mantissa: this.decimalPlaces,\n });\n };\n\n yCallback = (value, index, values) => {\n if (value == \"NR\") return value;\n\n if (this.dataType === \"currency\") {\n try {\n return currency(value, {\n precision: this.decimalPlaces,\n }).format();\n } catch (_) {\n return `$${value}`;\n }\n }\n\n if (this.dataType == \"percentage\") {\n return `${value}%`;\n }\n\n return numbro(value).format({\n thousandSeparated: true,\n mantissa: this.decimalPlaces,\n });\n };\n\n goalAnnotation = () => {\n if (!this.goal) return {};\n\n return {\n annotation: {\n annotations: {\n line1: {\n type: \"line\",\n yMin: this.goal,\n yMax: this.goal,\n borderColor: \"#262626\",\n borderWidth: 2,\n },\n },\n },\n };\n };\n\n options = (data) => {\n return {\n onClick: (event, elements) => {\n if (elements.length == 0) return;\n\n const entry =\n this.tracking == \"week\"\n ? this.originalLabels[elements[0].index]\n : this.labels[elements[0].index];\n\n get(`/statistic_notes/${this.id}?entry=${entry}`, {\n responseKind: \"turbo-stream\",\n });\n },\n onHover: (event, elements) => {\n if (elements.length) {\n event.native.target.style.cursor = \"pointer\";\n } else {\n event.native.target.style.cursor = \"default\";\n }\n },\n clip: 80,\n layout: {\n padding: 40,\n },\n responsive: true,\n maintainAspectRatio: true,\n plugins: {\n ...this.goalAnnotation(),\n legend: {\n display: false,\n },\n tooltip: {\n enabled: false,\n position: \"nearest\",\n external: this.externalTooltipHandler,\n },\n datalabels: {\n formatter: this.datalabelsFormatter,\n },\n },\n scales: {\n x: {\n grid: {\n color: \"rgb(0, 0, 0, .20)\",\n },\n ticks: {\n includeBounds: false,\n padding: 20,\n reverse: true,\n autoSkip: false,\n color: \"rgb(0, 0, 0)\",\n font: {\n size: 14,\n weight: \"bold\",\n },\n callback: (index) =>\n ticksCallback(index, this.tracking, this.labels),\n },\n },\n y: {\n position: \"left\",\n reverse: this.reverse,\n ticks: {\n position: \"left\",\n precision: this.decimalPlaces,\n font: {\n family: \"Inter var\",\n size: 14,\n weight: \"bold\",\n },\n padding: 20,\n color: \"rgb(0, 0, 0)\",\n callback: this.yCallback,\n },\n ...(this.autoScale && {\n suggestedMin: this.min || 0,\n suggestedMax: this.max || null,\n }),\n ...(!this.autoScale && {\n min: this.min,\n max: this.max,\n }),\n },\n },\n };\n };\n\n getOrCreateTooltip = (chart) => {\n let tooltipEl = chart.canvas.parentNode.querySelector(\"div\");\n\n if (!tooltipEl) {\n tooltipEl = document.createElement(\"div\");\n\n tooltipEl.classList.add(\n \"bg-gray-100\",\n \"text-black\",\n \"rounded\",\n \"shadow-lg\",\n \"border\"\n );\n\n tooltipEl.style.opacity = 1;\n tooltipEl.style.pointerEvents = \"none\";\n tooltipEl.style.position = \"absolute\";\n tooltipEl.style.transform = \"translate(-50%, 0)\";\n tooltipEl.style.transition = \"all .1s ease\";\n tooltipEl.style.zIndex = \"9999999999999999999999\";\n\n const table = document.createElement(\"table\");\n table.style.margin = \"0px\";\n\n tooltipEl.appendChild(table);\n chart.canvas.parentNode.appendChild(tooltipEl);\n }\n\n return tooltipEl;\n };\n\n externalTooltipHandler = async (context) => {\n const { chart, tooltip } = context;\n const tooltipEl = this.getOrCreateTooltip(chart);\n\n const title = tooltip.title[0];\n\n const current =\n this.tracking == \"week\"\n ? Object.keys(this.endOfWeek).find(\n (key) => this.endOfWeek[key] === title\n )\n : title;\n\n let notesFetch = await get(`/statistic_notes/${this.id}?entry=${current}`, {\n responseKind: \"json\",\n });\n const notes = await notesFetch.json;\n const hasNotes = notes.length > 0;\n\n tooltipEl.innerHTML = \"\";\n\n if (tooltip.opacity === 0) {\n tooltipEl.style.opacity = 0;\n return;\n }\n\n if (tooltip.body) {\n const bodyLines = tooltip.body.map((b) => b.lines);\n const titleLines = tooltip.title || [];\n const renderer = new CommonDOMRenderer();\n\n renderer\n .render(\n
\n
\n

\n {dayjs(titleLines[0]).format(\"MMM DD, YYYY\")}\n

\n
\n {tooltip.labelColors.map((color) => (\n \n ))}\n {bodyLines.map((body, i) => (\n
\n
\n {numberFormatter(\n body[i],\n this.dataType,\n this.decimalPlaces\n )}\n
\n
\n ))}\n
\n {hasNotes ? (\n
\n
\n

\n Click to see{\" \"}\n {notes.length}{\" \"}\n {pluralize(\"note\", notes.length)}\n

\n
\n ) : (\n \"\"\n )}\n
\n
\n )\n .on(tooltipEl);\n }\n\n const { offsetLeft: positionX, offsetTop: positionY } = chart.canvas;\n\n const left = positionX + tooltip.caretX + tooltipWidth / 2 + 10;\n\n const container = chart.canvas;\n const containerRect = container.getBoundingClientRect();\n const containerRight = containerRect.right;\n\n const bottom = positionY + tooltip.caretY;\n\n if (\n left + tooltipWidth / 2 > containerRight ||\n left + tooltipWidth / 2 > containerRect.width\n ) {\n tooltipEl.style.left = tooltip.caretX - 175 + \"px\";\n } else {\n tooltipEl.style.left = left + \"px\";\n }\n\n if (bottom + tooltipEl.offsetHeight + 50 > containerRect.bottom) {\n tooltipEl.style.top =\n positionY - tooltipEl.offsetHeight + tooltip.caretY + \"px\";\n } else {\n tooltipEl.style.top = positionY + 15 + tooltip.caretY + \"px\";\n }\n\n tooltipEl.style.opacity = 1;\n tooltipEl.style.font = tooltip.options.bodyFont.string;\n tooltipEl.style.padding =\n tooltip.options.padding + \"px \" + tooltip.options.padding + \"px\";\n tooltipEl.style.zIndex = \"9999999999999999999999\";\n tooltipEl.style.width = \"350px\";\n tooltipEl.style.maxWidth = \"350px\";\n };\n\n lineChartSettings = () => {\n return {\n borderColor: this.borderColor,\n backgroundColor: this.backgroundColor,\n segment: {\n borderColor: this.segmentBorderColor,\n },\n };\n };\n\n borderColor = (ctx) => {\n let color = black;\n\n if (\n ctx.index != 0 &&\n ((!this.reverse &&\n parseFloat(this.values[ctx.index - 1]) >=\n parseFloat(this.values[ctx.index])) ||\n (this.reverse &&\n parseFloat(this.values[ctx.index - 1]) <=\n parseFloat(this.values[ctx.index])))\n ) {\n color = red;\n }\n\n return color;\n };\n\n backgroundColor = (ctx, options) => {\n let color = black;\n\n if (\n ctx.index != 0 &&\n ((!this.reverse &&\n parseFloat(this.values[ctx.index - 1]) >=\n parseFloat(this.values[ctx.index])) ||\n (this.reverse &&\n parseFloat(this.values[ctx.index - 1]) <=\n parseFloat(this.values[ctx.index])))\n ) {\n color = red;\n }\n\n return color;\n };\n\n segmentBorderColor = (ctx) => {\n let color = black;\n\n if (\n (this.reverse && parseFloat(ctx.p0.raw) <= parseFloat(ctx.p1.raw)) ||\n (!this.reverse && parseFloat(ctx.p0.raw) >= parseFloat(ctx.p1.raw))\n ) {\n color = red;\n }\n\n return color;\n };\n}\n"],"names":["root","pluralize","require","module","this","pluralRules","singularRules","uncountables","irregularPlurals","irregularSingles","sanitizeRule","rule","restoreCase","word","token","interpolate","str","args","match","index","replace","result","sanitizeWord","rules","len","replaceWord","replaceMap","keepMap","checkWord","bool","count","inclusive","pluralized","replacement","single","plural","Chart","registerables","interaction","state","event","filterElements","options","getNearestItem","getElements","inRangeByAxis","element","axis","getPointByAxis","center","minDistance","nearestItems","evenPoint","distance","distanceBetweenPoints","a","b","isOlderPart","act","req","EPSILON","clamp","x","from","to","clampAll","obj","key","inPointRange","point","radius","borderWidth","hBorderWidth","inBoxRange","y","x2","y2","inRangeX","inRangeY","getElementCenterPoint","useFinalPosition","centerX","centerY","requireVersion","pkg","min","ver","strict","parts","isPercentString","s","toPercent","toPositivePercent","boxAppering","defaultInitAnimation","properties","getRelativePosition","size","position","getSize","value","positivePercent","calculateTextAlignment","width","textAlign","toPosition","defaultValue","isObject","valueOrDefault","isBoundToPoint","defined","initAnimationProperties","chart","initAnim","applyDefault","execCallback","loadHooks","hooks","hooksContainer","activated","hook","isFunction","type","callback","widthCache","notRadius","fontsKey","fonts","prev","item","isImageOrCanvas","content","translate","ctx","rotation","toRadians","setBorderStyle","setShadowStyle","measureLabelSize","optFont","isArray","f","toFont","strokeWidth","lines","mapKey","calculateLabelSize","drawBox","rect","height","stroke","addRoundedRectPath","toTRBLCorners","drawLabel","getOpacity","labels","optColor","colors","setTextStrokeStyle","applyLabelDecoration","applyLabelContent","drawPoint","style","rad","RAD_PER_DEG","drawPointStyle","xOffset","yOffset","cornerRadius","TAU","TWO_THIRDS_PI","QUARTER_PI","PI","HALF_PI","i","font","text","lhs","l","lh","c","elementValue","opacity","isNumber","limitedLineScale","scaleValue","scale","fallback","isFinite","retrieveScaleID","scales","scaleID","axes","getDimensionByScale","reverse","start","end","getChartPoint","chartArea","xScale","yScale","resolveBoxProperties","xDim","getChartDimensionByScale","yDim","resolvePointProperties","box","adjustCenterX","adjustCenterY","getChartCircle","resolveLineProperties","area","resolveFullLineProperties","resolveLimitedLineProperties","resolveBoxAndLabelProperties","resolveLabelElementProperties$1","max","scaleId","startProp","endProp","dim","calculateX","labelSize","padding","calculatePosition$1","calculateY","boxOpts","labelOpts","padStart","padEnd","adjust","availableSize","label","toPadding","rotated","angle","cos","sin","cx","cy","moveHooks","eventHooks","updateListeners","scope","handleEvent","handleMoveEvents","handleClickEvents","elements","previous","context","changed","dispatchMoveEvents","checkElements","dispatchEvent","listeners","handler","elementHooks","updateHooks","visibleElements","invokeHook","callbackHook","adjustScaleRange","annotations","range","getScaleLimits","changeScaleLimit","verifyScaleOptions","annotation","verifyScaleIDs","limit","suggestedLimit","scaleLimitDefined","scaleOptions","verifyProperties","prop","scaleIDOption","limits","updateLimits","props","raw","BoxAnnotation","Element","mouseX","mouseY","positions","LabelAnnotation","visible","drawCallout","getLabelSize","boxSize","measureRect","calculatePosition","pointX","pointY","callout","calloutPosition","resolveCalloutPosition","isPointInRange","separatorStart","separatorEnd","getCalloutSeparatorCoord","sideStart","sideEnd","getCalloutSideCoord","rotatedPoint","getCalloutSeparatorAdjust","side","getCalloutSideAdjust","resolveCalloutAutoPosition","xAdjust","yAdjust","xPoints","yPoints","margin","pointInLine","p1","p2","t","interpolateX","interpolateY","sqr","v","rangeLimit","coordInCurve","cp","pointInCurve","coordAngleInCurve","angleInCurve","LineAnnotation","path","mx","my","isOnLabel","epsilon","intersects","inAxisRange","length","drawCurve","startOpts","endOpts","startAdjust","endAdjust","getArrowHeads","drawArrowHead","inside","isLineInArea","limitLineToArea","getControlPoint","labelProperties","resolveLabelElementProperties","arrowHeadsDefaults","top","right","bottom","left","limitPointToArea","x1","y1","dx","dy","lenSq","xx","yy","textSize","calculateLabelPosition","calculateAutoRotation","sizes","rotatedSize","calculateT","pt","xCoordinateSizes","yCoordinateSizes","adjustLabelCoordinate","toDegrees","space","spaceAround","calculateTAdjust","lineSize","lineW","lineH","r","coordinate","labelSizes","halfSize","line","arrowStartOpts","arrowEndOpts","getLineAdjust","arrowOpts","offset","fill","backgroundColor","borderColor","arrowOffsetX","drawArrowHeadOnCurve","startAngle","endAngle","ps","pe","EllipseAnnotation","pointInEllipse","p","ellipse","xRadius","yRadius","cosAngle","sinAngle","PointAnnotation","PolygonAnnotation","pointIsInPolygon","axisPoints","first","el","sides","elProps","buildPointElement","halfBorder","points","isInside","A","B","annotationTypes","defaults","directUpdater","hooks$1","resolve","optDefs","resolveObj","isIndexable","resolveType","updateElements","mode","animations","resolveAnimations","resyncElements","annotationOptions","getOrCreateElement","resolver","getContext","toSkip","updateSubElements","resolveAnnotationOptions","animOpts","Animations","mainElement","subElements","definition","subElement","subResolver","initProperties","elementClass","defs","add","version","chartStates","_args","draw","opts","caller","clip","clipArea","drawableElements","getDrawableElements","drawElement","unclipArea","sub","e","n","o","d","u","h","m","M","dayjs","relativeTime","tooltipWidth","red","black","annotationPlugin","ChartDataLabels","BaseChartController","Controller","__publicField","data","delayed","delay","currency","numbro","values","entry","get","ticksCallback","tooltipEl","table","tooltip","title","current","notes","hasNotes","bodyLines","titleLines","renderer","CommonDOMRenderer","color","body","numberFormatter","positionX","positionY","containerRect","containerRight","_","jsonData"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}