@dpuse/dpuse-tool-highcharts-visualiser 0.0.79 → 0.0.82

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/dist/{AnimationUtilities-Bby2idBR.js → AnimationUtilities-CJw-tdb_.js} +74 -83
  2. package/dist/AnimationUtilities-CJw-tdb_.js.map +1 -0
  3. package/dist/BorderRadius-CqHYi9va.js +135 -0
  4. package/dist/BorderRadius-CqHYi9va.js.map +1 -0
  5. package/dist/CenteredUtilities-BTUT7_Ld.js +1316 -0
  6. package/dist/CenteredUtilities-BTUT7_Ld.js.map +1 -0
  7. package/dist/{SVGElement-BmvC_qu3.js → SVGElement-uTuGcjav.js} +101 -103
  8. package/dist/SVGElement-uTuGcjav.js.map +1 -0
  9. package/dist/SeriesRegistry-CXsAINSj.js +376 -0
  10. package/dist/SeriesRegistry-CXsAINSj.js.map +1 -0
  11. package/dist/{TextPath-DK4Jkzd7.js → TextPath-Coabnrz0.js} +32 -34
  12. package/dist/{TextPath-DK4Jkzd7.js.map → TextPath-Coabnrz0.js.map} +1 -1
  13. package/dist/{dependency-wheel.src-BHmwx9rW.js → dependency-wheel.src-ByNiAiZS.js} +26 -27
  14. package/dist/dependency-wheel.src-ByNiAiZS.js.map +1 -0
  15. package/dist/dpuse-tool-highcharts-visualiser.es.js +2437 -2415
  16. package/dist/dpuse-tool-highcharts-visualiser.es.js.map +1 -1
  17. package/dist/highchartsMoreCustom-Cm6MkFMu.js +1178 -0
  18. package/dist/highchartsMoreCustom-Cm6MkFMu.js.map +1 -0
  19. package/dist/{pattern-fill.src-BPmr3DQg.js → pattern-fill.src-CGZp553r.js} +30 -32
  20. package/dist/{pattern-fill.src-BPmr3DQg.js.map → pattern-fill.src-CGZp553r.js.map} +1 -1
  21. package/dist/{sankey.src-DocCurOx.js → sankey.src-Buj1zAlU.js} +115 -117
  22. package/dist/sankey.src-Buj1zAlU.js.map +1 -0
  23. package/dist/{streamgraph.src-Bn6PY8Fd.js → streamgraph.src-DjMW1U2g.js} +4 -6
  24. package/dist/{streamgraph.src-Bn6PY8Fd.js.map → streamgraph.src-DjMW1U2g.js.map} +1 -1
  25. package/package.json +12 -12
  26. package/dist/AnimationUtilities-Bby2idBR.js.map +0 -1
  27. package/dist/BorderRadius-2zMZW_aK.js +0 -1445
  28. package/dist/BorderRadius-2zMZW_aK.js.map +0 -1
  29. package/dist/SVGElement-BmvC_qu3.js.map +0 -1
  30. package/dist/SeriesRegistry-0cj0ZJqn.js +0 -374
  31. package/dist/SeriesRegistry-0cj0ZJqn.js.map +0 -1
  32. package/dist/dependency-wheel.src-BHmwx9rW.js.map +0 -1
  33. package/dist/highchartsMoreCustom-CcpfmVny.js +0 -1110
  34. package/dist/highchartsMoreCustom-CcpfmVny.js.map +0 -1
  35. package/dist/sankey.src-DocCurOx.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"SeriesRegistry-0cj0ZJqn.js","names":["H","D","G","format","defaultOptions","A","D","F","defaultOptions","D","H"],"sources":["../node_modules/highcharts/es-modules/Core/Renderer/HTML/AST.js","../node_modules/highcharts/es-modules/Core/Templating.js","../node_modules/highcharts/es-modules/Core/Series/Point.js","../node_modules/highcharts/es-modules/Core/Series/SeriesRegistry.js"],"sourcesContent":["/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport H from '../../Globals.js';\nconst { SVG_NS, win } = H;\nimport { attr, createElement, css, isFunction, isString, objectEach, splat } from '../../../Shared/Utilities.js';\nimport { error } from '../../Utilities.js';\nconst { trustedTypes } = win;\n/* *\n *\n * Constants\n *\n * */\n// Create the trusted type policy. This should not be exposed.\nconst trustedTypesPolicy = (trustedTypes &&\n isFunction(trustedTypes.createPolicy) &&\n trustedTypes.createPolicy('highcharts', {\n createHTML: (s) => s\n }));\nconst emptyHTML = trustedTypesPolicy ?\n trustedTypesPolicy.createHTML('') :\n '';\n/* *\n *\n * Class\n *\n * */\n/**\n * The AST class represents an abstract syntax tree of HTML or SVG content. It\n * can take HTML as an argument, parse it, optionally transform it to SVG, then\n * perform sanitation before inserting it into the DOM.\n *\n * @class\n * @name Highcharts.AST\n *\n * @param {string|Array<Highcharts.ASTNode>} source\n * Either an HTML string or an ASTNode list to populate the tree.\n */\nclass AST {\n /* *\n *\n * Static Functions\n *\n * */\n /**\n * Filter an object of SVG or HTML attributes against the allow list.\n *\n * @static\n *\n * @function Highcharts.AST#filterUserAttributes\n *\n * @param {Highcharts.SVGAttributes} attributes The attributes to filter\n *\n * @return {Highcharts.SVGAttributes}\n * The filtered attributes\n */\n static filterUserAttributes(attributes) {\n objectEach(attributes, (val, key) => {\n let valid = true;\n if (AST.allowedAttributes.indexOf(key) === -1) {\n valid = false;\n }\n if (['background', 'dynsrc', 'href', 'lowsrc', 'src']\n .indexOf(key) !== -1) {\n valid = isString(val) && AST.allowedReferences.some((ref) => val.indexOf(ref) === 0);\n }\n if (!valid) {\n error(33, false, void 0, {\n 'Invalid attribute in config': `${key}`\n });\n delete attributes[key];\n }\n // #17753, < is not allowed in SVG attributes\n if (isString(val) && attributes[key]) {\n attributes[key] = val.replace(/</g, '&lt;');\n }\n });\n return attributes;\n }\n /**\n * Utility function to parse a style string to a CSSObject.\n *\n * @internal\n * @param {string} style\n * The style string to parse.\n * @return {Highcharts.CSSObject}\n * The parsed CSSObject.\n */\n static parseStyle(style) {\n return style\n .split(';')\n .reduce((styles, line) => {\n const pair = line.split(':').map((s) => s.trim()), key = pair.shift();\n if (key && pair.length) {\n styles[key.replace(/-([a-z])/g, (g) => g[1].toUpperCase())] = pair.join(':'); // #17146\n }\n return styles;\n }, {});\n }\n /**\n * Utility function to set html content for an element by passing in a\n * markup string. The markup is safely parsed by the AST class to avoid\n * XSS vulnerabilities. This function should be used instead of setting\n * `innerHTML` in all cases where the content is not fully trusted.\n *\n * @static\n * @function Highcharts.AST#setElementHTML\n *\n * @param {SVGDOMElement|HTMLDOMElement} el\n * Node to set content of.\n *\n * @param {string} html\n * Markup string\n */\n static setElementHTML(el, html) {\n el.innerHTML = AST.emptyHTML; // Clear previous\n if (html) {\n const ast = new AST(html);\n ast.addToDOM(el);\n }\n }\n /* *\n *\n * Constructor\n *\n * */\n // Construct an AST from HTML markup, or wrap an array of existing AST nodes\n constructor(source) {\n this.nodes = typeof source === 'string' ?\n this.parseMarkup(source) : source;\n }\n /* *\n *\n * Functions\n *\n * */\n /**\n * Add the tree defined as a hierarchical JS structure to the DOM\n *\n * @function Highcharts.AST#addToDOM\n *\n * @param {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement} parent\n * The node where it should be added\n *\n * @return {Highcharts.HTMLDOMElement|Highcharts.SVGDOMElement}\n * The inserted node.\n */\n addToDOM(parent) {\n /**\n * @internal\n * @param {Highcharts.ASTNode} subtree\n * HTML/SVG definition.\n * @param {Element} [subParent]\n * Parent node.\n * @return {Highcharts.SVGDOMElement|Highcharts.HTMLDOMElement}\n * The inserted node.\n */\n function recurse(subtree, subParent) {\n let ret;\n splat(subtree).forEach(function (item) {\n const tagName = item.tagName;\n const textNode = item.textContent ?\n H.doc.createTextNode(item.textContent) :\n void 0;\n // Whether to ignore the AST filtering totally, #15345\n const bypassHTMLFiltering = AST.bypassHTMLFiltering;\n let node;\n if (tagName) {\n if (tagName === '#text') {\n node = textNode;\n }\n else if (AST.allowedTags.indexOf(tagName) !== -1 ||\n bypassHTMLFiltering) {\n const NS = tagName === 'svg' ?\n SVG_NS :\n (subParent.namespaceURI || SVG_NS);\n const element = H.doc.createElementNS(NS, tagName);\n const attributes = item.attributes || {};\n // Apply attributes from root of AST node, legacy from\n // from before TextBuilder\n objectEach(item, function (val, key) {\n if (key !== 'tagName' &&\n key !== 'attributes' &&\n key !== 'children' &&\n key !== 'style' &&\n key !== 'textContent') {\n attributes[key] = val;\n }\n });\n attr(element, bypassHTMLFiltering ?\n attributes :\n AST.filterUserAttributes(attributes));\n if (item.style) {\n css(element, item.style);\n }\n // Add text content\n if (textNode) {\n element.appendChild(textNode);\n }\n // Recurse\n recurse(item.children || [], element);\n node = element;\n }\n else {\n error(33, false, void 0, {\n 'Invalid tagName in config': tagName\n });\n }\n }\n // Add to the tree\n if (node) {\n subParent.appendChild(node);\n }\n ret = node;\n });\n // Return last node added (on top level it's the only one)\n return ret;\n }\n return recurse(this.nodes, parent);\n }\n /**\n * Parse HTML/SVG markup into AST Node objects. Used internally from the\n * constructor.\n *\n * @internal\n * @param {string} markup\n * The markup string.\n * @return {Array<Highcharts.ASTNode>}\n * The parsed nodes.\n */\n parseMarkup(markup) {\n const nodes = [];\n markup = markup\n .trim()\n // The style attribute throws a warning when parsing when CSP is\n // enabled (#6884), so use an alias and pick it up below\n // Make all quotation marks parse correctly to DOM (#17627)\n .replace(/ style=([\"'])/g, ' data-style=$1');\n let doc;\n try {\n doc = new DOMParser().parseFromString(trustedTypesPolicy ?\n trustedTypesPolicy.createHTML(markup) :\n markup, 'text/html');\n }\n catch {\n // There are two cases where this fails:\n // 1. IE9 and PhantomJS, where the DOMParser only supports parsing\n // XML\n // 2. Due to a Chromium issue where chart redraws are triggered by\n // a `beforeprint` event (#16931),\n // https://issues.chromium.org/issues/40222135\n }\n if (!doc) {\n const body = createElement('div');\n body.innerHTML = markup;\n doc = { body };\n }\n const appendChildNodes = (node, addTo) => {\n const tagName = node.nodeName.toLowerCase();\n // Add allowed tags\n const astNode = {\n tagName\n };\n if (tagName === '#text') {\n astNode.textContent = node.textContent || '';\n }\n const parsedAttributes = node.attributes;\n // Add attributes\n if (parsedAttributes) {\n const attributes = {};\n [].forEach.call(parsedAttributes, (attrib) => {\n if (attrib.name === 'data-style') {\n astNode.style = AST.parseStyle(attrib.value);\n }\n else {\n attributes[attrib.name] = attrib.value;\n }\n });\n astNode.attributes = attributes;\n }\n // Handle children\n if (node.childNodes.length) {\n const children = [];\n [].forEach.call(node.childNodes, (childNode) => {\n appendChildNodes(childNode, children);\n });\n if (children.length) {\n astNode.children = children;\n }\n }\n addTo.push(astNode);\n };\n [].forEach.call(doc.body.childNodes, (childNode) => appendChildNodes(childNode, nodes));\n return nodes;\n }\n}\n/* *\n *\n * Static Properties\n *\n * */\n/**\n * The list of allowed SVG or HTML attributes, used for sanitizing\n * potentially harmful content from the chart configuration before adding to\n * the DOM.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedAttributes)\n *\n * @example\n * // Allow a custom, trusted attribute\n * Highcharts.AST.allowedAttributes.push('data-value');\n *\n * @name Highcharts.AST.allowedAttributes\n * @type {Array<string>}\n */\nAST.allowedAttributes = [\n 'alt',\n 'aria-controls',\n 'aria-describedby',\n 'aria-expanded',\n 'aria-haspopup',\n 'aria-hidden',\n 'aria-label',\n 'aria-labelledby',\n 'aria-live',\n 'aria-pressed',\n 'aria-readonly',\n 'aria-roledescription',\n 'aria-selected',\n 'aria-sort',\n 'class',\n 'clip-path',\n 'color',\n 'colspan',\n 'cx',\n 'cy',\n 'd',\n 'disabled',\n 'dx',\n 'dy',\n 'fill',\n 'filterUnits',\n 'flood-color',\n 'flood-opacity',\n 'height',\n 'href',\n 'id',\n 'in',\n 'in2',\n 'markerHeight',\n 'markerWidth',\n 'offset',\n 'opacity',\n 'operator',\n 'orient',\n 'padding',\n 'paddingLeft',\n 'paddingRight',\n 'patternUnits',\n 'r',\n 'radius',\n 'refX',\n 'refY',\n 'result',\n 'role',\n 'rowspan',\n 'scope',\n 'slope',\n 'src',\n 'startOffset',\n 'stdDeviation',\n 'stroke-linecap',\n 'stroke-width',\n 'stroke',\n 'style',\n 'summary',\n 'tabindex',\n 'tableValues',\n 'target',\n 'text-align',\n 'text-anchor',\n 'textAnchor',\n 'textLength',\n 'title',\n 'type',\n 'valign',\n 'width',\n 'x',\n 'x1',\n 'x2',\n 'xlink:href',\n 'y',\n 'y1',\n 'y2',\n 'zIndex'\n];\n/**\n * The list of allowed references for referring attributes like `href` and\n * `src`. Attribute values will only be allowed if they start with one of\n * these strings.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedReferences)\n *\n * @example\n * // Allow tel:\n * Highcharts.AST.allowedReferences.push('tel:');\n *\n * @name Highcharts.AST.allowedReferences\n * @type {Array<string>}\n */\nAST.allowedReferences = [\n 'https://',\n 'http://',\n 'mailto:',\n '/',\n '../',\n './',\n '#'\n];\n/**\n * The list of allowed SVG or HTML tags, used for sanitizing potentially\n * harmful content from the chart configuration before adding to the DOM.\n *\n * @see [Source code with default values](\n * https://github.com/highcharts/highcharts/blob/master/ts/Core/Renderer/HTML/AST.ts#:~:text=public%20static%20allowedTags)\n *\n * @example\n * // Allow a custom, trusted tag\n * Highcharts.AST.allowedTags.push('blink'); // ;)\n *\n * @name Highcharts.AST.allowedTags\n * @type {Array<string>}\n */\nAST.allowedTags = [\n '#text',\n 'a',\n 'abbr',\n 'b',\n 'br',\n 'button',\n 'caption',\n 'circle',\n 'clipPath',\n 'code',\n 'dd',\n 'defs',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'feComponentTransfer',\n 'feComposite',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'filter',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hr',\n 'i',\n 'img',\n 'li',\n 'linearGradient',\n 'marker',\n 'ol',\n 'p',\n 'path',\n 'pattern',\n 'pre',\n 'rect',\n 'small',\n 'span',\n 'stop',\n 'strong',\n 'style',\n 'sub',\n 'sup',\n 'svg',\n 'table',\n 'tbody',\n 'td',\n 'text',\n 'textPath',\n 'th',\n 'thead',\n 'title',\n 'tr',\n 'tspan',\n 'u',\n 'ul'\n];\n/** @internal */\nAST.emptyHTML = emptyHTML;\n/**\n * Allow all custom SVG and HTML attributes, references and tags (together\n * with potentially harmful ones) to be added to the DOM from the chart\n * configuration. In other words, disable the allow-listing which is the\n * primary functionality of the AST.\n *\n * WARNING: Setting this property to `true` while allowing untrusted user\n * data in the chart configuration will expose your application to XSS\n * security risks!\n *\n * Note that in case you want to allow a known set of tags or attributes,\n * you should allow-list them instead of disabling the filtering totally.\n * See [allowedAttributes](Highcharts.AST#.allowedAttributes),\n * [allowedReferences](Highcharts.AST#.allowedReferences) and\n * [allowedTags](Highcharts.AST#.allowedTags). The `bypassHTMLFiltering`\n * setting is intended only for those cases where allow-listing is not\n * practical, and the chart configuration already comes from a secure\n * source.\n *\n * @example\n * // Allow all custom attributes, references and tags (disable DOM XSS\n * // filtering)\n * Highcharts.AST.bypassHTMLFiltering = true;\n *\n * @name Highcharts.AST.bypassHTMLFiltering\n * @static\n */\nAST.bypassHTMLFiltering = false;\n/* *\n *\n * Default Export\n *\n * */\nexport default AST;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Serialized form of an SVG/HTML definition, including children.\n *\n * @interface Highcharts.ASTNode\n */ /**\n* @name Highcharts.ASTNode#attributes\n* @type {Highcharts.SVGAttributes|undefined}\n*/ /**\n* @name Highcharts.ASTNode#children\n* @type {Array<Highcharts.ASTNode>|undefined}\n*/ /**\n* @name Highcharts.ASTNode#tagName\n* @type {string|undefined}\n*/ /**\n* @name Highcharts.ASTNode#textContent\n* @type {string|undefined}\n*/\n(''); // Keeps doclets above in file\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport D from './Defaults.js';\nconst { defaultOptions, defaultTime } = D;\nimport G from './Globals.js';\nconst { pageLang } = G;\nimport { correctFloat, extend, getNestedProperty, isArray, isNumber, isObject, isString, pick, ucfirst } from '../Shared/Utilities.js';\n/** @internal */\nconst helpers = {\n // Built-in helpers\n add: (a, b) => a + b,\n divide: (a, b) => (b !== 0 ? correctFloat(a / b) : ''),\n // eslint-disable-next-line eqeqeq\n eq: (a, b) => a == b,\n each: function (arr) {\n const match = arguments[arguments.length - 1];\n return isArray(arr) ?\n arr.map((item, i) => format(match.body, extend(isObject(item) ? item : { '@this': item }, {\n '@index': i,\n '@first': i === 0,\n '@last': i === arr.length - 1\n }))).join('') :\n false;\n },\n ge: (a, b) => a >= b,\n gt: (a, b) => a > b,\n 'if': (condition) => !!condition,\n le: (a, b) => a <= b,\n lt: (a, b) => a < b,\n multiply: (a, b) => correctFloat(a * b, 15),\n // eslint-disable-next-line eqeqeq\n ne: (a, b) => a != b,\n subtract: (a, b) => a - b,\n ucfirst,\n unless: (condition) => !condition\n};\nconst numberFormatCache = {};\n/* *\n *\n * Functions\n *\n * */\n/**\n * Internal convenience function.\n * @internal\n */\nconst isQuotedString = (str) => /^[\"'].+[\"']$/.test(str);\n/**\n * Formats a JavaScript date timestamp (milliseconds since Jan 1st 1970) into a\n * human readable date string. The format is a subset of the formats for PHP's\n * [strftime](https://www.php.net/manual/en/function.strftime.php) function.\n * Additional formats can be given in the {@link Highcharts.dateFormats} hook.\n *\n * Since v6.0.5, all internal dates are formatted through the\n * {@link Highcharts.Chart#time} instance to respect chart-level time settings.\n * The `Highcharts.dateFormat` function only reflects global time settings set\n * with `setOptions`.\n *\n * Supported format keys:\n * - `%a`: Short weekday, like 'Mon'\n * - `%A`: Long weekday, like 'Monday'\n * - `%d`: Two digit day of the month, 01 to 31\n * - `%e`: Day of the month, 1 through 31\n * - `%w`: Day of the week, 0 through 6\n * - `%b`: Short month, like 'Jan'\n * - `%B`: Long month, like 'January'\n * - `%m`: Two digit month number, 01 through 12\n * - `%y`: Two digits year, like 09 for 2009\n * - `%Y`: Four digits year, like 2009\n * - `%H`: Two digits hours in 24h format, 00 through 23\n * - `%k`: Hours in 24h format, 0 through 23\n * - `%I`: Two digits hours in 12h format, 00 through 11\n * - `%l`: Hours in 12h format, 1 through 12\n * - `%M`: Two digits minutes, 00 through 59\n * - `%p`: Upper case AM or PM\n * - `%P`: Lower case AM or PM\n * - `%S`: Two digits seconds, 00 through 59\n * - `%L`: Milliseconds (naming from Ruby)\n *\n * @function Highcharts.dateFormat\n *\n * @param {string} format\n * The desired format where various time representations are prefixed\n * with `%`.\n *\n * @param {number} timestamp\n * The JavaScript timestamp.\n *\n * @param {boolean} [upperCaseFirst=false]\n * Upper case first letter in the return.\n *\n * @return {string}\n * The formatted date.\n */\nfunction dateFormat(format, timestamp, upperCaseFirst) {\n return defaultTime.dateFormat(format, timestamp, upperCaseFirst);\n}\n/**\n * Format a string according to a subset of the rules of Python's String.format\n * method.\n *\n * @example\n * let s = Highcharts.format(\n * 'The {color} fox was {len:.2f} feet long',\n * { color: 'red', len: Math.PI }\n * );\n * // => The red fox was 3.14 feet long\n *\n * @function Highcharts.format\n *\n * @param {string} str\n * The string to format.\n *\n * @param {Record<string, *>} ctx\n * The context, a collection of key-value pairs where each key is\n * replaced by its value.\n *\n * @param {Highcharts.Chart} [owner]\n * A `Chart` or `Grid` instance used to get numberFormatter and time.\n *\n * @return {string}\n * The formatted string.\n */\nfunction format(str = '', ctx, owner) {\n const regex = /\\{([^{}]+)\\}/g, \n // The sub expression regex is the same as the top expression regex,\n // but except parens and block helpers (#), and surrounded by parens\n // instead of curly brackets.\n subRegex = /\\(([^()]+)\\)/g, matches = [], floatRegex = /f$/, decRegex = /\\.(\\d)/, lang = owner?.options?.lang || defaultOptions.lang, time = owner?.time || defaultTime, numberFormatter = owner?.numberFormatter || numberFormat.bind(owner);\n /*\n * Get a literal or variable value inside a template expression. May be\n * extended with other types like string or null if needed, but keep it\n * small for now.\n */\n const resolveProperty = (key = '') => {\n let n;\n // Literals\n if (key === 'true') {\n return true;\n }\n if (key === 'false') {\n return false;\n }\n if ((n = Number(key)).toString() === key) {\n return n;\n }\n if (isQuotedString(key)) {\n return key.slice(1, -1);\n }\n // Variables and constants\n return getNestedProperty(key, ctx);\n };\n let match, currentMatch, depth = 0, hasSub;\n // Parse and create tree\n while ((match = regex.exec(str)) !== null) {\n // When a sub expression is found, it is evaluated first, and the\n // results recursively evaluated until no subexpression exists.\n const mainMatch = match, subMatch = subRegex.exec(match[1]);\n if (subMatch) {\n match = subMatch;\n hasSub = true;\n }\n if (!currentMatch?.isBlock) {\n currentMatch = {\n ctx,\n expression: match[1],\n find: match[0],\n isBlock: match[1].charAt(0) === '#',\n start: match.index,\n startInner: match.index + match[0].length,\n length: match[0].length\n };\n }\n // Identify helpers\n const fn = (currentMatch.isBlock ? mainMatch : match)[1].split(' ')[0].replace('#', '');\n if (helpers[fn]) {\n // Block helper, only 0 level is handled\n if (currentMatch.isBlock && fn === currentMatch.fn) {\n depth++;\n }\n if (!currentMatch.fn) {\n currentMatch.fn = fn;\n }\n }\n // Closing a block helper\n const startingElseSection = match[1] === 'else';\n if (currentMatch.isBlock &&\n currentMatch.fn && (match[1] === `/${currentMatch.fn}` ||\n startingElseSection)) {\n if (!depth) { // === 0\n const start = currentMatch.startInner, body = str.substr(start, match.index - start);\n // Either closing without an else section, or when encountering\n // an else section\n if (currentMatch.body === void 0) {\n currentMatch.body = body;\n currentMatch.startInner = match.index + match[0].length;\n // The body exists already, so this is the else section\n }\n else {\n currentMatch.elseBody = body;\n }\n currentMatch.find += body + match[0];\n if (!startingElseSection) {\n matches.push(currentMatch);\n currentMatch = void 0;\n }\n }\n else if (!startingElseSection) {\n depth--;\n }\n // Common expression\n }\n else if (!currentMatch.isBlock) {\n matches.push(currentMatch);\n }\n // Evaluate sub-matches one by one to prevent orphaned block closers\n if (subMatch && !currentMatch?.isBlock) {\n break;\n }\n }\n // Execute\n matches.forEach((match) => {\n const { body, elseBody, expression, fn } = match;\n let replacement, i;\n // Helper function\n if (fn) {\n // Pass the helpers the amount of arguments defined by the function,\n // then the match as the last argument.\n const args = [match], parts = [], len = expression.length;\n let start = 0, startChar;\n for (i = 0; i <= len; i++) {\n const char = expression.charAt(i);\n // Start of string\n if (!startChar && (char === '\"' || char === '\\'')) {\n startChar = char;\n // End of string\n }\n else if (startChar === char) {\n startChar = '';\n }\n if (!startChar &&\n (char === ' ' || i === len)) {\n parts.push(expression.substr(start, i - start));\n start = i + 1;\n }\n }\n i = helpers[fn].length;\n while (i--) {\n args.unshift(resolveProperty(parts[i + 1]));\n }\n replacement = helpers[fn].apply(ctx, args);\n // Block helpers may return true or false. They may also return a\n // string, like the `each` helper.\n if (match.isBlock && typeof replacement === 'boolean') {\n replacement = format(replacement ? body : elseBody, ctx, owner);\n }\n // Simple variable replacement\n }\n else {\n const valueAndFormat = isQuotedString(expression) ?\n [expression] : expression.split(':');\n replacement = resolveProperty(valueAndFormat.shift() || '');\n // Format the replacement\n if (valueAndFormat.length && typeof replacement === 'number') {\n const segment = valueAndFormat.join(':');\n if (floatRegex.test(segment)) { // Float\n const decimals = parseInt((segment.match(decRegex) || ['', '-1'])[1], 10);\n if (replacement !== null) {\n replacement = numberFormatter(replacement, decimals, lang.decimalPoint, segment.indexOf(',') > -1 ? lang.thousandsSep : '');\n }\n }\n else {\n replacement = time.dateFormat(segment, replacement);\n }\n }\n // Use string literal in order to be preserved in the outer\n // expression\n subRegex.lastIndex = 0;\n if (subRegex.test(match.find) && isString(replacement)) {\n replacement = `\"${replacement}\"`;\n }\n }\n str = str.replace(match.find, pick(replacement, ''));\n });\n return hasSub ? format(str, ctx, owner) : str;\n}\n/**\n * Format a number and return a string based on input settings.\n *\n * @sample highcharts/members/highcharts-numberformat/\n * Custom number format\n *\n * @function Highcharts.numberFormat\n *\n * @param {number} number\n * The input number to format.\n *\n * @param {number} decimals\n * The amount of decimals. A value of -1 preserves the amount in the\n * input number.\n *\n * @param {string} [decimalPoint]\n * The decimal point, defaults to the one given in the lang options, or\n * a dot.\n *\n * @param {string} [thousandsSep]\n * The thousands separator, defaults to the one given in the lang\n * options, or a space character.\n *\n * @return {string}\n * The formatted number.\n */\nfunction numberFormat(number, decimals, decimalPoint, thousandsSep) {\n number = +number || 0;\n decimals = +decimals;\n let ret, fractionDigits, [mantissa, exp] = number.toString().split('e').map(Number);\n const lang = this?.options?.lang || defaultOptions.lang, origDec = (number.toString().split('.')[1] || '').split('e')[0].length, firstDecimals = decimals, options = {};\n decimalPoint ?? (decimalPoint = lang.decimalPoint);\n thousandsSep ?? (thousandsSep = lang.thousandsSep);\n if (decimals === -1) {\n // Preserve decimals. Not huge numbers (#3793).\n decimals = Math.min(origDec, 20);\n }\n else if (!isNumber(decimals)) {\n decimals = 2;\n }\n else if (decimals && exp < 0) {\n // Expose decimals from exponential notation (#7042)\n fractionDigits = decimals + exp;\n if (fractionDigits >= 0) {\n // Remove too small part of the number while keeping the notation\n mantissa = +mantissa.toExponential(fractionDigits).split('e')[0];\n decimals = fractionDigits;\n }\n else {\n // `fractionDigits < 0`\n mantissa = Math.floor(mantissa);\n if (decimals < 20) {\n // Use number instead of exponential notation (#7405)\n number = +(mantissa * Math.pow(10, exp)).toFixed(decimals);\n }\n else {\n // Or zero\n number = 0;\n }\n exp = 0;\n }\n }\n if (exp) {\n decimals ?? (decimals = 2);\n number = mantissa;\n }\n if (isNumber(decimals) && decimals >= 0) {\n options.minimumFractionDigits = decimals;\n options.maximumFractionDigits = decimals;\n }\n if (thousandsSep === '') {\n options.useGrouping = false;\n }\n const hasSeparators = thousandsSep || decimalPoint, locale = hasSeparators ?\n 'en' : (this?.locale || lang.locale || pageLang), cacheKey = JSON.stringify(options) + locale, nf = numberFormatCache[cacheKey] ?? (numberFormatCache[cacheKey] = new Intl.NumberFormat(locale, options));\n ret = nf.format(number);\n // If thousandsSep or decimalPoint are set, fall back to using English\n // format with string replacement for the separators.\n if (hasSeparators) {\n ret = ret\n // Preliminary step to avoid re-swapping (#22402)\n .replace(/([,\\.])/g, '_$1')\n .replace(/_\\,/g, thousandsSep ?? ',')\n .replace('_.', decimalPoint ?? '.');\n }\n if (\n // Remove signed zero (#20564)\n (!decimals && +ret === 0) ||\n // Small numbers, no decimals (#14023)\n (exp < 0 && !firstDecimals)) {\n ret = '0';\n }\n if (exp && +ret !== 0) {\n ret += 'e' + (exp < 0 ? '' : '+') + exp;\n }\n return ret;\n}\n/* *\n *\n * Default Export\n *\n * */\nconst Templating = {\n dateFormat,\n format,\n helpers,\n numberFormat\n};\nexport default Templating;\n/* *\n * API Declarations\n * */\n/**\n * @interface Highcharts.Templating\n *\n * The Highcharts.Templating interface provides a structure for defining\n * helpers. Helpers can be used as conditional blocks or functions within\n * expressions. Highcharts includes several built-in helpers and supports\n * the addition of custom helpers.\n *\n * @see [More information](\n * https://www.highcharts.com/docs/chart-concepts/templating#helpers)\n *\n * @example\n * // Define a custom helper to return the absolute value of a number\n * Highcharts.Templating.helpers.abs = value => Math.abs(value);\n *\n * // Usage in a format string\n * format: 'Absolute value: {abs point.y}'\n *\n * @name Highcharts.Templating#helpers\n * @type {Record<string, Function>}\n */\n(''); // Keeps doclets above in file\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport AST from '../Renderer/HTML/AST.js';\nimport A from '../Animation/AnimationUtilities.js';\nconst { animObject } = A;\nimport D from '../Defaults.js';\nconst { defaultOptions } = D;\nimport F from '../Templating.js';\nconst { format } = F;\nimport { addEvent, crisp, erase, extend, fireEvent, getNestedProperty, isArray, isFunction, isNumber, isObject, isString, merge, pick, removeEvent } from '../../Shared/Utilities.js';\nimport { uniqueKey } from '../Utilities.js';\n/* eslint-disable no-invalid-this, valid-jsdoc */\n/* *\n *\n * Class\n *\n * */\n/**\n * The Point object. The point objects are generated from the `series.data`\n * configuration objects or raw numbers. They can be accessed from the\n * `Series.points` array. Other ways to instantiate points are through {@link\n * Highcharts.Series#addPoint} or {@link Highcharts.Series#setData}.\n *\n * @class\n * @name Highcharts.Point\n *\n * @param {Highcharts.Series} series\n * The series object containing this point.\n *\n * @param {Highcharts.PointOptionsType} options\n * The data in either number, array or object format.\n *\n * @param {number} [x]\n * Optionally, the X value of the point.\n *\n * @emits Highcharts.Point#event:afterInit\n */\nclass Point {\n /* *\n *\n * Constructor\n *\n * */\n constructor(series, options, x) {\n /** @internal */\n this.formatPrefix = 'point';\n /**\n * For certain series types, like pie charts, where individual points can\n * be shown or hidden.\n *\n * @name Highcharts.Point#visible\n * @type {boolean}\n * @default true\n */\n this.visible = true;\n // For tooltip and data label formatting\n this.point = this;\n this.series = series;\n this.applyOptions(options, x);\n // Add a unique ID to the point if none is assigned\n this.id ?? (this.id = uniqueKey());\n this.resolveColor();\n this.dataLabelOnNull ?? (this.dataLabelOnNull = series.options.nullInteraction);\n series.chart.pointCount++;\n // Set point properties for convenient access in tooltip and data labels\n this.category = series.xAxis?.categories?.[this.x] ?? this.x;\n this.key = this.name ?? this.category;\n fireEvent(this, 'afterInit');\n }\n /* *\n *\n * API JSDoc doclet copies for uninitialized properties\n *\n * */\n /**\n * For categorized axes this property holds the category name for the\n * point. For other axes it holds the X value.\n *\n * @name Highcharts.Point#category\n * @type {number|string}\n */\n /**\n * The point's current color.\n *\n * @name Highcharts.Point#color\n * @type {Highcharts.ColorType|undefined}\n */\n /**\n * The point's current color index, used in styled mode instead of\n * `color`. The color index is inserted in class names used for styling.\n *\n * @name Highcharts.Point#colorIndex\n * @type {number|undefined}\n */\n /**\n * SVG graphic representing the point in the chart. In some cases it may be\n * a hidden graphic to improve accessibility.\n *\n * Typically this is a simple shape, like a `rect` for column charts or\n * `path` for line markers, but for some complex series types like boxplot\n * or 3D charts, the graphic may be a `g` element containing other shapes.\n * The graphic is generated the first time {@link Series#drawPoints} runs,\n * and updated and moved on subsequent runs.\n *\n * @see Highcharts.Point#graphics\n *\n * @name Highcharts.Point#graphic\n * @type {Highcharts.SVGElement|undefined}\n */\n /**\n * Array for multiple SVG graphics representing the point in the\n * chart. Only used in cases where the point can not be represented\n * by a single graphic.\n *\n * @see Highcharts.Point#graphic\n *\n * @name Highcharts.Point#graphics\n * @type {Array<Highcharts.SVGElement>|undefined}\n */\n /**\n * The point's name if it is defined, or its category in case of a category,\n * otherwise the x value. Convenient for tooltip and data label formatting.\n *\n * @name Highcharts.Point#key\n * @type {number|string}\n */\n /**\n * The name of the point. The name can be given as the first position of the\n * point configuration array, or as a `name` property in the configuration:\n *\n * @example\n * // Array config\n * data: [\n * ['John', 1],\n * ['Jane', 2]\n * ]\n *\n * // Object config\n * data: [{\n * name: 'John',\n * y: 1\n * }, {\n * name: 'Jane',\n * y: 2\n * }]\n *\n * @name Highcharts.Point#name\n * @type {string}\n */\n /**\n * The point's options as applied in the initial configuration, or\n * extended through `Point.update`.\n *\n * In TypeScript you have to extend `PointOptionsObject` via an\n * additional interface to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n * customProperty: string;\n * }\n * ```\n *\n * @name Highcharts.Point#options\n * @type {Highcharts.PointOptionsObject}\n */\n /**\n * The percentage for points in a stacked series, pies or gauges.\n *\n * @name Highcharts.Point#percentage\n * @type {number|undefined}\n */\n /**\n * Array of all hovered points when using shared tooltips.\n *\n * @name Highcharts.Point#points\n * @type {Array<Highcharts.Point>|undefined}\n */\n /**\n * Whether the point is selected or not.\n *\n * @see Point#select\n * @see Chart#getSelectedPoints\n *\n * @name Highcharts.Point#selected\n * @type {boolean}\n */\n /**\n * The series object associated with the point.\n *\n * @name Highcharts.Point#series\n * @type {Highcharts.Series}\n */\n /**\n * The attributes of the rendered SVG shape like in `column` or `pie`\n * series.\n *\n * @readonly\n * @name Highcharts.Point#shapeArgs\n * @type {Readonly<Highcharts.SVGAttributes>|undefined}\n */\n /**\n * Defines the tooltip's position for a data point in a chart. It is an\n * array of numbers representing the coordinates for the tooltip's\n * placement, allowing for precise control over its location.\n *\n * @readonly\n * @name Highcharts.Point#tooltipPos\n * @type {Readonly<Array<number>>|undefined}\n */\n /**\n * The total of values in either a stack for stacked series, or a pie in a\n * pie series.\n *\n * @name Highcharts.Point#total\n * @type {number|undefined}\n */\n /**\n * The x value of the point.\n *\n * @name Highcharts.Point#x\n * @type {number}\n */\n /**\n * The y value of the point.\n *\n * @name Highcharts.Point#y\n * @type {number|undefined}\n */\n /* *\n *\n * Functions\n *\n * */\n /**\n * Apply the options containing the x and y data and possible some extra\n * properties. Called on point init or from point.update.\n *\n * @internal\n * @function Highcharts.Point#applyOptions\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options as defined in series.data.\n *\n * @param {number} [x]\n * Optionally, the x value.\n *\n * @param {boolean} [isMock]\n * If true, the point is not a real instance, but a mock object\n * created for handling data. Avoid some logic.\n *\n * @return {Highcharts.Point}\n * The Point instance.\n */\n applyOptions(options, x, isMock) {\n const point = this, series = point.series, pointValKey = series.options.pointValKey || series.pointValKey;\n options = Point.prototype.optionsToObject.call(this, options);\n // Copy options directly to point\n extend(point, options);\n // If we're updating, extend or merge existing options\n if (point.options) {\n // If we're not allowed to mutate, merge new data into existing and\n // return a copy, because `point.options` is a reference to\n // `options.data[i]`\n point.options = series.chart.options.chart.allowMutatingData ?\n extend(point.options, options) :\n merge(point.options, options);\n }\n else {\n point.options = options;\n }\n // For higher dimension series types. For instance, for ranges, point.y\n // is mapped to point.low.\n if (pointValKey) {\n point.y = Point.prototype.getNestedProperty.call(point, pointValKey);\n }\n if (isNumber(x)) {\n point.x = x;\n }\n if (!isMock) {\n // The point is initially selected by options (#5777)\n if (point.selected) {\n point.state = 'select';\n }\n // Since options are copied into the Point instance, some accidental\n // options must be shielded (#5681)\n if (options.group) {\n delete point.group;\n }\n if (options.dataLabels) {\n delete point.dataLabels;\n }\n point.isNull = point.isValid && !point.isValid();\n // #9233, #10874\n point.formatPrefix = point.isNull ? 'null' : 'point';\n }\n return point;\n }\n /**\n * Get the origin position for entrance animation of new points. Modifies\n * the given x and y based on the chart orientation and shape dimensions.\n * Adds an opacity of 0 to make the point fade in.\n *\n * To disable entrance animation, return an empty object.\n *\n * @param {Highcharts.PositionObject} position\n * The initial x and y position in terms of plot area coordinates.\n * @param {Highcharts.SVGAttributes} shape\n * The shape arguments, containing width and height and more.\n * @return {Highcharts.SVGAttributes}\n * The modified attributes with x and y adjusted for the shape.\n *\n * @internal\n * @function Highcharts.Point#getOrigin\n */\n getOrigin({ x = 0, y = 0 }, shape = {}) {\n const { graphic, series } = this;\n // The chart is inverted, but the marker group is not, like a scatter\n // series in an inverted chart.\n if (series.chart.inverted &&\n graphic?.parentGroup &&\n !graphic?.parentGroup?.rotation) {\n const pos = this.pos(false, x, y);\n if (pos) {\n x = pos[0];\n y = pos[1];\n }\n }\n x -= (shape.width || 0) / 2;\n y -= (shape.height || 0) / 2;\n const attribs = { x };\n // To avoid having to deal with stacking, column height etc, we only set\n // y for non-column series. Range series (having this.plotHigh) also\n // have their own logic, with two markers per point.\n if (!series.is('column') && !this.plotHigh) {\n attribs.y = y;\n }\n return attribs;\n }\n /**\n * Destroy a point to clear memory. Its reference still stays in\n * `series.data`.\n *\n * @internal\n * @function Highcharts.Point#destroy\n */\n destroy() {\n if (!this.condemned) {\n const point = this, series = point.series, chart = series.chart, hoverPoints = chart.hoverPoints, globalAnimation = point.series.chart.renderer.globalAnimation, { duration } = animObject(globalAnimation);\n /**\n * Allow to call after animation.\n * @internal\n */\n const destroyPoint = () => {\n // Remove all events and elements\n if (point.graphic ||\n point.graphics ||\n point.dataLabel ||\n point.dataLabels) {\n removeEvent(point);\n point.destroyElements();\n }\n for (const prop in point) { // eslint-disable-line guard-for-in\n delete point[prop];\n }\n };\n if (point.legendItem) {\n // Pies have legend items\n chart.legend.destroyItem(point);\n }\n if (hoverPoints) {\n point.setState();\n erase(hoverPoints, point);\n if (!hoverPoints.length) {\n chart.hoverPoints = void 0;\n }\n }\n if (point === chart.hoverPoint) {\n point.onMouseOut();\n }\n // Remove properties after animation\n if (duration && series.condemnedPoints) {\n series.condemnedPoints.push(this);\n this.graphic?.addClass('highcharts-point-condemned');\n setTimeout(destroyPoint, duration);\n }\n else {\n destroyPoint();\n }\n chart.pointCount--;\n }\n this.condemned = true;\n }\n /**\n * Destroy SVG elements associated with the point.\n *\n * @internal\n * @function Highcharts.Point#destroyElements\n *\n * @param {Highcharts.Dictionary<number>} [kinds]\n * Kinds of elements to destroy\n */\n destroyElements(kinds = { graphic: 1, dataLabel: 1 }) {\n const point = this, props = [];\n let prop, i;\n if (kinds.graphic) {\n props.push('graphic', 'connector');\n }\n if (kinds.dataLabel) {\n props.push('dataLabel', 'dataLabelPath', 'dataLabelUpper');\n }\n i = props.length;\n while (i--) {\n prop = props[i];\n if (point[prop]) {\n point[prop] = point[prop].destroy();\n }\n }\n ['graphic', 'dataLabel'].forEach((prop) => {\n const plural = `${prop}s`;\n if (kinds[prop] && point[plural]) {\n point[plural].forEach((item) => {\n if (item?.element) {\n item.destroy();\n }\n });\n delete point[plural];\n }\n });\n }\n /**\n * Fire an event on the Point object.\n *\n * @internal\n * @function Highcharts.Point#firePointEvent\n *\n * @param {string} eventType\n * Type of the event.\n *\n * @param {Highcharts.Dictionary<any>|Event} [eventArgs]\n * Additional event arguments.\n *\n * @param {Highcharts.EventCallbackFunction<Highcharts.Point>|Function} [defaultFunction]\n * Default event handler.\n *\n * @emits Highcharts.Point#event:*\n */\n firePointEvent(eventType, eventArgs, defaultFunction) {\n const point = this, series = this.series, seriesOptions = series.options;\n // Load event handlers on demand to save time on mouseover/out\n point.manageEvent(eventType);\n // Add default handler if in selection mode\n if (eventType === 'click' && seriesOptions.allowPointSelect) {\n defaultFunction = function (event) {\n // Control key is for Windows, meta (= Cmd key) for Mac, Shift\n // for Opera.\n if (!point.condemned && point.select) { // #2911, #19075\n point.select(null, event.ctrlKey || event.metaKey || event.shiftKey);\n }\n };\n }\n fireEvent(point, eventType, eventArgs, defaultFunction);\n }\n /**\n * Get the CSS class names for individual points. Used internally where the\n * returned value is set on every point.\n *\n * @function Highcharts.Point#getClassName\n *\n * @return {string}\n * The class names.\n */\n getClassName() {\n const point = this;\n return 'highcharts-point' +\n (point.selected ? ' highcharts-point-select' : '') +\n (point.negative && point.series.options.negativeColor !== false ?\n ' highcharts-negative' : '') +\n (point.isNull ? ' highcharts-null-point' : '') +\n (typeof point.colorIndex !== 'undefined' ?\n ' highcharts-color-' + point.colorIndex : '') +\n (point.options.className ? ' ' + point.options.className : '') +\n (point.zone?.className ?\n ' ' + point.zone.className.replace('highcharts-negative', '') :\n '');\n }\n /**\n * Returns the value of the point property for a given value.\n * @internal\n */\n getNestedProperty(key) {\n if (!key) {\n return;\n }\n if (key.indexOf('custom.') === 0) {\n return getNestedProperty(key, this.options);\n }\n return this[key];\n }\n /**\n * In a series with `zones`, return the zone that the point belongs to.\n *\n * @function Highcharts.Point#getZone\n *\n * @return {Highcharts.SeriesZonesOptionsObject}\n * The zone item.\n */\n getZone() {\n const series = this.series, zones = series.zones, zoneAxis = series.zoneAxis || 'y';\n let zone, i = 0;\n zone = zones[i];\n while (this[zoneAxis] >= zone.value) {\n zone = zones[++i];\n }\n // For resetting or reusing the point (#8100)\n if (!this.nonZonedColor) {\n this.nonZonedColor = this.color;\n }\n if (zone?.color && !this.options.color) {\n this.color = zone.color;\n }\n else {\n this.color = this.nonZonedColor;\n }\n return zone;\n }\n /**\n * Utility to check if point has new shape type. Used in column series and\n * all others that are based on column series.\n * @internal\n */\n hasNewShapeType() {\n const point = this;\n const oldShapeType = point.graphic &&\n (point.graphic.symbolName || point.graphic.element.nodeName);\n return oldShapeType !== this.shapeType;\n }\n /**\n * Determine if point is valid.\n *\n * @internal\n * @function Highcharts.Point#isValid\n */\n isValid() {\n return ((isNumber(this.x) ||\n this.x instanceof Date) &&\n isNumber(this.y));\n }\n /**\n * Transform number or array configs into objects. Also called for object\n * configs. Used internally to unify the different configuration formats for\n * points. For example, a simple number `10` in a line series will be\n * transformed to `{ y: 10 }`, and an array config like `[1, 10]` in a\n * scatter series will be transformed to `{ x: 1, y: 10 }`.\n *\n * @function Highcharts.Point#optionsToObject\n *\n * @param {Highcharts.PointOptionsType} options\n * Series data options.\n *\n * @return {Highcharts.Dictionary<*>}\n * Transformed point options.\n */\n optionsToObject(options) {\n const series = this.series, keys = series.options.keys, pointArrayMap = keys || series.pointArrayMap || ['y'], valueCount = pointArrayMap.length;\n let ret = {}, firstItemType, i = 0, j = 0;\n if (isNumber(options) || options === null) {\n ret[pointArrayMap[0]] = options;\n }\n else if (isArray(options)) {\n // With leading x value\n if (!keys && options.length > valueCount) {\n firstItemType = typeof options[0];\n if (firstItemType === 'string') {\n if (series.xAxis?.dateTime) {\n ret.x = series.chart.time.parse(options[0]);\n }\n else {\n ret[series.tupleKey || 'name'] = options[0];\n }\n }\n else if (firstItemType === 'number') {\n ret.x = options[0];\n }\n i++;\n }\n while (j < valueCount) {\n // Skip undefined positions for keys\n if (!keys || typeof options[i] !== 'undefined') {\n ret[pointArrayMap[j]] = options[i];\n }\n i++;\n j++;\n }\n }\n else if (typeof options === 'object') {\n ret = options;\n // This is the fastest way to detect if there are individual point\n // dataLabels that need to be considered in drawDataLabels. These\n // can only occur in object configs.\n if (options.dataLabels) {\n // Override the prototype function to always return true,\n // regardless of whether data labels are enabled series-wide\n series.hasDataLabels = () => true;\n }\n // Same approach as above for markers\n if (options.marker) {\n series._hasPointMarkers = true;\n }\n }\n // Handle nested keys, e.g. ['color.pattern.image'], but only if we're\n // using keys or `dataTable`\n if (keys || !series.options.data) {\n Object.keys(ret).forEach((key) => {\n if (key.indexOf('.') > 0) {\n Point.prototype.setNestedProperty(ret, ret[key], key);\n // Delete the literal nested key\n delete ret[key];\n }\n });\n }\n return ret;\n }\n /**\n * Get the pixel position of the point relative to the plot area.\n *\n * @function Highcharts.Point#pos\n *\n * @sample highcharts/point/position\n * Get point's position in pixels.\n *\n * @param {boolean} chartCoordinates\n * If true, the returned position is relative to the full chart area.\n * If false, it is relative to the plot area determined by the axes.\n *\n * @param {number|undefined} plotX\n * A custom plot x position to be computed. Used internally for getting the\n * starting point of an animation.\n *\n * @param {number|undefined} plotY\n * A custom plot y position to be computed. Used internally for getting the\n * starting point of an animation, and for some series types that have\n * multiple `y` positions, like area range (low and high values).\n *\n * @return {Array<number>|undefined}\n * Coordinates of the point if the point exists.\n */\n pos(chartCoordinates, plotX = this.plotX, plotY = this.plotY) {\n const { series } = this, { chart, xAxis, yAxis } = series || {};\n let posX = 0, posY = 0;\n if (chart && isNumber(plotX) && isNumber(plotY)) {\n if (chartCoordinates) {\n posX = xAxis ? xAxis.pos : chart.plotLeft;\n posY = yAxis ? yAxis.pos : chart.plotTop;\n }\n return chart.inverted && xAxis && yAxis ?\n [yAxis.len - plotY + posY, xAxis.len - plotX + posX] :\n [plotX + posX, plotY + posY];\n }\n }\n /**\n * Resolve the color of a point.\n *\n * @internal\n * @function Highcharts.Point#resolveColor\n */\n resolveColor() {\n const { options, series } = this, chart = series.chart, optionsChart = chart.options.chart, styledMode = chart.styledMode;\n let color, colorCount = optionsChart.colorCount, colorIndex;\n // Remove points nonZonedColor for later recalculation\n delete this.nonZonedColor;\n if (series.options.colorByPoint) {\n if (!styledMode) {\n const colors = series.options.colors ||\n chart.options.colors;\n color = colors?.[series.colorCounter];\n colorCount = colors?.length;\n }\n colorIndex = series.colorCounter;\n series.colorCounter++;\n // Loop back to zero\n if (series.colorCounter === colorCount) {\n series.colorCounter = 0;\n }\n }\n else {\n if (!styledMode) {\n color = series.color;\n }\n colorIndex = series.colorIndex;\n }\n this.colorIndex = options.colorIndex ?? colorIndex;\n this.color = options.color ?? color;\n }\n /**\n * Set a value in an object, on the property defined by key. The key\n * supports nested properties using dot notation. The function modifies the\n * input object and does not make a copy.\n *\n * @function Highcharts.Point#setNestedProperty<T>\n *\n * @param {T} object\n * The object to set the value on.\n *\n * @param {*} value\n * The value to set.\n *\n * @param {string} key\n * Key to the property to set.\n *\n * @return {T}\n * The modified object.\n */\n setNestedProperty(object, value, key) {\n const nestedKeys = key.split('.');\n nestedKeys.reduce(function (result, key, i, arr) {\n const isLastKey = arr.length - 1 === i;\n result[key] = (isLastKey ?\n value :\n isObject(result[key], true) ?\n result[key] :\n {});\n return result[key];\n }, object);\n return object;\n }\n /** @internal */\n shouldDraw() {\n return !this.isNull;\n }\n /**\n * Extendable method for formatting each point's tooltip line.\n *\n * @function Highcharts.Point#tooltipFormatter\n *\n * @param {string} pointFormat\n * The point format.\n *\n * @return {string}\n * A string to be concatenated in to the common tooltip text.\n */\n tooltipFormatter(pointFormat) {\n // Insert options for valueDecimals, valuePrefix, and valueSuffix\n const { chart, pointArrayMap = ['y'], tooltipOptions } = this.series, { valueDecimals = '', valuePrefix = '', valueSuffix = '' } = tooltipOptions;\n // Replace default point style with class name\n if (chart.styledMode) {\n pointFormat = chart.tooltip?.styledModeFormat(pointFormat) ||\n pointFormat;\n }\n // Loop over the point array map and replace unformatted values with\n // sprintf formatting markup\n pointArrayMap.forEach((key) => {\n key = '{point.' + key; // Without the closing bracket\n if (valuePrefix || valueSuffix) {\n pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), valuePrefix + key + '}' + valueSuffix);\n }\n pointFormat = pointFormat.replace(RegExp(key + '}', 'g'), key + ':,.' + valueDecimals + 'f}');\n });\n return format(pointFormat, this, chart);\n }\n /**\n * Update point with new options (typically x/y data) and optionally redraw\n * the series.\n *\n * @sample highcharts/members/point-update-column/\n * Update column value\n * @sample highcharts/members/point-update-pie/\n * Update pie slice\n * @sample maps/members/point-update/\n * Update map area value in Highmaps\n *\n * @function Highcharts.Point#update\n *\n * @param {Highcharts.PointOptionsType} options\n * The point options. Point options are handled as described under\n * the `series.type.data` item for each series type. For example\n * for a line series, if options is a single number, the point will\n * be given that number as the marin y value. If it is an array, it\n * will be interpreted as x and y values respectively. If it is an\n * object, advanced options are applied.\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart after the point is updated. If doing\n * more operations on the chart, it is best practice to set\n * `redraw` to false and call `chart.redraw()` after.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=true]\n * Whether to apply animation, and optionally animation\n * configuration.\n *\n * @emits Highcharts.Point#event:update\n */\n update(options, redraw = true, animation, runEvent) {\n const point = this, series = point.series, graphic = point.graphic, chart = series.chart, seriesOptions = series.options, dataOptions = seriesOptions.data;\n /**\n * Perform the actual update of the point.\n *\n * @internal\n */\n function update() {\n point.applyOptions(options);\n // Update visuals, #4146\n // Handle mock graphic elements for a11y, #12718\n const hasMockGraphic = graphic && point.hasMockGraphic, index = point.index;\n const shouldDestroyGraphic = point.y === null ?\n !hasMockGraphic :\n hasMockGraphic;\n if (graphic && shouldDestroyGraphic) {\n point.graphic = graphic.destroy();\n delete point.hasMockGraphic;\n }\n if (isObject(options, true)) {\n // Destroy so we can get new elements\n if (graphic?.element) {\n // \"null\" is also a valid symbol\n if (options?.marker &&\n typeof options.marker.symbol !== 'undefined') {\n point.graphic = graphic.destroy();\n }\n }\n if (options?.dataLabels && point.dataLabel) {\n point.dataLabel = point.dataLabel.destroy(); // #2468\n }\n }\n const pointOptions = point.optionsToObject(options);\n if (!series.hasProcessedDataTable) {\n // Record changes in the data table (#24451)\n series.dataTable.setRow(pointOptions, index);\n // Record the options to options.data. If the old or the new\n // config is an object, use point options, otherwise use raw\n // options (#4701, #4916).\n if (dataOptions) {\n dataOptions[index] = (isObject(dataOptions[index], true) ||\n isObject(options, true)) ?\n point.options :\n options ?? dataOptions[index];\n }\n }\n // Redraw\n series.isDirty = series.isDirtyData = true;\n if ('x' in pointOptions) {\n if (isString(pointOptions.x)) {\n // Clear cache and force recalc in getColumn\n series.xColumnIsNumbers = void 0;\n }\n point.x = series.getX(pointOptions.x);\n point.isNull = point.isValid && !point.isValid();\n if (series.xColumn) {\n series.xColumn[index] = point.x;\n }\n }\n if (!series.fixedBox && series.hasCartesianSeries) { // #1906, #2320\n chart.isDirtyBox = true;\n }\n if (seriesOptions.legendType === 'point') { // #1831, #1885\n chart.isDirtyLegend = true;\n }\n if (redraw) {\n chart.redraw(animation);\n }\n }\n // Fire the event with a default handler of doing the update\n if (runEvent === false) { // When called from setData\n update();\n }\n else {\n point.firePointEvent('update', { options: options }, update);\n }\n }\n /**\n * Remove a point and optionally redraw the series and if necessary the axes\n *\n * @sample highcharts/plotoptions/series-point-events-remove/\n * Remove point and confirm\n * @sample highcharts/members/point-remove/\n * Remove pie slice\n * @sample maps/members/point-remove/\n * Remove selected points in Highmaps\n *\n * @function Highcharts.Point#remove\n *\n * @param {boolean} [redraw=true]\n * Whether to redraw the chart or wait for an explicit call. When\n * doing more operations on the chart, for example running\n * `point.remove()` in a loop, it is best practice to set `redraw`\n * to false and call `chart.redraw()` after.\n *\n * @param {boolean|Partial<Highcharts.AnimationOptionsObject>} [animation=false]\n * Whether to apply animation, and optionally animation\n * configuration.\n */\n remove(redraw, animation) {\n this.series.removePoint(this.series.data.indexOf(this), redraw, animation);\n }\n /**\n * Toggle the selection status of a point.\n *\n * @see Highcharts.Chart#getSelectedPoints\n *\n * @sample highcharts/members/point-select/\n * Select a point from a button\n * @sample highcharts/members/point-select-lasso/\n * Lasso selection\n * @sample highcharts/chart/events-selection-points/\n * Rectangle selection\n * @sample maps/series/data-id/\n * Select a point in Highmaps\n *\n * @function Highcharts.Point#select\n *\n * @param {boolean} [selected]\n * When `true`, the point is selected. When `false`, the point is\n * unselected. When `null` or `undefined`, the selection state is toggled.\n *\n * @param {boolean} [accumulate=false]\n * When `true`, the selection is added to other selected points.\n * When `false`, other selected points are deselected. Internally in\n * Highcharts, when\n * [allowPointSelect](https://api.highcharts.com/highcharts/plotOptions.series.allowPointSelect)\n * is `true`, selected points are accumulated on Control, Shift or Cmd\n * clicking the point.\n *\n * @emits Highcharts.Point#event:select\n * @emits Highcharts.Point#event:unselect\n */\n select(selected, accumulate) {\n const point = this, series = point.series, chart = series.chart;\n selected = pick(selected, !point.selected);\n this.selectedStaging = selected;\n // Fire the event with the default handler\n point.firePointEvent(selected ? 'select' : 'unselect', { accumulate: accumulate }, function () {\n point.selected = point.options.selected = selected;\n if (series.options.data) {\n series.options.data[series.data.indexOf(point)] =\n point.options;\n }\n point.setState(selected && 'select');\n // Unselect all other points unless Ctrl or Cmd + click\n if (!accumulate) {\n chart.getSelectedPoints().forEach(function (loopPoint) {\n const loopSeries = loopPoint.series, loopSeriesOptions = loopSeries.options;\n if (loopPoint.selected && loopPoint !== point) {\n loopPoint.selected = loopPoint.options.selected =\n false;\n if (loopSeriesOptions.data) {\n loopSeriesOptions.data[loopSeries.data.indexOf(loopPoint)] = loopPoint.options;\n }\n // Programmatically selecting a point should restore\n // normal state, but when click happened on other\n // point, set inactive state to match other points\n loopPoint.setState(chart.hoverPoints &&\n loopSeriesOptions.inactiveOtherPoints ?\n 'inactive' : '');\n loopPoint.firePointEvent('unselect');\n }\n });\n }\n });\n delete this.selectedStaging;\n }\n /**\n * Runs on mouse over the point. Called internally from mouse and touch\n * events.\n *\n * @function Highcharts.Point#onMouseOver\n *\n * @param {Highcharts.PointerEventObject} [e]\n * The event arguments.\n */\n onMouseOver(e) {\n const point = this, series = point.series, { inverted, pointer } = series.chart;\n if (pointer) {\n e = e ?\n pointer.normalize(e) :\n // In cases where onMouseOver is called directly without an\n // event\n pointer.getChartCoordinatesFromPoint(point, inverted);\n pointer.runPointActions(e, point);\n }\n }\n /**\n * Runs on mouse out from the point. Called internally from mouse and touch\n * events.\n *\n * @function Highcharts.Point#onMouseOut\n * @emits Highcharts.Point#event:mouseOut\n */\n onMouseOut() {\n const point = this;\n if (!point.series) {\n return;\n }\n const chart = point.series.chart;\n point.firePointEvent('mouseOut');\n if (!point.series.options.inactiveOtherPoints) {\n (chart.hoverPoints || []).forEach(function (p) {\n p.setState();\n });\n }\n chart.hoverPoints = chart.hoverPoint = null;\n }\n /**\n * Manage specific event from the series' and point's options. Only do it on\n * demand, to save processing time on hovering.\n *\n * @internal\n * @function Highcharts.Point#importEvents\n */\n manageEvent(eventType) {\n const point = this, options = merge(point.series.options.point, point.options), userEvent = options.events?.[eventType];\n if (isFunction(userEvent) &&\n (!point.hcEvents?.[eventType] ||\n // Some HC modules, like marker-clusters, draggable-points etc.\n // use events in their logic, so we need to be sure, that\n // callback function is different\n point.hcEvents?.[eventType]?.map((el) => el.fn)\n .indexOf(userEvent) === -1)) {\n // While updating the existing callback event the old one should be\n // removed\n point.importedUserEvent?.();\n point.importedUserEvent = addEvent(point, eventType, userEvent);\n if (point.hcEvents) {\n point.hcEvents[eventType].userEvent = true;\n }\n }\n else if (point.importedUserEvent &&\n !userEvent &&\n point.hcEvents?.[eventType] &&\n point.hcEvents?.[eventType].userEvent) {\n removeEvent(point, eventType);\n delete point.hcEvents[eventType];\n if (!Object.keys(point.hcEvents)) {\n delete point.importedUserEvent;\n }\n }\n }\n /**\n * Set the point's state.\n *\n * @function Highcharts.Point#setState\n *\n * @param {Highcharts.PointStateValue|\"\"} [state]\n * The new state, can be one of `'hover'`, `'select'`, `'inactive'`,\n * or `''` (an empty string), `'normal'` or `undefined` to set to\n * normal state.\n * @param {boolean} [move]\n * State for animation.\n *\n * @emits Highcharts.Point#event:afterSetState\n */\n setState(state, move) {\n const point = this, series = point.series, previousState = point.state, stateOptions = (series.options.states[state || 'normal'] ||\n {}), markerOptions = (defaultOptions.plotOptions[series.type].marker &&\n series.options.marker), normalDisabled = (markerOptions && markerOptions.enabled === false), markerStateOptions = markerOptions?.states?.[state || 'normal'] ||\n {}, stateDisabled = markerStateOptions.enabled === false, pointMarker = point.marker || {}, chart = series.chart, hasMarkers = (markerOptions && series.markerAttribs);\n let halo = series.halo, markerAttribs, pointAttribs, pointAttribsAnimation, stateMarkerGraphic = series.stateMarkerGraphic, newSymbol;\n state = state || ''; // Empty string\n if (\n // Already has this state\n (state === point.state && !move) ||\n // Selected points don't respond to hover\n (point.selected && state !== 'select') ||\n // Series' state options is disabled\n (stateOptions.enabled === false) ||\n // General point marker's state options is disabled\n (state && (stateDisabled ||\n (normalDisabled &&\n markerStateOptions.enabled === false))) ||\n // Individual point marker's state options is disabled\n (state &&\n pointMarker.states &&\n pointMarker.states[state] &&\n pointMarker.states[state].enabled === false) // #1610\n ) {\n return;\n }\n point.state = state;\n if (hasMarkers) {\n markerAttribs = series.markerAttribs(point, state);\n }\n // Apply hover styles to the existing point\n // Prevent from mocked null points (#14966)\n if (point.graphic && !point.hasMockGraphic) {\n if (previousState) {\n point.graphic.removeClass('highcharts-point-' + previousState);\n }\n if (state) {\n point.graphic.addClass('highcharts-point-' + state);\n }\n if (!chart.styledMode) {\n pointAttribs = series.pointAttribs(point, state);\n pointAttribsAnimation = pick(chart.options.chart.animation, stateOptions.animation);\n const opacity = pointAttribs.opacity;\n // Some inactive points (e.g. slices in pie) should apply\n // opacity also for their labels\n if (series.options.inactiveOtherPoints && isNumber(opacity)) {\n (point.dataLabels || []).forEach(function (label) {\n if (label &&\n !label.hasClass('highcharts-data-label-hidden')) {\n label.animate({ opacity }, pointAttribsAnimation);\n if (label.connector) {\n label.connector.animate({ opacity }, pointAttribsAnimation);\n }\n }\n });\n }\n point.graphic.animate(pointAttribs, pointAttribsAnimation);\n }\n if (markerAttribs) {\n point.graphic.animate(markerAttribs, pick(\n // Turn off globally:\n chart.options.chart.animation, markerStateOptions.animation, markerOptions.animation));\n }\n // Zooming in from a range with no markers to a range with markers\n if (stateMarkerGraphic) {\n stateMarkerGraphic.hide();\n }\n }\n else {\n // If a graphic is not applied to each point in the normal state,\n // create a shared graphic for the hover state\n if (state && markerStateOptions) {\n newSymbol = pointMarker.symbol || series.symbol;\n // If the point has another symbol than the previous one, throw\n // away the state marker graphic and force a new one (#1459)\n if (stateMarkerGraphic &&\n stateMarkerGraphic.currentSymbol !== newSymbol) {\n stateMarkerGraphic = stateMarkerGraphic.destroy();\n }\n // Add a new state marker graphic\n if (markerAttribs) {\n if (!stateMarkerGraphic) {\n if (newSymbol) {\n series.stateMarkerGraphic = stateMarkerGraphic =\n chart.renderer\n .symbol(newSymbol, markerAttribs.x, markerAttribs.y, markerAttribs.width, markerAttribs.height, merge(markerOptions, markerStateOptions))\n .add(series.markerGroup);\n stateMarkerGraphic.currentSymbol = newSymbol;\n }\n // Move the existing graphic\n }\n else {\n stateMarkerGraphic[move ? 'animate' : 'attr']({\n x: markerAttribs.x,\n y: markerAttribs.y\n });\n }\n }\n if (!chart.styledMode && stateMarkerGraphic &&\n point.state !== 'inactive') {\n stateMarkerGraphic.attr(series.pointAttribs(point, state));\n }\n }\n if (stateMarkerGraphic) {\n stateMarkerGraphic[state && point.isInside ? 'show' : 'hide'](); // #2450\n stateMarkerGraphic.element.point = point; // #4310\n stateMarkerGraphic.addClass(point.getClassName(), true);\n }\n }\n // Show me your halo\n const haloOptions = stateOptions.halo;\n const markerGraphic = (point.graphic || stateMarkerGraphic);\n const markerVisibility = markerGraphic?.visibility || 'inherit';\n if (haloOptions?.size &&\n markerGraphic &&\n markerVisibility !== 'hidden' &&\n !point.isCluster) {\n if (!halo) {\n series.halo = halo = chart.renderer.path()\n // #5818, #5903, #6705\n .add(markerGraphic.parentGroup);\n }\n halo.show()[move ? 'animate' : 'attr']({\n d: point.haloPath(haloOptions.size)\n });\n halo.attr({\n 'class': 'highcharts-halo highcharts-color-' +\n pick(point.colorIndex, series.colorIndex) +\n (point.className ? ' ' + point.className : ''),\n 'visibility': markerVisibility,\n 'zIndex': -1 // #4929, #8276\n });\n halo.point = point; // #6055\n if (!chart.styledMode) {\n halo.attr(extend({\n 'fill': point.color || series.color,\n 'fill-opacity': haloOptions.opacity\n }, AST.filterUserAttributes(haloOptions.attributes || {})));\n }\n }\n else if (halo?.point?.haloPath &&\n !halo.point.destroyed) {\n // Animate back to 0 on the current halo point (#6055)\n halo.animate({ d: halo.point.haloPath(0) }, null, \n // Hide after unhovering. The `complete` callback runs in the\n // halo's context (#7681).\n halo.hide);\n }\n fireEvent(point, 'afterSetState', { state });\n }\n /**\n * Get the path definition for the halo, which is usually a shadow-like\n * circle around the currently hovered point.\n *\n * @function Highcharts.Point#haloPath\n *\n * @param {number} size\n * The radius of the circular halo.\n *\n * @return {Highcharts.SVGPathArray}\n * The path definition.\n */\n haloPath(size) {\n const pos = this.pos();\n return pos ? this.series.chart.renderer.symbols.circle(crisp(pos[0], 1) - size, pos[1] - size, size * 2, size * 2) : [];\n }\n}\n/* *\n *\n * Default Export\n *\n * */\nexport default Point;\n/* *\n *\n * API Declarations\n *\n * */\n/**\n * Function callback when a series point is clicked. Return false to cancel the\n * action.\n *\n * @callback Highcharts.PointClickCallbackFunction\n *\n * @param {Highcharts.Point} this\n * The point where the event occurred.\n *\n * @param {Highcharts.PointClickEventObject} event\n * Event arguments.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n/**\n * Common information for a click event on a series point.\n *\n * @interface Highcharts.PointClickEventObject\n * @extends Highcharts.PointerEventObject\n */ /**\n* Clicked point.\n* @name Highcharts.PointClickEventObject#point\n* @type {Highcharts.Point}\n*/\n/**\n * Gets fired when the mouse leaves the area close to the point.\n *\n * @callback Highcharts.PointMouseOutCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {global.PointerEvent} event\n * Event that occurred.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n/**\n * Gets fired when the mouse enters the area close to the point.\n *\n * @callback Highcharts.PointMouseOverCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {global.Event} event\n * Event that occurred.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n/**\n * The generic point options for all series.\n *\n * In TypeScript you have to extend `PointOptionsObject` with an additional\n * declaration to allow custom data options:\n *\n * ```\n * declare interface PointOptionsObject {\n * customProperty: string;\n * }\n * ```\n *\n * @interface Highcharts.PointOptionsObject\n */\n/**\n * Possible option types for a data point. Use `null` to indicate a gap.\n *\n * @typedef {number|string|Highcharts.PointOptionsObject|Array<(number|string|null)>|null} Highcharts.PointOptionsType\n */\n/**\n * Gets fired when the point is removed using the `.remove()` method.\n *\n * @callback Highcharts.PointRemoveCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {global.Event} event\n * Event that occurred.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n/**\n * Possible key values for the point state options.\n *\n * @typedef {\"hover\"|\"inactive\"|\"normal\"|\"select\"} Highcharts.PointStateValue\n */\n/**\n * Gets fired when the point is updated programmatically through the `.update()`\n * method.\n *\n * @callback Highcharts.PointUpdateCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {Highcharts.PointUpdateEventObject} event\n * Event that occurred.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n/**\n * Information about the update event.\n *\n * @interface Highcharts.PointUpdateEventObject\n * @extends global.Event\n */ /**\n* Options data of the update event.\n* @name Highcharts.PointUpdateEventObject#options\n* @type {Highcharts.PointOptionsType}\n*/\n/**\n * @interface Highcharts.PointEventsOptionsObject\n */ /**\n* Fires when the point is selected either programmatically or following a click\n* on the point. One parameter, `event`, is passed to the function. Returning\n* `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#select\n* @type {Highcharts.PointSelectCallbackFunction|undefined}\n*/ /**\n* Fires when the point is unselected either programmatically or following a\n* click on the point. One parameter, `event`, is passed to the function.\n* Returning `false` cancels the operation.\n* @name Highcharts.PointEventsOptionsObject#unselect\n* @type {Highcharts.PointUnselectCallbackFunction|undefined}\n*/\n/**\n * Information about the select/unselect event.\n *\n * @interface Highcharts.PointInteractionEventObject\n * @extends global.Event\n */ /**\n* @name Highcharts.PointInteractionEventObject#accumulate\n* @type {boolean}\n*/\n/**\n * Gets fired when the point is selected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointSelectCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n * Event that occurred.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n/**\n * Fires when the point is unselected either programmatically or following a\n * click on the point.\n *\n * @callback Highcharts.PointUnselectCallbackFunction\n *\n * @param {Highcharts.Point} this\n * Point where the event occurred.\n *\n * @param {Highcharts.PointInteractionEventObject} event\n * Event that occurred.\n *\n * @param {Highcharts.Point} [ctx]\n * Since v12.6.0, the point context passed as an extra argument for\n * arrow functions.\n */\n''; // Keeps doclets above in JS file.\n","/* *\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport H from '../Globals.js';\nimport D from '../Defaults.js';\nconst { defaultOptions } = D;\nimport Point from './Point.js';\nimport { extend, extendClass, merge } from '../../Shared/Utilities.js';\n/* *\n *\n * Namespace\n *\n * */\nvar SeriesRegistry;\n(function (SeriesRegistry) {\n /* *\n *\n * Properties\n *\n * */\n /**\n * @internal\n * @todo Move `Globals.seriesTypes` code to her.\n */\n SeriesRegistry.seriesTypes = H.seriesTypes;\n /* *\n *\n * Functions\n *\n * */\n /**\n * Registers class pattern of a series.\n *\n * @param {string} seriesType\n * The series type as an identifier string in lower case.\n *\n * @param {Function} SeriesClass\n * The series class as a class pattern or a constructor function with\n * prototype.\n *\n * @return {boolean}\n * True if series type was added, false if it already exists.\n */\n function registerSeriesType(seriesType, SeriesClass) {\n const defaultPlotOptions = defaultOptions.plotOptions || {}, seriesOptions = SeriesClass.defaultOptions, seriesProto = SeriesClass.prototype;\n seriesProto.type = seriesType;\n if (!seriesProto.pointClass) {\n seriesProto.pointClass = Point;\n }\n if (SeriesRegistry.seriesTypes[seriesType]) {\n return false;\n }\n if (seriesOptions) {\n defaultPlotOptions[seriesType] = seriesOptions;\n }\n SeriesRegistry.seriesTypes[seriesType] = SeriesClass;\n return true;\n }\n SeriesRegistry.registerSeriesType = registerSeriesType;\n /**\n * Old factory to create new series prototypes.\n *\n * @deprecated 9.0.0\n * @function Highcharts.seriesType\n *\n * @param {string} type\n * The series type name.\n *\n * @param {string} parent\n * The parent series type name. Use `line` to inherit from the basic\n * {@link Series} object.\n *\n * @param {Highcharts.SeriesOptionsType|Highcharts.Dictionary<*>} options\n * The additional default options that are merged with the parent's options.\n *\n * @param {Highcharts.Dictionary<*>} [seriesProto]\n * The properties (functions and primitives) to set on the new prototype.\n *\n * @param {Highcharts.Dictionary<*>} [pointProto]\n * Members for a series-specific extension of the {@link Point} prototype if\n * needed.\n *\n * @return {Highcharts.Series}\n * The newly created prototype as extended from {@link Series} or its\n * derivatives.\n */\n function seriesType(type, parent, options, seriesProto, pointProto) {\n const defaultPlotOptions = defaultOptions.plotOptions || {};\n parent = parent || '';\n // Merge the options\n defaultPlotOptions[type] = merge(defaultPlotOptions[parent], options);\n // Create the class\n delete SeriesRegistry.seriesTypes[type];\n const parentClass = (SeriesRegistry.seriesTypes[parent] ||\n H.Series), childClass = extendClass(parentClass, seriesProto);\n registerSeriesType(type, childClass);\n SeriesRegistry.seriesTypes[type].prototype.type = type;\n // Create the point class if needed\n if (pointProto) {\n class PointClass extends Point {\n }\n extend(PointClass.prototype, pointProto);\n SeriesRegistry.seriesTypes[type].prototype.pointClass = PointClass;\n }\n return SeriesRegistry.seriesTypes[type];\n }\n SeriesRegistry.seriesType = seriesType;\n})(SeriesRegistry || (SeriesRegistry = {}));\n/* *\n *\n * Default Export\n *\n * */\nexport default SeriesRegistry;\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dependency-wheel.src-BHmwx9rW.js","names":["SeriesRegistry","A","H","SeriesRegistry","SankeyColumnComposition","Highcharts"],"sources":["../node_modules/highcharts/es-modules/Series/DependencyWheel/DependencyWheelPoint.js","../node_modules/highcharts/es-modules/Series/DependencyWheel/DependencyWheelSeriesDefaults.js","../node_modules/highcharts/es-modules/Series/DependencyWheel/DependencyWheelSeries.js","../node_modules/highcharts/es-modules/masters/modules/dependency-wheel.src.js"],"sourcesContent":["/* *\n *\n * Dependency wheel module\n *\n * (c) 2018-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { sankey: { prototype: { pointClass: SankeyPoint } } } = SeriesRegistry.seriesTypes;\nimport { pInt, wrap } from '../../Shared/Utilities.js';\n/* *\n *\n * Class\n *\n * */\nclass DependencyWheelPoint extends SankeyPoint {\n /* *\n *\n * Functions\n *\n * */\n /**\n * Return the sum of incoming links wieght and outgoing links weightTo.\n * @internal\n */\n getSumTo() {\n let sum = 0;\n for (const link of this.linksFrom) {\n sum += link.weightTo || link.weight || 0;\n }\n for (const link of this.linksTo) {\n sum += link.weight || 0;\n }\n return sum;\n }\n /**\n * Return a text path that the data label uses.\n * @private\n */\n getDataLabelPath(label) {\n const point = this, renderer = point.series.chart.renderer, shapeArgs = point.shapeArgs, upperHalf = point.angle < 0 || point.angle > Math.PI, start = shapeArgs.start || 0, end = shapeArgs.end || 0;\n // First time\n if (!point.dataLabelPath) {\n // Destroy the path with the label\n wrap(label, 'destroy', function (proceed) {\n if (point.dataLabelPath) {\n point.dataLabelPath = point.dataLabelPath.destroy();\n }\n return proceed.call(this);\n });\n // Subsequent times\n }\n else {\n point.dataLabelPath = point.dataLabelPath.destroy();\n delete point.dataLabelPath;\n }\n // All times\n point.dataLabelPath = renderer\n .arc({\n open: true,\n longArc: Math.abs(Math.abs(start) - Math.abs(end)) < Math.PI ? 0 : 1\n })\n .attr({\n x: shapeArgs.x,\n y: shapeArgs.y,\n r: ((shapeArgs.r || 0) + pInt(label.options?.distance || 0)),\n start: (upperHalf ? start : end),\n end: (upperHalf ? end : start),\n clockwise: +upperHalf\n })\n .add(renderer.defs);\n return point.dataLabelPath;\n }\n isValid() {\n // No null points here\n return true;\n }\n}\n/* *\n *\n * Default Export\n *\n * */\nexport default DependencyWheelPoint;\n","/* *\n *\n * Dependency wheel module\n *\n * (c) 2018-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\n/* *\n *\n * API Options\n *\n * */\n/**\n * A dependency wheel chart is a type of flow diagram, where all nodes are laid\n * out in a circle, and the flow between the are drawn as link bands.\n *\n * @sample highcharts/demo/dependency-wheel/\n * Dependency wheel\n *\n * @extends plotOptions.sankey\n * @exclude dataSorting, nodeAlignment, nodeDistance\n * @since 7.1.0\n * @product highcharts\n * @requires modules/sankey\n * @requires modules/dependency-wheel\n * @optionparent plotOptions.dependencywheel\n */\nconst DependencyWheelSeriesDefaults = {\n /**\n * The corner radius of the border surrounding each node. A number\n * signifies pixels. A percentage string, like for example `50%`, signifies\n * a relative size. For nodes this is relative to the node width.\n *\n * @type {number|string|Highcharts.BorderRadiusOptionsObject}\n * @default 3\n * @product highcharts\n * @since 11.0.0\n * @apioption plotOptions.dependencywheel.borderRadius\n */\n /**\n * Distance between the data label and the center of the node.\n *\n * @type {number}\n * @default 0\n * @apioption plotOptions.dependencywheel.dataLabels.distance\n */\n /**\n * A format string for data labels of the links between nodes. Available\n * variables are the same as for `formatter`.\n *\n * @see [nodeFormat](#nodeFormat) for formatting node labels\n *\n * @apioption plotOptions.dependencywheel.dataLabels.format\n */\n /**\n * Callback to format data labels of the links between nodes. The `format`\n * option takes precedence over the `formatter` option.\n *\n * @see [nodeFormatter](#nodeFormatter) for formatting node labels\n *\n * @apioption plotOptions.dependencywheel.dataLabels.formatter\n */\n /**\n * The format string specifying what to show for nodes in the sankey\n * diagram. By default the nodeFormatter returns `{point.name}`. Available\n * variables are the same as for `nodeFormatter`.\n *\n * @apioption plotOptions.dependencywheel.dataLabels.nodeFormat\n */\n /**\n * Callback to format data labels of nodes in the dependency wheel. The\n * `nodeFormat` option takes precedence over the `nodeFormatter` option.\n *\n * @apioption plotOptions.dependencywheel.dataLabels.nodeFormatter\n */\n /**\n * Size of the wheel in pixel or percent relative to the canvas space.\n *\n * @type {number|string}\n * @default 100%\n * @apioption plotOptions.dependencywheel.size\n */\n /**\n * The center of the wheel relative to the plot area. Can be\n * percentages or pixel values. The default behavior is to\n * center the wheel inside the plot area.\n *\n * @type {Array<number|string|null>}\n * @default [null, null]\n * @product highcharts\n */\n center: [null, null],\n curveFactor: 0.6,\n /**\n * The start angle of the dependency wheel, in degrees where 0 is up.\n */\n startAngle: 0,\n dataLabels: {\n allowOverlap: true,\n textPath: {\n enabled: false,\n /**\n * @default { dy: 5 }\n */\n attributes: {\n /** @ignore */\n dy: 5\n }\n }\n },\n tooltip: {\n pointFormat: '{point.fromNode.name} \\u2192 ' +\n '{point.toNode.name}: <b>{point.weight}</b><br/>' +\n '{#if point.weightTo}{point.toNode.name} \\u2192 ' +\n '{point.fromNode.name}: <b>{point.weightTo}</b><br/>{/if}'\n }\n};\n/**\n * A `dependencywheel` series. If the [type](#series.dependencywheel.type)\n * option is not specified, it is inherited from [chart.type](#chart.type).\n *\n * @extends series,plotOptions.dependencywheel\n * @exclude dataSorting\n * @product highcharts\n * @requires modules/sankey\n * @requires modules/dependency-wheel\n * @apioption series.dependencywheel\n */\n/**\n * A collection of options for the individual nodes. The nodes in a dependency\n * diagram are auto-generated instances of `Highcharts.Point`, but options can\n * be applied here and linked by the `id`.\n *\n * @extends series.sankey.nodes\n * @type {Array<*>}\n * @product highcharts\n * @excluding offset\n * @apioption series.dependencywheel.nodes\n */\n/**\n * An array of data points for the series. For the `dependencywheel` series\n * type, points can be given in the following way:\n *\n * An array of objects with named values. The following snippet shows only a\n * few settings, see the complete options set below. If the total number of data\n * points exceeds the series' [turboThreshold](#series.area.turboThreshold),\n * this option is not available.\n *\n * ```js\n * data: [{\n * from: 'Category1',\n * to: 'Category2',\n * weight: 2,\n * weightTo: 3\n * }, {\n * from: 'Category1',\n * to: 'Category3',\n * weight: 5,\n * weightTo: 6\n * }]\n * ```\n * When you provide the data as tuples, the keys option has to be set as well.\n *\n * ```js\n * keys: ['from', 'to', 'weight', 'weightTo'],\n * data: [\n * ['Category1', 'Category2', 2, 4],\n * ['Category1', 'Category3', 5, 2]\n * ]\n * ```\n *\n * @sample {highcharts} highcharts/demo/dependency-wheel\n * Dependency wheel\n * @sample {highcharts} highcharts/demo/chord-diagram\n * Chord diagram\n *\n * @basic\n * @type {Array<Array<string,string,number>|*>}\n * @extends series.sankey.data\n * @product highcharts\n * @excluding outgoing, dataLabels\n * @apioption series.dependencywheel.data\n */\n/**\n * Individual data label for each node. The options are the same as\n * the ones for [series.dependencywheel.dataLabels](#series.dependencywheel.dataLabels).\n *\n * @apioption series.dependencywheel.nodes.dataLabels\n */\n/**\n * The weight of the link from the node.\n *\n * @type {number|null}\n * @product highcharts\n * @apioption series.dependencywheel.data.weight\n */\n/**\n * The weight of the link to the node.\n * When not specified, the `weight` is used.\n *\n * @type {number|null}\n * @product highcharts\n * @since 13.0.0\n * @apioption series.dependencywheel.data.weightTo\n */\n''; // Keeps doclets above separate\n/* *\n *\n * Default Export\n *\n * */\nexport default DependencyWheelSeriesDefaults;\n","/* *\n *\n * Dependency wheel module\n *\n * (c) 2018-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * Integration of this software requires a license.\n * - For commercial use, see www.highcharts.com/license\n * - For non-commercial, see www.highcharts.com/license-eula\n *\n *\n * */\n'use strict';\nimport A from '../../Core/Animation/AnimationUtilities.js';\nconst { animObject } = A;\nimport DependencyWheelPoint from './DependencyWheelPoint.js';\nimport DependencyWheelSeriesDefaults from './DependencyWheelSeriesDefaults.js';\nimport H from '../../Core/Globals.js';\nconst { deg2rad } = H;\nimport SankeyColumnComposition from '../Sankey/SankeyColumnComposition.js';\nimport SeriesRegistry from '../../Core/Series/SeriesRegistry.js';\nconst { pie: PieSeries, sankey: SankeySeries } = SeriesRegistry.seriesTypes;\nimport SVGElement from '../../Core/Renderer/SVG/SVGElement.js';\nimport { composeTextPath } from '../../Extensions/TextPath.js';\nimport { extend, merge, relativeLength } from '../../Shared/Utilities.js';\ncomposeTextPath(SVGElement);\n/* *\n *\n * Class\n *\n * */\n/**\n * @private\n * @class\n * @name Highcharts.seriesTypes.dependencywheel\n *\n * @augments Highcharts.seriesTypes.sankey\n */\nclass DependencyWheelSeries extends SankeySeries {\n /* *\n *\n * Functions\n *\n * */\n animate(init) {\n const series = this;\n if (!init) {\n const duration = animObject(series.options.animation).duration, step = (duration / 2) / series.nodes.length;\n let i = 0;\n for (const point of series.nodes) {\n const graphic = point.graphic;\n if (graphic) {\n graphic.attr({ opacity: 0 });\n setTimeout(() => {\n if (point.graphic) {\n point.graphic.animate({ opacity: 1 }, { duration: step });\n }\n }, step * i++);\n }\n }\n for (const point of series.points) {\n const graphic = point.graphic;\n if (!point.isNode && graphic) {\n graphic.attr({ opacity: 0 })\n .animate({\n opacity: 1\n }, series.options.animation);\n }\n }\n }\n }\n createNode(id) {\n const node = super.createNode(id);\n /**\n * Return the sum of incoming and outgoing links.\n * @internal\n */\n node.getSum = () => {\n let sum = 0;\n for (const link of node.linksFrom) {\n sum += link.weight || 0;\n }\n for (const link of node.linksTo) {\n sum += link.weightTo || link.weight || 0;\n }\n return sum;\n };\n /**\n * Get the offset in weight values of a point/link.\n * @private\n */\n node.offset = (point) => {\n const otherNode = (link) => (link.fromNode === node ?\n link.toNode :\n link.fromNode);\n let offset = 0, links = node.linksFrom.concat(node.linksTo), sliced;\n // Sort and slice the links to avoid links going out of each\n // node crossing each other.\n links.sort((a, b) => (otherNode(a).index - otherNode(b).index));\n for (let i = 0; i < links.length; i++) {\n if (otherNode(links[i]).index > node.index) {\n links = links.slice(0, i).reverse().concat(links.slice(i).reverse());\n sliced = true;\n break;\n }\n }\n if (!sliced) {\n links.reverse();\n }\n for (let i = 0; i < links.length; i++) {\n if (links[i] === point) {\n return offset;\n }\n const baseWeight = links[i].weight || 0;\n offset += links[i].to === node.id ?\n links[i].weightTo || baseWeight :\n baseWeight;\n }\n };\n return node;\n }\n /**\n * Dependency wheel has only one column, it runs along the perimeter.\n * @private\n */\n createNodeColumns() {\n const series = this, columns = [SankeyColumnComposition.compose([], series)];\n for (const node of series.nodes) {\n node.column = 0;\n columns[0].push(node);\n }\n return columns;\n }\n /**\n * Translate from vertical pixels to perimeter.\n * @private\n */\n getNodePadding() {\n return this.options.nodePadding / Math.PI;\n }\n /**\n * @ignore\n * @todo Override the refactored sankey translateLink and translateNode\n * functions instead of the whole translate function.\n */\n translate() {\n const series = this, options = series.options, factor = 2 * Math.PI /\n (series.chart.plotHeight + series.getNodePadding()), center = series.getCenter(), startAngle = ((options.startAngle || 0) - 90) * deg2rad, brOption = options.borderRadius, borderRadius = typeof brOption === 'object' ?\n brOption.radius : brOption;\n super.translate();\n for (const node of this.nodeColumns[0]) {\n // Don't render the nodes if sum is 0 #12453\n if (node.sum) {\n const shapeArgs = node.shapeArgs, centerX = center[0], centerY = center[1], r = center[2] / 2, nodeWidth = options.nodeWidth === 'auto' ?\n 20 : options.nodeWidth, innerR = r - relativeLength(nodeWidth || 0, r), start = startAngle + factor * (shapeArgs.y || 0), end = startAngle +\n factor * ((shapeArgs.y || 0) + (shapeArgs.height || 0));\n // Middle angle\n node.angle = start + (end - start) / 2;\n node.shapeType = 'arc';\n node.shapeArgs = {\n x: centerX,\n y: centerY,\n r: r,\n innerR: innerR,\n start: start,\n end: end,\n borderRadius\n };\n node.dlBox = {\n x: centerX + Math.cos((start + end) / 2) * (r + innerR) / 2,\n y: centerY + Math.sin((start + end) / 2) * (r + innerR) / 2,\n width: 1,\n height: 1\n };\n // Draw the links from this node\n for (const point of node.linksFrom) {\n if (point.linkBase) {\n let curveFactor, distance;\n const corners = point.linkBase.map((top, i) => {\n const angle = factor * top, x = Math.cos(startAngle + angle) * (innerR + 1), y = Math.sin(startAngle + angle) * (innerR + 1);\n curveFactor = options.curveFactor || 0;\n // The distance between the from and to node\n // along the perimeter. This affect how curved\n // the link is, so that links between neighbors\n // don't extend too far towards the center.\n distance = Math.abs(point.linkBase[3 - i] * factor - angle);\n if (distance > Math.PI) {\n distance = 2 * Math.PI - distance;\n }\n distance = distance * innerR;\n if (distance < innerR) {\n curveFactor *= (distance / innerR);\n }\n return {\n x: centerX + x,\n y: centerY + y,\n cpX: centerX + (1 - curveFactor) * x,\n cpY: centerY + (1 - curveFactor) * y\n };\n });\n point.shapeArgs = {\n d: [[\n 'M',\n corners[0].x, corners[0].y\n ], [\n 'A',\n innerR, innerR,\n 0,\n 0, // Long arc\n 1, // Clockwise\n corners[1].x, corners[1].y\n ], [\n 'C',\n corners[1].cpX, corners[1].cpY,\n corners[2].cpX, corners[2].cpY,\n corners[2].x, corners[2].y\n ], [\n 'A',\n innerR, innerR,\n 0,\n 0,\n 1,\n corners[3].x, corners[3].y\n ], [\n 'C',\n corners[3].cpX, corners[3].cpY,\n corners[0].cpX, corners[0].cpY,\n corners[0].x, corners[0].y\n ]]\n };\n }\n }\n }\n }\n }\n /**\n * Run translation operations for one link.\n * @internal\n */\n translateLink(point) {\n const linkToHeight = Math.max((point.weightTo || point.weight || 0) * this.translationFactor, this.options.minLinkWidth || 0);\n const linkToY = this.getY(point, point.toNode, 'linksTo', linkToHeight);\n // Translate the link\n super.translateLink(point, linkToY);\n // Override the last linkBase value\n point.linkBase[3] = linkToY + linkToHeight;\n }\n /**\n * Run translation operations for one node.\n * @internal\n */\n translateNode(node, column) {\n super.translateNode(node, column);\n // Calculate the sum of incoming links weight and\n // outgoing links weightTo.\n node.sumTo = node.getSumTo();\n }\n}\n/* *\n *\n * Static Properties\n *\n * */\nDependencyWheelSeries.defaultOptions = merge(SankeySeries.defaultOptions, DependencyWheelSeriesDefaults);\nextend(DependencyWheelSeries.prototype, {\n orderNodes: false,\n pointArrayMap: ['from', 'to', 'weight', 'weightTo'],\n getCenter: PieSeries.prototype.getCenter\n});\nDependencyWheelSeries.prototype.pointClass = DependencyWheelPoint;\nSeriesRegistry.registerSeriesType('dependencywheel', DependencyWheelSeries);\n/* *\n *\n * Default Export\n *\n * */\nexport default DependencyWheelSeries;\n","// SPDX-License-Identifier: LicenseRef-Highcharts\n/**\n * @license Highcharts JS v13.0.0 (2026-06-11)\n * @module highcharts/modules/dependency-wheel\n * @requires highcharts\n * @requires highcharts/modules/sankey\n *\n * Dependency wheel module\n *\n * (c) 2010-2026 Highsoft AS\n * Author: Torstein Hønsi\n *\n * A commercial license may be required depending on use,\n * see www.highcharts.com/license\n */\n'use strict';\nimport Highcharts from '../../Core/Globals.js';\nimport '../../Series/DependencyWheel/DependencyWheelSeries.js';\nexport default Highcharts;\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}