{"version":3,"sources":["jsdelivr-header.js","/npm/apexcharts@5.16.0/dist/apexcharts.esm.js"],"names":[],"mappings":"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eACA,gBACA,eACA,sBACA,gBACA,gBACA,gBACA,gBACA,gBACA,mBACA,iBACA,cACA,iBACA,wBACA,eACA,YACA,aACA,aACA,iBACA,kBACA,yBACA,2BACA,kCACA,qBACA,eACA,gBACA,qBACA,SACA,iBACA,kBACA,UAEA,EAAM,EAAU,GAElB,OAAO,eAAe,EAAI,WAAY,CACpC,MAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,IAEhB,MAAM,EAAS,CAAC,EAChB,IAAK,MAAM,IAAO,CAChB,OACA,OACA,cACA,cACA,OACA,OACA,UACA,UACA,OACA,OACA,UACA,UACA,WACA,SACA,SACA,SACA,aACA,aACA,sBACA,cACA,sBACA,aACA,sBACA,aACA,kBACA,eACA,YACA,qBACA,qBACA,gBACA,gBACA,iBACA,kBACA,yBACA,wBACA,gBACA,kBACA,oBAEA,EAAM,EAAQ,GAEhB,OAAO,eAAe,EAAI,OAAQ,CAChC,MAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,IAEhB,MAAM,EAAW,CAAC,EAClB,IAAK,MAAM,IAAO,CAChB,WACA,YACA,YACA,aACA,aACA,aACA,kBACA,kBACA,kBACA,oBACA,yBACA,mBACA,mBACA,cACA,gBACA,eACA,gBACA,uBACA,gBACA,SACA,SACA,aACA,gBACA,sBAEA,EAAM,EAAU,GAElB,OAAO,eAAe,EAAI,SAAU,CAClC,MAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,IAEhB,MAAM,EAAU,CAAC,EACjB,IAAK,MAAM,IAAO,CAChB,WACA,iBACA,kBACA,iBACA,cACA,kBACA,6BACA,kBACA,cACA,uBACA,kBAEA,EAAM,EAAS,GAEjB,OAAO,eAAe,EAAI,QAAS,CACjC,MAAO,EACP,UAAU,EACV,YAAY,EACZ,cAAc,GAElB,CAUA,UAAA,CAAW,GAyHT,MAxHgB,CAEd,QAAS,KAET,KAAM,KAGN,OAAQ,CACN,YAAa,GACb,QAAS,GACT,QAAS,GACT,QAAS,GACT,UAAW,GACX,mBAAoB,GACpB,OAAQ,GACR,SAAU,IAGZ,OAAQ,GACR,KAAM,CAAE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","file":"/npm/apexcharts@5.16.0/dist/apexcharts.esm.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /npm/apexcharts@5.16.0/dist/apexcharts.esm.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","var __defProp = Object.defineProperty;\nvar __defProps = Object.defineProperties;\nvar __getOwnPropDescs = Object.getOwnPropertyDescriptors;\nvar __getOwnPropSymbols = Object.getOwnPropertySymbols;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __propIsEnum = Object.prototype.propertyIsEnumerable;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __spreadValues = (a, b) => {\n  for (var prop in b || (b = {}))\n    if (__hasOwnProp.call(b, prop))\n      __defNormalProp(a, prop, b[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b)) {\n      if (__propIsEnum.call(b, prop))\n        __defNormalProp(a, prop, b[prop]);\n    }\n  return a;\n};\nvar __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));\nvar __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\nvar __async = (__this, __arguments, generator) => {\n  return new Promise((resolve, reject) => {\n    var fulfilled = (value) => {\n      try {\n        step(generator.next(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e) {\n        reject(e);\n      }\n    };\n    var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);\n    step((generator = generator.apply(__this, __arguments)).next());\n  });\n};\n/*!\n * ApexCharts v5.16.0\n * (c) 2018-2026 ApexCharts\n */\nclass Environment {\n  /**\n   * Check if running in server-side rendering environment (Node.js)\n   * @returns {boolean} True if in SSR/Node.js, false if in browser\n   */\n  static isSSR() {\n    return typeof window === \"undefined\" || typeof document === \"undefined\";\n  }\n  /**\n   * Check if running in browser environment\n   * @returns {boolean} True if in browser, false if in SSR/Node.js\n   */\n  static isBrowser() {\n    return !this.isSSR();\n  }\n  /**\n   * Check if a specific browser API is available\n   * @param {string} api - Name of the API to check (e.g., 'ResizeObserver')\n   * @returns {boolean} True if API is available\n   */\n  static hasAPI(api) {\n    if (this.isSSR()) return false;\n    return typeof /** @type {any} */\n    window[api] !== \"undefined\";\n  }\n  /**\n   * Returns the global Apex config object regardless of environment.\n   * In browser: window.Apex; in SSR/Node.js: global.Apex; fallback: {}.\n   * @returns {any}\n   */\n  static getApex() {\n    if (typeof window !== \"undefined\" && window.Apex) return window.Apex;\n    if (typeof global !== \"undefined\" && global.Apex) return global.Apex;\n    return {};\n  }\n}\nclass SSRElement {\n  /**\n   * @param {string} nodeName\n   * @param {any} namespaceURI\n   */\n  constructor(nodeName, namespaceURI = null) {\n    this.nodeName = nodeName;\n    this.namespaceURI = namespaceURI;\n    this.attributes = /* @__PURE__ */ new Map();\n    this.children = [];\n    this.textContent = \"\";\n    this.style = {};\n    this.classList = new SSRClassList();\n    this.parentNode = /** @type {SSRElement | null} */\n    null;\n    this._ssrWidth = void 0;\n    this._ssrHeight = void 0;\n    this._ssrMode = void 0;\n  }\n  /**\n   * @param {string} name\n   * @param {any} value\n   */\n  setAttribute(name2, value) {\n    this.attributes.set(name2, value);\n  }\n  /**\n   * @param {string} name\n   */\n  getAttribute(name2) {\n    return this.attributes.get(name2);\n  }\n  /**\n   * @param {string} name\n   */\n  removeAttribute(name2) {\n    this.attributes.delete(name2);\n  }\n  /**\n   * @param {string} name\n   */\n  hasAttribute(name2) {\n    return this.attributes.has(name2);\n  }\n  /**\n   * @param {any} child\n   */\n  appendChild(child) {\n    if (child && child !== this) {\n      if (child.parentNode && child.parentNode !== this) {\n        child.parentNode.removeChild(child);\n      } else if (child.parentNode === this) {\n        const index = this.children.indexOf(child);\n        if (index !== -1) this.children.splice(index, 1);\n      }\n      child.parentNode = this;\n      this.children.push(child);\n    }\n    return child;\n  }\n  /**\n   * @param {any} child\n   */\n  removeChild(child) {\n    const index = this.children.indexOf(child);\n    if (index !== -1) {\n      this.children.splice(index, 1);\n      child.parentNode = null;\n    }\n    return child;\n  }\n  /**\n   * @param {any} newNode\n   * @param {any} referenceNode\n   */\n  insertBefore(newNode, referenceNode) {\n    if (!referenceNode) {\n      return this.appendChild(newNode);\n    }\n    if (newNode.parentNode && newNode.parentNode !== this) {\n      newNode.parentNode.removeChild(newNode);\n    } else if (newNode.parentNode === this) {\n      const existingIndex = this.children.indexOf(newNode);\n      if (existingIndex !== -1) this.children.splice(existingIndex, 1);\n    }\n    const index = this.children.indexOf(referenceNode);\n    if (index !== -1) {\n      newNode.parentNode = this;\n      this.children.splice(index, 0, newNode);\n    }\n    return newNode;\n  }\n  cloneNode(deep = false) {\n    const clone = new SSRElement(this.nodeName, this.namespaceURI);\n    clone.textContent = this.textContent;\n    this.attributes.forEach((value, key) => {\n      clone.attributes.set(key, value);\n    });\n    Object.assign(clone.style, this.style);\n    if (deep) {\n      this.children.forEach((child) => {\n        if (child.cloneNode) {\n          clone.appendChild(child.cloneNode(true));\n        }\n      });\n    }\n    return clone;\n  }\n  getBoundingClientRect() {\n    return {\n      width: this._ssrWidth || 0,\n      height: this._ssrHeight || 0,\n      top: 0,\n      left: 0,\n      right: this._ssrWidth || 0,\n      bottom: this._ssrHeight || 0,\n      x: 0,\n      y: 0\n    };\n  }\n  getRootNode() {\n    let root = this;\n    while (root.parentNode) {\n      root = root.parentNode;\n    }\n    return root;\n  }\n  querySelector() {\n    return null;\n  }\n  querySelectorAll() {\n    return [];\n  }\n  getElementsByClassName() {\n    return [];\n  }\n  addEventListener() {\n  }\n  removeEventListener() {\n  }\n  get childNodes() {\n    return this.children;\n  }\n  toString() {\n    let attrs = \"\";\n    this.attributes.forEach((value, key) => {\n      attrs += ` ${key}=\"${value}\"`;\n    });\n    if (this.children.length === 0 && !this.textContent) {\n      return `<${this.nodeName}${attrs}/>`;\n    }\n    const childrenStr = this.children.map((c) => c.toString()).join(\"\");\n    return `<${this.nodeName}${attrs}>${this.textContent}${childrenStr}</${this.nodeName}>`;\n  }\n  // Property getters/setters\n  get innerHTML() {\n    return this.children.map((c) => c.toString()).join(\"\");\n  }\n  set innerHTML(value) {\n    this.children = [];\n    this.textContent = value;\n  }\n  get outerHTML() {\n    return this.toString();\n  }\n  get isConnected() {\n    return true;\n  }\n}\nclass SSRClassList {\n  constructor() {\n    this.classes = /* @__PURE__ */ new Set();\n  }\n  add(...classNames) {\n    classNames.forEach((name2) => this.classes.add(name2));\n  }\n  remove(...classNames) {\n    classNames.forEach((name2) => this.classes.delete(name2));\n  }\n  /**\n   * @param {string} className\n   */\n  contains(className) {\n    return this.classes.has(className);\n  }\n  /**\n   * @param {string} className\n   * @param {any} force\n   */\n  toggle(className, force) {\n    if (force === true) {\n      this.classes.add(className);\n      return true;\n    } else if (force === false) {\n      this.classes.delete(className);\n      return false;\n    } else {\n      if (this.classes.has(className)) {\n        this.classes.delete(className);\n        return false;\n      } else {\n        this.classes.add(className);\n        return true;\n      }\n    }\n  }\n  toString() {\n    return Array.from(this.classes).join(\" \");\n  }\n}\nclass SSRDOMShim {\n  constructor() {\n    this.SVGNS = \"http://www.w3.org/2000/svg\";\n    this.XLINKNS = \"http://www.w3.org/1999/xlink\";\n  }\n  /**\n   * Create SVG element with namespace\n   * @param {string} namespaceURI - Namespace URI\n   * @param {string} qualifiedName - Element tag name\n   * @returns {SSRElement} Mock SVG element\n   */\n  createElementNS(namespaceURI, qualifiedName) {\n    return new SSRElement(qualifiedName, namespaceURI);\n  }\n  /**\n   * Create text node\n   * @param {string} data - Text content\n   * @returns {object} Text node mock\n   */\n  createTextNode(data) {\n    const node = {\n      nodeName: \"#text\",\n      nodeType: 3,\n      textContent: data,\n      toString() {\n        return node.textContent;\n      }\n    };\n    return node;\n  }\n  /**\n   * Query selector (returns null in SSR)\n   * @returns {null}\n   */\n  querySelector() {\n    return null;\n  }\n  /**\n   * Query selector all (returns empty array in SSR)\n   * @returns {any[]}\n   */\n  querySelectorAll() {\n    return [];\n  }\n  /**\n   * Get computed style (returns empty object in SSR)\n   * @returns {object}\n   */\n  getComputedStyle() {\n    return {};\n  }\n  /**\n   * Get bounding client rect for element\n   * @param {SSRElement} element - Element to measure\n   * @returns {object} Mock dimensions\n   */\n  getBoundingClientRect(element) {\n    if (element && element.getBoundingClientRect) {\n      return element.getBoundingClientRect();\n    }\n    return {\n      width: 0,\n      height: 0,\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      x: 0,\n      y: 0\n    };\n  }\n  /**\n   * Create mock XMLSerializer for SSR\n   * @returns {object} XMLSerializer mock\n   */\n  createXMLSerializer() {\n    return {\n      /**\n       * @param {Element} element\n       */\n      serializeToString(element) {\n        return element.toString ? element.toString() : \"\";\n      }\n    };\n  }\n  /**\n   * Create mock DOMParser for SSR\n   * @returns {object} DOMParser mock\n   */\n  createDOMParser() {\n    return {\n      /**\n       * @param {string} str\n       * @param {string} _type\n       */\n      parseFromString(str, _type) {\n        const root = new SSRElement(\"root\");\n        root.innerHTML = str;\n        return {\n          documentElement: root\n        };\n      }\n    };\n  }\n}\nlet shim = null;\nlet xmlSerializerInstance = null;\nlet domParserInstance = null;\nclass BrowserAPIs {\n  /**\n   * Initialize the SSR shim if in SSR environment\n   * Must be called before using other methods\n   */\n  static init() {\n    if (Environment.isSSR() && !shim) {\n      shim = new SSRDOMShim();\n    }\n  }\n  /**\n   * Create an HTML element\n   * @param {string} tagName - Element tag name\n   * @returns {HTMLElement} HTML element\n   */\n  static createElement(tagName) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createElementNS(null, tagName);\n    }\n    return document.createElement(tagName);\n  }\n  /**\n   * Create an SVG element with namespace\n   * @param {string} namespaceURI - Namespace URI\n   * @param {string} qualifiedName - Element tag name\n   * @returns {HTMLElement} created element\n   */\n  static createElementNS(namespaceURI, qualifiedName) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createElementNS(namespaceURI, qualifiedName);\n    }\n    return (\n      /** @type {HTMLElement} */\n      document.createElementNS(namespaceURI, qualifiedName)\n    );\n  }\n  /**\n   * Create a text node\n   * @param {string} data - Text content\n   * @returns {Text|object} Text node\n   */\n  static createTextNode(data) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.createTextNode(data);\n    }\n    return document.createTextNode(data);\n  }\n  /**\n   * Query selector\n   * @param {string} selector - CSS selector\n   * @returns {Element|null}\n   */\n  static querySelector(selector) {\n    if (Environment.isSSR()) {\n      return null;\n    }\n    return document.querySelector(selector);\n  }\n  /**\n   * Query selector all\n   * @param {string} selector - CSS selector\n   * @returns {NodeList|any[]}\n   */\n  static querySelectorAll(selector) {\n    if (Environment.isSSR()) {\n      return [];\n    }\n    return document.querySelectorAll(selector);\n  }\n  /**\n   * Get computed style for an element\n   * @param {Element} element - Element to get styles for\n   * @returns {CSSStyleDeclaration|object}\n   */\n  static getComputedStyle(element) {\n    if (Environment.isSSR()) {\n      return {};\n    }\n    return window.getComputedStyle(element);\n  }\n  /**\n   * Get bounding client rect for an element\n   * @param {Element} element - Element to measure\n   * @returns {DOMRect|object}\n   */\n  static getBoundingClientRect(element) {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      return shim.getBoundingClientRect(element);\n    }\n    return element ? element.getBoundingClientRect() : {\n      width: 0,\n      height: 0,\n      top: 0,\n      left: 0,\n      right: 0,\n      bottom: 0,\n      x: 0,\n      y: 0\n    };\n  }\n  /**\n   * Get XMLSerializer instance\n   * @returns {XMLSerializer|object}\n   */\n  static getXMLSerializer() {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      if (!xmlSerializerInstance) {\n        xmlSerializerInstance = shim.createXMLSerializer();\n      }\n      return xmlSerializerInstance;\n    }\n    if (!xmlSerializerInstance) {\n      xmlSerializerInstance = new XMLSerializer();\n    }\n    return xmlSerializerInstance;\n  }\n  /**\n   * Get DOMParser instance\n   * @returns {DOMParser|object}\n   */\n  static getDOMParser() {\n    if (Environment.isSSR()) {\n      if (!shim) this.init();\n      if (!domParserInstance) {\n        domParserInstance = shim.createDOMParser();\n      }\n      return domParserInstance;\n    }\n    if (!domParserInstance) {\n      domParserInstance = new DOMParser();\n    }\n    return domParserInstance;\n  }\n  /**\n   * Add event listener to window\n   * @param {string} event - Event name\n   * @param {EventListenerOrEventListenerObject} handler - Event handler\n   * @param {object} options - Event options\n   */\n  static addWindowEventListener(event, handler, options2) {\n    if (Environment.isBrowser()) {\n      window.addEventListener(event, handler, options2);\n    }\n  }\n  /**\n   * Remove event listener from window\n   * @param {string} event - Event name\n   * @param {EventListenerOrEventListenerObject} handler - Event handler\n   * @param {object} options - Event options\n   */\n  static removeWindowEventListener(event, handler, options2) {\n    if (Environment.isBrowser()) {\n      window.removeEventListener(event, handler, options2);\n    }\n  }\n  /**\n   * Request animation frame\n   * @param {FrameRequestCallback} callback - Callback function\n   * @returns {number|null}\n   */\n  static requestAnimationFrame(callback) {\n    if (Environment.isBrowser()) {\n      return window.requestAnimationFrame(callback);\n    }\n    callback(0);\n    return null;\n  }\n  /**\n   * Cancel animation frame\n   * @param {number} id - Animation frame ID\n   */\n  static cancelAnimationFrame(id) {\n    if (Environment.isBrowser() && id) {\n      window.cancelAnimationFrame(id);\n    }\n  }\n  /**\n   * Check if element exists\n   * @param {Element} element - Element to check\n   * @returns {boolean}\n   */\n  static elementExists(element) {\n    if (!element) return false;\n    if (Environment.isSSR()) {\n      return element._ssrMode === true || element.nodeName !== void 0;\n    }\n    return element.getRootNode ? element.getRootNode({ composed: true }) === document || element.isConnected : false;\n  }\n  /**\n   * Get window object (or null in SSR)\n   * @returns {Window|null}\n   */\n  static getWindow() {\n    return Environment.isBrowser() ? window : null;\n  }\n  /**\n   * Get document object (or null in SSR)\n   * @returns {Document|null}\n   */\n  static getDocument() {\n    return Environment.isBrowser() ? document : null;\n  }\n  /**\n   * Get the shim instance (for testing purposes)\n   * @returns {SSRDOMShim|null}\n   */\n  static _getShim() {\n    return shim;\n  }\n  /**\n   * Reset the shim instance (for testing purposes)\n   */\n  static _resetShim() {\n    shim = null;\n    xmlSerializerInstance = null;\n    domParserInstance = null;\n  }\n}\nlet Utils$1 = class Utils {\n  /**\n   * @param {*} item\n   */\n  static isObject(item) {\n    return item && typeof item === \"object\" && !Array.isArray(item);\n  }\n  // Type checking that works across different window objects\n  /**\n   * @param {string} type\n   * @param {string} val\n   */\n  static is(type, val) {\n    return Object.prototype.toString.call(val) === \"[object \" + type + \"]\";\n  }\n  static isSafari() {\n    return Environment.isBrowser() && /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n  }\n  // to extend defaults with user options\n  // credit: http://stackoverflow.com/questions/27936772/deep-object-merging-in-es6-es7#answer-34749873\n  /**\n   * @param {any} target\n   * @param {any} source\n   */\n  static extend(target, source) {\n    const output = Object.assign({}, target);\n    if (this.isObject(target) && this.isObject(source)) {\n      Object.keys(source).forEach((key) => {\n        if (this.isObject(source[key])) {\n          if (!(key in target)) {\n            Object.assign(output, {\n              [key]: source[key]\n            });\n          } else {\n            output[key] = this.extend(target[key], source[key]);\n          }\n        } else {\n          Object.assign(output, {\n            [key]: source[key]\n          });\n        }\n      });\n    }\n    return output;\n  }\n  /**\n   * @param {any[]} arrToExtend\n   * @param {any} resultArr\n   */\n  static extendArray(arrToExtend, resultArr) {\n    const extendedArr = [];\n    arrToExtend.map((item) => {\n      extendedArr.push(Utils.extend(resultArr, item));\n    });\n    arrToExtend = extendedArr;\n    return arrToExtend;\n  }\n  // If month counter exceeds 12, it starts again from 1\n  /**\n   * @param {number} month\n   */\n  static monthMod(month) {\n    return month % 12;\n  }\n  /**\n   * clone object with optional shallow copy for performance\n   * @param {*} source - Source object to clone\n   * @param {WeakMap<any, any>} visited - Circular reference tracker\n   * @param {boolean} shallow - If true, performs shallow copy (default: false)\n   * @returns {*} Cloned object\n   */\n  static clone(source, visited = /* @__PURE__ */ new WeakMap(), shallow = false) {\n    if (source === null || typeof source !== \"object\") {\n      return source;\n    }\n    if (visited.has(source)) {\n      return visited.get(source);\n    }\n    let cloneResult;\n    if (Array.isArray(source)) {\n      if (shallow) {\n        cloneResult = source.slice();\n      } else {\n        cloneResult = [];\n        visited.set(source, cloneResult);\n        for (let i = 0; i < source.length; i++) {\n          cloneResult[i] = this.clone(source[i], visited, false);\n        }\n      }\n    } else if (source instanceof Date) {\n      cloneResult = new Date(source.getTime());\n    } else {\n      if (shallow) {\n        cloneResult = Object.assign({}, source);\n      } else {\n        cloneResult = {};\n        visited.set(source, cloneResult);\n        for (const prop in source) {\n          if (Object.prototype.hasOwnProperty.call(source, prop)) {\n            cloneResult[prop] = this.clone(\n              /** @type {Record<string,any>} */\n              source[prop],\n              visited,\n              false\n            );\n          }\n        }\n      }\n    }\n    return cloneResult;\n  }\n  /**\n   * Shallow clone for performance when deep clone isn't needed\n   * @param {*} source - Source to clone\n   * @returns {*} Shallow cloned object\n   */\n  static shallowClone(source) {\n    if (source === null || typeof source !== \"object\") {\n      return source;\n    }\n    if (Array.isArray(source)) {\n      return source.slice();\n    }\n    return Object.assign({}, source);\n  }\n  /**\n   * Fast shallow equality check for objects\n   * @param {Object} obj1 - First object\n   * @param {Object} obj2 - Second object\n   * @returns {boolean} True if shallowly equal\n   */\n  static shallowEqual(obj1, obj2) {\n    if (obj1 === obj2) return true;\n    if (!obj1 || !obj2) return false;\n    if (typeof obj1 !== \"object\" || typeof obj2 !== \"object\") {\n      return obj1 === obj2;\n    }\n    const keys1 = Object.keys(obj1);\n    const keys2 = Object.keys(obj2);\n    if (keys1.length !== keys2.length) return false;\n    for (const key of keys1) {\n      if (\n        /** @type {Record<string,any>} */\n        obj1[key] !== /** @type {Record<string,any>} */\n        obj2[key]\n      )\n        return false;\n    }\n    return true;\n  }\n  /**\n   * @param {number} x\n   */\n  static log10(x) {\n    return Math.log(x) / Math.LN10;\n  }\n  /**\n   * @param {number} x\n   */\n  static roundToBase10(x) {\n    return Math.pow(10, Math.floor(Math.log10(x)));\n  }\n  /**\n   * @param {number} x\n   * @param {number} base\n   */\n  static roundToBase(x, base) {\n    return Math.pow(base, Math.floor(Math.log(x) / Math.log(base)));\n  }\n  /**\n   * @param {any} val\n   */\n  static parseNumber(val) {\n    if (typeof val === \"number\" || val === null) return val;\n    return parseFloat(val);\n  }\n  /**\n   * @param {number} num\n   */\n  static stripNumber(num, precision = 2) {\n    return Number.isInteger(num) ? num : parseFloat(num.toPrecision(precision));\n  }\n  static randomId() {\n    return (Math.random() + 1).toString(36).substring(4);\n  }\n  /**\n   * @param {number} num\n   */\n  static noExponents(num) {\n    if (num.toString().includes(\"e\")) {\n      return Math.round(num);\n    }\n    return num;\n  }\n  /**\n   * @param {any} element\n   */\n  static elementExists(element) {\n    if (!element || !element.isConnected) {\n      return false;\n    }\n    return true;\n  }\n  /**\n   * detects if an element is inside a Shadow DOM\n   * @param {any} el\n   */\n  static isInShadowDOM(el) {\n    if (!el || !el.getRootNode) {\n      return false;\n    }\n    const rootNode = el.getRootNode();\n    return rootNode && rootNode !== document && Utils.is(\"ShadowRoot\", rootNode);\n  }\n  /**\n   * gets the shadow root host element\n   * @param {any} el\n   */\n  static getShadowRootHost(el) {\n    if (!Utils.isInShadowDOM(el)) {\n      return null;\n    }\n    const rootNode = el.getRootNode();\n    return rootNode.host || null;\n  }\n  /**\n   * @param {any} el\n   */\n  static getDimensions(el) {\n    if (!el) return [0, 0];\n    if (Environment.isSSR()) {\n      return [el._ssrWidth || 400, el._ssrHeight || 300];\n    }\n    let computedStyle;\n    try {\n      computedStyle = getComputedStyle(el, null);\n    } catch (e) {\n      return [el.clientWidth || 0, el.clientHeight || 0];\n    }\n    let elementWidth = el.clientWidth;\n    let elementHeight = el.clientHeight;\n    if (!elementWidth || !elementHeight) {\n      const rect = el.getBoundingClientRect();\n      elementWidth = elementWidth || rect.width;\n      elementHeight = elementHeight || rect.height;\n    }\n    elementHeight -= parseFloat(computedStyle.paddingTop) + parseFloat(computedStyle.paddingBottom);\n    elementWidth -= parseFloat(computedStyle.paddingLeft) + parseFloat(computedStyle.paddingRight);\n    return [elementWidth, elementHeight];\n  }\n  /**\n   * @returns {any}\n   * @param {any} element\n   */\n  static getBoundingClientRect(element) {\n    if (!element) {\n      return {\n        top: 0,\n        right: 0,\n        bottom: 0,\n        left: 0,\n        width: 0,\n        height: 0,\n        x: 0,\n        y: 0\n      };\n    }\n    if (Environment.isSSR()) {\n      return BrowserAPIs.getBoundingClientRect(element);\n    }\n    const rect = element.getBoundingClientRect();\n    return {\n      top: rect.top,\n      right: rect.right,\n      bottom: rect.bottom,\n      left: rect.left,\n      width: element.clientWidth,\n      height: element.clientHeight,\n      x: rect.left,\n      y: rect.top\n    };\n  }\n  /**\n   * @param {any[]} arr\n   */\n  static getLargestStringFromArr(arr) {\n    return arr.reduce((a, b) => {\n      if (Array.isArray(b)) {\n        b = b.reduce((aa, bb) => aa.length > bb.length ? aa : bb);\n      }\n      return a.length > b.length ? a : b;\n    }, 0);\n  }\n  // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-12342275\n  static hexToRgba(hex = \"#999999\", opacity = 0.6) {\n    if (hex.substring(0, 1) !== \"#\") {\n      hex = \"#999999\";\n    }\n    const hexStr = hex.replace(\"#\", \"\");\n    const h = hexStr.match(new RegExp(\"(.{\" + hexStr.length / 3 + \"})\", \"g\")) || [];\n    for (let i = 0; i < h.length; i++) {\n      h[i] = parseInt(h[i].length === 1 ? h[i] + h[i] : h[i], 16);\n    }\n    if (typeof opacity !== \"undefined\") h.push(opacity);\n    return \"rgba(\" + h.join(\",\") + \")\";\n  }\n  /**\n   * @param {string} rgba\n   */\n  static getOpacityFromRGBA(rgba) {\n    return parseFloat(rgba.replace(/^.*,(.+)\\)/, \"$1\"));\n  }\n  /**\n   * Parse a #RGB or #RRGGBB hex colour string into [r,g,b] in 0–255.\n   * Returns null for invalid input. Used by getContrastRatio.\n   * @param {string} hex\n   * @returns {[number, number, number] | null}\n   */\n  static parseHex(hex) {\n    if (typeof hex !== \"string\") return null;\n    let h = hex.trim().replace(\"#\", \"\");\n    if (h.length === 3) {\n      h = h.split(\"\").map((c) => c + c).join(\"\");\n    }\n    if (!/^[0-9a-fA-F]{6}$/.test(h)) return null;\n    return [\n      parseInt(h.slice(0, 2), 16),\n      parseInt(h.slice(2, 4), 16),\n      parseInt(h.slice(4, 6), 16)\n    ];\n  }\n  /**\n   * Relative luminance per WCAG 2.x (https://www.w3.org/TR/WCAG22/#dfn-relative-luminance).\n   * @param {[number, number, number]} rgb 0–255 sRGB triplet\n   * @returns {number} 0.0–1.0\n   */\n  static relativeLuminance([r, g, b]) {\n    const channel = (c) => {\n      const v = c / 255;\n      return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\n    };\n    return 0.2126 * channel(r) + 0.7152 * channel(g) + 0.0722 * channel(b);\n  }\n  /**\n   * WCAG contrast ratio between two hex colours. Returns 0 for invalid input.\n   * Range: 1 (identical) … 21 (#000 vs #fff).\n   * WCAG AA requires ≥ 4.5 for normal text and ≥ 3.0 for large text / UI components.\n   * @param {string} hex1\n   * @param {string} hex2\n   * @returns {number}\n   */\n  static getContrastRatio(hex1, hex2) {\n    const rgb1 = Utils.parseHex(hex1);\n    const rgb2 = Utils.parseHex(hex2);\n    if (!rgb1 || !rgb2) return 0;\n    const l1 = Utils.relativeLuminance(rgb1);\n    const l2 = Utils.relativeLuminance(rgb2);\n    const lighter = Math.max(l1, l2);\n    const darker = Math.min(l1, l2);\n    return (lighter + 0.05) / (darker + 0.05);\n  }\n  /**\n   * @param {any} rgb\n   */\n  static rgb2hex(rgb) {\n    rgb = rgb.match(\n      /^rgba?[\\s+]?\\([\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?,[\\s+]?(\\d+)[\\s+]?/i\n    );\n    return rgb && rgb.length === 4 ? \"#\" + (\"0\" + parseInt(rgb[1], 10).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[2], 10).toString(16)).slice(-2) + (\"0\" + parseInt(rgb[3], 10).toString(16)).slice(-2) : \"\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeRGBColor(percent, color) {\n    const f = color.split(\",\"), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = parseInt(f[0].slice(4), 10), G = parseInt(f[1], 10), B = parseInt(f[2], 10);\n    return \"rgb(\" + (Math.round((t - R) * p) + R) + \",\" + (Math.round((t - G) * p) + G) + \",\" + (Math.round((t - B) * p) + B) + \")\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeHexColor(percent, color) {\n    const f = parseInt(color.slice(1), 16), t = percent < 0 ? 0 : 255, p = percent < 0 ? percent * -1 : percent, R = f >> 16, G = f >> 8 & 255, B = f & 255;\n    return \"#\" + (16777216 + (Math.round((t - R) * p) + R) * 65536 + (Math.round((t - G) * p) + G) * 256 + (Math.round((t - B) * p) + B)).toString(16).slice(1);\n  }\n  // beautiful color shading blending code\n  // http://stackoverflow.com/questions/5560248/programmatically-lighten-or-darken-a-hex-color-or-rgb-and-blend-colors\n  /**\n   * @param {number} p\n   * @param {string} color\n   */\n  shadeColor(p, color) {\n    if (Utils.isColorHex(color)) {\n      return this.shadeHexColor(p, color);\n    } else {\n      return this.shadeRGBColor(p, color);\n    }\n  }\n  /**\n   * @param {string} color\n   */\n  static isColorHex(color) {\n    return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)|(^#[0-9A-F]{8}$)/i.test(color);\n  }\n  /**\n   * @param {string} color\n   */\n  static isCSSVariable(color) {\n    if (typeof color !== \"string\") return false;\n    const value = color.trim();\n    return value.startsWith(\"var(\") && value.endsWith(\")\");\n  }\n  /**\n   * @param {string} color\n   */\n  static getThemeColor(color) {\n    if (!Utils.isCSSVariable(color)) return color;\n    if (Environment.isSSR()) return color;\n    const tempElem = document.createElement(\"div\");\n    tempElem.style.cssText = \"position:fixed; left: -9999px; visibility:hidden;\";\n    tempElem.style.color = color;\n    document.body.appendChild(tempElem);\n    let computedColor;\n    try {\n      computedColor = window.getComputedStyle(tempElem).color;\n    } finally {\n      if (tempElem.parentNode) {\n        tempElem.parentNode.removeChild(tempElem);\n      }\n    }\n    return computedColor;\n  }\n  /**\n   * @param {string} color\n   * @param {number} opacity\n   */\n  static applyOpacityToColor(color, opacity) {\n    const value = Number(opacity);\n    if (!Number.isFinite(value)) return color;\n    if (value <= 0) return \"transparent\";\n    if (value >= 1) return color;\n    const percent = Math.round(value * 100);\n    return `color-mix(in srgb, ${color} ${percent}%, transparent)`;\n  }\n  /**\n   * @param {number} size\n   * @param {number} dataPointsLen\n   */\n  static getPolygonPos(size, dataPointsLen) {\n    const dotsArray = [];\n    const angle = Math.PI * 2 / dataPointsLen;\n    for (let i = 0; i < dataPointsLen; i++) {\n      const curPos = {};\n      curPos.x = size * Math.sin(i * angle);\n      curPos.y = -size * Math.cos(i * angle);\n      dotsArray.push(curPos);\n    }\n    return dotsArray;\n  }\n  /**\n   * @param {number} centerX\n   * @param {number} centerY\n   * @param {number} radius\n   * @param {number} angleInDegrees\n   */\n  static polarToCartesian(centerX, centerY, radius, angleInDegrees) {\n    const angleInRadians = (angleInDegrees - 90) * Math.PI / 180;\n    return {\n      x: centerX + radius * Math.cos(angleInRadians),\n      y: centerY + radius * Math.sin(angleInRadians)\n    };\n  }\n  /**\n   * @param {string} str\n   */\n  static escapeString(str, escapeWith = \"x\") {\n    let newStr = str.toString().slice();\n    newStr = newStr.replace(/[` ~!@#$%^&*()|+=?;:'\",.<>{}[\\]\\\\/]/gi, escapeWith);\n    return newStr;\n  }\n  /**\n   * @param {number} val\n   */\n  static negToZero(val) {\n    return val < 0 ? 0 : val;\n  }\n  /**\n   * @param {any[]} arr\n   * @param {number} old_index\n   * @param {number} new_index\n   */\n  static moveIndexInArray(arr, old_index, new_index) {\n    if (new_index >= arr.length) {\n      let k = new_index - arr.length + 1;\n      while (k--) {\n        arr.push(void 0);\n      }\n    }\n    arr.splice(new_index, 0, arr.splice(old_index, 1)[0]);\n    return arr;\n  }\n  /**\n   * @param {string} s\n   */\n  static extractNumber(s) {\n    return parseFloat(s.replace(/[^\\d.]*/g, \"\"));\n  }\n  /**\n   * @param {any} el\n   * @param {string} cls\n   */\n  static findAncestor(el, cls) {\n    while ((el = el.parentElement) && !el.classList.contains(cls)) ;\n    return el;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} styles\n   */\n  static setELstyles(el, styles) {\n    for (const key in styles) {\n      if (Object.prototype.hasOwnProperty.call(styles, key)) {\n        el.style.key = styles[key];\n      }\n    }\n  }\n  // prevents JS prevision errors when adding\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static preciseAddition(a, b) {\n    const aDecimals = (String(a).split(\".\")[1] || \"\").length;\n    const bDecimals = (String(b).split(\".\")[1] || \"\").length;\n    const factor = Math.pow(10, Math.max(aDecimals, bDecimals));\n    return (Math.round(a * factor) + Math.round(b * factor)) / factor;\n  }\n  /**\n   * @param {any} value\n   */\n  static isNumber(value) {\n    return !isNaN(value) && parseFloat(String(Number(value))) === value && !isNaN(parseInt(value, 10));\n  }\n  /**\n   * @param {number} n\n   */\n  static isFloat(n) {\n    return Number(n) === n && n % 1 !== 0;\n  }\n  static isMsEdge() {\n    if (Environment.isSSR()) return false;\n    const ua = window.navigator.userAgent;\n    const edge = ua.indexOf(\"Edge/\");\n    if (edge > 0) {\n      return parseInt(ua.substring(edge + 5, ua.indexOf(\".\", edge)), 10);\n    }\n    return false;\n  }\n  //\n  // Find the Greatest Common Divisor of two numbers\n  //\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static getGCD(a, b, p = 7) {\n    let factor = Math.pow(10, p - Math.floor(Math.log10(Math.max(a, b))));\n    if (factor > 1) {\n      a = Math.round(Math.abs(a) * factor);\n      b = Math.round(Math.abs(b) * factor);\n    } else {\n      factor = 1;\n    }\n    while (b) {\n      const t = b;\n      b = a % b;\n      a = t;\n    }\n    return a / factor;\n  }\n  /**\n   * @param {number} n\n   */\n  static getPrimeFactors(n) {\n    const factors = [];\n    let divisor = 2;\n    while (n >= 2) {\n      if (n % divisor == 0) {\n        factors.push(divisor);\n        n = n / divisor;\n      } else {\n        divisor++;\n      }\n    }\n    return factors;\n  }\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static mod(a, b, p = 7) {\n    const big = Math.pow(10, p - Math.floor(Math.log10(Math.max(a, b))));\n    a = Math.round(Math.abs(a) * big);\n    b = Math.round(Math.abs(b) * big);\n    return a % b / big;\n  }\n};\nclass DateTime {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.months31 = [1, 3, 5, 7, 8, 10, 12];\n    this.months30 = [2, 4, 6, 9, 11];\n    this.daysCntOfYear = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334];\n  }\n  /**\n   * @param {any} date\n   */\n  isValidDate(date) {\n    if (typeof date === \"number\") {\n      return false;\n    }\n    return !isNaN(this.parseDate(date));\n  }\n  /**\n   * @param {any} dateStr\n   */\n  getTimeStamp(dateStr) {\n    if (!Date.parse(dateStr)) {\n      return dateStr;\n    }\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    return !utc ? new Date(dateStr).getTime() : new Date(new Date(dateStr).toISOString().substr(0, 25)).getTime();\n  }\n  /**\n   * @param {any} timestamp\n   */\n  getDate(timestamp) {\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    return utc ? new Date(new Date(timestamp).toUTCString()) : new Date(timestamp);\n  }\n  /**\n   * @param {string} dateStr\n   */\n  parseDate(dateStr) {\n    const parsed = Date.parse(dateStr);\n    if (!isNaN(parsed)) {\n      return this.getTimeStamp(dateStr);\n    }\n    let output = Date.parse(dateStr.replace(/-/g, \"/\").replace(/[a-z]+/gi, \" \"));\n    output = this.getTimeStamp(output);\n    return output;\n  }\n  // This fixes the difference of x-axis labels between chrome/safari\n  // Fixes #1726, #1544, #1485, #1255\n  /**\n   * @param {string} dateStr\n   */\n  parseDateWithTimezone(dateStr) {\n    return Date.parse(dateStr.replace(/-/g, \"/\").replace(/[a-z]+/gi, \" \"));\n  }\n  // http://stackoverflow.com/questions/14638018/current-time-formatting-with-javascript#answer-14638191\n  /**\n   * @param {Date} date\n   * @param {string} format\n   */\n  formatDate(date, format) {\n    const locale = this.w.globals.locale;\n    const utc = this.w.config.xaxis.labels.datetimeUTC;\n    const MMMM = [\"\\0\", ...locale.months];\n    const MMM = [\"\u0001\", ...locale.shortMonths];\n    const dddd = [\"\u0002\", ...locale.days];\n    const ddd = [\"\u0003\", ...locale.shortDays];\n    function ii(i, len = 2) {\n      let s2 = i + \"\";\n      while (s2.length < len) s2 = \"0\" + s2;\n      return s2;\n    }\n    const y = utc ? date.getUTCFullYear() : date.getFullYear();\n    format = format.replace(/(^|[^\\\\])yyyy+/g, \"$1\" + y);\n    format = format.replace(/(^|[^\\\\])yy/g, \"$1\" + y.toString().substr(2, 2));\n    format = format.replace(/(^|[^\\\\])y/g, \"$1\" + y);\n    const M = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n    format = format.replace(/(^|[^\\\\])MMMM+/g, \"$1\" + MMMM[0]);\n    format = format.replace(/(^|[^\\\\])MMM/g, \"$1\" + MMM[0]);\n    format = format.replace(/(^|[^\\\\])MM/g, \"$1\" + ii(M));\n    format = format.replace(/(^|[^\\\\])M/g, \"$1\" + M);\n    const d = utc ? date.getUTCDate() : date.getDate();\n    format = format.replace(/(^|[^\\\\])dddd+/g, \"$1\" + dddd[0]);\n    format = format.replace(/(^|[^\\\\])ddd/g, \"$1\" + ddd[0]);\n    format = format.replace(/(^|[^\\\\])dd/g, \"$1\" + ii(d));\n    format = format.replace(/(^|[^\\\\])d/g, \"$1\" + d);\n    const H = utc ? date.getUTCHours() : date.getHours();\n    format = format.replace(/(^|[^\\\\])HH+/g, \"$1\" + ii(H));\n    format = format.replace(/(^|[^\\\\])H/g, \"$1\" + H);\n    const h = H > 12 ? H - 12 : H === 0 ? 12 : H;\n    format = format.replace(/(^|[^\\\\])hh+/g, \"$1\" + ii(h));\n    format = format.replace(/(^|[^\\\\])h/g, \"$1\" + h);\n    const m = utc ? date.getUTCMinutes() : date.getMinutes();\n    format = format.replace(/(^|[^\\\\])mm+/g, \"$1\" + ii(m));\n    format = format.replace(/(^|[^\\\\])m/g, \"$1\" + m);\n    const s = utc ? date.getUTCSeconds() : date.getSeconds();\n    format = format.replace(/(^|[^\\\\])ss+/g, \"$1\" + ii(s));\n    format = format.replace(/(^|[^\\\\])s/g, \"$1\" + s);\n    let f = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n    format = format.replace(/(^|[^\\\\])fff+/g, \"$1\" + ii(f, 3));\n    f = Math.round(f / 10);\n    format = format.replace(/(^|[^\\\\])ff/g, \"$1\" + ii(f));\n    f = Math.round(f / 10);\n    format = format.replace(/(^|[^\\\\])f/g, \"$1\" + f);\n    const T = H < 12 ? \"AM\" : \"PM\";\n    format = format.replace(/(^|[^\\\\])TT+/g, \"$1\" + T);\n    format = format.replace(/(^|[^\\\\])T/g, \"$1\" + T.charAt(0));\n    const t = T.toLowerCase();\n    format = format.replace(/(^|[^\\\\])tt+/g, \"$1\" + t);\n    format = format.replace(/(^|[^\\\\])t/g, \"$1\" + t.charAt(0));\n    let tz = -date.getTimezoneOffset();\n    let K = utc || !tz ? \"Z\" : tz > 0 ? \"+\" : \"-\";\n    if (!utc) {\n      tz = Math.abs(tz);\n      const tzHrs = Math.floor(tz / 60);\n      const tzMin = tz % 60;\n      K += ii(tzHrs) + \":\" + ii(tzMin);\n    }\n    format = format.replace(/(^|[^\\\\])K/g, \"$1\" + K);\n    const day = (utc ? date.getUTCDay() : date.getDay()) + 1;\n    format = format.replace(new RegExp(dddd[0], \"g\"), dddd[day]);\n    format = format.replace(new RegExp(ddd[0], \"g\"), ddd[day]);\n    format = format.replace(new RegExp(MMMM[0], \"g\"), MMMM[M]);\n    format = format.replace(new RegExp(MMM[0], \"g\"), MMM[M]);\n    format = format.replace(/\\\\(.)/g, \"$1\");\n    return format;\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  getTimeUnitsfromTimestamp(minX, maxX) {\n    const w = this.w;\n    if (w.config.xaxis.min !== void 0) {\n      minX = w.config.xaxis.min;\n    }\n    if (w.config.xaxis.max !== void 0) {\n      maxX = w.config.xaxis.max;\n    }\n    const tsMin = this.getDate(minX);\n    const tsMax = this.getDate(maxX);\n    const minD = this.formatDate(tsMin, \"yyyy MM dd HH mm ss fff\").split(\" \");\n    const maxD = this.formatDate(tsMax, \"yyyy MM dd HH mm ss fff\").split(\" \");\n    return {\n      minMillisecond: parseInt(minD[6], 10),\n      maxMillisecond: parseInt(maxD[6], 10),\n      minSecond: parseInt(minD[5], 10),\n      maxSecond: parseInt(maxD[5], 10),\n      minMinute: parseInt(minD[4], 10),\n      maxMinute: parseInt(maxD[4], 10),\n      minHour: parseInt(minD[3], 10),\n      maxHour: parseInt(maxD[3], 10),\n      minDate: parseInt(minD[2], 10),\n      maxDate: parseInt(maxD[2], 10),\n      minMonth: parseInt(minD[1], 10) - 1,\n      maxMonth: parseInt(maxD[1], 10) - 1,\n      minYear: parseInt(minD[0], 10),\n      maxYear: parseInt(maxD[0], 10)\n    };\n  }\n  /**\n   * @param {number} year\n   */\n  isLeapYear(year) {\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n  }\n  /**\n   * @param {number} month\n   * @param {number} year\n   * @param {number} subtract\n   */\n  calculcateLastDaysOfMonth(month, year, subtract) {\n    const days = this.determineDaysOfMonths(month, year);\n    return days - subtract;\n  }\n  /**\n   * @param {number} year\n   */\n  determineDaysOfYear(year) {\n    let days = 365;\n    if (this.isLeapYear(year)) {\n      days = 366;\n    }\n    return days;\n  }\n  /**\n   * @param {number} year\n   * @param {number} month\n   * @param {number} date\n   */\n  determineRemainingDaysOfYear(year, month, date) {\n    let dayOfYear = this.daysCntOfYear[month] + date;\n    if (month > 1 && this.isLeapYear(year)) dayOfYear++;\n    return dayOfYear;\n  }\n  /**\n   * @param {number} month\n   * @param {number} year\n   */\n  determineDaysOfMonths(month, year) {\n    let days = 30;\n    month = Utils$1.monthMod(month);\n    switch (true) {\n      case this.months30.indexOf(month) > -1:\n        if (month === 2) {\n          if (this.isLeapYear(year)) {\n            days = 29;\n          } else {\n            days = 28;\n          }\n        }\n        break;\n      case this.months31.indexOf(month) > -1:\n        days = 31;\n        break;\n      default:\n        days = 31;\n        break;\n    }\n    return days;\n  }\n  // ───────────────────────────────────────────────────────────────────────────\n  // Pure date helpers used by the v6 single-interval TimeScale.\n  // Native Date setters/getters do all rollover work (leap years, month\n  // length, year crossings), eliminating the manual rollover code that was\n  // the source of the historical TimeScale boundary bugs.\n  // ───────────────────────────────────────────────────────────────────────────\n  /**\n   * Extract calendar fields from a timestamp. Month is 0-indexed (matches\n   * Date.getMonth / getUTCMonth).\n   *\n   * @param {number} timestamp\n   * @param {boolean} isUTC\n   * @returns {{ year: number, month: number, date: number, hour: number, minute: number, second: number, ms: number, weekday: number }}\n   */\n  getDateFields(timestamp, isUTC) {\n    const d = new Date(timestamp);\n    return isUTC ? {\n      year: d.getUTCFullYear(),\n      month: d.getUTCMonth(),\n      date: d.getUTCDate(),\n      hour: d.getUTCHours(),\n      minute: d.getUTCMinutes(),\n      second: d.getUTCSeconds(),\n      ms: d.getUTCMilliseconds(),\n      weekday: d.getUTCDay()\n    } : {\n      year: d.getFullYear(),\n      month: d.getMonth(),\n      date: d.getDate(),\n      hour: d.getHours(),\n      minute: d.getMinutes(),\n      second: d.getSeconds(),\n      ms: d.getMilliseconds(),\n      weekday: d.getDay()\n    };\n  }\n  /**\n   * Advance a timestamp by `count` units. Native setters handle cross-month,\n   * cross-year, leap-year, and DST rollover correctly.\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'week'|'day'|'hour'|'minute'|'second'} unit\n   * @param {number} count  may be negative\n   * @param {boolean} isUTC\n   * @returns {number}\n   */\n  addInterval(timestamp, unit, count, isUTC) {\n    const d = new Date(timestamp);\n    if (isUTC) {\n      switch (unit) {\n        case \"year\":\n          d.setUTCFullYear(d.getUTCFullYear() + count);\n          break;\n        case \"month\":\n          d.setUTCMonth(d.getUTCMonth() + count);\n          break;\n        case \"week\":\n          d.setUTCDate(d.getUTCDate() + count * 7);\n          break;\n        case \"day\":\n          d.setUTCDate(d.getUTCDate() + count);\n          break;\n        case \"hour\":\n          d.setUTCHours(d.getUTCHours() + count);\n          break;\n        case \"minute\":\n          d.setUTCMinutes(d.getUTCMinutes() + count);\n          break;\n        case \"second\":\n          d.setUTCSeconds(d.getUTCSeconds() + count);\n          break;\n      }\n    } else {\n      switch (unit) {\n        case \"year\":\n          d.setFullYear(d.getFullYear() + count);\n          break;\n        case \"month\":\n          d.setMonth(d.getMonth() + count);\n          break;\n        case \"week\":\n          d.setDate(d.getDate() + count * 7);\n          break;\n        case \"day\":\n          d.setDate(d.getDate() + count);\n          break;\n        case \"hour\":\n          d.setHours(d.getHours() + count);\n          break;\n        case \"minute\":\n          d.setMinutes(d.getMinutes() + count);\n          break;\n        case \"second\":\n          d.setSeconds(d.getSeconds() + count);\n          break;\n      }\n    }\n    return d.getTime();\n  }\n  /**\n   * Snap a timestamp UP to the next boundary aligned with `step` units of\n   * `unit`. Returns the input unchanged if already on a boundary. Alignment\n   * rules per unit:\n   *   - second: 0/step/2*step/... seconds within a minute (step must divide 60)\n   *   - minute: 0/step/2*step/... minutes within an hour (step must divide 60)\n   *   - hour:   0/step/... hours within a day (step must divide 24)\n   *   - day:    every day (step always 1)\n   *   - week:   next Monday on a `step`-week stride from a fixed epoch Monday\n   *   - month:  Jan/Apr/Jul/Oct for step=3, Jan/Jul for step=6 (step must divide 12)\n   *   - year:   year % step === 0\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'week'|'day'|'hour'|'minute'|'second'} unit\n   * @param {number} step\n   * @param {boolean} isUTC\n   * @returns {number}\n   */\n  ceilToBoundary(timestamp, unit, step, isUTC) {\n    const d = new Date(timestamp);\n    if (isUTC) {\n      switch (unit) {\n        case \"second\": {\n          const s = d.getUTCSeconds();\n          const aligned = Math.ceil(s / step) * step;\n          if (aligned === s && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m = d.getUTCMinutes();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(aligned);\n          return d.getTime();\n        }\n        case \"hour\": {\n          const h = d.getUTCHours();\n          const aligned = Math.ceil(h / step) * step;\n          if (aligned === h && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(aligned);\n          return d.getTime();\n        }\n        case \"day\": {\n          if (d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          d.setUTCDate(d.getUTCDate() + 1);\n          return d.getTime();\n        }\n        case \"week\": {\n          const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1e3;\n          const REF_MONDAY_UTC = Date.UTC(1970, 0, 5);\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          const startOfDay = d.getTime();\n          const weeksSinceRef = Math.ceil(\n            (startOfDay - REF_MONDAY_UTC) / MS_PER_WEEK\n          );\n          const alignedWeeks = Math.ceil(weeksSinceRef / step) * step;\n          const aligned = REF_MONDAY_UTC + alignedWeeks * MS_PER_WEEK;\n          if (aligned >= timestamp) return aligned;\n          return aligned + step * MS_PER_WEEK;\n        }\n        case \"month\": {\n          const m = d.getUTCMonth();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getUTCDate() === 1 && d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(0);\n          d.setUTCMinutes(0);\n          d.setUTCHours(0);\n          d.setUTCDate(1);\n          d.setUTCMonth(aligned);\n          return d.getTime();\n        }\n        case \"year\": {\n          const y = d.getUTCFullYear();\n          const aligned = Math.ceil(y / step) * step;\n          if (aligned === y && d.getUTCMonth() === 0 && d.getUTCDate() === 1 && d.getUTCHours() === 0 && d.getUTCMinutes() === 0 && d.getUTCSeconds() === 0 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          return Date.UTC(aligned, 0, 1);\n        }\n      }\n    } else {\n      switch (unit) {\n        case \"second\": {\n          const s = d.getSeconds();\n          const aligned = Math.ceil(s / step) * step;\n          if (aligned === s && d.getMilliseconds() === 0) return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m = d.getMinutes();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(aligned);\n          return d.getTime();\n        }\n        case \"hour\": {\n          const h = d.getHours();\n          const aligned = Math.ceil(h / step) * step;\n          if (aligned === h && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(aligned);\n          return d.getTime();\n        }\n        case \"day\": {\n          if (d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          d.setDate(d.getDate() + 1);\n          return d.getTime();\n        }\n        case \"week\": {\n          const MS_PER_WEEK = 7 * 24 * 60 * 60 * 1e3;\n          const REF_MONDAY_LOCAL = new Date(1970, 0, 5).getTime();\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          const startOfDay = d.getTime();\n          const weeksSinceRef = Math.ceil(\n            (startOfDay - REF_MONDAY_LOCAL) / MS_PER_WEEK\n          );\n          const alignedWeeks = Math.ceil(weeksSinceRef / step) * step;\n          const aligned = REF_MONDAY_LOCAL + alignedWeeks * MS_PER_WEEK;\n          if (aligned >= timestamp) return aligned;\n          return aligned + step * MS_PER_WEEK;\n        }\n        case \"month\": {\n          const m = d.getMonth();\n          const aligned = Math.ceil(m / step) * step;\n          if (aligned === m && d.getDate() === 1 && d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(0);\n          d.setMinutes(0);\n          d.setHours(0);\n          d.setDate(1);\n          d.setMonth(aligned);\n          return d.getTime();\n        }\n        case \"year\": {\n          const y = d.getFullYear();\n          const aligned = Math.ceil(y / step) * step;\n          if (aligned === y && d.getMonth() === 0 && d.getDate() === 1 && d.getHours() === 0 && d.getMinutes() === 0 && d.getSeconds() === 0 && d.getMilliseconds() === 0)\n            return timestamp;\n          return new Date(aligned, 0, 1).getTime();\n        }\n      }\n    }\n    return timestamp;\n  }\n  /**\n   * Test whether a timestamp falls exactly on a unit boundary (start of year,\n   * start of month, start of day, etc.). Used by the multi-resolution\n   * formatter to upgrade a tick's display unit to a coarser scale.\n   *\n   * @param {number} timestamp\n   * @param {'year'|'month'|'day'|'hour'|'minute'|'second'} unit\n   * @param {boolean} isUTC\n   * @returns {boolean}\n   */\n  isAtBoundary(timestamp, unit, isUTC) {\n    const f = this.getDateFields(timestamp, isUTC);\n    switch (unit) {\n      case \"year\":\n        return f.month === 0 && f.date === 1 && f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"month\":\n        return f.date === 1 && f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"day\":\n        return f.hour === 0 && f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"hour\":\n        return f.minute === 0 && f.second === 0 && f.ms === 0;\n      case \"minute\":\n        return f.second === 0 && f.ms === 0;\n      case \"second\":\n        return f.ms === 0;\n    }\n    return false;\n  }\n}\nclass Formatters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.tooltipKeyFormat = \"dd MMM\";\n  }\n  /**\n   * @param {Function} fn\n   * @param {any} val\n   * @param {any} timestamp\n   * @param {any} _opts\n   */\n  xLabelFormat(fn, val, timestamp, _opts) {\n    const w = this.w;\n    if (w.config.xaxis.type === \"datetime\") {\n      if (w.config.xaxis.labels.formatter === void 0) {\n        if (w.config.tooltip.x.formatter === void 0) {\n          const datetimeObj = new DateTime(this.w);\n          return datetimeObj.formatDate(\n            datetimeObj.getDate(val),\n            w.config.tooltip.x.format\n          );\n        }\n      }\n    }\n    return fn(val, timestamp, _opts);\n  }\n  /**\n   * @param {any} val\n   */\n  defaultGeneralFormatter(val) {\n    if (Array.isArray(val)) {\n      return val.map((v) => {\n        return v;\n      });\n    } else {\n      return val;\n    }\n  }\n  /**\n   * @param {any} v\n   * @param {ApexYAxis} yaxe\n   */\n  defaultYFormatter(v, yaxe) {\n    const w = this.w;\n    if (Utils$1.isNumber(v)) {\n      if (w.globals.yValueDecimal !== 0) {\n        v = v.toFixed(\n          yaxe.decimalsInFloat !== void 0 ? yaxe.decimalsInFloat : w.globals.yValueDecimal\n        );\n      } else {\n        const f = v.toFixed(0);\n        v = Number(f) === v ? f : v.toFixed(1);\n      }\n    }\n    return v;\n  }\n  setLabelFormatters() {\n    const w = this.w;\n    const fmt = w.formatters;\n    fmt.xaxisTooltipFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    fmt.ttKeyFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    fmt.ttZFormatter = (val) => {\n      return val;\n    };\n    fmt.legendFormatter = (val) => {\n      return this.defaultGeneralFormatter(val);\n    };\n    if (w.config.xaxis.labels.formatter !== void 0) {\n      fmt.xLabelFormatter = w.config.xaxis.labels.formatter;\n    } else {\n      fmt.xLabelFormatter = (val) => {\n        if (Utils$1.isNumber(val)) {\n          if (!w.config.xaxis.convertedCatToNumeric && w.config.xaxis.type === \"numeric\") {\n            if (Utils$1.isNumber(w.config.xaxis.decimalsInFloat)) {\n              return val.toFixed(w.config.xaxis.decimalsInFloat);\n            } else {\n              const diff = w.globals.maxX - w.globals.minX;\n              if (diff > 0) {\n                const step = diff / 10;\n                const decimals = Math.max(0, -Math.floor(Math.log10(step)));\n                return val.toFixed(decimals);\n              }\n              return val.toFixed(0);\n            }\n          }\n          if (w.globals.isBarHorizontal) {\n            const range = w.globals.maxY - /** @type {any} */\n            w.globals.minYArr;\n            if (range < 4) {\n              return val.toFixed(1);\n            }\n          }\n          return val.toFixed(0);\n        }\n        return val;\n      };\n    }\n    if (typeof w.config.tooltip.x.formatter === \"function\") {\n      fmt.ttKeyFormatter = w.config.tooltip.x.formatter;\n    } else {\n      fmt.ttKeyFormatter = fmt.xLabelFormatter;\n    }\n    if (typeof w.config.xaxis.tooltip.formatter === \"function\") {\n      fmt.xaxisTooltipFormatter = w.config.xaxis.tooltip.formatter;\n    }\n    if (Array.isArray(w.config.tooltip.y)) {\n      fmt.ttVal = w.config.tooltip.y;\n    } else {\n      if (w.config.tooltip.y.formatter !== void 0) {\n        fmt.ttVal = w.config.tooltip.y;\n      }\n    }\n    if (w.config.tooltip.z.formatter !== void 0) {\n      fmt.ttZFormatter = w.config.tooltip.z.formatter;\n    }\n    if (w.config.legend.formatter !== void 0) {\n      fmt.legendFormatter = w.config.legend.formatter;\n    }\n    fmt.yLabelFormatters = [];\n    w.config.yaxis.forEach((yaxe, i) => {\n      if (yaxe.labels.formatter !== void 0) {\n        fmt.yLabelFormatters[i] = yaxe.labels.formatter;\n      } else if (w.config.chart.type === \"violin\") {\n        const round = (v) => typeof v === \"number\" && isFinite(v) ? `${Math.round(v * 100) / 100}` : v;\n        fmt.yLabelFormatters[i] = (val) => {\n          if (!w.globals.xyCharts) return val;\n          return Array.isArray(val) ? val.map(round) : round(val);\n        };\n      } else {\n        fmt.yLabelFormatters[i] = (val) => {\n          if (!w.globals.xyCharts) return val;\n          if (Array.isArray(val)) {\n            return val.map((v) => {\n              return this.defaultYFormatter(v, yaxe);\n            });\n          } else {\n            return this.defaultYFormatter(val, yaxe);\n          }\n        };\n      }\n    });\n    return w.globals;\n  }\n  heatmapLabelFormatters() {\n    const w = this.w;\n    if (w.config.chart.type === \"heatmap\") {\n      w.globals.yAxisScale[0].result = /** @type {any} */\n      w.seriesData.seriesNames.slice();\n      const longest = (\n        /** @type {any} */\n        w.seriesData.seriesNames.reduce(\n          (a, b) => a.length > b.length ? a : b,\n          0\n        )\n      );\n      w.globals.yAxisScale[0].niceMax = longest;\n      w.globals.yAxisScale[0].niceMin = longest;\n    }\n  }\n}\nconst getRangeValues = ({\n  isTimeline,\n  seriesIndex,\n  dataPointIndex,\n  y1,\n  y2,\n  w\n}) => {\n  var _a;\n  let start = w.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n  let end = w.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n  let ylabel = w.labelData.labels[dataPointIndex];\n  let seriesName = w.config.series[seriesIndex].name ? w.config.series[seriesIndex].name : \"\";\n  const yLbFormatter = w.formatters.ttKeyFormatter;\n  const yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n  const opts = {\n    w,\n    seriesIndex,\n    dataPointIndex,\n    start,\n    end\n  };\n  if (typeof yLbTitleFormatter === \"function\") {\n    seriesName = yLbTitleFormatter(seriesName, opts);\n  }\n  if ((_a = w.config.series[seriesIndex].data[dataPointIndex]) == null ? void 0 : _a.x) {\n    ylabel = w.config.series[seriesIndex].data[dataPointIndex].x;\n  }\n  if (!isTimeline) {\n    if (w.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(w);\n      ylabel = xFormat.xLabelFormat(\n        w.formatters.ttKeyFormatter,\n        ylabel,\n        ylabel,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(w).formatDate,\n          w\n        }\n      );\n    }\n  }\n  if (typeof yLbFormatter === \"function\") {\n    ylabel = yLbFormatter(ylabel, opts);\n  }\n  if (Number.isFinite(y1) && Number.isFinite(y2)) {\n    start = y1;\n    end = y2;\n  }\n  let startVal = \"\";\n  let endVal = \"\";\n  const color = w.globals.colors[seriesIndex];\n  if (w.config.tooltip.x.formatter === void 0) {\n    if (w.config.xaxis.type === \"datetime\") {\n      const datetimeObj = new DateTime(w);\n      startVal = datetimeObj.formatDate(\n        datetimeObj.getDate(start),\n        w.config.tooltip.x.format\n      );\n      endVal = datetimeObj.formatDate(\n        datetimeObj.getDate(end),\n        w.config.tooltip.x.format\n      );\n    } else {\n      startVal = start;\n      endVal = end;\n    }\n  } else {\n    startVal = w.config.tooltip.x.formatter(start);\n    endVal = w.config.tooltip.x.formatter(end);\n  }\n  return { start, end, startVal, endVal, ylabel, color, seriesName };\n};\nconst buildRangeTooltipHTML = (opts) => {\n  let { color, seriesName, ylabel, start, end, seriesIndex, dataPointIndex } = opts;\n  const formatter = opts.w.globals.tooltip.tooltipLabels.getFormatters(seriesIndex);\n  start = formatter.yLbFormatter(start);\n  end = formatter.yLbFormatter(end);\n  const val = formatter.yLbFormatter(\n    opts.w.seriesData.series[seriesIndex][dataPointIndex]\n  );\n  let valueHTML = \"\";\n  const rangeValues = `<span class=\"value start-value\">\n  ${start}\n  </span> <span class=\"separator\">-</span> <span class=\"value end-value\">\n  ${end}\n  </span>`;\n  if (opts.w.globals.comboCharts) {\n    if (opts.w.config.series[seriesIndex].type === \"rangeArea\" || opts.w.config.series[seriesIndex].type === \"rangeBar\") {\n      valueHTML = rangeValues;\n    } else {\n      valueHTML = `<span>${val}</span>`;\n    }\n  } else {\n    valueHTML = rangeValues;\n  }\n  return '<div class=\"apexcharts-tooltip-rangebar\"><div> <span class=\"series-name\" style=\"color: ' + color + '\">' + (seriesName ? seriesName : \"\") + '</span></div><div> <span class=\"category\">' + ylabel + \": </span> \" + valueHTML + \" </div></div>\";\n};\nclass Defaults {\n  /**\n   * @param {Record<string, any>} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  hideYAxis() {\n    this.opts.yaxis[0].show = false;\n    this.opts.yaxis[0].title.text = \"\";\n    this.opts.yaxis[0].axisBorder.show = false;\n    this.opts.yaxis[0].axisTicks.show = false;\n    this.opts.yaxis[0].floating = true;\n  }\n  line() {\n    return {\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 5,\n        curve: \"straight\"\n      },\n      markers: {\n        size: 0,\n        hover: {\n          sizeOffset: 6\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} defaults\n   */\n  sparkline(defaults) {\n    this.hideYAxis();\n    const ret = {\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      },\n      legend: {\n        show: false\n      },\n      xaxis: {\n        labels: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        },\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        }\n      },\n      chart: {\n        toolbar: {\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      }\n    };\n    return Utils$1.extend(defaults, ret);\n  }\n  slope() {\n    this.hideYAxis();\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: true,\n        /**\n         * @param {any} val\n         * @param {Record<string, any>} opts\n         */\n        formatter(val, opts) {\n          const seriesName = opts.w.config.series[opts.seriesIndex].name;\n          return val !== null ? seriesName + \": \" + val : \"\";\n        },\n        background: {\n          enabled: false\n        },\n        offsetX: -5\n      },\n      grid: {\n        xaxis: {\n          lines: {\n            show: true\n          }\n        },\n        yaxis: {\n          lines: {\n            show: false\n          }\n        }\n      },\n      xaxis: {\n        position: \"top\",\n        labels: {\n          style: {\n            fontSize: 14,\n            fontWeight: 900\n          }\n        },\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          show: false\n        }\n      },\n      markers: {\n        size: 8,\n        hover: {\n          sizeOffset: 1\n        }\n      },\n      legend: {\n        show: false\n      },\n      tooltip: {\n        shared: false,\n        intersect: true,\n        followCursor: true\n      },\n      stroke: {\n        width: 5,\n        curve: \"straight\"\n      }\n    };\n  }\n  bar() {\n    return {\n      chart: {\n        stacked: false\n      },\n      plotOptions: {\n        bar: {\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        }\n      },\n      stroke: {\n        width: 0,\n        lineCap: \"square\"\n      },\n      fill: {\n        opacity: 0.85\n      },\n      legend: {\n        markers: {\n          shape: \"square\"\n        }\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      xaxis: {\n        tooltip: {\n          enabled: false\n        },\n        tickPlacement: \"between\",\n        crosshairs: {\n          width: \"barWidth\",\n          position: \"back\",\n          fill: {\n            type: \"gradient\"\n          },\n          dropShadow: {\n            enabled: false\n          },\n          stroke: {\n            width: 0\n          }\n        }\n      }\n    };\n  }\n  funnel() {\n    this.hideYAxis();\n    return __spreadProps(__spreadValues({}, this.bar()), {\n      chart: {\n        animations: {\n          speed: 800,\n          animateGradually: {\n            enabled: false\n          }\n        }\n      },\n      plotOptions: {\n        bar: {\n          horizontal: true,\n          borderRadiusApplication: \"around\",\n          borderRadius: 0,\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n      xaxis: {\n        labels: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        },\n        axisBorder: {\n          show: false\n        },\n        axisTicks: {\n          show: false\n        }\n      }\n    });\n  }\n  pyramid() {\n    return this.funnel();\n  }\n  gauge() {\n    const base = this.radialBar();\n    return __spreadProps(__spreadValues({}, base), {\n      plotOptions: {\n        radialBar: {\n          startAngle: -135,\n          endAngle: 135,\n          hollow: {\n            margin: 0,\n            size: \"60%\"\n          },\n          track: {\n            background: \"#e7e7e7\",\n            strokeWidth: \"100%\",\n            margin: 5\n          },\n          dataLabels: {\n            name: {\n              show: false\n            },\n            value: {\n              show: true,\n              fontSize: \"32px\",\n              fontWeight: 600,\n              offsetY: 8\n            }\n          }\n        }\n      }\n    });\n  }\n  candlestick() {\n    return {\n      stroke: {\n        width: 1\n      },\n      fill: {\n        opacity: 1\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getBoxTooltip(\n            w,\n            seriesIndex,\n            dataPointIndex,\n            [\"Open\", \"High\", \"\", \"Low\", \"Close\"],\n            \"candlestick\"\n          );\n        }\n      },\n      states: {\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  boxPlot() {\n    return {\n      chart: {\n        animations: {\n          dynamicAnimation: {\n            enabled: false\n          }\n        }\n      },\n      stroke: {\n        width: 1,\n        colors: [\"#24292e\"]\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getBoxTooltip(\n            w,\n            seriesIndex,\n            dataPointIndex,\n            [\"Minimum\", \"Q1\", \"Median\", \"Q3\", \"Maximum\"],\n            \"boxPlot\"\n          );\n        }\n      },\n      markers: {\n        size: 7,\n        strokeWidth: 1,\n        strokeColors: \"#111\"\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  violin() {\n    return {\n      chart: {\n        // Violins are a per-category distribution plot (discrete category\n        // x-axis), so range zooming/panning is meaningless — off by default.\n        zoom: {\n          enabled: false\n        },\n        animations: {\n          dynamicAnimation: {\n            enabled: false\n          }\n        }\n      },\n      stroke: {\n        width: 1,\n        colors: [\"#24292e\"]\n      },\n      fill: {\n        opacity: 0.7\n      },\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: true,\n        custom: ({ seriesIndex, dataPointIndex, w }) => {\n          return this._getViolinTooltip(w, seriesIndex, dataPointIndex);\n        }\n      },\n      states: {\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          width: 1\n        }\n      }\n    };\n  }\n  rangeBar() {\n    const handleTimelineTooltip = (opts) => {\n      const { color, seriesName, ylabel, startVal, endVal } = getRangeValues(__spreadProps(__spreadValues({}, opts), {\n        isTimeline: true\n      }));\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start: startVal,\n        end: endVal\n      }));\n    };\n    const handleRangeColumnTooltip = (opts) => {\n      const { color, seriesName, ylabel, start, end } = getRangeValues(opts);\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start,\n        end\n      }));\n    };\n    return {\n      chart: {\n        animations: {\n          animateGradually: false\n        }\n      },\n      stroke: {\n        width: 0,\n        lineCap: \"square\"\n      },\n      plotOptions: {\n        bar: {\n          borderRadius: 0,\n          dataLabels: {\n            position: \"center\"\n          }\n        }\n      },\n      dataLabels: {\n        enabled: false,\n        /**\n         * @param {any} val\n         */\n        formatter(val, { seriesIndex, dataPointIndex, w }) {\n          const getVal = () => {\n            const start = w.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n            const end = w.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n            return end - start;\n          };\n          if (w.globals.comboCharts) {\n            if (w.config.series[seriesIndex].type === \"rangeBar\" || w.config.series[seriesIndex].type === \"rangeArea\") {\n              return getVal();\n            } else {\n              return val;\n            }\n          } else {\n            return getVal();\n          }\n        },\n        background: {\n          enabled: false\n        },\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      markers: {\n        size: 10\n      },\n      tooltip: {\n        shared: false,\n        followCursor: true,\n        /**\n         * @param {Record<string, any>} opts\n         */\n        custom(opts) {\n          if (opts.w.config.plotOptions && opts.w.config.plotOptions.bar && opts.w.config.plotOptions.bar.horizontal) {\n            return handleTimelineTooltip(opts);\n          } else {\n            return handleRangeColumnTooltip(opts);\n          }\n        }\n      },\n      xaxis: {\n        tickPlacement: \"between\",\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          stroke: {\n            width: 0\n          }\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  dumbbell(opts) {\n    var _a, _b;\n    if (!((_a = opts.plotOptions.bar) == null ? void 0 : _a.barHeight)) {\n      opts.plotOptions.bar.barHeight = 2;\n    }\n    if (!((_b = opts.plotOptions.bar) == null ? void 0 : _b.columnWidth)) {\n      opts.plotOptions.bar.columnWidth = 2;\n    }\n    return opts;\n  }\n  area() {\n    return {\n      stroke: {\n        width: 4,\n        fill: {\n          type: \"solid\",\n          gradient: {\n            inverseColors: false,\n            shade: \"light\",\n            type: \"vertical\",\n            opacityFrom: 0.65,\n            opacityTo: 0.5,\n            stops: [0, 100, 100]\n          }\n        }\n      },\n      fill: {\n        type: \"gradient\",\n        gradient: {\n          inverseColors: false,\n          shade: \"light\",\n          type: \"vertical\",\n          opacityFrom: 0.65,\n          opacityTo: 0.5,\n          stops: [0, 100, 100]\n        }\n      },\n      markers: {\n        size: 0,\n        hover: {\n          sizeOffset: 6\n        }\n      },\n      tooltip: {\n        followCursor: false\n      }\n    };\n  }\n  rangeArea() {\n    const handleRangeAreaTooltip = (opts) => {\n      const { color, seriesName, ylabel, start, end } = getRangeValues(opts);\n      return buildRangeTooltipHTML(__spreadProps(__spreadValues({}, opts), {\n        color,\n        seriesName,\n        ylabel,\n        start,\n        end\n      }));\n    };\n    return {\n      stroke: {\n        curve: \"straight\",\n        width: 0\n      },\n      fill: {\n        type: \"solid\",\n        opacity: 0.6\n      },\n      markers: {\n        size: 0\n      },\n      states: {\n        hover: {\n          filter: {\n            type: \"none\"\n          }\n        },\n        active: {\n          filter: {\n            type: \"none\"\n          }\n        }\n      },\n      tooltip: {\n        intersect: false,\n        shared: true,\n        followCursor: true,\n        /**\n         * @param {Record<string, any>} opts\n         */\n        custom(opts) {\n          return handleRangeAreaTooltip(opts);\n        }\n      }\n    };\n  }\n  /**\n   * @param {Record<string, any>} defaults\n   */\n  brush(defaults) {\n    const ret = {\n      chart: {\n        toolbar: {\n          autoSelected: \"selection\",\n          show: false\n        },\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        width: 1\n      },\n      tooltip: {\n        enabled: false\n      },\n      xaxis: {\n        tooltip: {\n          enabled: false\n        }\n      }\n    };\n    return Utils$1.extend(defaults, ret);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  stacked100(opts) {\n    opts.dataLabels = opts.dataLabels || {};\n    opts.dataLabels.formatter = opts.dataLabels.formatter || void 0;\n    const existingDataLabelFormatter = opts.dataLabels.formatter;\n    opts.yaxis.forEach((yaxe, index) => {\n      opts.yaxis[index].min = 0;\n      opts.yaxis[index].max = 100;\n    });\n    const isBar = opts.chart.type === \"bar\";\n    if (isBar) {\n      opts.dataLabels.formatter = existingDataLabelFormatter || /**\n       * @param {any} val\n       */\n      function(val) {\n        if (typeof val === \"number\") {\n          return val ? val.toFixed(0) + \"%\" : val;\n        }\n        return val;\n      };\n    }\n    return opts;\n  }\n  stackedBars() {\n    const barDefaults = this.bar();\n    return __spreadProps(__spreadValues({}, barDefaults), {\n      plotOptions: __spreadProps(__spreadValues({}, barDefaults.plotOptions), {\n        bar: __spreadProps(__spreadValues({}, barDefaults.plotOptions.bar), {\n          borderRadiusApplication: \"end\",\n          borderRadiusWhenStacked: \"last\"\n        })\n      })\n    });\n  }\n  // This function removes the left and right spacing in chart for line/area/scatter if xaxis type = category for those charts by converting xaxis = numeric. Numeric/Datetime xaxis prevents the unnecessary spacing in the left/right of the chart area\n  /**\n   * @param {Record<string, any>} opts\n   */\n  convertCatToNumeric(opts) {\n    opts.xaxis.convertedCatToNumeric = true;\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {any} cats\n   */\n  convertCatToNumericXaxis(opts, cats) {\n    opts.xaxis.type = \"numeric\";\n    opts.xaxis.labels = opts.xaxis.labels || {};\n    opts.xaxis.labels.formatter = opts.xaxis.labels.formatter || /**\n     * @param {any} val\n     */\n    function(val) {\n      return Utils$1.isNumber(val) ? Math.floor(val) : val;\n    };\n    const defaultFormatter = opts.xaxis.labels.formatter;\n    let labels = opts.xaxis.categories && opts.xaxis.categories.length ? opts.xaxis.categories : opts.labels;\n    if (cats && cats.length) {\n      labels = cats.map((c) => {\n        return Array.isArray(c) ? c : String(c);\n      });\n    }\n    if (labels && labels.length) {\n      opts.xaxis.labels.formatter = function(val) {\n        return Utils$1.isNumber(val) ? defaultFormatter(labels[Math.floor(val) - 1]) : defaultFormatter(val);\n      };\n    }\n    opts.xaxis.categories = [];\n    opts.labels = [];\n    opts.xaxis.tickAmount = opts.xaxis.tickAmount || \"dataPoints\";\n    return opts;\n  }\n  bubble() {\n    return {\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      xaxis: {\n        crosshairs: {\n          width: 0\n        }\n      },\n      fill: {\n        type: \"solid\",\n        gradient: {\n          shade: \"light\",\n          inverse: true,\n          shadeIntensity: 0.55,\n          opacityFrom: 0.4,\n          opacityTo: 0.8\n        }\n      }\n    };\n  }\n  scatter() {\n    return {\n      dataLabels: {\n        enabled: false\n      },\n      tooltip: {\n        shared: false,\n        intersect: true\n      },\n      markers: {\n        size: 6,\n        strokeWidth: 1,\n        hover: {\n          sizeOffset: 2\n        }\n      }\n    };\n  }\n  heatmap() {\n    return {\n      chart: {\n        stacked: false\n      },\n      fill: {\n        opacity: 1\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      tooltip: {\n        followCursor: true,\n        marker: {\n          show: false\n        },\n        x: {\n          show: false\n        }\n      },\n      legend: {\n        position: \"top\",\n        markers: {\n          shape: \"square\"\n        }\n      },\n      grid: {\n        padding: {\n          right: 20\n        }\n      }\n    };\n  }\n  treemap() {\n    return {\n      chart: {\n        zoom: {\n          enabled: false\n        }\n      },\n      dataLabels: {\n        style: {\n          fontSize: 14,\n          fontWeight: 600,\n          colors: [\"#fff\"]\n        }\n      },\n      stroke: {\n        show: true,\n        width: 2,\n        colors: [\"#fff\"]\n      },\n      legend: {\n        show: false\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          stops: [0, 100]\n        }\n      },\n      tooltip: {\n        followCursor: true,\n        x: {\n          show: false\n        }\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0\n        }\n      },\n      xaxis: {\n        crosshairs: {\n          show: false\n        },\n        tooltip: {\n          enabled: false\n        }\n      }\n    };\n  }\n  pie() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      plotOptions: {\n        pie: {\n          donut: {\n            labels: {\n              show: false\n            }\n          }\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          shade: \"light\",\n          stops: [0, 100]\n        }\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  donut() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        style: {\n          colors: [\"#fff\"]\n        },\n        background: {\n          enabled: false\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1,\n        gradient: {\n          shade: \"light\",\n          shadeIntensity: 0.35,\n          stops: [80, 100],\n          opacityFrom: 1,\n          opacityTo: 1\n        }\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  polarArea() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        /**\n         * @param {number} val\n         */\n        formatter(val) {\n          return val.toFixed(1) + \"%\";\n        },\n        enabled: false\n      },\n      stroke: {\n        show: true,\n        width: 2\n      },\n      fill: {\n        opacity: 0.7\n      },\n      tooltip: {\n        theme: \"dark\",\n        fillSeriesColor: true\n      },\n      legend: {\n        position: \"right\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  radar() {\n    this.opts.yaxis[0].labels.offsetY = this.opts.yaxis[0].labels.offsetY ? this.opts.yaxis[0].labels.offsetY : 6;\n    return {\n      dataLabels: {\n        enabled: false,\n        style: {\n          fontSize: \"11px\"\n        }\n      },\n      stroke: {\n        width: 2\n      },\n      markers: {\n        size: 5,\n        strokeWidth: 1,\n        strokeOpacity: 1\n      },\n      fill: {\n        opacity: 0.2\n      },\n      tooltip: {\n        shared: false,\n        intersect: true,\n        followCursor: true\n      },\n      grid: {\n        show: false,\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      },\n      xaxis: {\n        labels: {\n          formatter: (val) => val,\n          style: {\n            colors: [\"#a8a8a8\"],\n            fontSize: \"11px\"\n          }\n        },\n        tooltip: {\n          enabled: false\n        },\n        crosshairs: {\n          show: false\n        }\n      }\n    };\n  }\n  radialBar() {\n    return {\n      chart: {\n        animations: {\n          dynamicAnimation: {\n            enabled: true,\n            speed: 800\n          }\n        },\n        toolbar: {\n          show: false\n        }\n      },\n      stroke: {\n        // Radial value arcs are stroked open arcs; square/round caps would\n        // extend the stroke half a stroke-width past each endpoint, making\n        // the \"starting edge\" visibly stick out past the geometric arc.\n        // Butt cap is the only one that aligns with the arc's true angular\n        // span. Without this, a chart that previously was a bar (whose\n        // defaults set lineCap='square') would carry that cap across into\n        // the radial render after a type morph.\n        lineCap: \"butt\"\n      },\n      fill: {\n        gradient: {\n          shade: \"dark\",\n          shadeIntensity: 0.4,\n          inverseColors: false,\n          type: \"diagonal2\",\n          opacityFrom: 1,\n          opacityTo: 1,\n          stops: [70, 98, 100]\n        }\n      },\n      legend: {\n        show: false,\n        position: \"right\"\n      },\n      tooltip: {\n        enabled: false,\n        fillSeriesColor: true\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   * @param {any[]} labels\n   * @param {string} chartType\n   */\n  _getBoxTooltip(w, seriesIndex, dataPointIndex, labels, chartType) {\n    const o = w.candleData.seriesCandleO[seriesIndex][dataPointIndex];\n    const h = w.candleData.seriesCandleH[seriesIndex][dataPointIndex];\n    const m = w.candleData.seriesCandleM[seriesIndex][dataPointIndex];\n    const l = w.candleData.seriesCandleL[seriesIndex][dataPointIndex];\n    const c = w.candleData.seriesCandleC[seriesIndex][dataPointIndex];\n    const _si = (\n      /** @type {Record<string,any>} */\n      w.config.series[seriesIndex]\n    );\n    if (_si.type && _si.type !== chartType) {\n      return `<div class=\"apexcharts-custom-tooltip\">\n          ${_si.name ? _si.name : \"series-\" + (seriesIndex + 1)}: <strong>${w.seriesData.series[seriesIndex][dataPointIndex]}</strong>\n        </div>`;\n    } else {\n      return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w.config.chart.type}\"><div>${labels[0]}: <span class=\"value\">` + o + `</span></div><div>${labels[1]}: <span class=\"value\">` + h + \"</span></div>\" + (m ? `<div>${labels[2]}: <span class=\"value\">` + m + \"</span></div>\" : \"\") + `<div>${labels[3]}: <span class=\"value\">` + l + `</span></div><div>${labels[4]}: <span class=\"value\">` + c + \"</span></div></div>\";\n    }\n  }\n  /**\n   * Shared tooltip for a violin: distribution value range and observation\n   * count. Per-point hover is intentionally unsupported (jitter renders as a\n   * single path), so the tooltip summarizes the violin as a whole.\n   *\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  _getViolinTooltip(w, seriesIndex, dataPointIndex) {\n    var _a, _b, _c;\n    const minV = (_a = w.violinData.seriesViolinMin[seriesIndex]) == null ? void 0 : _a[dataPointIndex];\n    const maxV = (_b = w.violinData.seriesViolinMax[seriesIndex]) == null ? void 0 : _b[dataPointIndex];\n    const pts = ((_c = w.violinData.seriesViolinPoints[seriesIndex]) == null ? void 0 : _c[dataPointIndex]) || [];\n    const name2 = (\n      /** @type {Record<string,any>} */\n      w.config.series[seriesIndex].name || \"series-\" + (seriesIndex + 1)\n    );\n    return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w.config.chart.type}\"><div class=\"apexcharts-tooltip-violin-name\">${name2}</div><div>Min: <span class=\"value\">${minV}</span></div><div>Max: <span class=\"value\">${maxV}</span></div><div>Observations: <span class=\"value\">${pts.length}</span></div></div>`;\n  }\n}\nconst name = \"en\";\nconst options = { \"months\": [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"], \"shortMonths\": [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"], \"days\": [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"], \"shortDays\": [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"], \"toolbar\": { \"exportToSVG\": \"Download SVG\", \"exportToPNG\": \"Download PNG\", \"exportToCSV\": \"Download CSV\", \"menu\": \"Menu\", \"selection\": \"Selection\", \"selectionZoom\": \"Selection Zoom\", \"zoomIn\": \"Zoom In\", \"zoomOut\": \"Zoom Out\", \"pan\": \"Panning\", \"reset\": \"Reset Zoom\" } };\nconst en = {\n  name,\n  options\n};\nclass Options {\n  constructor() {\n    this.yAxis = {\n      show: true,\n      showAlways: false,\n      showForNullSeries: true,\n      seriesName: void 0,\n      opposite: false,\n      reversed: false,\n      logarithmic: false,\n      logBase: 10,\n      tickAmount: void 0,\n      stepSize: void 0,\n      forceNiceScale: false,\n      alignZero: false,\n      max: void 0,\n      min: void 0,\n      floating: false,\n      decimalsInFloat: void 0,\n      labels: {\n        show: true,\n        showDuplicates: false,\n        minWidth: 0,\n        maxWidth: 160,\n        offsetX: 0,\n        offsetY: 0,\n        align: void 0,\n        rotate: 0,\n        padding: 20,\n        style: {\n          colors: [],\n          fontSize: \"11px\",\n          fontWeight: 400,\n          fontFamily: void 0,\n          cssClass: \"\"\n        },\n        formatter: void 0\n      },\n      axisBorder: {\n        show: false,\n        color: \"#e0e0e0\",\n        width: 1,\n        offsetX: 0,\n        offsetY: 0\n      },\n      axisTicks: {\n        show: false,\n        color: \"#e0e0e0\",\n        width: 6,\n        offsetX: 0,\n        offsetY: 0\n      },\n      title: {\n        text: void 0,\n        rotate: -90,\n        offsetY: 0,\n        offsetX: 0,\n        style: {\n          color: void 0,\n          fontSize: \"11px\",\n          fontWeight: 900,\n          fontFamily: void 0,\n          cssClass: \"\"\n        }\n      },\n      tooltip: {\n        enabled: false,\n        offsetX: 0\n      },\n      crosshairs: {\n        show: true,\n        position: \"front\",\n        stroke: {\n          color: \"#b6b6b6\",\n          width: 1,\n          dashArray: 0\n        }\n      }\n    };\n    this.pointAnnotation = {\n      id: void 0,\n      x: 0,\n      y: null,\n      yAxisIndex: 0,\n      seriesIndex: void 0,\n      mouseEnter: void 0,\n      mouseLeave: void 0,\n      click: void 0,\n      marker: {\n        size: 4,\n        fillColor: \"#fff\",\n        strokeWidth: 2,\n        strokeColor: \"#333\",\n        shape: \"circle\",\n        offsetX: 0,\n        offsetY: 0,\n        // radius: 2, // DEPRECATED\n        cssClass: \"\"\n      },\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"middle\",\n        offsetX: 0,\n        offsetY: 0,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      },\n      customSVG: {\n        // this will be deprecated in the next major version as it is going to be replaced with a better alternative below (image)\n        SVG: void 0,\n        cssClass: void 0,\n        offsetX: 0,\n        offsetY: 0\n      },\n      image: {\n        path: void 0,\n        width: 20,\n        height: 20,\n        offsetX: 0,\n        offsetY: 0\n      }\n    };\n    this.yAxisAnnotation = {\n      id: void 0,\n      y: 0,\n      y2: null,\n      strokeDashArray: 1,\n      fillColor: \"#c2c2c2\",\n      borderColor: \"#c2c2c2\",\n      borderWidth: 1,\n      opacity: 0.3,\n      offsetX: 0,\n      offsetY: 0,\n      width: \"100%\",\n      yAxisIndex: 0,\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"end\",\n        position: \"right\",\n        offsetX: 0,\n        offsetY: -3,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      }\n    };\n    this.xAxisAnnotation = {\n      id: void 0,\n      x: 0,\n      x2: null,\n      strokeDashArray: 1,\n      fillColor: \"#c2c2c2\",\n      borderColor: \"#c2c2c2\",\n      borderWidth: 1,\n      opacity: 0.3,\n      offsetX: 0,\n      offsetY: 0,\n      label: {\n        borderColor: \"#c2c2c2\",\n        borderWidth: 1,\n        borderRadius: 2,\n        text: void 0,\n        textAnchor: \"middle\",\n        orientation: \"vertical\",\n        position: \"top\",\n        offsetX: 0,\n        offsetY: 0,\n        mouseEnter: void 0,\n        mouseLeave: void 0,\n        click: void 0,\n        style: {\n          background: \"#fff\",\n          color: void 0,\n          fontSize: \"11px\",\n          fontFamily: void 0,\n          fontWeight: 400,\n          cssClass: \"\",\n          padding: {\n            left: 5,\n            right: 5,\n            top: 2,\n            bottom: 2\n          }\n        }\n      }\n    };\n    this.text = {\n      x: 0,\n      y: 0,\n      text: \"\",\n      textAnchor: \"start\",\n      foreColor: void 0,\n      fontSize: \"13px\",\n      fontFamily: void 0,\n      fontWeight: 400,\n      appendTo: \".apexcharts-annotations\",\n      backgroundColor: \"transparent\",\n      borderColor: \"#c2c2c2\",\n      borderRadius: 0,\n      borderWidth: 0,\n      paddingLeft: 4,\n      paddingRight: 4,\n      paddingTop: 2,\n      paddingBottom: 2\n    };\n  }\n  init() {\n    return {\n      annotations: {\n        yaxis: [this.yAxisAnnotation],\n        xaxis: [this.xAxisAnnotation],\n        points: [this.pointAnnotation],\n        texts: [],\n        images: [],\n        shapes: []\n      },\n      chart: {\n        animations: {\n          // Master switch — set false to render charts without any animation.\n          // Each chart type gets a tailored initial-mount animation by default:\n          //   line/area/rangeArea/radar: pen-stroke draw + radial fill bloom\n          //   bar/stacked/range/funnel:  grow from baseline (+ stagger)\n          //   scatter/bubble:            scale-up pop with overshoot\n          //   heatmap:                   diagonal-wave cell reveal\n          //   treemap:                   largest-tile-first cascade\n          //   pie/donut/polar/gauge:     arc sweep + needle settle\n          // Speed is controlled by `speed`; per-element stagger by\n          // `animateGradually.enabled` / `animateGradually.delay`.\n          enabled: true,\n          speed: 800,\n          animateGradually: {\n            // Drives per-element stagger across all chart types. When enabled,\n            // bars/heatmap-cells/scatter-points/treemap-tiles reveal in\n            // sequence; line/area markers fade in progressively along the\n            // draw. `delay` is the requested step in ms (auto-capped per\n            // chart so total stagger ≤ ~half the animation duration).\n            delay: 150,\n            enabled: true\n          },\n          dynamicAnimation: {\n            // Data-change (updateSeries) animation. Independent from the\n            // initial-mount animations above.\n            enabled: true,\n            speed: 350\n          },\n          chartTypeMorph: {\n            // Cross-type morph (updateOptions changing chart.type). Bridges\n            // the destroy+recreate flicker by sampling source + target paths\n            // into N evenly-spaced perimeter points and tweening point-by-point\n            // with rotation-search alignment, so the transition is always smooth\n            // and non-self-intersecting even between very different shapes (bar\n            // rect ↔ pie wedge / radial arc). Supported pairs include bar ↔\n            // pie / donut / radialBar / polarArea / funnel / pyramid (plus the\n            // trivial pie ↔ donut ↔ polarArea cases). Falls back to instant\n            // snap when types or data shape are incompatible.\n            enabled: true,\n            speed: 600\n          },\n          // Honor the OS-level prefers-reduced-motion setting. When true (default)\n          // and the user has the accessibility preference enabled, all initial-mount\n          // animations are skipped and the chart renders instantly.\n          respectReducedMotion: true,\n          // Above this many data points, per-element morph + stagger (which\n          // spins up one JS-driven animation timeline per path — three chained\n          // tweens each in morphSVG) is replaced by a single GPU-composited\n          // opacity fade of the whole series. Thousands of candlesticks/bars\n          // otherwise jank the main thread on initial render and on every zoom.\n          // The fade reuses the existing delayedElements reveal so the result\n          // still animates in, just at O(1) cost instead of O(n). Set to 0 to\n          // always animate per-element regardless of dataset size.\n          largeDatasetThreshold: 1e3\n        },\n        background: \"\",\n        locales: [en],\n        defaultLocale: \"en\",\n        dropShadow: {\n          enabled: false,\n          enabledOnSeries: void 0,\n          top: 2,\n          left: 2,\n          blur: 4,\n          color: \"#000\",\n          opacity: 0.7\n        },\n        events: {\n          animationEnd: void 0,\n          beforeMount: void 0,\n          mounted: void 0,\n          updated: void 0,\n          click: void 0,\n          mouseMove: void 0,\n          mouseLeave: void 0,\n          xAxisLabelClick: void 0,\n          legendClick: void 0,\n          markerClick: void 0,\n          selection: void 0,\n          dataPointSelection: void 0,\n          dataPointMouseEnter: void 0,\n          dataPointMouseLeave: void 0,\n          beforeZoom: void 0,\n          beforeResetZoom: void 0,\n          zoomed: void 0,\n          scrolled: void 0,\n          brushScrolled: void 0,\n          keyDown: void 0,\n          keyUp: void 0\n        },\n        foreColor: \"#373d3f\",\n        fontFamily: \"Helvetica, Arial, sans-serif\",\n        height: \"auto\",\n        parentHeightOffset: 15,\n        redrawOnParentResize: true,\n        redrawOnWindowResize: true,\n        id: void 0,\n        group: void 0,\n        nonce: void 0,\n        offsetX: 0,\n        offsetY: 0,\n        injectStyleSheet: true,\n        selection: {\n          enabled: false,\n          type: \"x\",\n          // selectedPoints: undefined, // default datapoints that should be selected automatically\n          fill: {\n            color: \"#24292e\",\n            opacity: 0.1\n          },\n          stroke: {\n            width: 1,\n            color: \"#24292e\",\n            opacity: 0.4,\n            dashArray: 3\n          },\n          xaxis: {\n            min: void 0,\n            max: void 0\n          },\n          yaxis: {\n            min: void 0,\n            max: void 0\n          }\n        },\n        sparkline: {\n          enabled: false\n        },\n        brush: {\n          enabled: false,\n          autoScaleYaxis: true,\n          target: void 0,\n          targets: void 0\n        },\n        stacked: false,\n        stackOnlyBar: true,\n        // mixed chart with stacked bars and line series - incorrect line draw #907\n        stackType: \"normal\",\n        toolbar: {\n          show: true,\n          offsetX: 0,\n          offsetY: 0,\n          tools: {\n            download: true,\n            selection: true,\n            zoom: true,\n            zoomin: true,\n            zoomout: true,\n            pan: true,\n            reset: true,\n            customIcons: []\n          },\n          export: {\n            csv: {\n              filename: void 0,\n              columnDelimiter: \",\",\n              headerCategory: \"category\",\n              headerValue: \"value\",\n              categoryFormatter: void 0,\n              valueFormatter: void 0\n            },\n            png: {\n              filename: void 0\n            },\n            svg: {\n              filename: void 0\n            },\n            scale: void 0,\n            width: void 0\n          },\n          autoSelected: \"zoom\"\n          // accepts -> zoom, pan, selection\n        },\n        type: \"line\",\n        width: \"100%\",\n        zoom: {\n          enabled: true,\n          type: \"x\",\n          autoScaleYaxis: false,\n          allowMouseWheelZoom: true,\n          zoomedArea: {\n            fill: {\n              color: \"#90CAF9\",\n              opacity: 0.4\n            },\n            stroke: {\n              color: \"#0D47A1\",\n              opacity: 0.4,\n              width: 1\n            }\n          }\n        },\n        accessibility: {\n          enabled: true,\n          description: void 0,\n          announcements: {\n            enabled: true\n          },\n          keyboard: {\n            enabled: true,\n            navigation: {\n              enabled: true,\n              wrapAround: false\n            }\n          }\n        },\n        dataReducer: {\n          enabled: false,\n          algorithm: \"lttb\",\n          targetPoints: 250,\n          threshold: 500\n        }\n      },\n      parsing: {\n        x: void 0,\n        y: void 0\n      },\n      plotOptions: {\n        line: {\n          isSlopeChart: false,\n          colors: {\n            threshold: 0,\n            colorAboveThreshold: void 0,\n            colorBelowThreshold: void 0\n          }\n        },\n        area: {\n          fillTo: \"origin\"\n        },\n        bar: {\n          horizontal: false,\n          columnWidth: \"70%\",\n          // should be in percent 0 - 100\n          barHeight: \"70%\",\n          // should be in percent 0 - 100\n          distributed: false,\n          borderRadius: 0,\n          borderRadiusApplication: \"around\",\n          // [around, end]\n          borderRadiusWhenStacked: \"last\",\n          // [all, last]\n          rangeBarOverlap: true,\n          rangeBarGroupRows: false,\n          hideZeroBarsWhenGrouped: false,\n          isDumbbell: false,\n          dumbbellColors: void 0,\n          isFunnel: false,\n          isFunnel3d: true,\n          colors: {\n            ranges: [],\n            backgroundBarColors: [],\n            backgroundBarOpacity: 1,\n            backgroundBarRadius: 0\n          },\n          dataLabels: {\n            position: \"top\",\n            // top, center, bottom\n            maxItems: 100,\n            hideOverflowingLabels: true,\n            orientation: \"horizontal\",\n            total: {\n              enabled: false,\n              formatter: void 0,\n              offsetX: 0,\n              offsetY: 0,\n              style: {\n                color: \"#373d3f\",\n                fontSize: \"12px\",\n                fontFamily: void 0,\n                fontWeight: 600\n              }\n            }\n          }\n        },\n        bubble: {\n          zScaling: true,\n          minBubbleRadius: void 0,\n          maxBubbleRadius: void 0\n        },\n        scatter: {\n          // Spread overlapping points apart (\"jitter\"). Two uses, one engine:\n          //  - Strip plot: supply data as { x: 'Category', y: [v1, v2, ...] }.\n          //    Each category becomes a band and the values are scattered\n          //    horizontally within it. Marker styling comes from the standard\n          //    `markers` / `colors` config.\n          //  - Overplotting: ordinary { x, y } points get a small random offset\n          //    so dense clusters fan out. The underlying data (and tooltip\n          //    values) stay exact — only the drawn position moves.\n          // Offsets are in axis units (x: 1 = one category step) and are\n          // deterministic (stable across re-renders, SSR-safe).\n          jitter: {\n            enabled: false,\n            x: 0,\n            // max ± horizontal offset, in x-axis units\n            y: 0,\n            // max ± vertical offset, in y-axis units\n            distributed: false,\n            // single series: colour each band differently\n            maxPoints: 5e3\n            // per band; excess values are stride-thinned\n          }\n        },\n        candlestick: {\n          colors: {\n            upward: \"#00B746\",\n            downward: \"#EF403C\"\n          },\n          wick: {\n            useFillColor: true\n          }\n        },\n        boxPlot: {\n          colors: {\n            upper: \"#00E396\",\n            lower: \"#008FFB\"\n          },\n          // Optional individual observations (\"jitter\") overlaid on each box.\n          // Inert unless a data point supplies a `points: number[]` array; off\n          // by default so existing boxPlot charts are unchanged.\n          points: {\n            show: false,\n            shape: \"circle\",\n            // 'circle' | 'square'\n            size: 2.5,\n            // radius (px)\n            jitter: 0.5,\n            // 0..1 fraction of the box half-width to scatter within\n            maxPoints: 3e3,\n            // cap per box; excess is stride-thinned\n            opacity: 0.9,\n            // 'series-dark' (default) → a darker shade of the series colour,\n            // 'series' → the series colour, or any literal colour string.\n            fillColor: \"series-dark\",\n            strokeColor: \"#fff\",\n            strokeWidth: 1\n            // Optional `colorScale` (undeclared so a user object merges cleanly)\n            // colours each dot by its value: { colors, min, max, steps }\n          }\n        },\n        violin: {\n          // Multiply the density-derived half-width. 1 = density's own maxWeight\n          // maps to half the category slot.\n          bandwidthScale: 1,\n          // 'individual' → every violin uses the full slot width (scaled to its\n          // own peak). 'group' → all violins share one scale (the densest in the\n          // series), so widths stay proportional to density across categories.\n          normalize: \"individual\",\n          // Individual observations (\"jitter\") overlaid on the violin shape.\n          points: {\n            show: true,\n            shape: \"circle\",\n            // 'circle' | 'square'\n            size: 2.5,\n            // radius (px)\n            jitter: 0.5,\n            // 0..1 fraction of the half-width to scatter within\n            constrainToViolin: true,\n            // clamp jitter to the density width at each value\n            maxPoints: 3e3,\n            // cap per violin; excess is stride-thinned\n            opacity: 0.9,\n            // Default: a darker shade of each violin's own colour, with a white\n            // outline. fillColor accepts 'series-dark' (default), 'series' (the\n            // violin's colour as-is), or any literal colour string.\n            fillColor: \"series-dark\",\n            strokeColor: \"#fff\",\n            strokeWidth: 1\n            // Optional `colorScale` (left undeclared so a user object merges\n            // cleanly) colours each dot by its value along a ramp:\n            //   { colors: ['#0d0887', … '#f0f921'], min, max, steps }\n          }\n        },\n        heatmap: {\n          radius: 2,\n          enableShades: true,\n          shadeIntensity: 0.5,\n          reverseNegativeShade: false,\n          distributed: false,\n          useFillColorAsStroke: false,\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0,\n            // Replaces the default categorical legend with a continuous\n            // gradient stripe + a hover indicator arrow. Honors\n            // `chart.legend.position` (top / right / bottom / left).\n            gradientLegend: {\n              enabled: false,\n              // Strip length along the legend's long axis. Accepts a number\n              // (pixels) or a percentage string. For top/bottom placement the\n              // percentage is resolved against the chart's SVG width; for\n              // left/right placement, against the SVG height.\n              width: \"70%\",\n              height: \"70%\",\n              thickness: 12,\n              // Alignment of the strip within the legend area:\n              //  - top/bottom: 'start' = left, 'center', 'end' = right\n              //  - left/right: 'start' = top,  'center', 'end' = bottom\n              align: \"center\",\n              // Number of gradient stops sampled from the shade function when\n              // no explicit `ranges` are provided.\n              stops: 16,\n              // Show min/max labels at the ends of the strip.\n              showLabels: true,\n              // Show a value tooltip next to the arrow when hovering a cell.\n              showHoverValue: true,\n              labelStyle: {\n                fontSize: \"11px\",\n                fontFamily: void 0,\n                colors: void 0\n              },\n              arrow: {\n                size: 8,\n                color: void 0\n                // falls back to chart.foreColor\n              },\n              formatter: void 0\n              // (val) => string, for min/max + hover value\n            }\n          }\n        },\n        funnel: {\n          // 'rectangle' preserves the existing centered-rectangle funnel\n          // geometry. 'trapezoid' produces continuous sloped sides between\n          // consecutive stages (each stage's bottom width matches the next\n          // stage's top width).\n          shape: \"rectangle\",\n          // For shape: 'trapezoid' only — what to do with the last stage's\n          // bottom edge: 'flat' (parallel sides) or 'taper' (taper to a point).\n          lastShape: \"flat\"\n        },\n        treemap: {\n          enableShades: true,\n          shadeIntensity: 0.5,\n          distributed: false,\n          reverseNegativeShade: false,\n          useFillColorAsStroke: false,\n          borderRadius: 4,\n          dataLabels: {\n            format: \"scale\"\n            // scale | truncate\n          },\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0\n          },\n          seriesTitle: {\n            show: true,\n            offsetY: 1,\n            offsetX: 1,\n            borderColor: \"#000\",\n            borderWidth: 1,\n            borderRadius: 2,\n            style: {\n              background: \"rgba(0, 0, 0, 0.6)\",\n              color: \"#fff\",\n              fontSize: \"12px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              cssClass: \"\",\n              padding: {\n                left: 6,\n                right: 6,\n                top: 2,\n                bottom: 2\n              }\n            }\n          }\n        },\n        radialBar: {\n          inverseOrder: false,\n          startAngle: 0,\n          endAngle: 360,\n          offsetX: 0,\n          offsetY: 0,\n          // Gauge sub-shape. 'arc' (default) renders the existing filled\n          // value-arc gauge; 'needle' replaces the value-arc with a rotating\n          // pointer/needle. Bands and ticks are independent and work for both\n          // shapes.\n          shape: \"arc\",\n          // Value-to-angle mapping. Defaults to the existing 0..100 range\n          // used by radialBar. Override for gauges that need a custom domain\n          // (e.g. min: 0, max: 240 for a speedometer).\n          min: 0,\n          max: 100,\n          // Threshold bands rendered as colored arc segments along the gauge\n          // arc (e.g. [{from:0,to:30,color:'#FF4560'}, ...]). Bands draw\n          // behind the value-arc and tick marks. Set to [] (default) to\n          // disable.\n          bands: [],\n          bandsStyle: {\n            // % of arc radius. Slightly less than the value-arc stroke so\n            // the value-arc reads on top by default.\n            strokeWidth: \"40%\",\n            // px gap between consecutive bands.\n            gap: 0,\n            // Hide the track when bands cover the full range; the bands\n            // themselves act as the visual backdrop.\n            hideTrackWhenPresent: true\n          },\n          // Tick marks rendered along (outside) the gauge arc.\n          ticks: {\n            show: false,\n            major: {\n              count: 11,\n              length: 10,\n              width: 2,\n              color: \"#666\",\n              // 'inside' draws ticks from `radius - length` to `radius`;\n              // 'outside' draws from `radius` to `radius + length`.\n              placement: \"outside\"\n            },\n            minor: {\n              count: 4,\n              // minor ticks BETWEEN each pair of major ticks\n              length: 5,\n              width: 1,\n              color: \"#999\",\n              placement: \"outside\"\n            },\n            labels: {\n              show: false,\n              offset: 6,\n              fontSize: \"11px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              color: \"#666\",\n              /** @param {number} v */\n              formatter(v) {\n                return String(v);\n              }\n            }\n          },\n          // Needle/dial configuration. Only applies when `shape: 'needle'`.\n          needle: {\n            color: \"#333\",\n            // Needle length as a % of the gauge radius (string like '85%')\n            // or as an absolute px number.\n            length: \"85%\",\n            // px width of the needle line at the base.\n            baseWidth: 4,\n            // px width of the needle tip (tapered if smaller than baseWidth).\n            tipWidth: 1,\n            // px offset from the geometric arc center on Y. Positive values\n            // push the needle base down (toward the chord midpoint of a\n            // ∩-shape gauge); negative pushes up. The needle rotates around\n            // this shifted point.\n            offsetY: 0,\n            // When true, also render the filled value-arc alongside the\n            // needle. Default false preserves the previous needle-only\n            // behavior. Useful for gauges that want a progress ring plus a\n            // pointer indicator.\n            showValueArc: false,\n            animation: {\n              enabled: true,\n              duration: 800,\n              easing: \"ease-out\"\n            }\n          },\n          hollow: {\n            margin: 5,\n            size: \"50%\",\n            background: \"transparent\",\n            image: void 0,\n            imageWidth: 150,\n            imageHeight: 150,\n            imageOffsetX: 0,\n            imageOffsetY: 0,\n            imageClipped: true,\n            position: \"front\",\n            // Optional stroke around the hollow ring. Combined with\n            // `strokeDasharray` this produces a dashed indicator circle\n            // around the value text — useful for gauge designs where the\n            // value sits inside its own boundary.\n            stroke: void 0,\n            strokeWidth: 1,\n            strokeDasharray: void 0,\n            dropShadow: {\n              enabled: false,\n              top: 0,\n              left: 0,\n              blur: 3,\n              color: \"#000\",\n              opacity: 0.5\n            }\n          },\n          track: {\n            show: true,\n            startAngle: void 0,\n            endAngle: void 0,\n            background: \"#f2f2f2\",\n            strokeWidth: \"97%\",\n            opacity: 1,\n            margin: 5,\n            // margin is in pixels\n            dropShadow: {\n              enabled: false,\n              top: 0,\n              left: 0,\n              blur: 3,\n              color: \"#000\",\n              opacity: 0.5\n            }\n          },\n          dataLabels: {\n            show: true,\n            name: {\n              show: true,\n              fontSize: \"16px\",\n              fontFamily: void 0,\n              fontWeight: 600,\n              color: void 0,\n              offsetY: 0,\n              /**\n               * @param {any} val\n               */\n              formatter(val) {\n                return val;\n              }\n            },\n            value: {\n              show: true,\n              fontSize: \"14px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              color: void 0,\n              offsetY: 16,\n              /**\n               * @param {any} val\n               */\n              formatter(val) {\n                return val + \"%\";\n              }\n            },\n            total: {\n              show: false,\n              label: \"Total\",\n              fontSize: \"16px\",\n              fontWeight: 600,\n              fontFamily: void 0,\n              color: void 0,\n              /**\n               * @param {import('../../types/internal').ChartStateW} w\n               */\n              formatter(w) {\n                return (\n                  /**\n                   * @param {number} a\n                   * @param {number} b\n                   */\n                  w.globals.seriesTotals.reduce((a, b) => a + b, 0) / w.seriesData.series.length + \"%\"\n                );\n              }\n            }\n          },\n          barLabels: {\n            enabled: false,\n            offsetX: 0,\n            offsetY: 0,\n            useSeriesColors: true,\n            fontFamily: void 0,\n            fontWeight: 600,\n            fontSize: \"16px\",\n            /**\n             * @param {any} val\n             */\n            formatter(val) {\n              return val;\n            },\n            onClick: void 0\n          }\n        },\n        pie: {\n          customScale: 1,\n          offsetX: 0,\n          offsetY: 0,\n          startAngle: 0,\n          endAngle: 360,\n          expandOnClick: true,\n          dataLabels: {\n            // These are the percentage values which are displayed on slice\n            offset: 0,\n            // offset by which labels will move outside\n            minAngleToShowLabel: 10,\n            // External (outer) labels: render the category/series name outside\n            // the slice, joined to it by a leader (connector) line, so users\n            // don't have to map legend colors back to slices. The percentage\n            // keeps rendering inside the slice (governed by dataLabels.enabled).\n            // Pie + donut only; ignored for polarArea (radial length already\n            // encodes the value there).\n            external: {\n              show: false,\n              // master switch for the external (outer) labels\n              offsetX: 0,\n              offsetY: 0,\n              fontSize: void 0,\n              // falls back to dataLabels.style.fontSize\n              fontFamily: void 0,\n              // falls back to dataLabels.style.fontFamily\n              fontWeight: void 0,\n              // falls back to dataLabels.style.fontWeight\n              color: void 0,\n              // defaults to chart.foreColor (readable text)\n              /**\n               * Return a string (single line) or an array of strings (stacked\n               * lines, e.g. [name, percent + '%']).\n               * @param {string} name\n               * @param {{ seriesIndex: number, percent: number, value: number, w: any }} opts\n               * @returns {string | string[]}\n               */\n              formatter: void 0,\n              connector: {\n                show: true,\n                width: 1,\n                color: void 0,\n                // defaults to the slice color\n                length: 16,\n                // horizontal run after the radial elbow (px)\n                gap: 6\n                // radial gap from slice edge to the elbow point (px)\n              }\n            }\n          },\n          donut: {\n            size: \"65%\",\n            background: \"transparent\",\n            labels: {\n              // These are the inner labels appearing inside donut\n              show: false,\n              name: {\n                show: true,\n                fontSize: \"16px\",\n                fontFamily: void 0,\n                fontWeight: 600,\n                color: void 0,\n                offsetY: -10,\n                /**\n                 * @param {any} val\n                 */\n                formatter(val) {\n                  return val;\n                }\n              },\n              value: {\n                show: true,\n                fontSize: \"20px\",\n                fontFamily: void 0,\n                fontWeight: 400,\n                color: void 0,\n                offsetY: 10,\n                /**\n                 * @param {any} val\n                 */\n                formatter(val) {\n                  return val;\n                }\n              },\n              total: {\n                show: false,\n                showAlways: false,\n                label: \"Total\",\n                fontSize: \"16px\",\n                fontWeight: 400,\n                fontFamily: void 0,\n                color: void 0,\n                /**\n                 * @param {import('../../types/internal').ChartStateW} w\n                 */\n                formatter(w) {\n                  return w.globals.seriesTotals.reduce((a, b) => a + b, 0);\n                }\n              }\n            }\n          }\n        },\n        polarArea: {\n          rings: {\n            strokeWidth: 1,\n            strokeColor: \"#e8e8e8\"\n          },\n          spokes: {\n            strokeWidth: 1,\n            connectorColors: \"#e8e8e8\"\n          }\n        },\n        radar: {\n          size: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          polygons: {\n            // strokeColor: '#e8e8e8', // should be deprecated in the minor version i.e 3.2\n            strokeWidth: 1,\n            strokeColors: \"#e8e8e8\",\n            connectorColors: \"#e8e8e8\",\n            fill: {\n              colors: void 0\n            }\n          }\n        }\n      },\n      colors: void 0,\n      dataLabels: {\n        enabled: true,\n        enabledOnSeries: void 0,\n        /**\n         * @param {any} val\n         */\n        formatter(val) {\n          return val !== null ? val : \"\";\n        },\n        textAnchor: \"middle\",\n        distributed: false,\n        offsetX: 0,\n        offsetY: 0,\n        style: {\n          fontSize: \"12px\",\n          fontFamily: void 0,\n          fontWeight: 600,\n          colors: void 0\n        },\n        background: {\n          enabled: true,\n          foreColor: \"#fff\",\n          backgroundColor: void 0,\n          borderRadius: 2,\n          padding: 4,\n          opacity: 0.9,\n          borderWidth: 1,\n          borderColor: \"#fff\",\n          dropShadow: {\n            enabled: false,\n            top: 1,\n            left: 1,\n            blur: 1,\n            color: \"#000\",\n            opacity: 0.8\n          }\n        },\n        dropShadow: {\n          enabled: false,\n          top: 1,\n          left: 1,\n          blur: 1,\n          color: \"#000\",\n          opacity: 0.8\n        }\n      },\n      fill: {\n        type: \"solid\",\n        colors: void 0,\n        // array of colors\n        opacity: 0.85,\n        gradient: {\n          shade: \"dark\",\n          type: \"horizontal\",\n          shadeIntensity: 0.5,\n          gradientToColors: void 0,\n          inverseColors: true,\n          opacityFrom: 1,\n          opacityTo: 1,\n          stops: [0, 50, 100],\n          colorStops: []\n        },\n        image: {\n          src: [],\n          width: void 0,\n          // optional\n          height: void 0\n          // optional\n        },\n        pattern: {\n          style: \"squares\",\n          // String | Array of Strings\n          width: 6,\n          height: 6,\n          strokeWidth: 2\n        }\n      },\n      forecastDataPoints: {\n        count: 0,\n        fillOpacity: 0.5,\n        strokeWidth: void 0,\n        dashArray: 4\n      },\n      grid: {\n        show: true,\n        borderColor: \"#e0e0e0\",\n        strokeDashArray: 0,\n        position: \"back\",\n        xaxis: {\n          lines: {\n            show: false\n          }\n        },\n        yaxis: {\n          lines: {\n            show: true\n          }\n        },\n        row: {\n          colors: void 0,\n          // takes as array which will be repeated on rows\n          opacity: 0.5\n        },\n        column: {\n          colors: void 0,\n          // takes an array which will be repeated on columns\n          opacity: 0.5\n        },\n        padding: {\n          top: 0,\n          right: 10,\n          bottom: 0,\n          left: 12\n        }\n      },\n      labels: [],\n      drilldown: {\n        // Opt-in. When false, the Drilldown feature module stays inert even if\n        // it was imported. Requires `import 'apexcharts/features/drilldown'`.\n        enabled: false,\n        // Child levels referenced by a data point's `drilldown: '<id>'` field.\n        // Each: { id, name?, data, chart?, xaxis?, yaxis?, colors?, plotOptions? }\n        series: [],\n        breadcrumb: {\n          show: true,\n          position: \"top-left\",\n          // 'top-left' | 'top-right'\n          separator: \" / \",\n          rootLabel: \"All\",\n          offsetX: 0,\n          offsetY: 0\n          // formatter: (label, { index, depth }) => label,\n        },\n        // Animation is delegated to the chart's update pipeline; `enabled`\n        // gates whether the drill transition animates at all.\n        animation: {\n          enabled: true,\n          // Anchor the drill transition at the clicked point: the child unfolds\n          // outward from it (and settles back on drill-up) instead of the chart\n          // simply re-rendering. A gentle scale layered on the SVG; opt-in.\n          zoomFromPoint: false,\n          // Base duration (ms) of the transition, used only when zoomFromPoint\n          // is true. The fade-out phase runs a little shorter than this.\n          speed: 260\n        }\n        // Optional async resolver, called when a drillable point has no inline\n        // match in `series`: ({ point, seriesIndex, dataPointIndex }) => childSeries\n        // onDrillDown: undefined,\n      },\n      legend: {\n        show: true,\n        showForSingleSeries: false,\n        showForNullSeries: true,\n        showForZeroSeries: true,\n        floating: false,\n        position: \"bottom\",\n        // whether to position legends in 1 of 4\n        // direction - top, bottom, left, right\n        horizontalAlign: \"center\",\n        // when position top/bottom, you can specify whether to align legends left, right or center\n        inverseOrder: false,\n        fontSize: \"12px\",\n        fontFamily: void 0,\n        fontWeight: 400,\n        width: void 0,\n        height: void 0,\n        formatter: void 0,\n        tooltipHoverFormatter: void 0,\n        offsetX: -20,\n        offsetY: 4,\n        customLegendItems: [],\n        clusterGroupedSeries: true,\n        clusterGroupedSeriesOrientation: \"vertical\",\n        labels: {\n          colors: void 0,\n          useSeriesColors: false\n        },\n        markers: {\n          size: 7,\n          fillColors: void 0,\n          strokeWidth: 1,\n          shape: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          customHTML: void 0,\n          onClick: void 0\n        },\n        itemMargin: {\n          horizontal: 5,\n          vertical: 4\n        },\n        onItemClick: {\n          toggleDataSeries: true\n        },\n        onItemHover: {\n          highlightDataSeries: true\n        }\n      },\n      markers: {\n        discrete: [],\n        size: 0,\n        colors: void 0,\n        strokeColors: \"#fff\",\n        strokeWidth: 2,\n        strokeOpacity: 0.9,\n        strokeDashArray: 0,\n        fillOpacity: 1,\n        shape: \"circle\",\n        offsetX: 0,\n        offsetY: 0,\n        showNullDataPoints: true,\n        onClick: void 0,\n        onDblClick: void 0,\n        hover: {\n          size: void 0,\n          sizeOffset: 3\n        }\n      },\n      noData: {\n        text: void 0,\n        align: \"center\",\n        offsetX: 0,\n        offsetY: 0,\n        style: {\n          color: void 0,\n          fontSize: \"14px\",\n          fontFamily: void 0\n        }\n      },\n      responsive: [],\n      // breakpoints should follow ascending order 400, then 700, then 1000\n      series: void 0,\n      states: {\n        hover: {\n          filter: {\n            type: \"lighten\"\n          }\n        },\n        active: {\n          allowMultipleDataPointsSelection: false,\n          filter: {\n            type: \"darken\"\n          }\n        }\n      },\n      title: {\n        text: void 0,\n        align: \"left\",\n        margin: 5,\n        offsetX: 0,\n        offsetY: 0,\n        floating: false,\n        style: {\n          fontSize: \"14px\",\n          fontWeight: 900,\n          fontFamily: void 0,\n          color: void 0\n        }\n      },\n      subtitle: {\n        text: void 0,\n        align: \"left\",\n        margin: 5,\n        offsetX: 0,\n        offsetY: 30,\n        floating: false,\n        style: {\n          fontSize: \"12px\",\n          fontWeight: 400,\n          fontFamily: void 0,\n          color: void 0\n        }\n      },\n      stroke: {\n        show: true,\n        curve: \"smooth\",\n        // \"smooth\" / \"straight\" / \"monotoneCubic\" / \"stepline\" / \"linestep\"\n        lineCap: \"butt\",\n        // round, butt , square\n        width: 2,\n        colors: void 0,\n        // array of colors\n        dashArray: 0,\n        // single value or array of values\n        fill: {\n          type: \"solid\",\n          colors: void 0,\n          // array of colors\n          opacity: 0.85,\n          gradient: {\n            shade: \"dark\",\n            type: \"horizontal\",\n            shadeIntensity: 0.5,\n            gradientToColors: void 0,\n            inverseColors: true,\n            opacityFrom: 1,\n            opacityTo: 1,\n            stops: [0, 50, 100],\n            colorStops: []\n          }\n        }\n      },\n      tooltip: {\n        enabled: true,\n        enabledOnSeries: void 0,\n        shared: true,\n        hideEmptySeries: false,\n        followCursor: false,\n        // when disabled, the tooltip will show on top of the series instead of mouse position\n        intersect: false,\n        // when enabled, tooltip will only show when user directly hovers over point\n        inverseOrder: false,\n        arrow: true,\n        custom: void 0,\n        fillSeriesColor: false,\n        theme: \"light\",\n        cssClass: \"\",\n        style: {\n          fontSize: \"12px\",\n          fontFamily: void 0,\n          background: void 0\n        },\n        onDatasetHover: {\n          highlightDataSeries: false\n        },\n        x: {\n          // x value\n          show: true,\n          format: \"dd MMM\",\n          // dd/MM, dd MMM yy, dd MMM yyyy\n          formatter: void 0\n          // a custom user supplied formatter function\n        },\n        y: {\n          formatter: void 0,\n          title: {\n            /**\n             * @param {string} seriesName\n             */\n            formatter(seriesName) {\n              return seriesName ? seriesName + \": \" : \"\";\n            }\n          }\n        },\n        z: {\n          formatter: void 0,\n          title: \"Size: \"\n        },\n        marker: {\n          show: true,\n          fillColors: void 0\n        },\n        items: {\n          display: \"flex\"\n        },\n        fixed: {\n          enabled: false,\n          position: \"topRight\",\n          // topRight, topLeft, bottomRight, bottomLeft\n          offsetX: 0,\n          offsetY: 0\n        }\n      },\n      xaxis: {\n        type: \"category\",\n        categories: [],\n        convertedCatToNumeric: false,\n        // internal property which should not be altered outside\n        offsetX: 0,\n        offsetY: 0,\n        overwriteCategories: void 0,\n        labels: {\n          show: true,\n          rotate: -45,\n          rotateAlways: false,\n          hideOverlappingLabels: true,\n          trim: false,\n          minHeight: void 0,\n          maxHeight: 120,\n          showDuplicates: true,\n          style: {\n            colors: [],\n            fontSize: \"12px\",\n            fontWeight: 400,\n            fontFamily: void 0,\n            cssClass: \"\"\n          },\n          offsetX: 0,\n          offsetY: 0,\n          format: void 0,\n          formatter: void 0,\n          // custom formatter function which will override format\n          datetimeUTC: true,\n          datetimeFormatter: {\n            // Base format per interval unit. TimeScale.formatDates folds in\n            // coarser context automatically when the data range spans it\n            // (e.g. month-scale across years → 'MMM yyyy', hour-scale across\n            // days → 'dd MMM HH:mm'). Customizing a base format that already\n            // includes the higher-unit token disables the auto-expansion for\n            // that level.\n            year: \"yyyy\",\n            month: \"MMM\",\n            day: \"dd MMM\",\n            hour: \"HH:mm\",\n            minute: \"HH:mm\",\n            second: \"HH:mm:ss\"\n          }\n        },\n        group: {\n          groups: [],\n          style: {\n            colors: [],\n            fontSize: \"12px\",\n            fontWeight: 400,\n            fontFamily: void 0,\n            cssClass: \"\"\n          }\n        },\n        axisBorder: {\n          show: true,\n          color: \"#e0e0e0\",\n          width: \"100%\",\n          height: 1,\n          offsetX: 0,\n          offsetY: 0\n        },\n        axisTicks: {\n          show: true,\n          color: \"#e0e0e0\",\n          height: 6,\n          offsetX: 0,\n          offsetY: 0\n        },\n        stepSize: void 0,\n        tickAmount: void 0,\n        tickPlacement: \"on\",\n        min: void 0,\n        max: void 0,\n        range: void 0,\n        floating: false,\n        decimalsInFloat: void 0,\n        position: \"bottom\",\n        title: {\n          text: void 0,\n          offsetX: 0,\n          offsetY: 0,\n          style: {\n            color: void 0,\n            fontSize: \"12px\",\n            fontWeight: 900,\n            fontFamily: void 0,\n            cssClass: \"\"\n          }\n        },\n        crosshairs: {\n          show: true,\n          width: 1,\n          // tickWidth/barWidth or an integer\n          position: \"back\",\n          opacity: 0.9,\n          stroke: {\n            color: \"#b6b6b6\",\n            width: 1,\n            dashArray: 3\n          },\n          fill: {\n            type: \"solid\",\n            // solid, gradient\n            color: \"#B1B9C4\",\n            gradient: {\n              colorFrom: \"#D8E3F0\",\n              colorTo: \"#BED1E6\",\n              stops: [0, 100],\n              opacityFrom: 0.4,\n              opacityTo: 0.5\n            }\n          },\n          dropShadow: {\n            enabled: false,\n            left: 0,\n            top: 0,\n            blur: 1,\n            opacity: 0.8\n          }\n        },\n        tooltip: {\n          enabled: false,\n          offsetY: 0,\n          formatter: void 0,\n          style: {\n            fontSize: \"12px\",\n            fontFamily: void 0\n          }\n        }\n      },\n      yaxis: this.yAxis,\n      theme: {\n        mode: \"\",\n        palette: \"palette1\",\n        // If defined, it will overwrite globals.colors variable\n        monochrome: {\n          // monochrome allows you to select just 1 color and fill out the rest with light/dark shade (intensity can be selected)\n          enabled: false,\n          color: \"#008FFB\",\n          shadeTo: \"light\",\n          shadeIntensity: 0.65\n        },\n        accessibility: {\n          colorBlindMode: \"\"\n          // '' | 'deuteranopia' | 'protanopia' | 'tritanopia' | 'highContrast'\n        }\n      }\n    };\n  }\n}\nclass Config {\n  /**\n   * @param {Record<string, any>} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  /** @param {{responsiveOverride: any}} opts */\n  init({ responsiveOverride }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\n    let opts = this.opts;\n    const options2 = new Options();\n    const defaults = new Defaults(opts);\n    opts = this.normalizeAliasedChartType(opts);\n    this.chartType = opts.chart.type;\n    opts = this.extendYAxis(opts);\n    opts = this.extendAnnotations(opts);\n    let config = options2.init();\n    let newDefaults = {};\n    if (opts && typeof opts === \"object\") {\n      let chartDefaults = {};\n      const chartTypes = [\n        \"line\",\n        \"area\",\n        \"bar\",\n        \"candlestick\",\n        \"boxPlot\",\n        \"violin\",\n        \"rangeBar\",\n        \"rangeArea\",\n        \"bubble\",\n        \"scatter\",\n        \"heatmap\",\n        \"treemap\",\n        \"pie\",\n        \"polarArea\",\n        \"donut\",\n        \"radar\",\n        \"radialBar\"\n      ];\n      const requestedType = opts.chart.requestedType;\n      if (requestedType === \"funnel\" || requestedType === \"pyramid\") {\n        chartDefaults = /** @type {any} */\n        defaults[requestedType]();\n      } else if (requestedType === \"gauge\") {\n        chartDefaults = defaults.gauge();\n      } else if (chartTypes.indexOf(opts.chart.type) !== -1) {\n        chartDefaults = /** @type {any} */\n        defaults[opts.chart.type]();\n      } else {\n        chartDefaults = defaults.line();\n      }\n      if ((_b = (_a = opts.plotOptions) == null ? void 0 : _a.bar) == null ? void 0 : _b.isFunnel) {\n        chartDefaults = defaults.funnel();\n      }\n      if (opts.chart.stacked && opts.chart.type === \"bar\") {\n        chartDefaults = defaults.stackedBars();\n      }\n      if ((_c = opts.chart.brush) == null ? void 0 : _c.enabled) {\n        chartDefaults = defaults.brush(chartDefaults);\n      }\n      if ((_e = (_d = opts.plotOptions) == null ? void 0 : _d.line) == null ? void 0 : _e.isSlopeChart) {\n        chartDefaults = defaults.slope();\n      }\n      if (opts.chart.stacked && opts.chart.stackType === \"100%\") {\n        opts = defaults.stacked100(opts);\n      }\n      if ((_g = (_f = opts.plotOptions) == null ? void 0 : _f.bar) == null ? void 0 : _g.isDumbbell) {\n        opts = defaults.dumbbell(opts);\n      }\n      this.checkForDarkTheme(Environment.getApex());\n      this.checkForDarkTheme(opts);\n      opts.xaxis = opts.xaxis || Environment.getApex().xaxis || {};\n      if (!responsiveOverride) {\n        opts.xaxis.convertedCatToNumeric = false;\n      }\n      opts = this.checkForCatToNumericXAxis(this.chartType, chartDefaults, opts);\n      if (((_h = opts.chart.sparkline) == null ? void 0 : _h.enabled) || ((_j = (_i = Environment.getApex().chart) == null ? void 0 : _i.sparkline) == null ? void 0 : _j.enabled)) {\n        chartDefaults = defaults.sparkline(chartDefaults);\n      }\n      newDefaults = Utils$1.extend(config, chartDefaults);\n    }\n    const mergedWithDefaultConfig = Utils$1.extend(\n      newDefaults,\n      Environment.getApex()\n    );\n    config = Utils$1.extend(mergedWithDefaultConfig, opts);\n    config = this.handleUserInputErrors(config);\n    return config;\n  }\n  /**\n   * Promoted chart-type aliases — `funnel`, `pyramid`, `gauge` — render via\n   * the existing `bar` (with `isFunnel`) and `radialBar` pathways. To keep\n   * the ~20 internal `chart.type === 'bar' | 'radialBar'` checks working\n   * unchanged, we normalize `chart.type` to the base renderer name here and\n   * preserve the user-facing name on `chart.requestedType` for the public\n   * API and for default selection.\n   *\n   * @param {Record<string, any>} opts\n   * @returns {Record<string, any>}\n   */\n  normalizeAliasedChartType(opts) {\n    if (!opts || !opts.chart) return opts;\n    const requested = opts.chart.type;\n    if (requested !== \"funnel\" && requested !== \"pyramid\" && requested !== \"gauge\") {\n      return opts;\n    }\n    opts.chart.requestedType = requested;\n    if (requested === \"funnel\" || requested === \"pyramid\") {\n      opts.plotOptions = opts.plotOptions || {};\n      opts.plotOptions.bar = opts.plotOptions.bar || {};\n      opts.plotOptions.bar.isFunnel = true;\n      opts.plotOptions.bar.horizontal = true;\n      opts.chart.type = \"bar\";\n      if (requested === \"pyramid\") {\n        opts.plotOptions.bar.isPyramid = true;\n      } else {\n        opts.plotOptions.bar.isPyramid = false;\n      }\n    } else if (requested === \"gauge\") {\n      opts.chart.type = \"radialBar\";\n    }\n    return opts;\n  }\n  /**\n   * @param {string} chartType\n   * @param {Record<string, any>} chartDefaults\n   * @param {Record<string, any>} opts\n   */\n  checkForCatToNumericXAxis(chartType, chartDefaults, opts) {\n    var _a, _b, _c, _d, _e;\n    const defaults = new Defaults(opts);\n    const isBarHorizontal = (chartType === \"bar\" || chartType === \"boxPlot\" || chartType === \"violin\") && ((_b = (_a = opts.plotOptions) == null ? void 0 : _a.bar) == null ? void 0 : _b.horizontal);\n    const unsupportedZoom = chartType === \"pie\" || chartType === \"polarArea\" || chartType === \"donut\" || chartType === \"radar\" || chartType === \"radialBar\" || chartType === \"heatmap\";\n    const notNumericXAxis = opts.xaxis.type !== \"datetime\" && opts.xaxis.type !== \"numeric\";\n    const isScatterJitter = (chartType === \"scatter\" || chartType === \"bubble\") && ((_e = (_d = (_c = opts.plotOptions) == null ? void 0 : _c.scatter) == null ? void 0 : _d.jitter) == null ? void 0 : _e.enabled);\n    const tickPlacement = opts.xaxis.tickPlacement ? opts.xaxis.tickPlacement : chartDefaults.xaxis && chartDefaults.xaxis.tickPlacement;\n    if (!isBarHorizontal && !unsupportedZoom && !isScatterJitter && notNumericXAxis && tickPlacement !== \"between\") {\n      opts = defaults.convertCatToNumeric(opts);\n    }\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {import('../../types/internal').ChartStateW} [w]\n   */\n  extendYAxis(opts, w) {\n    const options2 = new Options();\n    if (typeof opts.yaxis === \"undefined\" || !opts.yaxis || Array.isArray(opts.yaxis) && opts.yaxis.length === 0) {\n      opts.yaxis = {};\n    }\n    const globalApex = Environment.getApex();\n    if (opts.yaxis.constructor !== Array && globalApex.yaxis && globalApex.yaxis.constructor !== Array) {\n      opts.yaxis = Utils$1.extend(opts.yaxis, globalApex.yaxis);\n    }\n    if (opts.yaxis.constructor !== Array) {\n      opts.yaxis = [Utils$1.extend(options2.yAxis, opts.yaxis)];\n    } else {\n      opts.yaxis = Utils$1.extendArray(opts.yaxis, options2.yAxis);\n    }\n    let isLogY = false;\n    opts.yaxis.forEach((y) => {\n      if (y.logarithmic) {\n        isLogY = true;\n      }\n    });\n    let series = opts.series;\n    if (w && !series) {\n      series = w.config.series;\n    }\n    if (isLogY && series.length !== opts.yaxis.length && series.length) {\n      opts.yaxis = series.map((s, i) => {\n        if (!s.name) {\n          series[i].name = `series-${i + 1}`;\n        }\n        if (opts.yaxis[i]) {\n          opts.yaxis[i].seriesName = series[i].name;\n          return opts.yaxis[i];\n        } else {\n          const newYaxis = Utils$1.extend(options2.yAxis, opts.yaxis[0]);\n          newYaxis.show = false;\n          return newYaxis;\n        }\n      });\n    }\n    if (isLogY && series.length > 1 && series.length !== opts.yaxis.length) {\n      console.warn(\n        \"A multi-series logarithmic chart should have equal number of series and y-axes\"\n      );\n    }\n    return opts;\n  }\n  // annotations also accepts array, so we need to extend them manually\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendAnnotations(opts) {\n    if (typeof opts.annotations === \"undefined\") {\n      opts.annotations = {};\n      opts.annotations.yaxis = [];\n      opts.annotations.xaxis = [];\n      opts.annotations.points = [];\n    }\n    opts = this.extendYAxisAnnotations(opts);\n    opts = this.extendXAxisAnnotations(opts);\n    opts = this.extendPointAnnotations(opts);\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendYAxisAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.yaxis = Utils$1.extendArray(\n      typeof opts.annotations.yaxis !== \"undefined\" ? opts.annotations.yaxis : [],\n      options2.yAxisAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendXAxisAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.xaxis = Utils$1.extendArray(\n      typeof opts.annotations.xaxis !== \"undefined\" ? opts.annotations.xaxis : [],\n      options2.xAxisAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  extendPointAnnotations(opts) {\n    const options2 = new Options();\n    opts.annotations.points = Utils$1.extendArray(\n      typeof opts.annotations.points !== \"undefined\" ? opts.annotations.points : [],\n      options2.pointAnnotation\n    );\n    return opts;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  checkForDarkTheme(opts) {\n    if (opts.theme && opts.theme.mode === \"dark\") {\n      if (!opts.tooltip) {\n        opts.tooltip = {};\n      }\n      if (opts.tooltip.theme !== \"light\") {\n        opts.tooltip.theme = \"dark\";\n      }\n      if (!opts.chart.foreColor) {\n        opts.chart.foreColor = \"#f6f7f8\";\n      }\n      if (!opts.theme.palette) {\n        opts.theme.palette = \"palette4\";\n      }\n    }\n  }\n  /**\n   * @param {any} opts\n   */\n  handleUserInputErrors(opts) {\n    const config = opts;\n    if (config.tooltip.shared && config.tooltip.intersect) {\n      throw new Error(\n        \"tooltip.shared cannot be enabled when tooltip.intersect is true. Turn off any other option by setting it to false.\"\n      );\n    }\n    if (config.chart.type === \"bar\" && config.plotOptions.bar.horizontal) {\n      if (config.yaxis.length > 1) {\n        throw new Error(\n          \"Multiple Y Axis for bars are not supported. Switch to column chart by setting plotOptions.bar.horizontal=false\"\n        );\n      }\n      if (config.yaxis[0].reversed) {\n        config.yaxis[0].opposite = true;\n      }\n      config.xaxis.tooltip.enabled = false;\n      config.yaxis[0].tooltip.enabled = false;\n      config.chart.zoom.enabled = false;\n    }\n    if (config.chart.type === \"bar\" || config.chart.type === \"rangeBar\") {\n      if (config.tooltip.shared) {\n        if (config.xaxis.crosshairs.width === \"barWidth\" && config.series.length > 1) {\n          config.xaxis.crosshairs.width = \"tickWidth\";\n        }\n      }\n    }\n    if (config.chart.type === \"candlestick\" || config.chart.type === \"boxPlot\") {\n      if (config.yaxis[0].reversed) {\n        console.warn(\n          `Reversed y-axis in ${config.chart.type} chart is not supported.`\n        );\n        config.yaxis[0].reversed = false;\n      }\n    }\n    return config;\n  }\n}\nconst LINE_HEIGHT_RATIO = 1.618;\nconst NICE_SCALE_ALLOWED_MAG_MSD = [\n  [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10],\n  [1, 1, 2, 5, 5, 5, 10, 10, 10, 10, 10]\n];\nconst NICE_SCALE_DEFAULT_TICKS = [\n  1,\n  2,\n  4,\n  4,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  6,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  12,\n  24\n];\nclass Globals {\n  /**\n   * @param {any} gl\n   */\n  initGlobalVars(gl) {\n    gl.series = [];\n    gl.seriesCandleO = [];\n    gl.seriesCandleH = [];\n    gl.seriesCandleM = [];\n    gl.seriesCandleL = [];\n    gl.seriesCandleC = [];\n    gl.seriesRangeStart = [];\n    gl.seriesRangeEnd = [];\n    gl.seriesRange = [];\n    gl.seriesPercent = [];\n    gl.seriesGoals = [];\n    gl.seriesX = [];\n    gl.seriesZ = [];\n    gl.seriesNames = [];\n    gl.seriesTotals = [];\n    gl.seriesLog = [];\n    gl.seriesColors = [];\n    gl.stackedSeriesTotals = [];\n    gl.seriesXvalues = [];\n    gl.seriesYvalues = [];\n    gl.dataWasParsed = false;\n    gl.originalSeries = null;\n    gl.maxValsInArrayIndex = 0;\n    gl.yValueDecimal = 0;\n    gl.allSeriesHasEqualX = true;\n    gl.labels = [];\n    gl.hasXaxisGroups = false;\n    gl.groups = [];\n    gl.barGroups = [];\n    gl.lineGroups = [];\n    gl.areaGroups = [];\n    gl.hasSeriesGroups = false;\n    gl.seriesGroups = [];\n    gl.categoryLabels = [];\n    gl.timescaleLabels = [];\n    gl.noLabelsProvided = false;\n    gl.isXNumeric = false;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    gl.isDataXYZ = false;\n    gl.isMultiLineX = false;\n    gl.isMultipleYAxis = false;\n    gl.maxY = -Number.MAX_VALUE;\n    gl.minY = Number.MIN_VALUE;\n    gl.minYArr = [];\n    gl.maxYArr = [];\n    gl.maxX = -Number.MAX_VALUE;\n    gl.minX = Number.MAX_VALUE;\n    gl.initialMaxX = -Number.MAX_VALUE;\n    gl.initialMinX = Number.MAX_VALUE;\n    gl.maxDate = 0;\n    gl.minDate = Number.MAX_VALUE;\n    gl.minZ = Number.MAX_VALUE;\n    gl.maxZ = -Number.MAX_VALUE;\n    gl.minXDiff = Number.MAX_VALUE;\n    gl.yAxisScale = [];\n    gl.xAxisScale = null;\n    gl.xAxisTicksPositions = [];\n    gl.xRange = 0;\n    gl.yRange = [];\n    gl.zRange = 0;\n    gl.dataPoints = 0;\n    gl.xTickAmount = 0;\n    gl.multiAxisTickAmount = 0;\n    gl.disableZoomIn = false;\n    gl.disableZoomOut = false;\n    gl.yLabelsCoords = [];\n    gl.yTitleCoords = [];\n    gl.barPadForNumericAxis = 0;\n    gl.padHorizontal = 0;\n    gl.rotateXLabels = false;\n    gl.overlappingXLabels = false;\n    gl.radialSize = 0;\n    gl.barHeight = 0;\n    gl.barWidth = 0;\n    gl.animationEnded = false;\n    gl.isDestroyed = false;\n    gl.bulkRevealScheduled = false;\n    gl.resizeTimer = null;\n    gl.selectionResizeTimer = null;\n    gl.lastWheelExecution = 0;\n    gl.delayedElements = [];\n    gl.pointsArray = [];\n    gl.dataLabelsRects = [];\n    gl.lastDrawnDataLabelsIndexes = [];\n    gl.textRectsCache = /* @__PURE__ */ new Map();\n    gl.domCache = /* @__PURE__ */ new Map();\n    gl.dimensionCache = {};\n    gl.cachedSelectors = {};\n    if (!gl.seriesNS) {\n      this._attachNamespaces(gl);\n    }\n  }\n  /**\n   * Attach domain-grouped namespace sub-objects onto gl.\n   * Each sub-object is a plain object whose properties are defined as\n   * getters/setters that read/write the canonical flat properties on gl.\n   * This means there is exactly ONE storage location per value — no copies,\n   * no sync needed.\n   *\n   * Namespaces:\n   *   gl.series  — parsed series data and chart-type-specific arrays\n   *   gl.axes    — axis bounds, scales, ranges, tick state\n   *   gl.layout  — SVG/grid dimensions, translations, label sizes\n   *   gl.cache   — DOM caches, timers, observers, drawing scratch space\n   *\n   * Note: interact state lives on w.interact (not gl) — see Base.js.\n   * @param {any} gl\n   */\n  _attachNamespaces(gl) {\n    const proxy = (ns, key, nsKey = key) => {\n      Object.defineProperty(ns, nsKey, {\n        get() {\n          return gl[key];\n        },\n        set(v) {\n          gl[key] = v;\n        },\n        enumerable: true,\n        configurable: true\n      });\n    };\n    const seriesNS = {};\n    proxy(seriesNS, \"series\", \"data\");\n    for (const key of [\n      \"seriesNames\",\n      \"seriesX\",\n      \"seriesZ\",\n      \"seriesXvalues\",\n      \"seriesYvalues\",\n      \"seriesGoals\",\n      \"seriesLog\",\n      \"seriesColors\",\n      \"seriesPercent\",\n      \"seriesTotals\",\n      \"stackedSeriesTotals\",\n      \"seriesCandleO\",\n      \"seriesCandleH\",\n      \"seriesCandleM\",\n      \"seriesCandleL\",\n      \"seriesCandleC\",\n      \"seriesRangeStart\",\n      \"seriesRangeEnd\",\n      \"seriesRange\",\n      \"seriesYAxisMap\",\n      \"seriesYAxisReverseMap\",\n      \"seriesGroups\",\n      \"barGroups\",\n      \"lineGroups\",\n      \"areaGroups\",\n      \"originalSeries\",\n      \"collapsedSeries\",\n      \"collapsedSeriesIndices\",\n      \"ancillaryCollapsedSeries\",\n      \"ancillaryCollapsedSeriesIndices\",\n      \"allSeriesCollapsed\",\n      \"risingSeries\",\n      \"previousPaths\",\n      \"ignoreYAxisIndexes\",\n      \"labels\",\n      \"categoryLabels\",\n      \"timescaleLabels\",\n      \"groups\"\n    ]) {\n      proxy(seriesNS, key);\n    }\n    Object.defineProperty(gl, \"seriesNS\", {\n      value: seriesNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const axesNS = {};\n    for (const key of [\n      \"minX\",\n      \"maxX\",\n      \"initialMinX\",\n      \"initialMaxX\",\n      \"minY\",\n      \"maxY\",\n      \"minYArr\",\n      \"maxYArr\",\n      \"minZ\",\n      \"maxZ\",\n      \"minDate\",\n      \"maxDate\",\n      \"minXDiff\",\n      \"xRange\",\n      \"yRange\",\n      \"zRange\",\n      \"xAxisScale\",\n      \"yAxisScale\",\n      \"xAxisTicksPositions\",\n      \"xTickAmount\",\n      \"multiAxisTickAmount\",\n      \"dataPoints\",\n      \"maxValsInArrayIndex\",\n      \"isXNumeric\",\n      \"isMultipleYAxis\",\n      \"isMultiLineX\",\n      \"isDataXYZ\",\n      \"dataFormatXNumeric\",\n      \"allSeriesHasEqualX\",\n      \"hasNullValues\",\n      \"dataWasParsed\",\n      \"hasXaxisGroups\",\n      \"hasSeriesGroups\",\n      \"skipFirstTimelinelabel\",\n      \"skipLastTimelinelabel\",\n      \"yValueDecimal\",\n      \"invalidLogScale\",\n      \"noLabelsProvided\"\n    ]) {\n      proxy(axesNS, key);\n    }\n    Object.defineProperty(gl, \"axes\", {\n      value: axesNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const layoutNS = {};\n    for (const key of [\n      \"svgWidth\",\n      \"svgHeight\",\n      \"gridWidth\",\n      \"gridHeight\",\n      \"translateX\",\n      \"translateY\",\n      \"translateXAxisX\",\n      \"translateXAxisY\",\n      \"translateYAxisX\",\n      \"xAxisLabelsHeight\",\n      \"xAxisGroupLabelsHeight\",\n      \"xAxisLabelsWidth\",\n      \"yAxisLabelsWidth\",\n      \"yAxisWidths\",\n      \"yLabelsCoords\",\n      \"yTitleCoords\",\n      \"padHorizontal\",\n      \"barPadForNumericAxis\",\n      \"rotateXLabels\",\n      \"scaleX\",\n      \"scaleY\",\n      \"radialSize\",\n      \"defaultLabels\",\n      \"overlappingXLabels\"\n    ]) {\n      proxy(layoutNS, key);\n    }\n    Object.defineProperty(gl, \"layout\", {\n      value: layoutNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n    const cacheNS = {};\n    for (const key of [\n      \"domCache\",\n      \"dimensionCache\",\n      \"cachedSelectors\",\n      \"textRectsCache\",\n      \"pointsArray\",\n      \"dataLabelsRects\",\n      \"lastDrawnDataLabelsIndexes\",\n      \"delayedElements\",\n      \"resizeTimer\",\n      \"selectionResizeTimer\",\n      \"resizeObserver\"\n    ]) {\n      proxy(cacheNS, key);\n    }\n    Object.defineProperty(gl, \"cache\", {\n      value: cacheNS,\n      writable: false,\n      enumerable: false,\n      configurable: true\n    });\n  }\n  /**\n   * Persistent chart state — set ONCE at chart construction and intentionally NOT\n   * reset by initGlobalVars.  These values must survive updateSeries / re-render.\n   *\n   * Rule: if a value is recalculated fresh on every render it belongs in\n   * initGlobalVars instead, not here.\n   * @returns {import('../../types/internal').ChartGlobals}\n   * @param {Record<string, any>} config\n   */\n  globalVars(config) {\n    const globals = {\n      // ── Identity (set once, never changes) ───────────────────────────────────\n      chartID: null,\n      // full chart ID: \"apexcharts-<cuid>\"\n      cuid: null,\n      // random suffix only\n      // ── Event registry (accumulates listeners, never reset) ───────────────────\n      events: {\n        beforeMount: [],\n        mounted: [],\n        updated: [],\n        clicked: [],\n        selection: [],\n        dataPointSelection: [],\n        zoomed: [],\n        scrolled: []\n      },\n      // ── Theme colors (set by Theme module after config merge) ─────────────────\n      colors: [],\n      fill: { colors: [] },\n      stroke: { colors: [] },\n      dataLabels: { style: { colors: [] } },\n      radarPolygons: { fill: { colors: [] } },\n      markers: {\n        colors: [],\n        size: config.markers.size,\n        largestSize: 0\n      },\n      // ── Device / environment detected once at startup ─────────────────────────\n      // Note: isTouchDevice lives on w.interact — see Base.js. Shim installed there.\n      LINE_HEIGHT_RATIO,\n      // ── Chart-type flags (derived from config, set during Core.mount) ─────────\n      axisCharts: true,\n      // false for pie/radial/treemap etc.\n      isSlopeChart: config.plotOptions.line.isSlopeChart,\n      comboCharts: false,\n      // true when mixing line + column series\n      // ── Config snapshots (backups for zoom-reset / updateOptions) ────────────\n      initialConfig: null,\n      // deep clone of the original user config\n      initialSeries: [],\n      lastXAxis: [],\n      lastYAxis: [],\n      // ── User interaction state (must survive re-renders) ──────────────────────\n      // Note: zoomEnabled, panEnabled, selectionEnabled, zoomed, selection,\n      //       visibleXRange, selectedDataPoints, mousedown, clientX, clientY,\n      //       lastClientPosition, lastWheelExecution, capturedSeriesIndex,\n      //       capturedDataPointIndex, disableZoomIn, disableZoomOut, isTouchDevice\n      //       live on w.interact — see Base.js. Backward-compat shims installed there.\n      // Series collapse state (user-driven, must persist across re-renders)\n      allSeriesCollapsed: false,\n      collapsedSeries: [],\n      collapsedSeriesIndices: [],\n      ancillaryCollapsedSeries: [],\n      ancillaryCollapsedSeriesIndices: [],\n      risingSeries: [],\n      // series being re-shown after collapse\n      ignoreYAxisIndexes: [],\n      // y-axis indices excluded during series collapse\n      // ── Lifecycle / update flags ──────────────────────────────────────────────\n      isDirty: false,\n      // true when user called an update method manually\n      isExecCalled: false,\n      // true when update came via exec()\n      dataChanged: false,\n      // true when series data was changed dynamically\n      resized: false,\n      // true after a container resize\n      // ── Data format flags (derived from config/series, stable between renders) ─\n      // Note: dataFormatXNumeric lives on w.axisFlags — see Base.js. Shim installed there.\n      invalidLogScale: false,\n      // true when log scale requested but data is invalid\n      hasNullValues: false,\n      // true when any series contains null values\n      // Persistent data tracking\n      columnSeries: null,\n      // tracks which series are rendered as bars/columns\n      yaxis: null,\n      // resolved yaxis config array\n      total: 0,\n      // running total (used by pie/radial)\n      // ── Animation control ─────────────────────────────────────────────────────\n      shouldAnimate: true,\n      previousPaths: [],\n      // paths from previous render — source for enter animation\n      // ── SVG viewport (set by Dimensions, but persistent as layout anchor) ─────\n      svgWidth: 0,\n      svgHeight: 0,\n      // Note: gridWidth, gridHeight, translateX, translateY, translateXAxisX,\n      // translateXAxisY, xAxisLabelsHeight, xAxisGroupLabelsHeight, xAxisLabelsWidth,\n      // rotateXLabels, xAxisHeight, yLabelsCoords, yTitleCoords live on w.layout —\n      // see Base.js. Backward-compat shims installed there.\n      defaultLabels: false,\n      // Note: formatter properties (xLabelFormatter, yLabelFormatters, etc.) live on\n      // w.formatters — see Base.js. Backward-compat shims installed there.\n      yAxisLabelsWidth: 0,\n      scaleX: 1,\n      scaleY: 1,\n      translateYAxisX: [],\n      yAxisWidths: [],\n      // ── Instances (created once, replaced only on full re-init) ──────────────\n      tooltip: null,\n      resizeObserver: null,\n      // ── Locale (loaded once; changes only via setLocale()) ───────────────────\n      locale: {},\n      // ── Method queue (deferred calls during async operations) ────────────────\n      memory: {\n        methodsToExec: []\n      },\n      // ── Scale configuration constants — imported from utils/Constants.js ──────\n      niceScaleAllowedMagMsd: NICE_SCALE_ALLOWED_MAG_MSD,\n      niceScaleDefaultTicks: NICE_SCALE_DEFAULT_TICKS,\n      // ── Multi-axis series mapping ─────────────────────────────────────────────\n      seriesYAxisMap: [],\n      // yAxis index → series indices[]\n      seriesYAxisReverseMap: [],\n      // series index → yAxis index\n      noData: false\n      // true when there is nothing to render\n    };\n    return (\n      /** @type {import('../../types/internal').ChartGlobals} */\n      /** @type {unknown} */\n      globals\n    );\n  }\n  /**\n   * @param {Record<string, any>} config\n   */\n  init(config) {\n    const globals = this.globalVars(config);\n    this.initGlobalVars(globals);\n    globals.initialConfig = Utils$1.extend({}, config);\n    globals.initialSeries = Utils$1.clone(config.series);\n    globals.lastXAxis = Utils$1.clone(\n      /** @type {NonNullable<typeof globals.initialConfig>} */\n      globals.initialConfig.xaxis\n    );\n    globals.lastYAxis = Utils$1.clone(\n      /** @type {NonNullable<typeof globals.initialConfig>} */\n      globals.initialConfig.yaxis\n    );\n    return globals;\n  }\n}\nclass Base {\n  /**\n   * @param {object} opts\n   */\n  constructor(opts) {\n    this.opts = opts;\n  }\n  /**\n   * Build and return the full chart state object `w`.\n   * @returns {import('../types/internal').ChartStateW}\n   */\n  init() {\n    const config = new Config(this.opts).init({ responsiveOverride: false });\n    const globals = new Globals().init(config);\n    const w = {\n      config,\n      globals,\n      dom: {},\n      // DOM node cache — lives here, not inside globals\n      interact: {\n        // Tool mode (derived from toolbar config at construction, updated by Toolbar)\n        zoomEnabled: config.chart.toolbar.autoSelected === \"zoom\" && config.chart.toolbar.tools.zoom && config.chart.zoom.enabled,\n        panEnabled: config.chart.toolbar.autoSelected === \"pan\" && config.chart.toolbar.tools.pan,\n        selectionEnabled: config.chart.toolbar.autoSelected === \"selection\" && config.chart.toolbar.tools.selection,\n        // Zoom / pan state (user-driven, must persist across re-renders)\n        zoomed: false,\n        selection: void 0,\n        visibleXRange: void 0,\n        selectedDataPoints: [],\n        // Mouse / pointer state\n        mousedown: false,\n        clientX: null,\n        clientY: null,\n        lastClientPosition: {},\n        lastWheelExecution: 0,\n        // Tooltip capture state\n        capturedSeriesIndex: -1,\n        capturedDataPointIndex: -1,\n        // Timescale zoom bounds (reset per render by TimeScale)\n        disableZoomIn: false,\n        disableZoomOut: false,\n        // Device detection (set once at construction)\n        isTouchDevice: Environment.isBrowser() ? \"ontouchstart\" in window || navigator.maxTouchPoints > 0 : false\n      },\n      formatters: {\n        // Populated by Formatters.setLabelFormatters() each render\n        xLabelFormatter: void 0,\n        yLabelFormatters: [],\n        xaxisTooltipFormatter: void 0,\n        ttKeyFormatter: void 0,\n        ttVal: void 0,\n        ttZFormatter: void 0,\n        legendFormatter: void 0\n      },\n      // Candlestick / boxplot OHLC arrays — written by Data.handleCandleStickBoxData()\n      // each render; empty for all other chart types.\n      candleData: {\n        seriesCandleO: [],\n        seriesCandleH: [],\n        seriesCandleM: [],\n        seriesCandleL: [],\n        seriesCandleC: [],\n        // Optional raw observations per boxPlot data point ([i][j] = number[]),\n        // rendered as jitter dots. Empty unless boxPlot points are supplied.\n        seriesBoxPoints: []\n      },\n      // Range chart arrays — written by Data.handleRangeData() each render;\n      // empty for all other chart types.\n      rangeData: {\n        seriesRangeStart: [],\n        seriesRangeEnd: [],\n        seriesRange: []\n      },\n      // Violin distribution arrays — written by Data.handleViolinData() each\n      // render; empty for all other chart types.\n      //   seriesViolinDensity[i][j] = { values:number[], weights:number[], maxWeight:number }\n      //   seriesViolinPoints[i][j]  = number[] (raw observations, value-axis units)\n      //   seriesViolinMin/Max[i][j] = number (extent of density + points — drives Range.js)\n      violinData: {\n        seriesViolinDensity: [],\n        seriesViolinPoints: [],\n        seriesViolinMin: [],\n        seriesViolinMax: []\n      },\n      // Label / category data — written by Data.parseData() and TimeScale each render.\n      labelData: {\n        labels: [],\n        categoryLabels: [],\n        timescaleLabels: [],\n        // written by TimeScale.calculateTimeScaleMinMax()\n        hasXaxisGroups: false,\n        groups: [],\n        seriesGroups: []\n      },\n      // Axis / parsing behaviour flags — written by Data.parseData() each render.\n      axisFlags: {\n        isXNumeric: false,\n        dataFormatXNumeric: false,\n        isDataXYZ: false,\n        isRangeData: false,\n        isRangeBar: false,\n        isMultiLineX: false,\n        noLabelsProvided: false,\n        dataWasParsed: false\n      },\n      // Parsed series data — written by Data.parseData() each render.\n      // Note: initialSeries and originalSeries are intentionally excluded —\n      // they are persistent (survive re-renders) and remain on w.globals.\n      seriesData: {\n        series: [],\n        // main y-values array\n        seriesNames: [],\n        seriesX: [],\n        seriesZ: [],\n        seriesColors: [],\n        seriesGoals: [],\n        stackedSeriesTotals: [],\n        stackedSeriesTotalsByGroups: []\n      },\n      // Grid / axis layout computed by Dimensions.plotCoords() each render.\n      // gridWidth/gridHeight/translateX/translateY are also used as starting\n      // points by Dimensions on the next render (accumulated values), so the\n      // shim must be bidirectional — reads and writes both route correctly.\n      layout: {\n        gridHeight: 0,\n        gridWidth: 0,\n        translateX: 0,\n        translateY: 0,\n        translateXAxisX: 0,\n        translateXAxisY: 0,\n        rotateXLabels: false,\n        xAxisHeight: 0,\n        xAxisLabelsHeight: 0,\n        xAxisGroupLabelsHeight: 0,\n        xAxisLabelsWidth: 0,\n        yLabelsCoords: [],\n        yTitleCoords: []\n      }\n    };\n    Object.defineProperty(globals, \"dom\", {\n      get() {\n        return w.dom;\n      },\n      set(v) {\n        w.dom = v;\n      },\n      enumerable: false,\n      configurable: true\n    });\n    for (const key of [\n      \"xLabelFormatter\",\n      \"yLabelFormatters\",\n      \"xaxisTooltipFormatter\",\n      \"ttKeyFormatter\",\n      \"ttVal\",\n      \"ttZFormatter\",\n      \"legendFormatter\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.formatters[key]\n          );\n        },\n        set(v) {\n          w.formatters[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"zoomEnabled\",\n      \"panEnabled\",\n      \"selectionEnabled\",\n      \"zoomed\",\n      \"selection\",\n      \"visibleXRange\",\n      \"selectedDataPoints\",\n      \"mousedown\",\n      \"clientX\",\n      \"clientY\",\n      \"lastClientPosition\",\n      \"lastWheelExecution\",\n      \"capturedSeriesIndex\",\n      \"capturedDataPointIndex\",\n      \"disableZoomIn\",\n      \"disableZoomOut\",\n      \"isTouchDevice\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.interact[key]\n          );\n        },\n        set(v) {\n          w.interact[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"gridHeight\",\n      \"gridWidth\",\n      \"translateX\",\n      \"translateY\",\n      \"translateXAxisX\",\n      \"translateXAxisY\",\n      \"rotateXLabels\",\n      \"xAxisHeight\",\n      \"xAxisLabelsHeight\",\n      \"xAxisGroupLabelsHeight\",\n      \"xAxisLabelsWidth\",\n      \"yLabelsCoords\",\n      \"yTitleCoords\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.layout[key]\n          );\n        },\n        set(v) {\n          w.layout[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"series\",\n      \"seriesNames\",\n      \"seriesX\",\n      \"seriesZ\",\n      \"seriesColors\",\n      \"seriesGoals\",\n      \"stackedSeriesTotals\",\n      \"stackedSeriesTotalsByGroups\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.seriesData[key]\n          );\n        },\n        set(v) {\n          w.seriesData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"isXNumeric\",\n      \"dataFormatXNumeric\",\n      \"isDataXYZ\",\n      \"isRangeData\",\n      \"isRangeBar\",\n      \"isMultiLineX\",\n      \"noLabelsProvided\",\n      \"dataWasParsed\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.axisFlags[key]\n          );\n        },\n        set(v) {\n          w.axisFlags[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"labels\",\n      \"categoryLabels\",\n      \"timescaleLabels\",\n      \"hasXaxisGroups\",\n      \"groups\",\n      \"seriesGroups\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.labelData[key]\n          );\n        },\n        set(v) {\n          w.labelData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\"seriesRangeStart\", \"seriesRangeEnd\", \"seriesRange\"]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.rangeData[key]\n          );\n        },\n        set(v) {\n          w.rangeData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"seriesCandleO\",\n      \"seriesCandleH\",\n      \"seriesCandleM\",\n      \"seriesCandleL\",\n      \"seriesCandleC\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.candleData[key]\n          );\n        },\n        set(v) {\n          w.candleData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    for (const key of [\n      \"seriesViolinDensity\",\n      \"seriesViolinPoints\",\n      \"seriesViolinMin\",\n      \"seriesViolinMax\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w.violinData[key]\n          );\n        },\n        set(v) {\n          w.violinData[key] = v;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    return (\n      /** @type {import('../types/internal').ChartStateW} */\n      /** @type {unknown} */\n      w\n    );\n  }\n}\nclass CoreUtils {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {any[]} series\n   * @param {string} chartType\n   */\n  static checkComboSeries(series, chartType) {\n    let comboCharts = false;\n    let comboBarCount = 0;\n    let comboCount = 0;\n    if (chartType === void 0) {\n      chartType = \"line\";\n    }\n    if (series.length && typeof series[0].type !== \"undefined\") {\n      series.forEach((s) => {\n        if (s.type === \"bar\" || s.type === \"column\" || s.type === \"candlestick\" || s.type === \"boxPlot\" || s.type === \"violin\") {\n          comboBarCount++;\n        }\n        if (typeof s.type !== \"undefined\" && s.type !== chartType) {\n          comboCount++;\n        }\n      });\n    }\n    if (comboCount > 0) {\n      comboCharts = true;\n    }\n    return {\n      comboBarCount,\n      comboCharts\n    };\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the sum of all individual values in a multiple stacked series\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1]]\n   *  @return [34,36,48,13]\n   * @param {number[]} excludedSeriesIndices\n   **/\n  getStackedSeriesTotals(excludedSeriesIndices = []) {\n    const w = this.w;\n    const total = [];\n    if (w.seriesData.series.length === 0) return total;\n    for (let i = 0; i < w.seriesData.series[w.globals.maxValsInArrayIndex].length; i++) {\n      let t = 0;\n      for (let j = 0; j < w.seriesData.series.length; j++) {\n        if (typeof w.seriesData.series[j][i] !== \"undefined\" && excludedSeriesIndices.indexOf(j) === -1) {\n          t += w.seriesData.series[j][i];\n        }\n      }\n      total.push(t);\n    }\n    return total;\n  }\n  // get total of the all values inside all series\n  /**\n   * @param {number | null} [index]\n   */\n  getSeriesTotalByIndex(index = null) {\n    if (index === null) {\n      return (\n        /** @type {any[]} */\n        this.w.config.series.reduce(\n          (acc, cur) => acc + cur,\n          0\n        )\n      );\n    } else {\n      const seriesAtIndex = this.w.seriesData.series[index];\n      if (!Array.isArray(seriesAtIndex)) {\n        return seriesAtIndex != null ? seriesAtIndex : 0;\n      }\n      return seriesAtIndex.reduce(\n        (acc, cur) => acc + cur,\n        0\n      );\n    }\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the sum of values in a multiple stacked grouped charts\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1], [43, 23, 34, 22]]\n   * series 1 and 2 are in a group, while series 3 is in another group\n   *  @return [[34, 36, 48, 12], [43, 23, 34, 22]]\n   **/\n  getStackedSeriesTotalsByGroups() {\n    const w = this.w;\n    const total = [];\n    w.labelData.seriesGroups.forEach((sg) => {\n      const includedIndexes = [];\n      w.config.series.forEach((s, si) => {\n        if (sg.indexOf(w.seriesData.seriesNames[si]) > -1) {\n          includedIndexes.push(si);\n        }\n      });\n      const excludedIndices = w.seriesData.series.map((_, fi) => includedIndexes.indexOf(fi) === -1 ? fi : -1).filter((f) => f !== -1);\n      total.push(this.getStackedSeriesTotals(excludedIndices));\n    });\n    return total;\n  }\n  setSeriesYAxisMappings() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    let axisSeriesMap = [];\n    const seriesYAxisReverseMap = [];\n    const unassignedSeriesIndices = [];\n    const seriesNameArrayStyle = this.w.seriesData.series.length > cnf.yaxis.length || /**\n     * @param {ApexYAxis} a\n     */\n    cnf.yaxis.some((a) => Array.isArray(a.seriesName));\n    cnf.series.forEach((_s, i) => {\n      unassignedSeriesIndices.push(i);\n      seriesYAxisReverseMap.push(null);\n    });\n    cnf.yaxis.forEach(\n      (_yaxe, yi) => {\n        axisSeriesMap[yi] = [];\n      }\n    );\n    const unassignedYAxisIndices = [];\n    cnf.yaxis.forEach((yaxe, yi) => {\n      let assigned = false;\n      if (yaxe.seriesName) {\n        let seriesNames = [];\n        if (Array.isArray(yaxe.seriesName)) {\n          seriesNames = yaxe.seriesName;\n        } else {\n          seriesNames.push(yaxe.seriesName);\n        }\n        seriesNames.forEach((name2) => {\n          cnf.series.forEach((s, si) => {\n            if (\n              /** @type {any} */\n              s.name === name2\n            ) {\n              let remove = si;\n              if (yi === si || seriesNameArrayStyle) {\n                if (!seriesNameArrayStyle || unassignedSeriesIndices.indexOf(si) > -1) {\n                  axisSeriesMap[yi].push([yi, si]);\n                } else {\n                  console.warn(\n                    \"Series '\" + /** @type {any} */\n                    s.name + \"' referenced more than once in what looks like the new style. That is, when using either seriesName: [], or when there are more series than yaxes.\"\n                  );\n                }\n              } else {\n                axisSeriesMap[si].push([si, yi]);\n                remove = yi;\n              }\n              assigned = true;\n              remove = unassignedSeriesIndices.indexOf(remove);\n              if (remove !== -1) {\n                unassignedSeriesIndices.splice(remove, 1);\n              }\n            }\n          });\n        });\n      }\n      if (!assigned) {\n        unassignedYAxisIndices.push(yi);\n      }\n    });\n    axisSeriesMap = axisSeriesMap.map((yaxe) => {\n      const ra = [];\n      yaxe.forEach((sa) => {\n        seriesYAxisReverseMap[sa[1]] = sa[0];\n        ra.push(sa[1]);\n      });\n      return ra;\n    });\n    let lastUnassignedYAxis = cnf.yaxis.length - 1;\n    for (let i = 0; i < unassignedYAxisIndices.length; i++) {\n      lastUnassignedYAxis = unassignedYAxisIndices[i];\n      axisSeriesMap[lastUnassignedYAxis] = [];\n      if (unassignedSeriesIndices) {\n        const si = unassignedSeriesIndices[0];\n        unassignedSeriesIndices.shift();\n        axisSeriesMap[lastUnassignedYAxis].push(si);\n        seriesYAxisReverseMap[si] = lastUnassignedYAxis;\n      } else {\n        break;\n      }\n    }\n    unassignedSeriesIndices.forEach((i) => {\n      axisSeriesMap[lastUnassignedYAxis].push(i);\n      seriesYAxisReverseMap[i] = lastUnassignedYAxis;\n    });\n    gl.seriesYAxisMap = axisSeriesMap.map((x) => x);\n    gl.seriesYAxisReverseMap = seriesYAxisReverseMap.map((x) => x);\n    gl.seriesYAxisMap.forEach((axisSeries, ai) => {\n      axisSeries.forEach((si) => {\n        if (\n          /** @type {any} */\n          cnf.series[si] && /** @type {any} */\n          cnf.series[si].group === void 0\n        ) {\n          const _series = (\n            /** @type {any} */\n            cnf.series[si]\n          );\n          _series.group = \"apexcharts-axis-\".concat(ai.toString());\n        }\n      });\n    });\n  }\n  /**\n   * @param {number | null} [index]\n   */\n  isSeriesNull(index = null) {\n    let r = [];\n    const series = (\n      /** @type {any[]} */\n      this.w.config.series\n    );\n    if (index === null) {\n      r = series.filter((d) => d !== null);\n    } else if (series[index] && Array.isArray(series[index].data)) {\n      r = series[index].data.filter((d) => d !== null);\n    } else {\n      r = series[index] !== null && series[index] !== void 0 ? [series[index]] : [];\n    }\n    return r.length === 0;\n  }\n  /**\n   * @param {number} index\n   */\n  seriesHaveSameValues(index) {\n    const seriesAtIndex = this.w.seriesData.series[index];\n    if (!Array.isArray(seriesAtIndex)) {\n      return true;\n    }\n    return seriesAtIndex.every(\n      (val, i, arr) => val === arr[0]\n    );\n  }\n  /**\n   * @param {any[]} labels\n   */\n  getCategoryLabels(labels) {\n    const w = this.w;\n    let catLabels = labels.slice();\n    if (w.config.xaxis.convertedCatToNumeric) {\n      catLabels = labels.map((i) => {\n        return w.config.xaxis.labels.formatter(i - w.globals.minX + 1);\n      });\n    }\n    return catLabels;\n  }\n  // maxValsInArrayIndex is the index of series[] which has the largest number of items\n  getLargestSeries() {\n    const w = this.w;\n    w.globals.maxValsInArrayIndex = w.seriesData.series.map((a) => a.length).indexOf(\n      Math.max.apply(\n        Math,\n        /**\n         * @param {number[]} a\n         */\n        w.seriesData.series.map((a) => a.length)\n      )\n    );\n  }\n  getLargestMarkerSize() {\n    const w = this.w;\n    let size = 0;\n    w.globals.markers.size.forEach((m) => {\n      size = Math.max(size, m);\n    });\n    if (w.config.markers.discrete && w.config.markers.discrete.length) {\n      w.config.markers.discrete.forEach((m) => {\n        size = Math.max(size, m.size);\n      });\n    }\n    if (size > 0) {\n      if (w.config.markers.hover.size > 0) {\n        size = w.config.markers.hover.size;\n      } else {\n        size += w.config.markers.hover.sizeOffset;\n      }\n    }\n    w.globals.markers.largestSize = size;\n    return size;\n  }\n  /**\n   * @memberof Core\n   * returns the sum of all values in a series\n   * Eg. w.seriesData.series = [[32,33,43,12], [2,3,5,1]]\n   *  @return [120, 11]\n   **/\n  getSeriesTotals() {\n    const w = this.w;\n    w.globals.seriesTotals = w.seriesData.series.map((ser) => {\n      let total = 0;\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          total += ser[j];\n        }\n      } else {\n        total += ser;\n      }\n      return total;\n    });\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  getSeriesTotalsXRange(minX, maxX) {\n    const w = this.w;\n    const seriesTotalsXRange = w.seriesData.series.map((ser, index) => {\n      let total = 0;\n      for (let j = 0; j < ser.length; j++) {\n        if (w.seriesData.seriesX[index][j] > minX && w.seriesData.seriesX[index][j] < maxX) {\n          total += ser[j];\n        }\n      }\n      return total;\n    });\n    return seriesTotalsXRange;\n  }\n  /**\n   * @memberof CoreUtils\n   * returns the percentage value of all individual values which can be used in a 100% stacked series\n   * Eg. w.seriesData.series = [[32, 33, 43, 12], [2, 3, 5, 1]]\n   *  @return [[94.11, 91.66, 89.58, 92.30], [5.88, 8.33, 10.41, 7.7]]\n   **/\n  getPercentSeries() {\n    const w = this.w;\n    w.globals.seriesPercent = w.seriesData.series.map((ser) => {\n      const seriesPercent = [];\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          const total = w.seriesData.stackedSeriesTotals[j];\n          let percent = 0;\n          if (total) {\n            percent = 100 * ser[j] / total;\n          }\n          seriesPercent.push(percent);\n        }\n      } else {\n        const total = w.globals.seriesTotals.reduce((acc, val) => acc + val, 0);\n        const percent = 100 * ser / total;\n        seriesPercent.push(percent);\n      }\n      return seriesPercent;\n    });\n  }\n  getCalculatedRatios() {\n    const w = this.w;\n    const gl = w.globals;\n    const yRatio = [];\n    let invertedYRatio = 0;\n    let xRatio = 0;\n    let invertedXRatio = 0;\n    let zRatio = 0;\n    let baseLineY = [];\n    let baseLineInvertedY = 0.1;\n    let baseLineX = 0;\n    gl.yRange = [];\n    if (gl.isMultipleYAxis) {\n      for (let i = 0; i < gl.minYArr.length; i++) {\n        gl.yRange.push(Math.abs(gl.minYArr[i] - gl.maxYArr[i]));\n        baseLineY.push(0);\n      }\n    } else {\n      gl.yRange.push(Math.abs(gl.minY - gl.maxY));\n    }\n    gl.xRange = Math.abs(gl.maxX - gl.minX);\n    gl.zRange = Math.abs(gl.maxZ - gl.minZ);\n    for (let i = 0; i < gl.yRange.length; i++) {\n      yRatio.push(gl.yRange[i] / this.w.layout.gridHeight);\n    }\n    xRatio = gl.xRange / this.w.layout.gridWidth;\n    invertedYRatio = /** @type {any} */\n    gl.yRange / this.w.layout.gridWidth;\n    invertedXRatio = gl.xRange / this.w.layout.gridHeight;\n    zRatio = gl.zRange / this.w.layout.gridHeight * 16;\n    if (!zRatio) {\n      zRatio = 1;\n    }\n    if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n      const _hasNegsGl = (\n        /** @type {any} */\n        gl\n      );\n      _hasNegsGl.hasNegs = true;\n    }\n    if (w.globals.seriesYAxisReverseMap.length > 0) {\n      const scaleBaseLineYScale = (y, i) => {\n        const yAxis = w.config.yaxis[w.globals.seriesYAxisReverseMap[i]];\n        const sign = y < 0 ? -1 : 1;\n        y = Math.abs(y);\n        if (yAxis.logarithmic) {\n          y = this.getBaseLog(yAxis.logBase, y);\n        }\n        return -sign * y / yRatio[i];\n      };\n      if (gl.isMultipleYAxis) {\n        baseLineY = [];\n        for (let i = 0; i < yRatio.length; i++) {\n          baseLineY.push(scaleBaseLineYScale(gl.minYArr[i], i));\n        }\n      } else {\n        baseLineY = [];\n        baseLineY.push(scaleBaseLineYScale(gl.minY, 0));\n        if (gl.minY !== Number.MIN_VALUE && Math.abs(gl.minY) !== 0) {\n          baseLineInvertedY = -gl.minY / invertedYRatio;\n          baseLineX = gl.minX / xRatio;\n        }\n      }\n    } else {\n      baseLineY = [];\n      baseLineY.push(0);\n      baseLineInvertedY = 0;\n      baseLineX = 0;\n    }\n    return {\n      yRatio,\n      invertedYRatio,\n      zRatio,\n      xRatio,\n      invertedXRatio,\n      baseLineInvertedY,\n      baseLineY,\n      baseLineX\n    };\n  }\n  /**\n   * @param {any[]} series\n   */\n  getLogSeries(series) {\n    const w = this.w;\n    w.globals.seriesLog = series.map((s, i) => {\n      const yAxisIndex = w.globals.seriesYAxisReverseMap[i];\n      if (w.config.yaxis[yAxisIndex] && w.config.yaxis[yAxisIndex].logarithmic) {\n        return s.map((d) => {\n          if (d === null) return null;\n          return this.getLogVal(w.config.yaxis[yAxisIndex].logBase, d, i);\n        });\n      } else {\n        return s;\n      }\n    });\n    return w.globals.invalidLogScale ? series : w.globals.seriesLog;\n  }\n  /**\n   * @param {number} val\n   * @param {number} seriesIndex\n   * @returns {number}\n   */\n  getLogValAtSeriesIndex(val, seriesIndex) {\n    if (val === null) return (\n      /** @type {any} */\n      null\n    );\n    const w = this.w;\n    const yAxisIndex = w.globals.seriesYAxisReverseMap[seriesIndex];\n    if (w.config.yaxis[yAxisIndex] && w.config.yaxis[yAxisIndex].logarithmic) {\n      return this.getLogVal(\n        w.config.yaxis[yAxisIndex].logBase,\n        val,\n        seriesIndex\n      );\n    }\n    return val;\n  }\n  /**\n   * @param {number} base\n   * @param {number} value\n   */\n  getBaseLog(base, value) {\n    return Math.log(value) / Math.log(base);\n  }\n  /**\n   * @param {number} b\n   * @param {number} d\n   * @param {number} seriesIndex\n   */\n  getLogVal(b, d, seriesIndex) {\n    if (d <= 0) {\n      return 0;\n    }\n    const w = this.w;\n    const min_log_val = w.globals.minYArr[seriesIndex] === 0 ? -1 : this.getBaseLog(b, w.globals.minYArr[seriesIndex]);\n    const max_log_val = w.globals.maxYArr[seriesIndex] === 0 ? 0 : this.getBaseLog(b, w.globals.maxYArr[seriesIndex]);\n    const number_of_height_levels = max_log_val - min_log_val;\n    if (d < 1) return d / number_of_height_levels;\n    const log_height_value = this.getBaseLog(b, d) - min_log_val;\n    return log_height_value / number_of_height_levels;\n  }\n  /**\n   * @param {number[]} yRatio\n   */\n  getLogYRatios(yRatio) {\n    const w = this.w;\n    const gl = this.w.globals;\n    const _gl = (\n      /** @type {any} */\n      gl\n    );\n    _gl.yLogRatio = yRatio.slice();\n    _gl.logYRange = /** @type {any[]} */\n    gl.yRange.map(\n      (_, i) => {\n        const yAxisIndex = w.globals.seriesYAxisReverseMap[i];\n        if (w.config.yaxis[yAxisIndex] && this.w.config.yaxis[yAxisIndex].logarithmic) {\n          let maxY = -Number.MAX_VALUE;\n          let minY = Number.MIN_VALUE;\n          let range = 1;\n          gl.seriesLog.forEach(\n            (s, si) => {\n              s.forEach((v) => {\n                if (w.config.yaxis[si] && w.config.yaxis[si].logarithmic) {\n                  maxY = Math.max(v, maxY);\n                  minY = Math.min(v, minY);\n                }\n              });\n            }\n          );\n          range = Math.pow(gl.yRange[i], Math.abs(minY - maxY) / gl.yRange[i]);\n          _gl.yLogRatio[i] = range / this.w.layout.gridHeight;\n          return range;\n        }\n      }\n    );\n    return _gl.invalidLogScale ? yRatio.slice() : _gl.yLogRatio;\n  }\n  // Some config objects can be array - and we need to extend them correctly\n  /**\n   * @param {any} configInstance\n   * @param {Record<string, any>} options\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  static extendArrayProps(configInstance, options2, w) {\n    var _a, _b;\n    if (options2 == null ? void 0 : options2.yaxis) {\n      options2 = configInstance.extendYAxis(options2, w);\n    }\n    if (options2 == null ? void 0 : options2.annotations) {\n      if (options2.annotations.yaxis) {\n        options2 = configInstance.extendYAxisAnnotations(options2);\n      }\n      if ((_a = options2 == null ? void 0 : options2.annotations) == null ? void 0 : _a.xaxis) {\n        options2 = configInstance.extendXAxisAnnotations(options2);\n      }\n      if ((_b = options2 == null ? void 0 : options2.annotations) == null ? void 0 : _b.points) {\n        options2 = configInstance.extendPointAnnotations(options2);\n      }\n    }\n    return options2;\n  }\n  // Series of the same group and type can be stacked together distinct from\n  // other series of the same type on the same axis.\n  /**\n   * @param {Record<string, any>} typeSeries\n   * @param {string[]} typeGroups\n   * @param {string} type\n   * @param {string} chartClass\n   */\n  drawSeriesByGroup(typeSeries, typeGroups, type, chartClass) {\n    const w = this.w;\n    const graph = [];\n    if (typeSeries.series.length > 0) {\n      typeGroups.forEach((gn) => {\n        const gs = [];\n        const gi = [];\n        typeSeries.i.forEach((i, ii) => {\n          if (\n            /** @type {Record<string,any>} */\n            w.config.series[i].group === gn\n          ) {\n            gs.push(typeSeries.series[ii]);\n            gi.push(i);\n          }\n        });\n        gs.length > 0 && graph.push(\n          /** @type {any} */\n          chartClass.draw(gs, type, gi)\n        );\n      });\n    }\n    return graph;\n  }\n}\nconst SVGNS$1 = \"http://www.w3.org/2000/svg\";\nfunction easeOutCubic(t) {\n  return 1 - Math.pow(1 - t, 3);\n}\nfunction easeOutBack(t) {\n  const c1 = 1.70158;\n  const c3 = c1 + 1;\n  return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n}\nlet _reducedMotionMql = null;\nfunction prefersReducedMotion() {\n  if (!Environment.isBrowser()) return false;\n  try {\n    if (!_reducedMotionMql) {\n      _reducedMotionMql = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\n    }\n    return !!_reducedMotionMql.matches;\n  } catch (_) {\n    return false;\n  }\n}\nfunction applyProgressiveReveal(el, x, w) {\n  if (!Environment.isBrowser()) return false;\n  if (w.globals.dataChanged || w.globals.resized) return false;\n  const animCfg = w.config.chart.animations;\n  if (!animCfg || animCfg.enabled === false) return false;\n  const chartType = w.config.chart.type;\n  if (chartType !== \"line\" && chartType !== \"area\" && chartType !== \"rangeArea\") {\n    return false;\n  }\n  if (!(w.layout.gridWidth > 0)) return false;\n  const drawSpeed = (animCfg.speed || 800) * 2;\n  const xRatio = Math.max(0, Math.min(1, x / w.layout.gridWidth));\n  const easedT = 1 - Math.cbrt(1 - xRatio);\n  const revealDelay = easedT * drawSpeed;\n  const node = el.node;\n  const style = node.style;\n  style.opacity = \"0\";\n  let startAnchor = null;\n  const tick = (now) => {\n    if (startAnchor === null) startAnchor = now;\n    if (now - startAnchor >= revealDelay) {\n      style.opacity = \"\";\n    } else {\n      BrowserAPIs.requestAnimationFrame(tick);\n    }\n  };\n  BrowserAPIs.requestAnimationFrame(tick);\n  return true;\n}\nfunction applyAnimationPolicy(w) {\n  const anim = w.config.chart.animations;\n  if (!anim) return;\n  if (anim.respectReducedMotion !== false && prefersReducedMotion()) {\n    anim.enabled = false;\n    if (anim.dynamicAnimation) anim.dynamicAnimation.enabled = false;\n  }\n}\nfunction computeStagger(opts) {\n  const style = opts.style;\n  const index = opts.index || 0;\n  const baseDelay = typeof opts.baseDelay === \"number\" ? opts.baseDelay : 40;\n  const row = opts.row || 0;\n  const col = opts.col || 0;\n  const groupIndex = opts.groupIndex || 0;\n  const perGroup = opts.perGroup || 1;\n  const centerDistance = opts.centerDistance || 0;\n  switch (style) {\n    case \"none\":\n      return 0;\n    case \"diagonal\":\n      return (row + col) * baseDelay;\n    case \"group\":\n      return groupIndex * baseDelay + index % perGroup * (baseDelay / 4);\n    case \"centroid\":\n      return centerDistance * baseDelay * (index + 1);\n    case \"sequential\":\n    default:\n      return index * baseDelay;\n  }\n}\nclass Animations {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} [ctx]\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} from\n   * @param {Record<string, any>} to\n   * @param {object} speed\n   */\n  animateLine(el, from, to, speed) {\n    el.attr(from).animate(speed).attr(to);\n  }\n  /*\n   ** Animate radius of a circle element\n   * @param {any} el\n   * @param {number} speed\n   * @param {string} easing\n   * @param {Function} cb\n   */\n  /** @param {any} el @param {any} speed @param {any} easing @param {any} cb */\n  animateMarker(el, speed, easing, cb) {\n    el.attr({\n      opacity: 0\n    }).animate(speed).attr({\n      opacity: 1\n    }).after(() => {\n      cb();\n    });\n  }\n  /**\n   * Scale-up \"pop\" effect for scatter/bubble markers. Animates\n   * `transform: scale(0 → 1)` (with `easeOutBack` overshoot) plus opacity,\n   * around the marker's own center via `transform-box: fill-box`.\n   *\n   * Falls back to instant render in SSR / when shouldAnimate is false.\n   *\n   * @param {any} el\n   * @param {{ speed: number, delay?: number, onComplete?: () => void }} params\n   */\n  animatePop(el, { speed, delay = 0, onComplete }) {\n    const w = this.w;\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate || speed < 1) {\n      if (onComplete) onComplete();\n      return;\n    }\n    const node = el.node;\n    const style = node.style;\n    style.transformBox = \"fill-box\";\n    style.transformOrigin = \"center\";\n    style.transform = \"scale(0)\";\n    style.opacity = \"0\";\n    const startAt = performance.now() + delay;\n    const step = (now) => {\n      const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n      style.transform = `scale(${easeOutBack(t)})`;\n      style.opacity = String(Math.min(1, t * 2));\n      if (t < 1) {\n        BrowserAPIs.requestAnimationFrame(step);\n      } else {\n        style.transform = \"\";\n        style.transformOrigin = \"\";\n        style.transformBox = \"\";\n        style.opacity = \"\";\n        if (onComplete) onComplete();\n      }\n    };\n    BrowserAPIs.requestAnimationFrame(step);\n  }\n  /*\n   ** Animate rect properties\n   * @param {any} el\n   * @param {any} from\n   * @param {any} to\n   * @param {number} speed\n   * @param {Function} fn\n   */\n  /** @param {any} el @param {any} from @param {any} to @param {any} speed @param {any} fn @param {number} [delay] */\n  animateRect(el, from, to, speed, fn, delay = 0) {\n    el.attr(from).animate(speed, delay).attr(to).after(() => fn());\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  animatePathsGradually(params) {\n    const { el, realIndex, j, fill, pathFrom, pathTo, speed, delay } = params;\n    const me = this;\n    const w = this.w;\n    let delayFactor = 0;\n    if (w.config.chart.animations.animateGradually.enabled) {\n      delayFactor = w.config.chart.animations.animateGradually.delay;\n    }\n    if (w.config.chart.animations.dynamicAnimation.enabled && w.globals.dataChanged && w.config.chart.type !== \"bar\") {\n      delayFactor = 0;\n    }\n    me.morphSVG(\n      el,\n      realIndex,\n      j,\n      w.config.chart.type === \"line\" && !w.globals.comboCharts ? \"stroke\" : fill,\n      pathFrom,\n      pathTo,\n      speed,\n      delay * delayFactor\n    );\n  }\n  /**\n   * Opacity-fade reveal (see Graphics.renderPaths `revealViaFade`): hide this\n   * path immediately, then reveal the whole series in a single CSS opacity fade\n   * once the synchronous draw pass has finished. Used for two cases that both\n   * want to avoid per-path morphs: the large-dataset bulk render (>\n   * largeDatasetThreshold) and candlestick/boxPlot data-change updates (where an\n   * index-based morph would slide candles around on zoom). Every faded path is\n   * pushed to delayedElements, but only the first one schedules the reveal — a\n   * lone requestAnimationFrame fires after all paths are in the DOM, so N paths\n   * cost one frame callback instead of N morph timelines. The guard flag is\n   * reset inside the callback (and in initGlobalVars) so subsequent renders\n   * re-arm it.\n   * @param {any} el\n   */\n  revealBulk(el) {\n    const w = this.w;\n    el.node.classList.add(\"apexcharts-element-hidden\");\n    w.globals.delayedElements.push({ el: el.node });\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate) {\n      this.animationCompleted(el);\n      return;\n    }\n    if (!w.globals.bulkRevealScheduled) {\n      w.globals.bulkRevealScheduled = true;\n      BrowserAPIs.requestAnimationFrame(() => {\n        if (w.globals.isDestroyed) return;\n        w.globals.bulkRevealScheduled = false;\n        this.animationCompleted(el);\n      });\n    }\n  }\n  showDelayedElements() {\n    this.w.globals.delayedElements.forEach((d) => {\n      const ele = d.el;\n      ele.classList.remove(\"apexcharts-element-hidden\");\n      ele.classList.add(\"apexcharts-hidden-element-shown\");\n    });\n  }\n  /**\n   * @param {any} el\n   */\n  animationCompleted(el) {\n    const w = this.w;\n    if (w.globals.animationEnded) return;\n    w.globals.animationEnded = true;\n    this.showDelayedElements();\n    if (typeof w.config.chart.events.animationEnd === \"function\") {\n      w.config.chart.events.animationEnd(this.ctx, { el, w });\n    }\n  }\n  /**\n   * Initial-mount \"pen-stroke\" draw effect for line / area / rangeArea paths.\n   *\n   * Stroke paths animate `stroke-dashoffset` from total length → 0.\n   * Fill paths animate the width of a per-series SVG `<mask>` rect from 0 → gridWidth,\n   * which coexists with the existing `clip-path: gridRectMask` (mask + clip-path\n   * are independent SVG attributes).\n   *\n   * For radar / radial shapes, pass `mask: { type: 'radial', cx, cy, r }` to\n   * use a circular mask that blooms from center outward instead of the default\n   * left-to-right rect wipe.\n   *\n   * @param {any} el            - SVG.js path element\n   * @param {{realIndex: number, j?: number, isFill: boolean, isLast: boolean, speed: number, delay: number, mask?: {type: 'rect'|'radial', cx?: number, cy?: number, r?: number}}} params\n   */\n  animateDraw(el, { realIndex, j, isFill, isLast, speed, delay, mask: maskShape }) {\n    const w = this.w;\n    const me = this;\n    const finalize = () => {\n      if (isLast && w.globals.shouldAnimate) {\n        me.animationCompleted(el);\n      }\n      me.showDelayedElements();\n    };\n    if (!Environment.isBrowser() || !w.globals.shouldAnimate || speed < 1) {\n      finalize();\n      return;\n    }\n    const node = el.node;\n    const runMaskReveal = () => {\n      const pad = 4;\n      const isRadial = maskShape && maskShape.type === \"radial\";\n      const targetWidth = w.layout.gridWidth + pad * 2;\n      const radialCx = maskShape && maskShape.cx || 0;\n      const radialCy = maskShape && maskShape.cy || 0;\n      const targetRadius = (maskShape && maskShape.r || w.layout.gridWidth / 2) + pad;\n      const maskId = `apexDrawMask${w.globals.cuid}-${realIndex}-${j != null ? j : 0}-${isFill ? \"f\" : \"s\"}`;\n      const mask = BrowserAPIs.createElementNS(SVGNS$1, \"mask\");\n      mask.setAttribute(\"id\", maskId);\n      mask.setAttribute(\"maskUnits\", \"userSpaceOnUse\");\n      let revealEl;\n      if (isRadial) {\n        const region = targetRadius;\n        mask.setAttribute(\"x\", String(radialCx - region));\n        mask.setAttribute(\"y\", String(radialCy - region));\n        mask.setAttribute(\"width\", String(region * 2));\n        mask.setAttribute(\"height\", String(region * 2));\n        revealEl = BrowserAPIs.createElementNS(SVGNS$1, \"circle\");\n        revealEl.setAttribute(\"cx\", String(radialCx));\n        revealEl.setAttribute(\"cy\", String(radialCy));\n        revealEl.setAttribute(\"r\", \"0\");\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      } else {\n        mask.setAttribute(\"x\", String(-pad));\n        mask.setAttribute(\"y\", String(-pad));\n        mask.setAttribute(\"width\", String(targetWidth));\n        mask.setAttribute(\"height\", String(w.layout.gridHeight + pad * 2));\n        revealEl = BrowserAPIs.createElementNS(SVGNS$1, \"rect\");\n        revealEl.setAttribute(\"x\", String(-pad));\n        revealEl.setAttribute(\"y\", String(-pad));\n        revealEl.setAttribute(\"width\", \"0\");\n        revealEl.setAttribute(\"height\", String(w.layout.gridHeight + pad * 2));\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      }\n      mask.appendChild(revealEl);\n      w.dom.elDefs.node.appendChild(mask);\n      node.setAttribute(\"mask\", `url(#${maskId})`);\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w.globals.isDestroyed) return;\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const eased = easeOutCubic(t);\n        if (isRadial) {\n          revealEl.setAttribute(\"r\", String(eased * targetRadius));\n        } else {\n          revealEl.setAttribute(\"width\", String(eased * targetWidth));\n        }\n        if (t < 1) {\n          BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          node.removeAttribute(\"mask\");\n          if (mask.parentNode) mask.parentNode.removeChild(mask);\n          finalize();\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    };\n    const runStrokeDraw = (len) => {\n      node.setAttribute(\"stroke-dasharray\", String(len));\n      node.setAttribute(\"stroke-dashoffset\", String(len));\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w.globals.isDestroyed) return;\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        node.setAttribute(\"stroke-dashoffset\", String(len * (1 - easeOutCubic(t))));\n        if (t < 1) {\n          BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          node.removeAttribute(\"stroke-dasharray\");\n          node.removeAttribute(\"stroke-dashoffset\");\n          finalize();\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    };\n    BrowserAPIs.requestAnimationFrame(() => {\n      if (w.globals.isDestroyed) return;\n      if (isFill) {\n        runMaskReveal();\n        return;\n      }\n      const existingDash = node.getAttribute(\"stroke-dasharray\");\n      const hasCustomDash = !!existingDash && existingDash !== \"0\" && existingDash !== \"\";\n      if (hasCustomDash) {\n        runMaskReveal();\n        return;\n      }\n      let len = 0;\n      try {\n        if (typeof node.getTotalLength === \"function\") {\n          len = node.getTotalLength();\n        }\n      } catch (_) {\n        len = 0;\n      }\n      if (!len) {\n        finalize();\n        return;\n      }\n      runStrokeDraw(len);\n    });\n  }\n  // SVG.js animation for morphing one path to another\n  /**\n   * @param {any} el\n   * @param {number} realIndex\n   * @param {number} j\n   * @param {string} fill\n   * @param {string} pathFrom\n   * @param {string} pathTo\n   * @param {number} speed\n   * @param {number} delay\n   */\n  morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay) {\n    var _a, _b;\n    const w = this.w;\n    if (!pathFrom) {\n      pathFrom = el.attr(\"pathFrom\");\n    }\n    if (!pathTo) {\n      pathTo = el.attr(\"pathTo\");\n    }\n    const disableAnimationForCorrupPath = () => {\n      if (w.config.chart.type === \"radar\") {\n        speed = 1;\n      }\n      return `M 0 ${w.layout.gridHeight}`;\n    };\n    if (!pathFrom || pathFrom.indexOf(\"undefined\") > -1 || pathFrom.indexOf(\"NaN\") > -1) {\n      pathFrom = disableAnimationForCorrupPath();\n    }\n    if (!pathTo.trim() || pathTo.indexOf(\"undefined\") > -1 || pathTo.indexOf(\"NaN\") > -1) {\n      pathTo = disableAnimationForCorrupPath();\n    }\n    if (!w.globals.shouldAnimate) {\n      speed = 1;\n    }\n    const crossTypeMorph = ((_b = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.isActive()) === true;\n    const morphAlgo = crossTypeMorph ? \"polygons\" : \"commands\";\n    el.plot(pathFrom).animate(1, delay).plot(pathFrom).animate(speed, delay).plot(pathTo, morphAlgo).after(() => {\n      if (Utils$1.isNumber(j)) {\n        if (j === w.seriesData.series[w.globals.maxValsInArrayIndex].length - 2 && w.globals.shouldAnimate) {\n          this.animationCompleted(el);\n        }\n      } else if (fill !== \"none\" && w.globals.shouldAnimate) {\n        if (!w.globals.comboCharts && realIndex === w.seriesData.series.length - 1 || w.globals.comboCharts) {\n          this.animationCompleted(el);\n        }\n      }\n      this.showDelayedElements();\n    });\n  }\n}\nclass Filters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  // create a re-usable filter which can be appended other filter effects and applied to multiple elements\n  /**\n   * @param {any} el\n   * @param {number} i\n   */\n  getDefaultFilter(el, i) {\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (w.config.chart.dropShadow.enabled) {\n      this.dropShadow(el, w.config.chart.dropShadow, i);\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {number} i\n   * @param {string} filterType\n   */\n  applyFilter(el, i, filterType) {\n    var _a, _b, _c;\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (filterType === \"none\") {\n      this.getDefaultFilter(el, i);\n      return;\n    }\n    const shadowAttr = w.config.chart.dropShadow;\n    const brightnessFactor = filterType === \"lighten\" ? 2 : 0.3;\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        add.colorMatrix({\n          type: \"matrix\",\n          values: `\n            ${brightnessFactor} 0 0 0 0\n            0 ${brightnessFactor} 0 0 0\n            0 0 ${brightnessFactor} 0 0\n            0 0 0 1 0\n          `,\n          in: \"SourceGraphic\",\n          result: \"brightness\"\n        });\n        if (shadowAttr.enabled) {\n          this.addShadow(add, i, shadowAttr, \"brightness\");\n        }\n      });\n      if (!shadowAttr.noUserSpaceOnUse) {\n        (_b = (_a = el.filterer()) == null ? void 0 : _a.node) == null ? void 0 : _b.setAttribute(\"filterUnits\", \"userSpaceOnUse\");\n      }\n      this._scaleFilterSize((_c = el.filterer()) == null ? void 0 : _c.node);\n    }\n  }\n  // appends dropShadow to the filter object which can be chained with other filter effects\n  /**\n   * @param {any} add\n   * @param {number} i\n   * @param {Record<string, any>} attrs\n   * @param {string} source\n   */\n  addShadow(add, i, attrs, source) {\n    var _a;\n    const w = this.w;\n    let { blur, top, left, color, opacity } = attrs;\n    color = Array.isArray(color) ? color[i] : color;\n    if (((_a = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (w.config.chart.dropShadow.enabledOnSeries.indexOf(i) === -1) {\n        return add;\n      }\n    }\n    add.offset({\n      in: source,\n      dx: left,\n      dy: top,\n      result: \"offset\"\n    });\n    add.gaussianBlur({\n      in: \"offset\",\n      stdDeviation: blur,\n      result: \"blur\"\n    });\n    add.flood({\n      \"flood-color\": color,\n      \"flood-opacity\": opacity,\n      result: \"flood\"\n    });\n    add.composite({\n      in: \"flood\",\n      in2: \"blur\",\n      operator: \"in\",\n      result: \"shadow\"\n    });\n    add.merge([\"shadow\", source]);\n  }\n  // directly adds dropShadow to the element and returns the same element.\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} attrs\n   */\n  dropShadow(el, attrs, i = 0) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (Utils$1.isMsEdge() && w.config.chart.type === \"radialBar\") {\n      return el;\n    }\n    if (((_a = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (((_b = w.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _b.indexOf(i)) === -1) {\n        return el;\n      }\n    }\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        this.addShadow(add, i, attrs, \"SourceGraphic\");\n      });\n      if (!attrs.noUserSpaceOnUse) {\n        (_d = (_c = el.filterer()) == null ? void 0 : _c.node) == null ? void 0 : _d.setAttribute(\"filterUnits\", \"userSpaceOnUse\");\n      }\n      this._scaleFilterSize((_e = el.filterer()) == null ? void 0 : _e.node);\n    }\n    return el;\n  }\n  /**\n   * @param {any} el\n   * @param {number} realIndex\n   * @param {number} dataPointIndex\n   */\n  setSelectionFilter(el, realIndex, dataPointIndex) {\n    const w = this.w;\n    if (typeof w.interact.selectedDataPoints[realIndex] !== \"undefined\") {\n      if (w.interact.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) {\n        el.node.setAttribute(\"selected\", true);\n        const activeFilter = w.config.states.active.filter;\n        if (activeFilter !== \"none\") {\n          this.applyFilter(el, realIndex, activeFilter.type);\n        }\n      }\n    }\n  }\n  /**\n   * @param {any} el\n   */\n  _scaleFilterSize(el) {\n    if (!el) return;\n    const setAttributes = (attrs) => {\n      for (const key in attrs) {\n        if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n          el.setAttribute(key, attrs[key]);\n        }\n      }\n    };\n    setAttributes({\n      width: \"200%\",\n      height: \"200%\",\n      x: \"-50%\",\n      y: \"-50%\"\n    });\n  }\n}\nclass Graphics {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w, ctx = null) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /*****************************************************************************\n   *                                                                            *\n   *  SVG Path Rounding Function                                                *\n   *  Copyright (C) 2014 Yona Appletree                                         *\n   *                                                                            *\n   *  Licensed under the Apache License, Version 2.0 (the \"License\");           *\n   *  you may not use this file except in compliance with the License.          *\n   *  You may obtain a copy of the License at                                   *\n   *                                                                            *\n   *      http://www.apache.org/licenses/LICENSE-2.0                            *\n   *                                                                            *\n   *  Unless required by applicable law or agreed to in writing, software       *\n   *  distributed under the License is distributed on an \"AS IS\" BASIS,         *\n   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *\n   *  See the License for the specific language governing permissions and       *\n   *  limitations under the License.                                            *\n   *                                                                            *\n   *****************************************************************************/\n  /**\n   * SVG Path rounding function. Takes an input path string and outputs a path\n   * string where all line-line corners have been rounded. Only supports absolute\n   * commands at the moment.\n   *\n   * @param pathString The SVG input path\n   * @param radius The amount to round the corners, either a value in the SVG\n   *               coordinate space, or, if useFractionalRadius is true, a value\n   *               from 0 to 1.\n   * @returns A new SVG path string with the rounding\n   * @param {string} pathString\n   * @param {number} radius\n   */\n  roundPathCorners(pathString, radius) {\n    if (pathString.indexOf(\"NaN\") > -1) pathString = \"\";\n    function moveTowardsLength(movingPoint, targetPoint, amount) {\n      var width = targetPoint.x - movingPoint.x;\n      var height = targetPoint.y - movingPoint.y;\n      var distance = Math.sqrt(width * width + height * height);\n      return moveTowardsFractional(\n        movingPoint,\n        targetPoint,\n        Math.min(1, amount / distance)\n      );\n    }\n    function moveTowardsFractional(movingPoint, targetPoint, fraction) {\n      return {\n        x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n        y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction\n      };\n    }\n    function adjustCommand(cmd, newPoint) {\n      if (cmd.length > 2) {\n        cmd[cmd.length - 2] = newPoint.x;\n        cmd[cmd.length - 1] = newPoint.y;\n      }\n    }\n    function pointForCommand(cmd) {\n      return {\n        x: parseFloat(cmd[cmd.length - 2]),\n        y: parseFloat(cmd[cmd.length - 1])\n      };\n    }\n    var pathParts = pathString.split(/[,\\s]/).reduce(function(parts, part) {\n      var match = part.match(/^([a-zA-Z])(.+)/);\n      if (match) {\n        parts.push(match[1]);\n        parts.push(match[2]);\n      } else {\n        parts.push(part);\n      }\n      return parts;\n    }, []);\n    var commands = pathParts.reduce(function(commands2, part) {\n      if (parseFloat(part) == part && commands2.length) {\n        commands2[commands2.length - 1].push(part);\n      } else {\n        commands2.push([part]);\n      }\n      return commands2;\n    }, []);\n    var resultCommands = [];\n    if (commands.length > 1) {\n      var startPoint = pointForCommand(commands[0]);\n      var virtualCloseLine = null;\n      if (commands[commands.length - 1][0] == \"Z\" && commands[0].length > 2) {\n        virtualCloseLine = [\"L\", startPoint.x, startPoint.y];\n        commands[commands.length - 1] = virtualCloseLine;\n      }\n      resultCommands.push(commands[0]);\n      for (var cmdIndex = 1; cmdIndex < commands.length; cmdIndex++) {\n        var prevCmd = resultCommands[resultCommands.length - 1];\n        var curCmd = commands[cmdIndex];\n        var nextCmd = curCmd == virtualCloseLine ? commands[1] : commands[cmdIndex + 1];\n        if (nextCmd && prevCmd && prevCmd.length > 2 && curCmd[0] == \"L\" && nextCmd.length > 2 && nextCmd[0] == \"L\") {\n          var prevPoint = pointForCommand(prevCmd);\n          var curPoint = pointForCommand(curCmd);\n          var nextPoint = pointForCommand(nextCmd);\n          var curveStart, curveEnd;\n          curveStart = moveTowardsLength(curPoint, prevPoint, radius);\n          curveEnd = moveTowardsLength(curPoint, nextPoint, radius);\n          adjustCommand(curCmd, curveStart);\n          curCmd.origPoint = curPoint;\n          resultCommands.push(curCmd);\n          var startControl = moveTowardsFractional(curveStart, curPoint, 0.5);\n          var endControl = moveTowardsFractional(curPoint, curveEnd, 0.5);\n          var curveCmd = [\n            \"C\",\n            startControl.x,\n            startControl.y,\n            endControl.x,\n            endControl.y,\n            curveEnd.x,\n            curveEnd.y\n          ];\n          curveCmd.origPoint = curPoint;\n          resultCommands.push(curveCmd);\n        } else {\n          resultCommands.push(curCmd);\n        }\n      }\n      if (virtualCloseLine) {\n        var newStartPoint = pointForCommand(\n          resultCommands[resultCommands.length - 1]\n        );\n        resultCommands.push([\"Z\"]);\n        adjustCommand(resultCommands[0], newStartPoint);\n      }\n    } else {\n      resultCommands = commands;\n    }\n    return resultCommands.reduce(function(str, c) {\n      return str + c.join(\" \") + \" \";\n    }, \"\");\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number | null} [strokeWidth]\n   */\n  drawLine(x1, y1, x2, y2, lineColor = \"#a8a8a8\", dashArray = 0, strokeWidth = null, strokeLineCap = \"butt\") {\n    const w = this.w;\n    const line = w.dom.Paper.line().attr({\n      x1,\n      y1,\n      x2,\n      y2,\n      stroke: lineColor,\n      \"stroke-dasharray\": dashArray,\n      \"stroke-width\": strokeWidth,\n      \"stroke-linecap\": strokeLineCap\n    });\n    return line;\n  }\n  /**\n   * @param {number | null} [strokeWidth]\n   * @param {string | null} [strokeColor]\n   */\n  drawRect(x1 = 0, y1 = 0, x2 = 0, y2 = 0, radius = 0, color = \"#fefefe\", opacity = 1, strokeWidth = null, strokeColor = null, strokeDashArray = 0) {\n    const w = this.w;\n    const rect = w.dom.Paper.rect();\n    rect.attr({\n      x: x1,\n      y: y1,\n      width: x2 > 0 ? x2 : 0,\n      height: y2 > 0 ? y2 : 0,\n      rx: radius,\n      ry: radius,\n      opacity,\n      \"stroke-width\": strokeWidth !== null ? strokeWidth : 0,\n      stroke: strokeColor !== null ? strokeColor : \"none\",\n      \"stroke-dasharray\": strokeDashArray\n    });\n    rect.node.setAttribute(\"fill\", color);\n    return rect;\n  }\n  /**\n   * @param {string} polygonString\n   */\n  drawPolygon(polygonString, stroke = \"#e1e1e1\", strokeWidth = 1, fill = \"none\") {\n    const w = this.w;\n    const polygon = w.dom.Paper.polygon(polygonString).attr({\n      fill,\n      stroke,\n      \"stroke-width\": strokeWidth\n    });\n    return polygon;\n  }\n  /**\n   * @param {number} radius\n   * @param {Record<string, any> | null} attrs\n   */\n  drawCircle(radius, attrs = null) {\n    const w = this.w;\n    if (radius < 0) radius = 0;\n    const c = w.dom.Paper.circle(radius * 2);\n    if (attrs !== null) {\n      c.attr(attrs);\n    }\n    return c;\n  }\n  /** @param {{ d?: string, stroke?: string, strokeWidth?: number, fill: any, fillOpacity?: number, strokeOpacity?: number, classes?: any, strokeLinecap?: any, strokeDashArray?: number }} opts */\n  drawPath({\n    d = \"\",\n    stroke = \"#a8a8a8\",\n    strokeWidth = 1,\n    fill,\n    fillOpacity = 1,\n    strokeOpacity = 1,\n    classes,\n    strokeLinecap = null,\n    strokeDashArray = 0\n  }) {\n    const w = this.w;\n    if (strokeLinecap === null) {\n      strokeLinecap = w.config.stroke.lineCap;\n    }\n    if (d.indexOf(\"undefined\") > -1 || d.indexOf(\"NaN\") > -1) {\n      d = `M 0 ${w.layout.gridHeight}`;\n    }\n    const p = w.dom.Paper.path(d).attr({\n      fill,\n      \"fill-opacity\": fillOpacity,\n      stroke,\n      \"stroke-opacity\": strokeOpacity,\n      \"stroke-linecap\": strokeLinecap,\n      \"stroke-width\": strokeWidth,\n      \"stroke-dasharray\": strokeDashArray,\n      class: classes\n    });\n    return p;\n  }\n  /**\n   * @param {Record<string, any> | null} attrs\n   */\n  group(attrs = null) {\n    const w = this.w;\n    const g = w.dom.Paper.group();\n    if (attrs !== null) {\n      g.attr(attrs);\n    }\n    return g;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  move(x, y) {\n    const move = [\"M\", x, y].join(\" \");\n    return move;\n  }\n  /**\n   * @param {number | null} x\n   * @param {number | null} y\n   * @param {string | null} hORv\n   * @returns {string}\n   */\n  line(x, y, hORv = null) {\n    if (hORv === \"H\") return [\" H\", x].join(\" \");\n    if (hORv === \"V\") return [\" V\", y].join(\" \");\n    return [\" L\", x, y].join(\" \");\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   * @param {number} x\n   * @param {number} y\n   */\n  curve(x1, y1, x2, y2, x, y) {\n    const curve = [\"C\", x1, y1, x2, y2, x, y].join(\" \");\n    return curve;\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x\n   * @param {number} y\n   */\n  quadraticCurve(x1, y1, x, y) {\n    const curve = [\"Q\", x1, y1, x, y].join(\" \");\n    return curve;\n  }\n  /**\n   * @param {number} rx\n   * @param {number} ry\n   * @param {number} axisRotation\n   * @param {number} largeArcFlag\n   * @param {number} sweepFlag\n   * @param {number} x\n   * @param {number} y\n   */\n  arc(rx, ry, axisRotation, largeArcFlag, sweepFlag, x, y, relative = false) {\n    let coord = \"A\";\n    if (relative) coord = \"a\";\n    const arc = [\n      coord,\n      rx,\n      ry,\n      axisRotation,\n      largeArcFlag,\n      sweepFlag,\n      x,\n      y\n    ].join(\" \");\n    return arc;\n  }\n  /**\n   * @memberof Graphics\n   * @param {Record<string, any>} opts\n   *  i = series's index\n   *  realIndex = realIndex is series's actual index when it was drawn time. After several redraws, the iterating \"i\" may change in loops, but realIndex doesn't\n   *  pathFrom = existing pathFrom to animateTo\n   *  pathTo = new Path to which d attr will be animated from pathFrom to pathTo\n   *  stroke = line Color\n   *  strokeWidth = width of path Line\n   *  fill = it can be gradient, single color, pattern or image\n   *  animationDelay = how much to delay when starting animation (in milliseconds)\n   *  dataChangeSpeed = for dynamic animations, when data changes\n   *  className = class attribute to add\n   * @return {any} svg.js path object\n   **/\n  renderPaths({\n    j,\n    realIndex,\n    pathFrom,\n    pathTo,\n    stroke,\n    strokeWidth,\n    strokeLinecap,\n    fill,\n    animationDelay,\n    initialSpeed,\n    dataChangeSpeed,\n    className,\n    chartType,\n    shouldClipToGrid = true,\n    bindEventsOnPaths = true,\n    drawShadow = true,\n    drawMask = null\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const anim = new Animations(this.w, (_a = this.ctx) != null ? _a : void 0);\n    const initialAnim = this.w.config.chart.animations.enabled;\n    const dynamicAnim = initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    if (pathFrom && pathFrom.startsWith(\"M 0 0 \") && pathTo) {\n      const moveCommand = pathTo.match(/^M\\s+[\\d.-]+\\s+[\\d.-]+/);\n      if (moveCommand) {\n        pathFrom = pathFrom.replace(/^M\\s+0\\s+0/, moveCommand[0]);\n      }\n    }\n    let d;\n    const shouldAnimate = !!(initialAnim && !w.globals.resized || dynamicAnim && w.globals.dataChanged && w.globals.shouldAnimate);\n    const isDrawableSeries = typeof className === \"string\" && (className.indexOf(\"apexcharts-line\") > -1 || className.indexOf(\"apexcharts-area\") > -1 || className.indexOf(\"apexcharts-rangeArea\") > -1 || className.indexOf(\"apexcharts-radar\") > -1);\n    const useDrawMode = !!(initialAnim && !w.globals.resized && !w.globals.dataChanged && isDrawableSeries);\n    const largeThreshold = (_b = w.config.chart.animations.largeDatasetThreshold) != null ? _b : 0;\n    const bulkRender = !!(shouldAnimate && !useDrawMode && largeThreshold > 0 && w.globals.dataPoints > largeThreshold);\n    const isCandleOrBox = chartType === \"candlestick\" || chartType === \"boxPlot\";\n    const fadeOnDataChange = !!(isCandleOrBox && shouldAnimate && !useDrawMode && w.globals.dataChanged);\n    const revealViaFade = bulkRender || fadeOnDataChange;\n    if (shouldAnimate && !useDrawMode && !revealViaFade) {\n      d = pathFrom;\n    } else {\n      d = pathTo;\n      if (!shouldAnimate) {\n        w.globals.animationEnded = true;\n      }\n    }\n    const strokeDashArrayOpt = w.config.stroke.dashArray;\n    let strokeDashArray = 0;\n    if (Array.isArray(strokeDashArrayOpt)) {\n      strokeDashArray = strokeDashArrayOpt[realIndex];\n    } else {\n      strokeDashArray = w.config.stroke.dashArray;\n    }\n    const el = this.drawPath({\n      d,\n      stroke,\n      strokeWidth,\n      fill,\n      fillOpacity: 1,\n      classes: className,\n      strokeLinecap,\n      strokeDashArray\n    });\n    el.attr(\"index\", realIndex);\n    if (shouldClipToGrid) {\n      if (chartType === \"bar\" && !w.globals.isBarHorizontal || w.globals.comboCharts) {\n        el.attr({\n          \"clip-path\": `url(#gridRectBarMask${w.globals.cuid})`\n        });\n      } else {\n        el.attr({\n          \"clip-path\": `url(#gridRectMask${w.globals.cuid})`\n        });\n      }\n    }\n    if (w.config.chart.dropShadow.enabled && drawShadow) {\n      filters.dropShadow(el, w.config.chart.dropShadow, realIndex);\n    }\n    if (bindEventsOnPaths) {\n      el.node.addEventListener(\"mouseenter\", this.pathMouseEnter.bind(this, el));\n      el.node.addEventListener(\"mouseleave\", this.pathMouseLeave.bind(this, el));\n      el.node.addEventListener(\"mousedown\", this.pathMouseDown.bind(this, el));\n    }\n    el.attr({\n      pathTo,\n      pathFrom\n    });\n    const defaultAnimateOpts = {\n      el,\n      j,\n      realIndex,\n      pathFrom,\n      pathTo,\n      fill,\n      strokeWidth,\n      delay: animationDelay\n    };\n    if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n      if (useDrawMode) {\n        const drawSpeed = initialSpeed * 2;\n        const isFill = stroke === \"none\" || strokeWidth === 0;\n        const seriesCount = w.seriesData.series.length;\n        const isLast = w.globals.comboCharts ? true : realIndex === seriesCount - 1;\n        anim.animateDraw(el, {\n          realIndex,\n          j,\n          isFill,\n          isLast,\n          speed: drawSpeed,\n          delay: 0,\n          mask: drawMask\n        });\n      } else if (!revealViaFade) {\n        anim.animatePathsGradually(__spreadProps(__spreadValues({}, defaultAnimateOpts), {\n          speed: initialSpeed\n        }));\n      }\n    } else {\n      if ((w.globals.resized || !w.globals.dataChanged) && !revealViaFade) {\n        anim.showDelayedElements();\n      }\n    }\n    if (w.globals.dataChanged && dynamicAnim && shouldAnimate && !revealViaFade) {\n      anim.animatePathsGradually(__spreadProps(__spreadValues({}, defaultAnimateOpts), {\n        speed: dataChangeSpeed\n      }));\n    }\n    if (revealViaFade) {\n      anim.revealBulk(el);\n    }\n    return el;\n  }\n  /**\n   * @param {string} style\n   * @param {number} width\n   * @param {number} height\n   */\n  drawPattern(style, width, height, stroke = \"#a8a8a8\", strokeWidth = 0) {\n    const w = this.w;\n    const p = w.dom.Paper.pattern(width, height, (add) => {\n      if (style === \"horizontalLines\") {\n        add.line(0, 0, height, 0).stroke({ color: stroke, width: strokeWidth + 1 });\n      } else if (style === \"verticalLines\") {\n        add.line(0, 0, 0, width).stroke({ color: stroke, width: strokeWidth + 1 });\n      } else if (style === \"slantedLines\") {\n        add.line(0, 0, width, height).stroke({ color: stroke, width: strokeWidth });\n      } else if (style === \"squares\") {\n        add.rect(width, height).fill(\"none\").stroke({ color: stroke, width: strokeWidth });\n      } else if (style === \"circles\") {\n        add.circle(width).fill(\"none\").stroke({ color: stroke, width: strokeWidth });\n      }\n    });\n    return p;\n  }\n  /**\n   * @param {string} style\n   * @param {string} gfrom\n   * @param {string} gto\n   * @param {number} opacityFrom\n   * @param {number} opacityTo\n   * @param {number | null} [size]\n   * @param {number[] | null} stops\n   * @param {any[]} colorStops\n   */\n  drawGradient(style, gfrom, gto, opacityFrom, opacityTo, size = null, stops = null, colorStops = [], i = 0) {\n    const w = this.w;\n    let g;\n    if (gfrom.length < 9 && gfrom.indexOf(\"#\") === 0) {\n      gfrom = Utils$1.hexToRgba(gfrom, opacityFrom);\n    }\n    if (gto.length < 9 && gto.indexOf(\"#\") === 0) {\n      gto = Utils$1.hexToRgba(gto, opacityTo);\n    }\n    let stop1 = 0;\n    let stop2 = 1;\n    let stop3 = 1;\n    let stop4 = null;\n    if (stops !== null) {\n      stop1 = typeof stops[0] !== \"undefined\" ? stops[0] / 100 : 0;\n      stop2 = typeof stops[1] !== \"undefined\" ? stops[1] / 100 : 1;\n      stop3 = typeof stops[2] !== \"undefined\" ? stops[2] / 100 : 1;\n      stop4 = typeof stops[3] !== \"undefined\" ? stops[3] / 100 : null;\n    }\n    const radial = !!(w.config.chart.type === \"donut\" || w.config.chart.type === \"pie\" || w.config.chart.type === \"polarArea\" || w.config.chart.type === \"bubble\");\n    if (!colorStops || colorStops.length === 0) {\n      g = w.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          add.stop(stop1, gfrom, opacityFrom);\n          add.stop(stop2, gto, opacityTo);\n          add.stop(stop3, gto, opacityTo);\n          if (stop4 !== null) {\n            add.stop(stop4, gfrom, opacityFrom);\n          }\n        }\n      );\n    } else {\n      g = w.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          const gradientStops = Array.isArray(colorStops[i]) ? colorStops[i] : colorStops;\n          gradientStops.forEach((s) => {\n            add.stop(s.offset / 100, s.color, s.opacity);\n          });\n        }\n      );\n    }\n    if (!radial) {\n      if (style === \"vertical\") {\n        g.from(0, 0).to(0, 1);\n      } else if (style === \"diagonal\") {\n        g.from(0, 0).to(1, 1);\n      } else if (style === \"horizontal\") {\n        g.from(0, 1).to(1, 1);\n      } else if (style === \"diagonal2\") {\n        g.from(1, 0).to(0, 1);\n      }\n    } else {\n      const offx = w.layout.gridWidth / 2;\n      const offy = w.layout.gridHeight / 2;\n      if (w.config.chart.type !== \"bubble\") {\n        g.attr({\n          gradientUnits: \"userSpaceOnUse\",\n          cx: offx,\n          cy: offy,\n          r: size\n        });\n      } else {\n        g.attr({\n          cx: 0.5,\n          cy: 0.5,\n          r: 0.8,\n          fx: 0.2,\n          fy: 0.2\n        });\n      }\n    }\n    return g;\n  }\n  /** @param {{ text: any, maxWidth: any, fontSize: any, fontFamily?: any }} opts */\n  getTextBasedOnMaxWidth({ text, maxWidth, fontSize, fontFamily }) {\n    const tRects = this.getTextRects(text, fontSize, fontFamily, \"\");\n    const wordWidth = tRects.width / text.length;\n    const wordsBasedOnWidth = Math.floor(maxWidth / wordWidth);\n    if (maxWidth < tRects.width) {\n      return text.slice(0, wordsBasedOnWidth - 3) + \"...\";\n    }\n    return text;\n  }\n  /**\n   * @param {{ x: any, y: any, text: any, textAnchor?: any, fontSize?: any, fontFamily?: any, fontWeight?: any, foreColor?: any, opacity?: any, maxWidth?: any, cssClass?: string, isPlainText?: boolean, dominantBaseline?: string }} opts\n   */\n  drawText({\n    x,\n    y,\n    text,\n    textAnchor,\n    fontSize,\n    fontFamily,\n    fontWeight,\n    foreColor,\n    opacity,\n    maxWidth,\n    cssClass = \"\",\n    isPlainText = true,\n    dominantBaseline = \"auto\"\n  }) {\n    const w = this.w;\n    if (typeof text === \"undefined\") text = \"\";\n    let truncatedText = text;\n    if (!textAnchor) {\n      textAnchor = \"start\";\n    }\n    if (!foreColor || !foreColor.length) {\n      foreColor = w.config.chart.foreColor;\n    }\n    fontFamily = fontFamily || w.config.chart.fontFamily;\n    fontSize = fontSize || \"11px\";\n    fontWeight = fontWeight || \"regular\";\n    const commonProps = {\n      maxWidth,\n      fontSize,\n      fontFamily\n    };\n    let elText;\n    if (Array.isArray(text)) {\n      elText = w.dom.Paper.text((add) => {\n        for (let i = 0; i < text.length; i++) {\n          truncatedText = text[i];\n          if (maxWidth) {\n            truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n              text: text[i]\n            }, commonProps));\n          }\n          i === 0 ? add.tspan(truncatedText) : add.tspan(truncatedText).newLine();\n        }\n      });\n    } else {\n      if (maxWidth) {\n        truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n          text\n        }, commonProps));\n      }\n      elText = isPlainText ? w.dom.Paper.plain(text) : (\n        /**\n         * @param {any} add\n         */\n        w.dom.Paper.text((add) => add.tspan(truncatedText))\n      );\n    }\n    elText.attr({\n      x,\n      y,\n      \"text-anchor\": textAnchor,\n      \"dominant-baseline\": dominantBaseline,\n      \"font-size\": fontSize,\n      \"font-family\": fontFamily,\n      \"font-weight\": fontWeight,\n      fill: foreColor,\n      class: \"apexcharts-text \" + cssClass\n    });\n    elText.node.style.fontFamily = fontFamily;\n    elText.node.style.opacity = opacity;\n    return elText;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {string} type\n   * @param {number} size\n   */\n  getMarkerPath(x, y, type, size) {\n    let d = \"\";\n    switch (type) {\n      case \"cross\":\n        size = size / 1.4;\n        d = `M ${x - size} ${y - size} L ${x + size} ${y + size}  M ${x - size} ${y + size} L ${x + size} ${y - size}`;\n        break;\n      case \"plus\":\n        size = size / 1.12;\n        d = `M ${x - size} ${y} L ${x + size} ${y}  M ${x} ${y - size} L ${x} ${y + size}`;\n        break;\n      case \"star\":\n      case \"sparkle\": {\n        let points = 5;\n        size = size * 1.15;\n        if (type === \"sparkle\") {\n          size = size / 1.1;\n          points = 4;\n        }\n        const step = Math.PI / points;\n        for (let i = 0; i <= 2 * points; i++) {\n          const angle = i * step;\n          const radius = i % 2 === 0 ? size : size / 2;\n          const xPos = x + radius * Math.sin(angle);\n          const yPos = y - radius * Math.cos(angle);\n          d += (i === 0 ? \"M\" : \"L\") + xPos + \",\" + yPos;\n        }\n        d += \"Z\";\n        break;\n      }\n      case \"triangle\":\n        d = `M ${x} ${y - size} \n             L ${x + size} ${y + size} \n             L ${x - size} ${y + size} \n             Z`;\n        break;\n      case \"square\":\n      case \"rect\":\n        size = size / 1.125;\n        d = `M ${x - size} ${y - size} \n           L ${x + size} ${y - size} \n           L ${x + size} ${y + size} \n           L ${x - size} ${y + size} \n           Z`;\n        break;\n      case \"diamond\":\n        size = size * 1.05;\n        d = `M ${x} ${y - size} \n             L ${x + size} ${y} \n             L ${x} ${y + size} \n             L ${x - size} ${y} \n            Z`;\n        break;\n      case \"line\":\n        size = size / 1.1;\n        d = `M ${x - size} ${y} \n           L ${x + size} ${y}`;\n        break;\n      case \"circle\":\n      default:\n        size = size * 2;\n        d = `M ${x}, ${y} \n           m -${size / 2}, 0 \n           a ${size / 2},${size / 2} 0 1,0 ${size},0 \n           a ${size / 2},${size / 2} 0 1,0 -${size},0`;\n        break;\n    }\n    return d;\n  }\n  /**\n   * @param {number} x - The x-coordinate of the marker\n   * @param {number} y - The y-coordinate of the marker\n   * @param {string} type - Marker shape type\n   * @param {number} size - The size of the marker\n   * @param {Record<string, any>} opts - The options for the marker\n   * @returns {any} The created marker.\n   */\n  drawMarkerShape(x, y, type, size, opts) {\n    const path = this.drawPath({\n      d: this.getMarkerPath(x, y, type, size),\n      stroke: opts.pointStrokeColor,\n      strokeDashArray: opts.pointStrokeDashArray,\n      strokeWidth: opts.pointStrokeWidth,\n      fill: opts.pointFillColor,\n      fillOpacity: opts.pointFillOpacity,\n      strokeOpacity: opts.pointStrokeOpacity\n    });\n    path.attr({\n      cx: x,\n      cy: y,\n      shape: opts.shape,\n      class: opts.class ? opts.class : \"\"\n    });\n    return path;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {Record<string, any>} opts\n   */\n  drawMarker(x, y, opts) {\n    x = x || 0;\n    let size = opts.pSize || 0;\n    if (!Utils$1.isNumber(y)) {\n      size = 0;\n      y = 0;\n    }\n    return this.drawMarkerShape(x, y, opts == null ? void 0 : opts.shape, size, __spreadValues(__spreadValues({}, opts), opts.shape === \"line\" || opts.shape === \"plus\" || opts.shape === \"cross\" ? {\n      pointStrokeColor: opts.pointFillColor,\n      pointStrokeOpacity: opts.pointFillOpacity\n    } : {}));\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseEnter(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    if (typeof w.config.chart.events.dataPointMouseEnter === \"function\") {\n      w.config.chart.events.dataPointMouseEnter(e, this.ctx, {\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    Graphics._fireEvent(w, \"dataPointMouseEnter\", [\n      e,\n      this.ctx,\n      { seriesIndex: i, dataPointIndex: j, w }\n    ]);\n    if (w.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (w.config.states.hover.filter.type !== \"none\") {\n      if (!w.interact.isTouchDevice) {\n        const hoverFilter = w.config.states.hover.filter;\n        filters.applyFilter(path, i, hoverFilter.type);\n      }\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseLeave(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    if (typeof w.config.chart.events.dataPointMouseLeave === \"function\") {\n      w.config.chart.events.dataPointMouseLeave(e, this.ctx, {\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    Graphics._fireEvent(w, \"dataPointMouseLeave\", [\n      e,\n      this.ctx,\n      { seriesIndex: i, dataPointIndex: j, w }\n    ]);\n    if (w.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (w.config.states.hover.filter.type !== \"none\") {\n      filters.getDefaultFilter(path, i);\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} e\n   */\n  pathMouseDown(path, e) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const i = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i) || isNaN(j)) return;\n    let selected = \"false\";\n    if (path.node.getAttribute(\"selected\") === \"true\") {\n      path.node.setAttribute(\"selected\", \"false\");\n      const index = w.interact.selectedDataPoints[i].indexOf(j);\n      if (index > -1) {\n        w.interact.selectedDataPoints[i].splice(index, 1);\n      }\n    } else {\n      if (!w.config.states.active.allowMultipleDataPointsSelection && w.interact.selectedDataPoints.length > 0) {\n        w.interact.selectedDataPoints = [];\n        const elPaths = w.dom.Paper.find(\n          \".apexcharts-series path:not(.apexcharts-decoration-element)\"\n        );\n        const elCircles = w.dom.Paper.find(\n          \".apexcharts-series circle:not(.apexcharts-decoration-element), .apexcharts-series rect:not(.apexcharts-decoration-element)\"\n        );\n        const deSelect = (els) => {\n          Array.prototype.forEach.call(els, (el) => {\n            el.node.setAttribute(\"selected\", \"false\");\n            filters.getDefaultFilter(el, i);\n          });\n        };\n        deSelect(elPaths);\n        deSelect(elCircles);\n      }\n      path.node.setAttribute(\"selected\", \"true\");\n      selected = \"true\";\n      if (typeof w.interact.selectedDataPoints[i] === \"undefined\") {\n        w.interact.selectedDataPoints[i] = [];\n      }\n      w.interact.selectedDataPoints[i].push(j);\n    }\n    if (selected === \"true\") {\n      const activeFilter = w.config.states.active.filter;\n      if (activeFilter !== \"none\") {\n        filters.applyFilter(path, i, activeFilter.type);\n      } else {\n        if (w.config.states.hover.filter !== \"none\") {\n          if (!w.interact.isTouchDevice) {\n            const hoverFilter = w.config.states.hover.filter;\n            filters.applyFilter(path, i, hoverFilter.type);\n          }\n        }\n      }\n    } else {\n      if (w.config.states.active.filter.type !== \"none\") {\n        if (w.config.states.hover.filter.type !== \"none\" && !w.interact.isTouchDevice) {\n          const hoverFilter = w.config.states.hover.filter;\n          filters.applyFilter(path, i, hoverFilter.type);\n        } else {\n          filters.getDefaultFilter(path, i);\n        }\n      }\n    }\n    if (typeof w.config.chart.events.dataPointSelection === \"function\") {\n      w.config.chart.events.dataPointSelection(e, this.ctx, {\n        selectedDataPoints: w.interact.selectedDataPoints,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    if (e) {\n      Graphics._fireEvent(w, \"dataPointSelection\", [\n        e,\n        this.ctx,\n        {\n          selectedDataPoints: w.interact.selectedDataPoints,\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        }\n      ]);\n    }\n  }\n  /**\n   * @param {any} el\n   * @returns {{ x: number, y: number }}\n   */\n  rotateAroundCenter(el) {\n    let coord = (\n      /** @type {any} */\n      {}\n    );\n    if (el && typeof el.getBBox === \"function\") {\n      coord = el.getBBox();\n    }\n    const x = coord.x + coord.width / 2;\n    const y = coord.y + coord.height / 2;\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * Sets up event delegation on a parent group element.\n   * Uses mouseover/mouseout (which bubble) to simulate mouseenter/mouseleave\n   * on matching child elements, reducing per-element listener overhead.\n   * @param {any} parentGroup\n   * @param {string} targetSelector\n   */\n  setupEventDelegation(parentGroup, targetSelector) {\n    let currentHovered = null;\n    parentGroup.node.addEventListener(\"mouseover\", (e) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (!targetNode || targetNode === currentHovered) return;\n      if (currentHovered && /** @type {any} */\n      currentHovered.instance) {\n        this.pathMouseLeave(\n          /** @type {any} */\n          currentHovered.instance,\n          e\n        );\n      }\n      currentHovered = targetNode;\n      if (targetNode.instance) {\n        this.pathMouseEnter(targetNode.instance, e);\n      }\n    });\n    parentGroup.node.addEventListener(\"mouseout\", (e) => {\n      if (!currentHovered) return;\n      const relatedNode = e.relatedTarget ? Graphics._findDelegateTarget(\n        e.relatedTarget,\n        parentGroup.node,\n        targetSelector\n      ) : null;\n      if (relatedNode !== currentHovered) {\n        if (currentHovered && /** @type {any} */\n        currentHovered.instance) {\n          this.pathMouseLeave(\n            /** @type {any} */\n            currentHovered.instance,\n            e\n          );\n        }\n        currentHovered = null;\n      }\n    });\n    parentGroup.node.addEventListener(\"mousedown\", (e) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (targetNode && targetNode.instance) {\n        this.pathMouseDown(targetNode.instance, e);\n      }\n    });\n  }\n  // Fire a named event from w.globals.events without requiring a ctx reference.\n  // Mirrors Events.fireEvent() but reads the registry directly from w so that\n  // pathMouseEnter/Leave/Down work even when this.ctx is null (Graphics instances\n  // created without a ctx arg for drawing-only use cases).\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {string} name\n   * @param {any[]} args\n   */\n  static _fireEvent(w, name2, args) {\n    const evs = w.globals.events;\n    if (!evs || !Object.prototype.hasOwnProperty.call(evs, name2)) return;\n    const handlers = (\n      /** @type {Record<string,any>} */\n      evs[name2]\n    );\n    for (let i = 0; i < handlers.length; i++) {\n      handlers[i].apply(null, args);\n    }\n  }\n  /**\n   * @param {any} node\n   * @param {Record<string, any>} boundary\n   * @param {string} selector\n   */\n  static _findDelegateTarget(node, boundary, selector) {\n    while (node && node !== boundary && node !== document) {\n      if (node.matches && node.matches(selector)) return node;\n      node = node.parentNode;\n    }\n    return null;\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} attrs\n   */\n  static setAttrs(el, attrs) {\n    for (const key in attrs) {\n      if (Object.prototype.hasOwnProperty.call(attrs, key)) {\n        el.setAttribute(key, attrs[key]);\n      }\n    }\n  }\n  /**\n   * @param {string} text\n   * @param {string} fontSize\n   * @param {string | null | undefined} [fontFamily]\n   * @param {string} [transform]\n   * @returns {{ width: number, height: number }}\n   */\n  getTextRects(text, fontSize, fontFamily, transform, useBBox = true) {\n    const w = this.w;\n    const cacheKey = [text, fontSize, fontFamily, transform, useBBox].join(\"\\0\");\n    const cache = w.globals.textRectsCache;\n    if (cache && cache.has(cacheKey)) {\n      return (\n        /** @type {{ width: number, height: number }} */\n        cache.get(cacheKey)\n      );\n    }\n    const virtualText = this.drawText({\n      x: -200,\n      y: -200,\n      text,\n      textAnchor: \"start\",\n      fontSize,\n      fontFamily,\n      foreColor: \"#fff\",\n      opacity: 0\n    });\n    if (transform) {\n      virtualText.attr(\"transform\", transform);\n    }\n    w.dom.Paper.add(virtualText);\n    let rect = virtualText.bbox();\n    const bboxY = rect.y;\n    if (!useBBox) {\n      rect = virtualText.node.getBoundingClientRect();\n    }\n    virtualText.remove();\n    const result = {\n      width: rect.width,\n      height: rect.height,\n      // Offset from the text element's `y` (alphabetic baseline) to the\n      // bbox vertical center. For most fonts this is NEGATIVE (bbox center\n      // sits above the baseline because the ascender is taller than the\n      // descender). Use as: `text_y = desired_visual_center_y - centerOffset`.\n      // Only populated when useBBox=true (the default).\n      centerOffset: useBBox ? bboxY + rect.height / 2 - -200 : 0\n    };\n    if (cache) {\n      cache.set(cacheKey, result);\n    }\n    return result;\n  }\n  /**\n   * append ... to long text\n   * http://stackoverflow.com/questions/9241315/trimming-text-to-a-given-pixel-width-in-svg\n   * @memberof Graphics\n   * @param {Record<string, any>} textObj\n   * @param {string} textString\n   * @param {number} width\n   **/\n  placeTextWithEllipsis(textObj, textString, width) {\n    if (typeof textObj.getComputedTextLength !== \"function\") return;\n    textObj.textContent = textString;\n    if (textString.length > 0) {\n      if (textObj.getComputedTextLength() >= width / 1.1) {\n        for (let x = textString.length - 3; x > 0; x -= 3) {\n          if (textObj.getSubStringLength(0, x) <= width / 1.1) {\n            textObj.textContent = textString.substring(0, x) + \"...\";\n            return;\n          }\n        }\n        textObj.textContent = \".\";\n      }\n    }\n  }\n}\nconst SVGNS = \"http://www.w3.org/2000/svg\";\nclass Point {\n  /**\n   * @param {number|{x:number,y:number}} x\n   * @param {number} [y]\n   */\n  constructor(x, y) {\n    if (typeof x === \"object\") {\n      this.x = x.x;\n      this.y = x.y;\n    } else {\n      this.x = x || 0;\n      this.y = y || 0;\n    }\n  }\n  /**\n   * @param {Matrix} matrix\n   */\n  transform(matrix) {\n    return matrix.apply(this);\n  }\n  clone() {\n    return new Point(this.x, this.y);\n  }\n}\nclass Matrix {\n  /**\n   * Defaults to the identity matrix when called with no args.\n   * @param {number} [a]\n   * @param {number} [b]\n   * @param {number} [c]\n   * @param {number} [d]\n   * @param {number} [e]\n   * @param {number} [f]\n   */\n  constructor(a, b, c, d, e, f) {\n    this.a = a != null ? a : 1;\n    this.b = b != null ? b : 0;\n    this.c = c != null ? c : 0;\n    this.d = d != null ? d : 1;\n    this.e = e != null ? e : 0;\n    this.f = f != null ? f : 0;\n  }\n  /**\n   * @param {number} deg\n   */\n  rotate(deg) {\n    const rad = deg * Math.PI / 180;\n    const cos = Math.cos(rad);\n    const sin = Math.sin(rad);\n    return this.multiply(new Matrix(cos, sin, -sin, cos, 0, 0));\n  }\n  /**\n   * @param {number} sx\n   * @param {number} sy\n   */\n  scale(sx, sy) {\n    return this.multiply(new Matrix(sx, 0, 0, sy != null ? sy : sx, 0, 0));\n  }\n  /**\n   * @param {Matrix} m\n   */\n  multiply(m) {\n    return new Matrix(\n      this.a * m.a + this.c * m.b,\n      this.b * m.a + this.d * m.b,\n      this.a * m.c + this.c * m.d,\n      this.b * m.c + this.d * m.d,\n      this.a * m.e + this.c * m.f + this.e,\n      this.b * m.e + this.d * m.f + this.f\n    );\n  }\n  /**\n   * @param {Point} point\n   */\n  apply(point) {\n    return new Point(\n      this.a * point.x + this.c * point.y + this.e,\n      this.b * point.x + this.d * point.y + this.f\n    );\n  }\n}\nclass Box {\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} w\n   * @param {number} h\n   */\n  constructor(x, y, w, h) {\n    this.x = x;\n    this.y = y;\n    this.w = w;\n    this.h = h;\n    this.width = w;\n    this.height = h;\n    this.x2 = x + w;\n    this.y2 = y + h;\n  }\n}\nclass Fill {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.opts = null;\n    this.seriesIndex = 0;\n    this.patternIDs = [];\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  clippedImgArea(params) {\n    const w = this.w;\n    const cnf = w.config;\n    const svgW = parseInt(String(w.layout.gridWidth), 10);\n    const svgH = parseInt(String(w.layout.gridHeight), 10);\n    const size = svgW > svgH ? svgW : svgH;\n    const fillImg = params.image;\n    let imgWidth = 0;\n    let imgHeight = 0;\n    if (typeof params.width === \"undefined\" && typeof params.height === \"undefined\") {\n      if (cnf.fill.image.width !== void 0 && cnf.fill.image.height !== void 0) {\n        imgWidth = cnf.fill.image.width + 1;\n        imgHeight = cnf.fill.image.height;\n      } else {\n        imgWidth = size + 1;\n        imgHeight = size;\n      }\n    } else {\n      imgWidth = params.width;\n      imgHeight = params.height;\n    }\n    const elPattern = BrowserAPIs.createElementNS(SVGNS, \"pattern\");\n    Graphics.setAttrs(elPattern, {\n      id: params.patternID,\n      patternUnits: params.patternUnits ? params.patternUnits : \"userSpaceOnUse\",\n      width: imgWidth + \"px\",\n      height: imgHeight + \"px\"\n    });\n    const elImage = BrowserAPIs.createElementNS(SVGNS, \"image\");\n    elPattern.appendChild(elImage);\n    const SVGLib = Environment.isBrowser() ? (\n      /** @type {any} */\n      window.SVG\n    ) : (\n      /** @type {any} */\n      global.SVG\n    );\n    elImage.setAttributeNS(SVGLib.xlink, \"href\", fillImg);\n    Graphics.setAttrs(elImage, {\n      x: 0,\n      y: 0,\n      preserveAspectRatio: \"none\",\n      width: imgWidth + \"px\",\n      height: imgHeight + \"px\"\n    });\n    elImage.style.opacity = params.opacity;\n    w.dom.elDefs.node.appendChild(elPattern);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getSeriesIndex(opts) {\n    const w = this.w;\n    const cType = w.config.chart.type;\n    if ((cType === \"bar\" || cType === \"rangeBar\") && w.config.plotOptions.bar.distributed || cType === \"heatmap\" || cType === \"treemap\") {\n      this.seriesIndex = opts.seriesNumber;\n    } else {\n      this.seriesIndex = opts.seriesNumber % w.seriesData.series.length;\n    }\n    return this.seriesIndex;\n  }\n  /**\n   * @param {number[]} data\n   * @param {Record<string, any>} multiColorConfig\n   */\n  computeColorStops(data, multiColorConfig) {\n    const w = this.w;\n    let maxPositive = null;\n    let minNegative = null;\n    for (const value of data) {\n      if (value >= multiColorConfig.threshold) {\n        if (maxPositive === null || value > maxPositive) {\n          maxPositive = value;\n        }\n      } else {\n        if (minNegative === null || value < minNegative) {\n          minNegative = value;\n        }\n      }\n    }\n    if (maxPositive === null) {\n      maxPositive = multiColorConfig.threshold;\n    }\n    if (minNegative === null) {\n      minNegative = multiColorConfig.threshold;\n    }\n    let totalRange = maxPositive - multiColorConfig.threshold + (multiColorConfig.threshold - minNegative);\n    if (totalRange === 0) {\n      totalRange = 1;\n    }\n    const negativePercentage = (multiColorConfig.threshold - minNegative) / totalRange * 100;\n    let offset = 100 - negativePercentage;\n    offset = Math.max(0, Math.min(offset, 100));\n    return [\n      {\n        offset,\n        color: multiColorConfig.colorAboveThreshold,\n        opacity: w.config.fill.opacity\n      },\n      {\n        offset: 0,\n        color: multiColorConfig.colorBelowThreshold,\n        opacity: w.config.fill.opacity\n      }\n    ];\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  fillPath(opts) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    this.opts = opts;\n    const cnf = this.w.config;\n    let pathFill;\n    let patternFill, gradientFill;\n    this.seriesIndex = this.getSeriesIndex(opts);\n    const drawMultiColorLine = cnf.plotOptions.line.colors.colorAboveThreshold && cnf.plotOptions.line.colors.colorBelowThreshold;\n    const fillColors = this.getFillColors();\n    let fillColor = fillColors[this.seriesIndex];\n    if (w.seriesData.seriesColors[this.seriesIndex] !== void 0) {\n      fillColor = w.seriesData.seriesColors[this.seriesIndex];\n    }\n    if (typeof fillColor === \"function\") {\n      fillColor = fillColor({\n        seriesIndex: this.seriesIndex,\n        dataPointIndex: opts.dataPointIndex,\n        value: opts.value,\n        w\n      });\n    }\n    const fillType = opts.fillType ? opts.fillType : this.getFillType(this.seriesIndex);\n    let fillOpacity = Array.isArray(cnf.fill.opacity) ? cnf.fill.opacity[this.seriesIndex] : cnf.fill.opacity;\n    const useGradient = fillType === \"gradient\" || drawMultiColorLine;\n    if (opts.color) {\n      fillColor = opts.color;\n    }\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w.config.series[this.seriesIndex]\n    );\n    if ((_b = (_a = seriesItem == null ? void 0 : seriesItem.data) == null ? void 0 : _a[opts.dataPointIndex]) == null ? void 0 : _b.fillColor) {\n      fillColor = (_d = (_c = seriesItem == null ? void 0 : seriesItem.data) == null ? void 0 : _c[opts.dataPointIndex]) == null ? void 0 : _d.fillColor;\n    }\n    if (!fillColor) {\n      fillColor = \"#fff\";\n      console.warn(\"undefined color - ApexCharts\");\n    }\n    if (opts.opacity !== void 0 && opts.opacity !== null) fillOpacity = opts.opacity;\n    let defaultColor = fillColor;\n    if (Utils$1.isCSSVariable(fillColor)) {\n      defaultColor = Utils$1.applyOpacityToColor(fillColor, fillOpacity);\n    } else if (fillColor.indexOf(\"rgb\") === -1) {\n      if (fillColor.indexOf(\"#\") === -1) {\n        defaultColor = fillColor;\n      } else if (fillColor.length < 9) {\n        defaultColor = Utils$1.hexToRgba(fillColor, fillOpacity);\n      }\n    } else {\n      if (fillColor.indexOf(\"rgba\") > -1) {\n        fillOpacity = Utils$1.getOpacityFromRGBA(fillColor);\n      } else {\n        defaultColor = Utils$1.hexToRgba(Utils$1.rgb2hex(fillColor), fillOpacity);\n      }\n    }\n    const resolvedFillColor = Utils$1.isCSSVariable(fillColor) ? Utils$1.getThemeColor(fillColor) : fillColor;\n    if (fillType === \"pattern\") {\n      patternFill = this.handlePatternFill({\n        fillConfig: opts.fillConfig,\n        patternFill,\n        fillColor: resolvedFillColor,\n        defaultColor\n      });\n    }\n    if (useGradient) {\n      const colorStops = cnf.fill.gradient.colorStops ? [...cnf.fill.gradient.colorStops] : [];\n      let type = cnf.fill.gradient.type;\n      if (drawMultiColorLine) {\n        colorStops[this.seriesIndex] = this.computeColorStops(\n          w.seriesData.series[this.seriesIndex],\n          cnf.plotOptions.line.colors\n        );\n        type = \"vertical\";\n      }\n      gradientFill = this.handleGradientFill({\n        type,\n        fillConfig: opts.fillConfig,\n        fillColor: resolvedFillColor,\n        fillOpacity,\n        colorStops,\n        i: this.seriesIndex\n      });\n    }\n    if (fillType === \"image\") {\n      const imgSrc = cnf.fill.image.src;\n      const patternID = opts.patternID ? opts.patternID : \"\";\n      const patternKey = `pattern${w.globals.cuid}${opts.seriesNumber + 1}${patternID}`;\n      if (this.patternIDs.indexOf(patternKey) === -1) {\n        this.clippedImgArea({\n          opacity: fillOpacity,\n          image: Array.isArray(imgSrc) ? opts.seriesNumber < imgSrc.length ? imgSrc[opts.seriesNumber] : imgSrc[0] : imgSrc,\n          width: opts.width ? opts.width : void 0,\n          height: opts.height ? opts.height : void 0,\n          patternUnits: opts.patternUnits,\n          patternID: patternKey\n        });\n        this.patternIDs.push(patternKey);\n      }\n      pathFill = `url(#${patternKey})`;\n    } else if (useGradient) {\n      pathFill = gradientFill;\n    } else if (fillType === \"pattern\") {\n      pathFill = patternFill;\n    } else {\n      pathFill = defaultColor;\n    }\n    if (opts.solid) {\n      pathFill = defaultColor;\n    }\n    return pathFill;\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getFillType(seriesIndex) {\n    const w = this.w;\n    if (Array.isArray(w.config.fill.type)) {\n      return w.config.fill.type[seriesIndex];\n    } else {\n      return w.config.fill.type;\n    }\n  }\n  getFillColors() {\n    const w = this.w;\n    const cnf = w.config;\n    const opts = this.opts;\n    let fillColors = [];\n    if (w.globals.comboCharts) {\n      if (\n        /** @type {Record<string,any>} */\n        w.config.series[this.seriesIndex].type === \"line\"\n      ) {\n        if (Array.isArray(w.globals.stroke.colors)) {\n          fillColors = w.globals.stroke.colors;\n        } else {\n          fillColors.push(w.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w.globals.fill.colors)) {\n          fillColors = w.globals.fill.colors;\n        } else {\n          fillColors.push(w.globals.fill.colors);\n        }\n      }\n    } else {\n      if (cnf.chart.type === \"line\") {\n        if (Array.isArray(w.globals.stroke.colors)) {\n          fillColors = w.globals.stroke.colors;\n        } else {\n          fillColors.push(w.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w.globals.fill.colors)) {\n          fillColors = w.globals.fill.colors;\n        } else {\n          fillColors.push(w.globals.fill.colors);\n        }\n      }\n    }\n    if (typeof opts.fillColors !== \"undefined\") {\n      fillColors = [];\n      if (Array.isArray(opts.fillColors)) {\n        fillColors = opts.fillColors.slice();\n      } else {\n        fillColors.push(opts.fillColors);\n      }\n    }\n    return fillColors;\n  }\n  /** @param {{fillConfig: any, patternFill: any, fillColor: any, defaultColor: any}} opts */\n  handlePatternFill({ fillConfig, patternFill, fillColor, defaultColor }) {\n    let fillCnf = this.w.config.fill;\n    if (fillConfig) {\n      fillCnf = fillConfig;\n    }\n    const opts = this.opts;\n    const graphics = new Graphics(this.w);\n    const patternStrokeWidth = Array.isArray(fillCnf.pattern.strokeWidth) ? fillCnf.pattern.strokeWidth[this.seriesIndex] : fillCnf.pattern.strokeWidth;\n    const patternLineColor = fillColor;\n    if (Array.isArray(fillCnf.pattern.style)) {\n      if (typeof fillCnf.pattern.style[opts.seriesNumber] !== \"undefined\") {\n        const pf = graphics.drawPattern(\n          fillCnf.pattern.style[opts.seriesNumber],\n          fillCnf.pattern.width,\n          fillCnf.pattern.height,\n          patternLineColor,\n          patternStrokeWidth\n        );\n        patternFill = pf;\n      } else {\n        patternFill = defaultColor;\n      }\n    } else {\n      patternFill = graphics.drawPattern(\n        fillCnf.pattern.style,\n        fillCnf.pattern.width,\n        fillCnf.pattern.height,\n        patternLineColor,\n        patternStrokeWidth\n      );\n    }\n    return patternFill;\n  }\n  handleGradientFill({\n    type,\n    fillColor,\n    fillOpacity,\n    fillConfig,\n    colorStops,\n    i\n  }) {\n    let fillCnf = this.w.config.fill;\n    if (fillConfig) {\n      fillCnf = __spreadValues(__spreadValues({}, fillCnf), fillConfig);\n    }\n    const opts = this.opts;\n    const graphics = new Graphics(this.w);\n    const utils = new Utils$1();\n    type = type || fillCnf.gradient.type;\n    let gradientFrom = fillColor;\n    let gradientTo;\n    let opacityFrom = fillCnf.gradient.opacityFrom === void 0 ? fillOpacity : Array.isArray(fillCnf.gradient.opacityFrom) ? fillCnf.gradient.opacityFrom[i] : fillCnf.gradient.opacityFrom;\n    if (gradientFrom.indexOf(\"rgba\") > -1) {\n      opacityFrom = Utils$1.getOpacityFromRGBA(gradientFrom);\n    }\n    let opacityTo = fillCnf.gradient.opacityTo === void 0 ? fillOpacity : Array.isArray(fillCnf.gradient.opacityTo) ? fillCnf.gradient.opacityTo[i] : fillCnf.gradient.opacityTo;\n    if (fillCnf.gradient.gradientToColors === void 0 || fillCnf.gradient.gradientToColors.length === 0) {\n      if (fillCnf.gradient.shade === \"dark\") {\n        gradientTo = utils.shadeColor(\n          parseFloat(fillCnf.gradient.shadeIntensity) * -1,\n          fillColor.indexOf(\"rgb\") > -1 ? Utils$1.rgb2hex(fillColor) : fillColor\n        );\n      } else {\n        gradientTo = utils.shadeColor(\n          parseFloat(fillCnf.gradient.shadeIntensity),\n          fillColor.indexOf(\"rgb\") > -1 ? Utils$1.rgb2hex(fillColor) : fillColor\n        );\n      }\n    } else {\n      if (fillCnf.gradient.gradientToColors[opts.seriesNumber]) {\n        const gToColor = fillCnf.gradient.gradientToColors[opts.seriesNumber];\n        gradientTo = gToColor;\n        if (gToColor.indexOf(\"rgba\") > -1) {\n          opacityTo = Utils$1.getOpacityFromRGBA(gToColor);\n        }\n      } else {\n        gradientTo = fillColor;\n      }\n    }\n    if (fillCnf.gradient.gradientFrom) {\n      gradientFrom = fillCnf.gradient.gradientFrom;\n    }\n    if (fillCnf.gradient.gradientTo) {\n      gradientTo = fillCnf.gradient.gradientTo;\n    }\n    if (fillCnf.gradient.inverseColors) {\n      const t = gradientFrom;\n      gradientFrom = gradientTo;\n      gradientTo = t;\n    }\n    if (gradientFrom.indexOf(\"rgb\") > -1) {\n      gradientFrom = Utils$1.rgb2hex(gradientFrom);\n    }\n    if (gradientTo.indexOf(\"rgb\") > -1) {\n      gradientTo = Utils$1.rgb2hex(gradientTo);\n    }\n    return graphics.drawGradient(\n      type,\n      gradientFrom,\n      gradientTo,\n      opacityFrom,\n      opacityTo,\n      opts.size,\n      fillCnf.gradient.stops,\n      colorStops,\n      i\n    );\n  }\n}\nclass Markers {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._filters = new Filters(this.w);\n    this._graphics = new Graphics(this.w, this.ctx);\n  }\n  setGlobalMarkerSize() {\n    const w = this.w;\n    w.globals.markers.size = Array.isArray(w.config.markers.size) ? w.config.markers.size : [w.config.markers.size];\n    if (w.globals.markers.size.length > 0) {\n      if (w.globals.markers.size.length < w.seriesData.series.length + 1) {\n        for (let i = 0; i <= w.seriesData.series.length; i++) {\n          if (typeof w.globals.markers.size[i] === \"undefined\") {\n            w.globals.markers.size.push(w.globals.markers.size[0]);\n          }\n        }\n      }\n    } else {\n      w.globals.markers.size = w.config.series.map(\n        () => (\n          /** @type {number} */\n          w.config.markers.size\n        )\n      );\n    }\n  }\n  /** @param {{ pointsPos?: any, seriesIndex?: any, j?: any, pSize?: any, alwaysDrawMarker?: boolean, isVirtualPoint?: boolean }} opts */\n  plotChartMarkers({\n    pointsPos,\n    seriesIndex,\n    j,\n    pSize,\n    alwaysDrawMarker = false,\n    isVirtualPoint = false\n  }) {\n    const w = this.w;\n    const i = seriesIndex;\n    const p = pointsPos;\n    let elMarkersWrap = null;\n    const graphics = new Graphics(this.w);\n    const hasDiscreteMarkers = w.config.markers.discrete && w.config.markers.discrete.length;\n    if (Array.isArray(p.x)) {\n      for (let q = 0; q < p.x.length; q++) {\n        let markerElement;\n        let dataPointIndex = j;\n        let invalidMarker = !Utils$1.isNumber(p.y[q]);\n        if (w.globals.markers.largestSize === 0 && w.globals.hasNullValues && w.seriesData.series[i][j + 1] !== null && !isVirtualPoint) {\n          invalidMarker = true;\n        }\n        if (j === 1 && q === 0) dataPointIndex = 0;\n        if (j === 1 && q === 1) dataPointIndex = 1;\n        let markerClasses = \"apexcharts-marker\";\n        if ((w.config.chart.type === \"line\" || w.config.chart.type === \"area\") && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n          markerClasses += \" no-pointer-events\";\n        }\n        const shouldMarkerDraw = Array.isArray(w.config.markers.size) ? w.globals.markers.size[seriesIndex] > 0 : w.config.markers.size > 0;\n        if (shouldMarkerDraw || alwaysDrawMarker || hasDiscreteMarkers) {\n          if (!invalidMarker) {\n            markerClasses += ` w${Utils$1.randomId()}`;\n          }\n          const opts = this.getMarkerConfig({\n            cssClass: markerClasses,\n            seriesIndex,\n            dataPointIndex\n          });\n          const _si = (\n            /** @type {Record<string,any>} */\n            w.config.series[i]\n          );\n          if (_si.data[dataPointIndex]) {\n            if (_si.data[dataPointIndex].fillColor) {\n              opts.pointFillColor = _si.data[dataPointIndex].fillColor;\n            }\n            if (_si.data[dataPointIndex].strokeColor) {\n              opts.pointStrokeColor = _si.data[dataPointIndex].strokeColor;\n            }\n          }\n          if (typeof pSize !== \"undefined\") {\n            opts.pSize = pSize;\n          }\n          if (p.x[q] < -w.globals.markers.largestSize || p.x[q] > w.layout.gridWidth + w.globals.markers.largestSize || p.y[q] < -w.globals.markers.largestSize || p.y[q] > w.layout.gridHeight + w.globals.markers.largestSize) {\n            opts.pSize = 0;\n          }\n          if (!invalidMarker) {\n            const shouldCreateMarkerWrap = w.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker || hasDiscreteMarkers;\n            if (shouldCreateMarkerWrap && !elMarkersWrap) {\n              elMarkersWrap = graphics.group({\n                class: alwaysDrawMarker || hasDiscreteMarkers ? \"\" : \"apexcharts-series-markers\"\n              });\n              elMarkersWrap.attr(\n                \"clip-path\",\n                `url(#gridRectMarkerMask${w.globals.cuid})`\n              );\n              this.setupMarkerDelegation(elMarkersWrap);\n            }\n            markerElement = graphics.drawMarker(p.x[q], p.y[q], opts);\n            markerElement.attr(\"rel\", dataPointIndex);\n            markerElement.attr(\"j\", dataPointIndex);\n            markerElement.attr(\"index\", seriesIndex);\n            markerElement.node.setAttribute(\"default-marker-size\", opts.pSize);\n            applyProgressiveReveal(markerElement, p.x[q], w);\n            this._filters.setSelectionFilter(\n              markerElement,\n              seriesIndex,\n              dataPointIndex\n            );\n            if (elMarkersWrap) {\n              elMarkersWrap.add(markerElement);\n            }\n          }\n        } else {\n          if (typeof w.globals.pointsArray[seriesIndex] === \"undefined\")\n            w.globals.pointsArray[seriesIndex] = [];\n          w.globals.pointsArray[seriesIndex].push([p.x[q], p.y[q]]);\n        }\n      }\n    }\n    return elMarkersWrap;\n  }\n  /** @param {{cssClass: any, seriesIndex: any, dataPointIndex?: any, radius?: any, size?: any, strokeWidth?: any}} opts */\n  getMarkerConfig({\n    cssClass,\n    seriesIndex,\n    dataPointIndex = null,\n    radius = null,\n    size = null,\n    strokeWidth = null\n  }) {\n    const w = this.w;\n    const pStyle = this.getMarkerStyle(seriesIndex);\n    let pSize = size === null ? w.globals.markers.size[seriesIndex] : size;\n    const m = w.config.markers;\n    if (dataPointIndex !== null && m.discrete.length) {\n      m.discrete.map((marker) => {\n        if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) {\n          pStyle.pointStrokeColor = marker.strokeColor;\n          pStyle.pointFillColor = marker.fillColor;\n          pSize = marker.size;\n          pStyle.pointShape = marker.shape;\n        }\n      });\n    }\n    return {\n      pSize: radius === null ? pSize : radius,\n      pRadius: radius !== null ? radius : m.radius,\n      pointStrokeWidth: strokeWidth !== null ? strokeWidth : Array.isArray(m.strokeWidth) ? m.strokeWidth[seriesIndex] : m.strokeWidth,\n      pointStrokeColor: pStyle.pointStrokeColor,\n      pointFillColor: pStyle.pointFillColor,\n      shape: pStyle.pointShape || (Array.isArray(m.shape) ? m.shape[seriesIndex] : m.shape),\n      class: cssClass,\n      pointStrokeOpacity: Array.isArray(m.strokeOpacity) ? m.strokeOpacity[seriesIndex] : m.strokeOpacity,\n      pointStrokeDashArray: Array.isArray(m.strokeDashArray) ? m.strokeDashArray[seriesIndex] : m.strokeDashArray,\n      pointFillOpacity: Array.isArray(m.fillOpacity) ? m.fillOpacity[seriesIndex] : m.fillOpacity,\n      seriesIndex\n    };\n  }\n  /**\n   * @param {any} parentGroup\n   */\n  setupMarkerDelegation(parentGroup) {\n    const w = this.w;\n    const selector = \".apexcharts-marker\";\n    this._graphics.setupEventDelegation(parentGroup, selector);\n    parentGroup.node.addEventListener(\"click\", (e) => {\n      if (w.config.markers.onClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w.config.markers.onClick(e);\n      }\n    });\n    parentGroup.node.addEventListener(\"dblclick\", (e) => {\n      if (w.config.markers.onDblClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w.config.markers.onDblClick(e);\n      }\n    });\n    parentGroup.node.addEventListener(\n      \"touchstart\",\n      (e) => {\n        const targetNode = Graphics._findDelegateTarget(\n          e.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode && targetNode.instance) {\n          this._graphics.pathMouseDown(targetNode.instance, e);\n        }\n      },\n      { passive: true }\n    );\n  }\n  /**\n   * @param {any} marker\n   */\n  addEvents(marker) {\n    const w = this.w;\n    marker.node.addEventListener(\n      \"mouseenter\",\n      this._graphics.pathMouseEnter.bind(this.ctx, marker)\n    );\n    marker.node.addEventListener(\n      \"mouseleave\",\n      this._graphics.pathMouseLeave.bind(this.ctx, marker)\n    );\n    marker.node.addEventListener(\n      \"mousedown\",\n      this._graphics.pathMouseDown.bind(this.ctx, marker)\n    );\n    marker.node.addEventListener(\"click\", w.config.markers.onClick);\n    marker.node.addEventListener(\"dblclick\", w.config.markers.onDblClick);\n    marker.node.addEventListener(\n      \"touchstart\",\n      this._graphics.pathMouseDown.bind(this.ctx, marker),\n      { passive: true }\n    );\n  }\n  /**\n   * @returns {any}\n   * @param {number} seriesIndex\n   */\n  getMarkerStyle(seriesIndex) {\n    const w = this.w;\n    const colors = w.globals.markers.colors;\n    const strokeColors = w.config.markers.strokeColor || w.config.markers.strokeColors;\n    const pointStrokeColor = Array.isArray(strokeColors) ? strokeColors[seriesIndex] : strokeColors;\n    const pointFillColor = Array.isArray(colors) ? colors[seriesIndex] : colors;\n    return {\n      pointStrokeColor,\n      pointFillColor\n    };\n  }\n}\nclass Scatter {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.anim = new Animations(this.w);\n    this.filters = new Filters(this.w);\n    this.fill = new Fill(this.w);\n    this.markers = new Markers(this.w, this.ctx);\n    this.graphics = new Graphics(this.w);\n  }\n  /**\n   * @param {Element} elSeries\n   * @param {number} j\n   * @param {Record<string, any>} opts\n   */\n  draw(elSeries, j, opts) {\n    const w = this.w;\n    const graphics = this.graphics;\n    const realIndex = opts.realIndex;\n    const pointsPos = opts.pointsPos;\n    const zRatio = opts.zRatio;\n    const elPointsMain = opts.elParent;\n    const elPointsWrap = graphics.group({\n      class: `apexcharts-series-markers apexcharts-series-${w.config.chart.type}`\n    });\n    elPointsWrap.attr(\"clip-path\", `url(#gridRectMarkerMask${w.globals.cuid})`);\n    this.markers.setupMarkerDelegation(elPointsWrap);\n    if (Array.isArray(pointsPos.x)) {\n      for (let q = 0; q < pointsPos.x.length; q++) {\n        let dataPointIndex = j + 1;\n        let shouldDraw = true;\n        if (j === 0 && q === 0) dataPointIndex = 0;\n        if (j === 0 && q === 1) dataPointIndex = 1;\n        let radius = w.globals.markers.size[realIndex];\n        if (zRatio !== Infinity) {\n          const bubble = w.config.plotOptions.bubble;\n          radius = w.seriesData.seriesZ[realIndex][dataPointIndex];\n          if (bubble.zScaling) {\n            radius /= zRatio;\n          }\n          if (bubble.minBubbleRadius && radius < bubble.minBubbleRadius) {\n            radius = bubble.minBubbleRadius;\n          }\n          if (bubble.maxBubbleRadius && radius > bubble.maxBubbleRadius) {\n            radius = bubble.maxBubbleRadius;\n          }\n        }\n        const x = pointsPos.x[q];\n        const y = pointsPos.y[q];\n        radius = radius || 0;\n        if (y === null || typeof w.seriesData.series[realIndex][dataPointIndex] === \"undefined\") {\n          shouldDraw = false;\n        }\n        if (shouldDraw) {\n          const point = this.drawPoint(\n            x,\n            y,\n            radius,\n            realIndex,\n            dataPointIndex,\n            j\n          );\n          elPointsWrap.add(point);\n        }\n        elPointsMain.add(elPointsWrap);\n      }\n    }\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} radius\n   * @param {number} realIndex\n   * @param {number} dataPointIndex\n   * @param {number} j\n   */\n  drawPoint(x, y, radius, realIndex, dataPointIndex, j) {\n    var _a, _b;\n    const w = this.w;\n    const i = realIndex;\n    const anim = this.anim;\n    const filters = this.filters;\n    const fill = this.fill;\n    const markers = this.markers;\n    const graphics = this.graphics;\n    const markerConfig = markers.getMarkerConfig({\n      cssClass: \"apexcharts-marker\",\n      seriesIndex: i,\n      dataPointIndex,\n      radius: w.config.chart.type === \"bubble\" || w.globals.comboCharts && w.config.series[realIndex] && /** @type {Record<string,any>} */\n      w.config.series[realIndex].type === \"bubble\" ? radius : null\n    });\n    let pathFillCircle = fill.fillPath({\n      seriesNumber: realIndex,\n      dataPointIndex,\n      color: markerConfig.pointFillColor,\n      patternUnits: \"objectBoundingBox\",\n      value: w.seriesData.series[realIndex][j]\n    });\n    const el = graphics.drawMarker(x, y, markerConfig);\n    const _si = (\n      /** @type {Record<string,any>} */\n      w.config.series[i]\n    );\n    if (_si.data[dataPointIndex]) {\n      if (_si.data[dataPointIndex].fillColor) {\n        pathFillCircle = _si.data[dataPointIndex].fillColor;\n      }\n    }\n    const jt = (_a = w.config.plotOptions.scatter) == null ? void 0 : _a.jitter;\n    if ((jt == null ? void 0 : jt.enabled) && jt.distributed && w.globals.colors.length) {\n      const bandIdx = Math.round((_b = w.seriesData.seriesX[realIndex]) == null ? void 0 : _b[dataPointIndex]);\n      if (!isNaN(bandIdx)) {\n        pathFillCircle = w.globals.colors[bandIdx % w.globals.colors.length];\n      }\n    }\n    el.attr({\n      fill: pathFillCircle\n    });\n    if (w.config.chart.dropShadow.enabled) {\n      const dropShadow = w.config.chart.dropShadow;\n      filters.dropShadow(el, dropShadow, realIndex);\n    }\n    if (this.initialAnim && !w.globals.dataChanged && !w.globals.resized) {\n      const animCfg = w.config.chart.animations;\n      const popSpeed = animCfg.speed;\n      const totalPoints = w.globals.dataPoints || 1;\n      const gradCfg = animCfg.animateGradually;\n      const gradEnabled = gradCfg && gradCfg.enabled !== false;\n      const baseDelay = gradEnabled ? Math.min(20, popSpeed * 0.5 / Math.max(1, totalPoints)) : 0;\n      const delay = computeStagger({\n        style: baseDelay > 0 ? \"sequential\" : \"none\",\n        index: dataPointIndex,\n        baseDelay\n      });\n      anim.animatePop(el, {\n        speed: popSpeed,\n        delay,\n        onComplete: () => anim.animationCompleted(el)\n      });\n    } else {\n      w.globals.animationEnded = true;\n    }\n    el.attr({\n      rel: dataPointIndex,\n      j: dataPointIndex,\n      index: realIndex,\n      \"default-marker-size\": markerConfig.pSize\n    });\n    filters.setSelectionFilter(el, realIndex, dataPointIndex);\n    el.node.classList.add(\"apexcharts-marker\");\n    return el;\n  }\n  /**\n   * @param {number} y\n   */\n  centerTextInBubble(y) {\n    const w = this.w;\n    y = y + parseInt(w.config.dataLabels.style.fontSize, 10) / 4;\n    return {\n      y\n    };\n  }\n}\nclass DataLabels {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w, ctx = null) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  // When there are many datalabels to be printed, and some of them overlaps each other in the same series, this method will take care of that\n  // Also, when datalabels exceeds the drawable area and get clipped off, we need to adjust and move some pixels to make them visible again\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} val\n   * @param {number} i\n   * @param {number} dataPointIndex\n   * @param {boolean} alwaysDrawDataLabel\n   * @param {string} fontSize\n   */\n  dataLabelsCorrection(x, y, val, i, dataPointIndex, alwaysDrawDataLabel, fontSize) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let drawnextLabel = false;\n    const textRects = (\n      /** @type {any} */\n      graphics.getTextRects(val, fontSize)\n    );\n    const width = textRects.width;\n    const height = textRects.height;\n    if (y < 0) y = 0;\n    if (y > w.layout.gridHeight + height) y = w.layout.gridHeight + height / 2;\n    if (typeof /** @type {any} */\n    w.globals.dataLabelsRects[i] === \"undefined\") {\n      w.globals.dataLabelsRects[i] = [];\n    }\n    w.globals.dataLabelsRects[i].push({\n      x,\n      y,\n      width,\n      height\n    });\n    const len = (\n      /** @type {any} */\n      w.globals.dataLabelsRects[i].length - 2\n    );\n    const lastDrawnIndex = typeof w.globals.lastDrawnDataLabelsIndexes[i] !== \"undefined\" ? w.globals.lastDrawnDataLabelsIndexes[i][w.globals.lastDrawnDataLabelsIndexes[i].length - 1] : 0;\n    if (typeof /** @type {any} */\n    w.globals.dataLabelsRects[i][len] !== \"undefined\") {\n      const lastDataLabelRect = (\n        /** @type {any} */\n        w.globals.dataLabelsRects[i][lastDrawnIndex]\n      );\n      if (\n        // next label forward and x not intersecting\n        x > lastDataLabelRect.x + lastDataLabelRect.width || y > lastDataLabelRect.y + lastDataLabelRect.height || y + height < lastDataLabelRect.y || x + width < lastDataLabelRect.x\n      ) {\n        drawnextLabel = true;\n      }\n    }\n    if (dataPointIndex === 0 || alwaysDrawDataLabel) {\n      drawnextLabel = true;\n    }\n    return {\n      x,\n      y,\n      textRects,\n      drawnextLabel\n    };\n  }\n  /** @param {{type: any, pos: any, i: any, j: any, isRangeStart: any, strokeWidth?: any}} opts */\n  drawDataLabel({ type, pos, i, j, isRangeStart, strokeWidth = 2 }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const dataLabelsConfig = w.config.dataLabels;\n    let x = 0;\n    let y = 0;\n    let dataPointIndex = j;\n    let elDataLabelsWrap = null;\n    const seriesCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) !== -1;\n    if (seriesCollapsed || !dataLabelsConfig.enabled || !Array.isArray(pos.x)) {\n      return elDataLabelsWrap;\n    }\n    elDataLabelsWrap = graphics.group({\n      class: \"apexcharts-data-labels\"\n    });\n    for (let q = 0; q < pos.x.length; q++) {\n      x = pos.x[q] + dataLabelsConfig.offsetX;\n      y = pos.y[q] + dataLabelsConfig.offsetY + strokeWidth;\n      if (!isNaN(x)) {\n        if (j === 1 && q === 0) dataPointIndex = 0;\n        if (j === 1 && q === 1) dataPointIndex = 1;\n        let val = w.seriesData.series[i][dataPointIndex];\n        if (type === \"rangeArea\") {\n          if (isRangeStart) {\n            val = w.rangeData.seriesRangeStart[i][dataPointIndex];\n          } else {\n            val = w.rangeData.seriesRangeEnd[i][dataPointIndex];\n          }\n        }\n        let text = \"\";\n        const getText = (v) => {\n          return w.config.dataLabels.formatter(v, {\n            seriesIndex: i,\n            dataPointIndex,\n            w\n          });\n        };\n        if (w.config.chart.type === \"bubble\") {\n          val = w.seriesData.seriesZ[i][dataPointIndex];\n          text = getText(val);\n          y = pos.y[q];\n          const scatter = new Scatter(\n            this.w,\n            /** @type {import('../types/internal').ChartContext} */\n            this.ctx\n          );\n          const centerTextInBubbleCoords = scatter.centerTextInBubble(y);\n          y = centerTextInBubbleCoords.y;\n        } else {\n          if (typeof val !== \"undefined\") {\n            text = getText(val);\n          }\n        }\n        let textAnchor = w.config.dataLabels.textAnchor;\n        if (w.globals.isSlopeChart) {\n          if (dataPointIndex === 0) {\n            textAnchor = \"end\";\n          } else if (dataPointIndex === /** @type {Record<string,any>} */\n          w.config.series[i].data.length - 1) {\n            textAnchor = \"start\";\n          } else {\n            textAnchor = \"middle\";\n          }\n        }\n        this.plotDataLabelsText({\n          x,\n          y,\n          text,\n          i,\n          j: dataPointIndex,\n          parent: elDataLabelsWrap,\n          offsetCorrection: true,\n          dataLabelsConfig: w.config.dataLabels,\n          textAnchor\n        });\n      }\n    }\n    return elDataLabelsWrap;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  plotDataLabelsText(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let {\n      x,\n      y,\n      i,\n      j,\n      text,\n      textAnchor,\n      fontSize,\n      parent,\n      dataLabelsConfig,\n      color,\n      alwaysDrawDataLabel,\n      offsetCorrection,\n      className\n    } = opts;\n    let dataLabelText = null;\n    if (Array.isArray(w.config.dataLabels.enabledOnSeries)) {\n      if (w.config.dataLabels.enabledOnSeries.indexOf(i) < 0) {\n        return dataLabelText;\n      }\n    }\n    let correctedLabels = {\n      x,\n      y,\n      drawnextLabel: true,\n      textRects: null\n    };\n    if (offsetCorrection) {\n      correctedLabels = this.dataLabelsCorrection(\n        x,\n        y,\n        text,\n        i,\n        j,\n        alwaysDrawDataLabel,\n        parseInt(\n          /** @type {any} */\n          dataLabelsConfig.style.fontSize,\n          10\n        ).toString()\n      );\n    }\n    if (!w.interact.zoomed) {\n      x = correctedLabels.x;\n      y = correctedLabels.y;\n    }\n    if (correctedLabels.textRects) {\n      const barPad = w.globals.barPadForNumericAxis || 0;\n      if (x < -(barPad + 20) - /** @type {any} */\n      correctedLabels.textRects.width || x > w.layout.gridWidth + /** @type {any} */\n      correctedLabels.textRects.width + barPad + 30) {\n        text = \"\";\n      }\n    }\n    let dataLabelColor = w.globals.dataLabels.style.colors[i];\n    if ((w.config.chart.type === \"bar\" || w.config.chart.type === \"rangeBar\") && w.config.plotOptions.bar.distributed || w.config.dataLabels.distributed) {\n      dataLabelColor = w.globals.dataLabels.style.colors[j];\n    }\n    if (typeof dataLabelColor === \"function\") {\n      dataLabelColor = /** @type {any} */\n      dataLabelColor({\n        series: w.seriesData.series,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      });\n    }\n    if (color) {\n      dataLabelColor = color;\n    }\n    let offX = dataLabelsConfig.offsetX;\n    let offY = dataLabelsConfig.offsetY;\n    if (w.config.chart.type === \"bar\" || w.config.chart.type === \"rangeBar\") {\n      offX = 0;\n      offY = 0;\n    }\n    if (w.globals.isSlopeChart) {\n      if (j !== 0) {\n        offX = dataLabelsConfig.offsetX * -2 + 5;\n      }\n      if (j !== 0 && j !== /** @type {Record<string,any>} */\n      w.config.series[i].data.length - 1) {\n        offX = 0;\n      }\n    }\n    if (correctedLabels.drawnextLabel) {\n      if (textAnchor === \"middle\") {\n        if (x === w.layout.gridWidth) {\n          textAnchor = \"end\";\n        }\n      }\n      dataLabelText = graphics.drawText({\n        x: x + offX,\n        y: y + offY,\n        foreColor: dataLabelColor,\n        textAnchor: textAnchor || dataLabelsConfig.textAnchor,\n        text,\n        fontSize: fontSize || dataLabelsConfig.style.fontSize,\n        fontFamily: dataLabelsConfig.style.fontFamily,\n        fontWeight: dataLabelsConfig.style.fontWeight || \"normal\"\n      });\n      dataLabelText.attr({\n        class: className || \"apexcharts-datalabel\",\n        cx: x,\n        cy: y\n      });\n      if (dataLabelsConfig.dropShadow.enabled) {\n        const textShadow = dataLabelsConfig.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(dataLabelText, textShadow);\n      }\n      parent.add(dataLabelText);\n      applyProgressiveReveal(dataLabelText, x, w);\n      if (typeof w.globals.lastDrawnDataLabelsIndexes[i] === \"undefined\") {\n        w.globals.lastDrawnDataLabelsIndexes[i] = [];\n      }\n      w.globals.lastDrawnDataLabelsIndexes[i].push(j);\n    }\n    return dataLabelText;\n  }\n  /**\n   * @param {Element} el\n   * @param {{x: number, y: number, width: number, height: number}} coords\n   */\n  addBackgroundToDataLabel(el, coords) {\n    const w = this.w;\n    const bCnf = w.config.dataLabels.background;\n    const paddingH = bCnf.padding;\n    const paddingV = bCnf.padding / 2;\n    const width = coords.width;\n    const height = coords.height;\n    const graphics = new Graphics(this.w);\n    const elRect = graphics.drawRect(\n      coords.x - paddingH,\n      coords.y - paddingV / 2,\n      width + paddingH * 2,\n      height + paddingV,\n      bCnf.borderRadius,\n      w.config.chart.background === \"transparent\" || !w.config.chart.background ? \"#fff\" : w.config.chart.background,\n      bCnf.opacity,\n      bCnf.borderWidth,\n      bCnf.borderColor\n    );\n    if (bCnf.dropShadow.enabled) {\n      const filters = new Filters(this.w);\n      filters.dropShadow(elRect, bCnf.dropShadow);\n    }\n    return elRect;\n  }\n  dataLabelsBackground() {\n    var _a;\n    const w = this.w;\n    if (w.config.chart.type === \"bubble\") return;\n    const elDataLabels = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels text\"\n    );\n    for (let i = 0; i < elDataLabels.length; i++) {\n      const el = elDataLabels[i];\n      const coords = (\n        /** @type {SVGGraphicsElement} */\n        el.getBBox()\n      );\n      let elRect = null;\n      if (coords.width && coords.height) {\n        elRect = this.addBackgroundToDataLabel(el, coords);\n      }\n      if (elRect) {\n        (_a = el.parentNode) == null ? void 0 : _a.insertBefore(elRect.node, el);\n        const background = w.config.dataLabels.background.backgroundColor || el.getAttribute(\"fill\");\n        const shouldAnim = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n        if (shouldAnim) {\n          elRect.animate().attr({ fill: background });\n        } else {\n          elRect.attr({ fill: background });\n        }\n        el.setAttribute(\"fill\", w.config.dataLabels.background.foreColor);\n        const cxAttr = el.getAttribute(\"cx\");\n        if (cxAttr !== null) {\n          applyProgressiveReveal(elRect, parseFloat(cxAttr), w);\n        }\n      }\n    }\n  }\n  bringForward() {\n    const w = this.w;\n    const elDataLabelsNodes = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels\"\n    );\n    const elSeries = w.dom.baseEl.querySelector(\n      \".apexcharts-plot-series:last-child\"\n    );\n    for (let i = 0; i < elDataLabelsNodes.length; i++) {\n      if (elSeries) {\n        elSeries.insertBefore(elDataLabelsNodes[i], elSeries.nextSibling);\n      }\n    }\n  }\n}\nclass PerformanceCache {\n  /**\n   * Invalidate all caches\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateAll(w) {\n    if (!w || !w.globals) return;\n    if (w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n    if (w.globals.domCache) {\n      w.globals.domCache.clear();\n    }\n    w.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate dimension cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateDimensions(w) {\n    if (!w || !w.globals) return;\n    w.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate selector cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateSelectors(w) {\n    if (!w || !w.globals) return;\n    if (w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n  }\n  /**\n   * Get cached selector result or compute and cache it\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Function} queryFn - Function to execute if not cached\n   * @returns {*} Cached or newly computed result\n   */\n  static getCachedSelector(w, key, queryFn) {\n    if (!w || !w.globals) return queryFn();\n    if (!w.globals.cachedSelectors) {\n      w.globals.cachedSelectors = {};\n    }\n    if (!w.globals.cachedSelectors[key]) {\n      w.globals.cachedSelectors[key] = queryFn();\n    }\n    return w.globals.cachedSelectors[key];\n  }\n  /**\n   * Get cached dimension or compute and cache it\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Function} computeFn - Function to compute dimensions\n   * @param {number} maxAge - Maximum cache age in milliseconds (default: 1000ms)\n   * @returns {*} Cached or newly computed dimensions\n   */\n  static getCachedDimension(w, key, computeFn, maxAge = 1e3) {\n    if (!w || !w.globals) return computeFn();\n    if (!w.globals.dimensionCache) {\n      w.globals.dimensionCache = {};\n    }\n    const cache = w.globals.dimensionCache[key];\n    const now = Date.now();\n    if (cache && cache.lastUpdate && now - cache.lastUpdate < maxAge) {\n      return cache.value;\n    }\n    const value = computeFn();\n    w.globals.dimensionCache[key] = {\n      value,\n      lastUpdate: now\n    };\n    return value;\n  }\n  /**\n   * Cache a DOM element reference\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @param {Element} element - DOM element to cache\n   */\n  static cacheDOMElement(w, key, element) {\n    if (!w || !w.globals) return;\n    if (!w.globals.domCache) {\n      w.globals.domCache = /* @__PURE__ */ new Map();\n    }\n    w.globals.domCache.set(key, element);\n  }\n  /**\n   * Get cached DOM element\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   * @param {string} key - Cache key\n   * @returns {Element|null} Cached element or null\n   */\n  static getCachedDOMElement(w, key) {\n    if (!w || !w.globals || !w.globals.domCache) return null;\n    return w.globals.domCache.get(key) || null;\n  }\n}\nclass AxesUtils {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w, { theme = null, timeScale = null } = {}) {\n    this.w = w;\n    this.theme = theme;\n    this.timeScale = timeScale;\n  }\n  // Based on the formatter function, get the label text and position\n  /**\n   * @param {any[]} labels\n   * @param {Array<Record<string, any>>} timescaleLabels\n   * @param {number} x\n   * @param {number} i\n   * @param {any[]} drawnLabels\n   */\n  getLabel(labels, timescaleLabels, x, i, drawnLabels = [], fontSize = \"12px\", isLeafGroup = true) {\n    const w = this.w;\n    const rawLabel = typeof labels[i] === \"undefined\" ? \"\" : labels[i];\n    let label = rawLabel;\n    const xlbFormatter = w.formatters.xLabelFormatter;\n    const customFormatter = w.config.xaxis.labels.formatter;\n    const xFormat = new Formatters(this.w);\n    const timestamp = rawLabel;\n    if (isLeafGroup) {\n      label = /** @type {any} */\n      xFormat.xLabelFormat(\n        xlbFormatter,\n        rawLabel,\n        timestamp,\n        {\n          i,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      if (customFormatter !== void 0) {\n        label = customFormatter(rawLabel, labels[i], {\n          i,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        });\n      }\n    }\n    if (timescaleLabels.length > 0) {\n      x = timescaleLabels[i].position;\n      label = timescaleLabels[i].value;\n    } else {\n      if (w.config.xaxis.type === \"datetime\" && customFormatter === void 0) {\n        label = \"\";\n      }\n    }\n    if (typeof label === \"undefined\") label = \"\";\n    label = Array.isArray(label) ? label : label.toString();\n    const graphics = new Graphics(this.w);\n    let textRect = {};\n    if (w.layout.rotateXLabels && isLeafGroup) {\n      textRect = graphics.getTextRects(\n        label,\n        parseInt(fontSize, 10).toString(),\n        null,\n        `rotate(${w.config.xaxis.labels.rotate} 0 0)`,\n        false\n      );\n    } else {\n      textRect = graphics.getTextRects(label, parseInt(fontSize, 10).toString());\n    }\n    const allowDuplicatesInTimeScale = !w.config.xaxis.labels.showDuplicates && this.timeScale;\n    if (!Array.isArray(label) && (String(label) === \"NaN\" || drawnLabels.indexOf(label) >= 0 && allowDuplicatesInTimeScale)) {\n      label = \"\";\n    }\n    return {\n      x,\n      text: label,\n      textRect\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {any} label\n   * @param {number} labelsLen\n   */\n  checkLabelBasedOnTickamount(i, label, labelsLen) {\n    const w = this.w;\n    let ticks = w.config.xaxis.tickAmount;\n    if (ticks === \"dataPoints\") ticks = Math.round(w.layout.gridWidth / 120);\n    if (ticks > labelsLen) return label;\n    const tickMultiple = Math.round(labelsLen / (ticks + 1));\n    if (i % tickMultiple === 0) {\n      return label;\n    } else {\n      label.text = \"\";\n    }\n    return label;\n  }\n  /**\n   * @param {number} i\n   * @param {any} label\n   * @param {number} labelsLen\n   * @param {any[]} drawnLabels\n   * @param {Array<Record<string, any>>} drawnLabelsRects\n   */\n  checkForOverflowingLabels(i, label, labelsLen, drawnLabels, drawnLabelsRects) {\n    const w = this.w;\n    if (i === 0) {\n      if (w.globals.skipFirstTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (i === labelsLen - 1) {\n      if (w.globals.skipLastTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (w.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) {\n      const prev = drawnLabelsRects[drawnLabelsRects.length - 1];\n      if (w.config.xaxis.labels.trim && w.config.xaxis.type !== \"datetime\") {\n        return label;\n      }\n      if (\n        /** @type {any} */\n        label.x < prev.textRect.width / (w.layout.rotateXLabels ? Math.abs(w.config.xaxis.labels.rotate) / 12 : 1.01) + prev.x\n      ) {\n        label.text = \"\";\n      }\n    }\n    return label;\n  }\n  /**\n   * @param {number} i\n   * @param {any[]} labels\n   */\n  checkForReversedLabels(i, labels) {\n    const w = this.w;\n    if (w.config.yaxis[i] && w.config.yaxis[i].reversed) {\n      labels.reverse();\n    }\n    return labels;\n  }\n  /**\n   * @param {number} index\n   */\n  yAxisAllSeriesCollapsed(index) {\n    const gl = this.w.globals;\n    return !gl.seriesYAxisMap[index].some((si) => {\n      return gl.collapsedSeriesIndices.indexOf(si) === -1;\n    });\n  }\n  // Method to translate annotation.yAxisIndex values from\n  // seriesName-as-a-string values to seriesName-as-an-array values (old style\n  // series mapping to new style).\n  /**\n   * @param {number} index\n   */\n  translateYAxisIndex(index) {\n    const w = this.w;\n    const gl = w.globals;\n    const yaxis = w.config.yaxis;\n    const newStyle = w.seriesData.series.length > yaxis.length || /**\n     * @param {Record<string, any>} a\n     */\n    yaxis.some((a) => Array.isArray(a.seriesName));\n    if (newStyle) {\n      return index;\n    } else {\n      return gl.seriesYAxisReverseMap[index];\n    }\n  }\n  /**\n   * @param {number} index\n   */\n  isYAxisHidden(index) {\n    const w = this.w;\n    const yaxis = w.config.yaxis[index];\n    if (!yaxis.show || this.yAxisAllSeriesCollapsed(index)) {\n      return true;\n    }\n    if (!yaxis.showForNullSeries) {\n      const seriesIndices = w.globals.seriesYAxisMap[index];\n      const coreUtils = new CoreUtils(this.w);\n      return seriesIndices.every((si) => coreUtils.isSeriesNull(si));\n    }\n    return false;\n  }\n  // get the label color for y-axis\n  // realIndex is the actual series index, while i is the tick Index\n  /**\n   * @param {string[]} yColors\n   * @param {number} realIndex\n   */\n  getYAxisForeColor(yColors, realIndex) {\n    var _a;\n    const w = this.w;\n    if (Array.isArray(yColors) && w.globals.yAxisScale[realIndex]) {\n      (_a = this.theme) == null ? void 0 : _a.pushExtraColors(\n        yColors,\n        w.globals.yAxisScale[realIndex].result.length,\n        false\n      );\n    }\n    return yColors;\n  }\n  /**\n   * @param {number} x\n   * @param {number} tickAmount\n   * @param {Record<string, any>} axisBorder\n   * @param {Record<string, any>} axisTicks\n   * @param {number} realIndex\n   * @param {any} labelsDivider\n   * @param {any} elYaxis\n   */\n  drawYAxisTicks(x, tickAmount, axisBorder, axisTicks, realIndex, labelsDivider, elYaxis) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let tY = w.layout.translateY + w.config.yaxis[realIndex].labels.offsetY;\n    if (w.globals.isBarHorizontal) {\n      tY = 0;\n    } else if (w.config.chart.type === \"heatmap\") {\n      tY += labelsDivider / 2;\n    }\n    if (axisTicks.show && tickAmount > 0) {\n      if (w.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width;\n      for (let i = tickAmount; i >= 0; i--) {\n        const elTick = graphics.drawLine(\n          x + axisBorder.offsetX - axisTicks.width + axisTicks.offsetX,\n          tY + axisTicks.offsetY,\n          x + axisBorder.offsetX + axisTicks.offsetX,\n          tY + axisTicks.offsetY,\n          axisTicks.color\n        );\n        elYaxis.add(elTick);\n        tY += labelsDivider;\n      }\n    }\n  }\n}\nclass XAxis {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {any} [elgrid]\n   */\n  constructor(w, ctx, elgrid) {\n    this.w = w;\n    this.ctx = ctx;\n    this.elgrid = elgrid;\n    this.axesUtils = new AxesUtils(w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.xaxisLabels = w.labelData.labels.slice();\n    if (w.labelData.timescaleLabels.length > 0 && !w.globals.isBarHorizontal) {\n      this.xaxisLabels = w.labelData.timescaleLabels.slice();\n    }\n    if (w.config.xaxis.overwriteCategories) {\n      this.xaxisLabels = w.config.xaxis.overwriteCategories;\n    }\n    this.drawnLabels = [];\n    this.drawnLabelsRects = [];\n    if (w.config.xaxis.position === \"top\") {\n      this.offY = 0;\n    } else {\n      this.offY = w.layout.gridHeight;\n    }\n    this.offY = this.offY + w.config.xaxis.axisBorder.offsetY;\n    this.isCategoryBarHorizontal = w.config.chart.type === \"bar\" && w.config.plotOptions.bar.horizontal;\n    this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n    this.xaxisFontFamily = w.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n    this.xaxisBorderWidth = w.config.xaxis.axisBorder.width;\n    if (this.isCategoryBarHorizontal) {\n      this.xaxisBorderWidth = w.config.yaxis[0].axisBorder.width.toString();\n    }\n    if (String(this.xaxisBorderWidth).indexOf(\"%\") > -1) {\n      this.xaxisBorderWidth = w.layout.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100;\n    } else {\n      this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10);\n    }\n    this.xaxisBorderHeight = w.config.xaxis.axisBorder.height;\n    this.yaxis = w.config.yaxis[0];\n  }\n  drawXaxis() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis\",\n      transform: `translate(${w.config.xaxis.offsetX}, ${w.config.xaxis.offsetY})`\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w.layout.translateXAxisX}, ${w.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let labels = [];\n    for (let i = 0; i < this.xaxisLabels.length; i++) {\n      labels.push(this.xaxisLabels[i]);\n    }\n    this.drawXAxisLabelAndGroup(\n      true,\n      graphics,\n      elXaxisTexts,\n      labels,\n      w.axisFlags.isXNumeric,\n      (i, colWidth) => colWidth\n    );\n    if (w.labelData.hasXaxisGroups) {\n      const labelsGroup = w.labelData.groups;\n      labels = [];\n      for (let i = 0; i < labelsGroup.length; i++) {\n        labels.push(labelsGroup[i].title);\n      }\n      const overwriteStyles = (\n        /** @type {any} */\n        {}\n      );\n      if (w.config.xaxis.group.style) {\n        overwriteStyles.xaxisFontSize = w.config.xaxis.group.style.fontSize;\n        overwriteStyles.xaxisFontFamily = w.config.xaxis.group.style.fontFamily;\n        overwriteStyles.xaxisForeColors = w.config.xaxis.group.style.colors;\n        overwriteStyles.fontWeight = w.config.xaxis.group.style.fontWeight;\n        overwriteStyles.cssClass = w.config.xaxis.group.style.cssClass;\n      }\n      this.drawXAxisLabelAndGroup(\n        false,\n        graphics,\n        elXaxisTexts,\n        labels,\n        false,\n        (i, colWidth) => labelsGroup[i].cols * colWidth,\n        overwriteStyles\n      );\n    }\n    if (w.config.xaxis.title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w.layout.gridWidth / 2 + w.config.xaxis.title.offsetX,\n        y: this.offY + parseFloat(this.xaxisFontSize) + (w.config.xaxis.position === \"bottom\" ? w.layout.xAxisLabelsHeight : -w.layout.xAxisLabelsHeight - 10) + w.config.xaxis.title.offsetY,\n        text: w.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w.config.xaxis.title.style.fontSize,\n        fontFamily: w.config.xaxis.title.style.fontFamily,\n        fontWeight: w.config.xaxis.title.style.fontWeight,\n        foreColor: w.config.xaxis.title.style.color,\n        cssClass: \"apexcharts-xaxis-title-text \" + w.config.xaxis.title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elXaxis.add(elXaxisTitle);\n    }\n    if (w.config.xaxis.axisBorder.show) {\n      const offX = w.globals.barPadForNumericAxis;\n      const elHorzLine = graphics.drawLine(\n        w.globals.padHorizontal + w.config.xaxis.axisBorder.offsetX - offX,\n        this.offY,\n        this.xaxisBorderWidth + offX,\n        this.offY,\n        w.config.xaxis.axisBorder.color,\n        0,\n        this.xaxisBorderHeight\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elHorzLine);\n      } else {\n        elXaxis.add(elHorzLine);\n      }\n    }\n    return elXaxis;\n  }\n  /**\n   * @param {Record<string, any>} [overwriteStyles]\n   * @param {boolean} isLeafGroup\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elXaxisTexts\n   * @param {any[]} labels\n   * @param {boolean} isXNumeric\n   * @param {any} colWidthCb\n   */\n  drawXAxisLabelAndGroup(isLeafGroup, graphics, elXaxisTexts, labels, isXNumeric, colWidthCb, overwriteStyles = {}) {\n    var _a, _b;\n    const drawnLabels = [];\n    const drawnLabelsRects = [];\n    const w = this.w;\n    const xaxisFontSize = overwriteStyles.xaxisFontSize || this.xaxisFontSize;\n    const xaxisFontFamily = overwriteStyles.xaxisFontFamily || this.xaxisFontFamily;\n    const xaxisForeColors = overwriteStyles.xaxisForeColors || this.xaxisForeColors;\n    const fontWeight = overwriteStyles.fontWeight || w.config.xaxis.labels.style.fontWeight;\n    const cssClass = overwriteStyles.cssClass || w.config.xaxis.labels.style.cssClass;\n    let colWidth;\n    let xPos = w.globals.padHorizontal;\n    const labelsLen = labels.length;\n    let dataPoints = w.config.xaxis.type === \"category\" ? w.globals.dataPoints : labelsLen;\n    if (dataPoints === 0 && labelsLen > dataPoints) dataPoints = labelsLen;\n    if (isXNumeric) {\n      const len = Math.max(\n        Number(w.config.xaxis.tickAmount) || 1,\n        dataPoints > 1 ? dataPoints - 1 : dataPoints\n      );\n      colWidth = w.layout.gridWidth / Math.min(len, labelsLen - 1);\n      xPos = xPos + colWidthCb(0, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n    } else {\n      colWidth = w.layout.gridWidth / dataPoints;\n      xPos = xPos + colWidthCb(0, colWidth) + w.config.xaxis.labels.offsetX;\n    }\n    for (let i = 0; i <= labelsLen - 1; i++) {\n      let x = xPos - colWidthCb(i, colWidth) / 2 + w.config.xaxis.labels.offsetX;\n      if (i === 0 && labelsLen === 1 && colWidth / 2 === xPos && dataPoints === 1) {\n        x = w.layout.gridWidth / 2;\n      }\n      let label = this.axesUtils.getLabel(\n        labels,\n        w.labelData.timescaleLabels,\n        x,\n        i,\n        drawnLabels,\n        xaxisFontSize,\n        isLeafGroup\n      );\n      let offsetYCorrection = 28;\n      if (w.layout.rotateXLabels && isLeafGroup) {\n        offsetYCorrection = 22;\n      }\n      if (w.config.xaxis.title.text && w.config.xaxis.position === \"top\") {\n        offsetYCorrection += parseFloat(w.config.xaxis.title.style.fontSize) + 2;\n      }\n      if (!isLeafGroup) {\n        offsetYCorrection = offsetYCorrection + parseFloat(xaxisFontSize) + (w.layout.xAxisLabelsHeight - w.layout.xAxisGroupLabelsHeight) + (w.layout.rotateXLabels ? 10 : 0);\n      }\n      const isCategoryTickAmounts = typeof w.config.xaxis.tickAmount !== \"undefined\" && w.config.xaxis.tickAmount !== \"dataPoints\" && w.config.xaxis.type !== \"datetime\";\n      if (isCategoryTickAmounts) {\n        label = this.axesUtils.checkLabelBasedOnTickamount(i, label, labelsLen);\n      } else {\n        label = this.axesUtils.checkForOverflowingLabels(\n          i,\n          label,\n          labelsLen,\n          drawnLabels,\n          drawnLabelsRects\n        );\n      }\n      const getCatForeColor = () => {\n        return isLeafGroup && w.config.xaxis.convertedCatToNumeric ? xaxisForeColors[w.globals.minX + i - 1] : xaxisForeColors[i];\n      };\n      const labelRectWidth = (\n        /** @type {any} */\n        (_b = (_a = label.textRect) == null ? void 0 : _a.width) != null ? _b : 0\n      );\n      const halfWidth = labelRectWidth / 2;\n      const fullyOutsideGrid = label.x + halfWidth < 0;\n      if (w.config.xaxis.labels.show && !fullyOutsideGrid) {\n        const elText = graphics.drawText({\n          x: label.x,\n          y: this.offY + w.config.xaxis.labels.offsetY + offsetYCorrection - (w.config.xaxis.position === \"top\" ? w.layout.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n          text: label.text,\n          textAnchor: \"middle\",\n          fontWeight,\n          fontSize: xaxisFontSize,\n          fontFamily: xaxisFontFamily,\n          foreColor: Array.isArray(xaxisForeColors) ? getCatForeColor() : xaxisForeColors,\n          isPlainText: false,\n          cssClass: (isLeafGroup ? \"apexcharts-xaxis-label \" : \"apexcharts-xaxis-group-label \") + cssClass\n        });\n        elXaxisTexts.add(elText);\n        elText.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n        if (isLeafGroup) {\n          const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS, \"title\");\n          elTooltipTitle.textContent = Array.isArray(label.text) ? label.text.join(\" \") : label.text;\n          elText.node.appendChild(elTooltipTitle);\n          if (label.text !== \"\") {\n            drawnLabels.push(label.text);\n            drawnLabelsRects.push(label);\n          }\n        }\n      }\n      if (i < labelsLen - 1) {\n        xPos = xPos + colWidthCb(i + 1, colWidth);\n      }\n    }\n  }\n  // this actually becomes the vertical axis (for bar charts)\n  /**\n   * @param {number} realIndex\n   */\n  drawXaxisInversed(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const translateYAxisX = w.config.yaxis[0].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n    const elYaxis = graphics.group({\n      class: \"apexcharts-yaxis apexcharts-xaxis-inversed\",\n      rel: realIndex\n    });\n    const elYaxisTexts = graphics.group({\n      class: \"apexcharts-yaxis-texts-g apexcharts-xaxis-inversed-texts-g\",\n      transform: \"translate(\" + translateYAxisX + \", 0)\"\n    });\n    elYaxis.add(elYaxisTexts);\n    const labels = [];\n    if (w.config.yaxis[realIndex].show) {\n      for (let i = 0; i < this.xaxisLabels.length; i++) {\n        labels.push(this.xaxisLabels[i]);\n      }\n    }\n    const colHeight = w.layout.gridHeight / labels.length;\n    let yPos = -(colHeight / 2.2);\n    const lbFormatter = w.formatters.yLabelFormatters[0];\n    const ylabels = w.config.yaxis[0].labels;\n    if (ylabels.show) {\n      for (let i = 0; i <= labels.length - 1; i++) {\n        let label = typeof labels[i] === \"undefined\" ? \"\" : labels[i];\n        label = lbFormatter(label, {\n          seriesIndex: realIndex,\n          dataPointIndex: i,\n          w\n        });\n        const yColors = this.axesUtils.getYAxisForeColor(\n          ylabels.style.colors,\n          realIndex\n        );\n        const getForeColor = () => {\n          return Array.isArray(yColors) ? yColors[i] : yColors;\n        };\n        let multiY = 0;\n        if (Array.isArray(label)) {\n          multiY = label.length / 2 * parseInt(ylabels.style.fontSize, 10);\n        }\n        let offsetX = ylabels.offsetX - 15;\n        let textAnchor = \"end\";\n        if (this.yaxis.opposite) {\n          textAnchor = \"start\";\n        }\n        if (w.config.yaxis[0].labels.align === \"left\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"start\";\n        } else if (w.config.yaxis[0].labels.align === \"center\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"middle\";\n        } else if (w.config.yaxis[0].labels.align === \"right\") {\n          textAnchor = \"end\";\n        }\n        const elLabel = graphics.drawText({\n          x: offsetX,\n          y: yPos + colHeight + ylabels.offsetY - multiY,\n          text: label,\n          textAnchor,\n          foreColor: getForeColor(),\n          fontSize: ylabels.style.fontSize,\n          fontFamily: ylabels.style.fontFamily,\n          fontWeight: ylabels.style.fontWeight,\n          isPlainText: false,\n          cssClass: \"apexcharts-yaxis-label \" + ylabels.style.cssClass,\n          maxWidth: ylabels.maxWidth\n        });\n        elYaxisTexts.add(elLabel);\n        elLabel.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n        const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS, \"title\");\n        elTooltipTitle.textContent = Array.isArray(label) ? label.join(\" \") : label;\n        elLabel.node.appendChild(elTooltipTitle);\n        if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n          const labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node);\n          elLabel.node.setAttribute(\n            \"transform\",\n            `rotate(${w.config.yaxis[realIndex].labels.rotate} 0 ${labelRotatingCenter.y})`\n          );\n        }\n        yPos = yPos + colHeight;\n      }\n    }\n    if (w.config.yaxis[0].title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-yaxis-title apexcharts-xaxis-title-inversed\",\n        transform: \"translate(\" + translateYAxisX + \", 0)\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w.config.yaxis[0].title.offsetX,\n        y: w.layout.gridHeight / 2 + w.config.yaxis[0].title.offsetY,\n        text: w.config.yaxis[0].title.text,\n        textAnchor: \"middle\",\n        foreColor: w.config.yaxis[0].title.style.color,\n        fontSize: w.config.yaxis[0].title.style.fontSize,\n        fontWeight: w.config.yaxis[0].title.style.fontWeight,\n        fontFamily: w.config.yaxis[0].title.style.fontFamily,\n        cssClass: \"apexcharts-yaxis-title-text \" + w.config.yaxis[0].title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elYaxis.add(elXaxisTitle);\n    }\n    let offX = 0;\n    if (this.isCategoryBarHorizontal && w.config.yaxis[0].opposite) {\n      offX = w.layout.gridWidth;\n    }\n    const axisBorder = w.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        w.globals.padHorizontal + axisBorder.offsetX + offX,\n        1 + axisBorder.offsetY,\n        w.globals.padHorizontal + axisBorder.offsetX + offX,\n        w.layout.gridHeight + axisBorder.offsetY,\n        axisBorder.color,\n        0\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elVerticalLine);\n      } else {\n        elYaxis.add(elVerticalLine);\n      }\n    }\n    if (w.config.yaxis[0].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        offX,\n        labels.length,\n        w.config.yaxis[0].axisBorder,\n        w.config.yaxis[0].axisTicks,\n        0,\n        colHeight,\n        elYaxis\n      );\n    }\n    return elYaxis;\n  }\n  /**\n   * @param {number} x1\n   * @param {number} y2\n   * @param {any} appendToElement\n   */\n  drawXaxisTicks(x1, y2, appendToElement) {\n    const w = this.w;\n    const x2 = x1;\n    if (x1 < 0 || x1 - 2 > w.layout.gridWidth) return;\n    const y1 = this.offY + w.config.xaxis.axisTicks.offsetY;\n    y2 = y2 + y1 + w.config.xaxis.axisTicks.height;\n    if (w.config.xaxis.position === \"top\") {\n      y2 = y1 - w.config.xaxis.axisTicks.height;\n    }\n    if (w.config.xaxis.axisTicks.show) {\n      const graphics = new Graphics(this.w);\n      const line = graphics.drawLine(\n        x1 + w.config.xaxis.axisTicks.offsetX,\n        y1 + w.config.xaxis.offsetY,\n        x2 + w.config.xaxis.axisTicks.offsetX,\n        y2 + w.config.xaxis.offsetY,\n        w.config.xaxis.axisTicks.color\n      );\n      appendToElement.add(line);\n      line.node.classList.add(\"apexcharts-xaxis-tick\");\n    }\n  }\n  getXAxisTicksPositions() {\n    const w = this.w;\n    const xAxisTicksPositions = [];\n    const xCount = this.xaxisLabels.length;\n    let x1 = w.globals.padHorizontal;\n    if (w.labelData.timescaleLabels.length > 0) {\n      for (let i = 0; i < xCount; i++) {\n        x1 = this.xaxisLabels[i].position;\n        xAxisTicksPositions.push(x1);\n      }\n    } else {\n      const xCountForCategoryCharts = xCount;\n      for (let i = 0; i < xCountForCategoryCharts; i++) {\n        let x1Count = xCountForCategoryCharts;\n        if (w.axisFlags.isXNumeric && w.config.chart.type !== \"bar\") {\n          x1Count -= 1;\n        }\n        x1 = x1 + w.layout.gridWidth / x1Count;\n        xAxisTicksPositions.push(x1);\n      }\n    }\n    return xAxisTicksPositions;\n  }\n  // to rotate x-axis labels or to put ... for longer text in xaxis\n  xAxisLabelCorrections() {\n    var _a, _b, _c;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const xAxis = w.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\");\n    const xAxisTexts = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"\n    );\n    const yAxisTextsInversed = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-inversed text\"\n    );\n    const xAxisTextsInversed = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-inversed-texts-g text tspan\"\n    );\n    if (w.layout.rotateXLabels || w.config.xaxis.labels.rotateAlways) {\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const textRotatingCenter = graphics.rotateAroundCenter(xAxisTexts[xat]);\n        textRotatingCenter.y = textRotatingCenter.y - 1;\n        textRotatingCenter.x = textRotatingCenter.x + 1;\n        xAxisTexts[xat].setAttribute(\n          \"transform\",\n          `rotate(${w.config.xaxis.labels.rotate} ${textRotatingCenter.x} ${textRotatingCenter.y})`\n        );\n        xAxisTexts[xat].setAttribute(\"text-anchor\", `end`);\n        xAxis == null ? void 0 : xAxis.setAttribute(\"transform\", `translate(0, ${-10})`);\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w.config.xaxis.labels.trim) {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(\n              ts,\n              ts.textContent,\n              w.layout.xAxisLabelsHeight - (w.config.legend.position === \"bottom\" ? 20 : 10)\n            );\n          });\n        }\n      }\n    } else {\n      const width = w.layout.gridWidth / (w.labelData.labels.length + 1);\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w.config.xaxis.labels.trim && w.config.xaxis.type !== \"datetime\") {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(ts, ts.textContent, width);\n          });\n        }\n      }\n    }\n    if (yAxisTextsInversed.length > 0) {\n      const firstLabelPosX = (\n        /** @type {SVGGraphicsElement} */\n        yAxisTextsInversed[yAxisTextsInversed.length - 1].getBBox()\n      );\n      const lastLabelPosX = (\n        /** @type {SVGGraphicsElement} */\n        yAxisTextsInversed[0].getBBox()\n      );\n      if (firstLabelPosX.x < -20) {\n        (_a = yAxisTextsInversed[yAxisTextsInversed.length - 1].parentNode) == null ? void 0 : _a.removeChild(\n          yAxisTextsInversed[yAxisTextsInversed.length - 1]\n        );\n      }\n      if (lastLabelPosX.x + lastLabelPosX.width > w.layout.gridWidth && !w.globals.isBarHorizontal) {\n        (_b = yAxisTextsInversed[0].parentNode) == null ? void 0 : _b.removeChild(yAxisTextsInversed[0]);\n      }\n      for (let xat = 0; xat < xAxisTextsInversed.length; xat++) {\n        graphics.placeTextWithEllipsis(\n          xAxisTextsInversed[xat],\n          (_c = xAxisTextsInversed[xat].textContent) != null ? _c : \"\",\n          w.config.yaxis[0].labels.maxWidth - (w.config.yaxis[0].title.text ? parseFloat(w.config.yaxis[0].title.style.fontSize) * 2 : 0) - 15\n        );\n      }\n    }\n  }\n  // renderXAxisBands() {\n  //   let w = this.w;\n  //   let plotBand = document.createElementNS(SVGNS, 'rect')\n  //   w.dom.elGraphical.add(plotBand)\n  // }\n}\nclass Grid {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.xaxisLabels = w.labelData.labels.slice();\n    this.axesUtils = new AxesUtils(ctx.w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.isRangeBar = w.rangeData.seriesRange.length && w.globals.isBarHorizontal;\n    if (w.labelData.timescaleLabels.length > 0) {\n      this.xaxisLabels = w.labelData.timescaleLabels.slice();\n    }\n  }\n  /**\n   * @param {any} elGrid\n   */\n  drawGridArea(elGrid = null) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    if (!elGrid) {\n      elGrid = graphics.group({ class: \"apexcharts-grid\" });\n    }\n    const elVerticalLine = graphics.drawLine(\n      w.globals.padHorizontal,\n      1,\n      w.globals.padHorizontal,\n      w.layout.gridHeight,\n      \"transparent\"\n    );\n    const elHorzLine = graphics.drawLine(\n      w.globals.padHorizontal,\n      w.layout.gridHeight,\n      w.layout.gridWidth,\n      w.layout.gridHeight,\n      \"transparent\"\n    );\n    elGrid.add(elHorzLine);\n    elGrid.add(elVerticalLine);\n    return elGrid;\n  }\n  drawGrid() {\n    const gl = this.w.globals;\n    if (gl.axisCharts) {\n      const elgrid = this.renderGrid();\n      this.drawGridArea(elgrid.el);\n      return elgrid;\n    }\n    return null;\n  }\n  createGridMask() {\n    const w = this.w;\n    const gl = w.globals;\n    const graphics = new Graphics(this.w);\n    const strokeSize = Array.isArray(w.config.stroke.width) ? Math.max(...w.config.stroke.width) : w.config.stroke.width;\n    const createClipPath = (id) => {\n      const clipPath = BrowserAPIs.createElementNS(SVGNS, \"clipPath\");\n      clipPath.setAttribute(\"id\", id);\n      return clipPath;\n    };\n    w.dom.elGridRectMask = createClipPath(`gridRectMask${gl.cuid}`);\n    w.dom.elGridRectBarMask = createClipPath(`gridRectBarMask${gl.cuid}`);\n    w.dom.elGridRectMarkerMask = createClipPath(`gridRectMarkerMask${gl.cuid}`);\n    w.dom.elForecastMask = createClipPath(`forecastMask${gl.cuid}`);\n    w.dom.elNonForecastMask = createClipPath(`nonForecastMask${gl.cuid}`);\n    const hasBar = [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(\n      w.config.chart.type\n    ) || w.globals.comboBarCount > 0;\n    let barWidthLeft = 0;\n    let barWidthRight = 0;\n    if (hasBar && w.axisFlags.isXNumeric && !w.globals.isBarHorizontal) {\n      barWidthLeft = Math.max(\n        w.config.grid.padding.left,\n        gl.barPadForNumericAxis\n      );\n      barWidthRight = Math.max(\n        w.config.grid.padding.right,\n        gl.barPadForNumericAxis\n      );\n    }\n    w.dom.elGridRect = graphics.drawRect(\n      -strokeSize / 2 - 2,\n      -strokeSize / 2 - 2,\n      w.layout.gridWidth + strokeSize + 4,\n      w.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    w.dom.elGridRectBar = graphics.drawRect(\n      -strokeSize / 2 - barWidthLeft - 2,\n      -strokeSize / 2 - 2,\n      w.layout.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4,\n      w.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    const markerSize = w.globals.markers.largestSize;\n    w.dom.elGridRectMarker = graphics.drawRect(\n      Math.min(-strokeSize / 2 - barWidthLeft - 2, -markerSize),\n      -markerSize,\n      w.layout.gridWidth + Math.max(strokeSize + barWidthRight + barWidthLeft + 4, markerSize * 2),\n      w.layout.gridHeight + markerSize * 2,\n      0,\n      \"#fff\"\n    );\n    w.dom.elGridRectMask.appendChild(w.dom.elGridRect.node);\n    w.dom.elGridRectBarMask.appendChild(w.dom.elGridRectBar.node);\n    w.dom.elGridRectMarkerMask.appendChild(w.dom.elGridRectMarker.node);\n    const defs = w.dom.elDefs.node;\n    defs.appendChild(w.dom.elGridRectMask);\n    defs.appendChild(w.dom.elGridRectBarMask);\n    defs.appendChild(w.dom.elGridRectMarkerMask);\n    defs.appendChild(w.dom.elForecastMask);\n    defs.appendChild(w.dom.elNonForecastMask);\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLines({ i, x1, y1, x2, y2, xCount, parent }) {\n    const w = this.w;\n    const shouldDraw = () => {\n      if (i === 0 && w.globals.skipFirstTimelinelabel) return false;\n      if (i === xCount - 1 && w.globals.skipLastTimelinelabel && !w.config.xaxis.labels.formatter)\n        return false;\n      if (w.config.chart.type === \"radar\") return false;\n      return true;\n    };\n    if (shouldDraw()) {\n      if (w.config.grid.xaxis.lines.show) {\n        this._drawGridLine({ i, x1, y1, x2, y2, xCount, parent });\n      }\n      let y_2 = 0;\n      if (w.labelData.hasXaxisGroups && w.config.xaxis.tickPlacement === \"between\") {\n        const groups = w.labelData.groups;\n        if (groups) {\n          let gacc = 0;\n          for (let gi = 0; gacc < i && gi < groups.length; gi++) {\n            gacc += groups[gi].cols;\n          }\n          if (gacc === i) {\n            y_2 = w.layout.xAxisLabelsHeight * 0.6;\n          }\n        }\n      }\n      const xAxis = new XAxis(this.w, this.ctx);\n      xAxis.drawXaxisTicks(x1, y_2, w.dom.elGraphical);\n    }\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLine({ i, x1, y1, x2, y2, xCount, parent }) {\n    const w = this.w;\n    const isHorzLine = parent.node.classList.contains(\n      \"apexcharts-gridlines-horizontal\"\n    );\n    const offX = w.globals.barPadForNumericAxis;\n    const excludeBorders = y1 === 0 && y2 === 0 || x1 === 0 && x2 === 0 || y1 === w.layout.gridHeight && y2 === w.layout.gridHeight || w.globals.isBarHorizontal && (i === 0 || i === xCount - 1);\n    const graphics = new Graphics(this.w);\n    const line = graphics.drawLine(\n      x1 - (isHorzLine ? offX : 0),\n      y1,\n      x2 + (isHorzLine ? offX : 0),\n      y2,\n      w.config.grid.borderColor,\n      w.config.grid.strokeDashArray\n    );\n    line.node.classList.add(\"apexcharts-gridline\");\n    if (excludeBorders && w.config.grid.show) {\n      this.elGridBorders.add(line);\n    } else {\n      parent.add(line);\n    }\n  }\n  /** @param {{c: any, x1: any, y1: any, x2: any, y2: any, type: any}} opts */\n  _drawGridBandRect({ c, x1, y1, x2, y2, type }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const offX = w.globals.barPadForNumericAxis;\n    const color = w.config.grid[type].colors[c];\n    const rect = graphics.drawRect(\n      x1 - (type === \"row\" ? offX : 0),\n      y1,\n      x2 + (type === \"row\" ? offX * 2 : 0),\n      y2,\n      0,\n      color,\n      w.config.grid[type].opacity\n    );\n    this.elg.add(rect);\n    rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n    rect.node.classList.add(`apexcharts-grid-${type}`);\n  }\n  /** @param {{xCount: any, tickAmount: any}} opts */\n  _drawXYLines({ xCount, tickAmount }) {\n    var _a;\n    const w = this.w;\n    const datetimeLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i = 0; i < xC; i++) {\n        x1 = /** @type {any} */\n        this.xaxisLabels[i].position;\n        x2 = /** @type {any} */\n        this.xaxisLabels[i].position;\n        this._drawGridLines({\n          i,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n      }\n    };\n    const categoryLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i = 0; i < xC + (w.axisFlags.isXNumeric ? 0 : 1); i++) {\n        if (i === 0 && xC === 1 && w.globals.dataPoints === 1) {\n          x1 = w.layout.gridWidth / 2;\n          x2 = x1;\n        }\n        this._drawGridLines({\n          i,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n        x1 += w.layout.gridWidth / (w.axisFlags.isXNumeric ? xC - 1 : xC);\n        x2 = x1;\n      }\n    };\n    if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n      const x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w.layout.gridHeight;\n      if (w.labelData.timescaleLabels.length) {\n        datetimeLines({ xC: xCount, x1, y1, x2, y2 });\n      } else {\n        if (w.axisFlags.isXNumeric) {\n          xCount = (_a = w.globals.xAxisScale) == null ? void 0 : _a.result.length;\n        }\n        categoryLines({ xC: xCount, x1, y1, x2, y2 });\n      }\n    }\n    if (w.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w.layout.gridWidth;\n      let tA = tickAmount + 1;\n      if (this.isRangeBar) {\n        tA = w.labelData.labels.length;\n      }\n      for (let i = 0; i < tA + (this.isRangeBar ? 1 : 0); i++) {\n        this._drawGridLine({\n          i,\n          xCount: tA + (this.isRangeBar ? 1 : 0),\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w.layout.gridHeight / (this.isRangeBar ? tA : tickAmount);\n        y2 = y1;\n      }\n    }\n  }\n  /** @param {{ xCount?: any, tickAmount?: any }} opts */\n  _drawInvertedXYLines({ xCount }) {\n    const w = this.w;\n    if (w.config.grid.xaxis.lines.show || w.config.xaxis.axisTicks.show) {\n      let x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w.layout.gridHeight;\n      for (let i = 0; i < xCount + 1; i++) {\n        if (w.config.grid.xaxis.lines.show) {\n          this._drawGridLine({\n            i,\n            xCount: xCount + 1,\n            x1,\n            y1,\n            x2,\n            y2,\n            parent: this.elgridLinesV\n          });\n        }\n        const xAxis = new XAxis(this.w, this.ctx);\n        xAxis.drawXaxisTicks(x1, 0, w.dom.elGraphical);\n        x1 += w.layout.gridWidth / xCount;\n        x2 = x1;\n      }\n    }\n    if (w.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w.layout.gridWidth;\n      for (let i = 0; i < w.globals.dataPoints + 1; i++) {\n        this._drawGridLine({\n          i,\n          xCount: w.globals.dataPoints + 1,\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w.layout.gridHeight / w.globals.dataPoints;\n        y2 = y1;\n      }\n    }\n  }\n  renderGrid() {\n    var _a, _b, _c;\n    const w = this.w;\n    const gl = w.globals;\n    const graphics = new Graphics(this.w);\n    this.elg = graphics.group({ class: \"apexcharts-grid\" });\n    this.elgridLinesH = graphics.group({\n      class: \"apexcharts-gridlines-horizontal\"\n    });\n    this.elgridLinesV = graphics.group({\n      class: \"apexcharts-gridlines-vertical\"\n    });\n    this.elGridBorders = graphics.group({ class: \"apexcharts-grid-borders\" });\n    this.elg.add(this.elgridLinesH);\n    this.elg.add(this.elgridLinesV);\n    if (!w.config.grid.show) {\n      this.elgridLinesV.hide();\n      this.elgridLinesH.hide();\n      this.elGridBorders.hide();\n    }\n    let gridAxisIndex = 0;\n    while (gridAxisIndex < gl.seriesYAxisMap.length && gl.ignoreYAxisIndexes.includes(gridAxisIndex)) {\n      gridAxisIndex++;\n    }\n    if (gridAxisIndex === gl.seriesYAxisMap.length) {\n      gridAxisIndex = 0;\n    }\n    let yTickAmount = gl.yAxisScale[gridAxisIndex].result.length - 1;\n    let xCount;\n    if (!gl.isBarHorizontal || this.isRangeBar) {\n      xCount = this.xaxisLabels.length;\n      if (this.isRangeBar) {\n        yTickAmount = w.labelData.labels.length;\n        if (w.config.xaxis.tickAmount && w.config.xaxis.labels.formatter) {\n          xCount = w.config.xaxis.tickAmount;\n        }\n        if (((_c = (_b = (_a = gl.yAxisScale) == null ? void 0 : _a[gridAxisIndex]) == null ? void 0 : _b.result) == null ? void 0 : _c.length) > 0 && w.config.xaxis.type !== \"datetime\") {\n          xCount = gl.yAxisScale[gridAxisIndex].result.length - 1;\n        }\n      }\n      this._drawXYLines({ xCount, tickAmount: yTickAmount });\n    } else {\n      xCount = yTickAmount;\n      yTickAmount = gl.xTickAmount;\n      this._drawInvertedXYLines({ xCount, tickAmount: yTickAmount });\n    }\n    this.drawGridBands(xCount, yTickAmount);\n    return {\n      el: this.elg,\n      elGridBorders: this.elGridBorders,\n      xAxisTickWidth: w.layout.gridWidth / xCount\n    };\n  }\n  /**\n   * @param {number} xCount\n   * @param {number} tickAmount\n   */\n  drawGridBands(xCount, tickAmount) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const drawBands = (type, count, x1, y1, x2, y2) => {\n      for (let i = 0, c = 0; i < count; i++, c++) {\n        if (c >= w.config.grid[type].colors.length) {\n          c = 0;\n        }\n        this._drawGridBandRect({ c, x1, y1, x2, y2, type });\n        y1 += w.layout.gridHeight / tickAmount;\n      }\n    };\n    if (((_a = w.config.grid.row.colors) == null ? void 0 : _a.length) > 0) {\n      drawBands(\n        \"row\",\n        tickAmount,\n        0,\n        0,\n        w.layout.gridWidth,\n        w.layout.gridHeight / tickAmount\n      );\n    }\n    if (((_b = w.config.grid.column.colors) == null ? void 0 : _b.length) > 0) {\n      let xc = !w.globals.isBarHorizontal && w.config.xaxis.tickPlacement === \"on\" && (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount;\n      if (w.axisFlags.isXNumeric) {\n        xc = ((_d = (_c = w.globals.xAxisScale) == null ? void 0 : _c.result.length) != null ? _d : 1) - 1;\n      }\n      let x1 = w.globals.padHorizontal;\n      const y1 = 0;\n      let x2 = w.globals.padHorizontal + w.layout.gridWidth / xc;\n      const y2 = w.layout.gridHeight;\n      for (let i = 0, c = 0; i < xCount; i++, c++) {\n        if (c >= w.config.grid.column.colors.length) {\n          c = 0;\n        }\n        if (w.config.xaxis.type === \"datetime\") {\n          x1 = /** @type {any} */\n          this.xaxisLabels[i].position;\n          x2 = /** @type {any} */\n          (((_e = this.xaxisLabels[i + 1]) == null ? void 0 : _e.position) || w.layout.gridWidth) - /** @type {any} */\n          this.xaxisLabels[i].position;\n        }\n        this._drawGridBandRect({ c, x1, y1, x2, y2, type: \"column\" });\n        x1 += w.layout.gridWidth / xc;\n      }\n    }\n  }\n}\nclass Scales {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.coreUtils = new CoreUtils(this.w);\n  }\n  // http://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axis\n  // This routine creates the Y axis values for a graph.\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   */\n  niceScale(yMin, yMax, index = 0) {\n    const jsPrecision = 1e-11;\n    const w = this.w;\n    const gl = w.globals;\n    let axisCnf;\n    let maxTicks;\n    let gotMin;\n    let gotMax;\n    if (gl.isBarHorizontal) {\n      axisCnf = w.config.xaxis;\n      maxTicks = Math.max((gl.svgWidth - 100) / 25, 2);\n    } else {\n      axisCnf = w.config.yaxis[index];\n      maxTicks = Math.max((gl.svgHeight - 100) / 15, 2);\n    }\n    if (!Utils$1.isNumber(maxTicks)) {\n      maxTicks = 10;\n    }\n    gotMin = axisCnf.min !== void 0 && axisCnf.min !== null;\n    gotMax = axisCnf.max !== void 0 && axisCnf.min !== null;\n    let gotStepSize = axisCnf.stepSize !== void 0 && axisCnf.stepSize !== null;\n    let gotTickAmount = axisCnf.tickAmount !== void 0 && axisCnf.tickAmount !== null;\n    let ticks = gotTickAmount ? axisCnf.tickAmount : NICE_SCALE_DEFAULT_TICKS[Math.min(\n      Math.round(maxTicks / 2),\n      NICE_SCALE_DEFAULT_TICKS.length - 1\n    )];\n    if (gl.isMultipleYAxis && !gotTickAmount && gl.multiAxisTickAmount > 0) {\n      ticks = gl.multiAxisTickAmount;\n      gotTickAmount = true;\n    }\n    if (ticks === \"dataPoints\") {\n      ticks = gl.dataPoints - 1;\n    } else {\n      ticks = Math.abs(Math.round(ticks));\n    }\n    if (yMin === Number.MIN_VALUE && yMax === 0 || !Utils$1.isNumber(yMin) && !Utils$1.isNumber(yMax) || yMin === Number.MIN_VALUE && yMax === -Number.MAX_VALUE) {\n      yMin = Utils$1.isNumber(axisCnf.min) ? axisCnf.min : 0;\n      yMax = Utils$1.isNumber(axisCnf.max) ? axisCnf.max : yMin + ticks;\n      gl.allSeriesCollapsed = false;\n    }\n    if (yMin > yMax) {\n      console.warn(\n        \"axis.min cannot be greater than axis.max: swapping min and max\"\n      );\n      const temp = yMax;\n      yMax = yMin;\n      yMin = temp;\n    } else if (yMin === yMax) {\n      yMin = yMin === 0 ? 0 : yMin - 1;\n      yMax = yMax === 0 ? 2 : yMax + 1;\n    }\n    const result = [];\n    if (ticks < 1) {\n      ticks = 1;\n    }\n    let tiks = ticks;\n    let range = Math.abs(yMax - yMin);\n    const proximityRatio = 0.15;\n    if (!gotMin && yMin > 0 && yMin / range < proximityRatio) {\n      yMin = 0;\n      gotMin = true;\n    }\n    if (!gotMax && yMax < 0 && -yMax / range < proximityRatio) {\n      yMax = 0;\n      gotMax = true;\n    }\n    range = Math.abs(yMax - yMin);\n    let stepSize = range / tiks;\n    let niceStep = stepSize;\n    const mag = Math.floor(Math.log10(niceStep));\n    const magPow = Math.pow(10, mag);\n    let magMsd = Math.ceil(niceStep / magPow);\n    magMsd = NICE_SCALE_ALLOWED_MAG_MSD[gl.yValueDecimal === 0 ? 0 : 1][magMsd];\n    niceStep = magMsd * magPow;\n    stepSize = niceStep;\n    if (gl.isBarHorizontal && axisCnf.stepSize && axisCnf.type !== \"datetime\") {\n      stepSize = axisCnf.stepSize;\n      gotStepSize = true;\n    } else if (gotStepSize) {\n      stepSize = axisCnf.stepSize;\n    }\n    if (gotStepSize) {\n      if (axisCnf.forceNiceScale) {\n        const stepMag = Math.floor(Math.log10(stepSize));\n        stepSize *= Math.pow(10, mag - stepMag);\n      }\n    }\n    if (gotMin && gotMax) {\n      let crudeStep = range / tiks;\n      if (gotTickAmount) {\n        if (gotStepSize) {\n          if (Utils$1.mod(range, stepSize) != 0) {\n            const gcdStep = Utils$1.getGCD(stepSize, crudeStep);\n            if (crudeStep / gcdStep < 10) {\n              stepSize = gcdStep;\n            } else {\n              stepSize = crudeStep;\n            }\n          } else {\n            if (Utils$1.mod(stepSize, crudeStep) == 0) {\n              stepSize = crudeStep;\n            } else {\n              crudeStep = stepSize;\n              gotTickAmount = false;\n            }\n          }\n        } else {\n          stepSize = crudeStep;\n        }\n      } else {\n        if (gotStepSize) {\n          if (Utils$1.mod(range, stepSize) == 0) {\n            crudeStep = stepSize;\n          } else {\n            stepSize = crudeStep;\n          }\n        } else {\n          if (Utils$1.mod(range, stepSize) == 0) {\n            crudeStep = stepSize;\n          } else {\n            tiks = Math.ceil(range / stepSize);\n            crudeStep = range / tiks;\n            const gcdStep = Utils$1.getGCD(range, stepSize);\n            if (range / gcdStep < maxTicks) {\n              crudeStep = gcdStep;\n            }\n            stepSize = crudeStep;\n          }\n        }\n      }\n      tiks = Math.round(range / stepSize);\n    } else {\n      if (!gotMin && !gotMax) {\n        if (gl.isMultipleYAxis && gotTickAmount) {\n          const tMin = stepSize * Math.floor(yMin / stepSize);\n          let tMax = tMin + stepSize * tiks;\n          if (tMax < yMax) {\n            stepSize *= 2;\n          }\n          yMin = tMin;\n          tMax = yMax;\n          yMax = yMin + stepSize * tiks;\n          range = Math.abs(yMax - yMin);\n          if (yMin > 0 && yMin < Math.abs(tMax - yMax)) {\n            yMin = 0;\n            yMax = stepSize * tiks;\n          }\n          if (yMax < 0 && -yMax < Math.abs(tMin - yMin)) {\n            yMax = 0;\n            yMin = -stepSize * tiks;\n          }\n        } else {\n          yMin = stepSize * Math.floor(yMin / stepSize);\n          yMax = stepSize * Math.ceil(yMax / stepSize);\n        }\n      } else if (gotMax) {\n        if (gotTickAmount) {\n          yMin = yMax - stepSize * tiks;\n        } else {\n          const yMinPrev = yMin;\n          yMin = stepSize * Math.floor(yMin / stepSize);\n          if (Math.abs(yMax - yMin) / Utils$1.getGCD(range, stepSize) > maxTicks) {\n            yMin = yMax - stepSize * ticks;\n            yMin += stepSize * Math.floor((yMinPrev - yMin) / stepSize);\n          }\n        }\n      } else if (gotMin) {\n        if (gotTickAmount) {\n          yMax = yMin + stepSize * tiks;\n        } else {\n          const yMaxPrev = yMax;\n          yMax = stepSize * Math.ceil(yMax / stepSize);\n          if (Math.abs(yMax - yMin) / Utils$1.getGCD(range, stepSize) > maxTicks) {\n            yMax = yMin + stepSize * ticks;\n            yMax += stepSize * Math.ceil((yMaxPrev - yMax) / stepSize);\n          }\n        }\n      }\n      range = Math.abs(yMax - yMin);\n      stepSize = Utils$1.getGCD(range, stepSize);\n      tiks = Math.round(range / stepSize);\n    }\n    if (!gotTickAmount && !(gotMin || gotMax)) {\n      tiks = Math.ceil((range - jsPrecision) / (stepSize + jsPrecision));\n      if (tiks > 16 && Utils$1.getPrimeFactors(tiks).length < 2) {\n        tiks++;\n      }\n    }\n    if (!gotTickAmount && axisCnf.forceNiceScale && gl.yValueDecimal === 0 && tiks > range) {\n      tiks = range;\n      stepSize = Math.round(range / tiks);\n    }\n    if (tiks > maxTicks && (!(gotTickAmount || gotStepSize) || axisCnf.forceNiceScale)) {\n      const pf = Utils$1.getPrimeFactors(tiks);\n      const last = pf.length - 1;\n      let tt = tiks;\n      reduceLoop: for (var xFactors = 0; xFactors < last; xFactors++) {\n        for (var lowest = 0; lowest <= last - xFactors; lowest++) {\n          const stop = Math.min(lowest + xFactors, last);\n          let t = tt;\n          let div = 1;\n          for (var next = lowest; next <= stop; next++) {\n            div *= pf[next];\n          }\n          t /= div;\n          if (t < maxTicks) {\n            tt = t;\n            break reduceLoop;\n          }\n        }\n      }\n      if (tt === tiks) {\n        stepSize = range;\n      } else {\n        stepSize = range / tt;\n      }\n      tiks = Math.round(range / stepSize);\n    }\n    if (gl.isMultipleYAxis && gl.multiAxisTickAmount == 0 && gl.ignoreYAxisIndexes.indexOf(index) < 0) {\n      gl.multiAxisTickAmount = tiks;\n    }\n    let val = yMin - stepSize;\n    const err = stepSize * jsPrecision;\n    do {\n      val += stepSize;\n      result.push(Utils$1.stripNumber(val, 7));\n    } while (yMax - val > err);\n    return {\n      result,\n      niceMin: result[0],\n      niceMax: result[result.length - 1]\n    };\n  }\n  /** @param {number} yMin @param {number} yMax @param {number|string} ticks @param {number} index @param {number|undefined} step */\n  linearScale(yMin, yMax, ticks = 10, index = 0, step = void 0) {\n    const range = Math.abs(yMax - yMin);\n    let result = [];\n    if (yMin === yMax) {\n      result = [yMin];\n      return {\n        result,\n        niceMin: result[0],\n        niceMax: result[result.length - 1]\n      };\n    }\n    ticks = this._adjustTicksForSmallRange(ticks, index, range);\n    if (\n      /** @type {any} */\n      ticks === \"dataPoints\"\n    ) {\n      ticks = this.w.globals.dataPoints - 1;\n    }\n    const ticksNum = (\n      /** @type {number} */\n      ticks\n    );\n    if (!step) {\n      step = range / ticksNum;\n    }\n    const MIN_PRECISION = 2;\n    if (step !== 0 && isFinite(step)) {\n      const magnitude = Math.floor(Math.log10(Math.abs(step)));\n      const precision = Math.max(MIN_PRECISION, -magnitude + MIN_PRECISION);\n      const multiplier = Math.pow(10, precision);\n      step = Math.round((step + Number.EPSILON) * multiplier) / multiplier;\n    }\n    let tickCount = ticks === Number.MAX_VALUE ? 5 : ticksNum;\n    if (ticks === Number.MAX_VALUE) {\n      step = 1;\n    }\n    let v = yMin;\n    while (tickCount >= 0) {\n      result.push(v);\n      v = Utils$1.preciseAddition(v, step);\n      tickCount -= 1;\n    }\n    return {\n      result,\n      niceMin: result[0],\n      niceMax: result[result.length - 1]\n    };\n  }\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   * @param {number} base\n   */\n  logarithmicScaleNice(yMin, yMax, base) {\n    if (yMax <= 0) yMax = Math.max(yMin, base);\n    if (yMin <= 0) yMin = Math.min(yMax, base);\n    const logs = [];\n    const logMax = Math.ceil(Math.log(yMax) / Math.log(base) + 1);\n    const logMin = Math.floor(Math.log(yMin) / Math.log(base));\n    for (let i = logMin; i < logMax; i++) {\n      logs.push(Math.pow(base, i));\n    }\n    return {\n      result: logs,\n      niceMin: logs[0],\n      niceMax: logs[logs.length - 1]\n    };\n  }\n  /**\n   * @param {number} yMin\n   * @param {number} yMax\n   * @param {number} base\n   */\n  logarithmicScale(yMin, yMax, base) {\n    if (yMax <= 0) yMax = Math.max(yMin, base);\n    if (yMin <= 0) yMin = Math.min(yMax, base);\n    const logs = [];\n    const logMax = Math.log(yMax) / Math.log(base);\n    const logMin = Math.log(yMin) / Math.log(base);\n    const logRange = logMax - logMin;\n    const ticks = Math.round(logRange);\n    const logTickSpacing = logRange / ticks;\n    for (let i = 0, logTick = logMin; i < ticks; i++, logTick += logTickSpacing) {\n      logs.push(Math.pow(base, logTick));\n    }\n    logs.push(Math.pow(base, logMax));\n    return {\n      result: logs,\n      niceMin: yMin,\n      niceMax: yMax\n    };\n  }\n  /**\n   * @param {number | string} ticks\n   * @param {number} index\n   * @param {number} range\n   */\n  _adjustTicksForSmallRange(ticks, index, range) {\n    let newTicks = ticks;\n    if (typeof index !== \"undefined\" && this.w.config.yaxis[index].labels.formatter && this.w.config.yaxis[index].tickAmount === void 0) {\n      const formattedVal = Number(\n        this.w.config.yaxis[index].labels.formatter(1)\n      );\n      if (Utils$1.isNumber(formattedVal) && this.w.globals.yValueDecimal === 0) {\n        newTicks = Math.ceil(range);\n      }\n    }\n    return newTicks < ticks ? newTicks : ticks;\n  }\n  /**\n   * @param {number} index\n   * @param {number} minY\n   * @param {number} maxY\n   */\n  setYScaleForIndex(index, minY, maxY) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const y = gl.isBarHorizontal ? cnf.xaxis : cnf.yaxis[index];\n    if (typeof gl.yAxisScale[index] === \"undefined\") {\n      gl.yAxisScale[index] = [];\n    }\n    const range = Math.abs(maxY - minY);\n    if (y.logarithmic && range <= 5) {\n      gl.invalidLogScale = true;\n    }\n    if (y.logarithmic && range > 5) {\n      gl.allSeriesCollapsed = false;\n      gl.yAxisScale[index] = y.forceNiceScale ? this.logarithmicScaleNice(minY, maxY, y.logBase) : this.logarithmicScale(minY, maxY, y.logBase);\n    } else {\n      if (maxY === -Number.MAX_VALUE || !Utils$1.isNumber(maxY) || minY === Number.MAX_VALUE || !Utils$1.isNumber(minY)) {\n        gl.yAxisScale[index] = this.niceScale(\n          Number.MIN_VALUE,\n          0,\n          index\n        );\n      } else {\n        gl.allSeriesCollapsed = false;\n        gl.yAxisScale[index] = this.niceScale(\n          minY,\n          maxY,\n          index\n        );\n      }\n    }\n  }\n  /**\n   * @param {number} minX\n   * @param {number} maxX\n   */\n  setXScale(minX, maxX) {\n    const w = this.w;\n    const gl = w.globals;\n    if (maxX === -Number.MAX_VALUE || !Utils$1.isNumber(maxX)) {\n      gl.xAxisScale = this.linearScale(0, 10, 10);\n    } else {\n      const ticks = gl.xTickAmount;\n      gl.xAxisScale = this.linearScale(\n        minX,\n        maxX,\n        ticks,\n        0,\n        w.config.xaxis.max === void 0 ? w.config.xaxis.stepSize : void 0\n      );\n    }\n    return gl.xAxisScale;\n  }\n  scaleMultipleYAxes() {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    this.coreUtils.setSeriesYAxisMappings();\n    const axisSeriesMap = gl.seriesYAxisMap;\n    const minYArr = gl.minYArr;\n    const maxYArr = gl.maxYArr;\n    const alignZeroParticipants = [];\n    const canAlignZero = !gl.isBarHorizontal;\n    gl.allSeriesCollapsed = true;\n    gl.barGroups = [];\n    axisSeriesMap.forEach((axisSeries, ai) => {\n      const groupNames = [];\n      axisSeries.forEach((as) => {\n        var _a;\n        const group = (\n          /** @type {Record<string,any>} */\n          (_a = cnf.series[as]) == null ? void 0 : _a.group\n        );\n        if (groupNames.indexOf(group) < 0) {\n          groupNames.push(group);\n        }\n      });\n      if (axisSeries.length > 0) {\n        let minY = Number.MAX_VALUE;\n        let maxY = -Number.MAX_VALUE;\n        let lowestY = minY;\n        let highestY = maxY;\n        let seriesType;\n        let seriesGroupName;\n        if (cnf.chart.stacked) {\n          const mapSeries = new Array(gl.dataPoints).fill(0);\n          const sumSeries = [];\n          const posSeries = [];\n          const negSeries = [];\n          groupNames.forEach(() => {\n            sumSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n            posSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n            negSeries.push(mapSeries.map(() => Number.MIN_VALUE));\n          });\n          for (let i = 0; i < axisSeries.length; i++) {\n            if (!seriesType && /** @type {Record<string,any>} */\n            cnf.series[axisSeries[i]].type) {\n              seriesType = /** @type {Record<string,any>} */\n              cnf.series[axisSeries[i]].type;\n            }\n            const si = axisSeries[i];\n            if (\n              /** @type {Record<string,any>} */\n              cnf.series[si].group\n            ) {\n              seriesGroupName = /** @type {Record<string,any>} */\n              cnf.series[si].group;\n            } else {\n              seriesGroupName = \"axis-\".concat(ai.toString());\n            }\n            const collapsed = !(gl.collapsedSeriesIndices.indexOf(si) < 0 && gl.ancillaryCollapsedSeriesIndices.indexOf(si) < 0);\n            if (!collapsed) {\n              gl.allSeriesCollapsed = false;\n              groupNames.forEach((gn, gni) => {\n                if (\n                  /** @type {Record<string,any>} */\n                  cnf.series[si].group === gn\n                ) {\n                  for (let j = 0; j < this.w.seriesData.series[si].length; j++) {\n                    const val = this.w.seriesData.series[si][j];\n                    if (val >= 0) {\n                      posSeries[gni][j] += val;\n                    } else {\n                      negSeries[gni][j] += val;\n                    }\n                    sumSeries[gni][j] += val;\n                    lowestY = Math.min(lowestY, val);\n                    highestY = Math.max(highestY, val);\n                  }\n                }\n              });\n            }\n            if (seriesType === \"bar\" || seriesType === \"column\") {\n              gl.barGroups.push(seriesGroupName);\n            }\n          }\n          if (!seriesType) {\n            seriesType = cnf.chart.type;\n          }\n          if (seriesType === \"bar\" || seriesType === \"column\") {\n            groupNames.forEach((gn, gni) => {\n              minY = Math.min(minY, Math.min.apply(null, negSeries[gni]));\n              maxY = Math.max(maxY, Math.max.apply(null, posSeries[gni]));\n            });\n          } else {\n            groupNames.forEach((gn, gni) => {\n              lowestY = Math.min(lowestY, Math.min.apply(null, sumSeries[gni]));\n              highestY = Math.max(\n                highestY,\n                Math.max.apply(null, sumSeries[gni])\n              );\n            });\n            minY = lowestY;\n            maxY = highestY;\n          }\n          if (minY === Number.MIN_VALUE && maxY === Number.MIN_VALUE) {\n            maxY = -Number.MAX_VALUE;\n          }\n        } else {\n          for (let i = 0; i < axisSeries.length; i++) {\n            const si = axisSeries[i];\n            minY = Math.min(minY, minYArr[si]);\n            maxY = Math.max(maxY, maxYArr[si]);\n            const collapsed = !(gl.collapsedSeriesIndices.indexOf(si) < 0 && gl.ancillaryCollapsedSeriesIndices.indexOf(si) < 0);\n            if (!collapsed) {\n              gl.allSeriesCollapsed = false;\n            }\n          }\n        }\n        if (cnf.yaxis[ai].min !== void 0) {\n          if (typeof cnf.yaxis[ai].min === \"function\") {\n            minY = cnf.yaxis[ai].min(minY);\n          } else {\n            minY = cnf.yaxis[ai].min;\n          }\n        }\n        if (cnf.yaxis[ai].max !== void 0) {\n          if (typeof cnf.yaxis[ai].max === \"function\") {\n            maxY = cnf.yaxis[ai].max(maxY);\n          } else {\n            maxY = cnf.yaxis[ai].max;\n          }\n        }\n        gl.barGroups = gl.barGroups.filter((v, i, a) => a.indexOf(v) === i);\n        const yaxe = cnf.yaxis[ai];\n        const participates = canAlignZero && yaxe.alignZero === true && !yaxe.logarithmic && yaxe.min === void 0 && yaxe.max === void 0 && gl.ignoreYAxisIndexes.indexOf(ai) < 0 && Utils$1.isNumber(minY) && Utils$1.isNumber(maxY);\n        if (participates) {\n          alignZeroParticipants.push({ ai, minY, maxY });\n        } else {\n          this.setYScaleForIndex(ai, minY, maxY);\n          axisSeries.forEach((si) => {\n            minYArr[si] = gl.yAxisScale[ai].niceMin;\n            maxYArr[si] = gl.yAxisScale[ai].niceMax;\n          });\n        }\n      } else {\n        this.setYScaleForIndex(ai, 0, -Number.MAX_VALUE);\n      }\n    });\n    if (alignZeroParticipants.length >= 2) {\n      alignZeroParticipants.forEach((p) => {\n        this.setYScaleForIndex(p.ai, p.minY, p.maxY);\n        axisSeriesMap[p.ai].forEach((si) => {\n          minYArr[si] = gl.yAxisScale[p.ai].niceMin;\n          maxYArr[si] = gl.yAxisScale[p.ai].niceMax;\n        });\n      });\n      let targetRatio = 0;\n      alignZeroParticipants.forEach((p) => {\n        const scale = gl.yAxisScale[p.ai];\n        const range = scale.niceMax - scale.niceMin;\n        if (range > 0) {\n          const r = -scale.niceMin / range;\n          if (r > targetRatio) targetRatio = r;\n        }\n      });\n      if (targetRatio > 1) targetRatio = 1;\n      if (targetRatio < 0) targetRatio = 0;\n      const niceRoundUp = (raw) => {\n        if (raw <= 0) return 1;\n        const mag = Math.floor(Math.log10(raw));\n        const magPow = Math.pow(10, mag);\n        const msd = raw / magPow;\n        let mult;\n        if (msd <= 1 + 1e-9) mult = 1;\n        else if (msd <= 2 + 1e-9) mult = 2;\n        else if (msd <= 2.5 + 1e-9) mult = 2.5;\n        else if (msd <= 5 + 1e-9) mult = 5;\n        else mult = 10;\n        return mult * magPow;\n      };\n      alignZeroParticipants.forEach((p) => {\n        const scale = gl.yAxisScale[p.ai];\n        if (!scale.result || scale.result.length < 2) return;\n        const range = scale.niceMax - scale.niceMin;\n        if (range <= 0) return;\n        const r = -scale.niceMin / range;\n        if (Math.abs(r - targetRatio) <= 1e-9) return;\n        const extendMin = r < targetRatio && targetRatio < 1 - 1e-9;\n        const extendMaxOnly = !extendMin && r > targetRatio && targetRatio > 1e-9;\n        if (!extendMin && !extendMaxOnly) return;\n        const targetNiceMin = extendMin ? -targetRatio * scale.niceMax / (1 - targetRatio) : scale.niceMin;\n        const targetNiceMax = extendMaxOnly ? -scale.niceMin * (1 - targetRatio) / targetRatio : scale.niceMax;\n        const newRange = targetNiceMax - targetNiceMin;\n        if (newRange <= 0) return;\n        const desiredTicks = Math.max(scale.result.length, 5);\n        const newStep = niceRoundUp(newRange / Math.max(desiredTicks - 1, 1));\n        if (newStep <= 0) return;\n        let newNiceMin;\n        let newNiceMax;\n        if (extendMin) {\n          newNiceMin = Math.floor(targetNiceMin / newStep + 1e-9) * newStep;\n          const requiredMax = targetRatio > 1e-9 ? newNiceMin * (targetRatio - 1) / targetRatio : scale.niceMax;\n          const maxNeeded = Math.max(requiredMax, scale.niceMax);\n          newNiceMax = Math.ceil(maxNeeded / newStep - 1e-9) * newStep;\n        } else {\n          newNiceMax = Math.ceil(targetNiceMax / newStep - 1e-9) * newStep;\n          const requiredMin = targetRatio < 1 - 1e-9 ? -targetRatio * newNiceMax / (1 - targetRatio) : scale.niceMin;\n          const minNeeded = Math.min(requiredMin, scale.niceMin);\n          newNiceMin = Math.floor(minNeeded / newStep + 1e-9) * newStep;\n        }\n        scale.result = [];\n        for (let v = newNiceMin; v <= newNiceMax + newStep * 1e-9; v = Utils$1.preciseAddition(v, newStep)) {\n          scale.result.push(Utils$1.stripNumber(v, 7));\n        }\n        scale.niceMin = newNiceMin;\n        scale.niceMax = newNiceMax;\n        axisSeriesMap[p.ai].forEach((si) => {\n          minYArr[si] = scale.niceMin;\n          maxYArr[si] = scale.niceMax;\n        });\n      });\n    } else if (alignZeroParticipants.length === 1) {\n      const p = alignZeroParticipants[0];\n      this.setYScaleForIndex(p.ai, p.minY, p.maxY);\n      axisSeriesMap[p.ai].forEach((si) => {\n        minYArr[si] = gl.yAxisScale[p.ai].niceMin;\n        maxYArr[si] = gl.yAxisScale[p.ai].niceMax;\n      });\n    }\n  }\n}\nclass Range {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.scales = new Scales(this.w);\n  }\n  init() {\n    this.setYRange();\n    this.setXRange();\n    this.setZRange();\n  }\n  /**\n   * @param {number} startingSeriesIndex\n   * @param {number | null} [endingSeriesIndex]\n   */\n  getMinYMaxY(startingSeriesIndex, lowestY = Number.MAX_VALUE, highestY = -Number.MAX_VALUE, endingSeriesIndex = null) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    let maxY = -Number.MAX_VALUE;\n    let minY = Number.MIN_VALUE;\n    if (endingSeriesIndex === null) {\n      endingSeriesIndex = startingSeriesIndex + 1;\n    }\n    const series = this.w.seriesData.series;\n    let seriesMin = series;\n    let seriesMax = series;\n    if (cnf.chart.type === \"candlestick\") {\n      seriesMin = this.w.candleData.seriesCandleL;\n      seriesMax = this.w.candleData.seriesCandleH;\n    } else if (cnf.chart.type === \"boxPlot\") {\n      seriesMin = this.w.candleData.seriesCandleO;\n      seriesMax = this.w.candleData.seriesCandleC;\n    } else if (cnf.chart.type === \"violin\") {\n      seriesMin = this.w.violinData.seriesViolinMin;\n      seriesMax = this.w.violinData.seriesViolinMax;\n    } else if (this.w.axisFlags.isRangeData) {\n      seriesMin = this.w.rangeData.seriesRangeStart;\n      seriesMax = this.w.rangeData.seriesRangeEnd;\n    }\n    let autoScaleYaxis = false;\n    if (this.w.seriesData.seriesX.length >= endingSeriesIndex) {\n      const brush = (\n        /** @type {any} */\n        (_a = gl.brushSource) == null ? void 0 : _a.w.config.chart.brush\n      );\n      if (cnf.chart.zoom.enabled && cnf.chart.zoom.autoScaleYaxis || (brush == null ? void 0 : brush.enabled) && (brush == null ? void 0 : brush.autoScaleYaxis)) {\n        autoScaleYaxis = true;\n      }\n    }\n    for (let i = startingSeriesIndex; i < endingSeriesIndex; i++) {\n      gl.dataPoints = Math.max(gl.dataPoints, series[i].length);\n      const seriesType = (\n        /** @type {Record<string,any>} */\n        cnf.series[i].type\n      );\n      if (this.w.labelData.categoryLabels.length) {\n        gl.dataPoints = this.w.labelData.categoryLabels.filter(\n          (label) => typeof label !== \"undefined\"\n        ).length;\n      }\n      if (this.w.labelData.labels.length && cnf.xaxis.type !== \"datetime\" && /**\n       * @param {number} a\n       * @param {number[]} c\n       */\n      this.w.seriesData.series.reduce((a, c) => a + c.length, 0) !== 0) {\n        gl.dataPoints = Math.max(gl.dataPoints, this.w.labelData.labels.length);\n      }\n      let firstXIndex = 0;\n      let lastXIndex = series[i].length - 1;\n      if (autoScaleYaxis) {\n        if (cnf.xaxis.min) {\n          for (; firstXIndex < lastXIndex && this.w.seriesData.seriesX[i][firstXIndex] < cnf.xaxis.min; firstXIndex++) {\n          }\n        }\n        if (cnf.xaxis.max) {\n          for (; lastXIndex > firstXIndex && this.w.seriesData.seriesX[i][lastXIndex] > cnf.xaxis.max; lastXIndex--) {\n          }\n        }\n      }\n      for (let j = firstXIndex; j <= lastXIndex && j < this.w.seriesData.series[i].length; j++) {\n        let val = series[i][j];\n        if (val !== null && Utils$1.isNumber(val)) {\n          if (typeof ((_b = seriesMax[i]) == null ? void 0 : _b[j]) !== \"undefined\") {\n            maxY = Math.max(maxY, seriesMax[i][j]);\n            lowestY = Math.min(lowestY, seriesMax[i][j]);\n          }\n          if (typeof ((_c = seriesMin[i]) == null ? void 0 : _c[j]) !== \"undefined\") {\n            lowestY = Math.min(lowestY, seriesMin[i][j]);\n            highestY = Math.max(highestY, seriesMin[i][j]);\n          }\n          switch (seriesType) {\n            case \"candlestick\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleH[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleL[i][j]\n                  );\n                }\n              }\n              break;\n            case \"boxPlot\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleC[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleO[i][j]\n                  );\n                }\n              }\n              break;\n            case \"violin\":\n              {\n                if (typeof ((_d = this.w.violinData.seriesViolinMax[i]) == null ? void 0 : _d[j]) !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.violinData.seriesViolinMax[i][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.violinData.seriesViolinMin[i][j]\n                  );\n                }\n              }\n              break;\n          }\n          if (seriesType && seriesType !== \"candlestick\" && seriesType !== \"boxPlot\" && seriesType !== \"violin\" && seriesType !== \"rangeArea\" && seriesType !== \"rangeBar\") {\n            maxY = Math.max(maxY, this.w.seriesData.series[i][j]);\n            lowestY = Math.min(lowestY, this.w.seriesData.series[i][j]);\n          }\n          if (this.w.seriesData.seriesGoals[i] && this.w.seriesData.seriesGoals[i][j] && Array.isArray(this.w.seriesData.seriesGoals[i][j])) {\n            this.w.seriesData.seriesGoals[i][j].forEach(\n              (g) => {\n                maxY = Math.max(maxY, g.value);\n                lowestY = Math.min(lowestY, g.value);\n              }\n            );\n          }\n          if (this.w.config.chart.type === \"boxPlot\" || seriesType === \"boxPlot\") {\n            const boxPts = (_f = (_e = this.w.candleData.seriesBoxPoints) == null ? void 0 : _e[i]) == null ? void 0 : _f[j];\n            if (boxPts) {\n              for (let p = 0; p < boxPts.length; p++) {\n                const pv = boxPts[p];\n                if (typeof pv === \"number\") {\n                  maxY = Math.max(maxY, pv);\n                  lowestY = Math.min(lowestY, pv);\n                }\n              }\n            }\n          }\n          highestY = maxY;\n          val = Utils$1.noExponents(val);\n          if (Utils$1.isFloat(val)) {\n            gl.yValueDecimal = Math.max(\n              gl.yValueDecimal,\n              val.toString().split(\".\")[1].length\n            );\n          }\n          if (minY > ((_g = seriesMin[i]) == null ? void 0 : _g[j]) && ((_h = seriesMin[i]) == null ? void 0 : _h[j]) < 0) {\n            minY = seriesMin[i][j];\n          }\n        } else {\n          gl.hasNullValues = true;\n        }\n      }\n      if (seriesType === \"bar\" || seriesType === \"column\") {\n        if (minY < 0 && maxY < 0) {\n          maxY = 0;\n          highestY = Math.max(highestY, 0);\n        }\n        if (minY === Number.MIN_VALUE) {\n          minY = 0;\n          lowestY = Math.min(lowestY, 0);\n        }\n      }\n    }\n    if (cnf.chart.type === \"rangeBar\" && this.w.rangeData.seriesRangeStart.length && gl.isBarHorizontal) {\n      minY = lowestY;\n    }\n    if (cnf.chart.type === \"bar\") {\n      if (minY < 0 && maxY < 0) {\n        maxY = 0;\n      }\n      if (minY === Number.MIN_VALUE) {\n        minY = 0;\n      }\n    }\n    return {\n      minY,\n      maxY,\n      lowestY,\n      highestY\n    };\n  }\n  setYRange() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    gl.maxY = -Number.MAX_VALUE;\n    gl.minY = Number.MIN_VALUE;\n    let lowestYInAllSeries = Number.MAX_VALUE;\n    let minYMaxY;\n    if (gl.isMultipleYAxis) {\n      lowestYInAllSeries = Number.MAX_VALUE;\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        minYMaxY = this.getMinYMaxY(i);\n        gl.minYArr[i] = minYMaxY.lowestY;\n        gl.maxYArr[i] = minYMaxY.highestY;\n        lowestYInAllSeries = Math.min(lowestYInAllSeries, minYMaxY.lowestY);\n      }\n    }\n    minYMaxY = this.getMinYMaxY(\n      0,\n      lowestYInAllSeries,\n      void 0,\n      this.w.seriesData.series.length\n    );\n    if (cnf.chart.type === \"bar\") {\n      gl.minY = minYMaxY.minY;\n      gl.maxY = minYMaxY.maxY;\n    } else {\n      gl.minY = minYMaxY.lowestY;\n      gl.maxY = minYMaxY.highestY;\n    }\n    lowestYInAllSeries = minYMaxY.lowestY;\n    if (cnf.chart.stacked) {\n      this._setStackedMinMax();\n    }\n    if (cnf.chart.type === \"line\" || cnf.chart.type === \"area\" || cnf.chart.type === \"scatter\" || cnf.chart.type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || cnf.chart.type === \"violin\" || cnf.chart.type === \"rangeBar\" && !gl.isBarHorizontal) {\n      if (gl.minY === Number.MIN_VALUE && lowestYInAllSeries !== -Number.MAX_VALUE && lowestYInAllSeries !== gl.maxY) {\n        gl.minY = lowestYInAllSeries;\n      }\n    } else {\n      gl.minY = gl.minY !== Number.MIN_VALUE ? Math.min(minYMaxY.minY, gl.minY) : minYMaxY.minY;\n    }\n    cnf.yaxis.forEach((yaxe, index) => {\n      if (yaxe.max !== void 0) {\n        if (typeof yaxe.max === \"number\") {\n          gl.maxYArr[index] = yaxe.max;\n        } else if (typeof yaxe.max === \"function\") {\n          gl.maxYArr[index] = yaxe.max(\n            gl.isMultipleYAxis ? gl.maxYArr[index] : gl.maxY\n          );\n        }\n        gl.maxY = gl.maxYArr[index];\n      }\n      if (yaxe.min !== void 0) {\n        if (typeof yaxe.min === \"number\") {\n          gl.minYArr[index] = yaxe.min;\n        } else if (typeof yaxe.min === \"function\") {\n          gl.minYArr[index] = yaxe.min(\n            gl.isMultipleYAxis ? gl.minYArr[index] === Number.MIN_VALUE ? 0 : gl.minYArr[index] : gl.minY\n          );\n        }\n        gl.minY = gl.minYArr[index];\n      }\n    });\n    if (gl.isBarHorizontal) {\n      const minmax = [\"min\", \"max\"];\n      minmax.forEach((m) => {\n        if (cnf.xaxis[m] !== void 0 && typeof cnf.xaxis[m] === \"number\") {\n          m === \"min\" ? gl.minY = cnf.xaxis[m] : gl.maxY = cnf.xaxis[m];\n        }\n      });\n    }\n    if (gl.isMultipleYAxis) {\n      this.scales.scaleMultipleYAxes();\n      gl.minY = lowestYInAllSeries;\n    } else {\n      this.scales.setYScaleForIndex(0, gl.minY, gl.maxY);\n      gl.minY = gl.yAxisScale[0].niceMin;\n      gl.maxY = gl.yAxisScale[0].niceMax;\n      gl.minYArr[0] = gl.minY;\n      gl.maxYArr[0] = gl.maxY;\n    }\n    gl.barGroups = [];\n    gl.lineGroups = [];\n    gl.areaGroups = [];\n    cnf.series.forEach((s) => {\n      const _s = (\n        /** @type {any} */\n        s\n      );\n      const type = _s.type || cnf.chart.type;\n      switch (type) {\n        case \"bar\":\n        case \"column\":\n          gl.barGroups.push(_s.group);\n          break;\n        case \"line\":\n          gl.lineGroups.push(_s.group);\n          break;\n        case \"area\":\n          gl.areaGroups.push(_s.group);\n          break;\n      }\n    });\n    gl.barGroups = gl.barGroups.filter((v, i, a) => a.indexOf(v) === i);\n    gl.lineGroups = gl.lineGroups.filter((v, i, a) => a.indexOf(v) === i);\n    gl.areaGroups = gl.areaGroups.filter((v, i, a) => a.indexOf(v) === i);\n    return {\n      minY: gl.minY,\n      maxY: gl.maxY,\n      minYArr: gl.minYArr,\n      maxYArr: gl.maxYArr,\n      yAxisScale: gl.yAxisScale\n    };\n  }\n  setXRange() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const isXNumeric = cnf.xaxis.type === \"numeric\" || cnf.xaxis.type === \"datetime\" || cnf.xaxis.type === \"category\" && !this.w.axisFlags.noLabelsProvided || this.w.axisFlags.noLabelsProvided || this.w.axisFlags.isXNumeric;\n    const getInitialMinXMaxX = () => {\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        if (this.w.labelData.labels[i]) {\n          for (let j = 0; j < this.w.labelData.labels[i].length; j++) {\n            if (this.w.labelData.labels[i][j] !== null && Utils$1.isNumber(this.w.labelData.labels[i][j])) {\n              gl.maxX = Math.max(\n                gl.maxX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n              gl.initialMaxX = Math.max(\n                gl.maxX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n              gl.minX = Math.min(\n                gl.minX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n              gl.initialMinX = Math.min(\n                gl.minX,\n                /** @type {number} */\n                /** @type {any} */\n                this.w.labelData.labels[i][j]\n              );\n            }\n          }\n        }\n      }\n    };\n    if (this.w.axisFlags.isXNumeric) {\n      getInitialMinXMaxX();\n    }\n    if (this.w.axisFlags.noLabelsProvided) {\n      if (cnf.xaxis.categories.length === 0) {\n        gl.maxX = /** @type {any} */\n        this.w.labelData.labels[this.w.labelData.labels.length - 1];\n        gl.initialMaxX = /** @type {any} */\n        this.w.labelData.labels[this.w.labelData.labels.length - 1];\n        gl.minX = 1;\n        gl.initialMinX = 1;\n      }\n    }\n    if (this.w.axisFlags.isXNumeric || this.w.axisFlags.noLabelsProvided || this.w.axisFlags.dataFormatXNumeric) {\n      let ticks = 10;\n      if (cnf.xaxis.tickAmount === void 0) {\n        ticks = Math.round(gl.svgWidth / 150);\n        if (cnf.xaxis.type === \"numeric\" && gl.dataPoints < 30) {\n          ticks = gl.dataPoints - 1;\n        }\n        if (ticks > gl.dataPoints && gl.dataPoints !== 0) {\n          ticks = gl.dataPoints - 1;\n        }\n      } else if (cnf.xaxis.tickAmount === \"dataPoints\") {\n        if (this.w.seriesData.series.length > 1) {\n          ticks = this.w.seriesData.series[gl.maxValsInArrayIndex].length - 1;\n        }\n        if (this.w.axisFlags.isXNumeric) {\n          const diff = Math.round(gl.maxX - gl.minX);\n          if (diff < 30) {\n            ticks = diff;\n          }\n        }\n      } else {\n        ticks = cnf.xaxis.tickAmount;\n      }\n      gl.xTickAmount = ticks;\n      if (cnf.xaxis.max !== void 0 && typeof cnf.xaxis.max === \"number\") {\n        gl.maxX = cnf.xaxis.max;\n      }\n      if (cnf.xaxis.min !== void 0 && typeof cnf.xaxis.min === \"number\") {\n        gl.minX = cnf.xaxis.min;\n      }\n      if (cnf.xaxis.range !== void 0) {\n        gl.minX = gl.maxX - cnf.xaxis.range;\n      }\n      if (gl.minX !== Number.MAX_VALUE && gl.maxX !== -Number.MAX_VALUE) {\n        if (cnf.xaxis.convertedCatToNumeric && !this.w.axisFlags.dataFormatXNumeric) {\n          const catScale = [];\n          for (let i = gl.minX - 1; i < gl.maxX; i++) {\n            catScale.push(i + 1);\n          }\n          gl.xAxisScale = {\n            result: catScale,\n            niceMin: catScale[0],\n            niceMax: catScale[catScale.length - 1]\n          };\n        } else {\n          gl.xAxisScale = this.scales.setXScale(gl.minX, gl.maxX);\n        }\n      } else {\n        gl.xAxisScale = this.scales.linearScale(\n          0,\n          ticks,\n          ticks,\n          0,\n          cnf.xaxis.stepSize\n        );\n        if (this.w.axisFlags.noLabelsProvided && this.w.labelData.labels.length > 0) {\n          gl.xAxisScale = this.scales.linearScale(\n            1,\n            this.w.labelData.labels.length,\n            ticks - 1,\n            0,\n            cnf.xaxis.stepSize\n          );\n          this.w.seriesData.seriesX = /** @type {any} */\n          this.w.labelData.labels.slice();\n        }\n      }\n      if (isXNumeric) {\n        this.w.labelData.labels = /** @type {any} */\n        gl.xAxisScale.result.slice();\n      }\n    }\n    if (gl.isBarHorizontal && this.w.labelData.labels.length) {\n      gl.xTickAmount = this.w.labelData.labels.length;\n    }\n    this._handleSingleDataPoint();\n    this._getMinXDiff();\n    return {\n      minX: gl.minX,\n      maxX: gl.maxX\n    };\n  }\n  setZRange() {\n    const gl = this.w.globals;\n    if (!this.w.axisFlags.isDataXYZ) return;\n    for (let i = 0; i < this.w.seriesData.series.length; i++) {\n      if (typeof this.w.seriesData.seriesZ[i] !== \"undefined\") {\n        for (let j = 0; j < this.w.seriesData.seriesZ[i].length; j++) {\n          if (this.w.seriesData.seriesZ[i][j] !== null && Utils$1.isNumber(this.w.seriesData.seriesZ[i][j])) {\n            gl.maxZ = Math.max(gl.maxZ, this.w.seriesData.seriesZ[i][j]);\n            gl.minZ = Math.min(gl.minZ, this.w.seriesData.seriesZ[i][j]);\n          }\n        }\n      }\n    }\n  }\n  _handleSingleDataPoint() {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    if (gl.minX === gl.maxX) {\n      const datetimeObj = new DateTime(this.w);\n      if (cnf.xaxis.type === \"datetime\") {\n        const newMinX = datetimeObj.getDate(gl.minX);\n        if (cnf.xaxis.labels.datetimeUTC) {\n          newMinX.setUTCDate(newMinX.getUTCDate() - 2);\n        } else {\n          newMinX.setDate(newMinX.getDate() - 2);\n        }\n        gl.minX = new Date(newMinX).getTime();\n        const newMaxX = datetimeObj.getDate(gl.maxX);\n        if (cnf.xaxis.labels.datetimeUTC) {\n          newMaxX.setUTCDate(newMaxX.getUTCDate() + 2);\n        } else {\n          newMaxX.setDate(newMaxX.getDate() + 2);\n        }\n        gl.maxX = new Date(newMaxX).getTime();\n      } else if (cnf.xaxis.type === \"numeric\" || cnf.xaxis.type === \"category\" && !this.w.axisFlags.noLabelsProvided) {\n        gl.minX = gl.minX - 2;\n        gl.initialMinX = gl.minX;\n        gl.maxX = gl.maxX + 2;\n        gl.initialMaxX = gl.maxX;\n      }\n    }\n  }\n  _getMinXDiff() {\n    const gl = this.w.globals;\n    if (this.w.axisFlags.isXNumeric) {\n      this.w.seriesData.seriesX.forEach((sX) => {\n        if (sX.length) {\n          if (sX.length === 1) {\n            sX.push(\n              this.w.seriesData.seriesX[gl.maxValsInArrayIndex][this.w.seriesData.seriesX[gl.maxValsInArrayIndex].length - 1]\n            );\n          }\n          const seriesX = sX.slice();\n          seriesX.sort((a, b) => a - b);\n          seriesX.forEach((s, j) => {\n            if (j > 0) {\n              const xDiff = s - seriesX[j - 1];\n              if (xDiff > 0) {\n                gl.minXDiff = Math.min(xDiff, gl.minXDiff);\n              }\n            }\n          });\n          if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n            gl.minXDiff = 0.5;\n          }\n        }\n      });\n    }\n  }\n  _setStackedMinMax() {\n    const gl = this.w.globals;\n    if (!this.w.seriesData.series.length) return;\n    let seriesGroups = this.w.labelData.seriesGroups;\n    if (!seriesGroups.length) {\n      seriesGroups = [this.w.seriesData.seriesNames.map((name2) => name2)];\n    }\n    const stackedPoss = {};\n    const stackedNegs = {};\n    seriesGroups.forEach((group) => {\n      stackedPoss[group] = [];\n      stackedNegs[group] = [];\n      const indicesOfSeriesInGroup = this.w.config.series.map(\n        (serie, si) => group.indexOf(this.w.seriesData.seriesNames[si]) > -1 ? si : null\n      ).filter((f) => f !== null);\n      indicesOfSeriesInGroup.forEach((i) => {\n        var _a, _b, _c, _d;\n        for (let j = 0; j < this.w.seriesData.series[gl.maxValsInArrayIndex].length; j++) {\n          if (typeof stackedPoss[group][j] === \"undefined\") {\n            stackedPoss[group][j] = 0;\n            stackedNegs[group][j] = 0;\n          }\n          const stackSeries = this.w.config.chart.stacked && !gl.comboCharts || this.w.config.chart.stacked && gl.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {Record<string,any>} */\n          ((_b = (_a = this.w.config.series) == null ? void 0 : _a[i]) == null ? void 0 : _b.type) === \"bar\" || /** @type {Record<string,any>} */\n          ((_d = (_c = this.w.config.series) == null ? void 0 : _c[i]) == null ? void 0 : _d.type) === \"column\");\n          if (stackSeries) {\n            if (this.w.seriesData.series[i][j] !== null && Utils$1.isNumber(this.w.seriesData.series[i][j])) {\n              this.w.seriesData.series[i][j] > 0 ? stackedPoss[group][j] += parseFloat(String(this.w.seriesData.series[i][j])) + 1e-4 : stackedNegs[group][j] += parseFloat(\n                String(this.w.seriesData.series[i][j])\n              );\n            }\n          }\n        }\n      });\n    });\n    Object.entries(stackedPoss).forEach(([key]) => {\n      stackedPoss[key].forEach(\n        (_, stgi) => {\n          gl.maxY = Math.max(gl.maxY, stackedPoss[key][stgi]);\n          gl.minY = Math.min(gl.minY, stackedNegs[key][stgi]);\n        }\n      );\n    });\n  }\n}\nfunction getThemePalettes() {\n  return {\n    // All colours pass WCAG 1.4.11 non-text contrast (≥ 3:1) against the\n    // default light (#fff) and dark (#293450) theme backgrounds.\n    palette1: [\"#008FFB\", \"#00A86F\", \"#CA8501\", \"#FF4560\", \"#846DD5\"],\n    palette2: [\"#6978CB\", \"#039DE2\", \"#49A84D\", \"#B39105\", \"#D68000\"],\n    palette3: [\"#209FCC\", \"#648291\", \"#D4526E\", \"#0FA783\", \"#A19285\"],\n    palette4: [\"#2FA59D\", \"#73A20B\", \"#099DE1\", \"#FD5D5D\", \"#648291\"],\n    palette5: [\"#2B908F\", \"#F56566\", \"#2EAB16\", \"#FA4443\", \"#1EA2BD\"],\n    palette6: [\"#449DD1\", \"#F86624\", \"#EA3A4A\", \"#9C63D1\", \"#899E2A\"],\n    palette7: [\"#DF475B\", \"#1B998B\", \"#7E75B7\", \"#F46036\", \"#B1911B\"],\n    palette8: [\"#9C63D1\", \"#F86624\", \"#B38F04\", \"#EA3A4A\", \"#2FA2B3\"],\n    palette9: [\"#98776F\", \"#A19285\", \"#A8705E\", \"#BA6560\", \"#A0927F\"],\n    palette10: [\"#C91EFF\", \"#A94BFD\", \"#6C6AFE\", \"#2983FF\", \"#009ED8\"],\n    // CVD-safe palettes (Wong 2011 / IBM design)\n    cvdDeuteranopia: [\n      \"#0072B2\",\n      \"#E69F00\",\n      \"#56B4E9\",\n      \"#009E73\",\n      \"#F0E442\",\n      \"#D55E00\",\n      \"#CC79A7\"\n    ],\n    cvdProtanopia: [\n      \"#0077BB\",\n      \"#EE7733\",\n      \"#009988\",\n      \"#EE3377\",\n      \"#BBBBBB\",\n      \"#33BBEE\",\n      \"#CC3311\"\n    ],\n    cvdTritanopia: [\n      \"#CC3311\",\n      \"#009988\",\n      \"#EE7733\",\n      \"#0077BB\",\n      \"#EE3377\",\n      \"#BBBBBB\",\n      \"#33BBEE\"\n    ],\n    highContrast: [\n      \"#005A9C\",\n      \"#C00000\",\n      \"#007A33\",\n      \"#6C3483\",\n      \"#7B3F00\",\n      \"#0097A7\",\n      \"#4A235A\"\n    ]\n  };\n}\nclass YAxis {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {any} [elgrid]\n   */\n  constructor(w, { theme = null, timeScale = null } = {}, elgrid) {\n    this.w = w;\n    this.elgrid = elgrid;\n    this.xaxisFontSize = w.config.xaxis.labels.style.fontSize;\n    this.axisFontFamily = w.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w.config.xaxis.labels.style.colors;\n    this.isCategoryBarHorizontal = w.config.chart.type === \"bar\" && w.config.plotOptions.bar.horizontal;\n    this.xAxisoffX = w.config.xaxis.position === \"bottom\" ? w.layout.gridHeight : 0;\n    this.drawnLabels = [];\n    this.axesUtils = new AxesUtils(w, { theme, timeScale });\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxis(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const yaxisStyle = w.config.yaxis[realIndex].labels.style;\n    const {\n      fontSize: yaxisFontSize,\n      fontFamily: yaxisFontFamily,\n      fontWeight: yaxisFontWeight\n    } = yaxisStyle;\n    const elYaxis = graphics.group({\n      class: \"apexcharts-yaxis\",\n      rel: realIndex,\n      transform: `translate(${w.globals.translateYAxisX[realIndex]}, 0)`\n    });\n    if (this.axesUtils.isYAxisHidden(realIndex)) return elYaxis;\n    const elYaxisTexts = graphics.group({ class: \"apexcharts-yaxis-texts-g\" });\n    elYaxis.add(elYaxisTexts);\n    const tickAmount = w.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w.layout.gridHeight / tickAmount;\n    const lbFormatter = w.formatters.yLabelFormatters[realIndex];\n    const labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w.globals.yAxisScale[realIndex].result.slice()\n    );\n    if (w.config.yaxis[realIndex].labels.show) {\n      let lY = w.layout.translateY + w.config.yaxis[realIndex].labels.offsetY;\n      if (w.globals.isBarHorizontal) lY = 0;\n      else if (w.config.chart.type === \"heatmap\") lY -= labelsDivider / 2;\n      lY += parseInt(yaxisFontSize, 10) / 3;\n      let firstLabel = null;\n      for (let i = tickAmount; i >= 0; i--) {\n        const val = lbFormatter(labels[i], i, w);\n        let xPad = w.config.yaxis[realIndex].labels.padding;\n        if (w.config.yaxis[realIndex].opposite && w.config.yaxis.length !== 0)\n          xPad *= -1;\n        const textAnchor = this.getTextAnchor(\n          w.config.yaxis[realIndex].labels.align,\n          w.config.yaxis[realIndex].opposite\n        );\n        const yColors = this.axesUtils.getYAxisForeColor(\n          yaxisStyle.colors,\n          realIndex\n        );\n        const foreColor = Array.isArray(yColors) ? yColors[i] : yColors;\n        const existingYLabels = Array.from(\n          w.dom.baseEl.querySelectorAll(\n            `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-label tspan`\n          )\n        ).map((label2) => label2.textContent);\n        const label = graphics.drawText({\n          x: xPad,\n          y: lY,\n          text: existingYLabels.includes(val) && !w.config.yaxis[realIndex].labels.showDuplicates ? \"\" : val,\n          textAnchor,\n          fontSize: yaxisFontSize,\n          fontFamily: yaxisFontFamily,\n          fontWeight: yaxisFontWeight,\n          maxWidth: w.config.yaxis[realIndex].labels.maxWidth,\n          foreColor,\n          isPlainText: false,\n          cssClass: `apexcharts-yaxis-label ${yaxisStyle.cssClass}`\n        });\n        elYaxisTexts.add(label);\n        this.addTooltip(label, val);\n        if (firstLabel === null) {\n          firstLabel = label;\n        }\n        if (w.config.yaxis[realIndex].labels.rotate !== 0) {\n          this.rotateLabel(\n            graphics,\n            label,\n            firstLabel,\n            w.config.yaxis[realIndex].labels.rotate\n          );\n        }\n        lY += labelsDivider;\n      }\n    }\n    this.addYAxisTitle(graphics, elYaxis, realIndex);\n    this.addAxisBorder(graphics, elYaxis, realIndex, tickAmount, labelsDivider);\n    return elYaxis;\n  }\n  /**\n   * @param {string} align\n   * @param {boolean} opposite\n   */\n  getTextAnchor(align, opposite) {\n    if (align === \"left\") return \"start\";\n    if (align === \"center\") return \"middle\";\n    if (align === \"right\") return \"end\";\n    return opposite ? \"start\" : \"end\";\n  }\n  /**\n   * @param {any} label\n   * @param {any} val\n   */\n  addTooltip(label, val) {\n    const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS, \"title\");\n    elTooltipTitle.textContent = Array.isArray(val) ? val.join(\" \") : val;\n    label.node.appendChild(elTooltipTitle);\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} label\n   * @param {any} firstLabel\n   * @param {number} rotate\n   */\n  rotateLabel(graphics, label, firstLabel, rotate) {\n    const firstLabelCenter = graphics.rotateAroundCenter(firstLabel.node);\n    const labelCenter = graphics.rotateAroundCenter(label.node);\n    label.node.setAttribute(\n      \"transform\",\n      `rotate(${rotate} ${firstLabelCenter.x} ${labelCenter.y})`\n    );\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elYaxis\n   * @param {number} realIndex\n   */\n  addYAxisTitle(graphics, elYaxis, realIndex) {\n    const w = this.w;\n    if (w.config.yaxis[realIndex].title.text !== void 0) {\n      const elYaxisTitle = graphics.group({ class: \"apexcharts-yaxis-title\" });\n      const x = w.config.yaxis[realIndex].opposite ? w.globals.translateYAxisX[realIndex] : 0;\n      const elYAxisTitleText = graphics.drawText({\n        x,\n        y: w.layout.gridHeight / 2 + w.layout.translateY + w.config.yaxis[realIndex].title.offsetY,\n        text: w.config.yaxis[realIndex].title.text,\n        textAnchor: \"end\",\n        foreColor: w.config.yaxis[realIndex].title.style.color,\n        fontSize: w.config.yaxis[realIndex].title.style.fontSize,\n        fontWeight: w.config.yaxis[realIndex].title.style.fontWeight,\n        fontFamily: w.config.yaxis[realIndex].title.style.fontFamily,\n        cssClass: `apexcharts-yaxis-title-text ${w.config.yaxis[realIndex].title.style.cssClass}`\n      });\n      elYaxisTitle.add(elYAxisTitleText);\n      elYaxis.add(elYaxisTitle);\n    }\n  }\n  /**\n   * @param {import('../Graphics').default} graphics\n   * @param {any} elYaxis\n   * @param {number} realIndex\n   * @param {number} tickAmount\n   * @param {number} labelsDivider\n   */\n  addAxisBorder(graphics, elYaxis, realIndex, tickAmount, labelsDivider) {\n    const w = this.w;\n    const axisBorder = w.config.yaxis[realIndex].axisBorder;\n    let x = 31 + axisBorder.offsetX;\n    if (w.config.yaxis[realIndex].opposite) x = -31 - axisBorder.offsetX;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        x,\n        w.layout.translateY + axisBorder.offsetY - 2,\n        x,\n        w.layout.gridHeight + w.layout.translateY + axisBorder.offsetY + 2,\n        axisBorder.color,\n        0,\n        axisBorder.width\n      );\n      elYaxis.add(elVerticalLine);\n    }\n    if (w.config.yaxis[realIndex].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        x,\n        tickAmount,\n        axisBorder,\n        w.config.yaxis[realIndex].axisTicks,\n        realIndex,\n        labelsDivider,\n        elYaxis\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxisInversed(realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis apexcharts-yaxis-inversed\"\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w.layout.translateXAxisX}, ${w.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let tickAmount = w.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w.layout.gridWidth / tickAmount + 0.1;\n    let l = labelsDivider + w.config.xaxis.labels.offsetX;\n    const lbFormatter = w.formatters.xLabelFormatter;\n    let labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w.globals.yAxisScale[realIndex].result.slice()\n    );\n    const timescaleLabels = w.labelData.timescaleLabels;\n    if (timescaleLabels.length > 0) {\n      this.xaxisLabels = timescaleLabels.slice();\n      labels = timescaleLabels.slice();\n      tickAmount = labels.length;\n    }\n    if (w.config.xaxis.labels.show) {\n      for (let i = timescaleLabels.length ? 0 : tickAmount; timescaleLabels.length ? i < timescaleLabels.length : i >= 0; timescaleLabels.length ? i++ : i--) {\n        let val = lbFormatter == null ? void 0 : lbFormatter(labels[i], i, w);\n        let x = w.layout.gridWidth + w.globals.padHorizontal - (l - labelsDivider + w.config.xaxis.labels.offsetX);\n        if (timescaleLabels.length) {\n          const label = this.axesUtils.getLabel(\n            labels,\n            timescaleLabels,\n            x,\n            i,\n            this.drawnLabels,\n            this.xaxisFontSize\n          );\n          x = label.x;\n          val = label.text;\n          this.drawnLabels.push(label.text);\n          if (i === 0 && w.globals.skipFirstTimelinelabel) val = \"\";\n          if (i === labels.length - 1 && w.globals.skipLastTimelinelabel)\n            val = \"\";\n        }\n        const elTick = graphics.drawText({\n          x,\n          y: this.xAxisoffX + w.config.xaxis.labels.offsetY + 30 - (w.config.xaxis.position === \"top\" ? w.layout.xAxisHeight + w.config.xaxis.axisTicks.height - 2 : 0),\n          text: val,\n          textAnchor: \"middle\",\n          foreColor: Array.isArray(this.xaxisForeColors) ? this.xaxisForeColors[realIndex] : this.xaxisForeColors,\n          fontSize: this.xaxisFontSize,\n          fontFamily: this.axisFontFamily,\n          fontWeight: w.config.xaxis.labels.style.fontWeight,\n          isPlainText: false,\n          cssClass: `apexcharts-xaxis-label ${w.config.xaxis.labels.style.cssClass}`\n        });\n        elXaxisTexts.add(elTick);\n        this.addTooltip(elTick, val);\n        l += labelsDivider;\n      }\n    }\n    this.inversedYAxisTitleText(elXaxis);\n    this.inversedYAxisBorder(elXaxis);\n    return elXaxis;\n  }\n  /**\n   * @param {any} parent\n   */\n  inversedYAxisBorder(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const axisBorder = w.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      let lineCorrection = 0;\n      if (w.config.chart.type === \"bar\" && w.axisFlags.isXNumeric)\n        lineCorrection -= 15;\n      const elHorzLine = graphics.drawLine(\n        w.globals.padHorizontal + lineCorrection + axisBorder.offsetX,\n        this.xAxisoffX,\n        w.layout.gridWidth,\n        this.xAxisoffX,\n        axisBorder.color,\n        0,\n        axisBorder.height\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w.config.grid.show) {\n        this.elgrid.elGridBorders.add(elHorzLine);\n      } else {\n        parent.add(elHorzLine);\n      }\n    }\n  }\n  /**\n   * @param {any} parent\n   */\n  inversedYAxisTitleText(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    if (w.config.xaxis.title.text !== void 0) {\n      const elYaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title apexcharts-yaxis-title-inversed\"\n      });\n      const elYAxisTitleText = graphics.drawText({\n        x: w.layout.gridWidth / 2 + w.config.xaxis.title.offsetX,\n        y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w.config.xaxis.title.style.fontSize) + w.config.xaxis.title.offsetY + 20,\n        text: w.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w.config.xaxis.title.style.fontSize,\n        fontFamily: w.config.xaxis.title.style.fontFamily,\n        fontWeight: w.config.xaxis.title.style.fontWeight,\n        foreColor: w.config.xaxis.title.style.color,\n        cssClass: `apexcharts-xaxis-title-text ${w.config.xaxis.title.style.cssClass}`\n      });\n      elYaxisTitle.add(elYAxisTitleText);\n      parent.add(elYaxisTitle);\n    }\n  }\n  /**\n   * @param {number} realIndex\n   * @param {boolean} yAxisOpposite\n   */\n  yAxisTitleRotate(realIndex, yAxisOpposite) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elYAxisLabelsWrap = w.dom.baseEl.querySelector(\n      `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-texts-g`\n    );\n    const yAxisLabelsCoord = elYAxisLabelsWrap ? elYAxisLabelsWrap.getBoundingClientRect() : { width: 0, height: 0 };\n    const yAxisTitle = w.dom.baseEl.querySelector(\n      `.apexcharts-yaxis[rel='${realIndex}'] .apexcharts-yaxis-title text`\n    );\n    const yAxisTitleCoord = yAxisTitle ? yAxisTitle.getBoundingClientRect() : { width: 0, height: 0 };\n    if (yAxisTitle) {\n      const x = this.xPaddingForYAxisTitle(\n        realIndex,\n        yAxisLabelsCoord,\n        yAxisTitleCoord,\n        yAxisOpposite\n      );\n      yAxisTitle.setAttribute(\"x\", String(x.xPos - (yAxisOpposite ? 10 : 0)));\n      const titleRotatingCenter = graphics.rotateAroundCenter(yAxisTitle);\n      yAxisTitle.setAttribute(\n        \"transform\",\n        `rotate(${yAxisOpposite ? w.config.yaxis[realIndex].title.rotate * -1 : w.config.yaxis[realIndex].title.rotate} ${titleRotatingCenter.x} ${titleRotatingCenter.y})`\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   * @param {{width: number, height: number}} yAxisLabelsCoord\n   * @param {{width: number, height: number}} yAxisTitleCoord\n   * @param {boolean} yAxisOpposite\n   */\n  xPaddingForYAxisTitle(realIndex, yAxisLabelsCoord, yAxisTitleCoord, yAxisOpposite) {\n    const w = this.w;\n    let x = 0;\n    let padd = 10;\n    if (w.config.yaxis[realIndex].title.text === void 0 || realIndex < 0) {\n      return { xPos: x, padd: 0 };\n    }\n    if (yAxisOpposite) {\n      x = yAxisLabelsCoord.width + w.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2;\n    } else {\n      x = yAxisLabelsCoord.width * -1 + w.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2;\n      if (w.globals.isBarHorizontal) {\n        padd = 25;\n        x = yAxisLabelsCoord.width * -1 - w.config.yaxis[realIndex].title.offsetX - padd;\n      }\n    }\n    return { xPos: x, padd };\n  }\n  /**\n   * @param {Array<{width: number, height: number}>} yaxisLabelCoords\n   * @param {Array<{width: number, height: number}>} yTitleCoords\n   */\n  setYAxisXPosition(yaxisLabelCoords, yTitleCoords) {\n    const w = this.w;\n    let xLeft = 0;\n    let xRight = 0;\n    let leftOffsetX = 18;\n    let rightOffsetX = 1;\n    if (w.config.yaxis.length > 1) this.multipleYs = true;\n    w.config.yaxis.forEach((yaxe, index) => {\n      const shouldNotDrawAxis = w.globals.ignoreYAxisIndexes.includes(index) || !yaxe.show || yaxe.floating || yaxisLabelCoords[index].width === 0;\n      const axisWidth = yaxisLabelCoords[index].width + yTitleCoords[index].width;\n      if (!yaxe.opposite) {\n        xLeft = w.layout.translateX - leftOffsetX;\n        if (!shouldNotDrawAxis) leftOffsetX += axisWidth + 20;\n        w.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX;\n      } else {\n        if (w.globals.isBarHorizontal) {\n          xRight = w.layout.gridWidth + w.layout.translateX - 1;\n          w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX;\n        } else {\n          xRight = w.layout.gridWidth + w.layout.translateX + rightOffsetX;\n          if (!shouldNotDrawAxis) rightOffsetX += axisWidth + 20;\n          w.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20;\n        }\n      }\n    });\n  }\n  setYAxisTextAlignments() {\n    const w = this.w;\n    const yaxis = Array.from(\n      w.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\")\n    );\n    yaxis.forEach((y, index) => {\n      const yaxe = w.config.yaxis[index];\n      if (yaxe && !yaxe.floating && yaxe.labels.align !== void 0) {\n        const yAxisInner = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        );\n        const yAxisTexts = Array.from(\n          w.dom.baseEl.querySelectorAll(\n            `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-label`\n          )\n        );\n        const rect = (\n          /** @type {Element} */\n          yAxisInner.getBoundingClientRect()\n        );\n        yAxisTexts.forEach((label) => {\n          label.setAttribute(\"text-anchor\", yaxe.labels.align);\n        });\n        if (yaxe.labels.align === \"left\" && !yaxe.opposite) {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(-${rect.width}, 0)`\n          );\n        } else if (yaxe.labels.align === \"center\") {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(${rect.width / 2 * (!yaxe.opposite ? -1 : 1)}, 0)`\n          );\n        } else if (yaxe.labels.align === \"right\" && yaxe.opposite) {\n          yAxisInner.setAttribute(\n            \"transform\",\n            `translate(${rect.width}, 0)`\n          );\n        }\n      }\n    });\n  }\n}\nclass Events {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.documentEvent = this.documentEvent.bind(this);\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  addEventListener(name2, handler) {\n    const w = this.w;\n    if (Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      w.globals.events[name2].push(handler);\n    } else {\n      w.globals.events[name2] = [handler];\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  removeEventListener(name2, handler) {\n    const w = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      return;\n    }\n    const index = (\n      /** @type {Record<string,any>} */\n      w.globals.events[name2].indexOf(handler)\n    );\n    if (index !== -1) {\n      w.globals.events[name2].splice(\n        index,\n        1\n      );\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {any[]} args\n   */\n  fireEvent(name2, args) {\n    const w = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w.globals.events, name2)) {\n      return;\n    }\n    if (!args || !args.length) {\n      args = [];\n    }\n    const evs = (\n      /** @type {Record<string,any>} */\n      w.globals.events[name2]\n    );\n    const l = evs.length;\n    for (let i = 0; i < l; i++) {\n      evs[i].apply(null, args);\n    }\n  }\n  setupEventHandlers() {\n    const w = this.w;\n    const me = this.ctx;\n    const clickableArea = w.dom.baseEl.querySelector(w.globals.chartClass);\n    this.ctx.eventList.forEach((event) => {\n      clickableArea == null ? void 0 : clickableArea.addEventListener(\n        event,\n        (e) => {\n          const capturedSeriesIndex = e.target.getAttribute(\"i\") === null && w.interact.capturedSeriesIndex !== -1 ? w.interact.capturedSeriesIndex : e.target.getAttribute(\"i\");\n          const capturedDataPointIndex = e.target.getAttribute(\"j\") === null && w.interact.capturedDataPointIndex !== -1 ? w.interact.capturedDataPointIndex : e.target.getAttribute(\"j\");\n          const opts = Object.assign({}, w, {\n            seriesIndex: w.globals.axisCharts ? capturedSeriesIndex : 0,\n            dataPointIndex: capturedDataPointIndex\n          });\n          if (e.type === \"keydown\") {\n            if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n              if (me.ctx.keyboardNavigation) {\n                me.ctx.keyboardNavigation.handleKey(e);\n              }\n              if (typeof w.config.chart.events.keyDown === \"function\") {\n                w.config.chart.events.keyDown(e, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keydown\", [e, me, opts]);\n            }\n          } else if (e.type === \"keyup\") {\n            if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n              if (typeof w.config.chart.events.keyUp === \"function\") {\n                w.config.chart.events.keyUp(e, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keyup\", [e, me, opts]);\n            }\n          } else if (e.type === \"mousemove\" || e.type === \"touchmove\") {\n            if (typeof w.config.chart.events.mouseMove === \"function\") {\n              w.config.chart.events.mouseMove(e, me, opts);\n            }\n          } else if (e.type === \"mouseleave\" || e.type === \"touchleave\") {\n            if (typeof w.config.chart.events.mouseLeave === \"function\") {\n              w.config.chart.events.mouseLeave(e, me, opts);\n            }\n          } else if (e.type === \"mouseup\" && e.which === 1 || e.type === \"touchend\") {\n            if (typeof w.config.chart.events.click === \"function\") {\n              w.config.chart.events.click(e, me, opts);\n            }\n            me.ctx.events.fireEvent(\"click\", [e, me, opts]);\n          }\n        },\n        { capture: false, passive: true }\n      );\n    });\n    this.ctx.eventList.forEach((event) => {\n      w.dom.baseEl.addEventListener(event, this.documentEvent, {\n        passive: true\n      });\n    });\n    this.ctx.core.setupBrushHandler();\n  }\n  /**\n   * @param {any} e\n   */\n  documentEvent(e) {\n    const w = this.w;\n    const target = e.target.className;\n    if (e.type === \"click\") {\n      const elMenu = w.dom.baseEl.querySelector(\".apexcharts-menu\");\n      if (elMenu && elMenu.classList.contains(\"apexcharts-menu-open\") && target !== \"apexcharts-menu-icon\") {\n        elMenu.classList.remove(\"apexcharts-menu-open\");\n      }\n    }\n    w.interact.clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n    w.interact.clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n  }\n}\nclass Localization {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {string} localeName\n   */\n  setCurrentLocaleValues(localeName) {\n    let locales = this.w.config.chart.locales;\n    const globalApex = Environment.getApex();\n    if (globalApex.chart && globalApex.chart.locales && globalApex.chart.locales.length > 0) {\n      locales = this.w.config.chart.locales.concat(globalApex.chart.locales);\n    }\n    const selectedLocale = locales.filter(\n      (c) => c.name === localeName\n    )[0];\n    if (selectedLocale) {\n      const ret = Utils$1.extend(en, selectedLocale);\n      this.w.globals.locale = ret.options;\n    } else {\n      throw new Error(\n        \"Wrong locale name provided. Please make sure you set the correct locale name in options\"\n      );\n    }\n  }\n}\nclass Axes {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {string} type\n   * @param {any} elgrid\n   */\n  drawAxis(type, elgrid) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    const xAxis = new XAxis(this.w, this.ctx, elgrid);\n    const yAxis = new YAxis(this.w, { theme: this.ctx.theme, timeScale: this.ctx.timeScale }, elgrid);\n    if (gl.axisCharts && type !== \"radar\") {\n      let elXaxis, elYaxis;\n      if (gl.isBarHorizontal) {\n        elYaxis = yAxis.drawYaxisInversed(0);\n        elXaxis = xAxis.drawXaxisInversed(0);\n        this.w.dom.elGraphical.add(elXaxis);\n        this.w.dom.elGraphical.add(elYaxis);\n      } else {\n        elXaxis = xAxis.drawXaxis();\n        this.w.dom.elGraphical.add(elXaxis);\n        cnf.yaxis.map((yaxe, index) => {\n          if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n            elYaxis = yAxis.drawYaxis(index);\n            this.w.dom.Paper.add(elYaxis);\n            if (this.w.config.grid.position === \"back\") {\n              const inner = this.w.dom.Paper.children()[1];\n              if (inner) {\n                inner.remove();\n                this.w.dom.Paper.add(inner);\n              }\n            }\n          }\n        });\n      }\n    }\n  }\n}\nclass Crosshairs {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  drawXCrosshairs() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const filters = new Filters(this.w);\n    const crosshairGradient = w.config.xaxis.crosshairs.fill.gradient;\n    const crosshairShadow = w.config.xaxis.crosshairs.dropShadow;\n    const fillType = w.config.xaxis.crosshairs.fill.type;\n    const gradientFrom = crosshairGradient.colorFrom;\n    const gradientTo = crosshairGradient.colorTo;\n    const opacityFrom = crosshairGradient.opacityFrom;\n    const opacityTo = crosshairGradient.opacityTo;\n    const stops = crosshairGradient.stops;\n    const shadow = \"none\";\n    const dropShadow = crosshairShadow.enabled;\n    const shadowLeft = crosshairShadow.left;\n    const shadowTop = crosshairShadow.top;\n    const shadowBlur = crosshairShadow.blur;\n    const shadowColor = crosshairShadow.color;\n    const shadowOpacity = crosshairShadow.opacity;\n    let xcrosshairsFill = w.config.xaxis.crosshairs.fill.color;\n    if (w.config.xaxis.crosshairs.show) {\n      if (fillType === \"gradient\") {\n        xcrosshairsFill = graphics.drawGradient(\n          \"vertical\",\n          gradientFrom,\n          gradientTo,\n          opacityFrom,\n          opacityTo,\n          null,\n          stops,\n          []\n        );\n      }\n      let xcrosshairs = graphics.drawRect();\n      if (w.config.xaxis.crosshairs.width === 1) {\n        xcrosshairs = graphics.drawLine(0, 0, 0, 0);\n      }\n      let gridHeight = w.layout.gridHeight;\n      if (!Utils$1.isNumber(gridHeight) || gridHeight < 0) {\n        gridHeight = 0;\n      }\n      let crosshairsWidth = w.config.xaxis.crosshairs.width;\n      if (!Utils$1.isNumber(crosshairsWidth) || Number(crosshairsWidth) < 0) {\n        crosshairsWidth = 0;\n      }\n      xcrosshairs.attr({\n        class: \"apexcharts-xcrosshairs\",\n        x: 0,\n        y: 0,\n        y2: gridHeight,\n        width: crosshairsWidth,\n        height: gridHeight,\n        fill: xcrosshairsFill,\n        filter: shadow,\n        \"fill-opacity\": w.config.xaxis.crosshairs.opacity,\n        stroke: w.config.xaxis.crosshairs.stroke.color,\n        \"stroke-width\": w.config.xaxis.crosshairs.stroke.width,\n        \"stroke-dasharray\": w.config.xaxis.crosshairs.stroke.dashArray\n      });\n      if (dropShadow) {\n        xcrosshairs = filters.dropShadow(xcrosshairs, {\n          left: shadowLeft,\n          top: shadowTop,\n          blur: shadowBlur,\n          color: shadowColor,\n          opacity: shadowOpacity\n        });\n      }\n      w.dom.elGraphical.add(xcrosshairs);\n    }\n  }\n  drawYCrosshairs() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const crosshair = (\n      /** @type {any[]} */\n      w.config.yaxis[0].crosshairs\n    );\n    const offX = w.globals.barPadForNumericAxis;\n    if (\n      /** @type {any[]} */\n      w.config.yaxis[0].crosshairs.show\n    ) {\n      const ycrosshairs = graphics.drawLine(\n        -offX,\n        0,\n        w.layout.gridWidth + offX,\n        0,\n        crosshair.stroke.color,\n        crosshair.stroke.dashArray,\n        crosshair.stroke.width\n      );\n      ycrosshairs.attr({\n        class: \"apexcharts-ycrosshairs\"\n      });\n      w.dom.elGraphical.add(ycrosshairs);\n    }\n    const ycrosshairsHidden = graphics.drawLine(\n      -offX,\n      0,\n      w.layout.gridWidth + offX,\n      0,\n      crosshair.stroke.color,\n      0,\n      0\n    );\n    ycrosshairsHidden.attr({\n      class: \"apexcharts-ycrosshairs-hidden\"\n    });\n    w.dom.elGraphical.add(ycrosshairsHidden);\n  }\n}\nfunction mergeYaxisOverride(base, override) {\n  if (!Utils$1.isObject(base) || !Utils$1.isObject(override)) {\n    return override !== void 0 ? override : base;\n  }\n  const out = __spreadValues({}, base);\n  for (const key of Object.keys(override)) {\n    const v = override[key];\n    if (v === void 0) continue;\n    if (Utils$1.isObject(v) && Utils$1.isObject(base[key])) {\n      out[key] = mergeYaxisOverride(base[key], v);\n    } else {\n      out[key] = v;\n    }\n  }\n  return out;\n}\nclass Responsive {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this._activeBreakpoint = null;\n  }\n  // the opts parameter if not null has to be set overriding everything\n  // as the opts is set by user externally\n  /**\n   * @param {object} opts\n   */\n  checkResponsiveConfig(opts) {\n    const w = this.w;\n    const cnf = w.config;\n    if (cnf.responsive.length === 0) return;\n    const res = cnf.responsive.slice();\n    res.sort(\n      (a, b) => a.breakpoint > b.breakpoint ? 1 : b.breakpoint > a.breakpoint ? -1 : 0\n    ).reverse();\n    const config = new Config({});\n    const iterateResponsiveOptions = (newOptions = {}) => {\n      var _a;\n      const largestBreakpoint = res[0].breakpoint;\n      const width = Environment.isBrowser() ? window.innerWidth > 0 ? window.innerWidth : screen.width : 0;\n      if (width > largestBreakpoint) {\n        if (this._activeBreakpoint !== null) {\n          if (!w.globals.initialConfig) return;\n          const initialConfig = Utils$1.clone(w.globals.initialConfig);\n          initialConfig.series = Utils$1.clone(w.config.series);\n          const options2 = CoreUtils.extendArrayProps(config, initialConfig, w);\n          newOptions = Utils$1.extend(options2, newOptions);\n          this.overrideResponsiveOptions(newOptions);\n          this._activeBreakpoint = null;\n        }\n      } else {\n        for (let i = 0; i < res.length; i++) {\n          if (width < res[i].breakpoint) {\n            const originalUserYaxis = ((_a = res[i].options) == null ? void 0 : _a.yaxis) ? Utils$1.clone(res[i].options.yaxis) : null;\n            newOptions = CoreUtils.extendArrayProps(config, res[i].options, w);\n            newOptions = Utils$1.extend(w.config, newOptions);\n            if (Array.isArray(w.config.yaxis) && originalUserYaxis) {\n              const userYaxis = Array.isArray(originalUserYaxis) ? originalUserYaxis : [originalUserYaxis];\n              newOptions = __spreadProps(__spreadValues({}, newOptions), {\n                yaxis: w.config.yaxis.map(\n                  (baseAxis, idx) => mergeYaxisOverride(baseAxis, userYaxis[idx])\n                )\n              });\n            }\n            this.overrideResponsiveOptions(newOptions);\n            this._activeBreakpoint = res[i].breakpoint;\n          }\n        }\n      }\n    };\n    if (opts) {\n      let options2 = CoreUtils.extendArrayProps(config, opts, w);\n      options2 = Utils$1.extend(w.config, options2);\n      options2 = Utils$1.extend(options2, opts);\n      iterateResponsiveOptions(options2);\n    } else {\n      iterateResponsiveOptions({});\n    }\n  }\n  /**\n   * @param {Record<string, any>} newOptions\n   */\n  overrideResponsiveOptions(newOptions) {\n    const newConfig = new Config(newOptions).init({ responsiveOverride: true });\n    this.w.config = /** @type {any} */\n    newConfig;\n  }\n}\nclass Series {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {{ toggleDataSeries?: Function, revertDefaultAxisMinMax?: Function, updateSeries?: Function }} [callbacks]\n   */\n  constructor(w, {\n    toggleDataSeries = void 0,\n    revertDefaultAxisMinMax = void 0,\n    updateSeries = void 0\n  } = {}) {\n    this.w = w;\n    this._toggleDataSeries = toggleDataSeries || null;\n    this._revertDefaultAxisMinMax = revertDefaultAxisMinMax || null;\n    this._updateSeries = updateSeries || null;\n    this.legendInactiveClass = \"legend-mouseover-inactive\";\n  }\n  clearSeriesCache() {\n    const w = this.w;\n    if (w.globals.cachedSelectors) {\n      delete w.globals.cachedSelectors.allSeriesEls;\n      delete w.globals.cachedSelectors.highlightSeriesEls;\n    }\n  }\n  getAllSeriesEls() {\n    const w = this.w;\n    const cacheKey = \"allSeriesEls\";\n    if (!w.globals.cachedSelectors[cacheKey]) {\n      w.globals.cachedSelectors[cacheKey] = /** @type {any} */\n      w.dom.baseEl.getElementsByClassName(`apexcharts-series`);\n    }\n    return w.globals.cachedSelectors[cacheKey];\n  }\n  /**\n   * @param {string} seriesName\n   */\n  getSeriesByName(seriesName) {\n    return this.w.dom.baseEl.querySelector(\n      `.apexcharts-inner .apexcharts-series[seriesName='${Utils$1.escapeString(\n        seriesName\n      )}']`\n    );\n  }\n  /**\n   * @param {string} seriesName\n   */\n  isSeriesHidden(seriesName) {\n    var _a;\n    const targetElement = this.getSeriesByName(seriesName);\n    const el = (\n      /** @type {Element} */\n      targetElement\n    );\n    const realIndex = parseInt((_a = el.getAttribute(\"data:realIndex\")) != null ? _a : \"0\", 10);\n    const isHidden = el.classList.contains(\"apexcharts-series-collapsed\");\n    return { isHidden, realIndex };\n  }\n  /**\n   * @param {any} elSeries\n   * @param {number} index\n   */\n  addCollapsedClassToSeries(elSeries, index) {\n    Series.addCollapsedClassToSeries(this.w, elSeries, index);\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {any} elSeries\n   * @param {number} index\n   */\n  static addCollapsedClassToSeries(w, elSeries, index) {\n    function iterateOnAllCollapsedSeries(series) {\n      for (let cs = 0; cs < series.length; cs++) {\n        if (series[cs].index === index) {\n          elSeries.node.classList.add(\"apexcharts-series-collapsed\");\n        }\n      }\n    }\n    iterateOnAllCollapsedSeries(w.globals.collapsedSeries);\n    iterateOnAllCollapsedSeries(w.globals.ancillaryCollapsedSeries);\n  }\n  /**\n   * @param {string} seriesName\n   */\n  toggleSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, isSeriesHidden.isHidden);\n    return isSeriesHidden.isHidden;\n  }\n  /**\n   * @param {string} seriesName\n   */\n  showSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    if (isSeriesHidden.isHidden) {\n      (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, true);\n    }\n  }\n  /**\n   * @param {string} seriesName\n   */\n  hideSeries(seriesName) {\n    var _a;\n    const isSeriesHidden = this.isSeriesHidden(seriesName);\n    if (!isSeriesHidden.isHidden) {\n      (_a = this._toggleDataSeries) == null ? void 0 : _a.call(this, isSeriesHidden.realIndex, false);\n    }\n  }\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true, shouldResetCollapsed = true) {\n    var _a, _b;\n    const w = this.w;\n    this.clearSeriesCache();\n    let series = Utils$1.clone(w.globals.initialSeries);\n    w.globals.previousPaths = [];\n    if (shouldResetCollapsed) {\n      w.globals.collapsedSeries = [];\n      w.globals.ancillaryCollapsedSeries = [];\n      w.globals.collapsedSeriesIndices = [];\n      w.globals.ancillaryCollapsedSeriesIndices = [];\n    } else {\n      series = this.emptyCollapsedSeries(series);\n    }\n    w.config.series = series;\n    if (shouldUpdateChart) {\n      if (shouldResetZoom) {\n        w.interact.zoomed = false;\n        (_a = this._revertDefaultAxisMinMax) == null ? void 0 : _a.call(this);\n      }\n      (_b = this._updateSeries) == null ? void 0 : _b.call(\n        this,\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  emptyCollapsedSeries(series) {\n    const w = this.w;\n    for (let i = 0; i < series.length; i++) {\n      if (w.globals.collapsedSeriesIndices.indexOf(i) > -1) {\n        series[i].data = [];\n      }\n    }\n    return series;\n  }\n  /**\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    var _a;\n    const w = this.w;\n    const targetElement = this.getSeriesByName(seriesName);\n    const realIndex = parseInt(\n      (_a = targetElement == null ? void 0 : targetElement.getAttribute(\"data:realIndex\")) != null ? _a : \"\",\n      10\n    );\n    const cacheKey = \"highlightSeriesEls\";\n    let allSeriesEls = w.globals.cachedSelectors[cacheKey];\n    if (!allSeriesEls) {\n      allSeriesEls = w.dom.baseEl.querySelectorAll(\n        `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n      );\n      w.globals.cachedSelectors[cacheKey] = allSeriesEls;\n    }\n    let seriesEl = null;\n    let dataLabelEl = null;\n    let yaxisEl = null;\n    if (w.globals.axisCharts || w.config.chart.type === \"radialBar\") {\n      if (w.globals.axisCharts) {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[data\\\\:realIndex='${realIndex}']`\n        );\n        dataLabelEl = w.dom.baseEl.querySelector(\n          `.apexcharts-datalabels[data\\\\:realIndex='${realIndex}']`\n        );\n        const yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n        yaxisEl = w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${yaxisIndex}']`\n        );\n      } else {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${realIndex + 1}']`\n        );\n      }\n    } else {\n      seriesEl = w.dom.baseEl.querySelector(\n        `.apexcharts-series[rel='${realIndex + 1}'] path`\n      );\n    }\n    for (let se = 0; se < allSeriesEls.length; se++) {\n      const serEl = (\n        /** @type {Element} */\n        allSeriesEls[se]\n      );\n      serEl.classList.add(this.legendInactiveClass);\n    }\n    if (seriesEl) {\n      if (!w.globals.axisCharts) {\n        const parentEl = (\n          /** @type {Element} */\n          seriesEl.parentNode\n        );\n        parentEl == null ? void 0 : parentEl.classList.remove(this.legendInactiveClass);\n      }\n      seriesEl.classList.remove(this.legendInactiveClass);\n      if (dataLabelEl !== null) {\n        dataLabelEl.classList.remove(this.legendInactiveClass);\n      }\n      if (yaxisEl !== null) {\n        yaxisEl.classList.remove(this.legendInactiveClass);\n      }\n    } else {\n      for (let se = 0; se < allSeriesEls.length; se++) {\n        const serEl = (\n          /** @type {Element} */\n          allSeriesEls[se]\n        );\n        serEl.classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {any} targetElement\n   */\n  toggleSeriesOnHover(e, targetElement) {\n    const w = this.w;\n    if (!targetElement) targetElement = e.target;\n    const allSeriesEls = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n    );\n    if (e.type === \"mousemove\") {\n      const realIndex = parseInt(targetElement.getAttribute(\"rel\"), 10) - 1;\n      this.highlightSeries(w.seriesData.seriesNames[realIndex]);\n    } else if (e.type === \"mouseout\") {\n      for (let se = 0; se < allSeriesEls.length; se++) {\n        allSeriesEls[se].classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * Dim every heatmap cell except those whose value falls inside the color\n   * range at `rangeIndex`. Shared by the categorical legend (hover a legend\n   * item) and the gradient legend (hover a band) — both supply an index into\n   * `colorScale.ranges` plus an action, decoupling the highlight from any\n   * particular DOM element / event shape.\n   *\n   * @param {number} rangeIndex index into `colorScale.ranges`\n   * @param {'highlight'|'reset'} action\n   */\n  highlightRangeInSeries(rangeIndex, action) {\n    const w = this.w;\n    const allHeatMapElements = w.dom.baseEl.getElementsByClassName(\n      \"apexcharts-heatmap-rect\"\n    );\n    const toggleAllInactive = (op) => {\n      for (let i = 0; i < allHeatMapElements.length; i++) {\n        const classList = (\n          /** @type {any} */\n          allHeatMapElements[i].classList\n        );\n        if (typeof classList[op] === \"function\") {\n          classList[op](this.legendInactiveClass);\n        }\n      }\n    };\n    if (action === \"reset\") {\n      toggleAllInactive(\"remove\");\n      return;\n    }\n    const ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n    const range = ranges && ranges[rangeIndex];\n    if (!range) return;\n    toggleAllInactive(\"add\");\n    for (let i = 0; i < allHeatMapElements.length; i++) {\n      const val = Number(allHeatMapElements[i].getAttribute(\"val\"));\n      if (val >= range.from && val <= range.to) {\n        allHeatMapElements[i].classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * @param {string[]} chartTypes\n   */\n  getActiveConfigSeriesIndex(order = \"asc\", chartTypes = []) {\n    const w = this.w;\n    let activeIndex = 0;\n    if (w.config.series.length > 1) {\n      const activeSeriesIndex = w.config.series.map((s, index) => {\n        const checkChartType = () => {\n          if (w.globals.comboCharts) {\n            return chartTypes.length === 0 || chartTypes.length && chartTypes.indexOf(\n              /** @type {Record<string,any>} */\n              w.config.series[index].type\n            ) > -1;\n          }\n          return true;\n        };\n        const hasData = (\n          /** @type {any} */\n          s.data && /** @type {any} */\n          s.data.length > 0 && w.globals.collapsedSeriesIndices.indexOf(index) === -1\n        );\n        return hasData && checkChartType() ? index : -1;\n      });\n      for (let a = order === \"asc\" ? 0 : activeSeriesIndex.length - 1; order === \"asc\" ? a < activeSeriesIndex.length : a >= 0; order === \"asc\" ? a++ : a--) {\n        if (activeSeriesIndex[a] !== -1) {\n          activeIndex = activeSeriesIndex[a];\n          break;\n        }\n      }\n    }\n    return activeIndex;\n  }\n  getBarSeriesIndices() {\n    const w = this.w;\n    if (w.globals.comboCharts) {\n      return this.w.config.series.map((s, i) => {\n        return s.type === \"bar\" || s.type === \"column\" ? i : -1;\n      }).filter((i) => {\n        return i !== -1;\n      });\n    }\n    return this.w.config.series.map((s, i) => {\n      return i;\n    });\n  }\n  getPreviousPaths() {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    if (!w.globals.axisCharts) {\n      w.globals.previousPaths = w.seriesData.series;\n      return;\n    }\n    w.globals.previousPaths = [];\n    function pushPaths(seriesEls, i, type) {\n      const paths = seriesEls[i].childNodes;\n      const dArr = {\n        type,\n        paths: (\n          /** @type {any[]} */\n          []\n        ),\n        realIndex: seriesEls[i].getAttribute(\"data:realIndex\")\n      };\n      for (let j = 0; j < paths.length; j++) {\n        if (paths[j].hasAttribute(\"pathTo\")) {\n          const d = paths[j].getAttribute(\"pathTo\");\n          dArr.paths.push({ d });\n        }\n      }\n      w.globals.previousPaths.push(dArr);\n    }\n    const getPaths = (chartType) => {\n      return w.dom.baseEl.querySelectorAll(\n        `.apexcharts-${chartType}-series .apexcharts-series`\n      );\n    };\n    const chartTypes = [\n      \"line\",\n      \"area\",\n      \"bar\",\n      \"rangebar\",\n      \"rangeArea\",\n      \"candlestick\",\n      \"radar\"\n    ];\n    chartTypes.forEach((type) => {\n      const paths = getPaths(type);\n      for (let p = 0; p < paths.length; p++) {\n        pushPaths(paths, p, type);\n      }\n    });\n    const heatTreeSeries = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-${w.config.chart.type} .apexcharts-series`\n    );\n    if (heatTreeSeries.length > 0) {\n      for (let h = 0; h < heatTreeSeries.length; h++) {\n        const seriesEls = w.dom.baseEl.querySelectorAll(\n          `.apexcharts-${w.config.chart.type} .apexcharts-series[data\\\\:realIndex='${h}'] rect`\n        );\n        const dArr = [];\n        for (let i = 0; i < seriesEls.length; i++) {\n          const getAttr = (x) => {\n            return (\n              /** @type {Element} */\n              seriesEls[i].getAttribute(x)\n            );\n          };\n          const rect = {\n            x: parseFloat((_a = getAttr(\"x\")) != null ? _a : \"0\"),\n            y: parseFloat((_b = getAttr(\"y\")) != null ? _b : \"0\"),\n            width: parseFloat((_c = getAttr(\"width\")) != null ? _c : \"0\"),\n            height: parseFloat((_d = getAttr(\"height\")) != null ? _d : \"0\")\n          };\n          dArr.push({\n            rect,\n            color: seriesEls[i].getAttribute(\"color\")\n          });\n        }\n        w.globals.previousPaths.push(dArr);\n      }\n    }\n  }\n  clearPreviousPaths() {\n    const w = this.w;\n    w.globals.previousPaths = [];\n    w.globals.allSeriesCollapsed = false;\n  }\n  handleNoData() {\n    const w = this.w;\n    const me = this;\n    const noDataOpts = w.config.noData;\n    const graphics = new Graphics(me.w);\n    let x = w.globals.svgWidth / 2;\n    let y = w.globals.svgHeight / 2;\n    let textAnchor = \"middle\";\n    w.globals.noData = true;\n    w.globals.animationEnded = true;\n    if (noDataOpts.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (noDataOpts.align === \"right\") {\n      x = w.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    if (noDataOpts.verticalAlign === \"top\") {\n      y = 50;\n    } else if (noDataOpts.verticalAlign === \"bottom\") {\n      y = w.globals.svgHeight - 50;\n    }\n    x = x + noDataOpts.offsetX;\n    y = y + parseInt(noDataOpts.style.fontSize, 10) + 2 + noDataOpts.offsetY;\n    if (noDataOpts.text !== void 0 && noDataOpts.text !== \"\") {\n      const titleText = graphics.drawText({\n        x,\n        y,\n        text: noDataOpts.text,\n        textAnchor,\n        fontSize: noDataOpts.style.fontSize,\n        fontFamily: noDataOpts.style.fontFamily,\n        foreColor: noDataOpts.style.color,\n        opacity: 1,\n        cssClass: \"apexcharts-text-nodata\"\n      });\n      w.dom.Paper.add(titleText);\n    }\n  }\n  // When user clicks on legends, the collapsed series is filled with [0,0,0,...,0]\n  // This is because we don't want to alter the series' length as it is used at many places\n  /**\n   * @param {any[]} series\n   */\n  setNullSeriesToZeroValues(series) {\n    const w = this.w;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length === 0) {\n        for (let j = 0; j < series[w.globals.maxValsInArrayIndex].length; j++) {\n          series[sl].push(0);\n        }\n      }\n    }\n    return series;\n  }\n  hasAllSeriesEqualX() {\n    let equalLen = true;\n    const w = this.w;\n    const filteredSerX = this.filteredSeriesX();\n    for (let i = 0; i < filteredSerX.length - 1; i++) {\n      if (filteredSerX[i][0] !== filteredSerX[i + 1][0]) {\n        equalLen = false;\n        break;\n      }\n    }\n    w.globals.allSeriesHasEqualX = equalLen;\n    return equalLen;\n  }\n  filteredSeriesX() {\n    const w = this.w;\n    const filteredSeriesX = w.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    return filteredSeriesX;\n  }\n}\nclass Theme {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n    this.colors = [];\n    this.isColorFn = false;\n    this.isHeatmapDistributed = this.checkHeatmapDistributed();\n    this.isBarDistributed = this.checkBarDistributed();\n  }\n  checkHeatmapDistributed() {\n    const { chart, plotOptions } = this.w.config;\n    return chart.type === \"treemap\" && plotOptions.treemap && plotOptions.treemap.distributed || chart.type === \"heatmap\" && plotOptions.heatmap && plotOptions.heatmap.distributed;\n  }\n  checkBarDistributed() {\n    const { chart, plotOptions } = this.w.config;\n    return plotOptions.bar && plotOptions.bar.distributed && (chart.type === \"bar\" || chart.type === \"rangeBar\");\n  }\n  init() {\n    this.setDefaultColors();\n  }\n  setDefaultColors() {\n    var _a;\n    const w = this.w;\n    const utils = new Utils$1();\n    w.dom.elWrap.classList.add(\n      `apexcharts-theme-${w.config.theme.mode || \"light\"}`\n    );\n    const colorBlindMode = (_a = w.config.theme.accessibility) == null ? void 0 : _a.colorBlindMode;\n    if (colorBlindMode) {\n      w.globals.colors = this.getColorBlindColors(colorBlindMode);\n      this.applySeriesColors(w.seriesData.seriesColors, w.globals.colors);\n      const defaultColors2 = w.globals.colors.slice();\n      this.pushExtraColors(w.globals.colors);\n      this.applyColorTypes([\"fill\", \"stroke\"], defaultColors2);\n      this.applyDataLabelsColors(defaultColors2);\n      this.applyRadarPolygonsColors();\n      this.applyMarkersColors(defaultColors2);\n      if (colorBlindMode === \"highContrast\") {\n        w.dom.elWrap.classList.add(\"apexcharts-high-contrast\");\n      }\n      return;\n    }\n    const configColors = [...w.config.colors || w.config.fill.colors || []];\n    w.globals.colors = this.getColors(configColors);\n    this.applySeriesColors(w.seriesData.seriesColors, w.globals.colors);\n    if (w.config.theme.monochrome.enabled) {\n      w.globals.colors = this.getMonochromeColors(\n        w.config.theme.monochrome,\n        w.seriesData.series,\n        utils\n      );\n    }\n    const defaultColors = w.globals.colors.slice();\n    this.pushExtraColors(w.globals.colors);\n    this.applyColorTypes([\"fill\", \"stroke\"], defaultColors);\n    this.applyDataLabelsColors(defaultColors);\n    this.applyRadarPolygonsColors();\n    this.applyMarkersColors(defaultColors);\n  }\n  /**\n   * @param {any[]} configColors\n   */\n  getColors(configColors) {\n    const w = this.w;\n    if (!configColors || configColors.length === 0) {\n      return this.predefined();\n    }\n    if (Array.isArray(configColors) && configColors.length > 0 && typeof configColors[0] === \"function\") {\n      this.isColorFn = true;\n      return w.config.series.map((s, i) => {\n        const c = configColors[i] || configColors[0];\n        return typeof c === \"function\" ? c({\n          value: w.globals.axisCharts ? w.seriesData.series[i][0] || 0 : w.seriesData.series[i],\n          seriesIndex: i,\n          dataPointIndex: i,\n          w: this.w\n        }) : c;\n      });\n    }\n    return configColors;\n  }\n  /**\n   * @param {any[]} seriesColors\n   * @param {any[]} globalsColors\n   */\n  applySeriesColors(seriesColors, globalsColors) {\n    seriesColors.forEach((c, i) => {\n      if (c) {\n        globalsColors[i] = c;\n      }\n    });\n  }\n  /**\n   * @param {Record<string, any>} monochrome\n   * @param {any[]} series\n   * @param {any} utils\n   */\n  getMonochromeColors(monochrome, series, utils) {\n    const { color, shadeIntensity, shadeTo } = monochrome;\n    const glsCnt = this.isBarDistributed || this.isHeatmapDistributed ? series[0].length * series.length : series.length;\n    const part = 1 / (glsCnt / shadeIntensity);\n    let percent = 0;\n    return Array.from({ length: glsCnt }, () => {\n      const newColor = shadeTo === \"dark\" ? utils.shadeColor(percent * -1, color) : utils.shadeColor(percent, color);\n      percent += part;\n      return newColor;\n    });\n  }\n  /**\n   * @param {string[]} colorTypes\n   * @param {string[]} defaultColors\n   */\n  applyColorTypes(colorTypes, defaultColors) {\n    const w = this.w;\n    colorTypes.forEach((c) => {\n      w.globals[c].colors = w.config[c].colors === void 0 ? this.isColorFn ? w.config.colors : defaultColors : w.config[c].colors.slice();\n      this.pushExtraColors(\n        /** @type {Record<string,any>} */\n        w.globals[c].colors\n      );\n    });\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyDataLabelsColors(defaultColors) {\n    const w = this.w;\n    w.globals.dataLabels.style.colors = w.config.dataLabels.style.colors === void 0 ? defaultColors : w.config.dataLabels.style.colors.slice();\n    this.pushExtraColors(w.globals.dataLabels.style.colors, 50);\n  }\n  applyRadarPolygonsColors() {\n    const w = this.w;\n    w.globals.radarPolygons.fill.colors = w.config.plotOptions.radar.polygons.fill.colors === void 0 ? [w.config.theme.mode === \"dark\" ? \"#343A3F\" : \"none\"] : w.config.plotOptions.radar.polygons.fill.colors.slice();\n    this.pushExtraColors(w.globals.radarPolygons.fill.colors, 20);\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyMarkersColors(defaultColors) {\n    const w = this.w;\n    w.globals.markers.colors = w.config.markers.colors === void 0 ? defaultColors : w.config.markers.colors.slice();\n    this.pushExtraColors(w.globals.markers.colors);\n  }\n  /**\n   * @param {any} colorSeries\n   * @param {number} [length]\n   * @param {boolean | null} [distributed]\n   */\n  pushExtraColors(colorSeries, length, distributed = null) {\n    const w = this.w;\n    let len = length || w.seriesData.series.length;\n    if (distributed === null) {\n      distributed = this.isBarDistributed || this.isHeatmapDistributed || w.config.chart.type === \"heatmap\" && w.config.plotOptions.heatmap && w.config.plotOptions.heatmap.colorScale.inverse;\n    }\n    if (distributed && w.seriesData.series.length) {\n      len = w.seriesData.series[w.globals.maxValsInArrayIndex].length * w.seriesData.series.length;\n    }\n    if (colorSeries.length < len) {\n      const diff = len - colorSeries.length;\n      for (let i = 0; i < diff; i++) {\n        colorSeries.push(colorSeries[i]);\n      }\n    }\n  }\n  /**\n   * @param {'light' | 'dark'} mode\n   */\n  getColorBlindColors(mode) {\n    const palettes = getThemePalettes();\n    const map = {\n      deuteranopia: palettes.cvdDeuteranopia,\n      protanopia: palettes.cvdProtanopia,\n      tritanopia: palettes.cvdTritanopia,\n      highContrast: palettes.highContrast\n    };\n    return (\n      /** @type {Record<string,any>} */\n      /** @type {any} */\n      (map[mode] || palettes.palette1).slice()\n    );\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  updateThemeOptions(options2) {\n    options2.chart = options2.chart || {};\n    options2.tooltip = options2.tooltip || {};\n    const mode = options2.theme.mode;\n    const palette = mode === \"dark\" ? \"palette4\" : mode === \"light\" ? \"palette1\" : options2.theme.palette || \"palette1\";\n    const foreColor = mode === \"dark\" ? \"#f6f7f8\" : mode === \"light\" ? \"#373d3f\" : options2.chart.foreColor || \"#373d3f\";\n    options2.tooltip.theme = mode || \"light\";\n    options2.chart.foreColor = foreColor;\n    options2.theme.palette = palette;\n    return options2;\n  }\n  predefined() {\n    const palette = this.w.config.theme.palette;\n    const palettes = getThemePalettes();\n    return (\n      /** @type {Record<string,any>} */\n      palettes[palette] || palettes.palette1\n    );\n  }\n}\nclass TitleSubtitle {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  draw() {\n    this.drawTitleSubtitle(\"title\");\n    this.drawTitleSubtitle(\"subtitle\");\n  }\n  /**\n   * @param {'title' | 'subtitle'} type\n   */\n  drawTitleSubtitle(type) {\n    const w = this.w;\n    const tsConfig = type === \"title\" ? w.config.title : w.config.subtitle;\n    let x = w.globals.svgWidth / 2;\n    let y = tsConfig.offsetY;\n    let textAnchor = \"middle\";\n    if (tsConfig.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (tsConfig.align === \"right\") {\n      x = w.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    x = x + tsConfig.offsetX;\n    y = y + parseInt(tsConfig.style.fontSize, 10) + tsConfig.margin / 2;\n    if (tsConfig.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const titleText = graphics.drawText({\n        x,\n        y,\n        text: tsConfig.text,\n        textAnchor,\n        fontSize: tsConfig.style.fontSize,\n        fontFamily: tsConfig.style.fontFamily,\n        fontWeight: tsConfig.style.fontWeight,\n        foreColor: tsConfig.style.color,\n        opacity: 1\n      });\n      titleText.node.setAttribute(\"class\", `apexcharts-${type}-text`);\n      w.dom.Paper.add(titleText);\n    }\n  }\n}\nlet Helpers$4 = class Helpers {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get Chart Title/Subtitle Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   * @param {string} type\n   **/\n  getTitleSubtitleCoords(type) {\n    const w = this.w;\n    let width = 0;\n    let height = 0;\n    const floating = type === \"title\" ? w.config.title.floating : w.config.subtitle.floating;\n    const el = w.dom.baseEl.querySelector(`.apexcharts-${type}-text`);\n    if (el !== null && !floating) {\n      const coord = el.getBoundingClientRect();\n      width = coord.width;\n      height = w.globals.axisCharts ? coord.height + 5 : coord.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getLegendsRect() {\n    const w = this.w;\n    const elLegendWrap = w.dom.elLegendWrap;\n    if (!w.config.legend.height && (w.config.legend.position === \"top\" || w.config.legend.position === \"bottom\")) {\n      if (elLegendWrap)\n        elLegendWrap.style.maxHeight = w.globals.svgHeight / 2 + \"px\";\n    }\n    const lgRect = (\n      /** @type {any} */\n      Object.assign({}, Utils$1.getBoundingClientRect(elLegendWrap))\n    );\n    if (elLegendWrap !== null && !w.config.legend.floating && w.config.legend.show) {\n      this.dCtx.lgRect = {\n        x: lgRect.x,\n        y: lgRect.y,\n        height: lgRect.height,\n        width: lgRect.height === 0 ? 0 : lgRect.width\n      };\n    } else {\n      this.dCtx.lgRect = {\n        x: 0,\n        y: 0,\n        height: 0,\n        width: 0\n      };\n    }\n    if (w.config.legend.position === \"left\" || w.config.legend.position === \"right\") {\n      if (this.dCtx.lgRect.width * 1.5 > w.globals.svgWidth) {\n        this.dCtx.lgRect.width = w.globals.svgWidth / 1.5;\n      }\n    }\n    return this.dCtx.lgRect;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getDatalabelsRect() {\n    const w = this.w;\n    const allLabels = [];\n    w.config.series.forEach(\n      (serie, seriesIndex) => {\n        serie.data.forEach(\n          (datum, dataPointIndex) => {\n            const getText = (v) => {\n              return w.config.dataLabels.formatter(v, {\n                seriesIndex,\n                dataPointIndex,\n                w\n              });\n            };\n            const labelText = getText(\n              w.seriesData.series[seriesIndex][dataPointIndex]\n            );\n            allLabels.push(labelText);\n          }\n        );\n      }\n    );\n    const val = Utils$1.getLargestStringFromArr(allLabels);\n    const graphics = new Graphics(this.w);\n    const dataLabelsStyle = w.config.dataLabels.style;\n    const labelrect = graphics.getTextRects(\n      val,\n      parseInt(dataLabelsStyle.fontSize).toString(),\n      dataLabelsStyle.fontFamily\n    );\n    return {\n      width: labelrect.width * 1.05,\n      height: labelrect.height\n    };\n  }\n  /**\n   * @param {any} val\n   * @param {any[]} arr\n   */\n  getLargestStringFromMultiArr(val, arr) {\n    const w = this.w;\n    let valArr = val;\n    if (w.axisFlags.isMultiLineX) {\n      const maxArrs = arr.map((xl) => {\n        return Array.isArray(xl) ? xl.length : 1;\n      });\n      const maxArrLen = Math.max(...maxArrs);\n      const maxArrIndex = maxArrs.indexOf(maxArrLen);\n      valArr = arr[maxArrIndex];\n    }\n    return valArr;\n  }\n};\nclass DimXAxis {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get X Axis Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getxAxisLabelsCoords() {\n    const w = this.w;\n    let xaxisLabels = w.labelData.labels.slice();\n    if (w.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) {\n      xaxisLabels = w.labelData.categoryLabels;\n    }\n    let rect;\n    if (w.labelData.timescaleLabels.length > 0) {\n      const coords = this.getxAxisTimeScaleLabelsCoords();\n      rect = {\n        width: coords.width,\n        height: coords.height\n      };\n      w.layout.rotateXLabels = false;\n    } else {\n      this.dCtx.lgWidthForSideLegends = (w.config.legend.position === \"left\" || w.config.legend.position === \"right\") && !w.config.legend.floating ? this.dCtx.lgRect.width : 0;\n      const xlbFormatter = w.formatters.xLabelFormatter;\n      let val = Utils$1.getLargestStringFromArr(xaxisLabels);\n      let valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n        val,\n        xaxisLabels\n      );\n      if (w.globals.isBarHorizontal) {\n        val = w.globals.yAxisScale[0].result.reduce(\n          (a, b) => a.length > b.length ? a : b,\n          0\n        );\n        valArr = val;\n      }\n      const xFormat = new Formatters(this.w);\n      const timestamp = val;\n      val = xFormat.xLabelFormat(\n        /** @type {Function} */\n        xlbFormatter,\n        val,\n        timestamp,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      valArr = xFormat.xLabelFormat(\n        /** @type {Function} */\n        xlbFormatter,\n        valArr,\n        timestamp,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w\n        }\n      );\n      if (w.config.xaxis.convertedCatToNumeric && typeof val === \"undefined\" || String(val).trim() === \"\") {\n        val = \"1\";\n        valArr = val;\n      }\n      const graphics = new Graphics(this.w);\n      let xLabelrect = graphics.getTextRects(\n        val,\n        w.config.xaxis.labels.style.fontSize\n      );\n      let xArrLabelrect = xLabelrect;\n      if (val !== valArr) {\n        xArrLabelrect = graphics.getTextRects(\n          valArr,\n          w.config.xaxis.labels.style.fontSize\n        );\n      }\n      rect = {\n        width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n        height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n      };\n      if (rect.width * xaxisLabels.length > w.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w.config.xaxis.labels.rotate !== 0 || w.config.xaxis.labels.rotateAlways) {\n        if (!w.globals.isBarHorizontal) {\n          w.layout.rotateXLabels = true;\n          const getRotatedTextRects = (text) => {\n            return graphics.getTextRects(\n              text,\n              w.config.xaxis.labels.style.fontSize,\n              w.config.xaxis.labels.style.fontFamily,\n              `rotate(${w.config.xaxis.labels.rotate} 0 0)`,\n              false\n            );\n          };\n          xLabelrect = getRotatedTextRects(val);\n          if (val !== valArr) {\n            xArrLabelrect = getRotatedTextRects(valArr);\n          }\n          rect.height = (xLabelrect.height > xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height) / 1.5;\n          rect.width = xLabelrect.width > xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width;\n        }\n      } else {\n        w.layout.rotateXLabels = false;\n      }\n    }\n    if (!w.config.xaxis.labels.show) {\n      rect = {\n        width: 0,\n        height: 0\n      };\n    }\n    return {\n      width: rect.width,\n      height: rect.height\n    };\n  }\n  /**\n   * Get X Axis Label Group height\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   */\n  getxAxisGroupLabelsCoords() {\n    var _a;\n    const w = this.w;\n    if (!w.labelData.hasXaxisGroups) {\n      return { width: 0, height: 0 };\n    }\n    const fontSize = ((_a = w.config.xaxis.group.style) == null ? void 0 : _a.fontSize) || w.config.xaxis.labels.style.fontSize;\n    const xaxisLabels = w.labelData.groups.map(\n      (g) => g.title\n    );\n    let rect;\n    const val = Utils$1.getLargestStringFromArr(xaxisLabels);\n    const valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n      val,\n      xaxisLabels\n    );\n    const graphics = new Graphics(this.w);\n    const xLabelrect = graphics.getTextRects(val, fontSize);\n    let xArrLabelrect = xLabelrect;\n    if (val !== valArr) {\n      xArrLabelrect = graphics.getTextRects(valArr, fontSize);\n    }\n    rect = {\n      width: xLabelrect.width >= xArrLabelrect.width ? xLabelrect.width : xArrLabelrect.width,\n      height: xLabelrect.height >= xArrLabelrect.height ? xLabelrect.height : xArrLabelrect.height\n    };\n    if (!w.config.xaxis.labels.show) {\n      rect = {\n        width: 0,\n        height: 0\n      };\n    }\n    return {\n      width: rect.width,\n      height: rect.height\n    };\n  }\n  /**\n   * Get X Axis Title Dimensions\n   * @memberof Dimensions\n   * @return {{width: number, height: number}}\n   **/\n  getxAxisTitleCoords() {\n    const w = this.w;\n    let width = 0;\n    let height = 0;\n    if (w.config.xaxis.title.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const rect = graphics.getTextRects(\n        w.config.xaxis.title.text,\n        w.config.xaxis.title.style.fontSize\n      );\n      width = rect.width;\n      height = rect.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getxAxisTimeScaleLabelsCoords() {\n    const w = this.w;\n    this.dCtx.timescaleLabels = w.labelData.timescaleLabels.slice();\n    const labels = this.dCtx.timescaleLabels.map(\n      (label) => label.value\n    );\n    const val = labels.reduce((a, b) => {\n      if (typeof a === \"undefined\") {\n        console.error(\n          \"You have possibly supplied invalid Date format. Please supply a valid JavaScript Date\"\n        );\n        return 0;\n      } else {\n        return a.length > b.length ? a : b;\n      }\n    }, 0);\n    const graphics = new Graphics(this.w);\n    const rect = graphics.getTextRects(\n      val,\n      w.config.xaxis.labels.style.fontSize\n    );\n    const totalWidthRotated = rect.width * 1.05 * labels.length;\n    if (totalWidthRotated > w.layout.gridWidth && w.config.xaxis.labels.rotate !== 0) {\n      w.globals.overlappingXLabels = true;\n    }\n    return rect;\n  }\n  // In certain cases, the last labels gets cropped in xaxis.\n  // Hence, we add some additional padding based on the label length to avoid the last label being cropped or we don't draw it at all\n  /**\n   * @param {Record<string, any>} xaxisLabelCoords\n   */\n  additionalPaddingXLabels(xaxisLabelCoords) {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    const xtype = cnf.xaxis.type;\n    const lbWidth = xaxisLabelCoords.width;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    const isBarOpposite = w.config.yaxis[0].opposite && w.globals.isBarHorizontal;\n    const isCollapsed = (i) => gl.collapsedSeriesIndices.indexOf(i) !== -1;\n    const rightPad = (yaxe) => {\n      if (this.dCtx.timescaleLabels && this.dCtx.timescaleLabels.length) {\n        const firstimescaleLabel = this.dCtx.timescaleLabels[0];\n        const lastTimescaleLabel = this.dCtx.timescaleLabels[this.dCtx.timescaleLabels.length - 1];\n        const lastLabelPosition = lastTimescaleLabel.position + lbWidth / 1.75 - this.dCtx.yAxisWidthRight;\n        const firstLabelPosition = firstimescaleLabel.position - lbWidth / 1.75 + this.dCtx.yAxisWidthLeft;\n        const lgRightRectWidth = w.config.legend.position === \"right\" && this.dCtx.lgRect.width > 0 ? this.dCtx.lgRect.width : 0;\n        if (lastLabelPosition > gl.svgWidth - w.layout.translateX - lgRightRectWidth) {\n          gl.skipLastTimelinelabel = true;\n        }\n        if (firstLabelPosition < -((!yaxe.show || yaxe.floating) && (cnf.chart.type === \"bar\" || cnf.chart.type === \"candlestick\" || cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"boxPlot\" || cnf.chart.type === \"violin\") ? lbWidth / 1.75 : 10)) {\n          gl.skipFirstTimelinelabel = true;\n        }\n      } else if (xtype === \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth && !w.layout.rotateXLabels) {\n          gl.skipLastTimelinelabel = true;\n        }\n      } else if (xtype !== \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth / 2 - this.dCtx.yAxisWidthRight && !w.layout.rotateXLabels && !w.config.xaxis.labels.trim) {\n          this.dCtx.xPadRight = lbWidth / 2 + 1;\n        }\n      }\n    };\n    const padYAxe = (yaxe, i) => {\n      if (cnf.yaxis.length > 1 && isCollapsed(i)) return;\n      rightPad(yaxe);\n    };\n    cnf.yaxis.forEach((yaxe, i) => {\n      if (isBarOpposite) {\n        if (this.dCtx.gridPad.left < lbWidth) {\n          this.dCtx.xPadLeft = lbWidth / 2 + 1;\n        }\n        this.dCtx.xPadRight = lbWidth / 2 + 1;\n      } else {\n        padYAxe(yaxe, i);\n      }\n    });\n  }\n}\nclass DimYAxis {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @returns {Array<{width: number, height: number}>}\n   **/\n  getyAxisLabelsCoords() {\n    const w = this.w;\n    const width = 0;\n    const height = 0;\n    const ret = [];\n    let labelPad = 10;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w.config.yaxis.map((yaxe, index) => {\n      const formatterArgs = {\n        seriesIndex: index,\n        dataPointIndex: -1,\n        w\n      };\n      const yS = w.globals.yAxisScale[index];\n      let yAxisMinWidth = 0;\n      if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yaxe.labels.minWidth !== void 0)\n        yAxisMinWidth = yaxe.labels.minWidth;\n      if (!axesUtils.isYAxisHidden(index) && yaxe.labels.show && yS.result.length) {\n        const lbFormatter = w.formatters.yLabelFormatters[index];\n        const minV = yS.niceMin === Number.MIN_VALUE ? 0 : yS.niceMin;\n        let val = yS.result.reduce((acc, curr) => {\n          var _a, _b;\n          return ((_a = String(lbFormatter(acc, formatterArgs))) == null ? void 0 : _a.length) > ((_b = String(lbFormatter(curr, formatterArgs))) == null ? void 0 : _b.length) ? acc : curr;\n        }, minV);\n        val = lbFormatter(val, formatterArgs);\n        let valArr = val;\n        if (typeof val === \"undefined\" || val.length === 0) {\n          val = yS.niceMax;\n        }\n        if (String(val).length === 1) {\n          val = val + \".0\";\n          valArr = val;\n        }\n        if (w.globals.isBarHorizontal) {\n          labelPad = 0;\n          const barYaxisLabels = w.labelData.labels.slice();\n          val = Utils$1.getLargestStringFromArr(barYaxisLabels);\n          val = lbFormatter(val, { seriesIndex: index, dataPointIndex: -1, w });\n          valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n            val,\n            barYaxisLabels\n          );\n        }\n        const graphics = new Graphics(this.w);\n        const rotateStr = \"rotate(\".concat(yaxe.labels.rotate, \" 0 0)\");\n        const rect = graphics.getTextRects(\n          val,\n          yaxe.labels.style.fontSize,\n          yaxe.labels.style.fontFamily,\n          rotateStr,\n          false\n        );\n        let arrLabelrect = rect;\n        if (val !== valArr) {\n          arrLabelrect = graphics.getTextRects(\n            valArr,\n            yaxe.labels.style.fontSize,\n            yaxe.labels.style.fontFamily,\n            rotateStr,\n            false\n          );\n        }\n        ret.push({\n          width: (yAxisMinWidth > arrLabelrect.width || yAxisMinWidth > rect.width ? yAxisMinWidth : arrLabelrect.width > rect.width ? arrLabelrect.width : rect.width) + labelPad,\n          height: arrLabelrect.height > rect.height ? arrLabelrect.height : rect.height\n        });\n      } else {\n        ret.push({\n          width,\n          height\n        });\n      }\n    });\n    return ret;\n  }\n  /**\n   * Get Y Axis Dimensions\n   * @memberof Dimensions\n   * @returns {Array<{width: number, height: number}>}\n   **/\n  getyAxisTitleCoords() {\n    const w = this.w;\n    const ret = [];\n    w.config.yaxis.map((yaxe) => {\n      if (yaxe.show && yaxe.title.text !== void 0) {\n        const graphics = new Graphics(this.w);\n        const rotateStr = \"rotate(\".concat(yaxe.title.rotate, \" 0 0)\");\n        const rect = graphics.getTextRects(\n          yaxe.title.text,\n          yaxe.title.style.fontSize,\n          yaxe.title.style.fontFamily,\n          rotateStr,\n          false\n        );\n        ret.push({\n          width: rect.width,\n          height: rect.height\n        });\n      } else {\n        ret.push({\n          width: 0,\n          height: 0\n        });\n      }\n    });\n    return ret;\n  }\n  getTotalYAxisWidth() {\n    const w = this.w;\n    let yAxisWidth = 0;\n    let yAxisWidthLeft = 0;\n    let yAxisWidthRight = 0;\n    const padding = w.globals.yAxisScale.length > 1 ? 10 : 0;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    const isHiddenYAxis = function(index) {\n      return w.globals.ignoreYAxisIndexes.indexOf(index) > -1;\n    };\n    const padForLabelTitle = (coord, index) => {\n      const floating = w.config.yaxis[index].floating;\n      let width = 0;\n      if (coord.width > 0 && !floating) {\n        width = coord.width + padding;\n        if (isHiddenYAxis(index)) {\n          width = width - coord.width - padding;\n        }\n      } else {\n        width = floating || axesUtils.isYAxisHidden(index) ? 0 : 5;\n      }\n      w.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width;\n      yAxisWidth = yAxisWidth + width;\n    };\n    w.layout.yLabelsCoords.map((yLabelCoord, index) => {\n      padForLabelTitle(yLabelCoord, index);\n    });\n    w.layout.yTitleCoords.map((yTitleCoord, index) => {\n      padForLabelTitle(yTitleCoord, index);\n    });\n    if (w.globals.isBarHorizontal && !w.config.yaxis[0].floating) {\n      yAxisWidth = w.layout.yLabelsCoords[0].width + w.layout.yTitleCoords[0].width + 15;\n    }\n    this.dCtx.yAxisWidthLeft = yAxisWidthLeft;\n    this.dCtx.yAxisWidthRight = yAxisWidthRight;\n    return yAxisWidth;\n  }\n}\nclass DimGrid {\n  /**\n   * @param {import('./Dimensions').default} dCtx\n   */\n  constructor(dCtx) {\n    this.w = dCtx.w;\n    this.dCtx = dCtx;\n  }\n  /**\n   * @param {number} gridWidth\n   */\n  gridPadForColumnsInNumericAxis(gridWidth) {\n    const { w } = this;\n    const { config: cnf, globals: gl } = w;\n    if (gl.noData || gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === cnf.series.length) {\n      return 0;\n    }\n    const hasBar = (type2) => [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(type2);\n    const type = cnf.chart.type;\n    let barWidth = 0;\n    let seriesLen = hasBar(type) ? cnf.series.length : 1;\n    if (gl.comboBarCount > 0) {\n      seriesLen = gl.comboBarCount;\n    }\n    gl.collapsedSeries.forEach((c) => {\n      if (hasBar(c.type)) {\n        seriesLen -= 1;\n      }\n    });\n    if (cnf.chart.stacked) {\n      seriesLen = 1;\n    }\n    const barsPresent = hasBar(type) || gl.comboBarCount > 0;\n    let xRange = Math.abs(gl.initialMaxX - gl.initialMinX);\n    if (barsPresent && w.axisFlags.isXNumeric && !gl.isBarHorizontal && seriesLen > 0 && xRange !== 0) {\n      if (xRange <= 3) {\n        xRange = gl.dataPoints;\n      }\n      const xRatio = xRange / gridWidth;\n      let xDivision = gl.minXDiff && gl.minXDiff / xRatio > 0 ? gl.minXDiff / xRatio : 0;\n      if (xDivision > gridWidth / 2) {\n        xDivision /= 2;\n      }\n      barWidth = xDivision * parseInt(cnf.plotOptions.bar.columnWidth, 10) / 100;\n      if (barWidth < 1) {\n        barWidth = 1;\n      }\n      gl.barPadForNumericAxis = barWidth;\n    }\n    return barWidth;\n  }\n  gridPadFortitleSubtitle() {\n    const { w } = this;\n    const { globals: gl } = w;\n    let gridShrinkOffset = this.dCtx.isSparkline || !gl.axisCharts ? 0 : 10;\n    const titleSubtitle = [\"title\", \"subtitle\"];\n    titleSubtitle.forEach((t) => {\n      if (w.config[t].text !== void 0) {\n        gridShrinkOffset += w.config[t].margin;\n      } else {\n        gridShrinkOffset += this.dCtx.isSparkline || !gl.axisCharts ? 0 : 5;\n      }\n    });\n    if (w.config.legend.show && w.config.legend.position === \"bottom\" && !w.config.legend.floating && !gl.axisCharts) {\n      gridShrinkOffset += 10;\n    }\n    const titleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords(\"title\");\n    const subtitleCoords = this.dCtx.dimHelpers.getTitleSubtitleCoords(\"subtitle\");\n    w.layout.gridHeight -= titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n    w.layout.translateY += titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n  }\n  /**\n   * @param {{width: number, height: number}[]} yTitleCoords\n   * @param {{width: number, height: number}[]} yaxisLabelCoords\n   */\n  setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords) {\n    const { w } = this;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w.config.yaxis.forEach((yaxe, index) => {\n      if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) {\n        if (yaxe.opposite) {\n          w.layout.translateX -= yaxisLabelCoords[index].width + yTitleCoords[index].width + parseInt(yaxe.labels.style.fontSize, 10) / 1.2 + 12;\n        }\n        if (w.layout.translateX < 2) {\n          w.layout.translateX = 2;\n        }\n      }\n    });\n  }\n}\nclass Dimensions {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.theme = ctx.theme;\n    this.timeScale = ctx.timeScale;\n    this.lgRect = /** @type {any} */\n    {};\n    this.yAxisWidth = 0;\n    this.yAxisWidthLeft = 0;\n    this.yAxisWidthRight = 0;\n    this.xAxisHeight = 0;\n    this.isSparkline = this.w.config.chart.sparkline.enabled;\n    this.dimHelpers = new Helpers$4(this);\n    this.dimYAxis = new DimYAxis(this);\n    this.dimXAxis = new DimXAxis(this);\n    this.dimGrid = new DimGrid(this);\n    this.lgWidthForSideLegends = 0;\n    this.gridPad = this.w.config.grid.padding;\n    this.xPadRight = 0;\n    this.xPadLeft = 0;\n    this.datalabelsCoords = { width: 0, height: 0 };\n    this.xAxisWidth = 0;\n    this.timescaleLabels = [];\n  }\n  /**\n   * @memberof Dimensions\n   **/\n  plotCoords() {\n    const w = this.w;\n    const gl = w.globals;\n    this.lgRect = this.dimHelpers.getLegendsRect();\n    this.datalabelsCoords = { width: 0, height: 0 };\n    const maxStrokeWidth = Array.isArray(w.config.stroke.width) ? Math.max(...w.config.stroke.width) : w.config.stroke.width;\n    if (this.isSparkline) {\n      if (w.config.markers.discrete.length > 0 || w.config.markers.size > 0) {\n        Object.entries(this.gridPad).forEach(([k, v]) => {\n          this.gridPad[k] = Math.max(\n            v,\n            this.w.globals.markers.largestSize / 1.5\n          );\n        });\n      }\n      this.gridPad.top = Math.max(maxStrokeWidth / 2, this.gridPad.top);\n      this.gridPad.bottom = Math.max(maxStrokeWidth / 2, this.gridPad.bottom);\n    }\n    if (gl.axisCharts) {\n      this.setDimensionsForAxisCharts();\n    } else {\n      this.setDimensionsForNonAxisCharts();\n    }\n    this.dimGrid.gridPadFortitleSubtitle();\n    w.layout.gridHeight = w.layout.gridHeight - this.gridPad.top - this.gridPad.bottom;\n    w.layout.gridWidth = w.layout.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft;\n    const barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(\n      w.layout.gridWidth\n    );\n    w.layout.gridWidth = w.layout.gridWidth - barWidth * 2;\n    w.layout.translateX = w.layout.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth : 0);\n    w.layout.translateY = w.layout.translateY + this.gridPad.top;\n    return {\n      // w.layout (future slice)\n      layout: {\n        gridHeight: w.layout.gridHeight,\n        gridWidth: w.layout.gridWidth,\n        translateX: w.layout.translateX,\n        translateY: w.layout.translateY,\n        translateXAxisX: w.layout.translateXAxisX,\n        translateXAxisY: w.layout.translateXAxisY,\n        rotateXLabels: w.layout.rotateXLabels,\n        xAxisHeight: w.layout.xAxisHeight,\n        xAxisLabelsHeight: w.layout.xAxisLabelsHeight,\n        xAxisGroupLabelsHeight: w.layout.xAxisGroupLabelsHeight,\n        xAxisLabelsWidth: w.layout.xAxisLabelsWidth,\n        yLabelsCoords: w.layout.yLabelsCoords,\n        yTitleCoords: w.layout.yTitleCoords\n      }\n    };\n  }\n  setDimensionsForAxisCharts() {\n    const w = this.w;\n    const gl = w.globals;\n    const yaxisLabelCoords = this.dimYAxis.getyAxisLabelsCoords();\n    const yTitleCoords = this.dimYAxis.getyAxisTitleCoords();\n    if (gl.isSlopeChart) {\n      this.datalabelsCoords = this.dimHelpers.getDatalabelsRect();\n    }\n    w.layout.yLabelsCoords = [];\n    w.layout.yTitleCoords = [];\n    w.config.yaxis.map((yaxe, index) => {\n      w.layout.yLabelsCoords.push({\n        width: yaxisLabelCoords[index].width,\n        index\n      });\n      w.layout.yTitleCoords.push(\n        /** @type {any} */\n        {\n          width: yTitleCoords[index].width,\n          index\n        }\n      );\n    });\n    this.yAxisWidth = this.dimYAxis.getTotalYAxisWidth();\n    const xaxisLabelCoords = this.dimXAxis.getxAxisLabelsCoords();\n    const xaxisGroupLabelCoords = this.dimXAxis.getxAxisGroupLabelsCoords();\n    const xtitleCoords = this.dimXAxis.getxAxisTitleCoords();\n    this.conditionalChecksForAxisCoords(\n      xaxisLabelCoords,\n      xtitleCoords,\n      xaxisGroupLabelCoords\n    );\n    w.layout.translateXAxisY = w.layout.rotateXLabels ? this.xAxisHeight / 8 : -4;\n    w.layout.translateXAxisX = w.layout.rotateXLabels && w.axisFlags.isXNumeric && w.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0;\n    if (w.globals.isBarHorizontal) {\n      w.layout.rotateXLabels = false;\n      w.layout.translateXAxisY = -1 * (parseInt(w.config.xaxis.labels.style.fontSize, 10) / 1.5);\n    }\n    w.layout.translateXAxisY = w.layout.translateXAxisY + w.config.xaxis.labels.offsetY;\n    w.layout.translateXAxisX = w.layout.translateXAxisX + w.config.xaxis.labels.offsetX;\n    let yAxisWidth = this.yAxisWidth;\n    let xAxisHeight = this.xAxisHeight;\n    w.layout.xAxisLabelsHeight = this.xAxisHeight - xtitleCoords.height;\n    w.layout.xAxisGroupLabelsHeight = w.layout.xAxisLabelsHeight - xaxisLabelCoords.height;\n    w.layout.xAxisLabelsWidth = this.xAxisWidth;\n    w.layout.xAxisHeight = this.xAxisHeight;\n    let translateY = 10;\n    if (w.config.chart.type === \"radar\" || this.isSparkline) {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n    }\n    if (this.isSparkline) {\n      this.lgRect = {\n        height: 0,\n        width: 0\n      };\n    }\n    if (this.isSparkline || w.config.chart.type === \"treemap\") {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n      translateY = 0;\n    }\n    if (!this.isSparkline && w.config.chart.type !== \"treemap\") {\n      this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords);\n    }\n    const legendTopBottom = () => {\n      w.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n      w.layout.gridHeight = gl.svgHeight - this.lgRect.height - xAxisHeight - (!this.isSparkline && w.config.chart.type !== \"treemap\" ? w.layout.rotateXLabels ? 10 : 15 : 0);\n      w.layout.gridWidth = gl.svgWidth - yAxisWidth - this.datalabelsCoords.width * 2;\n    };\n    if (w.config.xaxis.position === \"top\")\n      translateY = w.layout.xAxisHeight - w.config.xaxis.axisTicks.height - 5;\n    switch (w.config.legend.position) {\n      case \"bottom\":\n        w.layout.translateY = translateY;\n        legendTopBottom();\n        break;\n      case \"top\":\n        w.layout.translateY = this.lgRect.height + translateY;\n        legendTopBottom();\n        break;\n      case \"left\":\n        w.layout.translateY = translateY;\n        w.layout.translateX = this.lgRect.width + yAxisWidth + this.datalabelsCoords.width;\n        w.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2;\n        break;\n      case \"right\":\n        w.layout.translateY = translateY;\n        w.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n        w.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2 - 5;\n        break;\n      default:\n        throw new Error(\"Legend position not supported\");\n    }\n    this.dimGrid.setGridXPosForDualYAxis(yTitleCoords, yaxisLabelCoords);\n    const objyAxis = new YAxis(this.w, {\n      theme: this.theme,\n      timeScale: this.timeScale\n    });\n    objyAxis.setYAxisXPosition(yaxisLabelCoords, yTitleCoords);\n  }\n  setDimensionsForNonAxisCharts() {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    let xPad = 0;\n    if (w.config.legend.show && !w.config.legend.floating) {\n      xPad = 20;\n    }\n    const type = cnf.chart.type === \"pie\" || cnf.chart.type === \"polarArea\" || cnf.chart.type === \"donut\" ? \"pie\" : \"radialBar\";\n    const offY = cnf.plotOptions[type].offsetY;\n    const offX = cnf.plotOptions[type].offsetX;\n    if (!cnf.legend.show || cnf.legend.floating) {\n      w.layout.gridHeight = gl.svgHeight;\n      const maxWidth = w.dom.elWrap.getBoundingClientRect().width;\n      w.layout.gridWidth = Math.min(maxWidth, w.layout.gridHeight);\n      w.layout.translateY = offY;\n      w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n      return;\n    }\n    switch (cnf.legend.position) {\n      case \"bottom\":\n        w.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w.layout.gridWidth = gl.svgWidth;\n        w.layout.translateY = offY - 10;\n        w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n        break;\n      case \"top\":\n        w.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w.layout.gridWidth = gl.svgWidth;\n        w.layout.translateY = this.lgRect.height + offY + 10;\n        w.layout.translateX = offX + (gl.svgWidth - w.layout.gridWidth) / 2;\n        break;\n      case \"left\":\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad;\n        w.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w.layout.gridWidth;\n        w.layout.translateY = offY;\n        w.layout.translateX = offX + this.lgRect.width + xPad;\n        break;\n      case \"right\":\n        w.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5;\n        w.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w.layout.gridWidth;\n        w.layout.translateY = offY;\n        w.layout.translateX = offX + 10;\n        break;\n      default:\n        throw new Error(\"Legend position not supported\");\n    }\n  }\n  /**\n   * @param {any} xaxisLabelCoords\n   * @param {any} xtitleCoords\n   * @param {any} xaxisGroupLabelCoords\n   */\n  conditionalChecksForAxisCoords(xaxisLabelCoords, xtitleCoords, xaxisGroupLabelCoords) {\n    const w = this.w;\n    const xAxisNum = w.labelData.hasXaxisGroups ? 2 : 1;\n    const baseXAxisHeight = xaxisGroupLabelCoords.height + xaxisLabelCoords.height + xtitleCoords.height;\n    const xAxisHeightMultiplicate = w.axisFlags.isMultiLineX ? 1.2 : LINE_HEIGHT_RATIO;\n    const rotatedXAxisOffset = w.layout.rotateXLabels ? 22 : 10;\n    const rotatedXAxisLegendOffset = w.layout.rotateXLabels && w.config.legend.position === \"bottom\";\n    const additionalOffset = rotatedXAxisLegendOffset ? 10 : 0;\n    this.xAxisHeight = baseXAxisHeight * xAxisHeightMultiplicate + xAxisNum * rotatedXAxisOffset + additionalOffset;\n    this.xAxisWidth = xaxisLabelCoords.width;\n    if (this.xAxisHeight - xtitleCoords.height > w.config.xaxis.labels.maxHeight) {\n      this.xAxisHeight = w.config.xaxis.labels.maxHeight;\n    }\n    if (w.config.xaxis.labels.minHeight && this.xAxisHeight < w.config.xaxis.labels.minHeight) {\n      this.xAxisHeight = w.config.xaxis.labels.minHeight;\n    }\n    if (w.config.xaxis.floating) {\n      this.xAxisHeight = 0;\n    }\n    let minYAxisWidth = 0;\n    let maxYAxisWidth = 0;\n    w.config.yaxis.forEach((y) => {\n      minYAxisWidth += y.labels.minWidth;\n      maxYAxisWidth += y.labels.maxWidth;\n    });\n    if (this.yAxisWidth < minYAxisWidth) {\n      this.yAxisWidth = minYAxisWidth;\n    }\n    if (this.yAxisWidth > maxYAxisWidth) {\n      this.yAxisWidth = maxYAxisWidth;\n    }\n  }\n}\nconst SECOND = 1e3;\nconst MINUTE = 60 * SECOND;\nconst HOUR = 60 * MINUTE;\nconst DAY = 24 * HOUR;\nconst WEEK = 7 * DAY;\nconst APPROX_MONTH = 30 * DAY;\nconst APPROX_YEAR = 365 * DAY;\nconst MIN_ZOOM_DAYS = 10 / (24 * 60 * 60);\nconst TICK_LADDER = [\n  { unit: \"second\", step: 1, approxMs: SECOND },\n  { unit: \"second\", step: 5, approxMs: 5 * SECOND },\n  { unit: \"second\", step: 15, approxMs: 15 * SECOND },\n  { unit: \"second\", step: 30, approxMs: 30 * SECOND },\n  { unit: \"minute\", step: 1, approxMs: MINUTE },\n  { unit: \"minute\", step: 5, approxMs: 5 * MINUTE },\n  { unit: \"minute\", step: 15, approxMs: 15 * MINUTE },\n  { unit: \"minute\", step: 30, approxMs: 30 * MINUTE },\n  { unit: \"hour\", step: 1, approxMs: HOUR },\n  { unit: \"hour\", step: 3, approxMs: 3 * HOUR },\n  { unit: \"hour\", step: 6, approxMs: 6 * HOUR },\n  { unit: \"hour\", step: 12, approxMs: 12 * HOUR },\n  { unit: \"day\", step: 1, approxMs: DAY },\n  { unit: \"day\", step: 2, approxMs: 2 * DAY },\n  { unit: \"week\", step: 1, approxMs: WEEK },\n  { unit: \"week\", step: 2, approxMs: 2 * WEEK },\n  { unit: \"month\", step: 1, approxMs: APPROX_MONTH },\n  { unit: \"month\", step: 3, approxMs: 3 * APPROX_MONTH },\n  { unit: \"month\", step: 6, approxMs: 6 * APPROX_MONTH },\n  { unit: \"year\", step: 1, approxMs: APPROX_YEAR },\n  { unit: \"year\", step: 2, approxMs: 2 * APPROX_YEAR },\n  { unit: \"year\", step: 5, approxMs: 5 * APPROX_YEAR },\n  { unit: \"year\", step: 10, approxMs: 10 * APPROX_YEAR },\n  { unit: \"year\", step: 25, approxMs: 25 * APPROX_YEAR },\n  { unit: \"year\", step: 50, approxMs: 50 * APPROX_YEAR },\n  { unit: \"year\", step: 100, approxMs: 100 * APPROX_YEAR }\n];\nconst DEFAULT_TICK_COUNT = 10;\nclass TimeScale {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.tickInterval = null;\n    this.timeScaleArray = [];\n    this.utc = w.config.xaxis.labels.datetimeUTC;\n  }\n  /**\n   * Compute raw ticks for a datetime axis spanning [minX, maxX]. Single\n   * uniform stride — one unit, no promotion, no calendar-boundary overlay.\n   * Context (year, day) is folded into each label's format string at\n   * `formatDates` time, not split across promoted ticks.\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @returns {Array<any>} raw ticks (pre-formatting). Pass to recalcDimensionsBasedOnFormat for the final timescaleLabels.\n   */\n  calculateTimeScaleTicks(minX, maxX) {\n    const w = this.w;\n    if (w.globals.allSeriesCollapsed) {\n      w.labelData.labels = [];\n      w.labelData.timescaleLabels = [];\n      this.timeScaleArray = [];\n      return [];\n    }\n    const span = maxX - minX;\n    const daysDiff = span / DAY;\n    w.interact.disableZoomIn = false;\n    w.interact.disableZoomOut = false;\n    if (daysDiff < MIN_ZOOM_DAYS) {\n      w.interact.disableZoomIn = true;\n    } else if (daysDiff > 5e4) {\n      w.interact.disableZoomOut = true;\n    }\n    const targetCount = Number.isFinite(w.config.xaxis.tickAmount) ? (\n      /** @type {number} */\n      w.config.xaxis.tickAmount\n    ) : DEFAULT_TICK_COUNT;\n    this.tickInterval = pickInterval(span, targetCount);\n    const ticks = this.generateBaseTicks(minX, maxX, this.tickInterval);\n    this.timeScaleArray = ticks;\n    return ticks;\n  }\n  /**\n   * Walk the interval stride from `minX` to `maxX`. Every tick carries\n   * `unit: interval.unit` — no promotion, no snapping. Uniform spacing is\n   * guaranteed.\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @param {{ unit: string, step: number }} interval\n   * @returns {Array<any>}\n   */\n  generateBaseTicks(minX, maxX, interval) {\n    const w = this.w;\n    const dt = new DateTime(w);\n    const isUTC = this.utc;\n    const gridWidth = w.layout.gridWidth;\n    const span = maxX - minX;\n    const ticks = [];\n    let t = dt.ceilToBoundary(\n      minX,\n      /** @type {any} */\n      interval.unit,\n      interval.step,\n      isUTC\n    );\n    let iter = 0;\n    const MAX_ITER = 5e3;\n    while (t <= maxX && iter < MAX_ITER) {\n      const f = dt.getDateFields(t, isUTC);\n      const position = span > 0 ? (t - minX) / span * gridWidth : 0;\n      ticks.push({\n        timestamp: t,\n        position,\n        unit: interval.unit,\n        year: f.year,\n        month: f.month + 1,\n        day: f.date,\n        hour: f.hour,\n        minute: f.minute,\n        second: f.second,\n        value: t\n      });\n      t = dt.addInterval(\n        t,\n        /** @type {any} */\n        interval.unit,\n        interval.step,\n        isUTC\n      );\n      iter++;\n    }\n    return ticks;\n  }\n  /**\n   * Public entry called from Core.js after calculateTimeScaleTicks. Formats\n   * the raw ticks into display labels, removes overlapping entries, writes\n   * the result to `w.labelData.timescaleLabels`, and re-runs Dimensions to\n   * lay out the grid based on the final label widths.\n   *\n   * @param {Array<any>} rawTicks\n   */\n  recalcDimensionsBasedOnFormat(rawTicks) {\n    const w = this.w;\n    const formatted = this.formatDates(rawTicks);\n    const filtered = this.removeOverlappingTS(formatted);\n    w.labelData.timescaleLabels = filtered.slice();\n    const dimensions = new Dimensions(this.w, this.ctx);\n    const layoutState = dimensions.plotCoords();\n    this.ctx._writeLayoutCoords(layoutState.layout);\n  }\n  /**\n   * Format each raw tick into a display label. All ticks share one\n   * effective format computed once from the interval unit and the data\n   * range — when the range spans coarser units, the base format from\n   * `datetimeFormatter[unit]` is automatically extended with the higher-\n   * unit context (e.g. month-scale spanning years → `MMM yyyy`, hour-scale\n   * spanning days → `dd MMM HH:mm`). A user-supplied `xaxis.labels.format`\n   * overrides everything.\n   *\n   * @param {Array<any>} rawTicks\n   * @returns {Array<any>}\n   */\n  formatDates(rawTicks) {\n    const w = this.w;\n    const dt = new DateTime(w);\n    const userFormat = w.config.xaxis.labels.format;\n    const dtFmt = w.config.xaxis.labels.datetimeFormatter;\n    const isUTC = this.utc;\n    const pad = (n, len = 2) => String(n).padStart(len, \"0\");\n    const effectiveFormat = userFormat ? userFormat : this._effectiveFormat(rawTicks, dtFmt);\n    return rawTicks.map((tick) => {\n      const date = dt.getDate(tick.timestamp);\n      const value = dt.formatDate(date, effectiveFormat);\n      const ds = `${tick.year}-${pad(tick.month)}-${pad(tick.day)}T${pad(tick.hour)}:${pad(tick.minute)}:${pad(tick.second)}.000${isUTC ? \"Z\" : \"\"}`;\n      return {\n        dateString: ds,\n        position: tick.position,\n        value,\n        unit: tick.unit,\n        year: tick.year,\n        month: tick.month\n      };\n    });\n  }\n  /**\n   * Pick the format string used for every tick this render. Folds coarser\n   * context into the base `datetimeFormatter[unit]` when the data range\n   * spans it. Skipped when the base format already references the higher\n   * unit's tokens (so user customizations aren't doubled).\n   *\n   * @param {Array<any>} rawTicks\n   * @param {Record<string, string>} dtFmt\n   * @returns {string}\n   */\n  _effectiveFormat(rawTicks, dtFmt) {\n    if (rawTicks.length === 0) return dtFmt.day || \"dd MMM\";\n    const unit = this.tickInterval && this.tickInterval.unit || rawTicks[0].unit;\n    const base = dtFmt[unit === \"week\" ? \"day\" : unit] || dtFmt.day || \"dd MMM\";\n    const first = rawTicks[0];\n    const last = rawTicks[rawTicks.length - 1];\n    const spansYears = first.year !== last.year;\n    const spansMonths = spansYears || first.month !== last.month;\n    const spansDays = spansMonths || first.day !== last.day;\n    const hasYearToken = /y/i.test(base);\n    const hasMonthToken = /M/.test(base);\n    const hasDayToken = /d/i.test(base);\n    if (unit === \"month\" || unit === \"week\") {\n      if (spansYears && !hasYearToken) return base + \" yyyy\";\n      return base;\n    }\n    if (unit === \"day\") {\n      if (spansYears && !hasYearToken) return base + \" yyyy\";\n      return base;\n    }\n    if (unit === \"hour\" || unit === \"minute\" || unit === \"second\") {\n      if (spansDays && !hasDayToken && !hasMonthToken) {\n        const prefix = spansYears ? \"dd MMM yyyy\" : \"dd MMM\";\n        return prefix + \" \" + base;\n      }\n      return base;\n    }\n    return base;\n  }\n  /**\n   * Drop labels that would overlap their predecessor (when\n   * `xaxis.labels.hideOverlappingLabels` is true). The first label is always\n   * kept. Width is measured per-label unless all labels have the same string\n   * length, in which case one measurement is reused.\n   *\n   * @param {Array<any>} arr\n   * @returns {Array<any>}\n   */\n  removeOverlappingTS(arr) {\n    if (arr.length === 0) return [];\n    const w = this.w;\n    const graphics = new Graphics(w);\n    let equalLabelLengthFlag = false;\n    let constantLabelWidth;\n    if (arr[0].value && arr.every((lb) => lb.value.length === arr[0].value.length)) {\n      equalLabelLengthFlag = true;\n      constantLabelWidth = graphics.getTextRects(\n        arr[0].value,\n        w.config.xaxis.labels.style.fontSize\n      ).width;\n    }\n    let lastDrawnIndex = 0;\n    const filtered = arr.map((item, index) => {\n      if (index === 0) return item;\n      if (!w.config.xaxis.labels.hideOverlappingLabels) return item;\n      const prevLabelWidth = equalLabelLengthFlag ? (\n        /** @type {number} */\n        constantLabelWidth\n      ) : graphics.getTextRects(\n        arr[lastDrawnIndex].value,\n        w.config.xaxis.labels.style.fontSize\n      ).width;\n      const prevPos = arr[lastDrawnIndex].position;\n      const pos = item.position;\n      if (pos > prevPos + prevLabelWidth + 10) {\n        lastDrawnIndex = index;\n        return item;\n      }\n      return null;\n    }).filter((f) => f !== null);\n    return filtered;\n  }\n}\nfunction pickInterval(span, targetCount) {\n  if (!Number.isFinite(targetCount) || targetCount <= 0) {\n    targetCount = DEFAULT_TICK_COUNT;\n  }\n  if (span <= 0) return TICK_LADDER[0];\n  const targetMs = span / targetCount;\n  let best = TICK_LADDER[0];\n  let bestDist = Infinity;\n  for (const interval of TICK_LADDER) {\n    const dist = Math.abs(Math.log(interval.approxMs / targetMs));\n    if (dist < bestDist) {\n      bestDist = dist;\n      best = interval;\n    }\n  }\n  return best;\n}\nconst REGISTRY_KEY = \"__apexcharts_registry__\";\nif (!/** @type {any} */\nglobalThis[REGISTRY_KEY]) {\n  globalThis[REGISTRY_KEY] = {};\n}\nfunction getRegistry() {\n  return (\n    /** @type {any} */\n    globalThis[REGISTRY_KEY]\n  );\n}\nfunction register(typeMap) {\n  Object.assign(getRegistry(), typeMap);\n}\nfunction getChartClass(type) {\n  const Cls = getRegistry()[type];\n  if (!Cls) {\n    throw new Error(\n      `ApexCharts: chart type \"${type}\" is not registered. Import it via ApexCharts.use() or use the full apexcharts bundle.`\n    );\n  }\n  return Cls;\n}\nclass Core {\n  /**\n   * @param {Element} el\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(el, w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.el = el;\n  }\n  setupElements() {\n    const { globals: gl, config: cnf } = this.w;\n    const ct = cnf.chart.type;\n    const xyChartsArrTypes = [\n      \"line\",\n      \"area\",\n      \"bar\",\n      \"rangeBar\",\n      \"rangeArea\",\n      \"candlestick\",\n      \"boxPlot\",\n      \"violin\",\n      \"scatter\",\n      \"bubble\"\n    ];\n    const axisChartsArrTypes = [\n      ...xyChartsArrTypes,\n      \"radar\",\n      \"heatmap\",\n      \"treemap\"\n    ];\n    gl.axisCharts = axisChartsArrTypes.includes(ct);\n    gl.xyCharts = xyChartsArrTypes.includes(ct);\n    gl.isBarHorizontal = [\"bar\", \"rangeBar\", \"boxPlot\", \"violin\"].includes(ct) && cnf.plotOptions.bar.horizontal;\n    gl.chartClass = `.apexcharts${gl.chartID}`;\n    this.w.dom.baseEl = this.el;\n    this.w.dom.elWrap = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    Graphics.setAttrs(this.w.dom.elWrap, {\n      id: gl.chartClass.substring(1),\n      class: `apexcharts-canvas ${gl.chartClass.substring(1)}`\n    });\n    this.el.appendChild(this.w.dom.elWrap);\n    const SVG2 = (\n      /** @type {any} */\n      globalThis.SVG\n    );\n    this.w.dom.Paper = SVG2().addTo(this.w.dom.elWrap);\n    this.w.dom.Paper.attr({\n      class: \"apexcharts-svg\",\n      \"xmlns:data\": \"ApexChartsNS\",\n      transform: `translate(${cnf.chart.offsetX}, ${cnf.chart.offsetY})`\n    });\n    this.w.dom.Paper.node.style.background = cnf.theme.mode === \"dark\" && !cnf.chart.background ? \"#343A3F\" : cnf.theme.mode === \"light\" && !cnf.chart.background ? \"#fff\" : cnf.chart.background;\n    this.setSVGDimensions();\n    this.w.dom.elLegendForeign = BrowserAPIs.createElementNS(\n      SVGNS,\n      \"foreignObject\"\n    );\n    Graphics.setAttrs(this.w.dom.elLegendForeign, {\n      x: 0,\n      y: 0,\n      width: gl.svgWidth,\n      height: gl.svgHeight\n    });\n    this.w.dom.elLegendWrap = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    this.w.dom.elLegendWrap.classList.add(\"apexcharts-legend\");\n    this.w.dom.elWrap.appendChild(this.w.dom.elLegendWrap);\n    this.w.dom.Paper.node.appendChild(this.w.dom.elLegendForeign);\n    if (cnf.chart.accessibility.enabled && cnf.chart.accessibility.announcements.enabled) {\n      const srStatus = BrowserAPIs.createElement(\"div\");\n      srStatus.className = \"apexcharts-sr-status\";\n      srStatus.setAttribute(\"role\", \"status\");\n      srStatus.setAttribute(\"aria-live\", \"polite\");\n      srStatus.setAttribute(\"aria-atomic\", \"true\");\n      this.w.dom.elWrap.appendChild(srStatus);\n    }\n    if (cnf.chart.accessibility.enabled) {\n      const ariaLabel = this.getAccessibleChartLabel();\n      const svgRole = cnf.chart.accessibility.keyboard.enabled && cnf.chart.accessibility.keyboard.navigation.enabled ? \"application\" : \"img\";\n      this.w.dom.Paper.attr({\n        role: svgRole,\n        \"aria-label\": ariaLabel\n      });\n      if (cnf.chart.accessibility.description) {\n        const descEl = BrowserAPIs.createElementNS(SVGNS, \"desc\");\n        descEl.textContent = cnf.chart.accessibility.description;\n        this.w.dom.Paper.node.insertBefore(\n          descEl,\n          this.w.dom.elLegendForeign.nextSibling\n        );\n      }\n    }\n    this.w.dom.elGraphical = this.w.dom.Paper.group().attr({\n      class: \"apexcharts-inner apexcharts-graphical\"\n    });\n    this.w.dom.elDefs = this.w.dom.Paper.defs();\n    this.w.dom.Paper.add(this.w.dom.elGraphical);\n    this.w.dom.elGraphical.add(this.w.dom.elDefs);\n  }\n  /**\n   * @param {any[]} ser\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  plotChartType(ser, xyRatios) {\n    const { w, ctx } = this;\n    const { config: cnf, globals: gl } = w;\n    const seriesTypes = {\n      line: { series: [], i: [] },\n      area: { series: [], i: [] },\n      scatter: { series: [], i: [] },\n      bubble: { series: [], i: [] },\n      bar: { series: [], i: [] },\n      candlestick: { series: [], i: [] },\n      boxPlot: { series: [], i: [] },\n      violin: { series: [], i: [] },\n      rangeBar: { series: [], i: [] },\n      rangeArea: { series: [], seriesRangeEnd: [], i: [] }\n    };\n    const chartType = cnf.chart.type || \"line\";\n    let nonComboType = null;\n    let comboCount = 0;\n    this.w.seriesData.series.forEach((serie, st) => {\n      var _a, _b;\n      const seriesType = ((_a = ser[st]) == null ? void 0 : _a.type) === \"column\" ? \"bar\" : ((_b = ser[st]) == null ? void 0 : _b.type) || (chartType === \"column\" ? \"bar\" : chartType);\n      const st_ = (\n        /** @type {Record<string,any>} */\n        seriesTypes\n      );\n      if (st_[seriesType]) {\n        if (seriesType === \"rangeArea\") {\n          st_[seriesType].series.push(this.w.rangeData.seriesRangeStart[st]);\n          st_[seriesType].seriesRangeEnd.push(\n            this.w.rangeData.seriesRangeEnd[st]\n          );\n        } else {\n          st_[seriesType].series.push(serie);\n        }\n        st_[seriesType].i.push(st);\n        if (seriesType === \"bar\") w.globals.columnSeries = seriesTypes.bar;\n      } else if ([\n        \"heatmap\",\n        \"treemap\",\n        \"pie\",\n        \"donut\",\n        \"polarArea\",\n        \"radialBar\",\n        \"radar\"\n      ].includes(seriesType)) {\n        nonComboType = seriesType;\n      } else {\n        console.warn(\n          `You have specified an unrecognized series type (${seriesType}).`\n        );\n      }\n      if (chartType !== seriesType && seriesType !== \"scatter\") comboCount++;\n    });\n    if (comboCount > 0) {\n      if (nonComboType) {\n        console.warn(\n          `Chart or series type ${nonComboType} cannot appear with other chart or series types.`\n        );\n      }\n      if (seriesTypes.bar.series.length > 0 && cnf.plotOptions.bar.horizontal) {\n        comboCount -= seriesTypes.bar.series.length;\n        seriesTypes.bar = { series: [], i: [] };\n        w.globals.columnSeries = { series: [], i: [] };\n        console.warn(\n          \"Horizontal bars are not supported in a mixed/combo chart. Please turn off `plotOptions.bar.horizontal`\"\n        );\n      }\n    }\n    gl.comboCharts || (gl.comboCharts = comboCount > 0);\n    const needsLine = seriesTypes.line.series.length > 0 || seriesTypes.area.series.length > 0 || seriesTypes.scatter.series.length > 0 || seriesTypes.bubble.series.length > 0 || seriesTypes.rangeArea.series.length > 0 || !gl.comboCharts && [\"line\", \"area\", \"scatter\", \"bubble\", \"rangeArea\"].includes(\n      cnf.chart.type\n    );\n    const line = needsLine ? new (getChartClass(\"line\"))(ctx.w, ctx, xyRatios) : null;\n    const needsCandlestick = seriesTypes.candlestick.series.length > 0 || seriesTypes.boxPlot.series.length > 0 || !gl.comboCharts && [\"candlestick\", \"boxPlot\"].includes(cnf.chart.type);\n    const boxCandlestick = needsCandlestick ? new (getChartClass(\"candlestick\"))(ctx.w, ctx, xyRatios) : null;\n    const needsViolin = seriesTypes.violin.series.length > 0 || !gl.comboCharts && cnf.chart.type === \"violin\";\n    const violin = needsViolin ? new (getChartClass(\"violin\"))(ctx.w, ctx, xyRatios) : null;\n    const needsPie = !gl.comboCharts && [\"pie\", \"donut\", \"polarArea\"].includes(cnf.chart.type);\n    ctx.pie = needsPie ? new (getChartClass(\"pie\"))(ctx.w, ctx) : null;\n    const needsRangeBar = seriesTypes.rangeBar.series.length > 0 || !gl.comboCharts && cnf.chart.type === \"rangeBar\";\n    ctx.rangeBar = needsRangeBar ? new (getChartClass(\"rangeBar\"))(ctx.w, ctx, xyRatios) : null;\n    let elGraph = [];\n    if (gl.comboCharts) {\n      const coreUtils = new CoreUtils(this.w);\n      if (seriesTypes.area.series.length > 0) {\n        elGraph.push(\n          ...coreUtils.drawSeriesByGroup(\n            seriesTypes.area,\n            gl.areaGroups,\n            \"area\",\n            line\n          )\n        );\n      }\n      if (seriesTypes.bar.series.length > 0) {\n        if (cnf.chart.stacked) {\n          const barStacked = new (getChartClass(\"barStacked\"))(\n            ctx.w,\n            ctx,\n            xyRatios\n          );\n          elGraph.push(\n            barStacked.draw(seriesTypes.bar.series, seriesTypes.bar.i)\n          );\n        } else {\n          ctx.bar = new (getChartClass(\"bar\"))(ctx.w, ctx, xyRatios);\n          elGraph.push(ctx.bar.draw(seriesTypes.bar.series, seriesTypes.bar.i));\n        }\n      }\n      if (seriesTypes.rangeArea.series.length > 0) {\n        elGraph.push(\n          line.draw(\n            seriesTypes.rangeArea.series,\n            \"rangeArea\",\n            seriesTypes.rangeArea.i,\n            seriesTypes.rangeArea.seriesRangeEnd\n          )\n        );\n      }\n      if (seriesTypes.line.series.length > 0) {\n        elGraph.push(\n          ...coreUtils.drawSeriesByGroup(\n            seriesTypes.line,\n            gl.lineGroups,\n            \"line\",\n            line\n          )\n        );\n      }\n      if (seriesTypes.candlestick.series.length > 0) {\n        elGraph.push(\n          boxCandlestick.draw(\n            seriesTypes.candlestick.series,\n            \"candlestick\",\n            seriesTypes.candlestick.i\n          )\n        );\n      }\n      if (seriesTypes.boxPlot.series.length > 0) {\n        elGraph.push(\n          boxCandlestick.draw(\n            seriesTypes.boxPlot.series,\n            \"boxPlot\",\n            seriesTypes.boxPlot.i\n          )\n        );\n      }\n      if (seriesTypes.violin.series.length > 0) {\n        elGraph.push(\n          violin.draw(seriesTypes.violin.series, \"violin\", seriesTypes.violin.i)\n        );\n      }\n      if (seriesTypes.rangeBar.series.length > 0) {\n        elGraph.push(\n          ctx.rangeBar.draw(\n            seriesTypes.rangeBar.series,\n            seriesTypes.rangeBar.i\n          )\n        );\n      }\n      if (seriesTypes.scatter.series.length > 0) {\n        const scatterLine = new (getChartClass(\"line\"))(\n          ctx.w,\n          ctx,\n          xyRatios,\n          true\n        );\n        elGraph.push(\n          scatterLine.draw(\n            seriesTypes.scatter.series,\n            \"scatter\",\n            seriesTypes.scatter.i\n          )\n        );\n      }\n      if (seriesTypes.bubble.series.length > 0) {\n        const bubbleLine = new (getChartClass(\"line\"))(\n          ctx.w,\n          ctx,\n          xyRatios,\n          true\n        );\n        elGraph.push(\n          bubbleLine.draw(\n            seriesTypes.bubble.series,\n            \"bubble\",\n            seriesTypes.bubble.i\n          )\n        );\n      }\n    } else {\n      const type = cnf.chart.type;\n      switch (type) {\n        case \"line\":\n          elGraph = line.draw(this.w.seriesData.series, \"line\");\n          break;\n        case \"area\":\n          elGraph = line.draw(this.w.seriesData.series, \"area\");\n          break;\n        case \"bar\":\n          if (cnf.chart.stacked) {\n            const barStacked = new (getChartClass(\"barStacked\"))(\n              ctx.w,\n              ctx,\n              xyRatios\n            );\n            elGraph = barStacked.draw(this.w.seriesData.series);\n          } else {\n            ctx.bar = new (getChartClass(\"bar\"))(ctx.w, ctx, xyRatios);\n            elGraph = ctx.bar.draw(this.w.seriesData.series);\n          }\n          break;\n        case \"candlestick\":\n          elGraph = boxCandlestick.draw(this.w.seriesData.series, \"candlestick\");\n          break;\n        case \"boxPlot\":\n          elGraph = boxCandlestick.draw(this.w.seriesData.series, type);\n          break;\n        case \"violin\":\n          elGraph = violin.draw(this.w.seriesData.series, \"violin\");\n          break;\n        case \"rangeBar\":\n          elGraph = ctx.rangeBar.draw(this.w.seriesData.series);\n          break;\n        case \"rangeArea\":\n          elGraph = line.draw(\n            this.w.rangeData.seriesRangeStart,\n            \"rangeArea\",\n            void 0,\n            this.w.rangeData.seriesRangeEnd\n          );\n          break;\n        case \"heatmap\": {\n          const heatmap = new (getChartClass(\"heatmap\"))(ctx.w, ctx, xyRatios);\n          elGraph = heatmap.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"treemap\": {\n          const treemap = new (getChartClass(\"treemap\"))(ctx.w, ctx);\n          elGraph = treemap.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"pie\":\n        case \"donut\":\n        case \"polarArea\":\n          elGraph = ctx.pie.draw(this.w.seriesData.series);\n          break;\n        case \"radialBar\": {\n          const radialBar = new (getChartClass(\"radialBar\"))(ctx.w, ctx);\n          elGraph = radialBar.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"radar\": {\n          const radar = new (getChartClass(\"radar\"))(ctx.w, ctx);\n          elGraph = radar.draw(this.w.seriesData.series);\n          break;\n        }\n        default:\n          elGraph = line.draw(this.w.seriesData.series);\n      }\n    }\n    return elGraph;\n  }\n  setSVGDimensions() {\n    var _a;\n    const { globals: gl, config: cnf } = this.w;\n    cnf.chart.width = cnf.chart.width || \"100%\";\n    cnf.chart.height = cnf.chart.height || \"auto\";\n    const rawWidth = cnf.chart.width;\n    const rawHeight = cnf.chart.height;\n    gl.svgWidth = NaN;\n    gl.svgHeight = NaN;\n    let elDim = Utils$1.getDimensions(this.el);\n    const widthUnit = rawWidth.toString().split(/[0-9]+/g).pop();\n    if (widthUnit === \"%\") {\n      if (Utils$1.isNumber(elDim[0])) {\n        if (elDim[0].width === 0) {\n          elDim = Utils$1.getDimensions(this.el.parentNode);\n        }\n        gl.svgWidth = elDim[0] * parseInt(rawWidth, 10) / 100;\n      }\n    } else if (widthUnit === \"px\" || widthUnit === \"\") {\n      gl.svgWidth = parseInt(rawWidth, 10);\n    }\n    const heightUnit = String(rawHeight).toString().split(/[0-9]+/g).pop();\n    if (rawHeight !== \"auto\" && rawHeight !== \"\") {\n      if (heightUnit === \"%\") {\n        const elParentDim = Utils$1.getDimensions(this.el.parentNode);\n        gl.svgHeight = elParentDim[1] * parseInt(rawHeight, 10) / 100;\n      } else {\n        gl.svgHeight = parseInt(rawHeight, 10);\n      }\n    } else {\n      gl.svgHeight = gl.axisCharts ? gl.svgWidth / 1.61 : gl.svgWidth / 1.2;\n    }\n    gl.svgWidth = Math.max(gl.svgWidth, 0);\n    gl.svgHeight = Math.max(gl.svgHeight, 0);\n    Graphics.setAttrs(this.w.dom.Paper.node, {\n      width: gl.svgWidth,\n      height: gl.svgHeight\n    });\n    if (heightUnit !== \"%\" && Environment.isBrowser()) {\n      const needsAxisPadding = gl.axisCharts && (cnf.grid.show || cnf.dataLabels.enabled || cnf.xaxis.labels.show || cnf.xaxis.axisBorder.show || cnf.xaxis.axisTicks.show || cnf.yaxis.some(\n        (y) => y.show && (y.labels.show || y.axisBorder.show || y.axisTicks.show)\n      ));\n      const offsetY = cnf.chart.sparkline.enabled || !needsAxisPadding ? 0 : cnf.chart.parentHeightOffset;\n      const paperNode = this.w.dom.Paper.node;\n      if ((_a = paperNode.parentNode) == null ? void 0 : _a.parentNode) {\n        paperNode.parentNode.parentNode.style.minHeight = `${gl.svgHeight + offsetY}px`;\n      }\n    }\n    this.w.dom.elWrap.style.width = `${gl.svgWidth}px`;\n    this.w.dom.elWrap.style.height = `${gl.svgHeight}px`;\n  }\n  shiftGraphPosition() {\n    const { globals: gl } = this.w;\n    const { translateY: tY, translateX: tX } = gl;\n    Graphics.setAttrs(this.w.dom.elGraphical.node, {\n      transform: `translate(${tX}, ${tY})`\n    });\n  }\n  resizeNonAxisCharts() {\n    var _a, _b, _c, _d, _e, _f;\n    const { w } = this;\n    const heightStr = w.config.chart.height ? String(w.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    const isPercentHeight = heightStr.includes(\"%\");\n    let legendHeight = 0;\n    let offY = w.config.chart.sparkline.enabled ? 1 : 15;\n    offY += w.config.grid.padding.bottom;\n    if ([\"top\", \"bottom\"].includes(w.config.legend.position) && w.config.legend.show && !w.config.legend.floating) {\n      legendHeight = ((_b = (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.getLegendDimensions().clwh) != null ? _b : 0) + 7;\n    }\n    const el = w.dom.baseEl.querySelector(\n      \".apexcharts-radialbar, .apexcharts-pie\"\n    );\n    const externalLabelMarginY = w.globals.pieExternalLabelMarginY || 0;\n    let chartInnerDimensions = externalLabelMarginY > 0 ? w.globals.radialSize * 2 + externalLabelMarginY * 2 : w.globals.radialSize * 2.05;\n    const radialAngleSpan = Math.abs(\n      w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle\n    );\n    if (el && !w.config.chart.sparkline.enabled && radialAngleSpan < 360) {\n      const svgRect = Utils$1.getBoundingClientRect(this.w.dom.Paper.node);\n      let arcTopFromSVGTop = Infinity;\n      let arcBottomFromSVGTop = -Infinity;\n      const accumulate = (node) => {\n        var _a2, _b2, _c2, _d2;\n        if ((_a2 = node.classList) == null ? void 0 : _a2.contains(\"apexcharts-radialbar-hollow\")) {\n          return;\n        }\n        const tag = (_c2 = (_b2 = node.tagName) == null ? void 0 : _b2.toLowerCase) == null ? void 0 : _c2.call(_b2);\n        if (tag === \"text\" || tag === \"tspan\") return;\n        const children = Array.from((_d2 = node.children) != null ? _d2 : []);\n        if (children.length > 0) {\n          children.forEach((c) => accumulate(\n            /** @type {Element} */\n            c\n          ));\n          return;\n        }\n        const r = Utils$1.getBoundingClientRect(node);\n        const height = r.bottom - r.top;\n        if (height > 0) {\n          const top = r.top - svgRect.top;\n          const bottom = r.bottom - svgRect.top;\n          if (top < arcTopFromSVGTop) arcTopFromSVGTop = top;\n          if (bottom > arcBottomFromSVGTop) arcBottomFromSVGTop = bottom;\n        }\n      };\n      Array.from((_c = el.children) != null ? _c : []).forEach(\n        (c) => accumulate(\n          /** @type {Element} */\n          c\n        )\n      );\n      if (!Number.isFinite(arcTopFromSVGTop)) arcTopFromSVGTop = 0;\n      if (!Number.isFinite(arcBottomFromSVGTop)) {\n        const elRect = Utils$1.getBoundingClientRect(el);\n        arcBottomFromSVGTop = elRect.bottom - svgRect.top;\n      }\n      const padding = Math.max(offY, w.globals.radialSize * 0.2);\n      const verticalShift = Math.max(padding - arcTopFromSVGTop, 0);\n      if (verticalShift !== 0) {\n        w.layout.translateY = ((_d = w.layout.translateY) != null ? _d : 0) + verticalShift;\n        Graphics.setAttrs(this.w.dom.elGraphical.node, {\n          transform: `translate(${(_e = w.layout.translateX) != null ? _e : 0}, ${w.layout.translateY})`\n        });\n        arcBottomFromSVGTop += verticalShift;\n      }\n      chartInnerDimensions = arcBottomFromSVGTop > 0 ? arcBottomFromSVGTop : w.globals.radialSize * 2.05;\n      const bottomPadding = Math.max(padding, arcTopFromSVGTop);\n      const svgHeight = Math.ceil(\n        chartInnerDimensions + legendHeight + bottomPadding\n      );\n      const chartOffsetY = (_f = w.config.chart.offsetY) != null ? _f : 0;\n      const elWrapHeight = svgHeight + Math.max(chartOffsetY, 0);\n      if (!isPercentHeight) {\n        if (this.w.dom.elLegendForeign) {\n          this.w.dom.elLegendForeign.setAttribute(\n            \"height\",\n            String(elWrapHeight)\n          );\n        }\n        this.w.dom.elWrap.style.height = `${elWrapHeight}px`;\n        Graphics.setAttrs(this.w.dom.Paper.node, { height: svgHeight });\n        if (Environment.isBrowser()) {\n          this.w.dom.Paper.node.parentNode.parentNode.style.minHeight = `${elWrapHeight}px`;\n        }\n      }\n      return;\n    }\n    const newHeight = Math.ceil(\n      chartInnerDimensions + this.w.layout.translateY + legendHeight + offY\n    );\n    if (userSetFixedHeight) return;\n    if (this.w.dom.elLegendForeign) {\n      this.w.dom.elLegendForeign.setAttribute(\"height\", String(newHeight));\n    }\n    this.w.dom.elWrap.style.height = `${newHeight}px`;\n    Graphics.setAttrs(this.w.dom.Paper.node, { height: newHeight });\n    if (Environment.isBrowser()) {\n      this.w.dom.Paper.node.parentNode.parentNode.style.minHeight = `${newHeight}px`;\n    }\n  }\n  coreCalculations() {\n    new Range(this.w).init();\n  }\n  resetGlobals() {\n    const resetxyValues = () => this.w.config.series.map(() => []);\n    const globalObj = new Globals();\n    const { globals: gl } = this.w;\n    const parsingFlags = {\n      dataWasParsed: this.w.axisFlags.dataWasParsed,\n      originalSeries: gl.originalSeries\n    };\n    globalObj.initGlobalVars(gl);\n    gl.seriesXvalues = resetxyValues();\n    gl.seriesYvalues = resetxyValues();\n    if (parsingFlags.dataWasParsed) {\n      this.w.axisFlags.dataWasParsed = parsingFlags.dataWasParsed;\n      gl.originalSeries = parsingFlags.originalSeries;\n    }\n  }\n  isMultipleY() {\n    if (Array.isArray(this.w.config.yaxis) && this.w.config.yaxis.length > 1) {\n      this.w.globals.isMultipleYAxis = true;\n      return true;\n    }\n    return false;\n  }\n  xySettings() {\n    const { w } = this;\n    let xyRatios = null;\n    if (w.globals.axisCharts) {\n      if (w.config.xaxis.crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawXCrosshairs();\n      }\n      if (w.config.yaxis[0].crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawYCrosshairs();\n      }\n      if (w.config.xaxis.type === \"datetime\" && w.config.xaxis.labels.formatter === void 0) {\n        this.ctx.timeScale = new TimeScale(this.w, this.ctx);\n        let formattedTimeScale = [];\n        if (isFinite(w.globals.minX) && isFinite(w.globals.maxX) && !w.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w.globals.minX,\n            w.globals.maxX\n          );\n        } else if (w.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w.globals.minY,\n            w.globals.maxY\n          );\n        }\n        this.ctx.timeScale.recalcDimensionsBasedOnFormat(formattedTimeScale);\n      }\n      const coreUtils = new CoreUtils(this.w);\n      xyRatios = coreUtils.getCalculatedRatios();\n    }\n    return xyRatios;\n  }\n  /**\n   * @param {any} targetChart\n   */\n  updateSourceChart(targetChart) {\n    this.ctx.w.interact.selection = void 0;\n    this.ctx.updateHelpers._updateOptions(\n      {\n        chart: {\n          selection: {\n            xaxis: {\n              min: targetChart.w.globals.minX,\n              max: targetChart.w.globals.maxX\n            }\n          }\n        }\n      },\n      false,\n      false\n    );\n  }\n  setupBrushHandler() {\n    const { ctx, w } = this;\n    if (!w.config.chart.brush.enabled) return;\n    if (typeof w.config.chart.events.selection !== \"function\") {\n      const targets = Array.isArray(w.config.chart.brush.targets) ? w.config.chart.brush.targets : [w.config.chart.brush.target];\n      targets.forEach((target) => {\n        const targetChart = (\n          /** @type {any} */\n          ctx.constructor.getChartByID(\n            target\n          )\n        );\n        targetChart.w.globals.brushSource = this.ctx;\n        if (typeof targetChart.w.config.chart.events.zoomed !== \"function\") {\n          targetChart.w.config.chart.events.zoomed = () => this.updateSourceChart(targetChart);\n        }\n        if (typeof targetChart.w.config.chart.events.scrolled !== \"function\") {\n          targetChart.w.config.chart.events.scrolled = () => (\n            /**\n             * @param {any} chart\n             * @param {Event} e\n             */\n            this.updateSourceChart(targetChart)\n          );\n        }\n      });\n      w.config.chart.events.selection = (chart, e) => {\n        targets.forEach((target) => {\n          const targetChart = (\n            /** @type {any} */\n            ctx.constructor.getChartByID(\n              target\n            )\n          );\n          targetChart.ctx.updateHelpers._updateOptions(\n            {\n              xaxis: {\n                min: e.xaxis.min,\n                max: e.xaxis.max\n              }\n            },\n            false,\n            false,\n            false,\n            false\n          );\n        });\n      };\n    }\n  }\n  getAccessibleChartLabel() {\n    const w = this.w;\n    const cnf = w.config;\n    if (cnf.chart.accessibility && cnf.chart.accessibility.description) {\n      return cnf.chart.accessibility.description;\n    }\n    const chartType = cnf.chart.type;\n    const parts = [];\n    if (cnf.title.text) {\n      parts.push(`${cnf.title.text}. ${chartType} chart`);\n      if (cnf.subtitle.text) parts.push(cnf.subtitle.text);\n    } else {\n      const namedSeries = (() => {\n        if (Array.isArray(w.seriesData.seriesNames) && w.seriesData.seriesNames.length) {\n          return w.seriesData.seriesNames.filter(Boolean);\n        }\n        if (Array.isArray(cnf.series)) {\n          return cnf.series.map((s) => typeof s === \"object\" && s !== null ? s.name : null).filter(Boolean);\n        }\n        return [];\n      })();\n      const seriesCount = w.seriesData.series.length || (cnf.series ? cnf.series.length : 0);\n      if (namedSeries.length) {\n        parts.push(\n          `${chartType} chart with ${seriesCount} data series: ${namedSeries.join(\", \")}`\n        );\n      } else {\n        parts.push(`${chartType} chart with ${seriesCount} data series`);\n      }\n    }\n    return parts.join(\". \");\n  }\n}\nclass Data {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w, { resetGlobals = () => {\n  }, isMultipleY = () => {\n  } } = {}) {\n    this.w = w;\n    this.resetGlobals = resetGlobals;\n    this.isMultipleY = isMultipleY;\n    this.twoDSeries = [];\n    this.threeDSeries = [];\n    this.twoDSeriesX = [];\n    this.seriesGoals = [];\n    this.coreUtils = new CoreUtils(this.w);\n    this.activeSeriesIndex = 0;\n  }\n  // Helper to get the first valid data point from the active series\n  getFirstDataPoint() {\n    const series = this.w.config.series;\n    const sr = new Series(this.w);\n    this.activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n    const activeItem = (\n      /** @type {any} */\n      series[this.activeSeriesIndex]\n    );\n    if (activeItem && activeItem.data && activeItem.data.length > 0 && activeItem.data[0] !== null && typeof activeItem.data[0] !== \"undefined\") {\n      return activeItem.data[0];\n    }\n    return null;\n  }\n  isMultiFormat() {\n    return this.isFormatXY() || this.isFormat2DArray();\n  }\n  // given format is [{x, y}, {x, y}]\n  isFormatXY() {\n    var _a;\n    const firstDataPoint = this.getFirstDataPoint();\n    if (!firstDataPoint || typeof firstDataPoint.x === \"undefined\") return false;\n    const data = (\n      /** @type {any} */\n      (_a = this.w.config.series[this.activeSeriesIndex]) == null ? void 0 : _a.data\n    );\n    if (data) {\n      const isXY = (pt) => pt && typeof pt.x !== \"undefined\";\n      for (let k = 1; k < Math.min(3, data.length); k++) {\n        if (isXY(data[k]) !== true) {\n          console.warn(\n            `ApexCharts: series data has mixed formats starting at index ${k}`\n          );\n          break;\n        }\n      }\n    }\n    return true;\n  }\n  // given format is [[x, y], [x, y]]\n  isFormat2DArray() {\n    const firstDataPoint = this.getFirstDataPoint();\n    return firstDataPoint && Array.isArray(firstDataPoint);\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormat2DArray(ser, i) {\n    const cnf = this.w.config;\n    const data = ser[i].data;\n    const isBoxPlot = cnf.chart.type === \"boxPlot\" || /** @type {any} */\n    cnf.series[i].type === \"boxPlot\";\n    for (let j = 0; j < data.length; j++) {\n      const point = data[j];\n      const x = point[0];\n      const y = point[1];\n      const z = point[2];\n      if (typeof y !== \"undefined\") {\n        if (Array.isArray(y) && y.length === 4 && !isBoxPlot) {\n          this.twoDSeries.push(Utils$1.parseNumber(y[3]));\n        } else if (point.length >= 5) {\n          this.twoDSeries.push(Utils$1.parseNumber(point[4]));\n        } else {\n          this.twoDSeries.push(Utils$1.parseNumber(y));\n        }\n        this.w.axisFlags.dataFormatXNumeric = true;\n      }\n      if (cnf.xaxis.type === \"datetime\") {\n        const ts = new Date(x).getTime();\n        this.twoDSeriesX.push(ts);\n      } else {\n        this.twoDSeriesX.push(x);\n      }\n      if (typeof z !== \"undefined\") {\n        this.threeDSeries.push(z);\n        this.w.axisFlags.isDataXYZ = true;\n      }\n    }\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormatXY(ser, i) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    const data = ser[i].data;\n    let activeI = i;\n    if (gl.collapsedSeriesIndices.indexOf(i) > -1) {\n      activeI = this.activeSeriesIndex;\n    }\n    const activeData = ser[activeI].data;\n    for (let j = 0; j < data.length; j++) {\n      const point = data[j];\n      if (typeof point.y !== \"undefined\") {\n        const val = Array.isArray(point.y) ? Utils$1.parseNumber(point.y[point.y.length - 1]) : Utils$1.parseNumber(point.y);\n        this.twoDSeries.push(val);\n      }\n      if (typeof this.seriesGoals[i] === \"undefined\") {\n        this.seriesGoals[i] = [];\n      }\n      if (typeof point.goals !== \"undefined\" && Array.isArray(point.goals)) {\n        this.seriesGoals[i].push(point.goals);\n      } else {\n        this.seriesGoals[i].push(null);\n      }\n      if (typeof point.z !== \"undefined\") {\n        this.threeDSeries.push(point.z);\n        this.w.axisFlags.isDataXYZ = true;\n      }\n    }\n    for (let j = 0; j < activeData.length; j++) {\n      const point = activeData[j];\n      const x = point.x;\n      const isXString = typeof x === \"string\";\n      const isXArr = Array.isArray(x);\n      const isXDate = !isXArr && !!dt.isValidDate(x);\n      if (isXString || isXDate) {\n        if (isXString || cnf.xaxis.convertedCatToNumeric) {\n          const isRangeColumn = gl.isBarHorizontal && this.w.axisFlags.isRangeData;\n          if (cnf.xaxis.type === \"datetime\" && !isRangeColumn) {\n            this.twoDSeriesX.push(dt.parseDate(x));\n          } else {\n            this.fallbackToCategory = true;\n            this.twoDSeriesX.push(x);\n            if (!isNaN(x) && this.w.config.xaxis.type !== \"category\" && typeof x !== \"string\") {\n              this.w.axisFlags.isXNumeric = true;\n            }\n          }\n        } else {\n          if (cnf.xaxis.type === \"datetime\") {\n            this.twoDSeriesX.push(dt.parseDate(x.toString()));\n          } else {\n            this.w.axisFlags.dataFormatXNumeric = true;\n            this.w.axisFlags.isXNumeric = true;\n            this.twoDSeriesX.push(parseFloat(x));\n          }\n        }\n      } else if (isXArr) {\n        this.fallbackToCategory = true;\n        this.twoDSeriesX.push(x);\n      } else {\n        this.w.axisFlags.isXNumeric = true;\n        this.w.axisFlags.dataFormatXNumeric = true;\n        this.twoDSeriesX.push(x);\n      }\n    }\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeData(ser, i) {\n    let range = { start: [], end: [], rangeUniques: [] };\n    if (this.isFormat2DArray()) {\n      range = this.handleRangeDataFormat(\"array\", ser, i);\n    } else if (this.isFormatXY()) {\n      range = this.handleRangeDataFormat(\"xy\", ser, i);\n    }\n    this.w.rangeData.seriesRangeStart[i] = range.start === void 0 ? [] : range.start;\n    this.w.rangeData.seriesRangeEnd[i] = range.end === void 0 ? [] : range.end;\n    this.w.rangeData.seriesRange[i] = range.rangeUniques;\n    this.w.rangeData.seriesRange.forEach((sr) => {\n      if (!sr) return;\n      sr.forEach((sarr) => {\n        const yItems = (\n          /** @type {any} */\n          sarr.y\n        );\n        const len = (\n          /** @type {any[]} */\n          yItems.length\n        );\n        if (len <= 1) return;\n        for (let arri = 0; arri < len; arri++) {\n          const arr = (\n            /** @type {any} */\n            yItems[arri]\n          );\n          const range1y1 = arr.y1;\n          const range1y2 = arr.y2;\n          for (let sri = arri + 1; sri < len; sri++) {\n            const range2 = (\n              /** @type {any} */\n              yItems[sri]\n            );\n            const range2y1 = range2.y1;\n            const range2y2 = range2.y2;\n            if (range1y1 <= range2y2 && range2y1 <= range1y2) {\n              const sarrAny = (\n                /** @type {any} */\n                sarr\n              );\n              sarrAny.overlaps.add(arr.rangeName);\n              sarrAny.overlaps.add(range2.rangeName);\n            }\n          }\n        }\n      });\n    });\n    return range;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxData(ser, i) {\n    let ohlc = { o: [], h: [], m: [], l: [], c: [] };\n    if (this.isFormat2DArray()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"array\", ser, i);\n    } else if (this.isFormatXY()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"xy\", ser, i);\n    }\n    this.w.candleData.seriesCandleO[i] = ohlc.o;\n    this.w.candleData.seriesCandleH[i] = ohlc.h;\n    this.w.candleData.seriesCandleM[i] = ohlc.m;\n    this.w.candleData.seriesCandleL[i] = ohlc.l;\n    this.w.candleData.seriesCandleC[i] = ohlc.c;\n    this.w.candleData.seriesBoxPoints[i] = ohlc.points || [];\n    return ohlc;\n  }\n  /**\n   * Parse a violin series. Each data point carries a precomputed density\n   * profile (the violin shape) and an array of raw observations (the jitter):\n   *\n   *   { x, y: { density: [[value, weight], ...], points: [v1, v2, ...] } }\n   *\n   * Array fallback form: [x, densityPairs, pointsArray].\n   *\n   * Density `weight` need not be normalized — Violin.js scales each violin by\n   * its own maxWeight. The representative scalar pushed into the main series\n   * (so generic code paths see a non-null y) is the density mode — the value\n   * carrying the greatest weight.\n   *\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleViolinData(ser, i) {\n    var _a, _b, _c, _d, _e, _f;\n    const w = this.w;\n    const data = ser[i].data;\n    const densityArr = [];\n    const pointsArr = [];\n    const minArr = [];\n    const maxArr = [];\n    const placeholders = [];\n    for (let j = 0; j < data.length; j++) {\n      const d = data[j];\n      const dens = (_c = (_b = (_a = d == null ? void 0 : d.y) == null ? void 0 : _a.density) != null ? _b : d == null ? void 0 : d[1]) != null ? _c : [];\n      const pts = (_f = (_e = (_d = d == null ? void 0 : d.y) == null ? void 0 : _d.points) != null ? _e : d == null ? void 0 : d[2]) != null ? _f : [];\n      const values = [];\n      const weights = [];\n      let maxWeight = 0;\n      let modeValue = null;\n      let minVal = Infinity;\n      let maxVal = -Infinity;\n      for (let k = 0; k < dens.length; k++) {\n        const v = Utils$1.parseNumber(dens[k][0]);\n        const wt = Utils$1.parseNumber(dens[k][1]);\n        if (v === null || wt === null) continue;\n        values.push(v);\n        weights.push(wt);\n        if (wt > maxWeight) {\n          maxWeight = wt;\n          modeValue = v;\n        }\n        if (v < minVal) minVal = v;\n        if (v > maxVal) maxVal = v;\n      }\n      const cleanPts = [];\n      for (let k = 0; k < pts.length; k++) {\n        const p = Utils$1.parseNumber(pts[k]);\n        if (p === null) continue;\n        cleanPts.push(p);\n        if (p < minVal) minVal = p;\n        if (p > maxVal) maxVal = p;\n      }\n      densityArr.push({ values, weights, maxWeight });\n      pointsArr.push(cleanPts);\n      minArr.push(minVal === Infinity ? 0 : minVal);\n      maxArr.push(maxVal === -Infinity ? 0 : maxVal);\n      placeholders.push(\n        modeValue !== null ? modeValue : cleanPts.length ? cleanPts[Math.floor(cleanPts.length / 2)] : 0\n      );\n    }\n    w.violinData.seriesViolinDensity[i] = densityArr;\n    w.violinData.seriesViolinPoints[i] = pointsArr;\n    w.violinData.seriesViolinMin[i] = minArr;\n    w.violinData.seriesViolinMax[i] = maxArr;\n    this.twoDSeries = placeholders;\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeDataFormat(format, ser, i) {\n    const rangeStart = [];\n    const rangeEnd = [];\n    const uniqueKeysMap = /* @__PURE__ */ new Map();\n    const uniqueKeys = [];\n    ser[i].data.forEach((item) => {\n      if (!uniqueKeysMap.has(item.x)) {\n        const keyObj = {\n          x: item.x,\n          overlaps: /* @__PURE__ */ new Set(),\n          y: []\n        };\n        uniqueKeysMap.set(item.x, keyObj);\n        uniqueKeys.push(keyObj);\n      }\n    });\n    if (format === \"array\") {\n      for (let j = 0; j < ser[i].data.length; j++) {\n        if (Array.isArray(ser[i].data[j])) {\n          rangeStart.push(ser[i].data[j][1][0]);\n          rangeEnd.push(ser[i].data[j][1][1]);\n        } else {\n          rangeStart.push(ser[i].data[j]);\n          rangeEnd.push(ser[i].data[j]);\n        }\n      }\n    } else if (format === \"xy\") {\n      for (let j = 0; j < ser[i].data.length; j++) {\n        const isDataPoint2D = Array.isArray(ser[i].data[j].y);\n        const id = Utils$1.randomId();\n        const x = ser[i].data[j].x;\n        const y = {\n          y1: isDataPoint2D ? ser[i].data[j].y[0] : ser[i].data[j].y,\n          y2: isDataPoint2D ? ser[i].data[j].y[1] : ser[i].data[j].y,\n          rangeName: id\n        };\n        ser[i].data[j].rangeName = id;\n        const keyObj = uniqueKeysMap.get(x);\n        if (keyObj) {\n          keyObj.y.push(y);\n        }\n        rangeStart.push(y.y1);\n        rangeEnd.push(y.y2);\n      }\n    }\n    return {\n      start: rangeStart,\n      end: rangeEnd,\n      rangeUniques: uniqueKeys\n    };\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxDataFormat(format, ser, i) {\n    const w = this.w;\n    const isBoxPlot = w.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n    w.config.series[i].type === \"boxPlot\";\n    const serO = [];\n    const serH = [];\n    const serM = [];\n    const serL = [];\n    const serC = [];\n    const serPoints = [];\n    const data = ser[i].data;\n    let getVals;\n    if (format === \"array\") {\n      const isFlat = isBoxPlot && data[0].length === 6 || !isBoxPlot && data[0].length === 5;\n      if (isFlat) {\n        getVals = (d) => d.slice(1);\n      } else {\n        getVals = (d) => Array.isArray(d[1]) ? d[1] : [];\n      }\n    } else {\n      getVals = (d) => Array.isArray(d.y) ? d.y : [];\n    }\n    for (let j = 0; j < data.length; j++) {\n      const vals = getVals(data[j]);\n      if (vals && vals.length >= 2) {\n        serO.push(vals[0]);\n        serH.push(vals[1]);\n        if (isBoxPlot) {\n          serM.push(vals[2]);\n          serL.push(vals[3]);\n          serC.push(vals[4]);\n        } else {\n          serL.push(vals[2]);\n          serC.push(vals[3]);\n        }\n      }\n      const pts = data[j] && /** @type {any} */\n      data[j].points;\n      serPoints.push(Array.isArray(pts) ? pts : []);\n    }\n    return {\n      o: serO,\n      h: serH,\n      m: serM,\n      l: serL,\n      c: serC,\n      points: serPoints\n    };\n  }\n  /**\n   * @param {any[]} ser\n   */\n  parseDataAxisCharts(ser) {\n    var _a, _b, _c, _d, _e, _f;\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    const xlabels = cnf.labels.length > 0 ? cnf.labels.slice() : cnf.xaxis.categories.slice();\n    this.w.axisFlags.isRangeBar = cnf.chart.type === \"rangeBar\" && gl.isBarHorizontal;\n    this.w.labelData.hasXaxisGroups = cnf.xaxis.type === \"category\" && cnf.xaxis.group.groups.length > 0;\n    if (this.w.labelData.hasXaxisGroups) {\n      this.w.labelData.groups = cnf.xaxis.group.groups;\n    }\n    ser.forEach((s, i) => {\n      if (s.name !== void 0) {\n        this.w.seriesData.seriesNames.push(s.name);\n      } else {\n        this.w.seriesData.seriesNames.push(\n          \"series-\" + parseInt(String(i + 1), 10)\n        );\n      }\n    });\n    this.coreUtils.setSeriesYAxisMappings();\n    const buckets = [];\n    const groups = [\n      ...new Set(cnf.series.map((s) => s.group))\n    ];\n    cnf.series.forEach((s, i) => {\n      const index = groups.indexOf(s.group);\n      if (!buckets[index]) buckets[index] = [];\n      buckets[index].push(this.w.seriesData.seriesNames[i]);\n    });\n    this.w.labelData.seriesGroups = buckets;\n    const handleDates = () => {\n      for (let j = 0; j < xlabels.length; j++) {\n        if (typeof xlabels[j] === \"string\") {\n          const isDate = dt.isValidDate(xlabels[j]);\n          if (isDate) {\n            this.twoDSeriesX.push(dt.parseDate(xlabels[j]));\n          } else {\n            throw new Error(\n              \"You have provided invalid Date format. Please provide a valid JavaScript Date\"\n            );\n          }\n        } else {\n          this.twoDSeriesX.push(xlabels[j]);\n        }\n      }\n    };\n    for (let i = 0; i < ser.length; i++) {\n      this.twoDSeries = [];\n      this.twoDSeriesX = [];\n      this.threeDSeries = [];\n      if (typeof ser[i].data === \"undefined\") {\n        console.error(\n          \"It is a possibility that you may have not included 'data' property in series.\"\n        );\n        return;\n      }\n      const dr = cnf.chart.dataReducer;\n      const rawStash = (_b = (_a = gl.dataReducerRawSeries) == null ? void 0 : _a[i]) == null ? void 0 : _b.data;\n      if ((dr == null ? void 0 : dr.enabled) && this.isMultiFormat() && Array.isArray(rawStash) && rawStash.length > ((_c = dr.threshold) != null ? _c : 500)) {\n        const targetPoints = (_d = dr.targetPoints) != null ? _d : 250;\n        const xmin = cnf.xaxis.min;\n        const xmax = cnf.xaxis.max;\n        const windowed = xmin == null && xmax == null ? rawStash : Data.sliceByXRange(rawStash, xmin, xmax);\n        let reduced = windowed;\n        if (windowed.length > targetPoints) {\n          const sampleY = !Array.isArray(windowed[0]) ? (_e = windowed[0]) == null ? void 0 : _e.y : (_f = windowed[0]) == null ? void 0 : _f[1];\n          if (Array.isArray(sampleY)) {\n            if (sampleY.length === 4) {\n              reduced = Data.ohlcAggregate(windowed, targetPoints);\n            } else if (sampleY.length === 2) {\n              reduced = Data.rangeAggregate(windowed, targetPoints);\n            }\n          } else {\n            reduced = Data.lttbDownsample(windowed, targetPoints);\n          }\n        }\n        ser[i] = __spreadProps(__spreadValues({}, ser[i]), { data: reduced });\n      }\n      if (cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"rangeArea\" || ser[i].type === \"rangeBar\" || ser[i].type === \"rangeArea\") {\n        this.w.axisFlags.isRangeData = true;\n        this.handleRangeData(ser, i);\n      }\n      if (this.isMultiFormat()) {\n        if (this.isFormat2DArray()) {\n          this.handleFormat2DArray(ser, i);\n        } else if (this.isFormatXY()) {\n          this.handleFormatXY(ser, i);\n        }\n        if (cnf.chart.type === \"candlestick\" || ser[i].type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || ser[i].type === \"boxPlot\") {\n          this.handleCandleStickBoxData(ser, i);\n        }\n        if (cnf.chart.type === \"violin\" || ser[i].type === \"violin\") {\n          this.handleViolinData(ser, i);\n        }\n        this.w.seriesData.series.push(this.twoDSeries);\n        this.w.labelData.labels.push(this.twoDSeriesX);\n        this.w.seriesData.seriesX.push(this.twoDSeriesX);\n        this.w.seriesData.seriesGoals = this.seriesGoals;\n        if (i === this.activeSeriesIndex && !this.fallbackToCategory) {\n          this.w.axisFlags.isXNumeric = true;\n        }\n      } else {\n        if (cnf.xaxis.type === \"datetime\") {\n          this.w.axisFlags.isXNumeric = true;\n          handleDates();\n          this.w.seriesData.seriesX.push(this.twoDSeriesX);\n        } else if (cnf.xaxis.type === \"numeric\") {\n          this.w.axisFlags.isXNumeric = true;\n          if (xlabels.length > 0) {\n            this.twoDSeriesX = xlabels;\n            this.w.seriesData.seriesX.push(this.twoDSeriesX);\n          }\n        }\n        this.w.labelData.labels.push(this.twoDSeriesX);\n        const singleArray = ser[i].data.map(\n          (d) => Utils$1.parseNumber(d)\n        );\n        this.w.seriesData.series.push(singleArray);\n      }\n      this.w.seriesData.seriesZ.push(this.threeDSeries);\n      if (ser[i].color !== void 0) {\n        this.w.seriesData.seriesColors.push(ser[i].color);\n      } else {\n        this.w.seriesData.seriesColors.push(\n          /** @type {any} */\n          void 0\n        );\n      }\n    }\n    return this.w;\n  }\n  /**\n   * @param {any[]} ser\n   */\n  parseDataNonAxisCharts(ser) {\n    const cnf = this.w.config;\n    const hasOldFormat = Array.isArray(ser) && ser.every((s) => typeof s === \"number\") && cnf.labels.length > 0;\n    const hasNewFormat = Array.isArray(ser) && ser.some(\n      (s) => s && typeof s === \"object\" && s.data || s && typeof s === \"object\" && s.parsing\n    );\n    if (hasOldFormat && hasNewFormat) {\n      console.warn(\n        \"ApexCharts: Both old format (numeric series + labels) and new format (series objects with data/parsing) detected. Using old format for backward compatibility.\"\n      );\n    }\n    if (hasOldFormat) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = cnf.labels.slice();\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        if (this.w.seriesData.seriesNames[i] === void 0) {\n          this.w.seriesData.seriesNames.push(\"series-\" + (i + 1));\n        }\n      }\n      return this.w;\n    }\n    if (Array.isArray(ser) && ser.every((s) => typeof s === \"number\")) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = [];\n      for (let i = 0; i < this.w.seriesData.series.length; i++) {\n        this.w.seriesData.seriesNames.push(cnf.labels[i] || `series-${i + 1}`);\n      }\n      return this.w;\n    }\n    const processedData = this.extractPieDataFromSeries(ser);\n    this.w.seriesData.series = processedData.values;\n    this.w.seriesData.seriesNames = processedData.labels;\n    if (cnf.chart.type === \"radialBar\") {\n      this.w.seriesData.series = this.w.seriesData.series.map((val) => {\n        const numVal = Utils$1.parseNumber(val);\n        if (numVal > 100) {\n          console.warn(\n            `ApexCharts: RadialBar value ${numVal} > 100, consider using percentage values (0-100)`\n          );\n        }\n        return numVal;\n      });\n    }\n    for (let i = 0; i < this.w.seriesData.series.length; i++) {\n      if (this.w.seriesData.seriesNames[i] === void 0) {\n        this.w.seriesData.seriesNames.push(\"series-\" + (i + 1));\n      }\n    }\n    return this.w;\n  }\n  /**\n   * Reset parsing flags to allow re-parsing of data during updates\n   */\n  resetParsingFlags() {\n    const w = this.w;\n    w.axisFlags.dataWasParsed = false;\n    w.globals.originalSeries = null;\n    if (w.config.series) {\n      w.config.series.forEach((serie) => {\n        if (\n          /** @type {any} */\n          serie.__apexParsed\n        ) {\n          delete /** @type {any} */\n          serie.__apexParsed;\n        }\n      });\n    }\n  }\n  /**\n   * @param {any[]} ser\n   */\n  extractPieDataFromSeries(ser) {\n    const values = [];\n    const labels = [];\n    if (!Array.isArray(ser)) {\n      console.warn(\"ApexCharts: Expected array for series data\");\n      return { values: [], labels: [] };\n    }\n    if (ser.length === 0) {\n      console.warn(\"ApexCharts: Empty series array\");\n      return { values: [], labels: [] };\n    }\n    const firstItem = ser[0];\n    if (typeof firstItem === \"object\" && firstItem !== null && firstItem.data) {\n      this.extractPieDataFromSeriesObjects(ser, values, labels);\n    } else {\n      console.warn(\n        \"ApexCharts: Unsupported series format for pie/donut/radialBar. Expected series objects with data property.\"\n      );\n      return { values: [], labels: [] };\n    }\n    return { values, labels };\n  }\n  // Extract data from series objects: [{ data: [...], parsing: {...} }]\n  /**\n   * @param {any[]} seriesArray\n   * @param {any[]} values\n   * @param {any[]} labels\n   */\n  extractPieDataFromSeriesObjects(seriesArray, values, labels) {\n    seriesArray.forEach((serie, serieIndex) => {\n      if (!serie.data || !Array.isArray(serie.data)) {\n        console.warn(`ApexCharts: Series ${serieIndex} has no valid data array`);\n        return;\n      }\n      serie.data.forEach((dataPoint) => {\n        if (typeof dataPoint === \"object\" && dataPoint !== null) {\n          if (dataPoint.x !== void 0 && dataPoint.y !== void 0) {\n            labels.push(String(dataPoint.x));\n            values.push(Utils$1.parseNumber(dataPoint.y));\n          } else {\n            console.warn(\n              \"ApexCharts: Invalid data point format for pie chart. Expected {x, y} format:\",\n              dataPoint\n            );\n          }\n        } else {\n          console.warn(\n            \"ApexCharts: Expected object data point, got:\",\n            typeof dataPoint\n          );\n        }\n      });\n    });\n  }\n  /** User possibly set string categories in xaxis.categories or labels prop\n   * Or didn't set xaxis labels at all - in which case we manually do it.\n   * If user passed series data as [[3, 2], [4, 5]] or [{ x: 3, y: 55 }],\n   * this shouldn't be called\n   * @param {any[]} ser - the series which user passed to the config\n   */\n  handleExternalLabelsData(ser) {\n    const cnf = this.w.config;\n    if (cnf.xaxis.categories.length > 0) {\n      this.w.labelData.labels = cnf.xaxis.categories;\n    } else if (cnf.labels.length > 0) {\n      this.w.labelData.labels = cnf.labels.slice();\n    } else if (this.fallbackToCategory) {\n      this.w.labelData.labels = /** @type {string[]} */\n      /** @type {unknown} */\n      this.w.labelData.labels[0];\n      if (this.w.rangeData.seriesRange.length) {\n        this.w.rangeData.seriesRange.map((srt) => {\n          srt.forEach((sr) => {\n            if (this.w.labelData.labels.indexOf(sr.x) < 0 && sr.x) {\n              this.w.labelData.labels.push(sr.x);\n            }\n          });\n        });\n        const _labels = this.w.labelData.labels;\n        if (_labels.length > 0 && (typeof _labels[0] === \"number\" || typeof _labels[0] === \"string\")) {\n          this.w.labelData.labels = [...new Set(_labels)];\n        } else {\n          const _seen = /* @__PURE__ */ new Map();\n          for (const _label of _labels) {\n            const _key = JSON.stringify(_label);\n            if (!_seen.has(_key)) _seen.set(_key, _label);\n          }\n          this.w.labelData.labels = Array.from(_seen.values());\n        }\n      }\n      if (cnf.xaxis.convertedCatToNumeric) {\n        const defaults = new Defaults(cnf);\n        defaults.convertCatToNumericXaxis(cnf, this.w.seriesData.seriesX[0]);\n        this._generateExternalLabels(ser);\n      }\n    } else {\n      this._generateExternalLabels(ser);\n    }\n  }\n  /**\n   * @param {any[]} ser\n   */\n  _generateExternalLabels(ser) {\n    const gl = this.w.globals;\n    const cnf = this.w.config;\n    let labelArr = [];\n    if (gl.axisCharts) {\n      if (this.w.seriesData.series.length > 0) {\n        if (this.isFormatXY()) {\n          const seriesDataFiltered = cnf.series.map(\n            (serie) => {\n              const seen = /* @__PURE__ */ new Map();\n              for (const point of serie.data) {\n                if (!seen.has(point.x)) seen.set(point.x, point);\n              }\n              return Array.from(seen.values());\n            }\n          );\n          const len = seriesDataFiltered.reduce(\n            (p, c, i, a) => a[p].length > c.length ? p : i,\n            0\n          );\n          for (let i = 0; i < seriesDataFiltered[len].length; i++) {\n            labelArr.push(i + 1);\n          }\n        } else {\n          for (let i = 0; i < this.w.seriesData.series[gl.maxValsInArrayIndex].length; i++) {\n            labelArr.push(i + 1);\n          }\n        }\n      }\n      this.w.seriesData.seriesX = [];\n      for (let i = 0; i < ser.length; i++) {\n        this.w.seriesData.seriesX.push(labelArr);\n      }\n      if (!this.w.globals.isBarHorizontal) {\n        this.w.axisFlags.isXNumeric = true;\n      }\n    }\n    if (labelArr.length === 0) {\n      labelArr = gl.axisCharts ? [] : (\n        /**\n         * @param {Record<string, any>} gls\n         * @param {number} glsi\n         */\n        this.w.seriesData.series.map((gls, glsi) => {\n          return glsi + 1;\n        })\n      );\n      for (let i = 0; i < ser.length; i++) {\n        this.w.seriesData.seriesX.push(labelArr);\n      }\n    }\n    this.w.labelData.labels = /** @type {string[]} */\n    /** @type {unknown} */\n    labelArr;\n    if (cnf.xaxis.convertedCatToNumeric) {\n      this.w.labelData.categoryLabels = labelArr.map((l) => {\n        return cnf.xaxis.labels.formatter(l);\n      });\n    }\n    this.w.axisFlags.noLabelsProvided = true;\n  }\n  /**\n   * @param {any[]} series\n   */\n  parseRawDataIfNeeded(series) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const globalParsing = cnf.parsing;\n    if (this.w.axisFlags.dataWasParsed) {\n      return series;\n    }\n    if (!globalParsing && !series.some((s) => s.parsing)) {\n      return series;\n    }\n    const processedSeries = series.map((serie, index) => {\n      var _a, _b, _c;\n      if (!serie.data || !Array.isArray(serie.data) || serie.data.length === 0) {\n        return serie;\n      }\n      const effectiveParsing = {\n        x: ((_a = serie.parsing) == null ? void 0 : _a.x) || (globalParsing == null ? void 0 : globalParsing.x),\n        y: ((_b = serie.parsing) == null ? void 0 : _b.y) || (globalParsing == null ? void 0 : globalParsing.y),\n        z: ((_c = serie.parsing) == null ? void 0 : _c.z) || (globalParsing == null ? void 0 : globalParsing.z)\n      };\n      if (!effectiveParsing.x && !effectiveParsing.y) {\n        return serie;\n      }\n      const firstDataPoint = serie.data[0];\n      if (typeof firstDataPoint === \"object\" && firstDataPoint !== null && (Object.prototype.hasOwnProperty.call(firstDataPoint, \"x\") || Object.prototype.hasOwnProperty.call(firstDataPoint, \"y\")) || Array.isArray(firstDataPoint)) {\n        return serie;\n      }\n      if (!effectiveParsing.x || !effectiveParsing.y || Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 0) {\n        console.warn(\n          `ApexCharts: Series ${index} has parsing config but missing x or y field specification`\n        );\n        return serie;\n      }\n      const transformedData = serie.data.map(\n        (item, itemIndex) => {\n          if (typeof item !== \"object\" || item === null) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} is not an object, skipping parsing`\n            );\n            return item;\n          }\n          const x = this.getNestedValue(item, effectiveParsing.x);\n          let y;\n          let z = void 0;\n          if (Array.isArray(effectiveParsing.y)) {\n            const yValues = effectiveParsing.y.map(\n              (fieldName) => this.getNestedValue(item, fieldName)\n            );\n            if (this.w.config.chart.type === \"bubble\") {\n              if (yValues.length < 2) {\n                console.warn(\n                  `ApexCharts: series[${index}] bubble chart requires parseData.y to have at least 2 fields (y and z). Got: ${JSON.stringify(effectiveParsing.y)}`\n                );\n              }\n              y = yValues[0];\n            } else {\n              y = yValues;\n            }\n          } else {\n            y = this.getNestedValue(item, effectiveParsing.y);\n          }\n          if (effectiveParsing.z) {\n            z = this.getNestedValue(item, effectiveParsing.z);\n          }\n          if (x === void 0) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} missing field '${effectiveParsing.x}'`\n            );\n          }\n          if (y === void 0) {\n            console.warn(\n              `ApexCharts: Series ${index}, data point ${itemIndex} missing field '${effectiveParsing.y}'`\n            );\n          }\n          const result = { x, y, z: void 0 };\n          if (this.w.config.chart.type === \"bubble\" && Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 2) {\n            const zValue = this.getNestedValue(item, effectiveParsing.y[1]);\n            if (zValue !== void 0) {\n              result.z = zValue;\n            }\n          }\n          if (z !== void 0) {\n            result.z = z;\n          }\n          return result;\n        }\n      );\n      return __spreadProps(__spreadValues({}, serie), {\n        data: transformedData,\n        __apexParsed: true\n      });\n    });\n    this.w.axisFlags.dataWasParsed = true;\n    if (!gl.originalSeries) {\n      gl.originalSeries = Utils$1.clone(series);\n    }\n    return processedSeries;\n  }\n  /**\n   * Get nested object value using dot notation path\n   * @param {Object} obj - The object to search in\n   * @param {string} path - Dot notation path (e.g., 'user.profile.name')\n   * @returns {*} The value at the path, or undefined if not found\n   */\n  getNestedValue(obj, path) {\n    if (!obj || typeof obj !== \"object\" || !path) {\n      return void 0;\n    }\n    if (path.indexOf(\".\") === -1) {\n      return (\n        /** @type {any} */\n        obj[path]\n      );\n    }\n    const keys = path.split(\".\");\n    let current = obj;\n    for (let i = 0; i < keys.length; i++) {\n      if (current === null || current === void 0 || typeof current !== \"object\") {\n        return void 0;\n      }\n      current = /** @type {any} */\n      current[keys[i]];\n    }\n    return current;\n  }\n  /**\n   * Scatter strip-plot support. When `plotOptions.scatter.jitter.enabled` and a\n   * series carries compact `{ x: 'Category', y: [v1, v2, ...] }` data, expand\n   * each observation into its own `{ x: bandIndex, y }` point (so every dot is a\n   * first-class, hoverable marker) and frame the x-axis as evenly-spaced,\n   * labelled bands. The reference per-point form (numeric x + `xaxis.categories`)\n   * is reframed too, without expansion. Returns `ser` unchanged for non-scatter\n   * charts and for plain numeric/datetime data (continuous overplotting jitter\n   * is offset at render time instead).\n   *\n   * @param {any[]} ser\n   * @returns {any[]}\n   */\n  expandScatterJitterData(ser) {\n    var _a, _b;\n    const cnf = this.w.config;\n    const isScatter = cnf.chart.type === \"scatter\" || cnf.chart.type === \"bubble\";\n    const jt = (_b = (_a = cnf.plotOptions) == null ? void 0 : _a.scatter) == null ? void 0 : _b.jitter;\n    if (!isScatter || !jt || !jt.enabled || !Array.isArray(ser)) return ser;\n    const hasArrayY = ser.some(\n      (s) => Array.isArray(s == null ? void 0 : s.data) && s.data.some(\n        (d) => d && !Array.isArray(d) && Array.isArray(d.y)\n      )\n    );\n    if (!hasArrayY) {\n      if (cnf.xaxis.type !== \"datetime\" && Array.isArray(cnf.xaxis.categories) && cnf.xaxis.categories.length) {\n        this._applyBandAxis(cnf.xaxis.categories.slice());\n      }\n      return ser;\n    }\n    const bandLabels = [];\n    const bandIndex = /* @__PURE__ */ new Map();\n    ser.forEach((s) => {\n      if (!Array.isArray(s == null ? void 0 : s.data)) return;\n      s.data.forEach((d) => {\n        if (d && Array.isArray(d.y)) {\n          const key = String(d.x);\n          if (!bandIndex.has(key)) {\n            bandIndex.set(key, bandLabels.length);\n            bandLabels.push(d.x);\n          }\n        }\n      });\n    });\n    const maxPoints = jt.maxPoints || 5e3;\n    const expanded = ser.map((s) => {\n      if (!Array.isArray(s == null ? void 0 : s.data)) return s;\n      const out = [];\n      s.data.forEach((d) => {\n        if (d && Array.isArray(d.y)) {\n          const bi = bandIndex.get(String(d.x));\n          const ys = d.y;\n          const stride = ys.length > maxPoints ? Math.ceil(ys.length / maxPoints) : 1;\n          for (let k = 0; k < ys.length; k += stride) {\n            const yv = Utils$1.parseNumber(ys[k]);\n            if (yv === null) continue;\n            out.push({ x: bi, y: yv });\n          }\n        } else if (d && typeof d === \"object\" && !Array.isArray(d)) {\n          const key = String(d.x);\n          out.push({ x: bandIndex.has(key) ? bandIndex.get(key) : d.x, y: d.y });\n        } else {\n          out.push(d);\n        }\n      });\n      return __spreadProps(__spreadValues({}, s), { data: out });\n    });\n    this._applyBandAxis(bandLabels);\n    return expanded;\n  }\n  /**\n   * Frame the x-axis as N evenly-spaced bands (one per category) on a numeric\n   * scale. Bands sit at integer positions 0..N-1; the range is padded by a full\n   * band on each side (min -1, max N) so jittered dots never clip. Crucially the\n   * range bounds and tick count are integers, so the ticks land exactly on the\n   * band centers regardless of how the numeric scale \"nices\" the step (e.g. the\n   * small-range reduction in Scales._adjustTicksForSmallRange triggered by a\n   * y-axis formatter). Only fills in options the user hasn't set, so explicit\n   * min/max/tickAmount/formatter still win.\n   *\n   * @param {any[]} bandLabels\n   */\n  _applyBandAxis(bandLabels) {\n    const xa = this.w.config.xaxis;\n    const n = bandLabels.length;\n    if (!n) return;\n    const owned = (\n      /** @type {Record<string, boolean>} */\n      xa._scatterBand = xa._scatterBand || {}\n    );\n    xa.type = \"numeric\";\n    if (xa.min == null || owned.min) {\n      xa.min = -1;\n      owned.min = true;\n    }\n    if (xa.max == null || owned.max) {\n      xa.max = n;\n      owned.max = true;\n    }\n    if (xa.tickAmount == null || xa.tickAmount === \"dataPoints\" || owned.tick) {\n      xa.tickAmount = n + 1;\n      owned.tick = true;\n    }\n    xa.labels = xa.labels || {};\n    const existing = (\n      /** @type {any} */\n      xa.labels.formatter\n    );\n    if (typeof existing !== \"function\" || existing._scatterBand) {\n      const fmt = (\n        /** @type {any} */\n        ((val) => {\n          const r = Math.round(val);\n          return Math.abs(val - r) < 1e-6 && bandLabels[r] !== void 0 ? bandLabels[r] : \"\";\n        })\n      );\n      fmt._scatterBand = true;\n      xa.labels.formatter = fmt;\n    }\n  }\n  // Segregate user provided data into appropriate vars\n  /**\n   * @param {any[]} ser\n   */\n  parseData(ser) {\n    var _a, _b, _c, _d, _e, _f;\n    const w = this.w;\n    const cnf = w.config;\n    const gl = w.globals;\n    ser = this.parseRawDataIfNeeded(ser);\n    ser = this.expandScatterJitterData(ser);\n    if (((_a = cnf.chart.dataReducer) == null ? void 0 : _a.enabled) && gl.axisCharts && !gl.dataReducerRawSeries) {\n      gl.dataReducerRawSeries = ser.map((s) => ({\n        data: Array.isArray(s == null ? void 0 : s.data) ? s.data.slice() : s == null ? void 0 : s.data\n      }));\n      let rawMinX = Infinity;\n      let rawMaxX = -Infinity;\n      for (const s of ser) {\n        const d = s == null ? void 0 : s.data;\n        if (!Array.isArray(d) || d.length === 0) continue;\n        const isXY = !Array.isArray(d[0]);\n        const firstX = isXY ? (_b = d[0]) == null ? void 0 : _b.x : (_c = d[0]) == null ? void 0 : _c[0];\n        const lastX = isXY ? (_d = d[d.length - 1]) == null ? void 0 : _d.x : (_e = d[d.length - 1]) == null ? void 0 : _e[0];\n        if (typeof firstX === \"number\") rawMinX = Math.min(rawMinX, firstX);\n        if (typeof lastX === \"number\") rawMaxX = Math.max(rawMaxX, lastX);\n      }\n      if (rawMinX !== Infinity) {\n        gl.dataReducerRawMinX = rawMinX;\n        gl.dataReducerRawMaxX = rawMaxX;\n      }\n    }\n    cnf.series = ser;\n    if (gl.dataReducerRawSeries && ((_f = cnf.chart.dataReducer) == null ? void 0 : _f.enabled)) {\n      const stash = gl.dataReducerRawSeries;\n      gl.initialSeries = ser.map((s, i) => {\n        var _a2, _b2, _c2;\n        return __spreadProps(__spreadValues({}, s), {\n          data: (_c2 = (_b2 = (_a2 = stash[i]) == null ? void 0 : _a2.data) == null ? void 0 : _b2.slice()) != null ? _c2 : s.data\n        });\n      });\n    } else {\n      gl.initialSeries = Utils$1.clone(ser);\n    }\n    this.excludeCollapsedSeriesInYAxis();\n    this.fallbackToCategory = false;\n    this.resetGlobals();\n    this.isMultipleY();\n    if (gl.axisCharts) {\n      this.parseDataAxisCharts(ser);\n      this.coreUtils.getLargestSeries();\n    } else {\n      this.parseDataNonAxisCharts(ser);\n    }\n    if (cnf.chart.stacked) {\n      const series = new Series(this.w);\n      this.w.seriesData.series = series.setNullSeriesToZeroValues(\n        this.w.seriesData.series\n      );\n    }\n    this.coreUtils.getSeriesTotals();\n    if (gl.axisCharts) {\n      this.w.seriesData.stackedSeriesTotals = this.coreUtils.getStackedSeriesTotals();\n      this.w.seriesData.stackedSeriesTotalsByGroups = this.coreUtils.getStackedSeriesTotalsByGroups();\n    }\n    this.coreUtils.getPercentSeries();\n    if (!this.w.axisFlags.dataFormatXNumeric && (!this.w.axisFlags.isXNumeric || cnf.xaxis.type === \"numeric\" && cnf.labels.length === 0 && cnf.xaxis.categories.length === 0)) {\n      this.handleExternalLabelsData(ser);\n    }\n    const catLabels = this.coreUtils.getCategoryLabels(this.w.labelData.labels);\n    for (let l = 0; l < catLabels.length; l++) {\n      if (Array.isArray(catLabels[l])) {\n        this.w.axisFlags.isMultiLineX = true;\n        break;\n      }\n    }\n    return {\n      // w.seriesData (future slice)\n      seriesData: {\n        series: this.w.seriesData.series,\n        seriesNames: this.w.seriesData.seriesNames,\n        seriesX: this.w.seriesData.seriesX,\n        seriesZ: this.w.seriesData.seriesZ,\n        seriesColors: this.w.seriesData.seriesColors,\n        seriesGoals: this.w.seriesData.seriesGoals,\n        initialSeries: gl.initialSeries,\n        originalSeries: gl.originalSeries,\n        stackedSeriesTotals: this.w.seriesData.stackedSeriesTotals,\n        stackedSeriesTotalsByGroups: this.w.seriesData.stackedSeriesTotalsByGroups,\n        noLabelsProvided: this.w.axisFlags.noLabelsProvided\n      },\n      // w.rangeData (future slice)\n      rangeData: {\n        seriesRangeStart: this.w.rangeData.seriesRangeStart,\n        seriesRangeEnd: this.w.rangeData.seriesRangeEnd,\n        seriesRange: this.w.rangeData.seriesRange\n      },\n      // w.candleData (future slice)\n      candleData: {\n        seriesCandleO: this.w.candleData.seriesCandleO,\n        seriesCandleH: this.w.candleData.seriesCandleH,\n        seriesCandleM: this.w.candleData.seriesCandleM,\n        seriesCandleL: this.w.candleData.seriesCandleL,\n        seriesCandleC: this.w.candleData.seriesCandleC,\n        seriesBoxPoints: this.w.candleData.seriesBoxPoints\n      },\n      // w.labelData (future slice)\n      labelData: {\n        labels: this.w.labelData.labels,\n        categoryLabels: this.w.labelData.categoryLabels\n      },\n      // w.axisFlags (future slice)\n      axisFlags: {\n        isXNumeric: this.w.axisFlags.isXNumeric,\n        dataFormatXNumeric: this.w.axisFlags.dataFormatXNumeric,\n        isDataXYZ: this.w.axisFlags.isDataXYZ,\n        isRangeData: this.w.axisFlags.isRangeData,\n        isRangeBar: this.w.axisFlags.isRangeBar,\n        isMultiLineX: this.w.axisFlags.isMultiLineX,\n        dataWasParsed: this.w.axisFlags.dataWasParsed,\n        hasXaxisGroups: this.w.labelData.hasXaxisGroups,\n        groups: this.w.labelData.groups,\n        seriesGroups: this.w.labelData.seriesGroups\n      }\n    };\n  }\n  /**\n   * Slice a sorted-by-x series to a [xmin, xmax] window using binary search.\n   *\n   * Pads with one extra point on each side so lines extend cleanly to the\n   * chart edges. Either bound may be null/undefined to disable that side.\n   *\n   * @param {any[]} data - Series data in [{x,y}] or [[x,y]] format, sorted by x.\n   * @param {number|null|undefined} xmin\n   * @param {number|null|undefined} xmax\n   * @returns {any[]} Sliced array (new array, never the input reference).\n   */\n  static sliceByXRange(data, xmin, xmax) {\n    const len = data.length;\n    if (len === 0) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    let lo = 0;\n    if (xmin != null) {\n      let l = 0;\n      let r = len - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        if (getX(data[m]) < xmin) l = m + 1;\n        else r = m - 1;\n      }\n      lo = Math.max(0, l - 1);\n    }\n    let hi = len;\n    if (xmax != null) {\n      let l = 0;\n      let r = len - 1;\n      while (l <= r) {\n        const m = l + r >> 1;\n        if (getX(data[m]) > xmax) r = m - 1;\n        else l = m + 1;\n      }\n      hi = Math.min(len, l + 1);\n    }\n    return lo === 0 && hi === len ? data.slice() : data.slice(lo, hi);\n  }\n  /**\n   * Largest-Triangle-Three-Bucket (LTTB) downsampling.\n   *\n   * Reduces `data` to `targetPoints` points while preserving the visual shape\n   * of the series as perceived by the human eye.\n   *\n   * @param {any[]} data   - Raw series data in [{x,y}] or [[x,y]] format.\n   * @param {number} targetPoints - Desired output length (>= 3).\n   * @returns {any[]} Downsampled array in the same format as the input.\n   */\n  static lttbDownsample(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 3) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const sampled = [];\n    sampled.push(data[0]);\n    const bucketSize = (len - 2) / (targetPoints - 2);\n    let a = 0;\n    for (let i = 0; i < targetPoints - 2; i++) {\n      const avgRangeStart = Math.floor((i + 1) * bucketSize) + 1;\n      const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketSize) + 1, len);\n      let avgX = 0;\n      let avgY = 0;\n      const avgRangeLen = avgRangeEnd - avgRangeStart;\n      for (let j = avgRangeStart; j < avgRangeEnd; j++) {\n        avgX += getX(data[j]);\n        avgY += getY(data[j]);\n      }\n      avgX /= avgRangeLen;\n      avgY /= avgRangeLen;\n      const rangeStart = Math.floor(i * bucketSize) + 1;\n      const rangeEnd = Math.min(Math.floor((i + 1) * bucketSize) + 1, len);\n      const pointAX = getX(data[a]);\n      const pointAY = getY(data[a]);\n      let maxArea = -1;\n      let maxAreaIdx = rangeStart;\n      for (let j = rangeStart; j < rangeEnd; j++) {\n        const area = Math.abs(\n          (pointAX - avgX) * (getY(data[j]) - pointAY) - (pointAX - getX(data[j])) * (avgY - pointAY)\n        ) * 0.5;\n        if (area > maxArea) {\n          maxArea = area;\n          maxAreaIdx = j;\n        }\n      }\n      sampled.push(data[maxAreaIdx]);\n      a = maxAreaIdx;\n    }\n    sampled.push(data[len - 1]);\n    return sampled;\n  }\n  /**\n   * OHLC-aware bucket aggregation for candlestick / OHLC series.\n   *\n   * Each point's y is a 4-tuple `[open, high, low, close]`. LTTB is unusable\n   * here — it treats y as a scalar, so the triangle-area math degenerates and\n   * silently discards the high/low extremes that *define* a candle. Instead we\n   * split the series into `targetPoints` contiguous buckets and roll each up\n   * into a single candle: open = first bucket open, close = last bucket close,\n   * high = max of highs, low = min of lows. The x is the first point's x in the\n   * bucket. Output keeps the input's format ([{x,y}] or [[x,y]]).\n   *\n   * @param {any[]} data         - Raw OHLC series in [{x,y:[o,h,l,c]}] or [[x,[o,h,l,c]]] format.\n   * @param {number} targetPoints - Desired output length (>= 1).\n   * @returns {any[]} Aggregated array in the same format as the input.\n   */\n  static ohlcAggregate(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 1) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i = 0; i < targetPoints; i++) {\n      const start = Math.floor(i * bucketSize);\n      const end = i === targetPoints - 1 ? len : Math.floor((i + 1) * bucketSize);\n      if (end <= start) continue;\n      const firstY = getY(data[start]);\n      const open = firstY[0];\n      let high = firstY[1];\n      let low = firstY[2];\n      let close = firstY[3];\n      for (let j = start + 1; j < end; j++) {\n        const y = getY(data[j]);\n        if (y[1] > high) high = y[1];\n        if (y[2] < low) low = y[2];\n        close = y[3];\n      }\n      out.push(make(getX(data[start]), [open, high, low, close]));\n    }\n    return out;\n  }\n  /**\n   * Bucket-aggregate 2-tuple range data (`y: [low, high]`, rangeArea/rangeBar)\n   * into `targetPoints` points, the range analog of {@link ohlcAggregate}. Each\n   * bucket emits `[min low, max high]` so the band's vertical extent is never\n   * understated by downsampling (LTTB, built for scalar y, would drop these\n   * extremes). Order-agnostic: the min/max scan both tuple slots, so it is\n   * correct whether a point is stored `[low, high]` or `[high, low]`.\n   *\n   * Null bounds (e.g. an indicator's warm-up period) are ignored, not treated\n   * as 0 — `Math.min(null, x)` would coerce to 0 and pin the band to the\n   * baseline. A bucket with no finite bounds emits `[null, null]` so it renders\n   * as a gap, matching the un-downsampled series.\n   * @param {any[]} data\n   * @param {number} targetPoints\n   * @returns {any[]}\n   */\n  static rangeAggregate(data, targetPoints) {\n    const len = data.length;\n    if (targetPoints >= len || targetPoints < 1) return data;\n    const isXY = !Array.isArray(data[0]);\n    const getX = isXY ? (p) => p.x : (p) => p[0];\n    const getY = isXY ? (p) => p.y : (p) => p[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i = 0; i < targetPoints; i++) {\n      const start = Math.floor(i * bucketSize);\n      const end = i === targetPoints - 1 ? len : Math.floor((i + 1) * bucketSize);\n      if (end <= start) continue;\n      let low = Infinity;\n      let high = -Infinity;\n      for (let j = start; j < end; j++) {\n        const y = getY(data[j]);\n        if (y == null) continue;\n        for (let k = 0; k < 2; k++) {\n          const v = y[k];\n          if (v == null || !isFinite(v)) continue;\n          if (v < low) low = v;\n          if (v > high) high = v;\n        }\n      }\n      out.push(\n        make(getX(data[start]), low === Infinity ? [null, null] : [low, high])\n      );\n    }\n    return out;\n  }\n  excludeCollapsedSeriesInYAxis() {\n    const w = this.w;\n    const yAxisIndexes = [];\n    w.globals.seriesYAxisMap.forEach((yAxisArr, yi) => {\n      let collapsedCount = 0;\n      yAxisArr.forEach((seriesIndex) => {\n        if (w.globals.collapsedSeriesIndices.indexOf(seriesIndex) !== -1) {\n          collapsedCount++;\n        }\n      });\n      if (collapsedCount > 0 && collapsedCount == yAxisArr.length) {\n        yAxisIndexes.push(yi);\n      }\n    });\n    w.globals.ignoreYAxisIndexes = yAxisIndexes.map((x) => x);\n  }\n}\nclass UpdateHelpers {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * private method to update Options.\n   *\n   * @param {Record<string, any>} options - A new config object can be passed which will be merged with the existing config object\n   * @param {boolean} redraw - should redraw from beginning or should use existing paths and redraw from there\n   * @param {boolean} animate - should animate or not on updating Options\n   * @param {boolean} overwriteInitialConfig - should update the initial config or not\n   */\n  _updateOptions(options2, redraw = false, animate = true, updateSyncedCharts = true, overwriteInitialConfig = false) {\n    return new Promise((resolve) => {\n      let charts = [this.ctx];\n      if (updateSyncedCharts) {\n        charts = this.ctx.getSyncedCharts();\n      }\n      if (this.w.globals.isExecCalled) {\n        charts = [this.ctx];\n        this.w.globals.isExecCalled = false;\n      }\n      charts.forEach((ch, chartIndex) => {\n        var _a, _b;\n        const w = ch.w;\n        w.globals.shouldAnimate = animate;\n        if (!redraw) {\n          w.globals.resized = true;\n          w.globals.dataChanged = true;\n          if (animate) {\n            ch.series.getPreviousPaths();\n          }\n        }\n        if (animate && options2 && typeof options2 === \"object\") {\n          const newType = (_a = options2 == null ? void 0 : options2.chart) == null ? void 0 : _a.type;\n          const fromType = w.config.chart.requestedType || w.config.chart.type;\n          if (newType && newType !== fromType) {\n            (_b = ch.morphTypeChange) == null ? void 0 : _b.captureBeforeDestroy({\n              fromType,\n              toType: newType,\n              newSeries: options2.series || w.config.series\n            });\n          }\n        }\n        if (options2 && typeof options2 === \"object\") {\n          ch.config = new Config(options2);\n          const incomingType = options2.chart && options2.chart.type;\n          const isAliasRequest = incomingType === \"funnel\" || incomingType === \"pyramid\" || incomingType === \"gauge\";\n          const wasAlias = !!w.config.chart.requestedType;\n          if (incomingType && !isAliasRequest && wasAlias) {\n            options2.chart = options2.chart || {};\n            options2.chart.requestedType = incomingType;\n            const prev = w.config.chart.requestedType;\n            if (prev === \"funnel\" || prev === \"pyramid\") {\n              options2.plotOptions = options2.plotOptions || {};\n              options2.plotOptions.bar = options2.plotOptions.bar || {};\n              if (options2.plotOptions.bar.isFunnel === void 0) {\n                options2.plotOptions.bar.isFunnel = false;\n              }\n              if (options2.plotOptions.bar.isPyramid === void 0) {\n                options2.plotOptions.bar.isPyramid = false;\n              }\n            }\n          }\n          ch.config.normalizeAliasedChartType(options2);\n          options2 = CoreUtils.extendArrayProps(ch.config, options2, w);\n          if (ch.w.globals.chartID !== this.w.globals.chartID) {\n            delete options2.series;\n          }\n          w.config = Utils$1.extend(w.config, options2);\n          if (overwriteInitialConfig) {\n            w.globals.lastXAxis = options2.xaxis ? Utils$1.clone(options2.xaxis) : [];\n            w.globals.lastYAxis = options2.yaxis ? Utils$1.clone(options2.yaxis) : [];\n            w.globals.initialConfig = Utils$1.extend({}, w.config);\n            w.globals.initialSeries = Utils$1.clone(w.config.series);\n            if (options2.series) {\n              for (let i = 0; i < w.globals.collapsedSeriesIndices.length; i++) {\n                const series = w.config.series[w.globals.collapsedSeriesIndices[i]];\n                w.globals.collapsedSeries[i].data = w.globals.axisCharts ? (\n                  /** @type {any} */\n                  series.data.slice()\n                ) : series;\n              }\n              for (let i = 0; i < w.globals.ancillaryCollapsedSeriesIndices.length; i++) {\n                const series = w.config.series[w.globals.ancillaryCollapsedSeriesIndices[i]];\n                w.globals.ancillaryCollapsedSeries[i].data = w.globals.axisCharts ? (\n                  /** @type {any} */\n                  series.data.slice()\n                ) : series;\n              }\n              ch.series.emptyCollapsedSeries(w.config.series);\n            }\n          }\n        }\n        return ch.update(options2).then(() => {\n          if (chartIndex === charts.length - 1) {\n            resolve(ch);\n          }\n        });\n      });\n    });\n  }\n  /**\n   * Private method to update Series.\n   *\n   * @param {any[]} newSeries - New series which will override the existing\n   * @param {boolean} animate\n   */\n  _updateSeries(newSeries, animate, overwriteInitialSeries = false) {\n    return new Promise((resolve) => {\n      const w = this.w;\n      w.globals.shouldAnimate = animate;\n      w.globals.dataChanged = true;\n      PerformanceCache.invalidateSelectors(w);\n      if (animate) {\n        this.ctx.series.getPreviousPaths();\n      }\n      const prevSeriesCount = w.config.series.length;\n      w.globals.dataReducerRawSeries = null;\n      this.ctx.data.resetParsingFlags();\n      const parsedState = this.ctx.data.parseData(newSeries);\n      this.ctx._writeParsedSeriesData(parsedState.seriesData);\n      this.ctx._writeParsedRangeData(parsedState.rangeData);\n      this.ctx._writeParsedCandleData(parsedState.candleData);\n      this.ctx._writeParsedLabelData(parsedState.labelData);\n      this.ctx._writeParsedAxisFlags(parsedState.axisFlags);\n      if (overwriteInitialSeries) {\n        if (w.globals.initialConfig) {\n          w.globals.initialConfig.series = Utils$1.clone(w.config.series);\n        }\n        w.globals.initialSeries = Utils$1.clone(w.config.series);\n      }\n      if (this._canUseFastPath(newSeries, prevSeriesCount, w)) {\n        return this.ctx.fastUpdate(animate).then(() => {\n          resolve(this.ctx);\n        });\n      }\n      return this.ctx.update().then(() => {\n        resolve(this.ctx);\n      });\n    });\n  }\n  /**\n   * Returns true if the data-only fast path can be used for this update.\n   * Fast path skips rebuilding grid, axes, legend, annotations, and tooltip DOM.\n   *\n   * Requirements:\n   * - Chart has been fully rendered (DOM exists)\n   * - Axis chart (non-axis charts like pie always need full rebuild due to radial layout)\n   * - Series count unchanged (grid column/row counts depend on it)\n   * - No series currently collapsing (collapsed series changes visible data range)\n   * - Not a combo chart (combo charts mix types and need coordinated axis recalc)\n   * - Not currently zoomed (zoomed charts have altered x-labels that need recalculation)\n   * @param {any[]} newSeries\n   * @param {number} prevSeriesCount\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  _canUseFastPath(newSeries, prevSeriesCount, w) {\n    if (!w.dom.elGraphical) return false;\n    if (!w.globals.axisCharts) return false;\n    if (newSeries.length !== prevSeriesCount) return false;\n    if (w.globals.collapsedSeries.length > 0) return false;\n    if (w.globals.ancillaryCollapsedSeries.length > 0) return false;\n    if (w.globals.risingSeries.length > 0) return false;\n    if (w.globals.comboCharts) return false;\n    if (w.interact.zoomed) return false;\n    return true;\n  }\n  /**\n   * @param {any} s\n   * @param {number} i\n   */\n  _extendSeries(s, i) {\n    const w = this.w;\n    const ser = w.config.series[i];\n    return __spreadProps(__spreadValues(\n      {},\n      /** @type {Record<string,any>} */\n      w.config.series[i]\n    ), {\n      name: s.name ? s.name : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.name\n      ),\n      color: s.color ? s.color : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.color\n      ),\n      type: s.type ? s.type : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.type\n      ),\n      group: s.group ? s.group : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.group\n      ),\n      hidden: typeof s.hidden !== \"undefined\" ? s.hidden : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.hidden\n      ),\n      data: s.data ? s.data : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.data\n      ),\n      zIndex: typeof s.zIndex !== \"undefined\" ? s.zIndex : i\n    });\n  }\n  /**\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    const w = this.w;\n    let elPath = null;\n    const parent = `.apexcharts-series[data\\\\:realIndex='${seriesIndex}']`;\n    if (w.globals.axisCharts) {\n      elPath = w.dom.Paper.findOne(\n        `${parent} path[j='${dataPointIndex}'], ${parent} circle[j='${dataPointIndex}'], ${parent} rect[j='${dataPointIndex}']`\n      );\n    } else {\n      if (typeof dataPointIndex === \"undefined\") {\n        elPath = w.dom.Paper.findOne(`${parent} path[j='${seriesIndex}']`);\n        if (w.config.chart.type === \"pie\" || w.config.chart.type === \"polarArea\" || w.config.chart.type === \"donut\") {\n          this.ctx.pie.pieClicked(seriesIndex);\n        }\n      }\n    }\n    if (elPath) {\n      const graphics = new Graphics(this.w);\n      graphics.pathMouseDown(\n        elPath,\n        /** @type {any} */\n        null\n      );\n    } else {\n      console.warn(\"toggleDataPointSelection: Element not found\");\n      return null;\n    }\n    return elPath.node ? elPath.node : null;\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  forceXAxisUpdate(options2) {\n    const w = this.w;\n    const minmax = [\"min\", \"max\"];\n    minmax.forEach((a) => {\n      if (typeof options2.xaxis[a] !== \"undefined\") {\n        w.config.xaxis[a] = options2.xaxis[a];\n        w.globals.lastXAxis[a] = options2.xaxis[a];\n      }\n    });\n    if (options2.xaxis.categories && options2.xaxis.categories.length) {\n      w.config.xaxis.categories = options2.xaxis.categories;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(options2);\n      options2 = defaults.convertCatToNumericXaxis(options2, this.ctx);\n    }\n    return options2;\n  }\n  /**\n   * @param {Record<string, any>} options\n   */\n  forceYAxisUpdate(options2) {\n    if (options2.chart && options2.chart.stacked && options2.chart.stackType === \"100%\") {\n      if (Array.isArray(options2.yaxis)) {\n        options2.yaxis.forEach(\n          (yaxe, index) => {\n            options2.yaxis[index].min = 0;\n            options2.yaxis[index].max = 100;\n          }\n        );\n      } else {\n        options2.yaxis.min = 0;\n        options2.yaxis.max = 100;\n      }\n    }\n    return options2;\n  }\n  /**\n   * This function reverts the yaxis and xaxis min/max values to what it was when the chart was defined.\n   * This function fixes an important bug where a user might load a new series after zooming in/out of previous series which resulted in wrong min/max\n   * Also, this should never be called internally on zoom/pan - the reset should only happen when user calls the updateSeries() function externally\n   * The function also accepts an object {xaxis, yaxis} which when present is set as the new xaxis/yaxis\n   * @param {Record<string, any>} opts\n   */\n  revertDefaultAxisMinMax(opts) {\n    const w = this.w;\n    let xaxis = w.globals.lastXAxis;\n    let yaxis = w.globals.lastYAxis;\n    if (opts && opts.xaxis) {\n      xaxis = opts.xaxis;\n    }\n    if (opts && opts.yaxis) {\n      yaxis = opts.yaxis;\n    }\n    const _xaxis = (\n      /** @type {any} */\n      xaxis\n    );\n    w.config.xaxis.min = _xaxis.min;\n    w.config.xaxis.max = _xaxis.max;\n    const getLastYAxis = (index) => {\n      if (typeof yaxis[index] !== \"undefined\") {\n        const _y = (\n          /** @type {any} */\n          yaxis[index]\n        );\n        w.config.yaxis[index].min = _y.min;\n        w.config.yaxis[index].max = _y.max;\n      }\n    };\n    w.config.yaxis.map((yaxe, index) => {\n      if (w.interact.zoomed) {\n        getLastYAxis(index);\n      } else {\n        if (typeof yaxis[index] !== \"undefined\") {\n          getLastYAxis(index);\n        } else {\n          if (typeof this.ctx.opts.yaxis[index] !== \"undefined\") {\n            yaxe.min = this.ctx.opts.yaxis[index].min;\n            yaxe.max = this.ctx.opts.yaxis[index].max;\n          }\n        }\n      }\n    });\n  }\n}\nclass Utils2 {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n  }\n  /**\n   ** When hovering over series, you need to capture which series is being hovered on.\n   ** This function will return both capturedseries index as well as inner index of that series\n   * @memberof Utils\n   * @param {{ hoverArea: any, elGrid: any, clientX: any, clientY: any, context?: any }} opts\n   */\n  getNearestValues({ hoverArea, elGrid, clientX, clientY }) {\n    var _a, _b;\n    const w = this.w;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const hoverWidth = seriesBound.width;\n    const hoverHeight = seriesBound.height;\n    let xDivisor = hoverWidth / (w.globals.dataPoints - 1);\n    const yDivisor = hoverHeight / w.globals.dataPoints;\n    const hasBars = this.hasBars();\n    if ((w.globals.comboCharts || hasBars) && !w.config.xaxis.convertedCatToNumeric) {\n      xDivisor = hoverWidth / w.globals.dataPoints;\n    }\n    const hoverX = clientX - seriesBound.left - w.globals.barPadForNumericAxis;\n    const hoverY = clientY - seriesBound.top;\n    const notInRect = hoverX < 0 || hoverY < 0 || hoverX > hoverWidth || hoverY > hoverHeight;\n    if (notInRect) {\n      hoverArea.classList.remove(\"hovering-zoom\");\n      hoverArea.classList.remove(\"hovering-pan\");\n    } else {\n      if (w.interact.zoomEnabled) {\n        hoverArea.classList.remove(\"hovering-pan\");\n        hoverArea.classList.add(\"hovering-zoom\");\n      } else if (w.interact.panEnabled) {\n        hoverArea.classList.remove(\"hovering-zoom\");\n        hoverArea.classList.add(\"hovering-pan\");\n      }\n    }\n    let j = Math.round(hoverX / xDivisor);\n    const jHorz = Math.floor(hoverY / yDivisor);\n    if (hasBars && !w.config.xaxis.convertedCatToNumeric) {\n      j = Math.ceil(hoverX / xDivisor);\n      j = j - 1;\n    }\n    let capturedSeries = null;\n    let closest = null;\n    let seriesXValArr = w.globals.seriesXvalues.map(\n      (seriesXVal) => {\n        return seriesXVal.filter(\n          (s) => Utils$1.isNumber(s)\n        );\n      }\n    );\n    const seriesYValArr = w.globals.seriesYvalues.map(\n      (seriesYVal) => {\n        return seriesYVal.filter(\n          (s) => Utils$1.isNumber(s)\n        );\n      }\n    );\n    if (w.axisFlags.isXNumeric) {\n      const chartGridEl = this.ttCtx.getElGrid();\n      if (!chartGridEl) return { hoverX, hoverY };\n      const chartGridElBoundingRect = chartGridEl.getBoundingClientRect();\n      const transformedHoverX = hoverX * (chartGridElBoundingRect.width / hoverWidth);\n      const transformedHoverY = hoverY * (chartGridElBoundingRect.height / hoverHeight);\n      closest = this.closestInMultiArray(\n        transformedHoverX,\n        transformedHoverY,\n        seriesXValArr,\n        seriesYValArr\n      );\n      capturedSeries = closest.index;\n      j = (_a = closest.j) != null ? _a : 0;\n      if (capturedSeries !== null && w.globals.hasNullValues) {\n        seriesXValArr = w.globals.seriesXvalues[capturedSeries];\n        closest = this.closestInArray(transformedHoverX, seriesXValArr);\n        j = (_b = closest.j) != null ? _b : 0;\n      }\n    }\n    w.interact.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries;\n    if (!j || j < 1) j = 0;\n    if (w.globals.isBarHorizontal) {\n      w.interact.capturedDataPointIndex = jHorz;\n    } else {\n      w.interact.capturedDataPointIndex = j;\n    }\n    return {\n      capturedSeries,\n      j: w.globals.isBarHorizontal ? jHorz : j,\n      hoverX,\n      hoverY\n    };\n  }\n  /**\n   * @param {any[]} Xarrays\n   */\n  getFirstActiveXArray(Xarrays) {\n    const w = this.w;\n    let activeIndex = 0;\n    const firstActiveSeriesIndex = Xarrays.map(\n      (xarr, index) => {\n        return xarr.length > 0 ? index : -1;\n      }\n    );\n    for (let a = 0; a < firstActiveSeriesIndex.length; a++) {\n      if (firstActiveSeriesIndex[a] !== -1 && w.globals.collapsedSeriesIndices.indexOf(a) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(a) === -1) {\n        activeIndex = firstActiveSeriesIndex[a];\n        break;\n      }\n    }\n    return activeIndex;\n  }\n  /**\n   * @param {number} hoverX\n   * @param {number} hoverY\n   * @param {any[]} Xarrays\n   * @param {any[]} Yarrays\n   */\n  closestInMultiArray(hoverX, hoverY, Xarrays, Yarrays) {\n    const w = this.w;\n    const isActiveSeries = (seriesIndex) => {\n      return w.globals.collapsedSeriesIndices.indexOf(seriesIndex) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(seriesIndex) === -1;\n    };\n    const chartType = w.config.chart.type;\n    const isLineArea = !w.globals.comboCharts && (chartType === \"line\" || chartType === \"area\");\n    let closestDist = Infinity;\n    let closestSeriesIndex = null;\n    let closestPointIndex = null;\n    if (w.globals.allSeriesHasEqualX) {\n      let bucketDistX = Infinity;\n      for (let i = 0; i < Xarrays.length; i++) {\n        if (!isActiveSeries(i)) continue;\n        const xArr = Xarrays[i];\n        const yArr = Yarrays[i];\n        const len = Math.min(xArr.length, yArr.length);\n        for (let j = 0; j < len; j++) {\n          const distX = Math.abs(hoverX - xArr[j]);\n          if (distX < bucketDistX) {\n            bucketDistX = distX;\n            closestPointIndex = j;\n          }\n        }\n      }\n      if (closestPointIndex !== null) {\n        if (isLineArea) {\n          let bestSegDist = Infinity;\n          for (let i = 0; i < Xarrays.length; i++) {\n            if (!isActiveSeries(i)) continue;\n            const xArr = Xarrays[i];\n            const yArr = Yarrays[i];\n            const len = Math.min(xArr.length, yArr.length);\n            if (len < 2) {\n              const yVal = yArr[closestPointIndex];\n              if (typeof yVal !== \"number\") continue;\n              const d = Math.abs(hoverY - yVal);\n              if (d < bestSegDist) {\n                bestSegDist = d;\n                closestSeriesIndex = i;\n              }\n              continue;\n            }\n            for (let j = 0; j < len - 1; j++) {\n              const seg = this._distanceToSegment(\n                hoverX,\n                hoverY,\n                xArr[j],\n                yArr[j],\n                xArr[j + 1],\n                yArr[j + 1]\n              );\n              if (seg.dist < bestSegDist) {\n                bestSegDist = seg.dist;\n                closestSeriesIndex = i;\n              }\n            }\n          }\n        } else {\n          let bestY = Infinity;\n          for (let i = 0; i < Xarrays.length; i++) {\n            if (!isActiveSeries(i)) continue;\n            const yVal = Yarrays[i][closestPointIndex];\n            if (typeof yVal !== \"number\") continue;\n            const distY = Math.abs(hoverY - yVal);\n            if (distY < bestY) {\n              bestY = distY;\n              closestSeriesIndex = i;\n            }\n          }\n        }\n      }\n      return {\n        index: closestSeriesIndex,\n        j: closestPointIndex\n      };\n    }\n    for (let i = 0; i < Xarrays.length; i++) {\n      if (!isActiveSeries(i)) {\n        continue;\n      }\n      const xArr = Xarrays[i];\n      const yArr = Yarrays[i];\n      const len = Math.min(xArr.length, yArr.length);\n      if (isLineArea && len >= 2) {\n        for (let j = 0; j < len - 1; j++) {\n          const seg = this._distanceToSegment(\n            hoverX,\n            hoverY,\n            xArr[j],\n            yArr[j],\n            xArr[j + 1],\n            yArr[j + 1]\n          );\n          if (seg.dist < closestDist) {\n            closestDist = seg.dist;\n            closestSeriesIndex = i;\n            closestPointIndex = seg.t < 0.5 ? j : j + 1;\n          }\n        }\n        continue;\n      }\n      for (let j = 0; j < len; j++) {\n        const xVal = xArr[j];\n        const distX = hoverX - xVal;\n        const yVal = yArr[j];\n        const distY = hoverY - yVal;\n        const dist = Math.sqrt(distX * distX + distY * distY);\n        if (dist < closestDist) {\n          closestDist = dist;\n          closestSeriesIndex = i;\n          closestPointIndex = j;\n        }\n      }\n    }\n    return {\n      index: closestSeriesIndex,\n      j: closestPointIndex\n    };\n  }\n  /**\n   * Perpendicular distance from point (px, py) to the line segment\n   * (ax, ay) → (bx, by). Returns the distance plus the projection\n   * parameter t (0 = at A, 1 = at B, clamped) so callers know which\n   * endpoint the projection landed nearest.\n   * @param {number} px\n   * @param {number} py\n   * @param {number} ax\n   * @param {number} ay\n   * @param {number} bx\n   * @param {number} by\n   * @returns {{ dist: number, t: number }}\n   */\n  _distanceToSegment(px, py, ax, ay, bx, by) {\n    const dx = bx - ax;\n    const dy = by - ay;\n    const lenSq = dx * dx + dy * dy;\n    let t = lenSq === 0 ? 0 : ((px - ax) * dx + (py - ay) * dy) / lenSq;\n    if (t < 0) t = 0;\n    else if (t > 1) t = 1;\n    const cx = ax + t * dx;\n    const cy = ay + t * dy;\n    const ex = px - cx;\n    const ey = py - cy;\n    return { dist: Math.sqrt(ex * ex + ey * ey), t };\n  }\n  /**\n   * @param {number} val\n   * @param {any[]} arr\n   */\n  closestInArray(val, arr) {\n    const curr = arr[0];\n    let currIndex = null;\n    let diff = Math.abs(val - curr);\n    for (let i = 0; i < arr.length; i++) {\n      const newdiff = Math.abs(val - arr[i]);\n      if (newdiff < diff) {\n        diff = newdiff;\n        currIndex = i;\n      }\n    }\n    return {\n      j: currIndex\n    };\n  }\n  /**\n   * When there are multiple series, it is possible to have different x values for each series.\n   * But it may be possible in those multiple series, that there is same x value for 2 or more\n   * series.\n   * @memberof Utils\n   * @param {number} j - the inner index of series (series[i][j])\n   * @return {boolean}\n   */\n  isXoverlap(j) {\n    const w = this.w;\n    const xSameForAllSeriesJArr = [];\n    const seriesX = w.seriesData.seriesX.filter(\n      (s) => typeof s[0] !== \"undefined\"\n    );\n    if (seriesX.length > 0) {\n      for (let i = 0; i < seriesX.length - 1; i++) {\n        if (typeof seriesX[i][j] !== \"undefined\" && typeof seriesX[i + 1][j] !== \"undefined\") {\n          if (seriesX[i][j] !== seriesX[i + 1][j]) {\n            xSameForAllSeriesJArr.push(\"unEqual\");\n          }\n        }\n      }\n    }\n    if (xSameForAllSeriesJArr.length === 0) {\n      return true;\n    }\n    return false;\n  }\n  isInitialSeriesSameLen() {\n    var _a, _b, _c;\n    let sameLen = true;\n    const initialSeries = (\n      /** @type {any[]} */\n      ((_a = this.w.globals.initialSeries) == null ? void 0 : _a.filter(\n        /**\n         * @param {Record<string, any>} s\n         * @param {number} i\n         */\n        (s, i) => {\n          var _a2;\n          return !((_a2 = this.w.globals.collapsedSeriesIndices) == null ? void 0 : _a2.includes(i));\n        }\n      )) || []\n    );\n    for (let i = 0; i < initialSeries.length - 1; i++) {\n      if (!((_b = initialSeries[i]) == null ? void 0 : _b.data) || !((_c = initialSeries[i + 1]) == null ? void 0 : _c.data)) return true;\n      if (initialSeries[i].data.length !== initialSeries[i + 1].data.length) {\n        sameLen = false;\n        break;\n      }\n    }\n    return sameLen;\n  }\n  /**\n   * @param {any[]} allbars\n   */\n  getBarsHeight(allbars) {\n    const bars = [...allbars];\n    const totalHeight = bars.reduce((acc, bar) => acc + bar.getBBox().height, 0);\n    return totalHeight;\n  }\n  /**\n   * @param {number} capturedSeries\n   */\n  getElMarkers(capturedSeries) {\n    if (typeof capturedSeries == \"number\") {\n      return this.w.dom.baseEl.querySelectorAll(\n        `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers-wrap > *`\n      );\n    }\n    return this.w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series-markers-wrap > *\"\n    );\n  }\n  getAllMarkers(filterCollapsed = false) {\n    let markersWraps = (\n      /** @type {any[]} */\n      [\n        ...this.w.dom.baseEl.querySelectorAll(\".apexcharts-series-markers-wrap\")\n      ]\n    );\n    if (filterCollapsed) {\n      markersWraps = markersWraps.filter((m) => {\n        const realIndex = Number(m.getAttribute(\"data:realIndex\"));\n        return this.w.globals.collapsedSeriesIndices.indexOf(realIndex) === -1;\n      });\n    }\n    markersWraps.sort((a, b) => {\n      var indexA = Number(a.getAttribute(\"data:realIndex\"));\n      var indexB = Number(b.getAttribute(\"data:realIndex\"));\n      return indexB < indexA ? 1 : indexB > indexA ? -1 : 0;\n    });\n    const markers = [];\n    markersWraps.forEach((m) => {\n      markers.push(m.querySelector(\".apexcharts-marker\"));\n    });\n    return markers;\n  }\n  /**\n   * @param {number} capturedSeries\n   */\n  hasMarkers(capturedSeries) {\n    const markers = this.getElMarkers(capturedSeries);\n    return markers.length > 0;\n  }\n  /**\n   * @param {any} point\n   * @param {number} size\n   */\n  getPathFromPoint(point, size) {\n    const cx = Number(point.getAttribute(\"cx\"));\n    const cy = Number(point.getAttribute(\"cy\"));\n    const shape = point.getAttribute(\"shape\");\n    return new Graphics(this.w).getMarkerPath(cx, cy, shape, size);\n  }\n  getElBars() {\n    return this.w.dom.baseEl.querySelectorAll(\n      \".apexcharts-bar-series,  .apexcharts-candlestick-series, .apexcharts-boxPlot-series, .apexcharts-violin-series, .apexcharts-rangebar-series\"\n    );\n  }\n  hasBars() {\n    const bars = this.getElBars();\n    return bars.length > 0;\n  }\n  /**\n   * @param {number} index\n   */\n  getHoverMarkerSize(index) {\n    const w = this.w;\n    let hoverSize = w.config.markers.hover.size;\n    if (hoverSize === void 0) {\n      hoverSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n    }\n    return hoverSize;\n  }\n  /**\n   * @param {string} state\n   */\n  toggleAllTooltipSeriesGroups(state) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.allTooltipSeriesGroups.length === 0) {\n      ttCtx.allTooltipSeriesGroups = w.dom.baseEl.querySelectorAll(\n        \".apexcharts-tooltip-series-group\"\n      );\n    }\n    const allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;\n    for (let i = 0; i < allTooltipSeriesGroups.length; i++) {\n      if (state === \"enable\") {\n        allTooltipSeriesGroups[i].classList.add(\"apexcharts-active\");\n        allTooltipSeriesGroups[i].style.display = w.config.tooltip.items.display;\n      } else {\n        allTooltipSeriesGroups[i].classList.remove(\"apexcharts-active\");\n        allTooltipSeriesGroups[i].style.display = \"none\";\n      }\n    }\n  }\n}\nclass Labels {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n    this.tooltipUtil = new Utils2(tooltipContext);\n  }\n  /** @param {{ shared?: boolean, ttItems?: any, i?: number, j?: any, y1?: any, y2?: any, e?: any }} opts */\n  drawSeriesTexts({ shared = true, ttItems, i = 0, j = null, y1, y2, e }) {\n    const w = this.w;\n    if (w.config.tooltip.custom !== void 0) {\n      this.handleCustomTooltip({ i, j, y1, y2, w });\n    } else {\n      this.toggleActiveInactiveSeries(shared, i);\n    }\n    const values = this.getValuesToPrint({\n      i,\n      j\n    });\n    this.printLabels({\n      i,\n      j,\n      values,\n      ttItems,\n      shared,\n      e\n    });\n    const tooltipEl = this.ttCtx.getElTooltip();\n    if (tooltipEl) {\n      this.ttCtx.tooltipRect.ttWidth = tooltipEl.getBoundingClientRect().width;\n      this.ttCtx.tooltipRect.ttHeight = tooltipEl.getBoundingClientRect().height;\n    }\n  }\n  /** @param {{i: any, j: any, values: any, ttItems: any, shared: any, e: any}} opts */\n  printLabels({ i, j, values, ttItems, shared, e }) {\n    const w = this.w;\n    const { xVal, zVal, xAxisTTVal } = values;\n    const seriesLen = w.seriesData.series.length;\n    const basePColor = j !== null && w.config.plotOptions.bar.distributed ? w.globals.colors[j] : w.globals.colors[i];\n    for (let t = 0; t < seriesLen; t++) {\n      const tIndex = w.config.tooltip.inverseOrder ? seriesLen - 1 - t : t;\n      const row = this.computeSeriesRow({\n        i,\n        j,\n        t,\n        tIndex,\n        shared,\n        e,\n        basePColor\n      });\n      this.DOMHandling({\n        i,\n        t: tIndex,\n        j,\n        ttItems,\n        values: {\n          val: row.val,\n          goalVals: row.goalVals,\n          xVal,\n          xAxisTTVal,\n          zVal\n        },\n        seriesName: row.seriesName,\n        shared,\n        pColor: row.pColor\n      });\n    }\n  }\n  /**\n   * Compute the per-series row values (seriesName, val, goalVals, pColor)\n   * for one iteration of the tooltip's series loop. Extracted from\n   * printLabels() to keep the outer loop scannable.\n   * @param {{i: number, j: any, t: number, tIndex: number, shared: boolean, e: any, basePColor: string}} opts\n   */\n  computeSeriesRow({ i, j, tIndex, shared, e, basePColor }) {\n    const w = this.w;\n    let f = this.getFormatters(i);\n    let pColor = basePColor;\n    let val;\n    let goalVals = (\n      /** @type {any[]} */\n      []\n    );\n    let seriesName = w.config.chart.type === \"treemap\" ? f.yLbTitleFormatter(\n      String(\n        /** @type {any} */\n        w.config.series[i].data[j].x\n      ),\n      {\n        series: w.seriesData.series,\n        seriesIndex: i,\n        dataPointIndex: j,\n        w\n      }\n    ) : this.getSeriesName({\n      fn: f.yLbTitleFormatter,\n      index: i,\n      seriesIndex: i,\n      j\n    });\n    if (w.globals.axisCharts) {\n      if (shared) {\n        f = this.getFormatters(tIndex);\n        seriesName = this.getSeriesName({\n          fn: f.yLbTitleFormatter,\n          index: tIndex,\n          seriesIndex: i,\n          j\n        });\n        pColor = w.globals.colors[tIndex];\n        val = this.formatYValue(f, tIndex, j);\n        goalVals = this.formatGoalVals(f, tIndex, j);\n      } else {\n        pColor = this.resolvePatternColor(e, pColor);\n        val = this.formatYValue(f, i, j);\n        goalVals = this.formatGoalVals(f, i, j);\n      }\n    }\n    if (j === null) {\n      val = f.yLbFormatter(w.seriesData.series[i], __spreadProps(__spreadValues({}, w), {\n        seriesIndex: i,\n        dataPointIndex: i\n      }));\n    }\n    return { seriesName, val, goalVals, pColor };\n  }\n  /**\n   * Run the y-value formatter for a given (seriesIndex, dataPointIndex),\n   * handling the range-data case (start - end concatenation).\n   * @param {{yLbFormatter: Function}} f\n   * @param {number} index\n   * @param {any} j\n   */\n  formatYValue(f, index, j) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    if (w.axisFlags.isRangeData) {\n      return f.yLbFormatter((_b = (_a = w.rangeData.seriesRangeStart) == null ? void 0 : _a[index]) == null ? void 0 : _b[j], {\n        series: w.rangeData.seriesRangeStart,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      }) + \" - \" + f.yLbFormatter((_d = (_c = w.rangeData.seriesRangeEnd) == null ? void 0 : _c[index]) == null ? void 0 : _d[j], {\n        series: w.rangeData.seriesRangeEnd,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      });\n    }\n    return f.yLbFormatter(w.seriesData.series[index][j], {\n      series: w.seriesData.series,\n      seriesIndex: index,\n      dataPointIndex: j,\n      w\n    });\n  }\n  /**\n   * Format the goal-line values attached to a given (seriesIndex, dataPointIndex).\n   * Returns an empty array when no goals exist.\n   * @param {{yLbFormatter: Function}} f\n   * @param {number} index\n   * @param {any} j\n   */\n  formatGoalVals(f, index, j) {\n    var _a;\n    const w = this.w;\n    const goals = (_a = w.seriesData.seriesGoals[index]) == null ? void 0 : _a[j];\n    if (!Array.isArray(goals)) return [];\n    return goals.map((goal) => ({\n      attrs: goal,\n      val: f.yLbFormatter(goal.value, {\n        seriesIndex: index,\n        dataPointIndex: j,\n        w\n      })\n    }));\n  }\n  /**\n   * When the hovered element has a pattern fill (url(#…Pattern…)), reach\n   * into the pattern's first child to pull a stroke color. Otherwise\n   * return the raw fill attribute or the fallback.\n   * @param {any} e\n   * @param {string} fallback\n   */\n  resolvePatternColor(e, fallback) {\n    var _a, _b, _c;\n    const w = this.w;\n    const targetFill = (_a = e == null ? void 0 : e.target) == null ? void 0 : _a.getAttribute(\"fill\");\n    if (!targetFill) return fallback;\n    if (targetFill.indexOf(\"url\") === -1) return targetFill;\n    if (targetFill.indexOf(\"Pattern\") === -1) return fallback;\n    const patternEl = w.dom.baseEl.querySelector(\n      targetFill.substr(4).slice(0, -1)\n    );\n    return (_c = (_b = patternEl == null ? void 0 : patternEl.childNodes[0]) == null ? void 0 : _b.getAttribute(\"stroke\")) != null ? _c : fallback;\n  }\n  /**\n   * @param {number} i\n   */\n  getFormatters(i) {\n    const w = this.w;\n    let yLbFormatter = w.formatters.yLabelFormatters[i];\n    let yLbTitleFormatter;\n    if (w.formatters.ttVal !== void 0) {\n      if (Array.isArray(w.formatters.ttVal)) {\n        yLbFormatter = /** @type {any} */\n        w.formatters.ttVal[i] && /** @type {any} */\n        w.formatters.ttVal[i].formatter;\n        yLbTitleFormatter = /** @type {any} */\n        w.formatters.ttVal[i] && /** @type {any} */\n        w.formatters.ttVal[i].title && /** @type {any} */\n        w.formatters.ttVal[i].title.formatter;\n      } else {\n        yLbFormatter = /** @type {any} */\n        w.formatters.ttVal.formatter;\n        if (typeof /** @type {any} */\n        w.formatters.ttVal.title.formatter === \"function\") {\n          yLbTitleFormatter = /** @type {any} */\n          w.formatters.ttVal.title.formatter;\n        }\n      }\n    } else {\n      yLbTitleFormatter = w.config.tooltip.y.title.formatter;\n    }\n    if (typeof yLbFormatter !== \"function\") {\n      if (w.formatters.yLabelFormatters[0]) {\n        yLbFormatter = w.formatters.yLabelFormatters[0];\n      } else {\n        yLbFormatter = function(label) {\n          return label;\n        };\n      }\n    }\n    if (typeof yLbTitleFormatter !== \"function\") {\n      yLbTitleFormatter = function(label) {\n        return label ? label + \": \" : \"\";\n      };\n    }\n    return {\n      yLbFormatter,\n      yLbTitleFormatter\n    };\n  }\n  /** @param {{fn: any, index: any, seriesIndex: any, j: any}} opts */\n  getSeriesName({ fn, index, seriesIndex, j }) {\n    const w = this.w;\n    return fn(String(w.seriesData.seriesNames[index]), {\n      series: w.seriesData.series,\n      seriesIndex,\n      dataPointIndex: j,\n      w\n    });\n  }\n  /** @param {{ t?: any, j?: any, i?: any, ttItems?: any, values?: any, seriesName?: any, shared?: any, pColor?: any }} opts */\n  DOMHandling({ t, j, ttItems, values, seriesName, shared, pColor }) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const { val, goalVals, xVal, xAxisTTVal, zVal } = values;\n    if (!ttItems || !ttItems[t]) return;\n    let ttItemsChildren = null;\n    ttItemsChildren = ttItems[t].children;\n    if (w.config.tooltip.fillSeriesColor) {\n      ttItems[t].style.backgroundColor = pColor;\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    if (ttCtx.showTooltipTitle) {\n      if (ttCtx.tooltipTitle === null) {\n        ttCtx.tooltipTitle = w.dom.baseEl.querySelector(\n          \".apexcharts-tooltip-title\"\n        );\n      }\n      if (ttCtx.tooltipTitle) {\n        ttCtx.tooltipTitle.innerHTML = xVal;\n      }\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      if (ttCtx.xaxisTooltipText) {\n        ttCtx.xaxisTooltipText.innerHTML = xAxisTTVal !== \"\" ? xAxisTTVal : xVal;\n      }\n    }\n    const ttYLabel = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-y-label\"\n    );\n    if (ttYLabel) {\n      ttYLabel.innerHTML = seriesName ? seriesName : \"\";\n    }\n    const ttYVal = ttItems[t].querySelector(\".apexcharts-tooltip-text-y-value\");\n    if (ttYVal) {\n      ttYVal.innerHTML = typeof val !== \"undefined\" ? val : \"\";\n    }\n    if (ttItemsChildren[0] && ttItemsChildren[0].classList.contains(\"apexcharts-tooltip-marker\")) {\n      if (w.config.tooltip.marker.fillColors && Array.isArray(w.config.tooltip.marker.fillColors)) {\n        pColor = w.config.tooltip.marker.fillColors[t];\n      }\n      if (w.config.tooltip.fillSeriesColor) {\n        ttItemsChildren[0].style.backgroundColor = pColor;\n      } else {\n        ttItemsChildren[0].style.color = pColor;\n      }\n    }\n    if (!w.config.tooltip.marker.show) {\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    const ttGLabel = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-goals-label\"\n    );\n    const ttGVal = ttItems[t].querySelector(\n      \".apexcharts-tooltip-text-goals-value\"\n    );\n    if (goalVals.length && w.seriesData.seriesGoals[t]) {\n      const createGoalsHtml = () => {\n        let gLabels = \"<div>\";\n        let gVals = \"<div>\";\n        goalVals.forEach((goal) => {\n          gLabels += ` <div style=\"display: flex\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: ${goal.attrs.strokeColor}; height: 3px; border-radius: 0; top: 5px;\"></span> ${goal.attrs.name}</div>`;\n          gVals += `<div>${goal.val}</div>`;\n        });\n        ttGLabel.innerHTML = gLabels + `</div>`;\n        ttGVal.innerHTML = gVals + `</div>`;\n      };\n      if (shared) {\n        if (w.seriesData.seriesGoals[t][j] && Array.isArray(w.seriesData.seriesGoals[t][j])) {\n          createGoalsHtml();\n        } else {\n          ttGLabel.innerHTML = \"\";\n          ttGVal.innerHTML = \"\";\n        }\n      } else {\n        createGoalsHtml();\n      }\n    } else {\n      ttGLabel.innerHTML = \"\";\n      ttGVal.innerHTML = \"\";\n    }\n    if (zVal !== null) {\n      const ttZLabel = ttItems[t].querySelector(\n        \".apexcharts-tooltip-text-z-label\"\n      );\n      ttZLabel.innerHTML = w.config.tooltip.z.title;\n      const ttZVal = ttItems[t].querySelector(\n        \".apexcharts-tooltip-text-z-value\"\n      );\n      ttZVal.innerHTML = typeof zVal !== \"undefined\" ? zVal : \"\";\n    }\n    if (shared && ttItemsChildren[0]) {\n      if (w.config.tooltip.hideEmptySeries) {\n        const ttItemMarker = ttItems[t].querySelector(\n          \".apexcharts-tooltip-marker\"\n        );\n        const ttItemText = ttItems[t].querySelector(\".apexcharts-tooltip-text\");\n        if (parseFloat(val) == 0) {\n          ttItemMarker.style.display = \"none\";\n          ttItemText.style.display = \"none\";\n        } else {\n          ttItemMarker.style.display = \"block\";\n          ttItemText.style.display = \"block\";\n        }\n      }\n      if (typeof val === \"undefined\" || val === null || w.globals.ancillaryCollapsedSeriesIndices.indexOf(t) > -1 || w.globals.collapsedSeriesIndices.indexOf(t) > -1 || Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      } else {\n        ttItemsChildren[0].parentNode.style.display = w.config.tooltip.items.display;\n      }\n    } else {\n      if (Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      }\n    }\n  }\n  /**\n   * @param {boolean} shared\n   * @param {number} i\n   */\n  toggleActiveInactiveSeries(shared, i) {\n    const w = this.w;\n    if (shared) {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");\n    } else {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");\n      const firstTooltipSeriesGroup = w.dom.baseEl.querySelector(\n        `.apexcharts-tooltip-series-group-${i}`\n      );\n      if (firstTooltipSeriesGroup) {\n        const ftsGroup = (\n          /** @type {HTMLElement} */\n          firstTooltipSeriesGroup\n        );\n        ftsGroup.classList.add(\"apexcharts-active\");\n        ftsGroup.style.display = w.config.tooltip.items.display;\n      }\n    }\n  }\n  /** @param {{i: any, j: any}} opts */\n  getValuesToPrint({ i, j }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const filteredSeriesX = w.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    let xVal = \"\";\n    let xAxisTTVal = \"\";\n    let zVal = null;\n    let val = null;\n    const customFormatterOpts = {\n      series: w.seriesData.series,\n      seriesIndex: i,\n      dataPointIndex: j,\n      w\n    };\n    const zFormatter = w.formatters.ttZFormatter;\n    if (j === null) {\n      val = w.seriesData.series[i];\n    } else {\n      if (w.axisFlags.isXNumeric && w.config.chart.type !== \"treemap\") {\n        xVal = filteredSeriesX[i][j];\n        if (filteredSeriesX[i].length === 0) {\n          const firstActiveSeriesIndex = this.tooltipUtil.getFirstActiveXArray(filteredSeriesX);\n          xVal = filteredSeriesX[firstActiveSeriesIndex][j];\n        }\n      } else {\n        const dataFormat = new Data(this.w);\n        if (dataFormat.isFormatXY()) {\n          xVal = typeof /** @type {any} */\n          w.config.series[i].data[j] !== \"undefined\" ? (\n            /** @type {any} */\n            w.config.series[i].data[j].x\n          ) : \"\";\n        } else {\n          xVal = typeof w.labelData.labels[j] !== \"undefined\" ? w.labelData.labels[j] : \"\";\n        }\n      }\n    }\n    const bufferXVal = xVal;\n    if (w.axisFlags.isXNumeric && w.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(this.w);\n      xVal = xFormat.xLabelFormat(\n        /** @type {Function} */\n        w.formatters.ttKeyFormatter,\n        bufferXVal,\n        bufferXVal,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w: this.w\n        }\n      );\n    } else {\n      if (w.globals.isBarHorizontal) {\n        xVal = w.formatters.yLabelFormatters[0](bufferXVal, customFormatterOpts);\n      } else {\n        xVal = (_c = (_b = (_a = w.formatters).xLabelFormatter) == null ? void 0 : _b.call(_a, bufferXVal, customFormatterOpts)) != null ? _c : bufferXVal;\n      }\n    }\n    if (w.config.tooltip.x.formatter !== void 0) {\n      xVal = (_f = (_e = (_d = w.formatters).ttKeyFormatter) == null ? void 0 : _e.call(_d, bufferXVal, customFormatterOpts)) != null ? _f : bufferXVal;\n    }\n    if (w.seriesData.seriesZ.length > 0 && w.seriesData.seriesZ[i].length > 0) {\n      zVal = zFormatter == null ? void 0 : zFormatter(w.seriesData.seriesZ[i][j], w);\n    }\n    if (typeof w.config.xaxis.tooltip.formatter === \"function\") {\n      xAxisTTVal = (_h = (_g = w.formatters).xaxisTooltipFormatter) == null ? void 0 : _h.call(\n        _g,\n        bufferXVal,\n        customFormatterOpts\n      );\n    } else {\n      xAxisTTVal = xVal;\n    }\n    return {\n      val: Array.isArray(val) ? val.join(\" \") : val,\n      xVal: Array.isArray(xVal) ? xVal.join(\" \") : xVal,\n      xAxisTTVal: Array.isArray(xAxisTTVal) ? xAxisTTVal.join(\" \") : xAxisTTVal,\n      zVal\n    };\n  }\n  /** @param {{i: any, j: any, y1: any, y2: any, w: any}} opts */\n  handleCustomTooltip({ i, j, y1, y2, w }) {\n    const tooltipEl = this.ttCtx.getElTooltip();\n    let fn = w.config.tooltip.custom;\n    if (Array.isArray(fn) && fn[i]) {\n      fn = fn[i];\n    }\n    const customTooltip = fn({\n      series: w.seriesData.series,\n      seriesIndex: i,\n      dataPointIndex: j,\n      y1,\n      y2,\n      w\n    });\n    if (tooltipEl) {\n      if (typeof customTooltip === \"string\" || typeof customTooltip === \"number\") {\n        tooltipEl.innerHTML = String(customTooltip);\n      } else if (customTooltip instanceof Element || typeof customTooltip.nodeName === \"string\") {\n        tooltipEl.innerHTML = \"\";\n        tooltipEl.appendChild(customTooltip.cloneNode(true));\n      }\n    }\n  }\n}\nclass Position {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.ttCtx = tooltipContext;\n    this.w = tooltipContext.w;\n  }\n  /**\n   * This will move the crosshair (the vertical/horz line that moves along with mouse)\n   * Along with this, this function also calls the xaxisMove function\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move crosshair\n   * @param {number | null} [j]\n   */\n  moveXCrosshairs(cx, j = null) {\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    let x = cx - ttCtx.xcrosshairsWidth / 2;\n    const tickAmount = w.labelData.labels.slice().length;\n    if (j !== null) {\n      x = w.layout.gridWidth / tickAmount * j;\n    }\n    if (xcrosshairs !== null && !w.globals.isBarHorizontal) {\n      xcrosshairs.setAttribute(\"x\", String(x));\n      xcrosshairs.setAttribute(\"x1\", String(x));\n      xcrosshairs.setAttribute(\"x2\", String(x));\n      xcrosshairs.setAttribute(\"y2\", String(w.layout.gridHeight));\n      xcrosshairs.classList.add(\"apexcharts-active\");\n    }\n    if (x < 0) {\n      x = 0;\n    }\n    if (x > w.layout.gridWidth) {\n      x = w.layout.gridWidth;\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      let tx = x;\n      if (w.config.xaxis.crosshairs.width === \"tickWidth\" || w.config.xaxis.crosshairs.width === \"barWidth\") {\n        tx = x + ttCtx.xcrosshairsWidth / 2;\n      }\n      this.moveXAxisTooltip(tx);\n    }\n  }\n  /**\n   * This will move the crosshair (the vertical/horz line that moves along with mouse)\n   * Along with this, this function also calls the xaxisMove function\n   * @memberof Position\n   * @param {number} cy - point's y position, wherever point's y is, you need to move crosshair\n   */\n  moveYCrosshairs(cy) {\n    const ttCtx = this.ttCtx;\n    if (ttCtx.ycrosshairs !== null) {\n      Graphics.setAttrs(ttCtx.ycrosshairs, {\n        y1: cy,\n        y2: cy\n      });\n    }\n    if (ttCtx.ycrosshairsHidden !== null) {\n      Graphics.setAttrs(ttCtx.ycrosshairsHidden, {\n        y1: cy,\n        y2: cy\n      });\n    }\n  }\n  /**\n   ** AxisTooltip is the small rectangle which appears on x axis with x value, when user moves\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move\n   */\n  moveXAxisTooltip(cx) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.xaxisTooltip !== null && ttCtx.xcrosshairsWidth !== 0) {\n      ttCtx.xaxisTooltip.classList.add(\"apexcharts-active\");\n      const cy = ttCtx.xaxisOffY + w.config.xaxis.tooltip.offsetY + w.layout.translateY + 5 + w.config.xaxis.offsetY;\n      const xaxisTTText = ttCtx.xaxisTooltip.getBoundingClientRect();\n      const xaxisTTTextWidth = xaxisTTText.width;\n      cx = cx - xaxisTTTextWidth / 2;\n      if (!isNaN(cx)) {\n        cx = cx + w.layout.translateX;\n        const graphics = new Graphics(this.w);\n        const textRect = graphics.getTextRects(\n          (_b = (_a = ttCtx.xaxisTooltipText) == null ? void 0 : _a.innerHTML) != null ? _b : \"\",\n          w.config.xaxis.labels.style.fontSize\n        );\n        if (ttCtx.xaxisTooltipText) {\n          ttCtx.xaxisTooltipText.style.minWidth = textRect.width + \"px\";\n        }\n        ttCtx.xaxisTooltip.style.left = cx + \"px\";\n        ttCtx.xaxisTooltip.style.top = cy + \"px\";\n      }\n    }\n  }\n  /**\n   * @param {number} index\n   */\n  moveYAxisTooltip(index) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.yaxisTTEls === null) {\n      ttCtx.yaxisTTEls = /** @type {any[]} */\n      [\n        ...w.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n      ];\n    }\n    const ycrosshairsHiddenRectY1 = parseInt(\n      (_b = (_a = ttCtx.ycrosshairsHidden) == null ? void 0 : _a.getAttribute(\"y1\")) != null ? _b : \"0\",\n      10\n    );\n    let cy = w.layout.translateY + ycrosshairsHiddenRectY1;\n    if (ttCtx.yaxisTTEls) {\n      const yAxisTTRect = ttCtx.yaxisTTEls[index].getBoundingClientRect();\n      const yAxisTTHeight = yAxisTTRect.height;\n      let cx;\n      const labelsGroup = (\n        /** @type {SVGGElement | null} */\n        w.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        )\n      );\n      const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n      if (labelsGroup) {\n        const lr = labelsGroup.getBoundingClientRect();\n        if (lr.width > 0) {\n          const labelsCenterInElWrap = lr.left + lr.width / 2 - elWrapRect.left;\n          cx = labelsCenterInElWrap - yAxisTTRect.width / 2;\n        }\n      }\n      if (cx == null) {\n        const GAP = 4;\n        cx = w.config.yaxis[index].opposite ? w.globals.translateYAxisX[index] + GAP : w.globals.translateYAxisX[index] - yAxisTTRect.width - GAP;\n      }\n      cy = cy - yAxisTTHeight / 2;\n      if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1 && cy > 0 && cy < w.layout.gridHeight) {\n        ttCtx.yaxisTTEls[index].classList.add(\"apexcharts-active\");\n        ttCtx.yaxisTTEls[index].style.top = cy + \"px\";\n        ttCtx.yaxisTTEls[index].style.left = cx + w.config.yaxis[index].tooltip.offsetX + \"px\";\n      } else {\n        ttCtx.yaxisTTEls[index].classList.remove(\"apexcharts-active\");\n      }\n    }\n  }\n  /**\n   ** moves the whole tooltip by changing x, y attrs\n   * @memberof Position\n   * @param {number} cx - point's x position, wherever point's x is, you need to move tooltip\n   * @param {number} cy - point's y position, wherever point's y is, you need to move tooltip\n   * @param {number | null} [markerSize] - point's size\n   */\n  moveTooltip(cx, cy, markerSize = null) {\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return;\n    const pos = this.computeTooltipPosition(cx, cy, markerSize);\n    if (pos === null) return;\n    this.applyTooltipPosition(tooltipEl, pos);\n  }\n  /**\n   * Pure-ish (reads from `this.ttCtx` + `this.w` but performs no DOM writes)\n   * computation of the tooltip box position, edge placement (for arrow),\n   * and arrow vertical offset. Returns null when inputs are not numeric.\n   *\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number | null} [markerSize]\n   * @returns {{ x: number, y: number, placement: 'left'|'right', arrowY: number|null } | null}\n   */\n  computeTooltipPosition(cx, cy, markerSize = null) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipRect = ttCtx.tooltipRect;\n    const arrowEnabled = !!w.config.tooltip.arrow;\n    const pointSize = markerSize !== null ? parseFloat(String(markerSize)) : 1;\n    const ttH = tooltipRect.ttHeight || 0;\n    const ttW = tooltipRect.ttWidth || 0;\n    const cxNum = parseFloat(String(cx));\n    const cyNum = parseFloat(String(cy));\n    if (isNaN(cxNum)) return null;\n    let x = cxNum + pointSize + 5;\n    const pointY = cyNum + w.layout.translateY;\n    let y = arrowEnabled ? pointY - ttH / 2 + pointSize / 2 : cyNum + pointSize / 2;\n    let placement = \"right\";\n    if (x > w.layout.gridWidth / 2) {\n      x = x - ttW - pointSize - 10;\n      placement = \"left\";\n    }\n    if (x > w.layout.gridWidth - ttW - 10) {\n      x = w.layout.gridWidth - ttW;\n    }\n    if (x < -20) {\n      x = -20;\n    }\n    if (w.config.tooltip.followCursor) {\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return null;\n      const seriesBound = elGrid.getBoundingClientRect();\n      x = ttCtx.e.clientX - seriesBound.left;\n      if (x > w.layout.gridWidth / 2) {\n        x = x - ttW;\n        placement = \"left\";\n      } else {\n        placement = \"right\";\n      }\n      y = ttCtx.e.clientY + w.layout.translateY - seriesBound.top;\n      if (y > w.layout.gridHeight / 2) {\n        y = y - ttH;\n      }\n    } else {\n      if (!w.globals.isBarHorizontal) {\n        if (arrowEnabled) {\n          const gridTop = w.layout.translateY;\n          const gridBottom = w.layout.translateY + w.layout.gridHeight;\n          if (y + ttH > gridBottom) {\n            y = gridBottom - ttH;\n          }\n          if (y < gridTop) {\n            y = gridTop;\n          }\n        } else {\n          if (ttH / 2 + y > w.layout.gridHeight) {\n            y = w.layout.gridHeight - ttH + w.layout.translateY;\n          }\n        }\n      }\n    }\n    if (isNaN(x)) return null;\n    x = x + w.layout.translateX;\n    const a11y = (_b = (_a = w.config) == null ? void 0 : _a.chart) == null ? void 0 : _b.accessibility;\n    if ((a11y == null ? void 0 : a11y.enabled) && ((_d = (_c = a11y == null ? void 0 : a11y.keyboard) == null ? void 0 : _c.navigation) == null ? void 0 : _d.enabled) && ((_g = (_f = (_e = w.dom) == null ? void 0 : _e.baseEl) == null ? void 0 : _f.querySelector) == null ? void 0 : _g.call(_f, \".apexcharts-keyboard-focused\"))) {\n      const refPointY = arrowEnabled ? pointY : cyNum;\n      const margin = (pointSize || 1) + 12;\n      const tooltipTop = y;\n      const tooltipBottom = y + ttH;\n      if (!isNaN(refPointY) && ttH > 0 && tooltipTop < refPointY + margin && tooltipBottom > refPointY - margin) {\n        y = refPointY - ttH - margin;\n        if (y < 0) {\n          y = refPointY + margin;\n        }\n      }\n    }\n    let arrowY = null;\n    if (arrowEnabled && ttH > 0) {\n      const localY = pointY - y;\n      const minArrowY = 10;\n      const maxArrowY = ttH - 10;\n      arrowY = Math.max(minArrowY, Math.min(maxArrowY, localY));\n    }\n    return { x, y, placement, arrowY };\n  }\n  /**\n   * Single DOM-writer used by every positioning path on the main tooltip.\n   * Replaces the duplicated `style.left/top` writes that previously lived\n   * in Position.moveTooltip, Tooltip.drawFixedTooltipRect, and Intersect.\n   *\n   * @param {HTMLElement} tooltipEl\n   * @param {{\n   *   x: number,\n   *   y: number,\n   *   placement?: 'left'|'right'|'top'|'bottom',\n   *   arrowY?: number|null,\n   *   arrowX?: number|null,\n   * }} pos\n   */\n  applyTooltipPosition(tooltipEl, pos) {\n    if (!tooltipEl) return;\n    const firstPaint = tooltipEl.dataset.positioned !== \"true\";\n    if (firstPaint) {\n      tooltipEl.style.transitionProperty = \"none\";\n    }\n    tooltipEl.style.left = pos.x + \"px\";\n    tooltipEl.style.top = pos.y + \"px\";\n    if (pos.placement) {\n      tooltipEl.dataset.placement = pos.placement;\n    }\n    if (pos.arrowY != null) {\n      tooltipEl.style.setProperty(\"--apx-tt-arrow-y\", pos.arrowY + \"px\");\n    }\n    if (pos.arrowX != null) {\n      tooltipEl.style.setProperty(\"--apx-tt-arrow-x\", pos.arrowX + \"px\");\n    }\n    if (firstPaint) {\n      void tooltipEl.offsetWidth;\n      tooltipEl.dataset.positioned = \"true\";\n      requestAnimationFrame(() => {\n        tooltipEl.style.transitionProperty = \"\";\n      });\n    }\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  moveMarkers(i, j) {\n    var _a;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    if (w.globals.markers.size[i] > 0) {\n      const allPoints = w.dom.baseEl.querySelectorAll(\n        ` .apexcharts-series[data\\\\:realIndex='${i}'] .apexcharts-marker`\n      );\n      for (let p = 0; p < allPoints.length; p++) {\n        if (parseInt((_a = allPoints[p].getAttribute(\"rel\")) != null ? _a : \"0\", 10) === j) {\n          ttCtx.marker.resetPointsSize();\n          ttCtx.marker.enlargeCurrentPoint(j, allPoints[p]);\n        }\n      }\n    } else {\n      ttCtx.marker.resetPointsSize();\n      this.moveDynamicPointOnHover(j, i);\n    }\n  }\n  // This function is used when you need to show markers/points only on hover -\n  // DIFFERENT X VALUES in multiple series\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveDynamicPointOnHover(j, capturedSeries) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let cx = 0;\n    let cy = 0;\n    const graphics = new Graphics(this.w);\n    const pointsArr = w.globals.pointsArray;\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries);\n    const serType = (\n      /** @type {any} */\n      w.config.series[capturedSeries].type\n    );\n    if (serType && (serType === \"column\" || serType === \"candlestick\" || serType === \"boxPlot\" || serType === \"violin\")) {\n      return;\n    }\n    cx = (_b = (_a = pointsArr[capturedSeries]) == null ? void 0 : _a[j]) == null ? void 0 : _b[0];\n    cy = ((_d = (_c = pointsArr[capturedSeries]) == null ? void 0 : _c[j]) == null ? void 0 : _d[1]) || 0;\n    const point = w.dom.baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers path`\n    );\n    if (point && cy < w.layout.gridHeight && cy > 0) {\n      const shape = (_e = point.getAttribute(\"shape\")) != null ? _e : \"circle\";\n      const path = graphics.getMarkerPath(cx, cy, shape, hoverSize * 1.5);\n      point.setAttribute(\"d\", path);\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy, hoverSize);\n    }\n  }\n  // This function is used when you need to show markers/points only on hover -\n  // SAME X VALUES in multiple series\n  /**\n   * @param {number} j\n   */\n  moveDynamicPointsOnHover(j) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w = ttCtx.w;\n    let cx = 0;\n    let cy = 0;\n    let activeSeries = 0;\n    const pointsArr = w.globals.pointsArray;\n    const series = new Series(this.w);\n    const graphics = new Graphics(this.w);\n    activeSeries = series.getActiveConfigSeriesIndex(\"asc\", [\n      \"line\",\n      \"area\",\n      \"scatter\",\n      \"bubble\"\n    ]);\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(activeSeries);\n    if ((_a = pointsArr[activeSeries]) == null ? void 0 : _a[j]) {\n      cx = pointsArr[activeSeries][j][0];\n      cy = pointsArr[activeSeries][j][1];\n    }\n    if (isNaN(cx)) {\n      return;\n    }\n    const points = ttCtx.tooltipUtil.getAllMarkers();\n    if (points.length) {\n      for (let p = 0; p < w.seriesData.series.length; p++) {\n        const pointArr = pointsArr[p];\n        if (w.globals.comboCharts) {\n          if (typeof pointArr === \"undefined\") {\n            points.splice(p, 0, null);\n          }\n        }\n        if (pointArr && pointArr.length) {\n          let pcy = pointsArr[p][j][1];\n          let pcy2;\n          points[p].setAttribute(\"cx\", cx);\n          const shape = (_b = points[p].getAttribute(\"shape\")) != null ? _b : \"circle\";\n          if (w.config.chart.type === \"rangeArea\" && !w.globals.comboCharts) {\n            const rangeStartIndex = j + w.seriesData.series[p].length;\n            pcy2 = pointsArr[p][rangeStartIndex][1];\n            const pcyDiff = Math.abs(pcy - pcy2) / 2;\n            pcy = pcy - pcyDiff;\n          }\n          if (pcy !== null && !isNaN(pcy) && pcy < w.layout.gridHeight + hoverSize && pcy + hoverSize > 0) {\n            const path = graphics.getMarkerPath(cx, pcy, shape, hoverSize);\n            points[p].setAttribute(\"d\", path);\n          } else {\n            points[p].setAttribute(\"d\", \"\");\n          }\n        }\n      }\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy || w.layout.gridHeight, hoverSize);\n    }\n  }\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveStickyTooltipOverBars(j, capturedSeries) {\n    var _a, _b, _c;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let barLen = w.globals.columnSeries ? (\n      /** @type {any} */\n      w.globals.columnSeries.length\n    ) : w.seriesData.series.length;\n    if (w.config.chart.stacked) {\n      barLen = w.globals.barGroups.length;\n    }\n    let i = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1;\n    if (w.globals.isBarHorizontal) {\n      const series = new Series(this.w);\n      i = series.getActiveConfigSeriesIndex(\"desc\") + 1;\n    }\n    let jBar = w.dom.baseEl.querySelector(\n      `.apexcharts-bar-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-candlestick-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-boxPlot-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-violin-series .apexcharts-series[rel='${i}'] path[j='${j}'], .apexcharts-rangebar-series .apexcharts-series[rel='${i}'] path[j='${j}']`\n    );\n    if (!jBar && typeof capturedSeries === \"number\") {\n      jBar = w.dom.baseEl.querySelector(\n        `.apexcharts-bar-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-candlestick-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-boxPlot-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-violin-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}'],\n        .apexcharts-rangebar-series .apexcharts-series[data\\\\:realIndex='${capturedSeries}'] path[j='${j}']`\n      );\n    }\n    let bcx = jBar ? parseFloat((_a = jBar.getAttribute(\"cx\")) != null ? _a : \"0\") : 0;\n    let bcy = jBar ? parseFloat((_b = jBar.getAttribute(\"cy\")) != null ? _b : \"0\") : 0;\n    const bw = jBar ? parseFloat((_c = jBar.getAttribute(\"barWidth\")) != null ? _c : \"0\") : 0;\n    const elGrid = ttCtx.getElGrid();\n    if (!elGrid) return;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const isBoxOrCandle = jBar && (jBar.classList.contains(\"apexcharts-candlestick-area\") || jBar.classList.contains(\"apexcharts-boxPlot-area\"));\n    if (w.axisFlags.isXNumeric) {\n      if (jBar && !isBoxOrCandle) {\n        const center = this._datapointCenterXFromBars(j, seriesBound);\n        if (center != null) {\n          bcx = center;\n        } else {\n          bcx = bcx - (barLen % 2 !== 0 ? bw / 2 : 0);\n        }\n      }\n      if (jBar && // fixes apexcharts.js#2354\n      isBoxOrCandle) {\n        bcx = bcx - bw / 2;\n      }\n    } else {\n      if (!w.globals.isBarHorizontal) {\n        bcx = ttCtx.xAxisTicksPositions[j - 1] + ttCtx.dataPointsDividedWidth / 2;\n        if (isNaN(bcx)) {\n          bcx = ttCtx.xAxisTicksPositions[j] - ttCtx.dataPointsDividedWidth / 2;\n        }\n      }\n    }\n    if (!w.globals.isBarHorizontal) {\n      if (w.config.tooltip.followCursor) {\n        bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2;\n      } else {\n        if (bcy + ttCtx.tooltipRect.ttHeight + 15 > w.layout.gridHeight) {\n          bcy = w.layout.gridHeight;\n        }\n      }\n    } else {\n      bcy = bcy - ttCtx.tooltipRect.ttHeight;\n    }\n    if (!w.globals.isBarHorizontal) {\n      this.moveXCrosshairs(bcx);\n    }\n    if (!ttCtx.fixedTooltip) {\n      if (w.globals.isBarHorizontal && !w.config.tooltip.followCursor) {\n        const placed = this.placeHorizontalSharedTooltip(j);\n        if (placed) return;\n      }\n      this.moveTooltip(bcx, bcy || w.layout.gridHeight);\n    }\n  }\n  /**\n   * Place tooltip above (or flipped: below) the union rect of all bars at\n   * dataPointIndex `j` for horizontal-bar-likes. Returns true when a\n   * Compute the true horizontal center of dataPointIndex `j` in grid-local\n   * coords from the union of every visible bar's `getBoundingClientRect()`.\n   * Used as a replacement for the (buggy on numeric/datetime xaxis) `cx`\n   * attribute math in `moveStickyTooltipOverBars`. Returns null when no\n   * usable bars are found.\n   * @param {number} j\n   * @param {DOMRect} gridRect\n   * @returns {number | null}\n   */\n  _datapointCenterXFromBars(j, gridRect) {\n    var _a, _b;\n    const w = this.w;\n    const bars = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-bar-series path[j='${j}'],.apexcharts-rangebar-series path[j='${j}']`\n    );\n    if (!bars.length) return null;\n    let unionLeft = Infinity;\n    let unionRight = -Infinity;\n    for (const bar of bars) {\n      const parent = (\n        /** @type {Element|null} */\n        bar.parentNode\n      );\n      if ((_b = (_a = parent == null ? void 0 : parent.classList) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, \"apexcharts-series-collapsed\")) continue;\n      const r = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r.width === 0 && r.height === 0) continue;\n      if (r.left < unionLeft) unionLeft = r.left;\n      if (r.right > unionRight) unionRight = r.right;\n    }\n    if (!isFinite(unionLeft)) return null;\n    return (unionLeft + unionRight) / 2 - gridRect.left - (w.globals.barPadForNumericAxis || 0);\n  }\n  /**\n   * Place tooltip above (or flipped: below) the union rect of all bars at\n   * dataPointIndex `j` for horizontal-bar-likes. Returns true when a\n   * placement was applied; false when no bars found (caller falls back).\n   * @param {number} j\n   * @returns {boolean}\n   */\n  placeHorizontalSharedTooltip(j) {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return false;\n    const elGrid = ttCtx.getElGrid();\n    if (!elGrid) return false;\n    const gridRect = elGrid.getBoundingClientRect();\n    const bars = w.dom.baseEl.querySelectorAll(\n      `.apexcharts-bar-series path[j='${j}'],.apexcharts-rangebar-series path[j='${j}'],.apexcharts-boxPlot-series path[j='${j}']`\n    );\n    if (!bars.length) return false;\n    let unionLeft = Infinity;\n    let unionRight = -Infinity;\n    let unionTop = Infinity;\n    let unionBottom = -Infinity;\n    for (const bar of bars) {\n      const parent = (\n        /** @type {Element|null} */\n        bar.parentNode\n      );\n      if ((_b = (_a = parent == null ? void 0 : parent.classList) == null ? void 0 : _a.contains) == null ? void 0 : _b.call(_a, \"apexcharts-series-collapsed\")) continue;\n      const r = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r.width === 0 && r.height === 0) continue;\n      if (r.left < unionLeft) unionLeft = r.left;\n      if (r.right > unionRight) unionRight = r.right;\n      if (r.top < unionTop) unionTop = r.top;\n      if (r.bottom > unionBottom) unionBottom = r.bottom;\n    }\n    if (!isFinite(unionLeft)) return false;\n    const ttW = ttCtx.tooltipRect.ttWidth || 0;\n    const ttH = ttCtx.tooltipRect.ttHeight || 0;\n    const ARROW_TIP_OVERHANG = 7;\n    const rowCenterX = (unionLeft + unionRight) / 2 - gridRect.left + w.layout.translateX;\n    const rowTopElWrap = unionTop - gridRect.top + w.layout.translateY;\n    const rowBottomElWrap = unionBottom - gridRect.top + w.layout.translateY;\n    const gridTop = w.layout.translateY;\n    const gridBottom = w.layout.translateY + w.layout.gridHeight;\n    const gridLeft = w.layout.translateX;\n    const gridRight = w.layout.translateX + w.layout.gridWidth;\n    let placement = \"top\";\n    let finalY = rowTopElWrap - ttH - ARROW_TIP_OVERHANG;\n    if (finalY < gridTop) {\n      const belowTop = rowBottomElWrap + ARROW_TIP_OVERHANG;\n      if (belowTop + ttH <= gridBottom) {\n        placement = \"bottom\";\n        finalY = belowTop;\n      }\n    }\n    let finalX = rowCenterX - ttW / 2;\n    if (finalX < gridLeft) finalX = gridLeft;\n    if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n    const arrowX = Math.max(10, Math.min(ttW - 10, rowCenterX - finalX));\n    this.applyTooltipPosition(tooltipEl, {\n      x: finalX,\n      y: finalY,\n      placement,\n      arrowY: null,\n      arrowX\n    });\n    return true;\n  }\n}\nfunction renderMarkerSVG(shape) {\n  const svg = (body) => `<svg viewBox=\"0 0 12 12\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\">${body}</svg>`;\n  switch (shape) {\n    case \"square\":\n    case \"rect\":\n      return svg('<rect x=\"1\" y=\"1\" width=\"10\" height=\"10\" rx=\"1\" fill=\"currentColor\"/>');\n    case \"line\":\n      return svg('<rect x=\"0\" y=\"5\" width=\"12\" height=\"2\" rx=\"1\" fill=\"currentColor\"/>');\n    case \"diamond\":\n      return svg('<path d=\"M6 0.5 L11.5 6 L6 11.5 L0.5 6 Z\" fill=\"currentColor\"/>');\n    case \"triangle\":\n      return svg('<path d=\"M6 1 L11.2 10.5 L0.8 10.5 Z\" fill=\"currentColor\"/>');\n    case \"cross\":\n      return svg(\n        '<path d=\"M2 2 L10 10 M10 2 L2 10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'\n      );\n    case \"plus\":\n      return svg(\n        '<path d=\"M6 1 L6 11 M1 6 L11 6\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"/>'\n      );\n    case \"star\":\n      return svg(\n        '<path d=\"M6 0.5 L7.5 4.4 L11.5 4.7 L8.4 7.2 L9.5 11.1 L6 8.9 L2.5 11.1 L3.6 7.2 L0.5 4.7 L4.5 4.4 Z\" fill=\"currentColor\"/>'\n      );\n    case \"sparkle\":\n      return svg(\n        '<path d=\"M6 0.5 L7 5 L11.5 6 L7 7 L6 11.5 L5 7 L0.5 6 L5 5 Z\" fill=\"currentColor\"/>'\n      );\n    case \"circle\":\n    default:\n      return svg('<circle cx=\"6\" cy=\"6\" r=\"5\" fill=\"currentColor\"/>');\n  }\n}\nclass Marker {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n    this.ctx = tooltipContext.ctx;\n    this.tooltipPosition = new Position(tooltipContext);\n  }\n  drawDynamicPoints() {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const marker = new Markers(this.w, this.ctx);\n    const elsSeries = (\n      /** @type {any[]} */\n      [\n        ...w.dom.baseEl.querySelectorAll(\".apexcharts-series\")\n      ]\n    );\n    if (w.config.chart.stacked) {\n      elsSeries.sort((a, b) => {\n        return parseFloat(a.getAttribute(\"data:realIndex\")) - parseFloat(b.getAttribute(\"data:realIndex\"));\n      });\n    }\n    for (let i = 0; i < elsSeries.length; i++) {\n      const pointsMain = elsSeries[i].querySelector(\n        `.apexcharts-series-markers-wrap`\n      );\n      if (pointsMain !== null) {\n        let PointClasses = `apexcharts-marker w${(Math.random() + 1).toString(36).substring(4)}`;\n        if ((w.config.chart.type === \"line\" || w.config.chart.type === \"area\") && !w.globals.comboCharts && !w.config.tooltip.intersect) {\n          PointClasses += \" no-pointer-events\";\n        }\n        const elPointOptions = marker.getMarkerConfig({\n          cssClass: PointClasses,\n          seriesIndex: Number(pointsMain.getAttribute(\"data:realIndex\"))\n          // fixes apexcharts/apexcharts.js #1427\n        });\n        const point = graphics.drawMarker(0, 0, elPointOptions);\n        point.node.setAttribute(\"default-marker-size\", 0);\n        const elPointsG = BrowserAPIs.createElementNS(SVGNS, \"g\");\n        elPointsG.classList.add(\"apexcharts-series-markers\");\n        elPointsG.appendChild(point.node);\n        pointsMain.appendChild(elPointsG);\n      }\n    }\n  }\n  /**\n   * @param {any} rel\n   * @param {any} point\n   * @param {number | null} [x]\n   * @param {number | null} [y]\n   */\n  enlargeCurrentPoint(rel, point, x = null, y = null) {\n    const w = this.w;\n    if (w.config.chart.type !== \"bubble\") {\n      this.newPointSize(rel, point);\n    }\n    let cx = point.getAttribute(\"cx\");\n    let cy = point.getAttribute(\"cy\");\n    if (x !== null && y !== null) {\n      cx = x;\n      cy = y;\n    }\n    this.tooltipPosition.moveXCrosshairs(cx);\n    if (!this.fixedTooltip) {\n      if (w.config.chart.type === \"radar\") {\n        const elGrid = this.ttCtx.getElGrid();\n        if (!elGrid) return;\n        const seriesBound = elGrid.getBoundingClientRect();\n        cx = this.ttCtx.e.clientX - seriesBound.left;\n      }\n      this.tooltipPosition.moveTooltip(cx, cy, w.config.markers.hover.size);\n    }\n  }\n  /**\n   * @param {number} j\n   */\n  enlargePoints(j) {\n    var _a, _b;\n    const w = this.w;\n    const me = this;\n    const ttCtx = this.ttCtx;\n    const col = j;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    let newSize = w.config.markers.hover.size;\n    for (let p = 0; p < points.length; p++) {\n      const rel = points[p].getAttribute(\"rel\");\n      const index = points[p].getAttribute(\"index\");\n      if (newSize === void 0) {\n        newSize = w.globals.markers.size[\n          /** @type {any} */\n          index\n        ] + w.config.markers.hover.sizeOffset;\n      }\n      if (col === parseInt(rel != null ? rel : \"0\", 10)) {\n        me.newPointSize(col, points[p]);\n        const cx = (_a = points[p].getAttribute(\"cx\")) != null ? _a : \"0\";\n        const cy = (_b = points[p].getAttribute(\"cy\")) != null ? _b : \"0\";\n        me.tooltipPosition.moveXCrosshairs(parseFloat(cx));\n        if (!ttCtx.fixedTooltip) {\n          me.tooltipPosition.moveTooltip(\n            parseFloat(cx),\n            parseFloat(cy),\n            newSize\n          );\n        }\n      } else {\n        me.oldPointSize(points[p]);\n      }\n    }\n  }\n  /**\n   * @param {any} rel\n   * @param {any} point\n   */\n  newPointSize(rel, point) {\n    const w = this.w;\n    let newSize = w.config.markers.hover.size;\n    const elPoint = rel === 0 ? point.parentNode.firstChild : point.parentNode.lastChild;\n    if (elPoint.getAttribute(\"default-marker-size\") !== \"0\") {\n      const index = parseInt(elPoint.getAttribute(\"index\"), 10);\n      if (newSize === void 0) {\n        newSize = w.globals.markers.size[index] + w.config.markers.hover.sizeOffset;\n      }\n      if (newSize < 0) {\n        newSize = 0;\n      }\n      const path = this.ttCtx.tooltipUtil.getPathFromPoint(point, newSize);\n      point.setAttribute(\"d\", path);\n    }\n  }\n  /**\n   * @param {any} point\n   */\n  oldPointSize(point) {\n    const size = parseFloat(point.getAttribute(\"default-marker-size\"));\n    const path = this.ttCtx.tooltipUtil.getPathFromPoint(point, size);\n    point.setAttribute(\"d\", path);\n  }\n  resetPointsSize() {\n    var _a;\n    const w = this.w;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    for (let p = 0; p < points.length; p++) {\n      const size = parseFloat(\n        (_a = points[p].getAttribute(\"default-marker-size\")) != null ? _a : \"0\"\n      );\n      if (Utils$1.isNumber(size) && size > 0) {\n        const path = this.ttCtx.tooltipUtil.getPathFromPoint(points[p], size);\n        points[p].setAttribute(\"d\", path);\n      } else {\n        points[p].setAttribute(\"d\", \"M0,0\");\n      }\n    }\n  }\n}\nclass Intersect {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    const w = this.w;\n    this.ttCtx = tooltipContext;\n    this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.config.chart.type === \"rangeBar\" && w.config.plotOptions.bar.rangeBarGroupRows;\n  }\n  // a helper function to get an element's attribute value\n  /**\n   * @param {Event} e\n   * @param {string} attr\n   */\n  getAttr(e, attr) {\n    var _a;\n    return parseFloat(\n      /** @type {Element} */\n      (_a = e.target.getAttribute(attr)) != null ? _a : \"\"\n    );\n  }\n  // handle tooltip for heatmaps and treemaps\n  /** @param {{e: any, opt: any, x: any, y: any, type: any}} opts */\n  handleHeatTreeTooltip({ e, opt, x, y, type }) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    if (e.target.classList.contains(`apexcharts-${type}-rect`)) {\n      const i = this.getAttr(e, \"i\");\n      const j = this.getAttr(e, \"j\");\n      const cx = this.getAttr(e, \"cx\");\n      const cy = this.getAttr(e, \"cy\");\n      const width = this.getAttr(e, \"width\");\n      const height = this.getAttr(e, \"height\");\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        shared: false,\n        e\n      });\n      w.interact.capturedSeriesIndex = i;\n      w.interact.capturedDataPointIndex = j;\n      x = cx + ttCtx.tooltipRect.ttWidth / 2 + width;\n      y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2;\n      ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2);\n      if (x > w.layout.gridWidth / 2) {\n        x = cx - ttCtx.tooltipRect.ttWidth / 2 + width;\n      }\n      if (ttCtx.w.config.tooltip.followCursor) {\n        const seriesBound = w.dom.elWrap.getBoundingClientRect();\n        x = ((_a = w.interact.clientX) != null ? _a : 0) - seriesBound.left - (x > w.layout.gridWidth / 2 ? ttCtx.tooltipRect.ttWidth : 0);\n        y = ((_b = w.interact.clientY) != null ? _b : 0) - seriesBound.top - (y > w.layout.gridHeight / 2 ? ttCtx.tooltipRect.ttHeight : 0);\n      }\n    }\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * handle tooltips for line/area/scatter charts where tooltip.intersect is true\n   * when user hovers over the marker directly, this function is executed\n   */\n  /** @param {{e: any, opt: any, x: any, y: any}} opts */\n  handleMarkerTooltip({ e, opt, x, y }) {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    let i;\n    let j;\n    if (e.target.classList.contains(\"apexcharts-marker\")) {\n      const cx = parseInt(opt.paths.getAttribute(\"cx\"), 10);\n      const cy = parseInt(opt.paths.getAttribute(\"cy\"), 10);\n      const val = parseFloat(opt.paths.getAttribute(\"val\"));\n      j = parseInt(opt.paths.getAttribute(\"rel\"), 10);\n      i = parseInt(\n        opt.paths.parentNode.parentNode.parentNode.getAttribute(\"rel\"),\n        10\n      ) - 1;\n      if (ttCtx.intersect) {\n        const el = Utils$1.findAncestor(opt.paths, \"apexcharts-series\");\n        if (el) {\n          i = parseInt(el.getAttribute(\"data:realIndex\"), 10);\n        }\n      }\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n        e\n      });\n      if (e.type === \"mouseup\") {\n        ttCtx.markerClick(e, i, j);\n      }\n      w.interact.capturedSeriesIndex = i;\n      w.interact.capturedDataPointIndex = j;\n      const arrowEnabled = !!w.config.tooltip.arrow;\n      x = cx;\n      if (arrowEnabled) {\n        y = cy;\n      } else {\n        y = cy + w.layout.translateY - ttCtx.tooltipRect.ttHeight * 1.4;\n        if (val < 0) {\n          y = cy;\n        }\n      }\n      if (ttCtx.w.config.tooltip.followCursor) {\n        const elGrid = ttCtx.getElGrid();\n        if (!elGrid) return { x, y };\n        const seriesBound = elGrid.getBoundingClientRect();\n        y = ttCtx.e.clientY + w.layout.translateY - seriesBound.top;\n      }\n      ttCtx.marker.enlargeCurrentPoint(j, opt.paths, x, y);\n    }\n    return {\n      x,\n      y\n    };\n  }\n  /**\n   * handle tooltips for bar/column charts\n   */\n  /** @param {{e: any, opt: any}} opts */\n  handleBarTooltip({ e, opt }) {\n    var _a, _b, _c;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipEl = ttCtx.getElTooltip();\n    let bx = 0;\n    let x = 0;\n    let y = 0;\n    let i = 0;\n    let strokeWidth;\n    const barXY = this.getBarTooltipXY({\n      e,\n      opt\n    });\n    if (barXY.j === null && barXY.barHeight === 0 && barXY.barWidth === 0) {\n      return;\n    }\n    i = barXY.i;\n    const j = barXY.j;\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j !== null ? j : w.interact.capturedDataPointIndex;\n    if (w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w.config.tooltip.shared) {\n      x = barXY.x;\n      y = barXY.y;\n      strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[i] : w.config.stroke.width;\n      bx = x;\n    } else {\n      if (!w.globals.comboCharts && !w.config.tooltip.shared) {\n        bx = bx / 2;\n      }\n    }\n    if (isNaN(y)) {\n      y = w.globals.svgHeight - ttCtx.tooltipRect.ttHeight;\n    }\n    if (x + ttCtx.tooltipRect.ttWidth > w.layout.gridWidth) {\n      x = x - ttCtx.tooltipRect.ttWidth;\n    } else if (x < 0) {\n      x = 0;\n    }\n    if (ttCtx.w.config.tooltip.followCursor) {\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return;\n    }\n    if (ttCtx.tooltip === null) {\n      ttCtx.tooltip = w.dom.baseEl.querySelector(\".apexcharts-tooltip\");\n    }\n    if (!w.config.tooltip.shared) {\n      if (w.globals.comboBarCount > 0) {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2);\n      } else {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx);\n      }\n    }\n    if (!ttCtx.fixedTooltip && (!w.config.tooltip.shared || w.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) {\n      y = y + w.layout.translateY - ttCtx.tooltipRect.ttHeight / 2;\n      if (tooltipEl) {\n        const ttW = ttCtx.tooltipRect.ttWidth || 0;\n        const ttH = ttCtx.tooltipRect.ttHeight || 0;\n        const arrowEnabled = !!w.config.tooltip.arrow;\n        const { barAnchorXInGrid, barAnchorYInGrid, barRectInGrid } = barXY;\n        const ARROW_TIP_OVERHANG = 7;\n        const elGridRect = (_a = ttCtx.getElGrid()) == null ? void 0 : _a.getBoundingClientRect();\n        const elWrapRect = w.dom.elWrap.getBoundingClientRect();\n        const gridOffsetXInElWrap = elGridRect ? elGridRect.left - elWrapRect.left : w.layout.translateX;\n        let placement;\n        let arrowY = null;\n        let arrowX = null;\n        let finalX = x + gridOffsetXInElWrap;\n        let finalY = y;\n        if (arrowEnabled && w.globals.isBarHorizontal && barRectInGrid != null) {\n          const gridTop = w.layout.translateY;\n          const gridBottom = w.layout.translateY + w.layout.gridHeight;\n          const gridLeft = gridOffsetXInElWrap;\n          const gridRight = gridOffsetXInElWrap + w.layout.gridWidth;\n          const barCenterXInElWrap = (barRectInGrid.left + barRectInGrid.right) / 2 + gridOffsetXInElWrap;\n          const barTopInElWrap = barRectInGrid.top + w.layout.translateY;\n          const barBottomInElWrap = barRectInGrid.bottom + w.layout.translateY;\n          let proposedTop = barTopInElWrap - ttH - ARROW_TIP_OVERHANG;\n          placement = \"top\";\n          if (proposedTop < gridTop) {\n            const belowTop = barBottomInElWrap + ARROW_TIP_OVERHANG;\n            if (belowTop + ttH <= gridBottom) {\n              placement = \"bottom\";\n              proposedTop = belowTop;\n            }\n          }\n          finalY = proposedTop;\n          finalX = barCenterXInElWrap - ttW / 2;\n          if (finalX < gridLeft) finalX = gridLeft;\n          if (finalX + ttW > gridRight) finalX = gridRight - ttW;\n          arrowX = Math.max(\n            10,\n            Math.min(ttW - 10, barCenterXInElWrap - finalX)\n          );\n        } else if (arrowEnabled && barAnchorXInGrid != null && barAnchorYInGrid != null) {\n          const barCenterXInElWrap = barAnchorXInGrid + gridOffsetXInElWrap;\n          const gridCenterXInElWrap = gridOffsetXInElWrap + w.layout.gridWidth / 2;\n          const barLeftInElWrap = ((_b = barRectInGrid == null ? void 0 : barRectInGrid.left) != null ? _b : barAnchorXInGrid) + gridOffsetXInElWrap;\n          const barRightInElWrap = ((_c = barRectInGrid == null ? void 0 : barRectInGrid.right) != null ? _c : barAnchorXInGrid) + gridOffsetXInElWrap;\n          if (barCenterXInElWrap < gridCenterXInElWrap) {\n            placement = \"right\";\n            finalX = barRightInElWrap + ARROW_TIP_OVERHANG;\n          } else {\n            placement = \"left\";\n            finalX = barLeftInElWrap - ttW - ARROW_TIP_OVERHANG;\n          }\n          if (barRectInGrid) {\n            const barCenterYInElWrap = (barRectInGrid.top + barRectInGrid.bottom) / 2 + w.layout.translateY;\n            finalY = barCenterYInElWrap - ttH / 2;\n            const gridTop = w.layout.translateY;\n            const gridBottom = w.layout.translateY + w.layout.gridHeight;\n            if (finalY < gridTop) finalY = gridTop;\n            if (finalY + ttH > gridBottom) finalY = gridBottom - ttH;\n          }\n          if (ttH > 0 && barRectInGrid) {\n            const barCenterYInElWrap = (barRectInGrid.top + barRectInGrid.bottom) / 2 + w.layout.translateY;\n            arrowY = Math.max(\n              10,\n              Math.min(ttH - 10, barCenterYInElWrap - finalY)\n            );\n          }\n        }\n        ttCtx.tooltipPosition.applyTooltipPosition(tooltipEl, {\n          x: finalX,\n          y: finalY,\n          placement,\n          arrowY,\n          arrowX\n        });\n      }\n    }\n  }\n  /** @param {{e: any, opt: any}} opts */\n  getBarTooltipXY({ e, opt }) {\n    const w = this.w;\n    let j = null;\n    const ttCtx = this.ttCtx;\n    let i = 0;\n    let x = 0;\n    let y = 0;\n    let barWidth = 0;\n    let barHeight = 0;\n    let barCx = null;\n    let barCy = null;\n    let barAnchorXInGrid = null;\n    let barAnchorYInGrid = null;\n    let barRectInGrid = null;\n    const cl = e.target.classList;\n    if (cl.contains(\"apexcharts-bar-area\") || cl.contains(\"apexcharts-candlestick-area\") || cl.contains(\"apexcharts-boxPlot-area\") || cl.contains(\"apexcharts-rangebar-area\")) {\n      const bar = e.target;\n      const barRect = bar.getBoundingClientRect();\n      const seriesBound = opt.elGrid.getBoundingClientRect();\n      const bh = barRect.height;\n      barHeight = barRect.height;\n      const bw = barRect.width;\n      const cx = parseInt(bar.getAttribute(\"cx\"), 10);\n      const cy = parseInt(bar.getAttribute(\"cy\"), 10);\n      barCx = cx;\n      barCy = cy;\n      barWidth = parseFloat(bar.getAttribute(\"barWidth\"));\n      const rectLeftInGrid = barRect.left - seriesBound.left;\n      const rectTopInGrid = barRect.top - seriesBound.top;\n      const rectCenterXInGrid = rectLeftInGrid + bw / 2;\n      const rectCenterYInGrid = rectTopInGrid + bh / 2;\n      barAnchorXInGrid = rectCenterXInGrid;\n      barAnchorYInGrid = w.globals.isBarHorizontal ? rectCenterYInGrid : rectTopInGrid;\n      barRectInGrid = {\n        left: rectLeftInGrid,\n        top: rectTopInGrid,\n        right: rectLeftInGrid + bw,\n        bottom: rectTopInGrid + bh\n      };\n      const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n      j = parseInt(bar.getAttribute(\"j\"), 10);\n      i = parseInt(bar.parentNode.getAttribute(\"rel\"), 10) - 1;\n      const y1 = bar.getAttribute(\"data-range-y1\");\n      const y2 = bar.getAttribute(\"data-range-y2\");\n      if (w.globals.comboCharts) {\n        i = parseInt(bar.parentNode.getAttribute(\"data:realIndex\"), 10);\n      }\n      const handleXForColumns = (x2) => {\n        if (w.axisFlags.isXNumeric) {\n          x2 = cx - bw / 2;\n        } else {\n          if (this.isVerticalGroupedRangeBar) {\n            x2 = cx + bw / 2;\n          } else {\n            x2 = cx - ttCtx.dataPointsDividedWidth + bw / 2;\n          }\n        }\n        return x2;\n      };\n      const handleYForBars = () => {\n        return cy - ttCtx.dataPointsDividedHeight + bh / 2 - ttCtx.tooltipRect.ttHeight / 2;\n      };\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i,\n        j,\n        y1: y1 ? parseInt(y1, 10) : null,\n        y2: y2 ? parseInt(y2, 10) : null,\n        shared: ttCtx.showOnIntersect ? false : w.config.tooltip.shared,\n        e\n      });\n      if (w.config.tooltip.followCursor) {\n        if (w.globals.isBarHorizontal) {\n          x = clientX - seriesBound.left + 15;\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15;\n        }\n      } else {\n        if (w.globals.isBarHorizontal) {\n          x = cx;\n          if (ttCtx.xyRatios && x < ttCtx.xyRatios.baseLineInvertedY) {\n            x = cx - ttCtx.tooltipRect.ttWidth;\n          }\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = cy;\n        }\n      }\n    }\n    return {\n      x,\n      y,\n      barHeight,\n      barWidth,\n      i,\n      j,\n      // SVG attribute values — left for any caller that still wants them.\n      barCx,\n      barCy,\n      // Arrow anchor in grid-local coords (rect-derived; column→top,\n      // horizontal→center). Used by handleBarTooltip to place the arrow\n      // exactly on the bar's data point.\n      barAnchorXInGrid,\n      barAnchorYInGrid,\n      // Full rendered bar rect (grid-local). Used for top/bottom\n      // placement and flip-on-overflow detection.\n      barRectInGrid\n    };\n  }\n}\nclass AxesTooltip {\n  /**\n   * @param {import('./Tooltip').default} tooltipContext\n   */\n  constructor(tooltipContext) {\n    this.w = tooltipContext.w;\n    this.ttCtx = tooltipContext;\n  }\n  /**\n   * This method adds the secondary tooltip which appears below x axis\n   * @memberof Tooltip\n   **/\n  drawXaxisTooltip() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const isBottom = w.config.xaxis.position === \"bottom\";\n    ttCtx.xaxisOffY = isBottom ? w.layout.gridHeight + 1 : -w.layout.xAxisHeight - w.config.xaxis.axisTicks.height + 3;\n    const tooltipCssClass = isBottom ? \"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\" : \"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\";\n    const renderTo = w.dom.elWrap;\n    if (ttCtx.isXAxisTooltipEnabled) {\n      const xaxisTooltip = w.dom.baseEl.querySelector(\n        \".apexcharts-xaxistooltip\"\n      );\n      if (xaxisTooltip === null) {\n        ttCtx.xaxisTooltip = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.xaxisTooltip.setAttribute(\n          \"class\",\n          tooltipCssClass + \" apexcharts-theme-\" + w.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.xaxisTooltip);\n        ttCtx.xaxisTooltipText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.xaxisTooltipText.classList.add(\"apexcharts-xaxistooltip-text\");\n        ttCtx.xaxisTooltipText.style.fontFamily = w.config.xaxis.tooltip.style.fontFamily || w.config.chart.fontFamily;\n        ttCtx.xaxisTooltipText.style.fontSize = w.config.xaxis.tooltip.style.fontSize;\n        ttCtx.xaxisTooltip.appendChild(ttCtx.xaxisTooltipText);\n      }\n    }\n  }\n  /**\n   * This method adds the secondary tooltip which appears below x axis\n   * @memberof Tooltip\n   **/\n  drawYaxisTooltip() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    for (let i = 0; i < w.config.yaxis.length; i++) {\n      const isRight = w.config.yaxis[i].opposite || w.config.yaxis[i].crosshairs.opposite;\n      ttCtx.yaxisOffX = isRight ? w.layout.gridWidth + 1 : 1;\n      const tooltipCssClass = isRight ? `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i} apexcharts-yaxistooltip-right` : `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i} apexcharts-yaxistooltip-left`;\n      const renderTo = w.dom.elWrap;\n      const yaxisTooltip = w.dom.baseEl.querySelector(\n        `.apexcharts-yaxistooltip apexcharts-yaxistooltip-${i}`\n      );\n      if (yaxisTooltip === null) {\n        ttCtx.yaxisTooltip = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        ttCtx.yaxisTooltip.setAttribute(\n          \"class\",\n          tooltipCssClass + \" apexcharts-theme-\" + w.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.yaxisTooltip);\n        if (i === 0) ttCtx.yaxisTooltipText = [];\n        ttCtx.yaxisTooltipText[i] = BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n        ttCtx.yaxisTooltipText[i].classList.add(\n          \"apexcharts-yaxistooltip-text\"\n        );\n        ttCtx.yaxisTooltip.appendChild(\n          /** @type {any} */\n          ttCtx.yaxisTooltipText[i]\n        );\n      }\n    }\n  }\n  /**\n   * @memberof Tooltip\n   **/\n  setXCrosshairWidth() {\n    var _a, _b;\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    ttCtx.xcrosshairsWidth = parseInt(w.config.xaxis.crosshairs.width, 10);\n    if (!w.globals.comboCharts) {\n      if (w.config.xaxis.crosshairs.width === \"tickWidth\") {\n        const count = w.labelData.labels.length;\n        ttCtx.xcrosshairsWidth = w.layout.gridWidth / count;\n      } else if (w.config.xaxis.crosshairs.width === \"barWidth\") {\n        const bar = w.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n        if (bar !== null) {\n          const barWidth = parseFloat((_a = bar.getAttribute(\"barWidth\")) != null ? _a : \"0\");\n          ttCtx.xcrosshairsWidth = barWidth;\n        } else {\n          ttCtx.xcrosshairsWidth = 1;\n        }\n      }\n    } else {\n      const bar = w.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n      if (bar !== null && w.config.xaxis.crosshairs.width === \"barWidth\") {\n        const barWidth = parseFloat((_b = bar.getAttribute(\"barWidth\")) != null ? _b : \"0\");\n        ttCtx.xcrosshairsWidth = barWidth;\n      } else {\n        if (w.config.xaxis.crosshairs.width === \"tickWidth\") {\n          const count = w.labelData.labels.length;\n          ttCtx.xcrosshairsWidth = w.layout.gridWidth / count;\n        }\n      }\n    }\n    if (w.globals.isBarHorizontal) {\n      ttCtx.xcrosshairsWidth = 0;\n    }\n    if (xcrosshairs !== null && ttCtx.xcrosshairsWidth > 0) {\n      xcrosshairs.setAttribute(\"width\", String(ttCtx.xcrosshairsWidth));\n    }\n  }\n  handleYCrosshair() {\n    const w = this.w;\n    const ttCtx = this.ttCtx;\n    ttCtx.ycrosshairs = w.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\");\n    ttCtx.ycrosshairsHidden = w.dom.baseEl.querySelector(\n      \".apexcharts-ycrosshairs-hidden\"\n    );\n  }\n  /**\n   * @param {number} index\n   * @param {number} clientY\n   * @param {import('../../types/internal').XYRatios} xyRatios\n   */\n  drawYaxisTooltipText(index, clientY, xyRatios) {\n    const ttCtx = this.ttCtx;\n    const w = this.w;\n    const gl = w.globals;\n    const yAxisSeriesArr = gl.seriesYAxisMap[index];\n    if (ttCtx.yaxisTooltips[index] && yAxisSeriesArr.length > 0) {\n      const lbFormatter = w.formatters.yLabelFormatters[index];\n      const elGrid = ttCtx.getElGrid();\n      if (!elGrid) return;\n      const seriesBound = elGrid.getBoundingClientRect();\n      const seriesIndex = yAxisSeriesArr[0];\n      let translationsIndex = 0;\n      if (xyRatios.yRatio.length > 1) {\n        translationsIndex = seriesIndex;\n      }\n      const hoverY = (clientY - seriesBound.top) * xyRatios.yRatio[translationsIndex];\n      const height = gl.maxYArr[seriesIndex] - gl.minYArr[seriesIndex];\n      let val = gl.minYArr[seriesIndex] + (height - hoverY);\n      if (w.config.yaxis[index].reversed) {\n        val = gl.maxYArr[seriesIndex] - (height - hoverY);\n      }\n      ttCtx.tooltipPosition.moveYCrosshairs(clientY - seriesBound.top);\n      ttCtx.yaxisTooltipText[index].innerHTML = lbFormatter(val);\n      ttCtx.tooltipPosition.moveYAxisTooltip(index);\n    }\n  }\n}\nclass Tooltip {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.tConfig = w.config.tooltip;\n    this.tooltipUtil = new Utils2(this);\n    this.tooltipLabels = new Labels(this);\n    this.tooltipPosition = new Position(this);\n    this.marker = new Marker(this);\n    this.intersect = new Intersect(this);\n    this.axesTooltip = new AxesTooltip(this);\n    this.showOnIntersect = this.tConfig.intersect;\n    this.showTooltipTitle = this.tConfig.x.show;\n    this.fixedTooltip = this.tConfig.fixed.enabled;\n    this.xaxisTooltip = null;\n    this.xaxisTooltipText = null;\n    this.yaxisTooltip = null;\n    this.yaxisTooltipText = null;\n    this.yaxisTTEls = null;\n    this.xaxisOffY = 0;\n    this.yaxisOffX = 0;\n    this.xcrosshairsWidth = 0;\n    this.ycrosshairs = null;\n    this.ycrosshairsHidden = null;\n    this.tooltip = null;\n    this.e = null;\n    this.isBarShared = !w.globals.isBarHorizontal && this.tConfig.shared;\n    this.lastHoverTime = Date.now();\n    this.dimensionUpdateScheduled = false;\n    this.xyRatios = null;\n    this.isXAxisTooltipEnabled = false;\n    this.yaxisTooltips = [];\n    this.allTooltipSeriesGroups = [];\n    this.xAxisTicksPositions = null;\n    this.dataPointsDividedHeight = 0;\n    this.dataPointsDividedWidth = 0;\n    this.tooltipTitle = null;\n    this.legendLabels = null;\n    this.ttItems = null;\n    this.seriesBound = null;\n    this.seriesHoverTimeout = void 0;\n    this.clientX = 0;\n    this.clientY = 0;\n    this.barSeriesHeight = 0;\n    this.tooltipRect = { x: 0, y: 0, ttWidth: 0, ttHeight: 0 };\n  }\n  setupDimensionCache() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    this.updateDimensionCache();\n    if (typeof ResizeObserver !== \"undefined\" && !w.globals.resizeObserver) {\n      w.globals.resizeObserver = new ResizeObserver(() => {\n        if (!this.dimensionUpdateScheduled) {\n          this.dimensionUpdateScheduled = true;\n          requestAnimationFrame(() => {\n            this.updateDimensionCache();\n            this.dimensionUpdateScheduled = false;\n          });\n        }\n      });\n      w.globals.resizeObserver.observe(tooltipEl);\n    }\n  }\n  updateDimensionCache() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const rect = tooltipEl.getBoundingClientRect();\n    w.globals.dimensionCache.tooltip = /** @type {any} */\n    {\n      width: rect.width,\n      height: rect.height,\n      lastUpdate: Date.now()\n    };\n  }\n  getCachedDimensions() {\n    const w = this.w;\n    if (w.globals.dimensionCache.tooltip) {\n      const cache2 = (\n        /** @type {Record<string,any>} */\n        w.globals.dimensionCache.tooltip\n      );\n      const age = Date.now() - cache2.lastUpdate;\n      if (age < 1e3) {\n        return {\n          ttWidth: cache2.width,\n          ttHeight: cache2.height\n        };\n      }\n    }\n    this.updateDimensionCache();\n    const cache = (\n      /** @type {Record<string,any>} */\n      w.globals.dimensionCache.tooltip\n    );\n    return cache ? {\n      ttWidth: cache.width,\n      ttHeight: cache.height\n    } : { ttWidth: 0, ttHeight: 0 };\n  }\n  /**\n   * @param {{ w: import('../../types/internal').ChartStateW }} [ctx]\n   * @returns {HTMLElement | null}\n   */\n  getElTooltip(ctx) {\n    if (!ctx) ctx = this;\n    if (!ctx.w.dom.baseEl) return null;\n    return (\n      /** @type {HTMLElement | null} */\n      ctx.w.dom.baseEl.querySelector(\".apexcharts-tooltip\")\n    );\n  }\n  getElXCrosshairs() {\n    return this.w.dom.baseEl.querySelector(\".apexcharts-xcrosshairs\");\n  }\n  getElGrid() {\n    return this.w.dom.baseEl.querySelector(\".apexcharts-grid\");\n  }\n  /**\n   * @param {import('../../types/internal').XYRatios} xyRatios\n   */\n  drawTooltip(xyRatios) {\n    const w = this.w;\n    this.xyRatios = xyRatios;\n    this.isXAxisTooltipEnabled = w.config.xaxis.tooltip.enabled && w.globals.axisCharts;\n    this.yaxisTooltips = w.config.yaxis.map((y) => {\n      return y.show && y.tooltip.enabled && w.globals.axisCharts ? true : false;\n    });\n    this.allTooltipSeriesGroups = [];\n    if (!w.globals.axisCharts) {\n      this.showTooltipTitle = false;\n    }\n    const existingTooltip = this.getElTooltip();\n    if (existingTooltip == null ? void 0 : existingTooltip.parentNode) {\n      existingTooltip.parentNode.removeChild(existingTooltip);\n    }\n    this.tooltipTitle = null;\n    const tooltipEl = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/1999/xhtml\",\n      \"div\"\n    );\n    tooltipEl.classList.add(\"apexcharts-tooltip\");\n    if (w.config.tooltip.cssClass) {\n      tooltipEl.classList.add(w.config.tooltip.cssClass);\n    }\n    tooltipEl.classList.add(`apexcharts-theme-${this.tConfig.theme || \"light\"}`);\n    if (this.tConfig.fillSeriesColor) {\n      tooltipEl.classList.add(\"apexcharts-tooltip-fill-series\");\n    }\n    if (this.tConfig.style && this.tConfig.style.background) {\n      tooltipEl.style.setProperty(\n        \"--apx-tt-bg\",\n        this.tConfig.style.background\n      );\n    }\n    const isSharedMulti = this.tConfig.shared && w.config.series.length > 1 && !w.globals.isBarHorizontal;\n    const shouldDrawArrow = this.tConfig.arrow && !this.tConfig.followCursor && !this.tConfig.fixed.enabled && !isSharedMulti && !this.tConfig.fillSeriesColor && w.globals.axisCharts;\n    if (shouldDrawArrow) {\n      const arrowEl = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      arrowEl.classList.add(\"apexcharts-tooltip-arrow\");\n      tooltipEl.appendChild(arrowEl);\n    }\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.setAttribute(\"role\", \"tooltip\");\n      tooltipEl.setAttribute(\"aria-live\", \"polite\");\n      tooltipEl.setAttribute(\"aria-atomic\", \"true\");\n      tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    w.dom.elWrap.appendChild(tooltipEl);\n    if (w.globals.axisCharts) {\n      this.axesTooltip.drawXaxisTooltip();\n      this.axesTooltip.drawYaxisTooltip();\n      this.axesTooltip.setXCrosshairWidth();\n      this.axesTooltip.handleYCrosshair();\n      const xAxis = new XAxis(this.w, this.ctx, void 0);\n      this.xAxisTicksPositions = xAxis.getXAxisTicksPositions();\n    }\n    if ((w.globals.comboCharts || this.tConfig.intersect || w.config.chart.type === \"rangeBar\") && !this.tConfig.shared) {\n      this.showOnIntersect = true;\n    }\n    if (w.config.markers.size === 0 || w.globals.markers.largestSize === 0) {\n      this.marker.drawDynamicPoints();\n    }\n    if (w.globals.collapsedSeries.length === w.seriesData.series.length) return;\n    this.dataPointsDividedHeight = w.layout.gridHeight / w.globals.dataPoints;\n    this.dataPointsDividedWidth = w.layout.gridWidth / w.globals.dataPoints;\n    if (this.showTooltipTitle) {\n      this.tooltipTitle = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      this.tooltipTitle.classList.add(\"apexcharts-tooltip-title\");\n      this.tooltipTitle.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n      this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize;\n      tooltipEl.appendChild(this.tooltipTitle);\n    }\n    let ttItemsCnt = w.seriesData.series.length;\n    if ((w.globals.xyCharts || w.globals.comboCharts) && this.tConfig.shared) {\n      if (!this.showOnIntersect) {\n        ttItemsCnt = w.seriesData.series.length;\n      } else {\n        ttItemsCnt = 1;\n      }\n    }\n    this.legendLabels = w.dom.baseEl.querySelectorAll(\".apexcharts-legend-text\");\n    this.ttItems = this.createTTElements(ttItemsCnt);\n    this.addSVGEvents();\n    this.setupDimensionCache();\n  }\n  /**\n   * @param {number} ttItemsCnt\n   */\n  createTTElements(ttItemsCnt) {\n    const w = this.w;\n    const ttItems = [];\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return ttItems;\n    for (let i = 0; i < ttItemsCnt; i++) {\n      const gTxt = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      gTxt.classList.add(\n        \"apexcharts-tooltip-series-group\",\n        `apexcharts-tooltip-series-group-${i}`\n      );\n      gTxt.style.order = String(\n        w.config.tooltip.inverseOrder ? ttItemsCnt - i : i + 1\n      );\n      const point = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"span\"\n      );\n      point.classList.add(\"apexcharts-tooltip-marker\");\n      if (w.config.tooltip.fillSeriesColor) {\n        point.style.backgroundColor = w.globals.colors[i];\n      } else {\n        point.style.color = w.globals.colors[i];\n      }\n      const mShape = w.config.markers.shape;\n      let shape = mShape;\n      if (Array.isArray(mShape)) {\n        shape = mShape[i];\n      }\n      point.setAttribute(\"shape\", shape);\n      point.innerHTML = renderMarkerSVG(shape);\n      gTxt.appendChild(point);\n      const gYZ = BrowserAPIs.createElementNS(\n        \"http://www.w3.org/1999/xhtml\",\n        \"div\"\n      );\n      gYZ.classList.add(\"apexcharts-tooltip-text\");\n      gYZ.style.fontFamily = this.tConfig.style.fontFamily || w.config.chart.fontFamily;\n      gYZ.style.fontSize = this.tConfig.style.fontSize;\n      [\"y\", \"goals\", \"z\"].forEach((g) => {\n        const gValText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        gValText.classList.add(`apexcharts-tooltip-${g}-group`);\n        const txtLabel = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtLabel.classList.add(`apexcharts-tooltip-text-${g}-label`);\n        gValText.appendChild(txtLabel);\n        const txtValue = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtValue.classList.add(`apexcharts-tooltip-text-${g}-value`);\n        gValText.appendChild(txtValue);\n        gYZ.appendChild(gValText);\n      });\n      gTxt.appendChild(gYZ);\n      tooltipEl.appendChild(gTxt);\n      ttItems.push(gTxt);\n    }\n    return ttItems;\n  }\n  addSVGEvents() {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const commonBar = !!(type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\");\n    const chartWithmarkers = type === \"area\" || type === \"line\" || type === \"scatter\" || type === \"bubble\" || type === \"radar\";\n    const hoverArea = w.dom.Paper.node;\n    const elGrid = this.getElGrid();\n    if (elGrid) {\n      this.seriesBound = elGrid.getBoundingClientRect();\n    }\n    const tooltipY = [];\n    const tooltipX = [];\n    const seriesHoverParams = {\n      hoverArea,\n      elGrid,\n      tooltipEl,\n      tooltipY,\n      tooltipX,\n      ttItems: this.ttItems\n    };\n    let points;\n    if (w.globals.axisCharts) {\n      if (chartWithmarkers) {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"\n        );\n      } else if (commonBar) {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-bar-area, .apexcharts-series .apexcharts-candlestick-area, .apexcharts-series .apexcharts-boxPlot-area, .apexcharts-series .apexcharts-violin-area, .apexcharts-series .apexcharts-rangebar-area\"\n        );\n      } else if (type === \"heatmap\" || type === \"treemap\") {\n        points = w.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\"\n        );\n      }\n      if (points && points.length) {\n        for (let p = 0; p < points.length; p++) {\n          tooltipY.push(points[p].getAttribute(\"cy\"));\n          tooltipX.push(points[p].getAttribute(\"cx\"));\n        }\n      }\n    }\n    const validSharedChartTypes = w.globals.xyCharts && !this.showOnIntersect || w.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared;\n    if (validSharedChartTypes) {\n      this.addPathsEventListeners([hoverArea], seriesHoverParams);\n    } else if (commonBar && !w.globals.comboCharts || chartWithmarkers && this.showOnIntersect) {\n      this.addDatapointEventsListeners(seriesHoverParams);\n    } else if (!w.globals.axisCharts || type === \"heatmap\" || type === \"treemap\") {\n      const seriesAll = w.dom.baseEl.querySelectorAll(\".apexcharts-series\");\n      this.addPathsEventListeners(seriesAll, seriesHoverParams);\n    }\n    if (this.showOnIntersect) {\n      const lineAreaPoints = w.dom.baseEl.querySelectorAll(\n        \".apexcharts-line-series .apexcharts-marker, .apexcharts-area-series .apexcharts-marker\"\n      );\n      if (lineAreaPoints.length > 0) {\n        this.addPathsEventListeners(lineAreaPoints, seriesHoverParams);\n      }\n      if (this.tooltipUtil.hasBars() && !this.tConfig.shared) {\n        this.addDatapointEventsListeners(seriesHoverParams);\n      }\n    }\n  }\n  drawFixedTooltipRect() {\n    const w = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return { x: 0, y: 0, ttWidth: 0, ttHeight: 0 };\n    const tooltipRect = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipRect.width + 10;\n    const ttHeight = tooltipRect.height + 10;\n    let x = this.tConfig.fixed.offsetX;\n    let y = this.tConfig.fixed.offsetY;\n    const fixed = this.tConfig.fixed.position.toLowerCase();\n    if (fixed.indexOf(\"right\") > -1) {\n      x = x + w.globals.svgWidth - ttWidth + 10;\n    }\n    if (fixed.indexOf(\"bottom\") > -1) {\n      y = y + w.globals.svgHeight - ttHeight - 10;\n    }\n    this.tooltipPosition.applyTooltipPosition(tooltipEl, { x, y });\n    return {\n      x,\n      y,\n      ttWidth,\n      ttHeight\n    };\n  }\n  /**\n   * @param {Record<string, any>} seriesHoverParams\n   */\n  addDatapointEventsListeners(seriesHoverParams) {\n    const w = this.w;\n    const points = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-series-markers .apexcharts-marker, .apexcharts-bar-area, .apexcharts-candlestick-area, .apexcharts-boxPlot-area, .apexcharts-rangebar-area\"\n    );\n    this.addPathsEventListeners(points, seriesHoverParams);\n  }\n  /**\n   * @param {any} paths\n   * @param {Record<string, any>} opts\n   */\n  addPathsEventListeners(paths, opts) {\n    const self = this;\n    for (let p = 0; p < paths.length; p++) {\n      const extendedOpts = {\n        paths: paths[p],\n        tooltipEl: opts.tooltipEl,\n        tooltipY: opts.tooltipY,\n        tooltipX: opts.tooltipX,\n        elGrid: opts.elGrid,\n        hoverArea: opts.hoverArea,\n        ttItems: opts.ttItems\n      };\n      const events = [\n        \"mousemove\",\n        \"mouseup\",\n        \"touchmove\",\n        \"mouseout\",\n        \"touchend\"\n      ];\n      events.map((ev) => {\n        return paths[p].addEventListener(\n          ev,\n          self.onSeriesHover.bind(self, extendedOpts),\n          { capture: false, passive: true }\n        );\n      });\n    }\n  }\n  /*\n   ** Check to see if the tooltips should be updated based on a mouse / touch event\n   * @param {Record<string, any>} opt\n   * @param {Event} e\n   */\n  /** @param {Record<string, any>} opt @param {any} e */\n  onSeriesHover(opt, e) {\n    const targetDelay = 20;\n    const timeSinceLastUpdate = Date.now() - this.lastHoverTime;\n    if (timeSinceLastUpdate >= targetDelay) {\n      this.seriesHover(opt, e);\n    } else {\n      clearTimeout(this.seriesHoverTimeout);\n      this.seriesHoverTimeout = setTimeout(() => {\n        this.seriesHover(opt, e);\n      }, targetDelay - timeSinceLastUpdate);\n    }\n  }\n  /*\n   ** The actual series hover function\n   * @param {Record<string, any>} opt\n   * @param {Event} e\n   */\n  /** @param {Record<string, any>} opt @param {any} e */\n  seriesHover(opt, e) {\n    this.lastHoverTime = Date.now();\n    let chartGroups = [];\n    const w = this.w;\n    if (w.config.chart.group) {\n      chartGroups = this.ctx.getGroupedCharts();\n    }\n    if (w.globals.axisCharts && (w.globals.minX === -Infinity && w.globals.maxX === Infinity || w.globals.dataPoints === 0)) {\n      return;\n    }\n    if (chartGroups.length) {\n      chartGroups.forEach((ch) => {\n        const tooltipEl = this.getElTooltip(ch);\n        const newOpts = {\n          paths: opt.paths,\n          tooltipEl,\n          tooltipY: opt.tooltipY,\n          tooltipX: opt.tooltipX,\n          elGrid: opt.elGrid,\n          hoverArea: opt.hoverArea,\n          ttItems: ch.w.globals.tooltip.ttItems\n        };\n        if (ch.w.globals.minX === this.w.globals.minX && ch.w.globals.maxX === this.w.globals.maxX) {\n          ch.w.globals.tooltip.seriesHoverByContext({\n            chartCtx: ch,\n            ttCtx: ch.w.globals.tooltip,\n            opt: newOpts,\n            e\n          });\n        }\n      });\n    } else {\n      this.seriesHoverByContext({\n        chartCtx: this.ctx,\n        ttCtx: this.w.globals.tooltip,\n        opt,\n        e\n      });\n    }\n  }\n  /** @param {{chartCtx: any, ttCtx: any, opt: any, e: any}} opts */\n  seriesHoverByContext({ chartCtx, ttCtx, opt, e }) {\n    const w = chartCtx.w;\n    const tooltipEl = this.getElTooltip(chartCtx);\n    if (!tooltipEl) return;\n    const cachedDims = ttCtx.getCachedDimensions();\n    ttCtx.tooltipRect = {\n      x: 0,\n      y: 0,\n      ttWidth: cachedDims.ttWidth,\n      ttHeight: cachedDims.ttHeight\n    };\n    ttCtx.e = e;\n    if (ttCtx.tooltipUtil.hasBars() && !w.globals.comboCharts && !ttCtx.isBarShared) {\n      if (this.tConfig.onDatasetHover.highlightDataSeries) {\n        const series = new Series(chartCtx.w);\n        series.toggleSeriesOnHover(e, e.target.parentNode);\n      }\n    }\n    if (w.globals.axisCharts) {\n      ttCtx.axisChartsTooltips({\n        e,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    } else {\n      ttCtx.nonAxisChartsTooltips({\n        e,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    }\n    if (ttCtx.fixedTooltip) {\n      ttCtx.drawFixedTooltipRect();\n    }\n  }\n  // tooltip handling for line/area/bar/columns/scatter\n  /** @param {{e: any, opt: any}} opts */\n  axisChartsTooltips({ e, opt }) {\n    var _a;\n    const w = this.w;\n    let x, y;\n    const seriesBound = opt.elGrid.getBoundingClientRect();\n    const clientX = e.type === \"touchmove\" ? e.touches[0].clientX : e.clientX;\n    const clientY = e.type === \"touchmove\" ? e.touches[0].clientY : e.clientY;\n    this.clientY = clientY;\n    this.clientX = clientX;\n    w.interact.capturedSeriesIndex = -1;\n    w.interact.capturedDataPointIndex = -1;\n    if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (Array.isArray(this.tConfig.enabledOnSeries) && !w.config.tooltip.shared) {\n      const index = parseInt(opt.paths.getAttribute(\"index\"), 10);\n      if (this.tConfig.enabledOnSeries.indexOf(index) < 0) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const xcrosshairs = this.getElXCrosshairs();\n    let syncedCharts = [];\n    if (w.config.chart.group) {\n      syncedCharts = this.ctx.getSyncedCharts();\n    }\n    const isStickyTooltip = w.globals.xyCharts || w.config.chart.type === \"bar\" && !w.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w.globals.comboCharts && this.tooltipUtil.hasBars();\n    if (e.type === \"mousemove\" || e.type === \"touchmove\" || e.type === \"mouseup\") {\n      if (w.globals.collapsedSeries.length + w.globals.ancillaryCollapsedSeries.length === w.seriesData.series.length) {\n        return;\n      }\n      if (xcrosshairs !== null) {\n        xcrosshairs.classList.add(\"apexcharts-active\");\n      }\n      const hasYAxisTooltip = (_a = this.yaxisTooltips) == null ? void 0 : _a.filter(\n        (b) => {\n          return b === true;\n        }\n      );\n      const _yc = (\n        /** @type {any} */\n        this.ycrosshairs\n      );\n      if (_yc !== null && (hasYAxisTooltip == null ? void 0 : hasYAxisTooltip.length)) {\n        _yc.classList.add(\"apexcharts-active\");\n      }\n      if (isStickyTooltip && !this.showOnIntersect || syncedCharts.length > 1) {\n        this.handleStickyTooltip(e, clientX, clientY, opt);\n      } else {\n        if (w.config.chart.type === \"heatmap\" || w.config.chart.type === \"treemap\") {\n          const markerXY = this.intersect.handleHeatTreeTooltip({\n            e,\n            opt,\n            x,\n            y,\n            type: w.config.chart.type\n          });\n          x = markerXY.x;\n          y = markerXY.y;\n          tooltipEl.style.left = x + \"px\";\n          tooltipEl.style.top = y + \"px\";\n        } else {\n          if (this.tooltipUtil.hasBars()) {\n            this.intersect.handleBarTooltip({\n              e,\n              opt\n            });\n          }\n          if (this.tooltipUtil.hasMarkers(0)) {\n            this.intersect.handleMarkerTooltip({\n              e,\n              opt,\n              x,\n              y\n            });\n          }\n        }\n      }\n      if (this.yaxisTooltips && this.yaxisTooltips.length) {\n        for (let yt = 0; yt < w.config.yaxis.length; yt++) {\n          this.axesTooltip.drawYaxisTooltipText(\n            yt,\n            clientY,\n            /** @type {import('../../types/internal').XYRatios} */\n            this.xyRatios\n          );\n        }\n      }\n      w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      opt.tooltipEl.classList.add(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        opt.tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n    } else if (e.type === \"mouseout\" || e.type === \"touchend\") {\n      this.handleMouseOut(opt);\n    }\n  }\n  // tooltip handling for pie/donuts\n  /** @param {{e: any, opt: any, tooltipRect: any}} opts */\n  nonAxisChartsTooltips({ e, opt, tooltipRect }) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const rel = opt.paths.getAttribute(\"rel\");\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const seriesBound = w.dom.elWrap.getBoundingClientRect();\n    if (e.type === \"mousemove\" || e.type === \"touchmove\") {\n      w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      tooltipEl.classList.add(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n      this.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i: parseInt(rel, 10) - 1,\n        shared: false\n      });\n      let x, y;\n      const arcPath = opt.paths.querySelector(\"path[data\\\\:cx]\") || opt.paths;\n      if (w.config.tooltip.intersect && arcPath.hasAttribute(\"data:cx\") && arcPath.hasAttribute(\"data:cy\")) {\n        const svgBound = w.dom.Paper.node.getBoundingClientRect();\n        x = svgBound.left - seriesBound.left + parseFloat(arcPath.getAttribute(\"data:cx\")) - tooltipRect.ttWidth / 2;\n        y = svgBound.top - seriesBound.top + parseFloat(arcPath.getAttribute(\"data:cy\")) - tooltipRect.ttHeight - 10;\n      } else {\n        x = ((_a = w.interact.clientX) != null ? _a : 0) - seriesBound.left - tooltipRect.ttWidth / 2;\n        y = ((_b = w.interact.clientY) != null ? _b : 0) - seriesBound.top - tooltipRect.ttHeight - 10;\n      }\n      tooltipEl.style.left = x + \"px\";\n      tooltipEl.style.top = y + \"px\";\n      if (w.config.legend.tooltipHoverFormatter) {\n        const legendFormatter = w.config.legend.tooltipHoverFormatter;\n        const i = rel - 1;\n        const legendEl = (\n          /** @type {HTMLElement | undefined} */\n          (_c = this.legendLabels) == null ? void 0 : _c[i]\n        );\n        if (!legendEl) return;\n        const legendName = legendEl.getAttribute(\"data:default-text\");\n        const text = legendFormatter(legendName, {\n          seriesIndex: i,\n          dataPointIndex: i,\n          w\n        });\n        legendEl.innerHTML = text;\n      }\n    } else if (e.type === \"mouseout\" || e.type === \"touchend\") {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n      if (w.config.legend.tooltipHoverFormatter) {\n        (_d = this.legendLabels) == null ? void 0 : _d.forEach((l) => {\n          const defaultText = l.getAttribute(\"data:default-text\");\n          l.innerHTML = decodeURIComponent(\n            defaultText != null ? defaultText : \"\"\n          );\n        });\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} clientX\n   * @param {number} clientY\n   * @param {Record<string, any>} opt\n   */\n  handleStickyTooltip(e, clientX, clientY, opt) {\n    const w = this.w;\n    const capj = this.tooltipUtil.getNearestValues({\n      context: this,\n      hoverArea: opt.hoverArea,\n      elGrid: opt.elGrid,\n      clientX,\n      clientY\n    });\n    const j = capj.j;\n    let capturedSeries = capj.capturedSeries;\n    if (capturedSeries !== null && w.globals.collapsedSeriesIndices.includes(capturedSeries != null ? capturedSeries : -1))\n      capturedSeries = null;\n    const bounds = opt.elGrid.getBoundingClientRect();\n    if (capj.hoverX < 0 || capj.hoverX > bounds.width) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (capturedSeries !== null) {\n      this.handleStickyCapturedSeries(e, capturedSeries != null ? capturedSeries : -1, opt, j != null ? j : 0);\n    } else {\n      if (this.tooltipUtil.isXoverlap(j != null ? j : 0) || w.globals.isBarHorizontal) {\n        const firstVisibleSeries = w.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s, i) => !w.globals.collapsedSeriesIndices.includes(i)\n        );\n        this.create(e, this, firstVisibleSeries, j != null ? j : 0, opt.ttItems);\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} capturedSeries\n   * @param {Record<string, any>} opt\n   * @param {number} j\n   */\n  handleStickyCapturedSeries(e, capturedSeries, opt, j) {\n    const w = this.w;\n    if (!this.tConfig.shared) {\n      const ignoreNull = w.seriesData.series[capturedSeries][j] === null;\n      if (ignoreNull) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    if (typeof w.seriesData.series[capturedSeries][j] !== \"undefined\") {\n      if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) {\n        this.create(e, this, capturedSeries, j, opt.ttItems);\n      } else {\n        this.create(e, this, capturedSeries, j, opt.ttItems, false);\n      }\n    } else {\n      if (this.tooltipUtil.isXoverlap(j)) {\n        const firstVisibleSeries = w.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s, i) => !w.globals.collapsedSeriesIndices.includes(i)\n        );\n        this.create(e, this, firstVisibleSeries, j, opt.ttItems);\n      }\n    }\n  }\n  deactivateHoverFilter() {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const allPaths = w.dom.Paper.find(`.apexcharts-bar-area`);\n    for (let b = 0; b < allPaths.length; b++) {\n      graphics.pathMouseLeave(\n        /** @type {any} */\n        allPaths[b],\n        /** @type {any} */\n        void 0\n      );\n    }\n  }\n  /**\n   * @param {Record<string, any>} opt\n   */\n  handleMouseOut(opt) {\n    var _a, _b;\n    const w = this.w;\n    const xcrosshairs = this.getElXCrosshairs();\n    w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    opt.tooltipEl.classList.remove(\"apexcharts-active\");\n    delete opt.tooltipEl.dataset.positioned;\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      opt.tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    this.deactivateHoverFilter();\n    if (w.config.chart.type !== \"bubble\") {\n      this.marker.resetPointsSize();\n    }\n    if (xcrosshairs !== null) {\n      xcrosshairs.classList.remove(\"apexcharts-active\");\n    }\n    const _yc2 = (\n      /** @type {any} */\n      this.ycrosshairs\n    );\n    if (_yc2 !== null) {\n      _yc2.classList.remove(\"apexcharts-active\");\n    }\n    if (this.isXAxisTooltipEnabled) {\n      (_a = this.xaxisTooltip) == null ? void 0 : _a.classList.remove(\"apexcharts-active\");\n    }\n    if (this.yaxisTooltips && this.yaxisTooltips.length) {\n      if (this.yaxisTTEls === null) {\n        this.yaxisTTEls = /** @type {HTMLElement[]} */\n        [\n          ...w.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n        ];\n      }\n      for (let i = 0; i < this.yaxisTTEls.length; i++) {\n        this.yaxisTTEls[i].classList.remove(\"apexcharts-active\");\n      }\n    }\n    if (w.config.legend.tooltipHoverFormatter) {\n      (_b = this.legendLabels) == null ? void 0 : _b.forEach((l) => {\n        const defaultText = l.getAttribute(\"data:default-text\");\n        l.innerHTML = decodeURIComponent(\n          defaultText != null ? defaultText : \"\"\n        );\n      });\n    }\n  }\n  /**\n   * @param {Event} e\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  markerClick(e, seriesIndex, dataPointIndex) {\n    const w = this.w;\n    if (typeof w.config.chart.events.markerClick === \"function\") {\n      w.config.chart.events.markerClick(e, this.ctx, {\n        seriesIndex,\n        dataPointIndex,\n        w\n      });\n    }\n    this.ctx.events.fireEvent(\"markerClick\", [\n      e,\n      this.ctx,\n      { seriesIndex, dataPointIndex, w }\n    ]);\n  }\n  /**\n   * @param {Event} e\n   * @param {any} context\n   * @param {number} capturedSeries\n   * @param {number} j\n   * @param {any} ttItems\n   * @param {boolean | null} shared\n   */\n  create(e, context, capturedSeries, j, ttItems, shared = null) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s;\n    const w = this.w;\n    const ttCtx = context;\n    if (e.type === \"mouseup\") {\n      this.markerClick(e, capturedSeries, j);\n    }\n    if (shared === null) shared = this.tConfig.shared;\n    const hasMarkers = this.tooltipUtil.hasMarkers(capturedSeries);\n    const bars = this.tooltipUtil.getElBars();\n    const handlePoints = () => {\n      if (w.globals.markers.largestSize > 0) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n      }\n    };\n    if (w.config.legend.tooltipHoverFormatter) {\n      const legendFormatter = w.config.legend.tooltipHoverFormatter;\n      const els = (\n        /** @type {HTMLElement[]} */\n        Array.from((_a = this.legendLabels) != null ? _a : [])\n      );\n      els.forEach((l) => {\n        const legendName = l.getAttribute(\"data:default-text\");\n        l.innerHTML = decodeURIComponent(legendName != null ? legendName : \"\");\n      });\n      for (let i = 0; i < els.length; i++) {\n        const l = els[i];\n        const lsIndex = parseInt((_b = l.getAttribute(\"i\")) != null ? _b : \"\", 10);\n        const legendName = decodeURIComponent(\n          (_c = l.getAttribute(\"data:default-text\")) != null ? _c : \"\"\n        );\n        const text = legendFormatter(legendName, {\n          seriesIndex: shared ? lsIndex : capturedSeries,\n          dataPointIndex: j,\n          w\n        });\n        if (!shared) {\n          l.innerHTML = lsIndex === capturedSeries ? text : legendName;\n          if (capturedSeries === lsIndex) {\n            break;\n          }\n        } else {\n          l.innerHTML = w.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName;\n        }\n      }\n    }\n    const _rangeData = (\n      /** @type {any} */\n      w.rangeData\n    );\n    const commonSeriesTextsParams = __spreadValues(__spreadValues({\n      ttItems,\n      i: capturedSeries,\n      j\n    }, ((_g = (_f = (_e = (_d = _rangeData.seriesRange) == null ? void 0 : _d[capturedSeries]) == null ? void 0 : _e[j]) == null ? void 0 : _f.y[0]) == null ? void 0 : _g.y1) !== void 0 && {\n      y1: (_k = (_j = (_i = (_h = _rangeData.seriesRange) == null ? void 0 : _h[capturedSeries]) == null ? void 0 : _i[j]) == null ? void 0 : _j.y[0]) == null ? void 0 : _k.y1\n    }), ((_o = (_n = (_m = (_l = _rangeData.seriesRange) == null ? void 0 : _l[capturedSeries]) == null ? void 0 : _m[j]) == null ? void 0 : _n.y[0]) == null ? void 0 : _o.y2) !== void 0 && {\n      y2: (_s = (_r = (_q = (_p = _rangeData.seriesRange) == null ? void 0 : _p[capturedSeries]) == null ? void 0 : _q[j]) == null ? void 0 : _r.y[0]) == null ? void 0 : _s.y2\n    });\n    if (shared) {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues({}, commonSeriesTextsParams), {\n        shared: this.showOnIntersect ? false : this.tConfig.shared\n      }));\n      if (hasMarkers) {\n        handlePoints();\n      } else if (this.tooltipUtil.hasBars()) {\n        this.barSeriesHeight = this.tooltipUtil.getBarsHeight(\n          /** @type {any[]} */\n          [...bars]\n        );\n        if (this.barSeriesHeight > 0) {\n          const graphics = new Graphics(this.w, this.ctx);\n          const paths = w.dom.Paper.find(`.apexcharts-bar-area[j='${j}']`);\n          this.deactivateHoverFilter();\n          const points = ttCtx.tooltipUtil.getAllMarkers(true);\n          if (points.length && !this.barSeriesHeight) {\n            handlePoints();\n          }\n          ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n          for (let b = 0; b < paths.length; b++) {\n            graphics.pathMouseEnter(\n              /** @type {any} */\n              paths[b],\n              /** @type {any} */\n              void 0\n            );\n          }\n        }\n      }\n    } else {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadValues({\n        shared: false\n      }, commonSeriesTextsParams));\n      if (this.tooltipUtil.hasBars()) {\n        ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n      }\n      if (hasMarkers) {\n        ttCtx.tooltipPosition.moveMarkers(capturedSeries, j);\n      }\n    }\n  }\n}\nclass SVGElement {\n  /**\n   * @param {any} node\n   */\n  constructor(node) {\n    this.node = node;\n    if (node) {\n      node.instance = this;\n    }\n    this._listeners = [];\n    this._filter = null;\n  }\n  // ---- Attribute methods ----\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   */\n  attr(a, v) {\n    if (typeof a === \"string\" && v === void 0) {\n      return this.node.getAttribute(a);\n    }\n    const attrs = typeof a === \"string\" ? { [a]: v } : a;\n    for (const key in attrs) {\n      let val = attrs[key];\n      if (val === null) {\n        this.node.removeAttribute(key);\n      } else if (val !== void 0) {\n        if (typeof val === \"number\" && isNaN(val)) val = 0;\n        this.node.setAttribute(key, val);\n      }\n    }\n    if (this.node.nodeName === \"text\" && attrs.x != null) {\n      const tspans = this.node.querySelectorAll(\"tspan[data-newline]\");\n      for (let i = 0; i < tspans.length; i++) {\n        tspans[i].setAttribute(\"x\", attrs.x);\n      }\n    }\n    return this;\n  }\n  /**\n   * @param {Record<string, string>} styles\n   */\n  css(styles) {\n    for (const k in styles) {\n      this.node.style[k] = styles[k];\n    }\n    return this;\n  }\n  /**\n   * @param {any} v\n   */\n  fill(v) {\n    if (typeof v === \"object\") {\n      return this.attr(v);\n    }\n    return this.attr(\"fill\", v);\n  }\n  /**\n   * @param {any} v\n   */\n  stroke(v) {\n    if (typeof v === \"object\") {\n      if (v.color !== void 0) this.attr(\"stroke\", v.color);\n      if (v.width !== void 0) this.attr(\"stroke-width\", v.width);\n      if (v.dasharray !== void 0) this.attr(\"stroke-dasharray\", v.dasharray);\n      if (v.linecap !== void 0) this.attr(\"stroke-linecap\", v.linecap);\n      if (v.opacity !== void 0) this.attr(\"stroke-opacity\", v.opacity);\n      return this;\n    }\n    return this.attr(\"stroke\", v);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   */\n  size(w, h) {\n    return this.attr({ width: w, height: h });\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  move(x, y) {\n    return this.attr({ x, y });\n  }\n  /**\n   * @param {number} cx\n   * @param {number} cy\n   */\n  center(cx, cy) {\n    if (this.node.nodeName === \"g\") {\n      const box = this.bbox();\n      const dx = cx - (box.x + box.width / 2);\n      const dy = cy - (box.y + box.height / 2);\n      return this.attr(\"transform\", `translate(${dx}, ${dy})`);\n    }\n    return this.attr({ cx, cy });\n  }\n  // ---- Tree operations ----\n  /**\n   * @param {any} child\n   */\n  add(child) {\n    this.node.appendChild(child.node || child);\n    return this;\n  }\n  /**\n   * @param {any} parent\n   */\n  addTo(parent) {\n    const p = parent.node || parent;\n    p.appendChild(this.node);\n    return this;\n  }\n  remove() {\n    if (this.node.parentNode) {\n      this.node.parentNode.removeChild(this.node);\n    }\n    return this;\n  }\n  clear() {\n    while (this.node.firstChild) {\n      this.node.removeChild(this.node.firstChild);\n    }\n    return this;\n  }\n  // ---- Query ----\n  /**\n   * @param {string} selector\n   */\n  find(selector) {\n    return Array.from(this.node.querySelectorAll(selector)).map(\n      (n) => n.instance || new SVGElement(n)\n    );\n  }\n  /**\n   * @param {string} selector\n   */\n  findOne(selector) {\n    const n = this.node.querySelector(selector);\n    return n ? n.instance || new SVGElement(n) : null;\n  }\n  // ---- Events ----\n  /**\n   * @param {Event} event\n   * @param {Function} handler\n   */\n  on(event, handler) {\n    const eventType = (\n      /** @type {string} */\n      /** @type {any} */\n      event.split(\n        \".\"\n      )[0]\n    );\n    this._listeners.push({ event, eventType, handler });\n    this.node.addEventListener(eventType, handler);\n    return this;\n  }\n  /**\n   * @param {Event} event\n   * @param {Function} handler\n   */\n  off(event, handler) {\n    if (!event && !handler) {\n      this._listeners.forEach((l) => {\n        this.node.removeEventListener(l.eventType, l.handler);\n      });\n      this._listeners = [];\n    } else if (event && !handler) {\n      const eventType = (\n        /** @type {string} */\n        /** @type {any} */\n        event.split(\".\")[0]\n      );\n      this._listeners = this._listeners.filter((l) => {\n        if (l.eventType === eventType) {\n          this.node.removeEventListener(l.eventType, l.handler);\n          return false;\n        }\n        return true;\n      });\n    } else {\n      const eventType = (\n        /** @type {string} */\n        /** @type {any} */\n        event.split(\".\")[0]\n      );\n      this._listeners = this._listeners.filter((l) => {\n        if (l.eventType === eventType && l.handler === handler) {\n          this.node.removeEventListener(l.eventType, l.handler);\n          return false;\n        }\n        return true;\n      });\n    }\n    return this;\n  }\n  // ---- Iteration ----\n  /**\n   * @param {Function} fn\n   * @param {boolean} deep\n   */\n  each(fn, deep) {\n    const children = Array.from(this.node.children);\n    children.forEach((child) => {\n      const inst = child.instance || new SVGElement(child);\n      fn.call(inst);\n      if (deep) inst.each(fn, deep);\n    });\n    return this;\n  }\n  // ---- CSS classes ----\n  /**\n   * @param {string} cls\n   */\n  removeClass(cls) {\n    if (cls === \"*\") {\n      this.node.removeAttribute(\"class\");\n    } else {\n      this.node.classList.remove(cls);\n    }\n    return this;\n  }\n  // ---- Children ----\n  children() {\n    return Array.from(this.node.childNodes).filter((n) => n.nodeType === 1).map((n) => n.instance || new SVGElement(n));\n  }\n  // ---- Visibility ----\n  hide() {\n    this.node.style.display = \"none\";\n    return this;\n  }\n  show() {\n    this.node.style.display = \"\";\n    return this;\n  }\n  // ---- Measurement ----\n  bbox() {\n    if (typeof this.node.getBBox === \"function\") {\n      try {\n        return this.node.getBBox();\n      } catch (e) {\n      }\n    }\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  // ---- Text-specific ----\n  /**\n   * @param {string} text\n   */\n  tspan(text) {\n    const tspan = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"tspan\"\n    );\n    tspan.textContent = text;\n    this.node.appendChild(tspan);\n    return new SVGElement(tspan);\n  }\n  // ---- Path-specific ----\n  /**\n   * @param {string} d\n   */\n  plot(d) {\n    if (typeof d === \"string\") {\n      this.attr(\"d\", d);\n    }\n    return this;\n  }\n  // ---- Animation (overridden by SVGAnimation mixin) ----\n  animate() {\n    throw new Error(\"Animation module not loaded\");\n  }\n  // ---- Filter methods (set up by SVGFilter module) ----\n  filterWith() {\n    throw new Error(\"Filter module not loaded\");\n  }\n  /**\n   * @param {boolean} all\n   */\n  unfilter(all) {\n    if (this._filter) {\n      this.node.removeAttribute(\"filter\");\n      if (all && this._filter.node && this._filter.node.parentNode) {\n        this._filter.node.parentNode.removeChild(this._filter.node);\n      }\n      this._filter = null;\n    }\n    return this;\n  }\n  filterer() {\n    return this._filter;\n  }\n}\nlet gradientCounter = 0;\nclass SVGGradient extends SVGElement {\n  /**\n   * @param {any} container\n   * @param {string} type\n   * @param {object} builder\n   */\n  constructor(container, type, builder) {\n    const tag = type === \"radial\" ? \"radialGradient\" : \"linearGradient\";\n    const node = BrowserAPIs.createElementNS(SVGNS, tag);\n    super(node);\n    this._id = \"SvgjsGradient\" + ++gradientCounter;\n    this.attr(\"id\", this._id);\n    if (typeof builder === \"function\") {\n      builder(new StopBuilder(this));\n    }\n    let defs = container.node.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(SVGNS, \"defs\");\n      container.node.appendChild(defs);\n    }\n    defs.appendChild(this.node);\n  }\n  /**\n   * @param {any} offset\n   * @param {string} color\n   * @param {number} opacity\n   */\n  stop(offset, color, opacity) {\n    const s = BrowserAPIs.createElementNS(SVGNS, \"stop\");\n    s.setAttribute(\"offset\", offset);\n    s.setAttribute(\"stop-color\", color);\n    if (opacity !== void 0) s.setAttribute(\"stop-opacity\", String(opacity));\n    this.node.appendChild(s);\n    return this;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  from(x, y) {\n    return this.attr({ x1: x, y1: y });\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   */\n  to(x, y) {\n    return this.attr({ x2: x, y2: y });\n  }\n  url() {\n    return \"url(#\" + this._id + \")\";\n  }\n  toString() {\n    return this.url();\n  }\n  valueOf() {\n    return this.url();\n  }\n  fill() {\n    return this.url();\n  }\n}\nclass StopBuilder {\n  /**\n   * @param {any} gradient\n   */\n  constructor(gradient) {\n    this.gradient = gradient;\n  }\n  /**\n   * @param {any} offset\n   * @param {string} color\n   * @param {number} opacity\n   */\n  stop(offset, color, opacity) {\n    this.gradient.stop(offset, color, opacity);\n    return this;\n  }\n}\nlet patternCounter = 0;\nclass SVGPattern extends SVGElement {\n  /**\n   * @param {any} container\n   * @param {number} w\n   * @param {number} h\n   * @param {Function} builder\n   */\n  constructor(container, w, h, builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"pattern\");\n    super(node);\n    this._id = \"SvgjsPattern\" + ++patternCounter;\n    this.attr({\n      id: this._id,\n      width: w,\n      height: h,\n      patternUnits: \"userSpaceOnUse\"\n    });\n    if (typeof builder === \"function\") {\n      const patternContainer = new SVGContainer(this.node);\n      builder(patternContainer);\n    }\n    let defs = container.node.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(SVGNS, \"defs\");\n      container.node.appendChild(defs);\n    }\n    defs.appendChild(this.node);\n  }\n  url() {\n    return \"url(#\" + this._id + \")\";\n  }\n  toString() {\n    return this.url();\n  }\n  valueOf() {\n    return this.url();\n  }\n  fill() {\n    return this.url();\n  }\n}\nclass SVGContainer extends SVGElement {\n  /**\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  line(x1, y1, x2, y2) {\n    const el = this._make(\"line\");\n    if (x1 !== void 0) {\n      el.attr({ x1, y1, x2, y2 });\n    }\n    return el;\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} h\n   */\n  rect(w, h) {\n    const el = this._make(\"rect\");\n    if (w !== void 0) {\n      el.attr({ width: w, height: h });\n    }\n    return el;\n  }\n  /**\n   * @param {number} d\n   */\n  circle(d) {\n    const el = this._make(\"circle\");\n    if (d !== void 0) {\n      el.attr({ r: d / 2, cx: d / 2, cy: d / 2 });\n    }\n    return el;\n  }\n  /**\n   * @param {string} d\n   */\n  path(d) {\n    const el = this._make(\"path\");\n    if (d) el.attr(\"d\", d);\n    return el;\n  }\n  /**\n   * @param {string} pts\n   */\n  polygon(pts) {\n    const el = this._make(\"polygon\");\n    if (pts) el.attr(\"points\", pts);\n    return el;\n  }\n  group() {\n    return this._makeContainer(\"g\");\n  }\n  defs() {\n    return this._makeContainer(\"defs\");\n  }\n  /**\n   * @param {string} textContent\n   */\n  plain(textContent) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"text\");\n    node.textContent = textContent;\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    return el;\n  }\n  /**\n   * @param {object} builder\n   */\n  text(builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"text\");\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    if (typeof builder === \"function\") {\n      builder(new TspanBuilder(node));\n    }\n    return el;\n  }\n  /**\n   * @param {string} url\n   * @param {Function} callback\n   */\n  image(url, callback) {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"image\");\n    node.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", url);\n    const el = new SVGElement(node);\n    this.node.appendChild(node);\n    if (typeof callback === \"function\") {\n      const img = new Image();\n      img.onload = function() {\n        el.size(img.width, img.height);\n        callback.call(el, { width: img.width, height: img.height });\n      };\n      img.src = url;\n    }\n    return el;\n  }\n  /**\n   * @param {string} type\n   * @param {object} builder\n   */\n  gradient(type, builder) {\n    return new SVGGradient(this, type, builder);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   * @param {Function} builder\n   */\n  pattern(w, h, builder) {\n    return new SVGPattern(this, w, h, builder);\n  }\n  /**\n   * @param {string} tag\n   */\n  _make(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS, tag);\n    this.node.appendChild(node);\n    return new SVGElement(node);\n  }\n  /**\n   * @param {string} tag\n   */\n  _makeContainer(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS, tag);\n    this.node.appendChild(node);\n    return new SVGContainer(node);\n  }\n}\nclass TspanBuilder {\n  /**\n   * @param {any} textNode\n   */\n  constructor(textNode) {\n    this.textNode = textNode;\n  }\n  /**\n   * @param {string} text\n   */\n  tspan(text) {\n    const tspan = BrowserAPIs.createElementNS(SVGNS, \"tspan\");\n    tspan.textContent = text;\n    this.textNode.appendChild(tspan);\n    return new TspanWrapper(tspan, this.textNode);\n  }\n}\nclass TspanWrapper {\n  /**\n   * @param {any} node\n   * @param {any} textNode\n   */\n  constructor(node, textNode) {\n    this.node = node;\n    this.textNode = textNode;\n  }\n  newLine() {\n    this.node.setAttribute(\"dy\", \"1.1em\");\n    this.node.dataset.newline = \"1\";\n    return this;\n  }\n}\nlet filterCounter = 0;\nclass SVGFilter extends SVGElement {\n  constructor() {\n    const node = BrowserAPIs.createElementNS(SVGNS, \"filter\");\n    super(node);\n    this._id = \"SvgjsFilter\" + ++filterCounter;\n    this.attr(\"id\", this._id);\n  }\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} h\n   * @param {number} x\n   * @param {number} y\n   */\n  /**\n   * @param {number} w\n   * @param {number} h\n   * @param {number} [x]\n   * @param {number} [y]\n   */\n  size(w, h, x, y) {\n    return this.attr({ width: w, height: h, x, y });\n  }\n}\nclass FilterBuilder {\n  /**\n   * @param {any} filter\n   */\n  constructor(filter) {\n    this.filter = filter;\n  }\n  /**\n   * @param {object} attrs\n   */\n  colorMatrix(attrs) {\n    return this._primitive(\"feColorMatrix\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  offset(attrs) {\n    return this._primitive(\"feOffset\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  gaussianBlur(attrs) {\n    return this._primitive(\"feGaussianBlur\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  flood(attrs) {\n    return this._primitive(\"feFlood\", attrs);\n  }\n  /**\n   * @param {object} attrs\n   */\n  composite(attrs) {\n    return this._primitive(\"feComposite\", attrs);\n  }\n  /**\n   * @param {string[]} sources\n   */\n  merge(sources) {\n    const m = BrowserAPIs.createElementNS(SVGNS, \"feMerge\");\n    sources.forEach((src) => {\n      const mn = BrowserAPIs.createElementNS(SVGNS, \"feMergeNode\");\n      mn.setAttribute(\"in\", src);\n      m.appendChild(mn);\n    });\n    this.filter.node.appendChild(m);\n    return new SVGElement(m);\n  }\n  /**\n   * @param {string} tag\n   * @param {Record<string, any>} attrs\n   */\n  _primitive(tag, attrs) {\n    const el = BrowserAPIs.createElementNS(SVGNS, tag);\n    for (const key in attrs) {\n      el.setAttribute(key, attrs[key]);\n    }\n    this.filter.node.appendChild(el);\n    return new SVGElement(el);\n  }\n}\nfunction installFilterMethods(ElementClass) {\n  ElementClass.prototype.filterWith = function(fn) {\n    const filter = new SVGFilter();\n    this._filter = filter;\n    let svgRoot = this.node;\n    while (svgRoot && svgRoot.nodeName !== \"svg\") {\n      svgRoot = svgRoot.parentNode;\n    }\n    if (svgRoot) {\n      let defs = svgRoot.querySelector(\"defs\");\n      if (!defs) {\n        defs = BrowserAPIs.createElementNS(SVGNS, \"defs\");\n        svgRoot.insertBefore(defs, svgRoot.firstChild);\n      }\n      defs.appendChild(filter.node);\n    }\n    fn(new FilterBuilder(filter));\n    this.attr(\"filter\", \"url(#\" + filter._id + \")\");\n    return this;\n  };\n  ElementClass.prototype.unfilter = function(all) {\n    if (this._filter) {\n      this.node.removeAttribute(\"filter\");\n      if (all && this._filter.node && this._filter.node.parentNode) {\n        this._filter.node.parentNode.removeChild(this._filter.node);\n      }\n      this._filter = null;\n    }\n    return this;\n  };\n  ElementClass.prototype.filterer = function() {\n    return this._filter;\n  };\n}\n/*!\n * Path morphing for SVG path animations\n * Based on svg.pathmorphing.js by Ulrich-Matthias Schäfer (MIT License)\n * Refactored to be standalone (no SVG.js dependency)\n *\n * Two algorithms are exported:\n *   - morphPaths()    — command-level interpolation; preserves curves but can\n *                       produce \"wings/flips\" when two shapes have very\n *                       different topology (e.g. bar rect → pie arc).\n *   - morphPolygons() — resamples both shapes into N evenly-spaced perimeter\n *                       points and tweens point-by-point with rotation-search\n *                       alignment; always smooth and non-self-intersecting,\n *                       at the cost of throwing away curve smoothness.\n */\nfunction parsePath(d) {\n  if (!d || typeof d !== \"string\") return [[\"M\", 0, 0]];\n  const commands = [];\n  const re = /([MmLlHhVvCcSsQqTtAaZz])\\s*/g;\n  const numRe = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?/gi;\n  let match;\n  const letters = [];\n  const positions = [];\n  while ((match = re.exec(d)) !== null) {\n    letters.push(match[1]);\n    positions.push(match.index);\n  }\n  for (let i = 0; i < letters.length; i++) {\n    const start = positions[i] + letters[i].length;\n    const end = i + 1 < positions.length ? positions[i + 1] : d.length;\n    const paramStr = d.substring(start, end);\n    const nums = [];\n    let numMatch;\n    numRe.lastIndex = 0;\n    while ((numMatch = numRe.exec(paramStr)) !== null) {\n      nums.push(parseFloat(numMatch[0]));\n    }\n    const cmd = letters[i].toUpperCase();\n    if (cmd === \"Z\") {\n      commands.push([\"Z\"]);\n    } else if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n      for (let j = 0; j < nums.length; j += 2) {\n        commands.push([cmd, nums[j], nums[j + 1]]);\n      }\n    } else if (cmd === \"H\") {\n      for (let j = 0; j < nums.length; j++) {\n        commands.push([cmd, nums[j]]);\n      }\n    } else if (cmd === \"V\") {\n      for (let j = 0; j < nums.length; j++) {\n        commands.push([cmd, nums[j]]);\n      }\n    } else if (cmd === \"C\") {\n      for (let j = 0; j < nums.length; j += 6) {\n        commands.push([\n          cmd,\n          nums[j],\n          nums[j + 1],\n          nums[j + 2],\n          nums[j + 3],\n          nums[j + 4],\n          nums[j + 5]\n        ]);\n      }\n    } else if (cmd === \"S\" || cmd === \"Q\") {\n      for (let j = 0; j < nums.length; j += 4) {\n        commands.push([cmd, nums[j], nums[j + 1], nums[j + 2], nums[j + 3]]);\n      }\n    } else if (cmd === \"A\") {\n      for (let j = 0; j < nums.length; j += 7) {\n        commands.push([\n          cmd,\n          nums[j],\n          nums[j + 1],\n          nums[j + 2],\n          nums[j + 3],\n          nums[j + 4],\n          nums[j + 5],\n          nums[j + 6]\n        ]);\n      }\n    }\n  }\n  if (commands.length === 0) {\n    commands.push([\"M\", 0, 0]);\n  }\n  return commands;\n}\nfunction pathBbox(arr) {\n  let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;\n  arr.forEach((cmd) => {\n    for (let i = 1; i < cmd.length; i += 2) {\n      if (i + 1 <= cmd.length) {\n        const x = cmd[i];\n        const y = cmd[i + 1];\n        if (typeof x === \"number\" && typeof y === \"number\") {\n          if (x < minX) minX = x;\n          if (x > maxX) maxX = x;\n          if (y < minY) minY = y;\n          if (y > maxY) maxY = y;\n        }\n      }\n    }\n  });\n  if (minX === Infinity) {\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  return { x: minX, y: minY, width: maxX - minX, height: maxY - minY };\n}\nfunction arrayToPath(arr) {\n  return arr.map((cmd) => cmd.join(\" \")).join(\" \");\n}\nfunction simplify(val) {\n  switch (val[0]) {\n    case \"z\":\n    case \"Z\":\n      val[0] = \"L\";\n      val[1] = this.start[0];\n      val[2] = this.start[1];\n      break;\n    case \"H\":\n      val[0] = \"L\";\n      val[2] = this.pos[1];\n      break;\n    case \"V\":\n      val[0] = \"L\";\n      val[2] = val[1];\n      val[1] = this.pos[0];\n      break;\n    case \"T\":\n      val[0] = \"Q\";\n      val[3] = val[1];\n      val[4] = val[2];\n      val[1] = this.reflection[1];\n      val[2] = this.reflection[0];\n      break;\n    case \"S\":\n      val[0] = \"C\";\n      val[6] = val[4];\n      val[5] = val[3];\n      val[4] = val[2];\n      val[3] = val[1];\n      val[2] = this.reflection[1];\n      val[1] = this.reflection[0];\n      break;\n  }\n  return val;\n}\nfunction setPosAndReflection(val) {\n  var len = val.length;\n  this.pos = [val[len - 2], val[len - 1]];\n  if (\"SCQT\".indexOf(val[0]) != -1) {\n    this.reflection = [\n      2 * this.pos[0] - val[len - 4],\n      2 * this.pos[1] - val[len - 3]\n    ];\n  }\n  return val;\n}\nfunction toBezier(val) {\n  var _a;\n  var retVal = [val];\n  switch (val[0]) {\n    case \"M\":\n      this.pos = this.start = [val[1], val[2]];\n      return retVal;\n    case \"L\":\n      val[5] = val[3] = val[1];\n      val[6] = val[4] = val[2];\n      val[1] = this.pos[0];\n      val[2] = this.pos[1];\n      break;\n    case \"Q\":\n      val[6] = val[4];\n      val[5] = val[3];\n      val[4] = val[4] * 1 / 3 + val[2] * 2 / 3;\n      val[3] = val[3] * 1 / 3 + val[1] * 2 / 3;\n      val[2] = this.pos[1] * 1 / 3 + val[2] * 2 / 3;\n      val[1] = this.pos[0] * 1 / 3 + val[1] * 2 / 3;\n      break;\n    case \"A\":\n      retVal = arcToBezier((_a = this.pos) != null ? _a : [], val);\n      val = retVal[0];\n      break;\n  }\n  val[0] = \"C\";\n  this.pos = [val[5], val[6]];\n  this.reflection = [2 * val[5] - val[3], 2 * val[6] - val[4]];\n  return retVal;\n}\nfunction findNextM(arr, offset) {\n  if (offset === false) return false;\n  for (var i = offset, len = arr.length; i < len; ++i) {\n    if (arr[i][0] == \"M\") return i;\n  }\n  return false;\n}\nfunction arcToBezier(pos, val) {\n  var rx = Math.abs(val[1]), ry = Math.abs(val[2]), xAxisRotation = val[3] % 360, largeArcFlag = val[4], sweepFlag = val[5], x = val[6], y = val[7], A = new Point(pos[0], pos[1]), B = new Point(x, y), primedCoord, lambda, mat, k, c, cSquare, t, O, OA, OB, tetaStart, tetaEnd, deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i, il, retVal = [], x1, y1, x2, y2;\n  if (rx === 0 || ry === 0 || A.x === B.x && A.y === B.y) {\n    return [[\"C\", A.x, A.y, B.x, B.y, B.x, B.y]];\n  }\n  primedCoord = new Point((A.x - B.x) / 2, (A.y - B.y) / 2).transform(\n    // Start with the identity matrix (no args → Matrix defaults a=d=1, others 0).\n    // Passing all-zero args here would produce a degenerate zero matrix, since\n    // `0 ?? 1` is `0`, not `1` — every subsequent transform then yields (0,0)\n    // and the arc-to-bezier conversion crashes on a NaN cascade.\n    /** @type {any} */\n    new Matrix().rotate(xAxisRotation)\n  );\n  lambda = primedCoord.x * primedCoord.x / (rx * rx) + primedCoord.y * primedCoord.y / (ry * ry);\n  if (lambda > 1) {\n    lambda = Math.sqrt(lambda);\n    rx = lambda * rx;\n    ry = lambda * ry;\n  }\n  mat = /** @type {any} */\n  new Matrix().rotate(xAxisRotation).scale(1 / rx, 1 / ry).rotate(-xAxisRotation);\n  A = A.transform(mat);\n  B = B.transform(mat);\n  k = [B.x - A.x, B.y - A.y];\n  cSquare = k[0] * k[0] + k[1] * k[1];\n  c = Math.sqrt(cSquare);\n  k[0] /= c;\n  k[1] /= c;\n  t = cSquare < 4 ? Math.sqrt(1 - cSquare / 4) : 0;\n  if (largeArcFlag === sweepFlag) {\n    t *= -1;\n  }\n  O = new Point((B.x + A.x) / 2 + t * -k[1], (B.y + A.y) / 2 + t * k[0]);\n  OA = new Point(A.x - O.x, A.y - O.y);\n  OB = new Point(B.x - O.x, B.y - O.y);\n  tetaStart = Math.acos(OA.x / Math.sqrt(OA.x * OA.x + OA.y * OA.y));\n  if (OA.y < 0) tetaStart *= -1;\n  tetaEnd = Math.acos(OB.x / Math.sqrt(OB.x * OB.x + OB.y * OB.y));\n  if (OB.y < 0) tetaEnd *= -1;\n  if (sweepFlag && tetaStart > tetaEnd) {\n    tetaEnd += 2 * Math.PI;\n  }\n  if (!sweepFlag && tetaStart < tetaEnd) {\n    tetaEnd -= 2 * Math.PI;\n  }\n  nbSectors = Math.ceil(Math.abs(tetaStart - tetaEnd) * 2 / Math.PI);\n  arcSegPoints = [];\n  angle = tetaStart;\n  deltaTeta = (tetaEnd - tetaStart) / nbSectors;\n  f = 4 * Math.tan(deltaTeta / 4) / 3;\n  for (i = 0; i <= nbSectors; i++) {\n    cosAngle = Math.cos(angle);\n    sinAngle = Math.sin(angle);\n    pt = new Point(O.x + cosAngle, O.y + sinAngle);\n    arcSegPoints[i] = [\n      new Point(pt.x + f * sinAngle, pt.y - f * cosAngle),\n      pt,\n      new Point(pt.x - f * sinAngle, pt.y + f * cosAngle)\n    ];\n    angle += deltaTeta;\n  }\n  arcSegPoints[0][0] = arcSegPoints[0][1].clone();\n  arcSegPoints[arcSegPoints.length - 1][2] = arcSegPoints[arcSegPoints.length - 1][1].clone();\n  mat = /** @type {any} */\n  new Matrix().rotate(xAxisRotation).scale(rx, ry).rotate(-xAxisRotation);\n  for (i = 0, il = arcSegPoints.length; i < il; i++) {\n    arcSegPoints[i][0] = arcSegPoints[i][0].transform(mat);\n    arcSegPoints[i][1] = arcSegPoints[i][1].transform(mat);\n    arcSegPoints[i][2] = arcSegPoints[i][2].transform(mat);\n  }\n  for (i = 1, il = arcSegPoints.length; i < il; i++) {\n    pt = arcSegPoints[i - 1][2];\n    x1 = pt.x;\n    y1 = pt.y;\n    pt = arcSegPoints[i][0];\n    x2 = pt.x;\n    y2 = pt.y;\n    pt = arcSegPoints[i][1];\n    x = pt.x;\n    y = pt.y;\n    retVal.push([\"C\", x1, y1, x2, y2, x, y]);\n  }\n  return retVal;\n}\nfunction handleBlock(startArr, startOffsetM, startOffsetNextM, destArr, destOffsetM, destOffsetNextM) {\n  var startArrTemp = startArr.slice(startOffsetM, startOffsetNextM || void 0);\n  var destArrTemp = destArr.slice(destOffsetM, destOffsetNextM || void 0);\n  var i = 0, posStart = { pos: [0, 0], start: [0, 0] }, posDest = { pos: [0, 0], start: [0, 0] };\n  while (true) {\n    startArrTemp[i] = simplify.call(posStart, startArrTemp[i]);\n    destArrTemp[i] = simplify.call(posDest, destArrTemp[i]);\n    if (startArrTemp[i][0] != destArrTemp[i][0] || startArrTemp[i][0] == \"M\" || startArrTemp[i][0] == \"A\" && (startArrTemp[i][4] != destArrTemp[i][4] || startArrTemp[i][5] != destArrTemp[i][5])) {\n      Array.prototype.splice.apply(\n        startArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i, 1].concat(\n          /** @type {any} */\n          toBezier.call(posStart, startArrTemp[i])\n        )\n      );\n      Array.prototype.splice.apply(\n        destArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i, 1].concat(\n          /** @type {any} */\n          toBezier.call(posDest, destArrTemp[i])\n        )\n      );\n    } else {\n      startArrTemp[i] = /** @type {any} */\n      setPosAndReflection.call(\n        posStart,\n        startArrTemp[i]\n      );\n      destArrTemp[i] = /** @type {any} */\n      setPosAndReflection.call(\n        posDest,\n        destArrTemp[i]\n      );\n    }\n    if (++i == startArrTemp.length && i == destArrTemp.length) break;\n    if (i == startArrTemp.length) {\n      startArrTemp.push([\n        \"C\",\n        posStart.pos[0],\n        posStart.pos[1],\n        posStart.pos[0],\n        posStart.pos[1],\n        posStart.pos[0],\n        posStart.pos[1]\n      ]);\n    }\n    if (i == destArrTemp.length) {\n      destArrTemp.push([\n        \"C\",\n        posDest.pos[0],\n        posDest.pos[1],\n        posDest.pos[0],\n        posDest.pos[1],\n        posDest.pos[0],\n        posDest.pos[1]\n      ]);\n    }\n  }\n  return { start: startArrTemp, dest: destArrTemp };\n}\nfunction synchronizePaths(fromD, toD) {\n  var startArr = parsePath(fromD);\n  var destArr = parsePath(toD);\n  var startOffsetM = 0;\n  var destOffsetM = 0;\n  var startOffsetNextM = false;\n  var destOffsetNextM = false;\n  var result;\n  while (true) {\n    if (startOffsetM === false && destOffsetM === false) break;\n    startOffsetNextM = findNextM(\n      startArr,\n      startOffsetM === false ? false : startOffsetM + 1\n    );\n    destOffsetNextM = findNextM(\n      destArr,\n      destOffsetM === false ? false : destOffsetM + 1\n    );\n    if (startOffsetM === false) {\n      const bbox = pathBbox(\n        /** @type {any} */\n        result.start\n      );\n      if (bbox.height == 0 || bbox.width == 0) {\n        startOffsetM = startArr.push(startArr[0]) - 1;\n      } else {\n        startOffsetM = startArr.push([\n          \"M\",\n          bbox.x + bbox.width / 2,\n          bbox.y + bbox.height / 2\n        ]) - 1;\n      }\n    }\n    if (destOffsetM === false) {\n      const bbox = pathBbox(\n        /** @type {any} */\n        result.dest\n      );\n      if (bbox.height == 0 || bbox.width == 0) {\n        destOffsetM = destArr.push(destArr[0]) - 1;\n      } else {\n        destOffsetM = destArr.push([\n          \"M\",\n          bbox.x + bbox.width / 2,\n          bbox.y + bbox.height / 2\n        ]) - 1;\n      }\n    }\n    result = handleBlock(\n      startArr,\n      startOffsetM,\n      startOffsetNextM,\n      destArr,\n      destOffsetM,\n      destOffsetNextM\n    );\n    startArr = startArr.slice(0, startOffsetM).concat(\n      result.start,\n      startOffsetNextM === false ? [] : startArr.slice(startOffsetNextM)\n    );\n    destArr = destArr.slice(0, destOffsetM).concat(\n      result.dest,\n      destOffsetNextM === false ? [] : destArr.slice(destOffsetNextM)\n    );\n    startOffsetM = startOffsetNextM === false ? false : startOffsetM + result.start.length;\n    destOffsetM = destOffsetNextM === false ? false : destOffsetM + result.dest.length;\n  }\n  return { start: startArr, dest: destArr };\n}\nfunction morphPaths(fromD, toD) {\n  var synced = synchronizePaths(fromD, toD);\n  var startArr = synced.start;\n  var destArr = synced.dest;\n  return function(pos) {\n    var result = startArr.map(function(from, idx) {\n      return destArr[idx].map(function(to, toIdx) {\n        if (toIdx === 0) return to;\n        return from[toIdx] + (destArr[idx][toIdx] - from[toIdx]) * pos;\n      });\n    });\n    return arrayToPath(result);\n  };\n}\nlet _measureSvg = null;\nlet _measurePath = null;\nfunction samplePathPoints(d, n) {\n  const pts = new Array(n);\n  if (!Environment.isBrowser()) {\n    const arr = parsePath(d);\n    const bbox = pathBbox(arr);\n    const cx = bbox.x + bbox.width / 2;\n    const cy = bbox.y + bbox.height / 2;\n    for (let i = 0; i < n; i++) pts[i] = { x: cx, y: cy };\n    return pts;\n  }\n  if (!_measureSvg) {\n    _measureSvg = /** @type {SVGSVGElement} */\n    document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n    _measureSvg.setAttribute(\"width\", \"0\");\n    _measureSvg.setAttribute(\"height\", \"0\");\n    _measureSvg.setAttribute(\n      \"style\",\n      \"position:absolute;width:0;height:0;visibility:hidden;pointer-events:none;\"\n    );\n    _measurePath = /** @type {SVGPathElement} */\n    document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    _measureSvg.appendChild(_measurePath);\n    document.body.appendChild(_measureSvg);\n  }\n  _measurePath.setAttribute(\"d\", d || \"M0 0\");\n  let len = 0;\n  try {\n    len = _measurePath.getTotalLength();\n  } catch (e) {\n    len = 0;\n  }\n  if (!len || !isFinite(len)) {\n    const arr = parsePath(d);\n    const bbox = pathBbox(arr);\n    const cx = bbox.x + bbox.width / 2;\n    const cy = bbox.y + bbox.height / 2;\n    for (let i = 0; i < n; i++) pts[i] = { x: cx, y: cy };\n    return pts;\n  }\n  for (let i = 0; i < n; i++) {\n    try {\n      const p = _measurePath.getPointAtLength(i / n * len);\n      pts[i] = { x: p.x, y: p.y };\n    } catch (e) {\n      pts[i] = { x: 0, y: 0 };\n    }\n  }\n  return pts;\n}\nfunction morphPolygons(fromD, toD, n = 96) {\n  const fromPts = samplePathPoints(fromD, n);\n  const toPts = samplePathPoints(toD, n);\n  let bestOffset = 0;\n  let bestDist = Infinity;\n  for (let off = 0; off < n; off++) {\n    let dist = 0;\n    for (let i = 0; i < n; i++) {\n      const a = fromPts[(i + off) % n];\n      const b = toPts[i];\n      const dx = a.x - b.x;\n      const dy = a.y - b.y;\n      dist += dx * dx + dy * dy;\n      if (dist >= bestDist) break;\n    }\n    if (dist < bestDist) {\n      bestDist = dist;\n      bestOffset = off;\n    }\n  }\n  const aligned = new Array(n);\n  for (let i = 0; i < n; i++) {\n    aligned[i] = fromPts[(i + bestOffset) % n];\n  }\n  return function(pos) {\n    let out = \"\";\n    for (let i = 0; i < n; i++) {\n      const a = aligned[i];\n      const b = toPts[i];\n      const x = a.x + (b.x - a.x) * pos;\n      const y = a.y + (b.y - a.y) * pos;\n      out += (i === 0 ? \"M\" : \"L\") + x.toFixed(3) + \" \" + y.toFixed(3) + \" \";\n    }\n    return out + \"Z\";\n  };\n}\nfunction easeInOut(t) {\n  return -Math.cos(t * Math.PI) / 2 + 0.5;\n}\nfunction parseColor(str) {\n  if (!str || typeof str !== \"string\") return null;\n  if (str[0] === \"#\") {\n    let hex = str.slice(1);\n    if (hex.length === 3)\n      hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n    const n = parseInt(hex, 16);\n    return [n >> 16 & 255, n >> 8 & 255, n & 255, 1];\n  }\n  const m = str.match(\n    /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/\n  );\n  if (m) return [+m[1], +m[2], +m[3], m[4] !== void 0 ? +m[4] : 1];\n  return null;\n}\nfunction interpolateColor(from, to, pos) {\n  return `rgba(${Math.round(from[0] + (to[0] - from[0]) * pos)},${Math.round(from[1] + (to[1] - from[1]) * pos)},${Math.round(from[2] + (to[2] - from[2]) * pos)},${from[3] + (to[3] - from[3]) * pos})`;\n}\nclass SVGAnimationRunner {\n  /**\n   * @param {any} element\n   * @param {number} duration\n   * @param {number} delay\n   */\n  constructor(element, duration, delay) {\n    this.el = element;\n    this.duration = duration != null ? duration : 300;\n    this.delay = delay || 0;\n    this._attrTarget = null;\n    this._plotTarget = null;\n    this._plotAlgorithm = \"commands\";\n    this._afterCb = null;\n    this._duringCb = null;\n    this._next = null;\n    this._root = null;\n    this._scheduled = false;\n  }\n  /**\n   * @param {Record<string, any>} to\n   */\n  attr(to) {\n    this._attrTarget = to;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {string} d\n   * @param {'commands' | 'polygons'} [algorithm] - morph engine to use for\n   *   the d→d interpolation. 'commands' (default) is the legacy\n   *   per-command lerp; 'polygons' resamples both paths into N evenly\n   *   spaced points and tweens point-by-point (smoother for shapes with\n   *   very different anchor-point counts).\n   */\n  plot(d, algorithm) {\n    this._plotTarget = d;\n    if (algorithm) this._plotAlgorithm = algorithm;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Function} fn\n   */\n  after(fn) {\n    this._afterCb = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {Function} fn\n   */\n  during(fn) {\n    this._duringCb = fn;\n    this._schedule();\n    return this;\n  }\n  /**\n   * @param {number} duration\n   * @param {number} delay\n   */\n  animate(duration, delay) {\n    const next = new SVGAnimationRunner(this.el, duration, delay);\n    this._next = next;\n    next._root = this._root || this;\n    return next;\n  }\n  _schedule() {\n    const root = this._root || this;\n    if (!root._scheduled) {\n      root._scheduled = true;\n      queueMicrotask(() => root._executeChain());\n    }\n  }\n  _executeChain() {\n    const chain = [];\n    let r = this;\n    while (r) {\n      chain.push(r);\n      r = r._next;\n    }\n    let cumulativeDelay = 0;\n    chain.forEach((runner) => {\n      cumulativeDelay += runner.delay;\n      runner._execute(cumulativeDelay);\n      cumulativeDelay += runner.duration;\n    });\n  }\n  /**\n   * @param {number} startDelay\n   */\n  _execute(startDelay) {\n    const el = this.el;\n    const duration = this.duration;\n    if (duration <= 1) {\n      const apply = () => {\n        if (this._attrTarget) el.attr(this._attrTarget);\n        if (this._plotTarget) el.plot(this._plotTarget);\n        if (this._afterCb) this._afterCb.call(el);\n      };\n      if (startDelay > 0) {\n        setTimeout(apply, startDelay);\n      } else {\n        apply();\n      }\n      return;\n    }\n    const run = () => {\n      const fromAttrs = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      const fromColors = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      const toColors = (\n        /** @type {Record<string, any>} */\n        {}\n      );\n      if (this._attrTarget) {\n        for (const key of Object.keys(this._attrTarget)) {\n          const fromVal = el.attr(key);\n          fromAttrs[key] = fromVal;\n          const fc = parseColor(fromVal);\n          const tc = parseColor(String(this._attrTarget[key]));\n          if (fc && tc) {\n            fromColors[key] = fc;\n            toColors[key] = tc;\n          }\n        }\n      }\n      let morphFn = null;\n      if (this._plotTarget) {\n        const fromPath = el.attr(\"d\") || \"\";\n        try {\n          morphFn = this._plotAlgorithm === \"polygons\" ? morphPolygons(fromPath, this._plotTarget) : morphPaths(fromPath, this._plotTarget);\n        } catch (e) {\n          morphFn = null;\n        }\n      }\n      const start = performance.now();\n      const tick = (now) => {\n        const elapsed = now - start;\n        const rawPos = Math.min(elapsed / duration, 1);\n        const pos = easeInOut(rawPos);\n        if (this._attrTarget) {\n          if (rawPos >= 1) {\n            el.attr(this._attrTarget);\n          } else {\n            const current = (\n              /** @type {Record<string, any>} */\n              {}\n            );\n            for (const key of Object.keys(this._attrTarget)) {\n              if (fromColors[key] && toColors[key]) {\n                current[key] = interpolateColor(\n                  fromColors[key],\n                  toColors[key],\n                  pos\n                );\n              } else {\n                const from = parseFloat(fromAttrs[key]);\n                const to = parseFloat(this._attrTarget[key]);\n                if (!isNaN(from) && !isNaN(to)) {\n                  current[key] = from + (to - from) * pos;\n                }\n              }\n            }\n            el.attr(current);\n          }\n        }\n        if (morphFn && rawPos < 1) {\n          el.attr(\n            \"d\",\n            /** @type {any} */\n            morphFn(pos)\n          );\n        }\n        if (this._duringCb) this._duringCb(pos);\n        if (rawPos < 1) {\n          BrowserAPIs.requestAnimationFrame(tick);\n        } else {\n          if (this._plotTarget) {\n            el.attr(\"d\", this._plotTarget);\n          }\n          if (this._afterCb) this._afterCb.call(el);\n        }\n      };\n      BrowserAPIs.requestAnimationFrame(tick);\n    };\n    if (startDelay > 0) {\n      setTimeout(run, startDelay);\n    } else {\n      run();\n    }\n  }\n}\nfunction installAnimationMethods(ElementClass) {\n  ElementClass.prototype.animate = function(duration, delay) {\n    return new SVGAnimationRunner(this, duration, delay);\n  };\n}\nfunction installDraggable(ElementClass) {\n  ElementClass.prototype.draggable = function(opts) {\n    if (opts === false) {\n      if (this._dragCleanup) {\n        this._dragCleanup();\n        this._dragCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const constraints = opts || {};\n    const onPointerDown = (e) => {\n      if (e.button && e.button !== 0) return;\n      e.stopPropagation();\n      const isTouch = e.type === \"touchstart\";\n      const ev = isTouch ? e.touches[0] : e;\n      const svgEl = el.node;\n      const startAttrX = parseFloat(svgEl.getAttribute(\"x\")) || 0;\n      const startAttrY = parseFloat(svgEl.getAttribute(\"y\")) || 0;\n      const startClientX = ev.clientX;\n      const startClientY = ev.clientY;\n      const svgRoot = svgEl.ownerSVGElement;\n      let ctm = null;\n      if (svgRoot) {\n        ctm = svgRoot.getScreenCTM();\n      }\n      const onMove = (me) => {\n        const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n        let dx = mev.clientX - startClientX;\n        let dy = mev.clientY - startClientY;\n        if (ctm) {\n          dx = dx / ctm.a;\n          dy = dy / ctm.d;\n        }\n        let newX = startAttrX + dx;\n        let newY = startAttrY + dy;\n        const w = parseFloat(svgEl.getAttribute(\"width\")) || 0;\n        const h = parseFloat(svgEl.getAttribute(\"height\")) || 0;\n        if (constraints.minX !== void 0 && newX < constraints.minX)\n          newX = constraints.minX;\n        if (constraints.minY !== void 0 && newY < constraints.minY)\n          newY = constraints.minY;\n        if (constraints.maxX !== void 0 && newX + w > constraints.maxX)\n          newX = constraints.maxX - w;\n        if (constraints.maxY !== void 0 && newY + h > constraints.maxY)\n          newY = constraints.maxY - h;\n        const box = {\n          x: newX,\n          y: newY,\n          w,\n          h,\n          x2: newX + w,\n          y2: newY + h\n        };\n        const event = new CustomEvent(\"dragmove\", {\n          detail: {\n            handler: {\n              /**\n               * @param {number} x\n               * @param {number} y\n               */\n              move: function(x, y) {\n                svgEl.setAttribute(\"x\", x);\n                svgEl.setAttribute(\"y\", y);\n              }\n            },\n            box\n          }\n        });\n        svgEl.dispatchEvent(event);\n      };\n      const onUp = () => {\n        if (Environment.isBrowser()) {\n          document.removeEventListener(\"mousemove\", onMove);\n          document.removeEventListener(\"touchmove\", onMove);\n          document.removeEventListener(\"mouseup\", onUp);\n          document.removeEventListener(\"touchend\", onUp);\n        }\n      };\n      if (Environment.isBrowser()) {\n        document.addEventListener(\"mousemove\", onMove);\n        document.addEventListener(\"touchmove\", onMove);\n        document.addEventListener(\"mouseup\", onUp);\n        document.addEventListener(\"touchend\", onUp);\n      }\n    };\n    el.node.addEventListener(\"mousedown\", onPointerDown);\n    el.node.addEventListener(\"touchstart\", onPointerDown);\n    el._dragCleanup = () => {\n      el.node.removeEventListener(\"mousedown\", onPointerDown);\n      el.node.removeEventListener(\"touchstart\", onPointerDown);\n    };\n    return el;\n  };\n}\nfunction installSelectable(ElementClass) {\n  ElementClass.prototype.select = function(opts) {\n    if (opts === false) {\n      if (this._selectCleanup) {\n        this._selectCleanup();\n        this._selectCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const { createHandle, updateHandle } = opts;\n    const handleGroup = document.createElementNS(SVGNS, \"g\");\n    handleGroup.setAttribute(\"class\", \"svg_select_points\");\n    const parent = el.node.parentNode;\n    if (parent) {\n      parent.appendChild(handleGroup);\n    }\n    const handles = {};\n    const handleNames = [\"t\", \"b\", \"l\", \"r\", \"lt\", \"rt\", \"lb\", \"rb\"];\n    handleNames.forEach((name2, index) => {\n      const subGroup = new SVGContainer(document.createElementNS(SVGNS, \"g\"));\n      handleGroup.appendChild(subGroup.node);\n      const handle = createHandle(subGroup, [0, 0], index, [], name2);\n      handles[name2] = { group: subGroup, handle };\n    });\n    const updatePositions = () => {\n      const x = parseFloat(el.attr(\"x\")) || 0;\n      const y = parseFloat(el.attr(\"y\")) || 0;\n      const w = parseFloat(el.attr(\"width\")) || 0;\n      const h = parseFloat(el.attr(\"height\")) || 0;\n      const elTransform = el.node.getAttribute(\"transform\");\n      if (elTransform) {\n        handleGroup.setAttribute(\"transform\", elTransform);\n      } else {\n        handleGroup.removeAttribute(\"transform\");\n      }\n      const positions = {\n        t: [x + w / 2, y],\n        b: [x + w / 2, y + h],\n        l: [x, y + h / 2],\n        r: [x + w, y + h / 2],\n        lt: [x, y],\n        rt: [x + w, y],\n        lb: [x, y + h],\n        rb: [x + w, y + h]\n      };\n      handleNames.forEach((name2) => {\n        if (handles[name2] && positions[name2]) {\n          updateHandle(handles[name2].group, positions[name2]);\n        }\n      });\n    };\n    updatePositions();\n    el._selectHandles = handleGroup;\n    el._selectHandlesMap = handles;\n    el._updateSelectPositions = updatePositions;\n    el._selectCleanup = () => {\n      if (handleGroup.parentNode) {\n        handleGroup.parentNode.removeChild(handleGroup);\n      }\n      el._selectHandles = null;\n      el._selectHandlesMap = null;\n      el._updateSelectPositions = null;\n    };\n    return el;\n  };\n  ElementClass.prototype.resize = function(enable) {\n    if (enable === false) {\n      if (this._resizeCleanup) {\n        this._resizeCleanup();\n        this._resizeCleanup = null;\n      }\n      return this;\n    }\n    const el = this;\n    const handles = el._selectHandlesMap;\n    if (!handles) return el;\n    const cleanupFns = [];\n    const makeHandleDraggable = (name2) => {\n      const handleInfo = handles[name2];\n      if (!handleInfo || !handleInfo.group || !handleInfo.group.node) return;\n      const handleNode = handleInfo.group.node;\n      const onPointerDown = (e) => {\n        if (e.button && e.button !== 0) return;\n        e.stopPropagation();\n        const isTouch = e.type === \"touchstart\";\n        const ev = isTouch ? e.touches[0] : e;\n        const startClientX = ev.clientX;\n        const svgRoot = el.node.ownerSVGElement;\n        let ctm = null;\n        if (svgRoot) {\n          ctm = svgRoot.getScreenCTM();\n        }\n        const startX = parseFloat(el.attr(\"x\")) || 0;\n        const startW = parseFloat(el.attr(\"width\")) || 0;\n        const onMove = (me) => {\n          const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n          let dx = mev.clientX - startClientX;\n          if (ctm) dx = dx / /** @type {any} */\n          ctm.a;\n          let newX = startX;\n          let newW = startW;\n          if (name2 === \"l\") {\n            newX = startX + dx;\n            newW = startW - dx;\n          } else if (name2 === \"r\") {\n            newW = startW + dx;\n          }\n          if (newW < 0) {\n            newW = 0;\n          }\n          el.attr({ x: newX, width: newW });\n          if (el._updateSelectPositions) {\n            el._updateSelectPositions();\n          }\n          const event = new CustomEvent(\"resize\", {\n            detail: { el }\n          });\n          el.node.dispatchEvent(event);\n        };\n        const onUp = () => {\n          if (Environment.isBrowser()) {\n            document.removeEventListener(\"mousemove\", onMove);\n            document.removeEventListener(\"touchmove\", onMove);\n            document.removeEventListener(\"mouseup\", onUp);\n            document.removeEventListener(\"touchend\", onUp);\n          }\n          const event = new CustomEvent(\"resize\", {\n            detail: { el }\n          });\n          el.node.dispatchEvent(event);\n        };\n        if (Environment.isBrowser()) {\n          document.addEventListener(\"mousemove\", onMove);\n          document.addEventListener(\"touchmove\", onMove);\n          document.addEventListener(\"mouseup\", onUp);\n          document.addEventListener(\"touchend\", onUp);\n        }\n      };\n      handleNode.addEventListener(\"mousedown\", onPointerDown);\n      handleNode.addEventListener(\"touchstart\", onPointerDown);\n      cleanupFns.push(() => {\n        handleNode.removeEventListener(\"mousedown\", onPointerDown);\n        handleNode.removeEventListener(\"touchstart\", onPointerDown);\n      });\n    };\n    makeHandleDraggable(\"l\");\n    makeHandleDraggable(\"r\");\n    el._resizeCleanup = () => {\n      cleanupFns.forEach((fn) => fn());\n    };\n    return el;\n  };\n}\ninstallFilterMethods(SVGElement);\ninstallAnimationMethods(SVGElement);\ninstallDraggable(SVGElement);\ninstallSelectable(SVGElement);\nfunction SVG() {\n  const svgEl = BrowserAPIs.createElementNS(SVGNS, \"svg\");\n  const svg = new SVGContainer(svgEl);\n  svg.attr({ xmlns: SVGNS });\n  return svg;\n}\nSVG.xlink = \"http://www.w3.org/1999/xlink\";\nif (Environment.isBrowser() && typeof window.SVG === \"undefined\") {\n  window.SVG = SVG;\n}\nif (Environment.isBrowser()) {\n  if (typeof window.SVG === \"undefined\") {\n    window.SVG = SVG;\n  }\n  if (typeof window.Apex === \"undefined\") {\n    window.Apex = {};\n  }\n} else {\n  if (typeof global !== \"undefined\") {\n    if (typeof /** @type {any} */\n    global.Apex === \"undefined\") {\n      global.Apex = {};\n    }\n    if (typeof /** @type {any} */\n    global.SVG === \"undefined\") {\n      global.SVG = SVG;\n    }\n  }\n}\nconst _InitCtxVariables = class _InitCtxVariables {\n  /**\n   * Register one or more optional feature modules.\n   *\n   * @param {Record<string, new (w: object, ctx: object) => unknown>} featureMap\n   *   Plain object mapping ctx property name → constructor.\n   *\n   * Example (called from src/features/legend.js):\n   *   InitCtxVariables.registerFeatures({ legend: Legend })\n   */\n  static registerFeatures(featureMap) {\n    for (const [key, Ctor] of Object.entries(featureMap)) {\n      _InitCtxVariables._featureRegistry.set(key, Ctor);\n    }\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(ctx) {\n    this.ctx = ctx;\n    this.w = ctx.w;\n  }\n  initModules() {\n    this.ctx.publicMethods = [\n      \"updateOptions\",\n      \"updateSeries\",\n      \"appendData\",\n      \"appendSeries\",\n      \"isSeriesHidden\",\n      \"highlightSeries\",\n      \"toggleSeries\",\n      \"showSeries\",\n      \"hideSeries\",\n      \"setLocale\",\n      \"resetSeries\",\n      \"zoomX\",\n      \"toggleDataPointSelection\",\n      \"dataURI\",\n      \"exportToCSV\",\n      \"addXaxisAnnotation\",\n      \"addYaxisAnnotation\",\n      \"addPointAnnotation\",\n      \"clearAnnotations\",\n      \"removeAnnotation\",\n      \"drillDown\",\n      \"drillUp\",\n      \"drillToRoot\",\n      \"paper\",\n      \"destroy\"\n    ];\n    this.ctx.eventList = [\n      \"click\",\n      \"mousedown\",\n      \"mousemove\",\n      \"mouseleave\",\n      \"touchstart\",\n      \"touchmove\",\n      \"touchleave\",\n      \"mouseup\",\n      \"touchend\",\n      \"keydown\",\n      \"keyup\"\n    ];\n    this.ctx.animations = new Animations(this.w, this.ctx);\n    this.ctx.axes = new Axes(this.w, this.ctx);\n    this.ctx.core = new Core(this.ctx.el, this.w, this.ctx);\n    this.ctx.config = new Config({});\n    this.ctx.data = new Data(this.w, {\n      resetGlobals: () => this.ctx.core.resetGlobals(),\n      isMultipleY: () => this.ctx.core.isMultipleY()\n    });\n    this.ctx.grid = new Grid(this.w, this.ctx);\n    this.ctx.graphics = new Graphics(this.w, this.ctx);\n    this.ctx.coreUtils = new CoreUtils(this.w);\n    this.ctx.crosshairs = new Crosshairs(this.w);\n    this.ctx.events = new Events(this.w, this.ctx);\n    this.ctx.fill = new Fill(this.w);\n    this.ctx.localization = new Localization(this.w);\n    this.ctx.options = new Options();\n    this.ctx.responsive = new Responsive(this.w);\n    this.ctx.series = new Series(this.w, {\n      // legend may not be registered — guard with ?.\n      toggleDataSeries: (...a) => {\n        var _a;\n        return (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.toggleDataSeries(...a);\n      },\n      revertDefaultAxisMinMax: () => this.ctx.updateHelpers.revertDefaultAxisMinMax(),\n      updateSeries: (...a) => this.ctx.updateHelpers._updateSeries(...a)\n    });\n    this.ctx.theme = new Theme(this.w);\n    this.ctx.formatters = new Formatters(this.w);\n    this.ctx.titleSubtitle = new TitleSubtitle(this.w);\n    this.ctx.dimensions = new Dimensions(this.w, this.ctx);\n    this.ctx.updateHelpers = new UpdateHelpers(this.w, this.ctx);\n    const tooltipInstance = new Tooltip(this.w, this.ctx);\n    this.w.globals.tooltip = tooltipInstance;\n    Object.defineProperty(this.ctx, \"tooltip\", {\n      get() {\n        return this.w.globals.tooltip;\n      },\n      configurable: true\n    });\n    this._initOptionalModules();\n  }\n  /**\n   * Instantiate optional feature modules from the registry.\n   *\n   * Modules that are not registered are set to null on ctx so that call sites\n   * can safely use optional-chaining (ctx.tooltip?.drawTooltip(...)).\n   *\n   * Lazy-getter features (toolbar, zoomPanSelection, keyboardNavigation) are\n   * installed as on-demand getters so they are only constructed if accessed,\n   * and only if their constructor was registered.\n   */\n  _initOptionalModules() {\n    const reg = _InitCtxVariables._featureRegistry;\n    const w = this.w;\n    const ctx = this.ctx;\n    const ExportsCtor = reg.get(\"exports\");\n    ctx.exports = ExportsCtor ? new ExportsCtor(w, ctx) : null;\n    const LegendCtor = reg.get(\"legend\");\n    ctx.legend = LegendCtor ? new LegendCtor(w, ctx) : null;\n    const MorphCtor = reg.get(\"morphTypeChange\");\n    ctx.morphTypeChange = MorphCtor ? new MorphCtor(w, ctx) : null;\n    const DrilldownCtor = reg.get(\"drilldown\");\n    ctx.drilldown = DrilldownCtor ? new DrilldownCtor(w, ctx) : null;\n    const ToolbarCtor = reg.get(\"toolbar\");\n    Object.defineProperty(ctx, \"toolbar\", {\n      get() {\n        var _a;\n        if (!this._toolbar && ToolbarCtor)\n          this._toolbar = new ToolbarCtor(w, this);\n        return (_a = this._toolbar) != null ? _a : null;\n      },\n      configurable: true\n    });\n    const ZoomPanCtor = reg.get(\"zoomPanSelection\");\n    Object.defineProperty(ctx, \"zoomPanSelection\", {\n      get() {\n        var _a;\n        if (!this._zoomPanSelection && ZoomPanCtor)\n          this._zoomPanSelection = new ZoomPanCtor(w, this);\n        return (_a = this._zoomPanSelection) != null ? _a : null;\n      },\n      configurable: true\n    });\n    const KeyboardCtor = reg.get(\"keyboardNavigation\");\n    Object.defineProperty(ctx, \"keyboardNavigation\", {\n      get() {\n        var _a;\n        if (!this._keyboardNavigation && KeyboardCtor)\n          this._keyboardNavigation = new KeyboardCtor(w, this);\n        return (_a = this._keyboardNavigation) != null ? _a : null;\n      },\n      configurable: true\n    });\n  }\n};\n/**\n * Registry of optional feature modules.\n *\n * Populated by ApexCharts.registerFeatures() (called from feature entry\n * files such as src/features/legend.js). Keys match the ctx property name\n * the module is stored under (e.g. 'legend', 'exports').\n *\n * Core modules that every chart needs are NOT in this registry — they are\n * always instantiated unconditionally in initModules().\n */\n__publicField(_InitCtxVariables, \"_featureRegistry\", /* @__PURE__ */ new Map());\nlet InitCtxVariables = _InitCtxVariables;\nclass Destroy {\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(ctx) {\n    this.ctx = ctx;\n    this.w = ctx.w;\n  }\n  /**\n   * @param {{ isUpdating: boolean }} opts\n   */\n  clear({ isUpdating }) {\n    if (!isUpdating) {\n      this.w.globals.isDestroyed = true;\n    }\n    if (this.ctx._zoomPanSelection) {\n      this.ctx._zoomPanSelection.destroy();\n    }\n    if (this.ctx._toolbar) {\n      this.ctx._toolbar.destroy();\n    }\n    if (this.w.globals.resizeObserver && typeof this.w.globals.resizeObserver.disconnect === \"function\") {\n      this.w.globals.resizeObserver.disconnect();\n      this.w.globals.resizeObserver = null;\n    }\n    PerformanceCache.invalidateAll(this.w);\n    if (isUpdating) {\n      this.ctx._zoomPanSelection = null;\n      this.ctx._toolbar = null;\n      this.ctx._keyboardNavigation = null;\n    } else {\n      this.ctx.animations = null;\n      this.ctx.axes = null;\n      this.ctx.annotations = null;\n      this.ctx.core = null;\n      this.ctx.data = null;\n      this.ctx.grid = null;\n      this.ctx.series = null;\n      this.ctx.responsive = null;\n      this.ctx.theme = null;\n      this.ctx.formatters = null;\n      this.ctx.titleSubtitle = null;\n      this.ctx.legend = null;\n      this.ctx.dimensions = null;\n      this.ctx.options = null;\n      this.ctx.crosshairs = null;\n      this.ctx._zoomPanSelection = null;\n      this.ctx.updateHelpers = null;\n      this.ctx._toolbar = null;\n      this.ctx.localization = null;\n      this.ctx._keyboardNavigation = null;\n      this.ctx.w.globals.tooltip = null;\n    }\n    this.clearDomElements({ isUpdating });\n  }\n  /**\n   * @param {any} draw\n   */\n  killSVG(draw) {\n    draw.each(\n      /** @this {any} */\n      function() {\n        this.removeClass(\"*\");\n        this.off();\n      },\n      true\n    );\n    draw.clear();\n  }\n  /**\n   * @param {{ isUpdating: boolean }} opts\n   */\n  clearDomElements({ isUpdating }) {\n    const domEls = (\n      /** @type {any} */\n      this.w.dom\n    );\n    if (Environment.isBrowser() && domEls.Paper) {\n      const elSVG = domEls.Paper.node;\n      if (elSVG.parentNode && elSVG.parentNode.parentNode && !isUpdating) {\n        elSVG.parentNode.parentNode.style.minHeight = \"unset\";\n      }\n      const baseEl = domEls.baseEl;\n      if (baseEl) {\n        this.ctx.eventList.forEach((event) => {\n          baseEl.removeEventListener(event, this.ctx.events.documentEvent);\n        });\n      }\n      if (this.ctx.el !== null) {\n        while (this.ctx.el.firstChild) {\n          this.ctx.el.removeChild(this.ctx.el.firstChild);\n        }\n      }\n      this.killSVG(domEls.Paper);\n      domEls.Paper.remove();\n    }\n    domEls.elWrap = null;\n    domEls.elGraphical = null;\n    domEls.elLegendWrap = null;\n    domEls.elLegendForeign = null;\n    domEls.baseEl = null;\n    domEls.elGridRect = null;\n    domEls.elGridRectMask = null;\n    domEls.elGridRectBarMask = null;\n    domEls.elGridRectMarkerMask = null;\n    domEls.elForecastMask = null;\n    domEls.elNonForecastMask = null;\n    domEls.elDefs = null;\n  }\n}\nconst ros = /* @__PURE__ */ new WeakMap();\nfunction addResizeListener(el, fn) {\n  if (Environment.isSSR()) return;\n  let called = false;\n  if (el.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n    const elRect = el.getBoundingClientRect();\n    if (el.style.display === \"none\" || elRect.width === 0) {\n      called = true;\n    }\n  }\n  const ro = new ResizeObserver((r) => {\n    if (called) {\n      fn.call(el, r);\n    }\n    called = true;\n  });\n  if (el.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n    Array.from(el.children).forEach((c) => ro.observe(c));\n  } else {\n    ro.observe(el);\n  }\n  ros.set(fn, ro);\n}\nfunction removeResizeListener(el, fn) {\n  if (Environment.isSSR()) return;\n  const ro = ros.get(fn);\n  if (ro) {\n    ro.disconnect();\n    ros.delete(fn);\n  }\n}\nconst apexCSS = '@keyframes opaque {\\n  0% {\\n    opacity: 0\\n  }\\n\\n  to {\\n    opacity: 1\\n  }\\n}\\n\\n@keyframes resizeanim {\\n\\n  0%,\\n  to {\\n    opacity: 0\\n  }\\n}\\n\\n.apexcharts-canvas {\\n  position: relative;\\n  direction: ltr !important;\\n  user-select: none;\\n  /* Focus indicator colour. Themes override below. */\\n  --apexcharts-focus-color: #008FFB;\\n}\\n\\n/* Dark theme & high-contrast: brighter focus colour for sufficient contrast. */\\n.apexcharts-canvas .apexcharts-theme-dark,\\n.apexcharts-theme-dark.apexcharts-canvas {\\n  --apexcharts-focus-color: #FFD500;\\n}\\n.apexcharts-canvas.apexcharts-high-contrast,\\n.apexcharts-high-contrast.apexcharts-canvas {\\n  --apexcharts-focus-color: #FFFF00;\\n}\\n\\n/* Visually-hidden aria-live status region (WCAG 4.1.3 Status Messages). */\\n.apexcharts-sr-status {\\n  position: absolute;\\n  width: 1px;\\n  height: 1px;\\n  padding: 0;\\n  margin: -1px;\\n  overflow: hidden;\\n  clip: rect(0, 0, 0, 0);\\n  white-space: nowrap;\\n  border: 0;\\n}\\n\\n/* Respect OS-level reduced-motion preference (WCAG 2.3.3). */\\n@media (prefers-reduced-motion: reduce) {\\n  .apexcharts-canvas *,\\n  .apexcharts-canvas *::before,\\n  .apexcharts-canvas *::after {\\n    animation-duration: 0.01ms !important;\\n    animation-iteration-count: 1 !important;\\n    transition-duration: 0.01ms !important;\\n  }\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar {\\n  -webkit-appearance: none;\\n  width: 6px\\n}\\n\\n.apexcharts-canvas ::-webkit-scrollbar-thumb {\\n  border-radius: 4px;\\n  background-color: rgba(0, 0, 0, .5);\\n  box-shadow: 0 0 1px rgba(255, 255, 255, .5);\\n  -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5)\\n}\\n\\n.apexcharts-inner {\\n  position: relative\\n}\\n\\n.apexcharts-text tspan {\\n  font-family: inherit\\n}\\n\\nrect.legend-mouseover-inactive,\\n.legend-mouseover-inactive rect,\\n.legend-mouseover-inactive path,\\n.legend-mouseover-inactive circle,\\n.legend-mouseover-inactive line,\\n.legend-mouseover-inactive text.apexcharts-yaxis-title-text,\\n.legend-mouseover-inactive text.apexcharts-yaxis-label {\\n  transition: .15s ease all;\\n  opacity: .2\\n}\\n\\n.apexcharts-legend-text {\\n  padding-left: 15px;\\n  margin-left: -15px;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 2px;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus:not(:focus-visible) {\\n  outline: none;\\n}\\n\\n.apexcharts-legend-series[role=\"button\"]:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 2px;\\n}\\n\\n.apexcharts-series-collapsed {\\n  opacity: 0\\n}\\n\\n.apexcharts-canvas svg:focus:not(:focus-visible) {\\n  outline: none;\\n}\\n\\n/* Keyboard navigation focus indicator on SVG data elements.\\n   SVG elements don\\'t support CSS outline, so we use stroke. */\\n.apexcharts-bar-area.apexcharts-keyboard-focused,\\n.apexcharts-candlestick-area.apexcharts-keyboard-focused,\\n.apexcharts-boxPlot-area.apexcharts-keyboard-focused,\\n.apexcharts-rangebar-area.apexcharts-keyboard-focused,\\n.apexcharts-pie-area.apexcharts-keyboard-focused,\\n.apexcharts-heatmap-rect.apexcharts-keyboard-focused,\\n.apexcharts-treemap-rect.apexcharts-keyboard-focused {\\n  stroke: var(--apexcharts-focus-color, #008FFB);\\n  stroke-width: 2;\\n  stroke-opacity: 1;\\n}\\n\\n.apexcharts-tooltip {\\n  --apx-tt-bg: #ffffff;\\n  --apx-tt-border: rgba(15, 23, 42, 0.06);\\n  /* Layered shadow: tight inner contact + soft outer drop. The two Y\\n   * offsets are exposed as variables so they flip in sync with the\\n   * arrow when the tooltip is below the data point — see the\\n   * `[data-placement=\"bottom\"]` rule further down. */\\n  --apx-tt-shadow-y-mid: 8px;\\n  --apx-tt-shadow-y-far: 16px;\\n  --apx-tt-shadow: 0 0 0 1px rgba(15, 23, 42, 0.04), 0 var(--apx-tt-shadow-y-mid) 16px -6px rgba(15, 23, 42, 0.12), 0 var(--apx-tt-shadow-y-far) 36px -12px rgba(15, 23, 42, 0.18);\\n  --apx-tt-arrow-bg: var(--apx-tt-bg);\\n  /* Two stacked drop-shadows: the first is a tight contact halo for\\n   * edge definition against light chart backgrounds; the second is a\\n   * softer directional drop that lifts the arrow off the surface.\\n   * `--apx-tt-arrow-drop-y` is the Y offset of the directional drop;\\n   * a per-placement rule below flips it to negative when the tooltip\\n   * is below the data point (arrow on top) so the shadow always\\n   * casts outward instead of into the tooltip body. */\\n  --apx-tt-arrow-drop-y: 2px;\\n  --apx-tt-arrow-shadow: drop-shadow(0 0 0.5px rgba(15, 23, 42, 0.2)) drop-shadow(0 var(--apx-tt-arrow-drop-y) 4px rgba(15, 23, 42, 0.2));\\n  --apx-tt-color: #0f172a;\\n  --apx-tt-color-muted: rgba(15, 23, 42, 0.55);\\n  border-radius: 8px;\\n  background: var(--apx-tt-bg);\\n  border: 1px solid var(--apx-tt-border);\\n  box-shadow: var(--apx-tt-shadow);\\n  color: var(--apx-tt-color);\\n  cursor: default;\\n  font-size: 13px;\\n  left: 0;\\n  top: 0;\\n  opacity: 0;\\n  pointer-events: none;\\n  position: absolute;\\n  display: flex;\\n  flex-direction: column;\\n  padding: 2px 0;\\n  white-space: nowrap;\\n  z-index: 12;\\n  transition: opacity .12s ease\\n}\\n\\n/* While the tooltip is visible, smoothly animate position changes\\n * between data points. Kept short (160 ms) and ease-out so it stays\\n * responsive — too long would feel laggy when sweeping across many\\n * points fast. The position transition is only attached after the\\n * first paint (Position.applyTooltipPosition flips `data-positioned`\\n * once the tooltip has been placed) so the *first* show doesn\\'t slide\\n * the tooltip in from the previously-stale (0,0) coordinates. */\\n.apexcharts-tooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: opacity .12s ease\\n}\\n.apexcharts-tooltip.apexcharts-active[data-positioned=\"true\"] {\\n  transition: opacity .12s ease, left .16s ease-out, top .16s ease-out\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light {\\n  /* defaults already set above; class kept for backward-compat selectors */\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-dark {\\n  --apx-tt-bg: #1c1c1f;\\n  --apx-tt-border: rgba(255, 255, 255, 0.08);\\n  --apx-tt-shadow: 0 0 0 1px rgba(0, 0, 0, 0.4), 0 var(--apx-tt-shadow-y-mid) 16px -6px rgba(0, 0, 0, 0.45), 0 var(--apx-tt-shadow-y-far) 36px -12px rgba(0, 0, 0, 0.55);\\n  --apx-tt-arrow-shadow: drop-shadow(0 0 0.5px rgba(0, 0, 0, 0.55)) drop-shadow(0 var(--apx-tt-arrow-drop-y) 4px rgba(0, 0, 0, 0.45));\\n  --apx-tt-color: #f3f4f6;\\n  --apx-tt-color-muted: rgba(243, 244, 246, 0.55);\\n}\\n\\n.apexcharts-tooltip * {\\n  font-family: inherit\\n}\\n\\n.apexcharts-tooltip-title {\\n  padding: 8px 12px 4px;\\n  font-size: 12px;\\n  font-weight: 600;\\n  letter-spacing: 0.01em;\\n  color: var(--apx-tt-color-muted);\\n  background: transparent;\\n  border-bottom: none;\\n  margin-bottom: 0\\n}\\n\\n.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title,\\n.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {\\n  background: transparent;\\n  border-bottom: none\\n}\\n\\n/* `fillSeriesColor`: each series-group already paints itself with the\\n * series colour. Drop the glass body entirely (transparent bg, no\\n * border, no backdrop-filter, no padding) and clip the coloured\\n * series-group(s) to the tooltip\\'s rounded corners so they fill the\\n * shell edge-to-edge. Text inside the coloured group is forced to\\n * white for contrast. */\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series {\\n  background: transparent;\\n  -webkit-backdrop-filter: none;\\n  backdrop-filter: none;\\n  border: none;\\n  padding: 0;\\n  overflow: hidden;\\n  color: #fff\\n}\\n\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-title {\\n  background: rgba(0, 0, 0, 0.22);\\n  color: #fff;\\n  opacity: 1;\\n  padding: 6px 12px\\n}\\n\\n.apexcharts-tooltip.apexcharts-tooltip-fill-series .apexcharts-tooltip-series-group {\\n  color: #fff\\n}\\n\\n/* Arrow connector — sits *entirely outside* the tooltip body. Shares\\n * the body\\'s solid fill so it reads as a single shape. `filter:\\n * drop-shadow` traces the clipped triangle outline (a regular\\n * `box-shadow` would be erased by the `clip-path`). */\\n.apexcharts-tooltip-arrow {\\n  position: absolute;\\n  width: 7px;\\n  height: 14px;\\n  background: var(--apx-tt-arrow-bg);\\n  /* The variable already contains the full `drop-shadow(...) ...` filter\\n   * chain (stacked shadows) so it\\'s applied raw. */\\n  -webkit-filter: var(--apx-tt-arrow-shadow);\\n  filter: var(--apx-tt-arrow-shadow);\\n  pointer-events: none;\\n  top: calc(var(--apx-tt-arrow-y, 50%) - 7px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"right\"] .apexcharts-tooltip-arrow {\\n  left: -7px;\\n  clip-path: polygon(0 50%, 100% 0, 100% 100%)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"left\"] .apexcharts-tooltip-arrow {\\n  right: -7px;\\n  clip-path: polygon(100% 50%, 0 0, 0 100%)\\n}\\n\\n/* Vertical arrow variants: tooltip is above/below the data point and the\\n * arrow points down/up. The base rule above uses `--apx-tt-arrow-y` for\\n * left/right placement; for top/bottom we re-orient the rectangle and\\n * use `--apx-tt-arrow-x` (set by applyTooltipPosition). */\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow,\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  width: 14px;\\n  height: 7px;\\n  top: auto;\\n  left: calc(var(--apx-tt-arrow-x, 50%) - 7px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow {\\n  bottom: -7px;\\n  clip-path: polygon(50% 100%, 0 0, 100% 0)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  top: -7px;\\n  clip-path: polygon(50% 0, 0 100%, 100% 100%)\\n}\\n\\n/* When the tooltip is flipped below the data point (arrow on top\\n * pointing up), the default downward-biased shadows leave the top\\n * edge of both the body *and* the arrow undefined. Flipping every\\n * Y offset to negative casts the entire elevation upward so the\\n * shadow falls between the tooltip and the bar above. */\\n.apexcharts-tooltip[data-placement=\"bottom\"] {\\n  --apx-tt-shadow-y-mid: -8px;\\n  --apx-tt-shadow-y-far: -16px;\\n  --apx-tt-arrow-drop-y: -2px\\n}\\n\\n.apexcharts-tooltip-text-goals-value,\\n.apexcharts-tooltip-text-y-value,\\n.apexcharts-tooltip-text-z-value {\\n  display: inline-block;\\n  margin-left: 5px;\\n  font-weight: 600\\n}\\n\\n.apexcharts-tooltip-text-goals-label:empty,\\n.apexcharts-tooltip-text-goals-value:empty,\\n.apexcharts-tooltip-text-y-label:empty,\\n.apexcharts-tooltip-text-y-value:empty,\\n.apexcharts-tooltip-text-z-value:empty,\\n.apexcharts-tooltip-title:empty {\\n  display: none\\n}\\n\\n.apexcharts-tooltip-text-goals-label,\\n.apexcharts-tooltip-text-goals-value {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-tooltip-goals-group,\\n.apexcharts-tooltip-text-goals-label,\\n.apexcharts-tooltip-text-goals-value {\\n  display: flex\\n}\\n\\n.apexcharts-tooltip-text-goals-label:not(:empty),\\n.apexcharts-tooltip-text-goals-value:not(:empty) {\\n  margin-top: -6px\\n}\\n\\n.apexcharts-tooltip-marker {\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  position: relative;\\n  width: 12px;\\n  height: 12px;\\n  margin-right: 6px;\\n  vertical-align: middle;\\n  color: inherit;\\n}\\n\\n.apexcharts-tooltip-marker svg {\\n  width: 100%;\\n  height: 100%;\\n  display: block;\\n}\\n\\n.apexcharts-tooltip-series-group {\\n  padding: 4px 12px;\\n  display: none;\\n  gap: 8px;\\n  text-align: left;\\n  justify-content: left;\\n  align-items: center\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {\\n  opacity: 1\\n}\\n\\n.apexcharts-tooltip-series-group.apexcharts-active:last-child,\\n.apexcharts-tooltip-series-group:last-child {\\n  padding-bottom: 8px\\n}\\n\\n.apexcharts-tooltip-y-group {\\n  padding: 6px 0 5px\\n}\\n\\n.apexcharts-custom-tooltip,\\n.apexcharts-tooltip-box {\\n  padding: 4px 8px\\n}\\n\\n.apexcharts-tooltip-boxPlot {\\n  display: flex;\\n  flex-direction: column-reverse\\n}\\n\\n.apexcharts-tooltip-box>div {\\n  margin: 4px 0\\n}\\n\\n.apexcharts-tooltip-box span.value {\\n  font-weight: 700\\n}\\n\\n.apexcharts-tooltip-rangebar {\\n  padding: 5px 8px\\n}\\n\\n.apexcharts-tooltip-rangebar .category {\\n  font-weight: 600;\\n  color: #777\\n}\\n\\n.apexcharts-tooltip-rangebar .series-name {\\n  font-weight: 700;\\n  display: block;\\n  margin-bottom: 5px\\n}\\n\\n/* X/Y axis tooltips — small popovers that label the crosshair on the\\n * axes. Restyled to match the modern data-tooltip palette: solid white\\n * body with a subtle border + soft drop-shadow, smaller font, rounded\\n * corners. The arrows still use the CSS border-triangle technique\\n * (cheap, crisp at small sizes); their colours flow from CSS variables\\n * so light/dark themes only need one override per axis. */\\n.apexcharts-xaxistooltip,\\n.apexcharts-yaxistooltip {\\n  --apx-axt-bg: #ffffff;\\n  --apx-axt-border: rgba(15, 23, 42, 0.08);\\n  --apx-axt-color: #0f172a;\\n  --apx-axt-shadow: 0 4px 12px -4px rgba(15, 23, 42, 0.18), 0 1px 3px -1px rgba(15, 23, 42, 0.12);\\n  opacity: 0;\\n  pointer-events: none;\\n  color: var(--apx-axt-color);\\n  font-size: 12px;\\n  font-weight: 500;\\n  text-align: center;\\n  border-radius: 6px;\\n  position: absolute;\\n  z-index: 10;\\n  background: var(--apx-axt-bg);\\n  border: 1px solid var(--apx-axt-border);\\n  box-shadow: var(--apx-axt-shadow)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-theme-dark,\\n.apexcharts-yaxistooltip.apexcharts-theme-dark {\\n  --apx-axt-bg: #1c1c1f;\\n  --apx-axt-border: rgba(255, 255, 255, 0.1);\\n  --apx-axt-color: #f3f4f6;\\n  --apx-axt-shadow: 0 4px 12px -4px rgba(0, 0, 0, 0.55), 0 1px 3px -1px rgba(0, 0, 0, 0.45)\\n}\\n\\n.apexcharts-xaxistooltip {\\n  padding: 4px 8px;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xaxistooltip:after,\\n.apexcharts-xaxistooltip:before {\\n  left: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n/* :before paints the 1px border outline of the triangle (slightly larger\\n * than :after); :after sits inside and paints the fill — leaves a 1px\\n * ring of :before visible at the edges. */\\n.apexcharts-xaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 5px;\\n  margin-left: -5px\\n}\\n\\n.apexcharts-xaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-left: -6px\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after,\\n.apexcharts-xaxistooltip-bottom:before {\\n  bottom: 100%\\n}\\n\\n.apexcharts-xaxistooltip-top:after,\\n.apexcharts-xaxistooltip-top:before {\\n  top: 100%\\n}\\n\\n.apexcharts-xaxistooltip-bottom:after {\\n  border-bottom-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-xaxistooltip-bottom:before {\\n  border-bottom-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-xaxistooltip-top:after {\\n  border-top-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-xaxistooltip-top:before {\\n  border-top-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-xaxistooltip.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-yaxistooltip {\\n  padding: 3px 8px\\n}\\n\\n.apexcharts-yaxistooltip:after,\\n.apexcharts-yaxistooltip:before {\\n  top: 50%;\\n  border: solid transparent;\\n  content: \" \";\\n  height: 0;\\n  width: 0;\\n  position: absolute;\\n  pointer-events: none\\n}\\n\\n.apexcharts-yaxistooltip:after {\\n  border-color: transparent;\\n  border-width: 5px;\\n  margin-top: -5px\\n}\\n\\n.apexcharts-yaxistooltip:before {\\n  border-color: transparent;\\n  border-width: 6px;\\n  margin-top: -6px\\n}\\n\\n.apexcharts-yaxistooltip-left:after,\\n.apexcharts-yaxistooltip-left:before {\\n  left: 100%\\n}\\n\\n.apexcharts-yaxistooltip-right:after,\\n.apexcharts-yaxistooltip-right:before {\\n  right: 100%\\n}\\n\\n.apexcharts-yaxistooltip-left:after {\\n  border-left-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-yaxistooltip-left:before {\\n  border-left-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-yaxistooltip-right:after {\\n  border-right-color: var(--apx-axt-bg)\\n}\\n\\n.apexcharts-yaxistooltip-right:before {\\n  border-right-color: var(--apx-axt-border)\\n}\\n\\n.apexcharts-yaxistooltip.apexcharts-active {\\n  opacity: 1\\n}\\n\\n.apexcharts-yaxistooltip-hidden {\\n  display: none\\n}\\n\\n.apexcharts-xcrosshairs,\\n.apexcharts-ycrosshairs {\\n  pointer-events: none;\\n  opacity: 0;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-xcrosshairs.apexcharts-active,\\n.apexcharts-ycrosshairs.apexcharts-active {\\n  opacity: 1;\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-ycrosshairs-hidden {\\n  opacity: 0\\n}\\n\\n.apexcharts-selection-rect {\\n  cursor: move\\n}\\n\\n.svg_select_shape {\\n  stroke-width: 1;\\n  stroke-dasharray: 10 10;\\n  stroke: black;\\n  stroke-opacity: 0.1;\\n  pointer-events: none;\\n  fill: none;\\n}\\n\\n.svg_select_handle {\\n  stroke-width: 3;\\n  stroke: black;\\n  fill: none;\\n}\\n\\n.svg_select_handle_r {\\n  cursor: e-resize;\\n}\\n\\n.svg_select_handle_l {\\n  cursor: w-resize;\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-zoom {\\n  cursor: crosshair\\n}\\n\\n.apexcharts-svg.apexcharts-zoomable.hovering-pan {\\n  cursor: move\\n}\\n\\n.apexcharts-menu-icon,\\n.apexcharts-pan-icon,\\n.apexcharts-reset-icon,\\n.apexcharts-selection-icon,\\n.apexcharts-toolbar-custom-icon,\\n.apexcharts-zoom-icon,\\n.apexcharts-zoomin-icon,\\n.apexcharts-zoomout-icon {\\n  cursor: pointer;\\n  /* WCAG 2.5.8 Target Size (Minimum): 24×24 CSS px hit target. */\\n  width: 26px;\\n  height: 24px;\\n  line-height: 24px;\\n  color: #6e8192;\\n  text-align: center;\\n  /* Reset native <button> chrome — these are styled via SVG icons. */\\n  padding: 0;\\n  margin: 0;\\n  background: transparent;\\n  border: 0;\\n  border-radius: 5px;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  transition: background-color .12s ease, color .12s ease;\\n}\\n\\n.apexcharts-menu-icon svg,\\n.apexcharts-pan-icon svg,\\n.apexcharts-reset-icon svg,\\n.apexcharts-selection-icon svg,\\n.apexcharts-zoom-icon svg,\\n.apexcharts-zoomin-icon svg,\\n.apexcharts-zoomout-icon svg {\\n  width: 18px;\\n  height: 18px;\\n  fill: none;\\n  stroke: currentColor;\\n  stroke-width: 2;\\n  stroke-linecap: round;\\n  stroke-linejoin: round\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon,\\n.apexcharts-theme-dark .apexcharts-pan-icon,\\n.apexcharts-theme-dark .apexcharts-reset-icon,\\n.apexcharts-theme-dark .apexcharts-selection-icon,\\n.apexcharts-theme-dark .apexcharts-toolbar-custom-icon,\\n.apexcharts-theme-dark .apexcharts-zoom-icon,\\n.apexcharts-theme-dark .apexcharts-zoomin-icon,\\n.apexcharts-theme-dark .apexcharts-zoomout-icon {\\n  color: #d4d6dc\\n}\\n\\n.apexcharts-canvas .apexcharts-pan-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected,\\n.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected {\\n  background: rgba(0, 143, 251, 0.12);\\n  color: #008ffb\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-icon:hover,\\n.apexcharts-theme-light .apexcharts-pan-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-reset-icon:hover,\\n.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-light .apexcharts-zoomin-icon:hover,\\n.apexcharts-theme-light .apexcharts-zoomout-icon:hover {\\n  background: rgba(15, 23, 42, 0.06);\\n  color: #1f2937\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-icon:hover,\\n.apexcharts-theme-dark .apexcharts-pan-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-reset-icon:hover,\\n.apexcharts-theme-dark .apexcharts-selection-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-zoom-icon:not(.apexcharts-selected):hover,\\n.apexcharts-theme-dark .apexcharts-zoomin-icon:hover,\\n.apexcharts-theme-dark .apexcharts-zoomout-icon:hover {\\n  background: rgba(255, 255, 255, 0.08);\\n  color: #fff\\n}\\n\\n.apexcharts-menu-icon,\\n.apexcharts-selection-icon {\\n  position: relative\\n}\\n\\n.apexcharts-toolbar {\\n  position: absolute;\\n  z-index: 11;\\n  display: inline-flex;\\n  align-items: center;\\n  gap: 1px;\\n  padding: 3px;\\n  border-radius: 8px;\\n  background: rgba(255, 255, 255, 0.85);\\n  backdrop-filter: blur(8px);\\n  -webkit-backdrop-filter: blur(8px);\\n}\\n\\n.apexcharts-theme-dark .apexcharts-toolbar {\\n  background: rgba(28, 28, 31, 0.82);\\n}\\n\\n.apexcharts-menu {\\n  background: rgba(255, 255, 255, 0.95);\\n  backdrop-filter: blur(8px);\\n  -webkit-backdrop-filter: blur(8px);\\n  position: absolute;\\n  top: calc(100% + 4px);\\n  border: 1px solid rgba(15, 23, 42, 0.08);\\n  border-radius: 8px;\\n  padding: 4px;\\n  right: 0;\\n  opacity: 0;\\n  min-width: 120px;\\n  transition: opacity .15s ease, transform .15s ease;\\n  transform: translateY(-2px);\\n  pointer-events: none;\\n  box-shadow: 0 4px 16px -4px rgba(15, 23, 42, 0.12), 0 2px 4px -1px rgba(15, 23, 42, 0.06)\\n}\\n\\n.apexcharts-menu.apexcharts-menu-open {\\n  opacity: 1;\\n  transform: translateY(0);\\n  pointer-events: all\\n}\\n\\n.apexcharts-menu-item {\\n  padding: 6px 9px;\\n  font-size: 12px;\\n  border-radius: 5px;\\n  cursor: pointer\\n}\\n\\n.apexcharts-theme-light .apexcharts-menu-item:hover {\\n  background: rgba(15, 23, 42, 0.06)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu {\\n  background: rgba(28, 28, 31, 0.92);\\n  border-color: rgba(255, 255, 255, 0.08);\\n  color: #f3f4f6;\\n  box-shadow: 0 4px 16px -4px rgba(0, 0, 0, 0.5), 0 2px 4px -1px rgba(0, 0, 0, 0.4)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-menu-item:hover {\\n  background: rgba(255, 255, 255, 0.08)\\n}\\n\\n@media screen and (min-width:768px) {\\n  .apexcharts-canvas:hover .apexcharts-toolbar {\\n    opacity: 1\\n  }\\n}\\n\\n/* Toolbar keyboard accessibility: show toolbar when any button inside it is focused */\\n.apexcharts-toolbar:focus-within {\\n  opacity: 1\\n}\\n\\n/* Focus indicator for toolbar icon buttons */\\n.apexcharts-menu-icon:focus-visible,\\n.apexcharts-pan-icon:focus-visible,\\n.apexcharts-reset-icon:focus-visible,\\n.apexcharts-selection-icon:focus-visible,\\n.apexcharts-toolbar-custom-icon:focus-visible,\\n.apexcharts-zoom-icon:focus-visible,\\n.apexcharts-zoomin-icon:focus-visible,\\n.apexcharts-zoomout-icon:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: 1px;\\n  border-radius: 5px\\n}\\n\\n/* Focus indicator for hamburger menu items */\\n.apexcharts-menu-item:focus-visible {\\n  outline: 2px solid var(--apexcharts-focus-color, #008FFB);\\n  outline-offset: -2px;\\n  background: #eee\\n}\\n\\n.apexcharts-canvas .apexcharts-element-hidden,\\n.apexcharts-datalabel.apexcharts-element-hidden,\\n.apexcharts-hide .apexcharts-series-points {\\n  opacity: 0;\\n}\\n\\n.apexcharts-hidden-element-shown {\\n  opacity: 1;\\n  transition: 0.25s ease all;\\n}\\n\\n.apexcharts-datalabel,\\n.apexcharts-datalabel-label,\\n.apexcharts-datalabel-value,\\n.apexcharts-datalabels,\\n.apexcharts-pie-label,\\n.apexcharts-pie-name-label,\\n.apexcharts-pie-name-label-group,\\n.apexcharts-pie-label-connector {\\n  cursor: default;\\n  pointer-events: none\\n}\\n\\n.apexcharts-pie-label-connector {\\n  fill: none\\n}\\n\\n.apexcharts-pie-label-delay {\\n  opacity: 0;\\n  animation-name: opaque;\\n  animation-duration: .3s;\\n  animation-fill-mode: forwards;\\n  animation-timing-function: ease\\n}\\n\\n.apexcharts-radialbar-label {\\n  cursor: pointer;\\n}\\n\\n.apexcharts-annotation-rect,\\n.apexcharts-area-series .apexcharts-area,\\n.apexcharts-gridline,\\n.apexcharts-line,\\n.apexcharts-point-annotation-label,\\n.apexcharts-radar-series path:not(.apexcharts-marker),\\n.apexcharts-radar-series polygon,\\n.apexcharts-toolbar svg,\\n.apexcharts-tooltip .apexcharts-marker,\\n.apexcharts-xaxis-annotation-label,\\n.apexcharts-yaxis-annotation-label,\\n.apexcharts-zoom-rect,\\n.no-pointer-events {\\n  pointer-events: none\\n}\\n\\n.apexcharts-tooltip-active .apexcharts-marker {\\n  transition: .15s ease all\\n}\\n\\n.apexcharts-radar-series .apexcharts-yaxis {\\n  pointer-events: none;\\n}\\n\\n.resize-triggers {\\n  animation: 1ms resizeanim;\\n  visibility: hidden;\\n  opacity: 0;\\n  height: 100%;\\n  width: 100%;\\n  overflow: hidden\\n}\\n\\n.contract-trigger:before,\\n.resize-triggers,\\n.resize-triggers>div {\\n  content: \" \";\\n  display: block;\\n  position: absolute;\\n  top: 0;\\n  left: 0\\n}\\n\\n.resize-triggers>div {\\n  height: 100%;\\n  width: 100%;\\n  background: #eee;\\n  overflow: auto\\n}\\n\\n.contract-trigger:before {\\n  overflow: hidden;\\n  width: 200%;\\n  height: 200%\\n}\\n\\n.apexcharts-bar-goals-markers {\\n  pointer-events: none\\n}\\n\\n.apexcharts-bar-shadows {\\n  pointer-events: none\\n}\\n\\n.apexcharts-rangebar-goals-markers {\\n  pointer-events: none\\n}\\n\\n.apexcharts-drilldown-target {\\n  cursor: pointer\\n}\\n\\n.apexcharts-breadcrumb {\\n  position: absolute;\\n  z-index: 11;\\n  display: inline-flex;\\n  align-items: center;\\n  gap: 2px;\\n  font-size: 12px;\\n  font-family: inherit;\\n  padding: 2px 4px\\n}\\n\\n.apexcharts-breadcrumb-item {\\n  background: transparent;\\n  border: none;\\n  padding: 2px 6px;\\n  border-radius: 3px;\\n  font: inherit;\\n  color: inherit;\\n  cursor: pointer;\\n  line-height: 1.2\\n}\\n\\n.apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\\n  background: rgba(0, 0, 0, 0.08)\\n}\\n\\n.apexcharts-breadcrumb-arrow {\\n  margin-right: 4px;\\n  font-weight: 600;\\n  user-select: none\\n}\\n\\n.apexcharts-breadcrumb-current {\\n  cursor: default;\\n  font-weight: 600;\\n  opacity: 0.85\\n}\\n\\n.apexcharts-breadcrumb-separator {\\n  opacity: 0.5;\\n  user-select: none\\n}\\n\\n.apexcharts-theme-dark .apexcharts-breadcrumb-item:hover:not(.apexcharts-breadcrumb-current) {\\n  background: rgba(255, 255, 255, 0.12)\\n}\\n\\n.apexcharts-disable-transitions * {\\n  transition: none !important;\\n}';\nclass ApexCharts {\n  /**\n   * Creates a new ApexCharts instance.\n   *\n   * @param {HTMLElement} el - The DOM element to render the chart into.\n   * @param {ApexOptions} opts - Chart configuration options.\n   */\n  constructor(el, opts) {\n    // Module properties set dynamically by InitCtxVariables.initModules().\n    // Declared as typed class fields so @ts-check resolves them throughout the\n    // class body without errors. Each field typed as `any` since the modules are\n    // plain objects whose specific shapes are not yet typed.\n    /** @type {any} */\n    __publicField(this, \"core\");\n    /** @type {any} */\n    __publicField(this, \"responsive\");\n    /** @type {any} */\n    __publicField(this, \"axes\");\n    /** @type {any} */\n    __publicField(this, \"grid\");\n    /** @type {any} */\n    __publicField(this, \"graphics\");\n    /** @type {any} */\n    __publicField(this, \"coreUtils\");\n    /** @type {any} */\n    __publicField(this, \"crosshairs\");\n    /** @type {any} */\n    __publicField(this, \"events\");\n    /** @type {any} */\n    __publicField(this, \"fill\");\n    /** @type {any} */\n    __publicField(this, \"localization\");\n    /** @type {any} */\n    __publicField(this, \"options\");\n    /** @type {any} */\n    __publicField(this, \"series\");\n    /** @type {any} */\n    __publicField(this, \"theme\");\n    /** @type {any} */\n    __publicField(this, \"formatters\");\n    /** @type {any} */\n    __publicField(this, \"titleSubtitle\");\n    /** @type {any} */\n    __publicField(this, \"dimensions\");\n    /** @type {any} */\n    __publicField(this, \"updateHelpers\");\n    /** @type {any} */\n    __publicField(this, \"tooltip\");\n    /** @type {any} */\n    __publicField(this, \"data\");\n    /** @type {any} */\n    __publicField(this, \"animations\");\n    /** @type {any} */\n    __publicField(this, \"exports\");\n    /** @type {any} */\n    __publicField(this, \"legend\");\n    /** @type {any} */\n    __publicField(this, \"toolbar\");\n    /** @type {any} */\n    __publicField(this, \"zoomPanSelection\");\n    /** @type {any} */\n    __publicField(this, \"keyboardNavigation\");\n    /** @type {any} */\n    __publicField(this, \"annotations\");\n    /** @type {any} */\n    __publicField(this, \"morphTypeChange\");\n    /** @type {any} */\n    __publicField(this, \"timeScale\");\n    /** @type {any} */\n    __publicField(this, \"_keyboardNavigation\");\n    /** @type {any} */\n    __publicField(this, \"windowResizeHandler\");\n    /** @type {any} */\n    __publicField(this, \"parentResizeHandler\");\n    /** @type {string[]} */\n    __publicField(this, \"publicMethods\", []);\n    /** @type {string[]} */\n    __publicField(this, \"eventList\", []);\n    /** @type {any} */\n    __publicField(this, \"config\");\n    this.opts = opts;\n    this.ctx = this;\n    this.w = new Base(opts).init();\n    this.el = el;\n    this.w.globals.cuid = Utils$1.randomId();\n    this.w.globals.chartID = this.w.config.chart.id ? Utils$1.escapeString(this.w.config.chart.id) : this.w.globals.cuid;\n    applyAnimationPolicy(this.w);\n    const initCtx = new InitCtxVariables(this);\n    initCtx.initModules();\n    this.lastUpdateOptions = null;\n    this.create = this.create.bind(this);\n    if (Environment.isBrowser()) {\n      this.windowResizeHandler = this._windowResizeHandler.bind(this);\n      this.parentResizeHandler = this._parentResizeCallback.bind(this);\n    }\n  }\n  /**\n   * Renders the chart. Must be called once after construction.\n   *\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after mount.\n   */\n  render() {\n    var _a, _b;\n    if (!((_b = (_a = this.w) == null ? void 0 : _a.config) == null ? void 0 : _b.chart)) {\n      return Promise.reject(\n        new Error(\n          \"ApexCharts: chart configuration is missing or invalid. Ensure the options object includes a `chart` property.\"\n        )\n      );\n    }\n    return new Promise((resolve, reject) => {\n      var _a2;\n      if (Utils$1.elementExists(this.el)) {\n        if (typeof Apex._chartInstances === \"undefined\") {\n          Apex._chartInstances = [];\n        }\n        if (this.w.config.chart.id) {\n          Apex._chartInstances.push({\n            id: this.w.globals.chartID,\n            group: this.w.config.chart.group,\n            chart: this\n          });\n        }\n        this.setLocale(this.w.config.chart.defaultLocale);\n        const beforeMount = this.w.config.chart.events.beforeMount;\n        if (typeof beforeMount === \"function\") {\n          beforeMount(this, this.w);\n        }\n        this.events.fireEvent(\"beforeMount\", [this, this.w]);\n        if (Environment.isBrowser()) {\n          window.addEventListener(\"resize\", this.windowResizeHandler);\n          addResizeListener(\n            /** @type {HTMLElement} */\n            this.el.parentNode,\n            this.parentResizeHandler\n          );\n          const rootNode = (\n            /** @type {any} */\n            this.el.getRootNode && this.el.getRootNode()\n          );\n          const inShadowRoot = Utils$1.is(\"ShadowRoot\", rootNode);\n          const doc = this.el.ownerDocument;\n          let css = inShadowRoot ? rootNode.getElementById(\"apexcharts-css\") : doc.getElementById(\"apexcharts-css\");\n          if (!css) {\n            css = BrowserAPIs.createElementNS(\n              \"http://www.w3.org/1999/xhtml\",\n              \"style\"\n            );\n            css.id = \"apexcharts-css\";\n            css.textContent = apexCSS;\n            const nonce = ((_a2 = this.opts.chart) == null ? void 0 : _a2.nonce) || this.w.config.chart.nonce;\n            if (nonce) {\n              css.setAttribute(\"nonce\", nonce);\n            }\n            if (inShadowRoot) {\n              rootNode.prepend(css);\n            } else if (this.w.config.chart.injectStyleSheet !== false) {\n              doc.head.appendChild(css);\n            }\n          }\n        }\n        const graphData = this.create(this.w.config.series, {});\n        if (!graphData) return resolve(this);\n        this.mount(graphData).then(() => {\n          if (typeof this.w.config.chart.events.mounted === \"function\") {\n            this.w.config.chart.events.mounted(this, this.w);\n          }\n          this.events.fireEvent(\"mounted\", [this, this.w]);\n          resolve(graphData);\n        }).catch((e) => {\n          var _a3, _b2;\n          const enriched = e instanceof Error ? e : new Error(String(e));\n          const err = (\n            /** @type {any} */\n            enriched\n          );\n          err.chartId = (_b2 = (_a3 = this.w) == null ? void 0 : _a3.globals) == null ? void 0 : _b2.chartID;\n          err.el = this.el;\n          reject(enriched);\n        });\n      } else {\n        reject(new Error(\"Element not found\"));\n      }\n    });\n  }\n  /**\n   * @param {any[]} ser\n   * @param {object} opts\n   */\n  create(ser, opts) {\n    var _a, _b, _c;\n    const w = this.w;\n    if (!this.core) {\n      const initCtx = new InitCtxVariables(this);\n      initCtx.initModules();\n    }\n    const gl = this.w.globals;\n    gl.noData = false;\n    gl.animationEnded = false;\n    if (!Utils$1.elementExists(this.el)) {\n      gl.animationEnded = true;\n      return null;\n    }\n    this.responsive.checkResponsiveConfig(opts);\n    if (w.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(w.config);\n      defaults.convertCatToNumericXaxis(w.config, this.ctx);\n    }\n    this.core.setupElements();\n    if (w.config.chart.type === \"treemap\") {\n      w.config.grid.show = false;\n      w.config.yaxis[0].show = false;\n    }\n    if (gl.svgWidth === 0) {\n      gl.animationEnded = true;\n      return null;\n    }\n    let series = ser;\n    ser.forEach((s, realIndex) => {\n      if (s.hidden) {\n        series = this.legend.legendHelpers.getSeriesAfterCollapsing({\n          realIndex\n        });\n      }\n    });\n    const combo = CoreUtils.checkComboSeries(series, w.config.chart.type);\n    gl.comboCharts = combo.comboCharts;\n    gl.comboBarCount = combo.comboBarCount;\n    const allSeriesAreEmpty = series.every((s) => s.data && s.data.length === 0);\n    if (series.length === 0 || allSeriesAreEmpty && gl.collapsedSeries.length < 1) {\n      this.series.handleNoData();\n    }\n    if (Environment.isBrowser()) {\n      this.events.setupEventHandlers();\n    }\n    const parsedState = this.data.parseData(series);\n    this._writeParsedSeriesData(parsedState.seriesData);\n    this._writeParsedRangeData(parsedState.rangeData);\n    this._writeParsedCandleData(parsedState.candleData);\n    this._writeParsedLabelData(parsedState.labelData);\n    this._writeParsedAxisFlags(parsedState.axisFlags);\n    this.theme.init();\n    const markers = new Markers(this.w, this);\n    markers.setGlobalMarkerSize();\n    this.formatters.setLabelFormatters();\n    this.titleSubtitle.draw();\n    if (!gl.noData || gl.collapsedSeries.length === w.seriesData.series.length || w.config.legend.showForSingleSeries) {\n      (_a = this.legend) == null ? void 0 : _a.init();\n    }\n    this.series.hasAllSeriesEqualX();\n    if (gl.axisCharts) {\n      this.core.coreCalculations();\n      if (w.config.xaxis.type !== \"category\") {\n        this.formatters.setLabelFormatters();\n      }\n      if (this.ctx.toolbar) {\n        this.ctx.toolbar.minX = w.globals.minX;\n        this.ctx.toolbar.maxX = w.globals.maxX;\n      }\n    }\n    this.formatters.heatmapLabelFormatters();\n    const coreUtils = new CoreUtils(this.w);\n    coreUtils.getLargestMarkerSize();\n    const layoutState = this.dimensions.plotCoords();\n    this._writeLayoutCoords(layoutState.layout);\n    const xyRatios = this.core.xySettings();\n    this.grid.createGridMask();\n    const elGraph = this.core.plotChartType(series, xyRatios);\n    const dataLabels = new DataLabels(this.w, this);\n    dataLabels.bringForward();\n    if (w.config.dataLabels.background.enabled) {\n      dataLabels.dataLabelsBackground();\n    }\n    this.core.shiftGraphPosition();\n    (_c = (_b = this.legend) == null ? void 0 : _b.heatmapGradientLegend) == null ? void 0 : _c.repositionToPlot();\n    if (w.globals.dataPoints > 50) {\n      w.dom.elWrap.classList.add(\"apexcharts-disable-transitions\");\n    }\n    const dim = {\n      plot: {\n        left: w.layout.translateX,\n        top: w.layout.translateY,\n        width: w.layout.gridWidth,\n        height: w.layout.gridHeight\n      }\n    };\n    return {\n      elGraph,\n      xyRatios,\n      dimensions: dim\n    };\n  }\n  /**\n   * @param {any} graphData\n   */\n  mount(graphData = null) {\n    const me = this;\n    const w = me.w;\n    return new Promise((resolve, reject) => {\n      var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n      if (me.el === null) {\n        return reject(\n          new Error(\"Not enough data to display or target element not found\")\n        );\n      } else if (graphData === null || w.globals.allSeriesCollapsed) {\n        me.series.handleNoData();\n      }\n      me.grid = new Grid(me.w, me);\n      const elgrid = me.grid.drawGrid();\n      const AnnotationsCtor = InitCtxVariables._featureRegistry.get(\"annotations\");\n      me.annotations = AnnotationsCtor ? new AnnotationsCtor(me.w, {\n        theme: me.theme,\n        timeScale: me.timeScale\n      }) : null;\n      (_a = me.annotations) == null ? void 0 : _a.drawImageAnnos();\n      (_b = me.annotations) == null ? void 0 : _b.drawTextAnnos();\n      if (w.config.grid.position === \"back\") {\n        if (elgrid) {\n          w.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_c = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _c.node) {\n          w.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (Array.isArray(graphData.elGraph)) {\n        for (let g = 0; g < graphData.elGraph.length; g++) {\n          w.dom.elGraphical.add(graphData.elGraph[g]);\n        }\n      } else {\n        w.dom.elGraphical.add(graphData.elGraph);\n      }\n      if (w.config.grid.position === \"front\") {\n        if (elgrid) {\n          w.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_d = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _d.node) {\n          w.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (w.config.xaxis.crosshairs.position === \"front\") {\n        me.crosshairs.drawXCrosshairs();\n      }\n      if (w.config.yaxis[0].crosshairs.position === \"front\") {\n        me.crosshairs.drawYCrosshairs();\n      }\n      if (w.config.chart.type !== \"treemap\") {\n        me.axes.drawAxis(w.config.chart.type, elgrid);\n      }\n      const xAxis = new XAxis(this.w, this.ctx, elgrid);\n      const yaxis = new YAxis(\n        this.w,\n        { theme: this.theme, timeScale: this.timeScale },\n        elgrid\n      );\n      if (elgrid !== null) {\n        xAxis.xAxisLabelCorrections();\n        yaxis.setYAxisTextAlignments();\n        w.config.yaxis.map((yaxe, index) => {\n          if (w.globals.ignoreYAxisIndexes.indexOf(index) === -1) {\n            yaxis.yAxisTitleRotate(index, yaxe.opposite);\n          }\n        });\n      }\n      (_e = me.annotations) == null ? void 0 : _e.drawAxesAnnotations();\n      if (!w.globals.noData) {\n        if (Environment.isBrowser() && w.config.tooltip.enabled && !w.globals.noData) {\n          (_f = me.w.globals.tooltip) == null ? void 0 : _f.drawTooltip(graphData.xyRatios);\n        }\n        if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled && w.config.chart.accessibility.keyboard.navigation.enabled) {\n          (_g = me.keyboardNavigation) == null ? void 0 : _g.init();\n        }\n        if (Environment.isBrowser() && w.globals.axisCharts && (w.axisFlags.isXNumeric || /** @type {Record<string,any>} */\n        w.config.xaxis.convertedCatToNumeric || w.axisFlags.isRangeBar)) {\n          if (w.config.chart.zoom.enabled || w.config.chart.selection && w.config.chart.selection.enabled || // @ts-ignore — chart.pan is an internal toolbar config property\n          w.config.chart.pan && w.config.chart.pan.enabled) {\n            (_h = me.zoomPanSelection) == null ? void 0 : _h.init({\n              xyRatios: graphData.xyRatios\n            });\n          }\n        } else {\n          const tools = w.config.chart.toolbar.tools;\n          const toolsArr = [\n            \"zoom\",\n            \"zoomin\",\n            \"zoomout\",\n            \"selection\",\n            \"pan\",\n            \"reset\"\n          ];\n          toolsArr.forEach((t) => {\n            tools[t] = false;\n          });\n        }\n        if (w.config.chart.toolbar.show && !w.globals.allSeriesCollapsed) {\n          (_i = me.toolbar) == null ? void 0 : _i.createToolbar();\n        }\n      }\n      if (w.globals.memory.methodsToExec.length > 0) {\n        w.globals.memory.methodsToExec.forEach((fn) => {\n          fn.method(fn.params, false, fn.context);\n        });\n      }\n      if (!w.globals.axisCharts && !w.globals.noData) {\n        me.core.resizeNonAxisCharts();\n      }\n      resolve(me);\n    });\n  }\n  /**\n   * Destroys the chart instance, removes all DOM elements and event listeners.\n   * After calling this, the instance should not be used again.\n   */\n  destroy() {\n    var _a;\n    if (Environment.isBrowser()) {\n      window.removeEventListener(\"resize\", this.windowResizeHandler);\n      removeResizeListener(\n        /** @type {Element} */\n        this.el.parentNode,\n        this.parentResizeHandler\n      );\n      clearTimeout((_a = this.w.globals.resizeTimer) != null ? _a : void 0);\n    }\n    const chartID = this.w.config.chart.id;\n    if (chartID && Array.isArray(Apex._chartInstances)) {\n      Apex._chartInstances.forEach(\n        (c, i) => {\n          if (c.id === Utils$1.escapeString(chartID)) {\n            Apex._chartInstances.splice(i, 1);\n          }\n        }\n      );\n    }\n    if (this._keyboardNavigation) {\n      this._keyboardNavigation.destroy();\n    }\n    new Destroy(this.ctx).clear({ isUpdating: false });\n  }\n  /**\n   * Merges new options into the existing config and re-renders the chart.\n   *\n   * @param {ApexOptions} options - Partial config object merged with the existing config.\n   * @param {boolean} [redraw=false] - When true, redraws the chart from scratch instead of animating from previous paths.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [updateSyncedCharts=true] - Whether to propagate the update to charts in the same group.\n   * @param {boolean} [overwriteInitialConfig=true] - When true, replaces the stored initial config used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  updateOptions(options2, redraw = false, animate = true, updateSyncedCharts = true, overwriteInitialConfig = true) {\n    const w = this.w;\n    w.interact.selection = void 0;\n    if (this.lastUpdateOptions) {\n      if (Utils$1.shallowEqual(this.lastUpdateOptions, options2)) {\n        return Promise.resolve(this);\n      }\n      if (options2.series && this.lastUpdateOptions.series) {\n        if (JSON.stringify(this.lastUpdateOptions.series) === JSON.stringify(options2.series)) {\n          const optionsWithoutSeries = __spreadValues({}, options2);\n          const lastWithoutSeries = __spreadValues({}, this.lastUpdateOptions);\n          delete optionsWithoutSeries.series;\n          delete lastWithoutSeries.series;\n          if (Utils$1.shallowEqual(optionsWithoutSeries, lastWithoutSeries)) {\n            return Promise.resolve(this);\n          }\n        }\n      }\n    }\n    if (options2.series) {\n      this.data.resetParsingFlags();\n      this.series.resetSeries(false, true, false);\n      if (options2.series.length && options2.series[0].data) {\n        options2.series = options2.series.map(\n          (s, i) => {\n            return this.updateHelpers._extendSeries(s, i);\n          }\n        );\n      }\n      this.updateHelpers.revertDefaultAxisMinMax();\n    }\n    if (options2.xaxis) {\n      options2 = this.updateHelpers.forceXAxisUpdate(options2);\n    }\n    if (options2.yaxis) {\n      options2 = this.updateHelpers.forceYAxisUpdate(options2);\n    }\n    if (w.globals.collapsedSeriesIndices.length > 0) {\n      this.series.clearPreviousPaths();\n    }\n    if (options2.theme) {\n      options2 = this.theme.updateThemeOptions(options2);\n    }\n    return this.updateHelpers._updateOptions(\n      options2,\n      redraw,\n      animate,\n      updateSyncedCharts,\n      overwriteInitialConfig\n    );\n  }\n  /**\n   * Replaces the chart's series data and re-renders.\n   *\n   * @param {ApexAxisChartSeries | ApexNonAxisChartSeries} [newSeries=[]] - The replacement series array.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, replaces the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  updateSeries(newSeries = [], animate = true, overwriteInitialSeries = true) {\n    this.data.resetParsingFlags();\n    this.series.resetSeries(false);\n    this.updateHelpers.revertDefaultAxisMinMax();\n    return this.updateHelpers._updateSeries(\n      newSeries,\n      animate,\n      overwriteInitialSeries\n    );\n  }\n  /**\n   * Appends a new series to the existing series array and re-renders.\n   *\n   * @param {ApexAxisChartSeries[0] | ApexNonAxisChartSeries} newSerie - The series object to append.\n   * @param {boolean} [animate=true] - Whether to animate the update.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, replaces the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  appendSeries(newSerie, animate = true, overwriteInitialSeries = true) {\n    this.data.resetParsingFlags();\n    const newSeries = this.w.config.series.slice();\n    newSeries.push(\n      /** @type {any} */\n      newSerie\n    );\n    this.series.resetSeries(false);\n    this.updateHelpers.revertDefaultAxisMinMax();\n    return this.updateHelpers._updateSeries(\n      newSeries,\n      animate,\n      overwriteInitialSeries\n    );\n  }\n  /**\n   * Appends data points to existing series without replacing them.\n   * Each element of `newData` corresponds to the series at the same index.\n   *\n   * @param {Array<{ data: any[] }>} newData - Data to append, in the same shape as series[].data.\n   * @param {boolean} [overwriteInitialSeries=true] - When true, updates the stored initial series used by resetSeries().\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance after re-render.\n   */\n  appendData(newData, overwriteInitialSeries = true) {\n    const me = this;\n    me.data.resetParsingFlags();\n    me.w.globals.dataChanged = true;\n    me.series.getPreviousPaths();\n    const newSeries = me.w.config.series.slice();\n    for (let i = 0; i < newSeries.length; i++) {\n      if (newData[i] !== null && typeof newData[i] !== \"undefined\") {\n        const srcSerie = (\n          /** @type {any} */\n          newData[i]\n        );\n        const dstSerie = (\n          /** @type {any} */\n          newSeries[i]\n        );\n        for (let j = 0; j < srcSerie.data.length; j++) {\n          dstSerie.data.push(srcSerie.data[j]);\n        }\n      }\n    }\n    me.w.config.series = newSeries;\n    if (overwriteInitialSeries) {\n      me.w.globals.initialSeries = Utils$1.clone(me.w.config.series);\n    }\n    return this.update();\n  }\n  /**\n   * @param {object} [options]\n   */\n  update(options2) {\n    return new Promise((resolve, reject) => {\n      if (this.lastUpdateOptions && JSON.stringify(this.lastUpdateOptions) === JSON.stringify(options2)) {\n        return resolve(this);\n      }\n      this.lastUpdateOptions = Utils$1.clone(options2);\n      new Destroy(this.ctx).clear({ isUpdating: true });\n      const graphData = this.create(this.w.config.series, options2 != null ? options2 : {});\n      if (!graphData) return resolve(this);\n      this.mount(graphData).then(() => {\n        var _a;\n        (_a = this.morphTypeChange) == null ? void 0 : _a.applyChromeFade();\n        if (typeof this.w.config.chart.events.updated === \"function\") {\n          this.w.config.chart.events.updated(this, this.w);\n        }\n        this.events.fireEvent(\"updated\", [this, this.w]);\n        this.w.globals.isDirty = true;\n        resolve(this);\n      }).catch((e) => {\n        reject(e);\n      });\n    });\n  }\n  /**\n   * Fast update path for data-only series changes.\n   *\n   * Skips rebuilding grid, axes, dimensions, legend, annotations, tooltip DOM,\n   * and toolbar. Only recalculates scales and replots the series paths.\n   * Called automatically by _updateSeries() when the fast path is eligible.\n   *\n   * @param {boolean} animate - Whether to animate the update.\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance.\n   */\n  fastUpdate(animate) {\n    return new Promise((resolve, reject) => {\n      var _a;\n      try {\n        const w = this.w;\n        const gl = w.globals;\n        gl.shouldAnimate = animate;\n        gl.dataChanged = true;\n        gl.animationEnded = false;\n        PerformanceCache.invalidateSelectors(w);\n        const gl2 = w.globals;\n        gl2.maxY = -Number.MAX_VALUE;\n        gl2.minY = Number.MIN_VALUE;\n        gl2.minYArr = [];\n        gl2.maxYArr = [];\n        gl2.maxX = -Number.MAX_VALUE;\n        gl2.minX = Number.MAX_VALUE;\n        gl2.initialMaxX = -Number.MAX_VALUE;\n        gl2.initialMinX = Number.MAX_VALUE;\n        gl2.yAxisScale = [];\n        gl2.xAxisScale = null;\n        gl2.xAxisTicksPositions = [];\n        gl2.xRange = 0;\n        gl2.yRange = [];\n        gl2.zRange = 0;\n        gl2.xTickAmount = 0;\n        gl2.multiAxisTickAmount = 0;\n        gl2.pointsArray = [];\n        gl2.dataLabelsRects = [];\n        gl2.lastDrawnDataLabelsIndexes = [];\n        gl2.textRectsCache = /* @__PURE__ */ new Map();\n        gl2.domCache = /* @__PURE__ */ new Map();\n        gl2.cachedSelectors = {};\n        gl2.disableZoomIn = false;\n        gl2.disableZoomOut = false;\n        if (gl.axisCharts) {\n          this.core.coreCalculations();\n          if (w.config.xaxis.type !== \"category\") {\n            this.formatters.setLabelFormatters();\n          }\n        }\n        const xyRatios = this.core.xySettings();\n        const innerEl = w.dom.elGraphical.node;\n        const toRemove = innerEl.querySelectorAll(\n          \".apexcharts-series, .apexcharts-datalabels, .apexcharts-datalabels-background\"\n        );\n        toRemove.forEach(\n          (el) => {\n            var _a2;\n            return (_a2 = el.parentNode) == null ? void 0 : _a2.removeChild(el);\n          }\n        );\n        const elGraph = this.core.plotChartType(w.config.series, xyRatios);\n        const gridEl = innerEl.querySelector(\".apexcharts-grid\");\n        const graphs = Array.isArray(elGraph) ? elGraph : [elGraph];\n        if (gridEl && w.config.grid.position === \"front\") {\n          graphs.forEach((g) => {\n            const node = g && g.node ? g.node : g;\n            if (node) innerEl.insertBefore(node, gridEl);\n          });\n        } else {\n          graphs.forEach((g) => {\n            w.dom.elGraphical.add(g);\n          });\n        }\n        const dataLabels = new DataLabels(w, this);\n        dataLabels.bringForward();\n        if (w.config.dataLabels.background.enabled) {\n          dataLabels.dataLabelsBackground();\n        }\n        if (Environment.isBrowser() && w.config.tooltip.enabled && !gl.noData) {\n          (_a = w.globals.tooltip) == null ? void 0 : _a.drawTooltip(xyRatios);\n        }\n        if (typeof w.config.chart.events.updated === \"function\") {\n          w.config.chart.events.updated(this, w);\n        }\n        this.events.fireEvent(\"updated\", [this, w]);\n        gl.isDirty = true;\n        resolve(this);\n      } catch (e) {\n        reject(e);\n      }\n    });\n  }\n  /**\n   * Returns all charts in the same `chart.group` (including this instance),\n   * used to synchronise zoom/pan across grouped charts.\n   *\n   * @returns {ApexCharts[]}\n   */\n  getSyncedCharts() {\n    const chartGroups = this.getGroupedCharts();\n    let allCharts = (\n      /** @type {ApexCharts[]} */\n      [this]\n    );\n    if (chartGroups.length) {\n      allCharts = [];\n      chartGroups.forEach((ch) => {\n        allCharts.push(ch);\n      });\n    }\n    return allCharts;\n  }\n  /**\n   * Returns all charts in the same `chart.group`, excluding this instance.\n   * Used internally to apply hover/zoom effects to sibling charts.\n   *\n   * @returns {ApexCharts[]}\n   */\n  getGroupedCharts() {\n    return Apex._chartInstances.filter((ch) => {\n      if (ch.group) {\n        return true;\n      }\n    }).map(\n      (ch) => this.w.config.chart.group === ch.group ? ch.chart : this\n    );\n  }\n  /**\n   * Retrieves a rendered chart instance by its `chart.id` config value.\n   *\n   * @param {string} id - The chart ID set via `chart.id` in options.\n   * @returns {ApexCharts | undefined}\n   */\n  static getChartByID(id) {\n    const chartId = Utils$1.escapeString(id);\n    if (!Apex._chartInstances) return void 0;\n    const c = Apex._chartInstances.filter(\n      (ch) => ch.id === chartId\n    )[0];\n    return c && c.chart;\n  }\n  /**\n   * Scans the document for elements with a `data-apexcharts` attribute and\n   * `data-options` JSON, then renders a chart in each one automatically.\n   * Useful for non-framework HTML pages.\n   */\n  static initOnLoad() {\n    var _a;\n    const els = document.querySelectorAll(\"[data-apexcharts]\");\n    for (let i = 0; i < els.length; i++) {\n      const el = (\n        /** @type {HTMLElement} */\n        els[i]\n      );\n      const options2 = JSON.parse((_a = els[i].getAttribute(\"data-options\")) != null ? _a : \"\");\n      const apexChart = new ApexCharts(el, options2);\n      apexChart.render();\n    }\n  }\n  /**\n   * This static method allows users to call chart methods without necessarily from the\n   * instance of the chart in case user has assigned chartID to the targeted chart.\n   * The chartID is used for mapping the instance stored in Apex._chartInstances global variable\n   *\n   * This is helpful in cases when you don't have reference of the chart instance\n   * easily and need to call the method from anywhere.\n   * For eg, in React/Vue applications when you have many parent/child components,\n   * and need easy reference to other charts for performing dynamic operations\n   *\n   * @param {string} chartID - The unique identifier which will be used to call methods\n   * on that chart instance\n   * @param {string} fn - The method name to call\n   * @param {...any} opts - The parameters which are accepted in the original method will be passed here in the same order.\n   */\n  static exec(chartID, fn, ...opts) {\n    const chart = this.getChartByID(chartID);\n    if (!chart) return;\n    chart.w.globals.isExecCalled = true;\n    let ret = null;\n    if (chart.publicMethods.indexOf(fn) !== -1) {\n      ret = /** @type {any} */\n      chart[fn](...opts);\n    }\n    return ret;\n  }\n  /**\n   * Deep-merges `source` into `target` and returns the result.\n   * Thin wrapper around the internal `Utils.extend` utility.\n   *\n   * @param {object} target\n   * @param {object} source\n   * @returns {object}\n   */\n  static merge(target, source) {\n    return Utils$1.extend(target, source);\n  }\n  static getThemePalettes() {\n    return getThemePalettes();\n  }\n  /**\n   * Register additional chart types. Used by sub-entry points so that only\n   * the types they include are bundled.\n   *\n   * @param {Record<string, new (...args: any[]) => any>} typeMap  e.g. { line: Line, area: Line }\n   */\n  static use(typeMap) {\n    register(typeMap);\n  }\n  /**\n   * Register optional feature modules (Exports, Legend, Toolbar,\n   * ZoomPanSelection, KeyboardNavigation, Annotations).\n   *\n   * Call this before rendering any chart. Feature entry files (e.g.\n   * `apexcharts/features/legend`) call this automatically when imported.\n   * Note: Tooltip is part of core and does not need to be registered.\n   *\n   * @param {Record<string, new (...args: any[]) => any>} featureMap  e.g. { legend: Legend, exports: Exports }\n   */\n  static registerFeatures(featureMap) {\n    InitCtxVariables.registerFeatures(featureMap);\n  }\n  /**\n   * Toggles (show/hide) the series identified by name.\n   * Mirrors a click on the corresponding legend item.\n   *\n   * @param {string} seriesName\n   * @returns {object | undefined} The collapsed series object, if now hidden.\n   */\n  toggleSeries(seriesName) {\n    return this.series.toggleSeries(seriesName);\n  }\n  /**\n   * Highlights or un-highlights a series when the user hovers a legend item.\n   * Called internally by the legend; not typically called by consumers.\n   *\n   * @param {MouseEvent} e\n   * @param {HTMLElement} targetElement - The legend marker element being hovered.\n   */\n  highlightSeriesOnLegendHover(e, targetElement) {\n    return this.series.toggleSeriesOnHover(e, targetElement);\n  }\n  /**\n   * Makes a previously hidden series visible and re-renders.\n   *\n   * @param {string} seriesName\n   */\n  showSeries(seriesName) {\n    this.series.showSeries(seriesName);\n  }\n  /**\n   * Hides a visible series and re-renders.\n   *\n   * @param {string} seriesName\n   */\n  hideSeries(seriesName) {\n    this.series.hideSeries(seriesName);\n  }\n  /**\n   * Highlights (dims all other series) the series identified by name.\n   *\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    this.series.highlightSeries(seriesName);\n  }\n  /**\n   * Returns whether the series identified by name is currently hidden.\n   *\n   * @param {string} seriesName\n   * @returns {boolean}\n   */\n  isSeriesHidden(seriesName) {\n    return this.series.isSeriesHidden(seriesName);\n  }\n  /**\n   * Resets the chart to the initial series and optionally the initial zoom level.\n   *\n   * @param {boolean} [shouldUpdateChart=true] - When true, triggers a re-render.\n   * @param {boolean} [shouldResetZoom=true] - When true, restores the initial zoom level.\n   */\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true) {\n    this.series.resetSeries(shouldUpdateChart, shouldResetZoom);\n  }\n  /**\n   * Subscribes to a chart event by name.\n   * Supported event names mirror the `chart.events` option keys\n   * (e.g. `'mounted'`, `'updated'`, `'dataPointMouseEnter'`).\n   *\n   * @param {string} name - Event name.\n   * @param {Function} handler - Callback invoked when the event fires.\n   */\n  addEventListener(name2, handler) {\n    this.events.addEventListener(name2, handler);\n  }\n  /**\n   * Removes a previously registered event listener.\n   *\n   * @param {string} name - Event name.\n   * @param {Function} handler - The exact function reference passed to addEventListener.\n   */\n  removeEventListener(name2, handler) {\n    this.events.removeEventListener(name2, handler);\n  }\n  /**\n   * Adds an x-axis annotation dynamically after render.\n   *\n   * @param {XAxisAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addXaxisAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addXaxisAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Adds a y-axis annotation dynamically after render.\n   *\n   * @param {YAxisAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addYaxisAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addYaxisAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Adds a point annotation dynamically after render.\n   *\n   * @param {PointAnnotations} opts - Annotation configuration.\n   * @param {boolean} [pushToMemory=true] - When true, the annotation persists across re-renders.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  addPointAnnotation(opts, pushToMemory = true, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.addPointAnnotationExternal(opts, pushToMemory, me);\n  }\n  /**\n   * Removes all annotations from the chart.\n   *\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  clearAnnotations(context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.clearAnnotations(me);\n  }\n  /**\n   * Removes a specific annotation by its `id`.\n   *\n   * @param {string} id - The annotation id as set in the annotation config.\n   * @param {ApexCharts} [context] - Override the target chart instance (used by exec()).\n   */\n  removeAnnotation(id, context = void 0) {\n    var _a;\n    let me = (\n      /** @type {ApexCharts} */\n      /** @type {unknown} */\n      this\n    );\n    if (context) {\n      me = context;\n    }\n    (_a = me.annotations) == null ? void 0 : _a.removeAnnotation(me, id);\n  }\n  /**\n   * Returns the inner SVG group element that contains all chart graphics.\n   *\n   * @returns {Element | null}\n   */\n  getChartArea() {\n    const el = this.w.dom.baseEl.querySelector(\".apexcharts-inner\");\n    return el;\n  }\n  /**\n   * Returns the sum of all data points whose x value falls within [minX, maxX].\n   *\n   * @param {number} minX\n   * @param {number} maxX\n   * @returns {number[]} One total per series.\n   */\n  getSeriesTotalXRange(minX, maxX) {\n    return this.coreUtils.getSeriesTotalsXRange(minX, maxX);\n  }\n  /**\n   * Returns the highest y value in the specified series.\n   *\n   * @param {number} [seriesIndex=0]\n   * @returns {number}\n   */\n  getHighestValueInSeries(seriesIndex = 0) {\n    const range = new Range(this.w);\n    return range.getMinYMaxY(seriesIndex).highestY;\n  }\n  /**\n   * Returns the lowest y value in the specified series.\n   *\n   * @param {number} [seriesIndex=0]\n   * @returns {number}\n   */\n  getLowestValueInSeries(seriesIndex = 0) {\n    const range = new Range(this.w);\n    return range.getMinYMaxY(seriesIndex).lowestY;\n  }\n  /**\n   * Returns the sum of each series (the totals used for percentage calculations).\n   *\n   * @returns {number[]}\n   */\n  getSeriesTotal() {\n    return this.w.globals.seriesTotals;\n  }\n  /**\n   * Returns a curated snapshot of chart state for use in formatters, events,\n   * and external integrations. Prefer this over accessing `chart.w` directly.\n   *\n   * The shape of this object is stable and versioned. `chart.w` is internal\n   * and will be restricted in a future major version.\n   */\n  getState() {\n    const w = this.w;\n    const gl = w.globals;\n    return {\n      // Series data — computed/parsed form used for rendering\n      series: w.seriesData.series,\n      seriesNames: w.seriesData.seriesNames,\n      colors: gl.colors,\n      labels: w.labelData.labels,\n      seriesTotals: gl.seriesTotals,\n      seriesPercent: gl.seriesPercent,\n      seriesXvalues: gl.seriesXvalues,\n      seriesYvalues: gl.seriesYvalues,\n      // Axis bounds — updated after each render\n      minX: gl.minX,\n      maxX: gl.maxX,\n      minY: gl.minY,\n      maxY: gl.maxY,\n      minYArr: gl.minYArr,\n      maxYArr: gl.maxYArr,\n      minXDiff: gl.minXDiff,\n      dataPoints: gl.dataPoints,\n      // Axis scale objects — computed tick/scale results\n      xAxisScale: gl.xAxisScale,\n      yAxisScale: gl.yAxisScale,\n      xTickAmount: gl.xTickAmount,\n      // Axis type flags\n      isXNumeric: w.axisFlags.isXNumeric,\n      // Multi-axis series mapping\n      seriesYAxisMap: gl.seriesYAxisMap,\n      seriesYAxisReverseMap: gl.seriesYAxisReverseMap,\n      // Chart dimensions — updated after each render/resize\n      svgWidth: gl.svgWidth,\n      svgHeight: gl.svgHeight,\n      gridWidth: w.layout.gridWidth,\n      gridHeight: w.layout.gridHeight,\n      // Interactive state\n      selectedDataPoints: w.interact.selectedDataPoints,\n      collapsedSeriesIndices: gl.collapsedSeriesIndices,\n      zoomed: w.interact.zoomed,\n      // Chart-type-specific series data (null when not applicable)\n      seriesX: w.seriesData.seriesX,\n      seriesZ: w.seriesData.seriesZ,\n      seriesCandleO: w.candleData.seriesCandleO,\n      seriesCandleH: w.candleData.seriesCandleH,\n      seriesCandleM: w.candleData.seriesCandleM,\n      seriesCandleL: w.candleData.seriesCandleL,\n      seriesCandleC: w.candleData.seriesCandleC,\n      seriesRangeStart: w.rangeData.seriesRangeStart,\n      seriesRangeEnd: w.rangeData.seriesRangeEnd,\n      seriesGoals: w.seriesData.seriesGoals\n    };\n  }\n  /**\n   * Programmatically selects or deselects a data point.\n   * Equivalent to a user click on the data point.\n   *\n   * @param {number} seriesIndex - Zero-based series index.\n   * @param {number} [dataPointIndex] - Zero-based data point index within the series.\n   * @returns {number[][] | null} Updated selectedDataPoints array, or null.\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    return this.updateHelpers.toggleDataPointSelection(\n      seriesIndex,\n      dataPointIndex\n    );\n  }\n  /**\n   * Programmatically zooms the x-axis to the given range.\n   * Requires zoom to be enabled (`chart.zoom.enabled: true`).\n   *\n   * @param {number} min - The minimum x value (timestamp or numeric).\n   * @param {number} max - The maximum x value (timestamp or numeric).\n   */\n  zoomX(min, max) {\n    var _a;\n    (_a = this.ctx.toolbar) == null ? void 0 : _a.zoomUpdateOptions(min, max);\n  }\n  /**\n   * Switches the active locale, updating all locale-dependent labels (toolbar tooltips, month names, etc.).\n   *\n   * @param {string} localeName - Must match a locale name defined in `chart.locales`.\n   */\n  setLocale(localeName) {\n    this.localization.setCurrentLocaleValues(localeName);\n  }\n  /**\n   * Exports the chart to a PNG or SVG data URI.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {{ scale?: number, width?: number }} [options]\n   * @returns {Promise<{ imgURI: string } | { blob: Blob }>}\n   */\n  dataURI(options2) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.dataURI(options2);\n  }\n  /**\n   * Returns the chart's SVG markup as a string, optionally scaled.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {number} [scale=1]\n   * @returns {Promise<string>}\n   */\n  getSvgString(scale) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.getSvgString(scale);\n  }\n  /**\n   * Triggers a CSV download of the chart's data.\n   * Requires the Exports feature: `import 'apexcharts/features/exports'`.\n   *\n   * @param {{ series?: any, fileName?: string, columnDelimiter?: string, lineDelimiter?: string }} [options]\n   */\n  exportToCSV(options2 = {}) {\n    if (!this.ctx.exports)\n      throw new Error(\n        \"apexcharts: Exports feature is not registered. Import apexcharts/features/exports.\"\n      );\n    return this.ctx.exports.exportToCSV(options2);\n  }\n  paper() {\n    return this.w.dom.Paper;\n  }\n  /**\n   * Drills into the child level referenced by `id` (a `chart.drilldown.series` entry).\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @param {string|number} id - The drilldown series id to navigate into.\n   * @returns {Promise<ApexCharts>}\n   */\n  drillDown(id) {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillDown(id);\n  }\n  /**\n   * Navigates back one drilldown level.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @returns {Promise<ApexCharts>}\n   */\n  drillUp() {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillUp();\n  }\n  /**\n   * Navigates back to the root drilldown level.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @returns {Promise<ApexCharts>}\n   */\n  drillToRoot() {\n    if (!this.ctx.drilldown)\n      throw new Error(\n        \"apexcharts: Drilldown feature is not registered. Import apexcharts/features/drilldown.\"\n      );\n    return this.ctx.drilldown.drillToRoot();\n  }\n  // ─── Slice write-back stubs ─────────────────────────────────────────────────\n  /**\n   * @param {Partial<import('./types/internal').SeriesData>} slice\n   */\n  _writeParsedSeriesData(slice) {\n    Object.assign(this.w.seriesData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').RangeData>} slice\n   */\n  _writeParsedRangeData(slice) {\n    Object.assign(this.w.rangeData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').CandleData>} slice\n   */\n  _writeParsedCandleData(slice) {\n    Object.assign(this.w.candleData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LabelData>} slice\n   */\n  _writeParsedLabelData(slice) {\n    Object.assign(this.w.labelData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').AxisFlags>} slice\n   */\n  _writeParsedAxisFlags(slice) {\n    Object.assign(this.w.axisFlags, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LayoutCoords>} slice\n   */\n  _writeLayoutCoords(slice) {\n    Object.assign(this.w.layout, slice);\n  }\n  _parentResizeCallback() {\n    if (this.w.globals.animationEnded && this.w.config.chart.redrawOnParentResize) {\n      this._windowResize();\n    }\n  }\n  /**\n   * Handle window resize and re-draw the whole chart.\n   */\n  _windowResize() {\n    this.w.globals.resizeTimer = window.setTimeout(() => {\n      this.w.globals.resized = true;\n      this.w.globals.dataChanged = false;\n      this.ctx.update();\n    }, 150);\n  }\n  _windowResizeHandler() {\n    var _a;\n    clearTimeout((_a = this.w.globals.resizeTimer) != null ? _a : void 0);\n    let { redrawOnWindowResize: redraw } = this.w.config.chart;\n    if (typeof redraw === \"function\") {\n      redraw = /** @type {any} */\n      redraw();\n    }\n    redraw && this._windowResize();\n  }\n}\nconst apexchartsLegendCSS = \".apexcharts-flip-y {\\n  transform: scaleY(-1) translateY(-100%);\\n  transform-origin: top;\\n  transform-box: fill-box;\\n}\\n.apexcharts-flip-x {\\n  transform: scaleX(-1);\\n  transform-origin: center;\\n  transform-box: fill-box;\\n}\\n.apexcharts-legend {\\n  display: flex;\\n  overflow: auto;\\n  padding: 0 10px;\\n}\\n.apexcharts-legend.apexcharts-legend-group-horizontal {\\n  flex-direction: column;\\n}\\n.apexcharts-legend-group {\\n  display: flex;\\n}\\n.apexcharts-legend-group-vertical {\\n  flex-direction: column-reverse;\\n}\\n.apexcharts-legend.apx-legend-position-bottom, .apexcharts-legend.apx-legend-position-top {\\n  flex-wrap: wrap\\n}\\n.apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\n  flex-direction: column;\\n  bottom: 0;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-left, .apexcharts-legend.apx-legend-position-top.apexcharts-align-left, .apexcharts-legend.apx-legend-position-right, .apexcharts-legend.apx-legend-position-left {\\n  justify-content: flex-start;\\n  align-items: flex-start;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-center, .apexcharts-legend.apx-legend-position-top.apexcharts-align-center {\\n  justify-content: center;\\n  align-items: center;\\n}\\n.apexcharts-legend.apx-legend-position-bottom.apexcharts-align-right, .apexcharts-legend.apx-legend-position-top.apexcharts-align-right {\\n  justify-content: flex-end;\\n  align-items: flex-end;\\n}\\n.apexcharts-legend-series {\\n  cursor: pointer;\\n  line-height: normal;\\n  display: flex;\\n  align-items: center;\\n}\\n.apexcharts-legend-text {\\n  position: relative;\\n  font-size: 14px;\\n}\\n.apexcharts-legend-text *, .apexcharts-legend-marker * {\\n  pointer-events: none;\\n}\\n.apexcharts-legend-marker {\\n  position: relative;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  cursor: pointer;\\n  margin-right: 1px;\\n}\\n\\n.apexcharts-legend-series.apexcharts-no-click {\\n  cursor: auto;\\n}\\n.apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series {\\n  display: none !important;\\n}\\n.apexcharts-inactive-legend {\\n  opacity: 0.45;\\n} \";\nclass Exports {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n  }\n  /**\n   * @param {string} svgString\n   */\n  svgStringToNode(svgString) {\n    const parser = new DOMParser();\n    const svgDoc = parser.parseFromString(svgString, \"image/svg+xml\");\n    return svgDoc.documentElement;\n  }\n  /**\n   * @param {any} svg\n   * @param {number} scale\n   */\n  scaleSvgNode(svg, scale) {\n    const svgWidth = parseFloat(svg.getAttributeNS(null, \"width\"));\n    const svgHeight = parseFloat(svg.getAttributeNS(null, \"height\"));\n    svg.setAttributeNS(null, \"width\", svgWidth * scale);\n    svg.setAttributeNS(null, \"height\", svgHeight * scale);\n    svg.setAttributeNS(null, \"viewBox\", \"0 0 \" + svgWidth + \" \" + svgHeight);\n  }\n  /**\n   * @param {number} [_scale]\n   */\n  getSvgString(_scale) {\n    return new Promise((resolve) => {\n      const w = this.w;\n      let scale = _scale || w.config.chart.toolbar.export.scale || w.config.chart.toolbar.export.width / w.globals.svgWidth;\n      if (!scale) {\n        scale = 1;\n      }\n      const width = w.globals.svgWidth * scale;\n      const height = w.globals.svgHeight * scale;\n      const clonedNode = (\n        /** @type {HTMLElement} */\n        w.dom.elWrap.cloneNode(true)\n      );\n      clonedNode.style.width = width + \"px\";\n      clonedNode.style.height = height + \"px\";\n      const serializedNode = new XMLSerializer().serializeToString(clonedNode);\n      const shouldIncludeLegendStyles = w.config.legend.show && w.dom.elLegendWrap && w.dom.elLegendWrap.children.length > 0;\n      let exportStyles = `\n        .apexcharts-tooltip, .apexcharts-toolbar, .apexcharts-xaxistooltip, .apexcharts-yaxistooltip, .apexcharts-xcrosshairs, .apexcharts-ycrosshairs, .apexcharts-zoom-rect, .apexcharts-selection-rect {\n          display: none;\n        }\n      `;\n      if (shouldIncludeLegendStyles) {\n        exportStyles += apexchartsLegendCSS;\n      }\n      let svgString = `\n        <svg xmlns=\"http://www.w3.org/2000/svg\"\n          version=\"1.1\"\n          xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n          class=\"apexcharts-svg\"\n          xmlns:data=\"ApexChartsNS\"\n          transform=\"translate(0, 0)\"\n          width=\"${w.globals.svgWidth}px\" height=\"${w.globals.svgHeight}px\">\n          <foreignObject width=\"100%\" height=\"100%\">\n            <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"width:${width}px; height:${height}px;\">\n            <style type=\"text/css\">\n              ${exportStyles}\n            </style>\n              ${serializedNode}\n            </div>\n          </foreignObject>\n        </svg>\n      `;\n      const svgNode = this.svgStringToNode(svgString);\n      if (scale !== 1) {\n        this.scaleSvgNode(svgNode, scale);\n      }\n      this.convertImagesToBase64(svgNode).then(() => {\n        svgString = new XMLSerializer().serializeToString(svgNode);\n        resolve(svgString.replace(/&nbsp;/g, \"&#160;\"));\n      });\n    });\n  }\n  /**\n   * @param {any} svgNode\n   */\n  convertImagesToBase64(svgNode) {\n    const images = svgNode.getElementsByTagName(\"image\");\n    const promises = Array.from(images).map((img) => {\n      const href = img.getAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\");\n      if (href && !href.startsWith(\"data:\")) {\n        return this.getBase64FromUrl(href).then((base64) => {\n          img.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", base64);\n        }).catch((error) => {\n          console.error(\"Error converting image to base64:\", error);\n        });\n      }\n      return Promise.resolve();\n    });\n    return Promise.all(promises);\n  }\n  /**\n   * @param {string} url\n   */\n  getBase64FromUrl(url) {\n    if (Environment.isSSR()) return Promise.resolve(url);\n    return new Promise((resolve, reject) => {\n      const img = new Image();\n      img.crossOrigin = \"Anonymous\";\n      img.onload = () => {\n        const canvas = document.createElement(\"canvas\");\n        canvas.width = img.width;\n        canvas.height = img.height;\n        const ctx = canvas.getContext(\"2d\");\n        if (ctx) ctx.drawImage(img, 0, 0);\n        resolve(canvas.toDataURL());\n      };\n      img.onerror = reject;\n      img.src = url;\n    });\n  }\n  svgUrl() {\n    return new Promise((resolve) => {\n      this.getSvgString().then((svgData) => {\n        const svgBlob = new Blob([svgData], {\n          type: \"image/svg+xml;charset=utf-8\"\n        });\n        resolve(URL.createObjectURL(svgBlob));\n      });\n    });\n  }\n  /**\n   * @param {Record<string, any> | undefined} options\n   */\n  dataURI(options2) {\n    if (Environment.isSSR()) return Promise.resolve({ imgURI: \"\" });\n    return new Promise((resolve) => {\n      const w = this.w;\n      const scale = options2 ? options2.scale || options2.width / w.globals.svgWidth : 1;\n      const canvas = document.createElement(\"canvas\");\n      canvas.width = w.globals.svgWidth * scale;\n      canvas.height = parseInt(w.dom.elWrap.style.height, 10) * scale;\n      const canvasBg = w.config.chart.background === \"transparent\" || !w.config.chart.background ? \"#fff\" : w.config.chart.background;\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n      ctx.fillStyle = canvasBg;\n      ctx.fillRect(0, 0, canvas.width * scale, canvas.height * scale);\n      this.getSvgString(scale).then((svgData) => {\n        const svgUrl = \"data:image/svg+xml,\" + encodeURIComponent(svgData);\n        const img = new Image();\n        img.crossOrigin = \"anonymous\";\n        img.onload = () => {\n          ctx.drawImage(img, 0, 0);\n          const edgeCanvas = canvas;\n          if (edgeCanvas.msToBlob) {\n            const blob = edgeCanvas.msToBlob();\n            resolve({ blob });\n          } else {\n            const imgURI = canvas.toDataURL(\"image/png\");\n            resolve({ imgURI });\n          }\n        };\n        img.src = svgUrl;\n      });\n    });\n  }\n  exportToSVG() {\n    this.svgUrl().then((url) => {\n      this.triggerDownload(\n        url,\n        this.w.config.chart.toolbar.export.svg.filename,\n        \".svg\"\n      );\n    });\n  }\n  exportToPng() {\n    const scale = this.w.config.chart.toolbar.export.scale;\n    const width = this.w.config.chart.toolbar.export.width;\n    const option = scale ? { scale } : width ? { width } : void 0;\n    this.dataURI(option).then(({ imgURI, blob }) => {\n      if (blob) {\n        navigator.msSaveOrOpenBlob(blob, this.w.globals.chartID + \".png\");\n      } else {\n        this.triggerDownload(\n          imgURI,\n          this.w.config.chart.toolbar.export.png.filename,\n          \".png\"\n        );\n      }\n    });\n  }\n  /** @param {{ series?: any, fileName?: any, columnDelimiter?: string, lineDelimiter?: string }} opts */\n  exportToCSV({\n    series,\n    fileName,\n    columnDelimiter = \",\",\n    lineDelimiter = \"\\n\"\n  }) {\n    const w = this.w;\n    if (!series) series = w.config.series;\n    let columns = [];\n    const rows = [];\n    let result = \"\";\n    const universalBOM = \"\\uFEFF\";\n    const gSeries = w.seriesData.series.map((s, i) => {\n      return w.globals.collapsedSeriesIndices.indexOf(i) === -1 ? s : [];\n    });\n    const getFormattedCategory = (cat) => {\n      if (typeof w.config.chart.toolbar.export.csv.categoryFormatter === \"function\") {\n        return w.config.chart.toolbar.export.csv.categoryFormatter(cat);\n      }\n      if (w.config.xaxis.type === \"datetime\" && String(cat).length >= 10) {\n        return new Date(cat).toDateString();\n      }\n      return Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join(\"\");\n    };\n    const getFormattedValue = (value) => {\n      return typeof w.config.chart.toolbar.export.csv.valueFormatter === \"function\" ? w.config.chart.toolbar.export.csv.valueFormatter(value) : value;\n    };\n    const seriesMaxDataLength = Math.max(\n      ...series.map((s) => {\n        return s.data ? s.data.length : 0;\n      })\n    );\n    const dataFormat = new Data(this.w);\n    const axesUtils = new AxesUtils(this.w, {\n      theme: this.ctx.theme,\n      timeScale: this.ctx.timeScale\n    });\n    const getCat = (i) => {\n      let cat = \"\";\n      if (!w.globals.axisCharts) {\n        cat = w.config.labels[i];\n      } else {\n        if (w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) {\n          if (w.globals.isBarHorizontal) {\n            const lbFormatter = w.formatters.yLabelFormatters[0];\n            const sr = new Series(this.ctx.w);\n            const activeSeries = sr.getActiveConfigSeriesIndex();\n            cat = lbFormatter(w.labelData.labels[i], {\n              seriesIndex: activeSeries,\n              dataPointIndex: i,\n              w\n            });\n          } else {\n            cat = axesUtils.getLabel(\n              w.labelData.labels,\n              w.labelData.timescaleLabels,\n              0,\n              i\n            ).text;\n          }\n        }\n        if (w.config.xaxis.type === \"datetime\") {\n          if (w.config.xaxis.categories.length) {\n            cat = w.config.xaxis.categories[i];\n          } else if (w.config.labels.length) {\n            cat = w.config.labels[i];\n          }\n        }\n      }\n      if (cat === null) return \"nullvalue\";\n      if (Array.isArray(cat)) {\n        cat = cat.join(\" \");\n      }\n      return Utils$1.isNumber(cat) ? cat : cat.split(columnDelimiter).join(\"\");\n    };\n    const getEmptyDataForCsvColumn = () => {\n      return [...Array(seriesMaxDataLength)].map(() => \"\");\n    };\n    const handleAxisRowsColumns = (s, sI) => {\n      var _a, _b, _c, _d, _e, _f;\n      if (columns.length && sI === 0) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      if (s.data) {\n        s.data = s.data.length && s.data || getEmptyDataForCsvColumn();\n        for (let i = 0; i < s.data.length; i++) {\n          columns = [];\n          let cat = getCat(i);\n          if (cat === \"nullvalue\") continue;\n          if (!cat) {\n            if (dataFormat.isFormatXY()) {\n              cat = series[sI].data[i].x;\n            } else if (dataFormat.isFormat2DArray()) {\n              cat = series[sI].data[i] ? series[sI].data[i][0] : \"\";\n            }\n          }\n          if (sI === 0) {\n            columns.push(getFormattedCategory(cat));\n            for (let ci = 0; ci < w.seriesData.series.length; ci++) {\n              const value = dataFormat.isFormatXY() ? (_a = series[ci].data[i]) == null ? void 0 : _a.y : gSeries[ci][i];\n              columns.push(getFormattedValue(value));\n            }\n          }\n          if (w.config.chart.type === \"candlestick\" || s.type && s.type === \"candlestick\") {\n            columns.pop();\n            columns.push(w.candleData.seriesCandleO[sI][i]);\n            columns.push(w.candleData.seriesCandleH[sI][i]);\n            columns.push(w.candleData.seriesCandleL[sI][i]);\n            columns.push(w.candleData.seriesCandleC[sI][i]);\n          }\n          if (w.config.chart.type === \"boxPlot\" || s.type && s.type === \"boxPlot\") {\n            columns.pop();\n            columns.push(w.candleData.seriesCandleO[sI][i]);\n            columns.push(w.candleData.seriesCandleH[sI][i]);\n            columns.push(w.candleData.seriesCandleM[sI][i]);\n            columns.push(w.candleData.seriesCandleL[sI][i]);\n            columns.push(w.candleData.seriesCandleC[sI][i]);\n          }\n          if (w.config.chart.type === \"rangeBar\") {\n            columns.pop();\n            columns.push(w.rangeData.seriesRangeStart[sI][i]);\n            columns.push(w.rangeData.seriesRangeEnd[sI][i]);\n          }\n          if (w.config.chart.type === \"violin\" || s.type && s.type === \"violin\") {\n            columns.pop();\n            columns.push((_b = w.violinData.seriesViolinMin[sI]) == null ? void 0 : _b[i]);\n            columns.push((_c = w.violinData.seriesViolinMax[sI]) == null ? void 0 : _c[i]);\n            columns.push((_f = (_e = (_d = w.violinData.seriesViolinPoints[sI]) == null ? void 0 : _d[i]) == null ? void 0 : _e.length) != null ? _f : 0);\n          }\n          if (columns.length) {\n            rows.push(columns.join(columnDelimiter));\n          }\n        }\n      }\n    };\n    const handleUnequalXValues = () => {\n      const categories = /* @__PURE__ */ new Set();\n      const data = {};\n      series.forEach((s, sI) => {\n        s == null ? void 0 : s.data.forEach((dataItem) => {\n          let cat, value;\n          if (dataFormat.isFormatXY()) {\n            cat = dataItem.x;\n            value = dataItem.y;\n          } else if (dataFormat.isFormat2DArray()) {\n            cat = dataItem[0];\n            value = dataItem[1];\n          } else {\n            return;\n          }\n          if (!/** @type {Record<string,any>} */\n          data[cat]) {\n            data[cat] = Array(\n              series.length\n            ).fill(\"\");\n          }\n          data[cat][sI] = getFormattedValue(value);\n          categories.add(cat);\n        });\n      });\n      if (columns.length) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      Array.from(categories).sort().forEach((cat) => {\n        rows.push([\n          getFormattedCategory(cat),\n          /** @type {Record<string,any>} */\n          data[cat].join(columnDelimiter)\n        ]);\n      });\n    };\n    columns.push(w.config.chart.toolbar.export.csv.headerCategory);\n    if (w.config.chart.type === \"boxPlot\") {\n      columns.push(\"minimum\");\n      columns.push(\"q1\");\n      columns.push(\"median\");\n      columns.push(\"q3\");\n      columns.push(\"maximum\");\n    } else if (w.config.chart.type === \"candlestick\") {\n      columns.push(\"open\");\n      columns.push(\"high\");\n      columns.push(\"low\");\n      columns.push(\"close\");\n    } else if (w.config.chart.type === \"rangeBar\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n    } else if (w.config.chart.type === \"violin\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n      columns.push(\"observations\");\n    } else {\n      series.map((s, sI) => {\n        const sname = (s.name ? s.name : `series-${sI}`) + \"\";\n        if (w.globals.axisCharts) {\n          columns.push(\n            sname.split(columnDelimiter).join(\"\") ? sname.split(columnDelimiter).join(\"\") : `series-${sI}`\n          );\n        }\n      });\n    }\n    if (!w.globals.axisCharts) {\n      columns.push(w.config.chart.toolbar.export.csv.headerValue);\n      rows.push(columns.join(columnDelimiter));\n    }\n    if (!w.globals.allSeriesHasEqualX && w.globals.axisCharts && !w.config.xaxis.categories.length && !w.config.labels.length) {\n      handleUnequalXValues();\n    } else {\n      series.map((s, sI) => {\n        if (w.globals.axisCharts) {\n          handleAxisRowsColumns(s, sI);\n        } else {\n          columns = [];\n          columns.push(getFormattedCategory(w.labelData.labels[sI]));\n          columns.push(getFormattedValue(gSeries[sI]));\n          rows.push(columns.join(columnDelimiter));\n        }\n      });\n    }\n    result += rows.join(lineDelimiter);\n    this.triggerDownload(\n      \"data:text/csv; charset=utf-8,\" + encodeURIComponent(universalBOM + result),\n      fileName ? fileName : w.config.chart.toolbar.export.csv.filename,\n      \".csv\"\n    );\n  }\n  /**\n   * @param {string} href\n   * @param {string} filename\n   * @param {string} ext\n   */\n  triggerDownload(href, filename, ext) {\n    if (Environment.isSSR()) return;\n    const downloadLink = document.createElement(\"a\");\n    downloadLink.href = href;\n    downloadLink.download = (filename ? filename : this.w.globals.chartID) + ext;\n    document.body.appendChild(downloadLink);\n    downloadLink.click();\n    document.body.removeChild(downloadLink);\n  }\n}\nApexCharts.registerFeatures({ exports: Exports });\nlet Helpers$3 = class Helpers2 {\n  /**\n   * @param {import('./Legend').default} lgCtx\n   */\n  constructor(lgCtx) {\n    this.w = lgCtx.w;\n    this.lgCtx = lgCtx;\n  }\n  getLegendStyles() {\n    if (Environment.isSSR()) return null;\n    const stylesheet = document.createElement(\"style\");\n    stylesheet.setAttribute(\"type\", \"text/css\");\n    const nonce = this.w.config.chart.nonce;\n    if (nonce) {\n      stylesheet.setAttribute(\"nonce\", nonce);\n    }\n    const rule = document.createTextNode(apexchartsLegendCSS);\n    stylesheet.appendChild(rule);\n    return stylesheet;\n  }\n  getLegendDimensions() {\n    const w = this.w;\n    const currLegendsWrap = w.dom.baseEl.querySelector(\".apexcharts-legend\");\n    if (!currLegendsWrap) {\n      return { clwh: 0, clww: 0 };\n    }\n    const { width: currLegendsWrapWidth, height: currLegendsWrapHeight } = currLegendsWrap.getBoundingClientRect();\n    return {\n      clwh: currLegendsWrapHeight,\n      clww: currLegendsWrapWidth\n    };\n  }\n  appendToForeignObject() {\n    var _a;\n    const legendStyles = this.getLegendStyles();\n    if (this.w.config.chart.injectStyleSheet !== false && legendStyles) {\n      (_a = this.w.dom.elLegendForeign) == null ? void 0 : _a.appendChild(legendStyles);\n    }\n  }\n  /**\n   * @param {number} seriesCnt\n   * @param {boolean} isHidden\n   */\n  toggleDataSeries(seriesCnt, isHidden) {\n    var _a, _b;\n    const w = this.w;\n    if (w.globals.axisCharts || w.config.chart.type === \"radialBar\") {\n      w.globals.resized = true;\n      let seriesEl = null;\n      let realIndex = null;\n      w.globals.risingSeries = [];\n      if (w.globals.axisCharts) {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[data\\\\:realIndex='${seriesCnt}']`\n        );\n        if (!seriesEl) return;\n        realIndex = parseInt((_a = seriesEl.getAttribute(\"data:realIndex\")) != null ? _a : \"\", 10);\n      } else {\n        seriesEl = w.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${seriesCnt + 1}']`\n        );\n        if (!seriesEl) return;\n        realIndex = parseInt((_b = seriesEl.getAttribute(\"rel\")) != null ? _b : \"\", 10) - 1;\n      }\n      if (isHidden) {\n        const seriesToMakeVisible = [\n          {\n            cs: w.globals.collapsedSeries,\n            csi: w.globals.collapsedSeriesIndices\n          },\n          {\n            cs: w.globals.ancillaryCollapsedSeries,\n            csi: w.globals.ancillaryCollapsedSeriesIndices\n          }\n        ];\n        seriesToMakeVisible.forEach((r) => {\n          const cs = (\n            /** @type {any} */\n            r.cs\n          );\n          const csi = (\n            /** @type {any} */\n            r.csi\n          );\n          this.riseCollapsedSeries(\n            cs,\n            csi,\n            /** @type {number} */\n            realIndex\n          );\n        });\n      } else {\n        this.hideSeries({ seriesEl, realIndex });\n      }\n      if (w.config.chart.accessibility.enabled) {\n        const legendItem = w.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w.globals.collapsedSeriesIndices.includes(realIndex) || w.globals.ancillaryCollapsedSeriesIndices.includes(realIndex);\n          legendItem.setAttribute(\n            \"aria-pressed\",\n            isCollapsed ? \"true\" : \"false\"\n          );\n          const legendTextEl = legendItem.querySelector(\n            \".apexcharts-legend-text\"\n          );\n          const seriesName = legendTextEl ? legendTextEl.textContent : w.seriesData.seriesNames[seriesCnt];\n          const statusText = isCollapsed ? \"hidden\" : \"visible\";\n          legendItem.setAttribute(\n            \"aria-label\",\n            `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n          );\n        }\n      }\n    } else {\n      const seriesEl = w.dom.Paper.findOne(\n        ` .apexcharts-series[rel='${seriesCnt + 1}'] path`\n      );\n      const type = w.config.chart.type;\n      if (type === \"pie\" || type === \"polarArea\" || type === \"donut\") {\n        const dataLabels = w.config.plotOptions.pie.donut.labels;\n        const graphics = new Graphics(this.w);\n        graphics.pathMouseDown(seriesEl, null);\n        this.lgCtx.printDataLabelsInner(seriesEl.node, dataLabels);\n      }\n      if (w.config.chart.accessibility.enabled) {\n        const legendItem = w.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w.globals.collapsedSeriesIndices.includes(seriesCnt);\n          legendItem.setAttribute(\n            \"aria-pressed\",\n            isCollapsed ? \"true\" : \"false\"\n          );\n          const legendTextEl = legendItem.querySelector(\n            \".apexcharts-legend-text\"\n          );\n          const seriesName = legendTextEl ? legendTextEl.textContent : w.seriesData.seriesNames[seriesCnt];\n          const statusText = isCollapsed ? \"hidden\" : \"visible\";\n          legendItem.setAttribute(\n            \"aria-label\",\n            `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n          );\n        }\n      }\n    }\n  }\n  /** @param {{realIndex: any}} opts */\n  getSeriesAfterCollapsing({ realIndex }) {\n    var _a;\n    const w = this.w;\n    const gl = w.globals;\n    const series = Utils$1.clone(w.config.series);\n    if (gl.axisCharts) {\n      const yaxis = w.config.yaxis[gl.seriesYAxisReverseMap[realIndex]];\n      const collapseData = {\n        index: realIndex,\n        data: series[realIndex].data.slice(),\n        type: series[realIndex].type || w.config.chart.type\n      };\n      if (yaxis && yaxis.show && yaxis.showAlways) {\n        if (gl.ancillaryCollapsedSeriesIndices.indexOf(realIndex) < 0) {\n          gl.ancillaryCollapsedSeries.push(collapseData);\n          gl.ancillaryCollapsedSeriesIndices.push(realIndex);\n        }\n      } else {\n        if (gl.collapsedSeriesIndices.indexOf(realIndex) < 0) {\n          gl.collapsedSeries.push(collapseData);\n          gl.collapsedSeriesIndices.push(realIndex);\n          const removeIndexOfRising = gl.risingSeries.indexOf(realIndex);\n          gl.risingSeries.splice(removeIndexOfRising, 1);\n        }\n      }\n    } else {\n      gl.collapsedSeries.push({\n        index: realIndex,\n        data: series[realIndex],\n        type: (\n          /** @type {any} */\n          (_a = w.config.series[realIndex].type) != null ? _a : \"line\"\n        )\n      });\n      gl.collapsedSeriesIndices.push(realIndex);\n    }\n    gl.allSeriesCollapsed = gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === w.config.series.length;\n    return this._getSeriesBasedOnCollapsedState(series);\n  }\n  /** @param {{seriesEl: any, realIndex: any}} opts */\n  hideSeries({ seriesEl, realIndex }) {\n    const w = this.w;\n    const series = this.getSeriesAfterCollapsing({\n      realIndex\n    });\n    const seriesChildren = seriesEl.childNodes;\n    for (let sc = 0; sc < seriesChildren.length; sc++) {\n      if (seriesChildren[sc].classList.contains(\"apexcharts-series-markers-wrap\")) {\n        if (seriesChildren[sc].classList.contains(\"apexcharts-hide\")) {\n          seriesChildren[sc].classList.remove(\"apexcharts-hide\");\n        } else {\n          seriesChildren[sc].classList.add(\"apexcharts-hide\");\n        }\n      }\n    }\n    this.lgCtx.updateSeries(\n      series,\n      w.config.chart.animations.dynamicAnimation.enabled\n    );\n  }\n  /**\n   * @param {any[]} collapsedSeries\n   * @param {number[]} seriesIndices\n   * @param {number} realIndex\n   */\n  riseCollapsedSeries(collapsedSeries, seriesIndices, realIndex) {\n    const w = this.w;\n    let series = Utils$1.clone(w.config.series);\n    if (collapsedSeries.length > 0) {\n      for (let c = 0; c < collapsedSeries.length; c++) {\n        if (collapsedSeries[c].index === realIndex) {\n          if (w.globals.axisCharts) {\n            series[realIndex].data = collapsedSeries[c].data.slice();\n          } else {\n            series[realIndex] = collapsedSeries[c].data;\n          }\n          if (typeof series[realIndex] !== \"number\") {\n            series[realIndex].hidden = false;\n          }\n          collapsedSeries.splice(c, 1);\n          seriesIndices.splice(c, 1);\n          w.globals.risingSeries.push(realIndex);\n          c--;\n        }\n      }\n      series = this._getSeriesBasedOnCollapsedState(series);\n      this.lgCtx.updateSeries(\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  _getSeriesBasedOnCollapsedState(series) {\n    const w = this.w;\n    let collapsed = 0;\n    if (w.globals.axisCharts) {\n      series.forEach((s, sI) => {\n        if (!(w.globals.collapsedSeriesIndices.indexOf(sI) < 0 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(sI) < 0)) {\n          series[sI].data = [];\n          collapsed++;\n        }\n      });\n    } else {\n      series.forEach((s, sI) => {\n        if (!(w.globals.collapsedSeriesIndices.indexOf(sI) < 0)) {\n          series[sI] = 0;\n          collapsed++;\n        }\n      });\n    }\n    w.globals.allSeriesCollapsed = collapsed === series.length;\n    return series;\n  }\n};\nconst SVG_NS = \"http://www.w3.org/2000/svg\";\nclass HeatmapGradientLegend {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.svgEl = null;\n    this.arrowEl = null;\n    this.hoverValueEl = null;\n    this._min = 0;\n    this._max = 0;\n    this._geom = null;\n    this._bandHitEls = [];\n    this._activeBandIndex = -1;\n    this._onCellEnter = this._onCellEnter.bind(this);\n    this._onCellLeave = this._onCellLeave.bind(this);\n    this._onBandEnter = this._onBandEnter.bind(this);\n    this._onBandLeave = this._onBandLeave.bind(this);\n  }\n  /** Default value formatter for min/max labels and the hover tooltip. */\n  _getFormatter() {\n    const cfg = this.w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    if (typeof cfg.formatter === \"function\") return cfg.formatter;\n    return (v) => {\n      if (!Number.isFinite(v)) return String(v);\n      const abs = Math.abs(v);\n      if (abs >= 1e3) return v.toFixed(0);\n      if (abs >= 10) return v.toFixed(1);\n      return v.toFixed(2);\n    };\n  }\n  /**\n   * True when the user has opted into the gradient legend variant.\n   * @param {any} w\n   */\n  static isEnabled(w) {\n    var _a, _b, _c, _d;\n    const cfg = (_d = (_c = (_b = (_a = w == null ? void 0 : w.config) == null ? void 0 : _a.plotOptions) == null ? void 0 : _b.heatmap) == null ? void 0 : _c.colorScale) == null ? void 0 : _d.gradientLegend;\n    return !!(cfg && cfg.enabled);\n  }\n  /**\n   * Build the gradient legend DOM into `elLegendWrap`.\n   * Caller is responsible for clearing the wrap first.\n   */\n  draw() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    if (!elLegendWrap) return;\n    const cfg = w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    const position = w.config.legend.position;\n    const isVertical = position === \"left\" || position === \"right\";\n    const arrowSize = (_b = (_a = cfg.arrow) == null ? void 0 : _a.size) != null ? _b : 8;\n    const arrowGutter = arrowSize + 4;\n    const labelPadAlongStrip = cfg.showLabels ? 28 : 4;\n    const labelPadAcrossStrip = cfg.showLabels ? 20 : 4;\n    const minLabelWidth = cfg.showLabels ? 44 : 0;\n    const stripLength = this._resolveStripLength(isVertical ? cfg.height : cfg.width, isVertical);\n    const stripThickness = cfg.thickness;\n    const svgWidth = isVertical ? Math.max(stripThickness + arrowGutter + 4, minLabelWidth) : stripLength + labelPadAlongStrip * 2;\n    const svgHeight = isVertical ? stripLength + labelPadAcrossStrip * 2 : stripThickness + arrowGutter + 4;\n    const verticalGroupWidth = stripThickness + arrowGutter;\n    const verticalGroupLeftPad = (svgWidth - verticalGroupWidth) / 2;\n    const stripX = isVertical ? position === \"left\" ? verticalGroupLeftPad : verticalGroupLeftPad + arrowGutter : labelPadAlongStrip;\n    const stripY = isVertical ? labelPadAcrossStrip : position === \"top\" ? arrowGutter : 4;\n    const svg = BrowserAPIs.createElementNS(SVG_NS, \"svg\");\n    svg.setAttribute(\"class\", \"apexcharts-heatmap-gradient-legend\");\n    svg.setAttribute(\"width\", String(svgWidth));\n    svg.setAttribute(\"height\", String(svgHeight));\n    svg.setAttribute(\"overflow\", \"visible\");\n    const defs = BrowserAPIs.createElementNS(SVG_NS, \"defs\");\n    const gradId = `apexcharts-heatmap-gradient-${w.globals.cuid}`;\n    const linearGrad = BrowserAPIs.createElementNS(SVG_NS, \"linearGradient\");\n    linearGrad.setAttribute(\"id\", gradId);\n    if (isVertical) {\n      linearGrad.setAttribute(\"x1\", \"0\");\n      linearGrad.setAttribute(\"y1\", \"1\");\n      linearGrad.setAttribute(\"x2\", \"0\");\n      linearGrad.setAttribute(\"y2\", \"0\");\n    } else {\n      linearGrad.setAttribute(\"x1\", \"0\");\n      linearGrad.setAttribute(\"y1\", \"0\");\n      linearGrad.setAttribute(\"x2\", \"1\");\n      linearGrad.setAttribute(\"y2\", \"0\");\n    }\n    const { min, max, stops, bands } = this._computeStops();\n    this._min = min;\n    this._max = max;\n    stops.forEach((s) => {\n      const stopEl = BrowserAPIs.createElementNS(SVG_NS, \"stop\");\n      stopEl.setAttribute(\"offset\", `${(s.percent * 100).toFixed(2)}%`);\n      stopEl.setAttribute(\"stop-color\", s.color);\n      linearGrad.appendChild(stopEl);\n    });\n    defs.appendChild(linearGrad);\n    svg.appendChild(defs);\n    const rect = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n    rect.setAttribute(\"x\", String(stripX));\n    rect.setAttribute(\"y\", String(stripY));\n    rect.setAttribute(\"width\", String(isVertical ? stripThickness : stripLength));\n    rect.setAttribute(\"height\", String(isVertical ? stripLength : stripThickness));\n    rect.setAttribute(\"rx\", \"2\");\n    rect.setAttribute(\"fill\", `url(#${gradId})`);\n    svg.appendChild(rect);\n    if (cfg.showLabels) {\n      const labelColor = ((_c = cfg.labelStyle) == null ? void 0 : _c.colors) || (Array.isArray(w.config.legend.labels.colors) ? w.config.legend.labels.colors[0] : w.config.legend.labels.colors) || w.config.chart.foreColor;\n      const labelFontSize = ((_d = cfg.labelStyle) == null ? void 0 : _d.fontSize) || \"11px\";\n      const labelFontFamily = ((_e = cfg.labelStyle) == null ? void 0 : _e.fontFamily) || w.config.chart.fontFamily;\n      const fmt = this._getFormatter();\n      const makeLabel = (text, x, y, anchor) => {\n        const t = BrowserAPIs.createElementNS(SVG_NS, \"text\");\n        t.setAttribute(\"x\", String(x));\n        t.setAttribute(\"y\", String(y));\n        t.setAttribute(\"text-anchor\", anchor);\n        t.setAttribute(\"dominant-baseline\", \"middle\");\n        t.setAttribute(\"fill\", labelColor);\n        t.setAttribute(\"font-size\", labelFontSize);\n        if (labelFontFamily) t.setAttribute(\"font-family\", labelFontFamily);\n        t.textContent = String(text);\n        return t;\n      };\n      if (isVertical) {\n        const midX = stripX + stripThickness / 2;\n        svg.appendChild(makeLabel(fmt(min), midX, stripY + stripLength + 10, \"middle\"));\n        svg.appendChild(makeLabel(fmt(max), midX, stripY - 10, \"middle\"));\n      } else {\n        const midY = stripY + stripThickness / 2;\n        svg.appendChild(makeLabel(fmt(min), stripX - 6, midY, \"end\"));\n        svg.appendChild(makeLabel(fmt(max), stripX + stripLength + 6, midY, \"start\"));\n      }\n    }\n    const arrowColor = ((_f = cfg.arrow) == null ? void 0 : _f.color) || w.config.chart.foreColor;\n    const arrow = this._buildArrow(arrowSize, arrowColor, position);\n    svg.appendChild(arrow);\n    this.arrowEl = arrow;\n    this._bandHitEls = [];\n    if (w.config.legend.onItemHover.highlightDataSeries && bands.length > 0) {\n      bands.forEach((b) => {\n        const hit = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n        if (isVertical) {\n          const yTop = stripY + stripLength - b.p2 * stripLength;\n          const yBot = stripY + stripLength - b.p1 * stripLength;\n          hit.setAttribute(\"x\", String(stripX));\n          hit.setAttribute(\"y\", String(yTop));\n          hit.setAttribute(\"width\", String(stripThickness));\n          hit.setAttribute(\"height\", String(Math.max(0, yBot - yTop)));\n        } else {\n          hit.setAttribute(\"x\", String(stripX + b.p1 * stripLength));\n          hit.setAttribute(\"y\", String(stripY));\n          hit.setAttribute(\n            \"width\",\n            String(Math.max(0, (b.p2 - b.p1) * stripLength))\n          );\n          hit.setAttribute(\"height\", String(stripThickness));\n        }\n        hit.setAttribute(\"fill\", \"transparent\");\n        hit.setAttribute(\"class\", \"apexcharts-heatmap-gradient-band\");\n        hit.setAttribute(\"data:range-index\", String(b.index));\n        hit.style.cursor = \"pointer\";\n        svg.appendChild(hit);\n        this._bandHitEls.push(hit);\n      });\n    }\n    this._geom = {\n      isVertical,\n      position,\n      stripX,\n      stripY,\n      stripLength,\n      stripThickness,\n      arrowSize,\n      svgWidth,\n      svgHeight\n    };\n    if (cfg.showHoverValue) {\n      const tt = BrowserAPIs.createElement(\"div\");\n      tt.classList.add(\"apexcharts-heatmap-gradient-legend-value\");\n      tt.style.position = \"absolute\";\n      tt.style.fontSize = ((_g = cfg.labelStyle) == null ? void 0 : _g.fontSize) || \"11px\";\n      tt.style.fontFamily = ((_h = cfg.labelStyle) == null ? void 0 : _h.fontFamily) || w.config.chart.fontFamily || \"\";\n      tt.style.color = w.config.chart.foreColor;\n      tt.style.background = \"rgba(0,0,0,0.65)\";\n      tt.style.color = \"#fff\";\n      tt.style.padding = \"2px 6px\";\n      tt.style.borderRadius = \"3px\";\n      tt.style.pointerEvents = \"none\";\n      tt.style.whiteSpace = \"nowrap\";\n      tt.style.opacity = \"0\";\n      tt.style.transition = \"opacity 120ms ease\";\n      this.hoverValueEl = tt;\n    }\n    elLegendWrap.classList.add(\"apexcharts-heatmap-gradient-legend-wrap\");\n    elLegendWrap.classList.add(\n      \"apx-legend-position-\" + position\n    );\n    elLegendWrap.appendChild(svg);\n    if (this.hoverValueEl) elLegendWrap.appendChild(this.hoverValueEl);\n    this.svgEl = svg;\n    this._applyWrapAlignment(elLegendWrap, position, isVertical, svgWidth, svgHeight);\n    this._attachHoverListeners();\n    this._attachBandHoverListeners();\n  }\n  /**\n   * Resolve a configured length (number = px, string ending in '%' =\n   * percentage of the chart's SVG width/height) to a pixel length.\n   * @param {number|string} value\n   * @param {boolean} isVertical\n   * @returns {number}\n   */\n  _resolveStripLength(value, isVertical) {\n    const w = this.w;\n    const basis = isVertical ? w.globals.svgHeight || w.config.chart.height || 300 : w.globals.svgWidth || w.config.chart.width || 600;\n    if (typeof value === \"string\") {\n      const trimmed = value.trim();\n      if (trimmed.endsWith(\"%\")) {\n        const pct = parseFloat(trimmed) || 0;\n        return Math.max(20, basis * pct / 100);\n      }\n      const n = parseFloat(trimmed);\n      return Number.isFinite(n) ? n : 200;\n    }\n    if (typeof value === \"number\" && Number.isFinite(value)) return value;\n    return 200;\n  }\n  /**\n   * Position the legend wrap and align the gradient strip within it. The\n   * wrap spans the chart's long axis (full width for top/bottom; full\n   * height for left/right) and uses flexbox to honor the `align` config.\n   * Bypasses the standard `setLegendWrapXY` which sizes the wrap to its\n   * content.\n   * @param {HTMLElement} elLegendWrap\n   * @param {'top'|'right'|'bottom'|'left'} position\n   * @param {boolean} isVertical\n   * @param {number} svgWidth\n   * @param {number} svgHeight\n   */\n  _applyWrapAlignment(elLegendWrap, position, isVertical, svgWidth, svgHeight) {\n    const w = this.w;\n    const cfg = w.config.plotOptions.heatmap.colorScale.gradientLegend;\n    const align = cfg.align || \"center\";\n    const edgePad = 12;\n    const chartWidth = w.globals.svgWidth || w.config.chart.width || 600;\n    const chartHeight = w.globals.svgHeight || w.config.chart.height || 300;\n    const userOffsetX = w.config.legend.offsetX || 0;\n    const userOffsetY = w.config.legend.offsetY || 0;\n    elLegendWrap.style.position = \"absolute\";\n    elLegendWrap.style.display = \"block\";\n    elLegendWrap.style.overflow = \"visible\";\n    elLegendWrap.style.padding = \"0\";\n    elLegendWrap.style.width = svgWidth + \"px\";\n    elLegendWrap.style.height = svgHeight + \"px\";\n    elLegendWrap.style.right = \"auto\";\n    elLegendWrap.style.bottom = \"auto\";\n    if (isVertical) {\n      const availableHeight = chartHeight - svgHeight - edgePad * 2;\n      let y;\n      if (align === \"start\") y = edgePad;\n      else if (align === \"end\") y = edgePad + Math.max(0, availableHeight);\n      else y = edgePad + Math.max(0, availableHeight) / 2;\n      elLegendWrap.style.top = y + userOffsetY + \"px\";\n      if (position === \"left\") {\n        elLegendWrap.style.left = edgePad + userOffsetX + \"px\";\n      } else {\n        elLegendWrap.style.left = chartWidth - svgWidth - edgePad + userOffsetX + \"px\";\n      }\n    } else {\n      const availableWidth = chartWidth - svgWidth - edgePad * 2;\n      let x;\n      if (align === \"start\") x = edgePad;\n      else if (align === \"end\") x = edgePad + Math.max(0, availableWidth);\n      else x = edgePad + Math.max(0, availableWidth) / 2;\n      elLegendWrap.style.left = x + userOffsetX + \"px\";\n      if (position === \"top\") {\n        elLegendWrap.style.top = edgePad + userOffsetY + \"px\";\n      } else {\n        elLegendWrap.style.top = chartHeight - svgHeight - edgePad + userOffsetY + \"px\";\n      }\n    }\n  }\n  /**\n   * Re-position the strip once the final layout is known.\n   *\n   * `_applyWrapAlignment` (called during `draw()`, before `plotCoords()`) can\n   * only pin to the chart's outer edge. This runs after layout — when\n   * `translateX/Y`, `gridWidth/Height` and `xAxisHeight` are populated — and:\n   *   - centers the strip within its reserved band on the perpendicular axis\n   *     (between the title and the plot for `top`; the x-axis and the chart\n   *     bottom for `bottom`; the chart edge and the plot for `left`/`right`),\n   *     so the slack is split evenly instead of dumped on one side, and\n   *   - aligns it along the plot's own extent (so `align: 'center'` centers\n   *     over the heatmap, not the whole canvas).\n   * Honors `legend.offsetX/offsetY` for user nudging. Safe to call repeatedly.\n   */\n  repositionToPlot() {\n    var _a, _b;\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const g = w.globals;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    if (!wrap || !this._geom) return;\n    if (!Number.isFinite(g.gridWidth) || !Number.isFinite(g.gridHeight)) return;\n    const { isVertical, position, svgWidth, svgHeight, stripX, stripY, stripThickness } = this._geom;\n    const align = w.config.plotOptions.heatmap.colorScale.gradientLegend.align || \"center\";\n    const ox = w.config.legend.offsetX || 0;\n    const oy = w.config.legend.offsetY || 0;\n    const dimHelpers = (_b = (_a = this.ctx) == null ? void 0 : _a.dimensions) == null ? void 0 : _b.dimHelpers;\n    const titleArea = dimHelpers ? dimHelpers.getTitleSubtitleCoords(\"title\").height + dimHelpers.getTitleSubtitleCoords(\"subtitle\").height : 0;\n    const xAxisArea = w.layout.xAxisHeight || 0;\n    const alongOffset = (extent, size) => {\n      const avail = Math.max(0, extent - size);\n      if (align === \"start\") return 0;\n      if (align === \"end\") return avail;\n      return avail / 2;\n    };\n    if (isVertical) {\n      wrap.style.top = g.translateY + alongOffset(g.gridHeight, svgHeight) + oy + \"px\";\n      const bandStart = position === \"left\" ? 0 : g.translateX + g.gridWidth;\n      const bandEnd = position === \"left\" ? g.translateX : g.svgWidth;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.left = stripCenter - stripX - stripThickness / 2 + ox + \"px\";\n    } else {\n      wrap.style.left = g.translateX + alongOffset(g.gridWidth, svgWidth) + ox + \"px\";\n      const bandStart = position === \"top\" ? titleArea : g.translateY + g.gridHeight + xAxisArea;\n      const bandEnd = position === \"top\" ? g.translateY : g.svgHeight;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.top = stripCenter - stripY - stripThickness / 2 + oy + \"px\";\n    }\n    BrowserAPIs.requestAnimationFrame(() => this._enforceMinPlotGap());\n  }\n  /**\n   * Guarantee a minimum gap between the strip's chart-facing edge and the plot.\n   * Measured in viewport space (immune to the wrap↔SVG coordinate offset) and\n   * applied as a *relative* shift to the wrap's current position, so it only\n   * nudges a strip that ended up too close — placements with ample room are\n   * left exactly where centering put them. Runs post-paint (see caller).\n   */\n  _enforceMinPlotGap() {\n    const w = this.w;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const strip = this.svgEl && this.svgEl.querySelector(\"rect\");\n    const grid = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!wrap || !strip || !grid || !this._geom) return;\n    const s = strip.getBoundingClientRect();\n    const gr = grid.getBoundingClientRect();\n    if (!s.width || !s.height || !gr.width || !gr.height) return;\n    const MIN_GAP = 16;\n    const { isVertical, position } = this._geom;\n    if (isVertical) {\n      const gap = position === \"left\" ? gr.left - s.right : s.left - gr.right;\n      if (gap < MIN_GAP) {\n        const curLeft = parseFloat(wrap.style.left) || 0;\n        const shift = MIN_GAP - gap;\n        wrap.style.left = curLeft + (position === \"left\" ? -shift : shift) + \"px\";\n      }\n    } else {\n      const gap = position === \"top\" ? gr.top - s.bottom : s.top - gr.bottom;\n      if (gap < MIN_GAP) {\n        const curTop = parseFloat(wrap.style.top) || 0;\n        const shift = MIN_GAP - gap;\n        wrap.style.top = curTop + (position === \"top\" ? -shift : shift) + \"px\";\n      }\n    }\n  }\n  /**\n   * Tear down listeners (called before re-render).\n   */\n  destroy() {\n    var _a, _b, _c, _d, _e, _f, _g;\n    for (let i = 0; i < this._bandHitEls.length; i++) {\n      const el = this._bandHitEls[i];\n      (_a = el.removeEventListener) == null ? void 0 : _a.call(el, \"mousemove\", this._onBandEnter);\n      (_b = el.removeEventListener) == null ? void 0 : _b.call(el, \"mouseout\", this._onBandLeave);\n    }\n    this._bandHitEls = [];\n    this._activeBandIndex = -1;\n    if (!((_c = this.ctx) == null ? void 0 : _c.events)) return;\n    try {\n      (_e = (_d = this.ctx.events).removeEventListener) == null ? void 0 : _e.call(\n        _d,\n        \"dataPointMouseEnter\",\n        this._onCellEnter\n      );\n      (_g = (_f = this.ctx.events).removeEventListener) == null ? void 0 : _g.call(\n        _f,\n        \"dataPointMouseLeave\",\n        this._onCellLeave\n      );\n    } catch (_) {\n    }\n  }\n  /** Wire mousemove/mouseout on each per-band hit-region (ranges mode). */\n  _attachBandHoverListeners() {\n    if (!Environment.isBrowser()) return;\n    for (let i = 0; i < this._bandHitEls.length; i++) {\n      const el = this._bandHitEls[i];\n      el.addEventListener(\"mousemove\", this._onBandEnter);\n      el.addEventListener(\"mouseout\", this._onBandLeave);\n    }\n  }\n  /**\n   * Hovering a gradient band highlights its cells and dims the rest. Guarded\n   * so the repeated mousemove stream only re-applies on an actual band change.\n   * @param {Event} e\n   */\n  _onBandEnter(e) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.currentTarget\n    );\n    const idx = parseInt((_a = target.getAttribute(\"data:range-index\")) != null ? _a : \"-1\", 10);\n    if (idx < 0 || idx === this._activeBandIndex) return;\n    this._activeBandIndex = idx;\n    (_d = (_c = (_b = this.ctx) == null ? void 0 : _b.events) == null ? void 0 : _c.fireEvent) == null ? void 0 : _d.call(_c, \"legendHover\", [this.ctx, idx, w]);\n    new Series(w).highlightRangeInSeries(idx, \"highlight\");\n  }\n  /** Leaving a band clears the highlight. */\n  _onBandLeave() {\n    if (this._activeBandIndex < 0) return;\n    const idx = this._activeBandIndex;\n    this._activeBandIndex = -1;\n    new Series(this.w).highlightRangeInSeries(idx, \"reset\");\n  }\n  _attachHoverListeners() {\n    var _a, _b;\n    if (!Environment.isBrowser()) return;\n    if (!((_b = (_a = this.ctx) == null ? void 0 : _a.events) == null ? void 0 : _b.addEventListener)) return;\n    this.ctx.events.addEventListener(\n      \"dataPointMouseEnter\",\n      this._onCellEnter\n    );\n    this.ctx.events.addEventListener(\n      \"dataPointMouseLeave\",\n      this._onCellLeave\n    );\n  }\n  /**\n   * dataPointMouseEnter fires as `(e, ctx, { seriesIndex, dataPointIndex, w })`.\n   * Graphics._fireEvent forwards listener args in the same shape.\n   * @param {...any} args\n   */\n  _onCellEnter(...args) {\n    var _a, _b;\n    const w = this.w;\n    if (!this.arrowEl) return;\n    const opts = args[args.length - 1];\n    if (!opts || typeof opts !== \"object\") return;\n    const i = opts.seriesIndex;\n    const j = opts.dataPointIndex;\n    if (typeof i !== \"number\" || typeof j !== \"number\") return;\n    if (w.config.chart.type !== \"heatmap\") return;\n    const row = (_b = (_a = w.seriesData) == null ? void 0 : _a.series) == null ? void 0 : _b[i];\n    const val = row == null ? void 0 : row[j];\n    if (val == null || Number.isNaN(val)) return;\n    this._positionArrow(val);\n  }\n  _onCellLeave() {\n    if (!this.arrowEl) return;\n    this.arrowEl.setAttribute(\"opacity\", \"0\");\n    if (this.hoverValueEl) {\n      this.hoverValueEl.style.opacity = \"0\";\n    }\n  }\n  /**\n   * Move the arrow to the position corresponding to `val` along the strip.\n   * @param {number} val\n   */\n  _positionArrow(val) {\n    if (!this.arrowEl || !this._geom) return;\n    const { isVertical, position, stripX, stripY, stripLength, stripThickness, arrowSize } = this._geom;\n    const min = this._min;\n    const max = this._max;\n    const span = max - min;\n    let pct;\n    if (span === 0) {\n      pct = 0.5;\n    } else {\n      pct = (val - min) / span;\n    }\n    if (pct < 0) pct = 0;\n    if (pct > 1) pct = 1;\n    if (isVertical) {\n      const yCenter = stripY + stripLength - pct * stripLength;\n      let tipX, baseX;\n      if (position === \"left\") {\n        tipX = stripX + stripThickness;\n        baseX = tipX + arrowSize;\n      } else {\n        tipX = stripX;\n        baseX = tipX - arrowSize;\n      }\n      const points = [\n        `${tipX},${yCenter}`,\n        `${baseX},${yCenter - arrowSize / 2}`,\n        `${baseX},${yCenter + arrowSize / 2}`\n      ].join(\" \");\n      this.arrowEl.setAttribute(\"points\", points);\n    } else {\n      const xCenter = stripX + pct * stripLength;\n      let tipY, baseY;\n      if (position === \"top\") {\n        tipY = stripY + stripThickness;\n        baseY = tipY + arrowSize;\n      } else {\n        tipY = stripY;\n        baseY = tipY - arrowSize;\n      }\n      const points = [\n        `${xCenter},${tipY}`,\n        `${xCenter - arrowSize / 2},${baseY}`,\n        `${xCenter + arrowSize / 2},${baseY}`\n      ].join(\" \");\n      this.arrowEl.setAttribute(\"points\", points);\n    }\n    this.arrowEl.setAttribute(\"opacity\", \"1\");\n    if (this.hoverValueEl) {\n      const fmt = this._getFormatter();\n      this.hoverValueEl.textContent = fmt(val);\n      if (isVertical) {\n        const yCenter = stripY + stripLength - pct * stripLength;\n        if (position === \"left\") {\n          this.hoverValueEl.style.left = `${stripX + stripThickness + arrowSize + 8}px`;\n        } else {\n          this.hoverValueEl.style.left = `${stripX - arrowSize - 8}px`;\n          this.hoverValueEl.style.transform = \"translateX(-100%)\";\n        }\n        this.hoverValueEl.style.top = `${yCenter - 9}px`;\n      } else {\n        const xCenter = stripX + pct * stripLength;\n        this.hoverValueEl.style.left = `${xCenter}px`;\n        this.hoverValueEl.style.transform = \"translateX(-50%)\";\n        if (position === \"top\") {\n          this.hoverValueEl.style.top = `${stripY + stripThickness + arrowSize + 8}px`;\n        } else {\n          this.hoverValueEl.style.top = `${stripY - arrowSize - 18}px`;\n        }\n      }\n      this.hoverValueEl.style.opacity = \"1\";\n    }\n  }\n  /**\n   * @param {number} size\n   * @param {string} color\n   * @param {'top'|'right'|'bottom'|'left'} _position\n   */\n  _buildArrow(size, color, _position) {\n    const polygon = BrowserAPIs.createElementNS(SVG_NS, \"polygon\");\n    polygon.setAttribute(\"fill\", color);\n    polygon.setAttribute(\"opacity\", \"0\");\n    polygon.setAttribute(\"class\", \"apexcharts-heatmap-gradient-arrow\");\n    polygon.setAttribute(\"points\", \"0,0 0,0 0,0\");\n    polygon.setAttribute(\"pointer-events\", \"none\");\n    return polygon;\n  }\n  /**\n   * Build gradient stops + return effective min/max.\n   * - If `colorScale.ranges` is set, stops are placed at each range boundary\n   *   so the gradient reflects the user's discrete palette.\n   * - Otherwise, samples N stops from the same shadeColor function the cells\n   *   use, so the strip visually matches the heatmap.\n   * @returns {{ min: number, max: number, stops: Array<{percent:number,color:string}>, bands: Array<{index:number,p1:number,p2:number}> }}\n   */\n  _computeStops() {\n    var _a, _b;\n    const w = this.w;\n    const cs = w.config.plotOptions.heatmap.colorScale;\n    const cfg = cs.gradientLegend;\n    let dataMin = Infinity;\n    let dataMax = -Infinity;\n    const rows = ((_a = w.seriesData) == null ? void 0 : _a.series) || [];\n    for (let i = 0; i < rows.length; i++) {\n      const row = rows[i];\n      if (!row) continue;\n      for (let j = 0; j < row.length; j++) {\n        const v = row[j];\n        if (v == null || Number.isNaN(v)) continue;\n        if (v < dataMin) dataMin = v;\n        if (v > dataMax) dataMax = v;\n      }\n    }\n    if (!Number.isFinite(dataMin)) dataMin = 0;\n    if (!Number.isFinite(dataMax)) dataMax = 0;\n    let min = dataMin;\n    let max = dataMax;\n    if (typeof cs.min !== \"undefined\") {\n      min = cs.min < dataMin ? cs.min : dataMin;\n    }\n    if (typeof cs.max !== \"undefined\") {\n      max = cs.max > dataMax ? cs.max : dataMax;\n    }\n    const stops = [];\n    const bands = [];\n    if (cs.ranges && cs.ranges.length > 0) {\n      const ranges = cs.ranges.map((r, originalIndex) => __spreadProps(__spreadValues({}, r), {\n        _originalIndex: originalIndex\n      })).sort((a, b) => a.from - b.from);\n      const lo = ranges[0].from;\n      const hi = ranges[ranges.length - 1].to;\n      min = lo;\n      max = hi;\n      const span = hi - lo || 1;\n      ranges.forEach((r) => {\n        const p1 = (r.from - lo) / span;\n        const p2 = (r.to - lo) / span;\n        stops.push({ percent: (p1 + p2) / 2, color: r.color });\n        bands.push({ index: r._originalIndex, p1, p2 });\n      });\n    } else {\n      const baseColor = w.globals.colors[0] || \"#008FFB\";\n      const utils = new Utils$1();\n      const shadeIntensity = (_b = w.config.plotOptions.heatmap.shadeIntensity) != null ? _b : 0.5;\n      const hasNegs = (\n        /** @type {any} */\n        w.globals.hasNegs\n      );\n      const n = Math.max(2, cfg.stops || 16);\n      for (let s = 0; s < n; s++) {\n        const t = s / (n - 1);\n        const v = min + t * (max - min);\n        const total = Math.abs(max) + Math.abs(min);\n        const percent_v = total === 0 ? 0 : 100 * v / total;\n        let colorShadePercent;\n        if (hasNegs) {\n          if (w.config.plotOptions.heatmap.reverseNegativeShade) {\n            colorShadePercent = percent_v < 0 ? percent_v / 100 * (shadeIntensity * 1.25) : (1 - percent_v / 100) * (shadeIntensity * 1.25);\n          } else {\n            colorShadePercent = percent_v <= 0 ? 1 - (1 + percent_v / 100) * shadeIntensity : (1 - percent_v / 100) * shadeIntensity;\n          }\n        } else {\n          colorShadePercent = 1 - percent_v / 100;\n        }\n        if (colorShadePercent > 1) colorShadePercent = 1;\n        if (colorShadePercent < -1) colorShadePercent = -1;\n        const shaded = w.config.plotOptions.heatmap.enableShades ? utils.shadeColor(\n          w.config.theme.mode === \"dark\" ? colorShadePercent * -1 : colorShadePercent,\n          baseColor\n        ) : baseColor;\n        stops.push({ percent: t, color: shaded });\n      }\n    }\n    return { min, max, stops, bands };\n  }\n}\nclass Legend {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.printDataLabelsInner = (...a) => {\n      var _a;\n      return (_a = ctx.pie) == null ? void 0 : _a.printDataLabelsInner(...a);\n    };\n    this.updateSeries = (...a) => ctx.updateHelpers._updateSeries(...a);\n    this.onLegendClick = this.onLegendClick.bind(this);\n    this.onLegendHovered = this.onLegendHovered.bind(this);\n    this.isBarsDistributed = this.w.config.chart.type === \"bar\" && this.w.config.plotOptions.bar.distributed && this.w.config.series.length === 1;\n    this.legendHelpers = new Helpers$3(this);\n  }\n  init() {\n    const w = this.w;\n    const gl = w.globals;\n    const cnf = w.config;\n    this.isBarsDistributed = cnf.chart.type === \"bar\" && cnf.plotOptions.bar.distributed && cnf.series.length === 1;\n    const showLegendAlways = cnf.legend.showForSingleSeries && this.w.seriesData.series.length === 1 || this.isBarsDistributed || // Heatmap legends are colorScale-driven (discrete ranges or the\n    // gradient strip), not series-driven, so they must render even for a\n    // single-row heatmap.\n    cnf.chart.type === \"heatmap\" || this.w.seriesData.series.length > 1;\n    this.legendHelpers.appendToForeignObject();\n    if ((showLegendAlways || !gl.axisCharts) && cnf.legend.show) {\n      const elLegendWrap = (\n        /** @type {HTMLElement} */\n        w.dom.elLegendWrap\n      );\n      while (elLegendWrap.firstChild) {\n        elLegendWrap.removeChild(elLegendWrap.firstChild);\n      }\n      if (this.heatmapGradientLegend) {\n        this.heatmapGradientLegend.destroy();\n        this.heatmapGradientLegend = null;\n      }\n      if (cnf.chart.type === \"heatmap\" && HeatmapGradientLegend.isEnabled(w)) {\n        this.heatmapGradientLegend = new HeatmapGradientLegend(w, this.ctx);\n        this.heatmapGradientLegend.draw();\n      } else {\n        this.drawLegends();\n        if (cnf.legend.position === \"bottom\" || cnf.legend.position === \"top\") {\n          this.legendAlignHorizontal();\n        } else if (cnf.legend.position === \"right\" || cnf.legend.position === \"left\") {\n          this.legendAlignVertical();\n        }\n      }\n    }\n  }\n  createLegendMarker({ i, fillcolor }) {\n    const w = this.w;\n    const elMarker = BrowserAPIs.createElement(\"span\");\n    elMarker.classList.add(\"apexcharts-legend-marker\");\n    const mShape = w.config.legend.markers.shape || w.config.markers.shape;\n    let shape = mShape;\n    if (Array.isArray(mShape)) {\n      shape = mShape[i];\n    }\n    const mSize = Array.isArray(w.config.legend.markers.size) ? parseFloat(w.config.legend.markers.size[i]) : parseFloat(w.config.legend.markers.size);\n    const mOffsetX = Array.isArray(w.config.legend.markers.offsetX) ? parseFloat(w.config.legend.markers.offsetX[i]) : parseFloat(w.config.legend.markers.offsetX);\n    const mOffsetY = Array.isArray(w.config.legend.markers.offsetY) ? parseFloat(w.config.legend.markers.offsetY[i]) : parseFloat(w.config.legend.markers.offsetY);\n    const mBorderWidth = Array.isArray(w.config.legend.markers.strokeWidth) ? parseFloat(w.config.legend.markers.strokeWidth[i]) : parseFloat(w.config.legend.markers.strokeWidth);\n    const mStyle = elMarker.style;\n    mStyle.height = (mSize + mBorderWidth) * 2 + \"px\";\n    mStyle.width = (mSize + mBorderWidth) * 2 + \"px\";\n    mStyle.left = mOffsetX + \"px\";\n    mStyle.top = mOffsetY + \"px\";\n    if (w.config.legend.markers.customHTML) {\n      mStyle.background = \"transparent\";\n      mStyle.color = fillcolor[i];\n      if (Array.isArray(w.config.legend.markers.customHTML)) {\n        if (w.config.legend.markers.customHTML[i]) {\n          elMarker.innerHTML = w.config.legend.markers.customHTML[i]();\n        }\n      } else {\n        elMarker.innerHTML = w.config.legend.markers.customHTML();\n      }\n    } else {\n      const markers = new Markers(this.ctx.w, this.ctx);\n      const markerConfig = markers.getMarkerConfig({\n        cssClass: `apexcharts-legend-marker apexcharts-marker apexcharts-marker-${shape}`,\n        seriesIndex: i,\n        strokeWidth: mBorderWidth,\n        size: mSize\n      });\n      const SVGLib = Environment.isBrowser() ? (\n        /** @type {any} */\n        window.SVG\n      ) : (\n        /** @type {any} */\n        global.SVG\n      );\n      const SVGMarker = SVGLib().addTo(elMarker).size(\"100%\", \"100%\");\n      const marker = new Graphics(this.w).drawMarker(0, 0, __spreadProps(__spreadValues({}, markerConfig), {\n        pointFillColor: Array.isArray(fillcolor) ? fillcolor[i] : markerConfig.pointFillColor,\n        shape\n      }));\n      const shapesEls = w.dom.Paper.find(\n        \".apexcharts-legend-marker.apexcharts-marker\"\n      );\n      shapesEls.forEach((shapeEl) => {\n        if (shapeEl.node.classList.contains(\"apexcharts-marker-triangle\")) {\n          shapeEl.node.style.transform = \"translate(50%, 45%)\";\n        } else {\n          shapeEl.node.style.transform = \"translate(50%, 50%)\";\n        }\n      });\n      SVGMarker.add(marker);\n    }\n    return elMarker;\n  }\n  drawLegends() {\n    var _a;\n    const me = this;\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const fontFamily = w.config.legend.fontFamily;\n    let legendNames = w.seriesData.seriesNames;\n    let fillcolor = w.config.legend.markers.fillColors ? w.config.legend.markers.fillColors.slice() : w.globals.colors.slice();\n    if (w.config.chart.type === \"heatmap\") {\n      const ranges = w.config.plotOptions.heatmap.colorScale.ranges;\n      legendNames = ranges.map((colorScale) => {\n        return colorScale.name ? colorScale.name : colorScale.from + \" - \" + colorScale.to;\n      });\n      fillcolor = ranges.map((color) => color.color);\n    } else if (this.isBarsDistributed) {\n      legendNames = w.labelData.labels.slice();\n    }\n    if (w.config.legend.customLegendItems.length) {\n      legendNames = w.config.legend.customLegendItems;\n    }\n    const legendFormatter = w.formatters.legendFormatter;\n    const isLegendInversed = w.config.legend.inverseOrder;\n    const legendGroups = [];\n    if (w.labelData.seriesGroups.length > 1 && w.config.legend.clusterGroupedSeries) {\n      w.labelData.seriesGroups.forEach((_, gi) => {\n        legendGroups[gi] = BrowserAPIs.createElement(\"div\");\n        legendGroups[gi].classList.add(\n          \"apexcharts-legend-group\",\n          `apexcharts-legend-group-${gi}`\n        );\n        if (w.config.legend.clusterGroupedSeriesOrientation === \"horizontal\") {\n          elLegendWrap.classList.add(\"apexcharts-legend-group-horizontal\");\n        } else {\n          legendGroups[gi].classList.add(\"apexcharts-legend-group-vertical\");\n        }\n      });\n    }\n    for (let i = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i >= 0 : i <= legendNames.length - 1; isLegendInversed ? i-- : i++) {\n      const text = legendFormatter(legendNames[i], { seriesIndex: i, w });\n      let collapsedSeries = false;\n      let ancillaryCollapsedSeries = false;\n      if (w.globals.collapsedSeries.length > 0) {\n        for (let c = 0; c < w.globals.collapsedSeries.length; c++) {\n          if (w.globals.collapsedSeries[c].index === i) {\n            collapsedSeries = true;\n          }\n        }\n      }\n      if (w.globals.ancillaryCollapsedSeriesIndices.length > 0) {\n        for (let c = 0; c < w.globals.ancillaryCollapsedSeriesIndices.length; c++) {\n          if (w.globals.ancillaryCollapsedSeriesIndices[c] === i) {\n            ancillaryCollapsedSeries = true;\n          }\n        }\n      }\n      const elMarker = this.createLegendMarker({ i, fillcolor });\n      Graphics.setAttrs(elMarker, {\n        rel: i + 1,\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elMarker.classList.add(\"apexcharts-inactive-legend\");\n      }\n      const elLegend = BrowserAPIs.createElement(\"div\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n        elLegend.setAttribute(\"role\", \"button\");\n        elLegend.setAttribute(\"tabindex\", \"0\");\n        const seriesName = Array.isArray(text) ? text.join(\" \") : text;\n        const isCollapsed = collapsedSeries || ancillaryCollapsedSeries;\n        const statusText = isCollapsed ? \"hidden\" : \"visible\";\n        elLegend.setAttribute(\n          \"aria-label\",\n          `${seriesName}, ${statusText}. Press Enter or Space to toggle.`\n        );\n        elLegend.setAttribute(\"aria-pressed\", isCollapsed ? \"true\" : \"false\");\n      }\n      const elLegendText = BrowserAPIs.createElement(\"span\");\n      elLegendText.classList.add(\"apexcharts-legend-text\");\n      elLegendText.innerHTML = Array.isArray(text) ? text.join(\" \") : text;\n      let textColor = w.config.legend.labels.useSeriesColors ? w.globals.colors[i] : Array.isArray(w.config.legend.labels.colors) ? (_a = w.config.legend.labels.colors) == null ? void 0 : _a[i] : w.config.legend.labels.colors;\n      if (!textColor) {\n        textColor = w.config.chart.foreColor;\n      }\n      elLegendText.style.color = textColor;\n      elLegendText.style.fontSize = w.config.legend.fontSize;\n      elLegendText.style.fontWeight = w.config.legend.fontWeight;\n      elLegendText.style.fontFamily = fontFamily || w.config.chart.fontFamily;\n      Graphics.setAttrs(elLegendText, {\n        rel: i + 1,\n        i,\n        \"data:default-text\": encodeURIComponent(text),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      elLegend.appendChild(elMarker);\n      elLegend.appendChild(elLegendText);\n      const coreUtils = new CoreUtils(this.w);\n      if (!w.config.legend.showForZeroSeries) {\n        const total = coreUtils.getSeriesTotalByIndex(i);\n        if (total === 0 && coreUtils.seriesHaveSameValues(i) && !coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-zero-series\");\n        }\n      }\n      if (!w.config.legend.showForNullSeries) {\n        if (coreUtils.isSeriesNull(i) && w.globals.collapsedSeriesIndices.indexOf(i) === -1 && w.globals.ancillaryCollapsedSeriesIndices.indexOf(i) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-null-series\");\n        }\n      }\n      if (legendGroups.length) {\n        w.labelData.seriesGroups.forEach((group, gi) => {\n          var _a2, _b;\n          if (group.includes(\n            /** @type {Record<string,any>} */\n            (_b = (_a2 = w.config.series[i]) == null ? void 0 : _a2.name) != null ? _b : \"\"\n          )) {\n            elLegendWrap.appendChild(legendGroups[gi]);\n            legendGroups[gi].appendChild(elLegend);\n          }\n        });\n      } else {\n        elLegendWrap.appendChild(elLegend);\n      }\n      elLegendWrap.classList.add(\n        `apexcharts-align-${w.config.legend.horizontalAlign}`\n      );\n      elLegendWrap.classList.add(\n        \"apx-legend-position-\" + w.config.legend.position\n      );\n      elLegend.classList.add(\"apexcharts-legend-series\");\n      elLegend.style.margin = `${w.config.legend.itemMargin.vertical}px ${w.config.legend.itemMargin.horizontal}px`;\n      elLegendWrap.style.width = w.config.legend.width ? w.config.legend.width + \"px\" : \"\";\n      elLegendWrap.style.height = w.config.legend.height ? w.config.legend.height + \"px\" : \"\";\n      Graphics.setAttrs(elLegend, {\n        rel: i + 1,\n        seriesName: Utils$1.escapeString(legendNames[i]),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elLegend.classList.add(\"apexcharts-inactive-legend\");\n      }\n      if (!w.config.legend.onItemClick.toggleDataSeries) {\n        elLegend.classList.add(\"apexcharts-no-click\");\n      }\n    }\n    w.dom.elWrap.addEventListener(\"click\", me.onLegendClick, true);\n    if (w.config.legend.onItemHover.highlightDataSeries && w.config.legend.customLegendItems.length === 0) {\n      w.dom.elWrap.addEventListener(\"mousemove\", me.onLegendHovered, true);\n      w.dom.elWrap.addEventListener(\"mouseout\", me.onLegendHovered, true);\n    }\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.keyboard.enabled) {\n      w.dom.elWrap.addEventListener(\n        \"keydown\",\n        me.onLegendKeyDown.bind(me),\n        true\n      );\n    }\n  }\n  /**\n   * @param {number} offsetX\n   * @param {number} offsetY\n   */\n  setLegendWrapXY(offsetX, offsetY) {\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    const legendHeight = elLegendWrap.clientHeight;\n    let x = 0;\n    let y = 0;\n    if (w.config.legend.position === \"bottom\") {\n      y = w.globals.svgHeight - Math.min(legendHeight, w.globals.svgHeight / 2) - 5;\n    } else if (w.config.legend.position === \"top\") {\n      const dim = new Dimensions(this.w, this.ctx);\n      const titleH = dim.dimHelpers.getTitleSubtitleCoords(\"title\").height;\n      const subtitleH = dim.dimHelpers.getTitleSubtitleCoords(\"subtitle\").height;\n      y = (titleH > 0 ? titleH - 10 : 0) + (subtitleH > 0 ? subtitleH - 10 : 0);\n    }\n    elLegendWrap.style.position = \"absolute\";\n    x = x + offsetX + w.config.legend.offsetX;\n    y = y + offsetY + w.config.legend.offsetY;\n    elLegendWrap.style.left = x + \"px\";\n    elLegendWrap.style.top = y + \"px\";\n    if (w.config.legend.position === \"right\") {\n      elLegendWrap.style.left = \"auto\";\n      elLegendWrap.style.right = 25 + w.config.legend.offsetX + \"px\";\n    }\n    const fixedHeigthWidth = (\n      /** @type {const} */\n      [\"width\", \"height\"]\n    );\n    fixedHeigthWidth.forEach((hw) => {\n      if (elLegendWrap && elLegendWrap.style[hw]) {\n        elLegendWrap.style[hw] = parseInt(String(w.config.legend[hw]), 10) + \"px\";\n      }\n    });\n  }\n  legendAlignHorizontal() {\n    const w = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w.dom.elLegendWrap\n    );\n    elLegendWrap.style.right = \"0\";\n    const dimensions = new Dimensions(this.w, this.ctx);\n    const titleRect = dimensions.dimHelpers.getTitleSubtitleCoords(\"title\");\n    const subtitleRect = dimensions.dimHelpers.getTitleSubtitleCoords(\"subtitle\");\n    const offsetX = 20;\n    let offsetY = 0;\n    if (w.config.legend.position === \"top\") {\n      offsetY = titleRect.height + subtitleRect.height + w.config.title.margin + w.config.subtitle.margin - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  legendAlignVertical() {\n    const w = this.w;\n    const lRect = this.legendHelpers.getLegendDimensions();\n    const offsetY = 20;\n    let offsetX = 0;\n    if (w.config.legend.position === \"left\") {\n      offsetX = 20;\n    }\n    if (w.config.legend.position === \"right\") {\n      offsetX = w.globals.svgWidth - lRect.clww - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  /**\n   * @param {MouseEvent} e\n   */\n  onLegendHovered(e) {\n    var _a;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const hoverOverLegend = target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\");\n    if (w.config.chart.type !== \"heatmap\" && !this.isBarsDistributed) {\n      if (!target.classList.contains(\"apexcharts-inactive-legend\") && hoverOverLegend) {\n        const series = new Series(this.ctx.w);\n        series.toggleSeriesOnHover(e, target);\n      }\n    } else {\n      if (hoverOverLegend) {\n        const seriesCnt = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"0\", 10) - 1;\n        this.ctx.events.fireEvent(\"legendHover\", [this.ctx, seriesCnt, this.w]);\n        const series = new Series(this.ctx.w);\n        if (e.type === \"mousemove\") {\n          series.highlightRangeInSeries(seriesCnt, \"highlight\");\n        } else if (e.type === \"mouseout\") {\n          series.highlightRangeInSeries(seriesCnt, \"reset\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {KeyboardEvent} e\n   */\n  onLegendKeyDown(e) {\n    const me = this;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const isLegendItem = target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\");\n    if (!isLegendItem) return;\n    if (e.key === \"Enter\" || e.key === \" \") {\n      e.preventDefault();\n      const rel = target.getAttribute(\"rel\");\n      me.onLegendClick(e);\n      if (rel !== null && w.config.legend.onItemClick.toggleDataSeries) {\n        requestAnimationFrame(() => {\n          const restored = w.dom.baseEl.querySelector(\n            `.apexcharts-legend-series[rel=\"${rel}\"]`\n          );\n          if (restored) restored.focus();\n        });\n      }\n    }\n  }\n  /**\n   * @param {Event} e\n   */\n  onLegendClick(e) {\n    var _a;\n    const w = this.w;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    if (w.config.legend.customLegendItems.length) return;\n    if (target.classList.contains(\"apexcharts-legend-series\") || target.classList.contains(\"apexcharts-legend-text\") || target.classList.contains(\"apexcharts-legend-marker\")) {\n      const seriesCnt = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"0\", 10) - 1;\n      const isHidden = target.getAttribute(\"data:collapsed\") === \"true\";\n      const legendClick = this.w.config.chart.events.legendClick;\n      if (typeof legendClick === \"function\") {\n        legendClick(this.ctx, seriesCnt, this.w);\n      }\n      this.ctx.events.fireEvent(\"legendClick\", [this.ctx, seriesCnt, this.w]);\n      const markerClick = this.w.config.legend.markers.onClick;\n      if (typeof markerClick === \"function\" && target.classList.contains(\"apexcharts-legend-marker\")) {\n        markerClick(this.ctx, seriesCnt, this.w);\n        this.ctx.events.fireEvent(\"legendMarkerClick\", [\n          this.ctx,\n          seriesCnt,\n          this.w\n        ]);\n      }\n      const clickAllowed = w.config.chart.type !== \"treemap\" && w.config.chart.type !== \"heatmap\" && !this.isBarsDistributed;\n      if (clickAllowed && w.config.legend.onItemClick.toggleDataSeries) {\n        this.legendHelpers.toggleDataSeries(seriesCnt, isHidden);\n      }\n    }\n  }\n}\nApexCharts.registerFeatures({ legend: Legend });\nconst icoPan = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 9 2 12l3 3\"/>\\n    <path d=\"M9 5l3-3 3 3\"/>\\n    <path d=\"M15 19l-3 3-3-3\"/>\\n    <path d=\"M19 9l3 3-3 3\"/>\\n    <path d=\"M2 12h20\"/>\\n    <path d=\"M12 2v20\"/>\\n</svg>\\n';\nconst icoZoom = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <circle cx=\"11\" cy=\"11\" r=\"7\"/>\\n    <path d=\"m21 21-4.3-4.3M8 11h6M11 8v6\"/>\\n</svg>\\n';\nconst icoReset = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\"/>\\n    <path d=\"M3 3v5h5\"/>\\n</svg>\\n';\nconst icoZoomIn = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M12 5v14M5 12h14\"/>\\n</svg>\\n';\nconst icoZoomOut = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 12h14\"/>\\n</svg>\\n';\nconst icoSelect = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M5 3a2 2 0 0 0-2 2\"/>\\n    <path d=\"M19 3a2 2 0 0 1 2 2\"/>\\n    <path d=\"M21 19a2 2 0 0 1-2 2\"/>\\n    <path d=\"M5 21a2 2 0 0 1-2-2\"/>\\n    <path d=\"M9 3h1M14 3h1M9 21h1M14 21h1M3 9v1M3 14v1M21 9v1M21 14v1\"/>\\n</svg>\\n';\nconst icoMenu = '<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\\n    <path d=\"M4 6h16M4 12h16M4 18h16\"/>\\n</svg>\\n';\nclass Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.ev = this.w.config.chart.events;\n    this.selectedClass = \"apexcharts-selected\";\n    this.localeValues = this.w.globals.locale.toolbar;\n    this.minX = w.globals.minX;\n    this.maxX = w.globals.maxX;\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n    this.elMenu = null;\n    this.elMenuItems = [];\n    this.t = null;\n  }\n  createToolbar() {\n    const w = this.w;\n    const createDiv = () => {\n      return BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n    };\n    const createBtn = () => {\n      const btn = (\n        /** @type {HTMLButtonElement} */\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"button\")\n      );\n      btn.setAttribute(\"type\", \"button\");\n      return btn;\n    };\n    const elToolbarWrap = createDiv();\n    elToolbarWrap.setAttribute(\"class\", \"apexcharts-toolbar\");\n    elToolbarWrap.style.top = w.config.chart.toolbar.offsetY + \"px\";\n    elToolbarWrap.style.right = -w.config.chart.toolbar.offsetX + 3 + \"px\";\n    w.dom.elWrap.appendChild(elToolbarWrap);\n    this.elZoom = createBtn();\n    this.elZoomIn = createBtn();\n    this.elZoomOut = createBtn();\n    this.elPan = createBtn();\n    this.elSelection = createBtn();\n    this.elZoomReset = createBtn();\n    this.elMenuIcon = createBtn();\n    this.elMenu = createDiv();\n    this.elCustomIcons = [];\n    this.t = w.config.chart.toolbar.tools;\n    if (Array.isArray(this.t.customIcons)) {\n      for (let i = 0; i < this.t.customIcons.length; i++) {\n        this.elCustomIcons.push(createBtn());\n      }\n    }\n    const toolbarControls = [];\n    const appendZoomControl = (type, el, ico) => {\n      const tool = type.toLowerCase();\n      if (this.t[tool] && w.config.chart.zoom.enabled) {\n        toolbarControls.push({\n          el,\n          icon: typeof this.t[tool] === \"string\" ? this.t[tool] : ico,\n          title: (\n            /** @type {any} */\n            this.localeValues[type]\n          ),\n          class: `apexcharts-${tool}-icon`\n        });\n      }\n    };\n    appendZoomControl(\"zoomIn\", this.elZoomIn, icoZoomIn);\n    appendZoomControl(\"zoomOut\", this.elZoomOut, icoZoomOut);\n    const zoomSelectionCtrls = (z) => {\n      if (this.t[z] && w.config.chart[z].enabled) {\n        toolbarControls.push({\n          el: z === \"zoom\" ? this.elZoom : this.elSelection,\n          icon: typeof this.t[z] === \"string\" ? this.t[z] : z === \"zoom\" ? icoZoom : icoSelect,\n          title: (\n            /** @type {any} */\n            this.localeValues[z === \"zoom\" ? \"selectionZoom\" : \"selection\"]\n          ),\n          class: `apexcharts-${z}-icon`\n        });\n      }\n    };\n    zoomSelectionCtrls(\"zoom\");\n    zoomSelectionCtrls(\"selection\");\n    if (this.t.pan && w.config.chart.zoom.enabled) {\n      toolbarControls.push({\n        el: this.elPan,\n        icon: typeof this.t.pan === \"string\" ? this.t.pan : icoPan,\n        title: this.localeValues.pan,\n        class: \"apexcharts-pan-icon\"\n      });\n    }\n    appendZoomControl(\"reset\", this.elZoomReset, icoReset);\n    if (this.t.download) {\n      toolbarControls.push({\n        el: this.elMenuIcon,\n        icon: typeof this.t.download === \"string\" ? this.t.download : icoMenu,\n        title: this.localeValues.menu,\n        class: \"apexcharts-menu-icon\"\n      });\n    }\n    for (let i = 0; i < this.elCustomIcons.length; i++) {\n      toolbarControls.push({\n        el: this.elCustomIcons[i],\n        icon: this.t.customIcons[i].icon,\n        title: this.t.customIcons[i].title,\n        index: this.t.customIcons[i].index,\n        class: \"apexcharts-toolbar-custom-icon \" + this.t.customIcons[i].class\n      });\n    }\n    toolbarControls.forEach((t, index) => {\n      if (t.index) {\n        Utils$1.moveIndexInArray(toolbarControls, index, t.index);\n      }\n    });\n    for (let i = 0; i < toolbarControls.length; i++) {\n      Graphics.setAttrs(toolbarControls[i].el, {\n        class: toolbarControls[i].class,\n        title: toolbarControls[i].title,\n        \"aria-label\": toolbarControls[i].title\n      });\n      toolbarControls[i].el.innerHTML = toolbarControls[i].icon;\n      elToolbarWrap.appendChild(toolbarControls[i].el);\n    }\n    if (this.elZoom.parentNode) {\n      this.elZoom.setAttribute(\"aria-pressed\", String(!!w.interact.zoomEnabled));\n    }\n    if (this.elSelection.parentNode) {\n      this.elSelection.setAttribute(\n        \"aria-pressed\",\n        String(!!w.interact.selectionEnabled)\n      );\n    }\n    if (this.elPan.parentNode) {\n      this.elPan.setAttribute(\"aria-pressed\", String(!!w.interact.panEnabled));\n    }\n    if (this.elMenuIcon.parentNode) {\n      this.elMenuIcon.setAttribute(\"aria-haspopup\", \"true\");\n      this.elMenuIcon.setAttribute(\"aria-expanded\", \"false\");\n    }\n    this._createHamburgerMenu(elToolbarWrap);\n    if (w.interact.zoomEnabled) {\n      this.elZoom.classList.add(this.selectedClass);\n    } else if (w.interact.panEnabled) {\n      this.elPan.classList.add(this.selectedClass);\n    } else if (w.interact.selectionEnabled) {\n      this.elSelection.classList.add(this.selectedClass);\n    }\n    this.addToolbarEventListeners();\n  }\n  /**\n   * @param {Element} parent\n   */\n  _createHamburgerMenu(parent) {\n    this.elMenuItems = [];\n    parent.appendChild(\n      /** @type {Node} */\n      this.elMenu\n    );\n    Graphics.setAttrs(this.elMenu, {\n      class: \"apexcharts-menu\",\n      role: \"menu\"\n    });\n    const menuItems = [\n      {\n        name: \"exportSVG\",\n        title: this.localeValues.exportToSVG\n      },\n      {\n        name: \"exportPNG\",\n        title: this.localeValues.exportToPNG\n      },\n      {\n        name: \"exportCSV\",\n        title: this.localeValues.exportToCSV\n      }\n    ];\n    for (let i = 0; i < menuItems.length; i++) {\n      this.elMenuItems.push(\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\")\n      );\n      this.elMenuItems[i].innerHTML = menuItems[i].title;\n      Graphics.setAttrs(this.elMenuItems[i], {\n        class: `apexcharts-menu-item ${menuItems[i].name}`,\n        title: menuItems[i].title,\n        role: \"menuitem\",\n        tabindex: \"-1\"\n      });\n      this.elMenu.appendChild(this.elMenuItems[i]);\n    }\n  }\n  addToolbarEventListeners() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    (_a = this.elZoomReset) == null ? void 0 : _a.addEventListener(\"click\", this.handleZoomReset.bind(this));\n    (_b = this.elSelection) == null ? void 0 : _b.addEventListener(\n      \"click\",\n      this.toggleZoomSelection.bind(this, \"selection\")\n    );\n    (_c = this.elZoom) == null ? void 0 : _c.addEventListener(\n      \"click\",\n      this.toggleZoomSelection.bind(this, \"zoom\")\n    );\n    (_d = this.elZoomIn) == null ? void 0 : _d.addEventListener(\"click\", this.handleZoomIn.bind(this));\n    (_e = this.elZoomOut) == null ? void 0 : _e.addEventListener(\"click\", this.handleZoomOut.bind(this));\n    (_f = this.elPan) == null ? void 0 : _f.addEventListener(\"click\", this.togglePanning.bind(this));\n    (_g = this.elMenuIcon) == null ? void 0 : _g.addEventListener(\"click\", this.toggleMenu.bind(this));\n    this.elMenuItems.forEach((m) => {\n      if (m.classList.contains(\"exportSVG\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"svg\"));\n      } else if (m.classList.contains(\"exportPNG\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"png\"));\n      } else if (m.classList.contains(\"exportCSV\")) {\n        m.addEventListener(\"click\", this.handleDownload.bind(this, \"csv\"));\n      }\n    });\n    for (let i = 0; i < this.t.customIcons.length; i++) {\n      this.elCustomIcons[i].addEventListener(\n        \"click\",\n        this.t.customIcons[i].click.bind(this, this.ctx, this.ctx.w)\n      );\n    }\n    const toolbarButtons = [\n      this.elZoomReset,\n      this.elSelection,\n      this.elZoom,\n      this.elZoomIn,\n      this.elZoomOut,\n      this.elPan,\n      this.elMenuIcon,\n      ...this.elCustomIcons\n    ];\n    toolbarButtons.forEach((btn) => {\n      btn.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          const btnClass = btn.className;\n          btn.click();\n          requestAnimationFrame(() => {\n            const baseEl = this.w.dom.baseEl;\n            if (!baseEl) return;\n            const apexClass = btnClass.split(\" \").find((c) => c.startsWith(\"apexcharts-\"));\n            if (!apexClass) return;\n            const restored = baseEl.querySelector(`.${apexClass}`);\n            if (restored) restored.focus();\n          });\n        }\n      });\n    });\n    (_h = this.elMenuIcon) == null ? void 0 : _h.addEventListener(\n      \"keydown\",\n      (e) => {\n        var _a2;\n        if (e.key === \"ArrowDown\" || e.key === \"ArrowUp\") {\n          e.preventDefault();\n          if (!((_a2 = this.elMenu) == null ? void 0 : _a2.classList.contains(\"apexcharts-menu-open\"))) {\n            this.toggleMenu();\n          }\n          window.setTimeout(() => {\n            const idx = e.key === \"ArrowDown\" ? 0 : this.elMenuItems.length - 1;\n            if (this.elMenuItems[idx])\n              this.elMenuItems[idx].focus();\n          }, 20);\n        }\n      }\n    );\n    this.elMenuItems.forEach((m, idx) => {\n      m.addEventListener(\"keydown\", (e) => {\n        var _a2;\n        if (e.key === \"ArrowDown\") {\n          e.preventDefault();\n          const next = this.elMenuItems[idx + 1] || this.elMenuItems[0];\n          next.focus();\n        } else if (e.key === \"ArrowUp\") {\n          e.preventDefault();\n          const prev = this.elMenuItems[idx - 1] || this.elMenuItems[this.elMenuItems.length - 1];\n          prev.focus();\n        } else if (e.key === \"Escape\" || e.key === \"Tab\") {\n          this._closeMenu();\n          (_a2 = this.elMenuIcon) == null ? void 0 : _a2.focus();\n          if (e.key === \"Tab\") ;\n          else {\n            e.preventDefault();\n          }\n        } else if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          m.click();\n        }\n      });\n    });\n  }\n  /**\n   * @param {string} type\n   */\n  toggleZoomSelection(type) {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      ch.ctx.toolbar.toggleOtherControls();\n      const el = type === \"selection\" ? ch.ctx.toolbar.elSelection : ch.ctx.toolbar.elZoom;\n      const enabledType = type === \"selection\" ? \"selectionEnabled\" : \"zoomEnabled\";\n      ch.w.globals[enabledType] = !ch.w.globals[enabledType];\n      if (!el.classList.contains(ch.ctx.toolbar.selectedClass)) {\n        el.classList.add(ch.ctx.toolbar.selectedClass);\n      } else {\n        el.classList.remove(ch.ctx.toolbar.selectedClass);\n      }\n      el.setAttribute(\"aria-pressed\", String(ch.w.globals[enabledType]));\n    });\n  }\n  getToolbarIconsReference() {\n    const w = this.w;\n    if (!this.elZoom) {\n      this.elZoom = w.dom.baseEl.querySelector(\".apexcharts-zoom-icon\");\n    }\n    if (!this.elPan) {\n      this.elPan = w.dom.baseEl.querySelector(\".apexcharts-pan-icon\");\n    }\n    if (!this.elSelection) {\n      this.elSelection = w.dom.baseEl.querySelector(\n        \".apexcharts-selection-icon\"\n      );\n    }\n  }\n  /**\n   * @param {string} type\n   */\n  enableZoomPanFromToolbar(type) {\n    this.toggleOtherControls();\n    type === \"pan\" ? this.w.interact.panEnabled = true : this.w.interact.zoomEnabled = true;\n    const el = type === \"pan\" ? this.elPan : this.elZoom;\n    const el2 = type === \"pan\" ? this.elZoom : this.elPan;\n    if (el) {\n      el.classList.add(this.selectedClass);\n    }\n    if (el2) {\n      el2.classList.remove(this.selectedClass);\n    }\n  }\n  togglePanning() {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      ch.ctx.toolbar.toggleOtherControls();\n      ch.w.interact.panEnabled = !ch.w.interact.panEnabled;\n      if (!ch.ctx.toolbar.elPan.classList.contains(ch.ctx.toolbar.selectedClass)) {\n        ch.ctx.toolbar.elPan.classList.add(ch.ctx.toolbar.selectedClass);\n      } else {\n        ch.ctx.toolbar.elPan.classList.remove(ch.ctx.toolbar.selectedClass);\n      }\n      ch.ctx.toolbar.elPan.setAttribute(\n        \"aria-pressed\",\n        String(ch.w.interact.panEnabled)\n      );\n    });\n  }\n  toggleOtherControls() {\n    const w = this.w;\n    w.interact.panEnabled = false;\n    w.interact.zoomEnabled = false;\n    w.interact.selectionEnabled = false;\n    this.getToolbarIconsReference();\n    const toggleEls = [this.elPan, this.elSelection, this.elZoom];\n    toggleEls.forEach((el) => {\n      if (el) {\n        el.classList.remove(this.selectedClass);\n      }\n    });\n  }\n  /**\n   * Read the current x-range from globals at click time.\n   * Toolbar instance is kept alive across updates (Phase 8 lazy\n   * instantiation), so cached this.minX/maxX go stale after a zoom.\n   * @returns {{minX: number, maxX: number}}\n   */\n  _currentXRange() {\n    const w = this.w;\n    if (w.axisFlags.isRangeBar) {\n      return { minX: w.globals.minY, maxX: w.globals.maxY };\n    }\n    return { minX: w.globals.minX, maxX: w.globals.maxX };\n  }\n  handleZoomIn() {\n    const w = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    const centerX = (minX + maxX) / 2;\n    const newMinX = (minX + centerX) / 2;\n    const newMaxX = (maxX + centerX) / 2;\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!w.interact.disableZoomIn) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  handleZoomOut() {\n    const w = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    if (w.config.xaxis.type === \"datetime\" && new Date(minX).getUTCFullYear() < 1e3) {\n      return;\n    }\n    const centerX = (minX + maxX) / 2;\n    const newMinX = minX - (centerX - minX);\n    const newMaxX = maxX - (centerX - maxX);\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!w.interact.disableZoomOut) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  /**\n   * @param {number} newMinX\n   * @param {number} newMaxX\n   */\n  _getNewMinXMaxX(newMinX, newMaxX) {\n    const shouldFloor = this.w.config.xaxis.convertedCatToNumeric;\n    return {\n      minX: shouldFloor ? Math.floor(newMinX) : newMinX,\n      maxX: shouldFloor ? Math.floor(newMaxX) : newMaxX\n    };\n  }\n  /**\n   * @param {number} newMinX\n   * @param {number} newMaxX\n   */\n  zoomUpdateOptions(newMinX, newMaxX) {\n    const w = this.w;\n    if (newMinX === void 0 && newMaxX === void 0) {\n      this.handleZoomReset();\n      return;\n    }\n    if (w.config.xaxis.convertedCatToNumeric) {\n      if (newMinX < 1) {\n        newMinX = 1;\n        newMaxX = w.globals.dataPoints;\n      }\n      if (newMaxX - newMinX < 2) {\n        return;\n      }\n    }\n    let xaxis = {\n      min: newMinX,\n      max: newMaxX\n    };\n    const beforeZoomRange = this.getBeforeZoomRange(\n      xaxis,\n      /** @type {any} */\n      void 0\n    );\n    if (beforeZoomRange) {\n      xaxis = beforeZoomRange.xaxis;\n    }\n    const options2 = {\n      xaxis\n    };\n    if (!w.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    if (!w.config.chart.group) {\n      options2.yaxis = yaxis;\n    }\n    this.w.interact.zoomed = true;\n    this.ctx.updateHelpers._updateOptions(\n      options2,\n      false,\n      this.w.config.chart.animations.dynamicAnimation.enabled\n    );\n    this.zoomCallback(xaxis, yaxis);\n  }\n  /**\n   * @param {Record<string, any>} xaxis\n   * @param {Record<string, any>} yaxis\n   */\n  zoomCallback(xaxis, yaxis) {\n    if (typeof this.ev.zoomed === \"function\") {\n      this.ev.zoomed(this.ctx, { xaxis, yaxis });\n      this.ctx.events.fireEvent(\"zoomed\", { xaxis, yaxis });\n    }\n  }\n  /**\n   * @param {Record<string, any>} xaxis\n   * @param {Record<string, any>} yaxis\n   */\n  getBeforeZoomRange(xaxis, yaxis) {\n    let newRange = null;\n    if (typeof this.ev.beforeZoom === \"function\") {\n      newRange = this.ev.beforeZoom(this, { xaxis, yaxis });\n    }\n    return newRange;\n  }\n  toggleMenu() {\n    window.setTimeout(() => {\n      var _a, _b, _c;\n      if ((_a = this.elMenu) == null ? void 0 : _a.classList.contains(\"apexcharts-menu-open\")) {\n        this._closeMenu();\n      } else {\n        (_b = this.elMenu) == null ? void 0 : _b.classList.add(\"apexcharts-menu-open\");\n        (_c = this.elMenuIcon) == null ? void 0 : _c.setAttribute(\"aria-expanded\", \"true\");\n      }\n    }, 0);\n  }\n  _closeMenu() {\n    var _a, _b;\n    (_a = this.elMenu) == null ? void 0 : _a.classList.remove(\"apexcharts-menu-open\");\n    (_b = this.elMenuIcon) == null ? void 0 : _b.setAttribute(\"aria-expanded\", \"false\");\n  }\n  /**\n   * @param {string} type\n   */\n  handleDownload(type) {\n    const w = this.w;\n    const exprt = new Exports(this.w, this.ctx);\n    switch (type) {\n      case \"svg\":\n        exprt.exportToSVG();\n        break;\n      case \"png\":\n        exprt.exportToPng();\n        break;\n      case \"csv\":\n        exprt.exportToCSV({\n          series: w.config.series,\n          columnDelimiter: w.config.chart.toolbar.export.csv.columnDelimiter\n        });\n        break;\n    }\n  }\n  handleZoomReset() {\n    const charts = this.ctx.getSyncedCharts();\n    charts.forEach((ch) => {\n      const w = ch.w;\n      if (!w.interact.zoomed) return;\n      w.globals.lastXAxis.min = w.globals.initialConfig.xaxis.min;\n      w.globals.lastXAxis.max = w.globals.initialConfig.xaxis.max;\n      ch.updateHelpers.revertDefaultAxisMinMax();\n      if (typeof w.config.chart.events.beforeResetZoom === \"function\") {\n        const resetZoomRange = w.config.chart.events.beforeResetZoom(ch, w);\n        if (resetZoomRange) {\n          ch.updateHelpers.revertDefaultAxisMinMax(resetZoomRange);\n        }\n      }\n      if (typeof w.config.chart.events.zoomed === \"function\") {\n        ch.ctx.toolbar.zoomCallback({\n          min: w.config.xaxis.min,\n          max: w.config.xaxis.max\n        });\n      }\n      const series = ch.ctx.series.emptyCollapsedSeries(\n        Utils$1.clone(w.globals.initialSeries)\n      );\n      ch.updateHelpers._updateSeries(\n        series,\n        w.config.chart.animations.dynamicAnimation.enabled\n      );\n      w.interact.zoomed = false;\n    });\n  }\n  destroy() {\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n  }\n}\nclass ZoomPanSelection extends Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    super(w, ctx);\n    this.w = w;\n    this.ctx = ctx;\n    this.dragged = false;\n    this.graphics = new Graphics(this.w);\n    this.eventList = [\n      \"mousedown\",\n      \"mouseleave\",\n      \"mousemove\",\n      \"touchstart\",\n      \"touchmove\",\n      \"mouseup\",\n      \"touchend\",\n      \"wheel\"\n    ];\n    this.clientX = 0;\n    this.clientY = 0;\n    this.startX = 0;\n    this.endX = 0;\n    this.dragX = 0;\n    this.startY = 0;\n    this.endY = 0;\n    this.dragY = 0;\n    this.moveDirection = \"none\";\n    this.debounceTimer = null;\n    this.debounceDelay = 100;\n    this.wheelDelay = 400;\n  }\n  /** @param {{xyRatios: any}} opts */\n  init({ xyRatios }) {\n    const w = this.w;\n    const me = this;\n    this.xyRatios = xyRatios;\n    this.zoomRect = this.graphics.drawRect(0, 0, 0, 0);\n    this.selectionRect = this.graphics.drawRect(0, 0, 0, 0);\n    this.gridRect = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    this.constraints = new Box(0, 0, w.layout.gridWidth, w.layout.gridHeight);\n    this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\");\n    this.selectionRect.node.classList.add(\"apexcharts-selection-rect\");\n    w.dom.Paper.add(this.zoomRect);\n    w.dom.Paper.add(this.selectionRect);\n    if (w.config.chart.selection.type === \"x\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        minY: 0,\n        maxX: w.layout.gridWidth,\n        maxY: w.layout.gridHeight\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else if (w.config.chart.selection.type === \"y\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        maxX: w.layout.gridWidth\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else {\n      this.slDraggableRect = this.selectionRect.draggable().on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    }\n    this.preselectedSelection();\n    this.hoverArea = /** @type {Element} */\n    w.dom.baseEl.querySelector(`${w.globals.chartClass} .apexcharts-svg`);\n    if (!this.hoverArea) return;\n    this.hoverArea.classList.add(\"apexcharts-zoomable\");\n    this.eventList.forEach((event) => {\n      var _a;\n      (_a = this.hoverArea) == null ? void 0 : _a.addEventListener(\n        event,\n        me.svgMouseEvents.bind(me, xyRatios),\n        {\n          capture: false,\n          passive: true\n        }\n      );\n    });\n    if (w.config.chart.zoom.enabled && w.config.chart.zoom.allowMouseWheelZoom) {\n      this.hoverArea.addEventListener(\"wheel\", me.mouseWheelEvent.bind(me), {\n        capture: false,\n        passive: false\n      });\n    }\n  }\n  // remove the event listeners which were previously added on hover area\n  destroy() {\n    if (this.slDraggableRect) {\n      this.slDraggableRect.draggable(false);\n      this.slDraggableRect.off();\n      this.selectionRect.off();\n    }\n    this.selectionRect = null;\n    this.zoomRect = null;\n    this.gridRect = null;\n  }\n  /**\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {any} e\n   */\n  svgMouseEvents(xyRatios, e) {\n    var _a;\n    const w = this.w;\n    const toolbar = this.ctx.toolbar;\n    const zoomtype = w.interact.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n    const autoSelected = w.config.chart.toolbar.autoSelected;\n    if (e.shiftKey) {\n      this.shiftWasPressed = true;\n      toolbar.enableZoomPanFromToolbar(autoSelected === \"pan\" ? \"zoom\" : \"pan\");\n    } else {\n      if (this.shiftWasPressed) {\n        toolbar.enableZoomPanFromToolbar(autoSelected);\n        this.shiftWasPressed = false;\n      }\n    }\n    if (!e.target) return;\n    const tc = e.target.classList;\n    let pc;\n    if (e.target.parentNode && e.target.parentNode !== null) {\n      pc = e.target.parentNode.classList;\n    }\n    const falsePositives = tc.contains(\"apexcharts-legend-marker\") || tc.contains(\"apexcharts-legend-text\") || pc && pc.contains(\"apexcharts-toolbar\");\n    if (falsePositives) return;\n    this.clientX = e.type === \"touchmove\" || e.type === \"touchstart\" ? e.touches[0].clientX : e.type === \"touchend\" ? e.changedTouches[0].clientX : e.clientX;\n    this.clientY = e.type === \"touchmove\" || e.type === \"touchstart\" ? e.touches[0].clientY : e.type === \"touchend\" ? e.changedTouches[0].clientY : e.clientY;\n    if (e.type === \"mousedown\" && e.which === 1 || e.type === \"touchstart\") {\n      const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n      if (!gridRectDim) return;\n      this.startX = this.clientX - gridRectDim.left - w.globals.barPadForNumericAxis;\n      this.startY = this.clientY - gridRectDim.top;\n      this.dragged = false;\n      this.w.interact.mousedown = true;\n    }\n    if (e.type === \"mousemove\" && e.which === 1 || e.type === \"touchmove\") {\n      this.dragged = true;\n      if (w.interact.panEnabled) {\n        w.interact.selection = null;\n        if (this.w.interact.mousedown) {\n          this.panDragging({\n            context: this,\n            zoomtype,\n            xyRatios\n          });\n        }\n      } else {\n        if (this.w.interact.mousedown && w.interact.zoomEnabled || this.w.interact.mousedown && w.interact.selectionEnabled) {\n          this.selection = this.selectionDrawing({\n            context: this,\n            zoomtype\n          });\n        }\n      }\n    }\n    if (e.type === \"mouseup\" || e.type === \"touchend\" || e.type === \"mouseleave\") {\n      this.handleMouseUp({ zoomtype });\n    }\n    this.makeSelectionRectDraggable();\n  }\n  /** @param {{ zoomtype?: any, isResized?: any }} opts */\n  handleMouseUp({ zoomtype, isResized }) {\n    var _a;\n    const w = this.w;\n    const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n    if (gridRectDim && (this.w.interact.mousedown || isResized)) {\n      this.endX = this.clientX - gridRectDim.left - w.globals.barPadForNumericAxis;\n      this.endY = this.clientY - gridRectDim.top;\n      this.dragX = Math.abs(this.endX - this.startX);\n      this.dragY = Math.abs(this.endY - this.startY);\n      if (w.interact.zoomEnabled || w.interact.selectionEnabled) {\n        this.selectionDrawn({\n          context: this,\n          zoomtype\n        });\n      }\n    }\n    if (w.interact.zoomEnabled) {\n      this.hideSelectionRect(this.selectionRect);\n    }\n    this.dragged = false;\n    this.w.interact.mousedown = false;\n  }\n  /**\n   * @param {Event} e\n   */\n  mouseWheelEvent(e) {\n    const w = this.w;\n    e.preventDefault();\n    const now = Date.now();\n    if (now - w.interact.lastWheelExecution > this.wheelDelay) {\n      this.executeMouseWheelZoom(e);\n      w.interact.lastWheelExecution = now;\n    }\n    if (this.debounceTimer) clearTimeout(this.debounceTimer);\n    this.debounceTimer = setTimeout(() => {\n      if (now - w.interact.lastWheelExecution > this.wheelDelay) {\n        this.executeMouseWheelZoom(e);\n        w.interact.lastWheelExecution = now;\n      }\n    }, this.debounceDelay);\n  }\n  /**\n   * @param {any} e\n   */\n  executeMouseWheelZoom(e) {\n    var _a, _b, _c;\n    const w = this.w;\n    this.minX = w.axisFlags.isRangeBar ? w.globals.minY : w.globals.minX;\n    this.maxX = w.axisFlags.isRangeBar ? w.globals.maxY : w.globals.maxX;\n    const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n    if (!gridRectDim) return;\n    const mouseX = (e.clientX - gridRectDim.left) / gridRectDim.width;\n    const currentMinX = this.minX;\n    const currentMaxX = this.maxX;\n    const totalX = currentMaxX - currentMinX;\n    const zoomFactorIn = 0.5;\n    const zoomFactorOut = 1.5;\n    let zoomRange;\n    let newMinX, newMaxX;\n    if (e.deltaY < 0) {\n      zoomRange = zoomFactorIn * totalX;\n      const midPoint = currentMinX + mouseX * totalX;\n      newMinX = midPoint - zoomRange / 2;\n      newMaxX = midPoint + zoomRange / 2;\n    } else {\n      zoomRange = zoomFactorOut * totalX;\n      newMinX = currentMinX - zoomRange / 2;\n      newMaxX = currentMaxX + zoomRange / 2;\n    }\n    if (!w.axisFlags.isRangeBar) {\n      const clampMin = (_b = w.globals.dataReducerRawMinX) != null ? _b : w.globals.initialMinX;\n      const clampMax = (_c = w.globals.dataReducerRawMaxX) != null ? _c : w.globals.initialMaxX;\n      newMinX = Math.max(newMinX, clampMin);\n      newMaxX = Math.min(newMaxX, clampMax);\n      const minXDiff = w.globals.minXDiff > 0 && isFinite(w.globals.minXDiff) ? w.globals.minXDiff : 0;\n      const minRange = Math.max(minXDiff * 2, (clampMax - clampMin) * 1e-6);\n      if (newMaxX - newMinX < minRange) {\n        const midPoint = (newMinX + newMaxX) / 2;\n        newMinX = midPoint - minRange / 2;\n        newMaxX = midPoint + minRange / 2;\n      }\n    }\n    const newMinXMaxX = this._getNewMinXMaxX(newMinX, newMaxX);\n    if (!isNaN(newMinXMaxX.minX) && !isNaN(newMinXMaxX.maxX)) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  makeSelectionRectDraggable() {\n    const w = this.w;\n    if (!this.selectionRect) return;\n    const rectDim = this.selectionRect.node.getBoundingClientRect();\n    if (rectDim.width > 0 && rectDim.height > 0) {\n      this.selectionRect.select(false).resize(false);\n      this.selectionRect.select({\n        createRot: () => {\n        },\n        updateRot: () => {\n        },\n        createHandle: (group, p, index, pointArr, handleName) => {\n          if (handleName === \"l\" || handleName === \"r\")\n            return group.circle(8).css({ \"stroke-width\": 1, stroke: \"#333\", fill: \"#fff\" });\n          return group.circle(0);\n        },\n        updateHandle: (group, p) => {\n          return group.center(p[0], p[1]);\n        }\n      }).resize().on(\"resize\", () => {\n        const zoomtype = w.interact.zoomEnabled ? w.config.chart.zoom.type : w.config.chart.selection.type;\n        this.handleMouseUp({ zoomtype, isResized: true });\n      });\n    }\n  }\n  preselectedSelection() {\n    const w = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w.interact.zoomEnabled) {\n      if (typeof w.interact.selection !== \"undefined\" && w.interact.selection !== null) {\n        this.drawSelectionRect(__spreadProps(__spreadValues({}, w.interact.selection), {\n          translateX: w.layout.translateX,\n          translateY: w.layout.translateY\n        }));\n      } else {\n        if (w.config.chart.selection.xaxis.min !== void 0 && w.config.chart.selection.xaxis.max !== void 0) {\n          let x = (w.config.chart.selection.xaxis.min - w.globals.minX) / xyRatios.xRatio;\n          let width = w.layout.gridWidth - (w.globals.maxX - w.config.chart.selection.xaxis.max) / xyRatios.xRatio - x;\n          if (w.axisFlags.isRangeBar) {\n            x = (w.config.chart.selection.xaxis.min - w.globals.yAxisScale[0].niceMin) / xyRatios.invertedYRatio;\n            width = (w.config.chart.selection.xaxis.max - w.config.chart.selection.xaxis.min) / xyRatios.invertedYRatio;\n          }\n          const selectionRect = {\n            x,\n            y: 0,\n            width,\n            height: w.layout.gridHeight,\n            translateX: w.layout.translateX,\n            translateY: w.layout.translateY,\n            selectionEnabled: true\n          };\n          this.drawSelectionRect(selectionRect);\n          this.makeSelectionRectDraggable();\n          if (typeof w.config.chart.events.selection === \"function\") {\n            w.config.chart.events.selection(this.ctx, {\n              xaxis: {\n                min: w.config.chart.selection.xaxis.min,\n                max: w.config.chart.selection.xaxis.max\n              },\n              yaxis: {}\n            });\n          }\n        }\n      }\n    }\n  }\n  /** @param {{x: any, y: any, width: any, height: any, translateX: any, translateY: any}} opts */\n  drawSelectionRect({ x, y, width, height, translateX = 0, translateY = 0 }) {\n    const w = this.w;\n    const zoomRect = this.zoomRect;\n    const selectionRect = this.selectionRect;\n    if (this.dragged || w.interact.selection !== null) {\n      const scalingAttrs = {\n        transform: \"translate(\" + translateX + \", \" + translateY + \")\"\n      };\n      if (w.interact.zoomEnabled && this.dragged) {\n        if (width < 0) width = 1;\n        zoomRect.attr({\n          x,\n          y,\n          width,\n          height,\n          fill: w.config.chart.zoom.zoomedArea.fill.color,\n          \"fill-opacity\": w.config.chart.zoom.zoomedArea.fill.opacity,\n          stroke: w.config.chart.zoom.zoomedArea.stroke.color,\n          \"stroke-width\": w.config.chart.zoom.zoomedArea.stroke.width,\n          \"stroke-opacity\": w.config.chart.zoom.zoomedArea.stroke.opacity\n        });\n        Graphics.setAttrs(zoomRect.node, scalingAttrs);\n      }\n      if (w.interact.selectionEnabled) {\n        selectionRect.attr({\n          x,\n          y,\n          width: width > 0 ? width : 0,\n          height: height > 0 ? height : 0,\n          fill: w.config.chart.selection.fill.color,\n          \"fill-opacity\": w.config.chart.selection.fill.opacity,\n          stroke: w.config.chart.selection.stroke.color,\n          \"stroke-width\": w.config.chart.selection.stroke.width,\n          \"stroke-dasharray\": w.config.chart.selection.stroke.dashArray,\n          \"stroke-opacity\": w.config.chart.selection.stroke.opacity\n        });\n        Graphics.setAttrs(selectionRect.node, scalingAttrs);\n      }\n    }\n  }\n  /**\n   * @param {any} rect\n   */\n  hideSelectionRect(rect) {\n    if (rect) {\n      rect.attr({\n        x: 0,\n        y: 0,\n        width: 0,\n        height: 0\n      });\n    }\n  }\n  selectionDrawing({ context, zoomtype }) {\n    var _a;\n    const w = this.w;\n    const me = context;\n    const gridRectDim = (_a = this.gridRect) == null ? void 0 : _a.getBoundingClientRect();\n    if (!gridRectDim) return;\n    const startX = me.startX - 1;\n    const startY = me.startY;\n    let inversedX = false;\n    let inversedY = false;\n    const left = me.clientX - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const top = me.clientY - gridRectDim.top;\n    let selectionWidth = left - startX;\n    let selectionHeight = top - startY;\n    let selectionRect = {\n      translateX: w.layout.translateX,\n      translateY: w.layout.translateY\n    };\n    if (Math.abs(selectionWidth + startX) > w.layout.gridWidth) {\n      selectionWidth = w.layout.gridWidth - startX;\n    } else if (left < 0) {\n      selectionWidth = startX;\n    }\n    if (startX > left) {\n      inversedX = true;\n      selectionWidth = Math.abs(selectionWidth);\n    }\n    if (startY > top) {\n      inversedY = true;\n      selectionHeight = Math.abs(selectionHeight);\n    }\n    if (zoomtype === \"x\") {\n      selectionRect = {\n        x: inversedX ? startX - selectionWidth : startX,\n        y: 0,\n        width: selectionWidth,\n        height: w.layout.gridHeight\n      };\n    } else if (zoomtype === \"y\") {\n      selectionRect = {\n        x: 0,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: w.layout.gridWidth,\n        height: selectionHeight\n      };\n    } else {\n      selectionRect = {\n        x: inversedX ? startX - selectionWidth : startX,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: selectionWidth,\n        height: selectionHeight\n      };\n    }\n    selectionRect = __spreadProps(__spreadValues({}, selectionRect), {\n      translateX: w.layout.translateX,\n      translateY: w.layout.translateY\n    });\n    me.drawSelectionRect(selectionRect);\n    me.selectionDragging(\"resizing\");\n    return selectionRect;\n  }\n  /**\n   * @param {string} type\n   * @param {CustomEvent} e\n   */\n  selectionDragging(type, e) {\n    var _a;\n    const w = this.w;\n    if (!e) return;\n    e.preventDefault();\n    const { handler, box } = e.detail;\n    const constraints = (\n      /** @type {any} */\n      this.constraints\n    );\n    let { x, y } = box;\n    if (x < constraints.x) {\n      x = constraints.x;\n    }\n    if (y < constraints.y) {\n      y = constraints.y;\n    }\n    if (box.x2 > constraints.x2) {\n      x = constraints.x2 - box.w;\n    }\n    if (box.y2 > constraints.y2) {\n      y = constraints.y2 - box.h;\n    }\n    handler.move(x, y);\n    const xyRatios = this.xyRatios;\n    const selRect = this.selectionRect;\n    let timerInterval = 0;\n    if (type === \"resizing\") {\n      timerInterval = 30;\n    }\n    const getSelAttr = (attr) => {\n      return parseFloat(selRect.node.getAttribute(attr));\n    };\n    const draggedProps = {\n      x: getSelAttr(\"x\"),\n      y: getSelAttr(\"y\"),\n      width: getSelAttr(\"width\"),\n      height: getSelAttr(\"height\")\n    };\n    w.interact.selection = draggedProps;\n    if (typeof w.config.chart.events.selection === \"function\" && w.interact.selectionEnabled) {\n      clearTimeout((_a = this.w.globals.selectionResizeTimer) != null ? _a : void 0);\n      this.w.globals.selectionResizeTimer = window.setTimeout(() => {\n        var _a2;\n        const gridRectDim = (_a2 = this.gridRect) == null ? void 0 : _a2.getBoundingClientRect();\n        if (!gridRectDim) return;\n        const selectionRect = selRect.node.getBoundingClientRect();\n        let minX, maxX, minY, maxY;\n        if (!w.axisFlags.isRangeBar) {\n          if (!w.globals.xAxisScale) return;\n          minX = w.globals.xAxisScale.niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.xRatio;\n          maxX = w.globals.xAxisScale.niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.xRatio;\n          minY = w.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0];\n          maxY = w.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0];\n        } else {\n          minX = w.globals.yAxisScale[0].niceMin + (selectionRect.left - gridRectDim.left) * xyRatios.invertedYRatio;\n          maxX = w.globals.yAxisScale[0].niceMin + (selectionRect.right - gridRectDim.left) * xyRatios.invertedYRatio;\n          minY = 0;\n          maxY = 1;\n        }\n        const xyAxis = {\n          xaxis: {\n            min: minX,\n            max: maxX\n          },\n          yaxis: {\n            min: minY,\n            max: maxY\n          }\n        };\n        w.config.chart.events.selection(this.ctx, xyAxis);\n        if (w.config.chart.brush.enabled && w.config.chart.events.brushScrolled !== void 0) {\n          w.config.chart.events.brushScrolled(this.ctx, xyAxis);\n        }\n      }, timerInterval);\n    }\n  }\n  /** @param {{context: any, zoomtype: any}} opts */\n  selectionDrawn({ context, zoomtype }) {\n    var _a, _b;\n    const w = this.w;\n    const me = context;\n    const xyRatios = this.xyRatios;\n    const toolbar = this.ctx.toolbar;\n    const selRect = w.interact.zoomEnabled ? me.zoomRect.node.getBoundingClientRect() : me.selectionRect.node.getBoundingClientRect();\n    const gridRectDim = me.gridRect.getBoundingClientRect();\n    const localStartX = selRect.left - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const localEndX = selRect.right - gridRectDim.left - w.globals.barPadForNumericAxis;\n    const localStartY = selRect.top - gridRectDim.top;\n    const localEndY = selRect.bottom - gridRectDim.top;\n    let xLowestValue, xHighestValue;\n    if (!w.axisFlags.isRangeBar) {\n      const niceMin = (_b = (_a = w.globals.xAxisScale) == null ? void 0 : _a.niceMin) != null ? _b : 0;\n      xLowestValue = niceMin + localStartX * xyRatios.xRatio;\n      xHighestValue = niceMin + localEndX * xyRatios.xRatio;\n    } else {\n      xLowestValue = w.globals.yAxisScale[0].niceMin + localStartX * xyRatios.invertedYRatio;\n      xHighestValue = w.globals.yAxisScale[0].niceMin + localEndX * xyRatios.invertedYRatio;\n    }\n    const yHighestValue = [];\n    const yLowestValue = [];\n    w.config.yaxis.forEach((yaxe, index) => {\n      const seriesIndex = w.globals.seriesYAxisMap[index][0];\n      const highestVal = w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localStartY;\n      const lowestVal = w.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localEndY;\n      yHighestValue.push(highestVal);\n      yLowestValue.push(lowestVal);\n    });\n    if (me.dragged && (me.dragX > 10 || me.dragY > 10) && xLowestValue !== xHighestValue) {\n      if (w.interact.zoomEnabled) {\n        if (!w.globals.initialConfig) return;\n        let yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n        let xaxis = Utils$1.clone(w.globals.initialConfig.xaxis);\n        w.interact.zoomed = true;\n        if (w.config.xaxis.convertedCatToNumeric) {\n          xLowestValue = Math.floor(xLowestValue);\n          xHighestValue = Math.floor(xHighestValue);\n          if (xLowestValue < 1) {\n            xLowestValue = 1;\n            xHighestValue = w.globals.dataPoints;\n          }\n          if (xHighestValue - xLowestValue < 2) {\n            xHighestValue = xLowestValue + 1;\n          }\n        }\n        if (zoomtype === \"xy\" || zoomtype === \"x\") {\n          xaxis = {\n            min: xLowestValue,\n            max: xHighestValue\n          };\n        }\n        if (zoomtype === \"xy\" || zoomtype === \"y\") {\n          yaxis.forEach((yaxe, index) => {\n            yaxis[index].min = yLowestValue[index];\n            yaxis[index].max = yHighestValue[index];\n          });\n        }\n        if (toolbar) {\n          const beforeZoomRange = toolbar.getBeforeZoomRange(xaxis, yaxis);\n          if (beforeZoomRange) {\n            xaxis = beforeZoomRange.xaxis ? beforeZoomRange.xaxis : xaxis;\n            yaxis = beforeZoomRange.yaxis ? beforeZoomRange.yaxis : yaxis;\n          }\n        }\n        const options2 = {\n          xaxis\n        };\n        if (!w.config.chart.group) {\n          options2.yaxis = yaxis;\n        }\n        me.ctx.updateHelpers._updateOptions(\n          options2,\n          false,\n          me.w.config.chart.animations.dynamicAnimation.enabled\n        );\n        if (typeof w.config.chart.events.zoomed === \"function\") {\n          toolbar.zoomCallback(xaxis, yaxis);\n        }\n      } else if (w.interact.selectionEnabled) {\n        let yaxis = null;\n        let xaxis = null;\n        xaxis = {\n          min: xLowestValue,\n          max: xHighestValue\n        };\n        if (zoomtype === \"xy\" || zoomtype === \"y\") {\n          const yaxisCopy = (\n            /** @type {ApexYAxis[]} */\n            Utils$1.clone(w.config.yaxis)\n          );\n          yaxis = yaxisCopy;\n          yaxisCopy.forEach((yaxe, index) => {\n            yaxisCopy[index].min = yLowestValue[index];\n            yaxisCopy[index].max = yHighestValue[index];\n          });\n        }\n        w.interact.selection = me.selection;\n        if (typeof w.config.chart.events.selection === \"function\") {\n          w.config.chart.events.selection(me.ctx, {\n            xaxis,\n            yaxis\n          });\n        }\n      }\n    }\n  }\n  /** @param {{ context?: any, zoomtype?: any, xyRatios?: any }} opts */\n  panDragging({ context }) {\n    var _a;\n    const w = this.w;\n    const me = context;\n    if (typeof w.interact.lastClientPosition.x !== \"undefined\") {\n      const deltaX = w.interact.lastClientPosition.x - me.clientX;\n      const deltaY = ((_a = w.interact.lastClientPosition.y) != null ? _a : 0) - me.clientY;\n      if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX > 0) {\n        this.moveDirection = \"left\";\n      } else if (Math.abs(deltaX) > Math.abs(deltaY) && deltaX < 0) {\n        this.moveDirection = \"right\";\n      } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY > 0) {\n        this.moveDirection = \"up\";\n      } else if (Math.abs(deltaY) > Math.abs(deltaX) && deltaY < 0) {\n        this.moveDirection = \"down\";\n      }\n    }\n    w.interact.lastClientPosition = {\n      x: me.clientX,\n      y: me.clientY\n    };\n    const xLowestValue = w.axisFlags.isRangeBar ? w.globals.minY : w.globals.minX;\n    const xHighestValue = w.axisFlags.isRangeBar ? w.globals.maxY : w.globals.maxX;\n    me.panScrolled(xLowestValue, xHighestValue);\n  }\n  // delayedPanScrolled() {\n  //   const w = this.w\n  //   let newMinX = w.globals.minX\n  //   let newMaxX = w.globals.maxX\n  //   const centerX = (w.globals.maxX - w.globals.minX) / 2\n  //   if (this.moveDirection === 'left') {\n  //     newMinX = w.globals.minX + centerX\n  //     newMaxX = w.globals.maxX + centerX\n  //   } else if (this.moveDirection === 'right') {\n  //     newMinX = w.globals.minX - centerX\n  //     newMaxX = w.globals.maxX - centerX\n  //   }\n  //   newMinX = Math.floor(newMinX)\n  //   newMaxX = Math.floor(newMaxX)\n  //   this.updateScrolledChart(\n  //     { xaxis: { min: newMinX, max: newMaxX } },\n  //     newMinX,\n  //     newMaxX\n  //   )\n  // }\n  /**\n   * @param {number} xLowestValue\n   * @param {number} xHighestValue\n   */\n  panScrolled(xLowestValue, xHighestValue) {\n    var _a, _b;\n    const w = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w.globals.initialConfig.yaxis);\n    let xRatio = xyRatios.xRatio;\n    let minX = w.globals.minX;\n    let maxX = w.globals.maxX;\n    if (w.axisFlags.isRangeBar) {\n      xRatio = xyRatios.invertedYRatio;\n      minX = w.globals.minY;\n      maxX = w.globals.maxY;\n    }\n    if (this.moveDirection === \"left\") {\n      xLowestValue = minX + w.layout.gridWidth / 15 * xRatio;\n      xHighestValue = maxX + w.layout.gridWidth / 15 * xRatio;\n    } else if (this.moveDirection === \"right\") {\n      xLowestValue = minX - w.layout.gridWidth / 15 * xRatio;\n      xHighestValue = maxX - w.layout.gridWidth / 15 * xRatio;\n    }\n    if (!w.axisFlags.isRangeBar) {\n      const clampMin = (_a = w.globals.dataReducerRawMinX) != null ? _a : w.globals.initialMinX;\n      const clampMax = (_b = w.globals.dataReducerRawMaxX) != null ? _b : w.globals.initialMaxX;\n      if (xLowestValue < clampMin || xHighestValue > clampMax) {\n        xLowestValue = minX;\n        xHighestValue = maxX;\n      }\n    }\n    const xaxis = {\n      min: xLowestValue,\n      max: xHighestValue\n    };\n    const options2 = {\n      xaxis\n    };\n    if (!w.config.chart.group) {\n      options2.yaxis = yaxis;\n    }\n    this.updateScrolledChart(options2, xLowestValue, xHighestValue);\n  }\n  /**\n   * @param {object} options\n   * @param {number} xLowestValue\n   * @param {number} xHighestValue\n   */\n  updateScrolledChart(options2, xLowestValue, xHighestValue) {\n    const w = this.w;\n    this.ctx.updateHelpers._updateOptions(options2, false, false);\n    if (typeof w.config.chart.events.scrolled === \"function\") {\n      const args = {\n        xaxis: {\n          min: xLowestValue,\n          max: xHighestValue\n        }\n      };\n      w.config.chart.events.scrolled(this.ctx, args);\n      this.ctx.events.fireEvent(\"scrolled\", args);\n    }\n  }\n}\nApexCharts.registerFeatures({\n  toolbar: Toolbar,\n  zoomPanSelection: ZoomPanSelection\n});\nlet Helpers$2 = class Helpers3 {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {number | null} [annoIndex]\n   */\n  setOrientations(anno, annoIndex = null) {\n    var _a, _b;\n    const w = this.w;\n    if (anno.label.orientation === \"vertical\") {\n      const i = annoIndex !== null ? annoIndex : 0;\n      const xAnno = w.dom.baseEl.querySelector(\n        `.apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='${i}']`\n      );\n      if (xAnno !== null) {\n        const xAnnoCoord = (\n          /** @type {SVGGraphicsElement} */\n          xAnno.getBBox()\n        );\n        xAnno.setAttribute(\n          \"x\",\n          String(\n            parseFloat((_a = xAnno.getAttribute(\"x\")) != null ? _a : \"0\") - xAnnoCoord.height + 4\n          )\n        );\n        const yOffset = anno.label.position === \"top\" ? xAnnoCoord.width : -xAnnoCoord.width;\n        xAnno.setAttribute(\n          \"y\",\n          String(parseFloat((_b = xAnno.getAttribute(\"y\")) != null ? _b : \"0\") + yOffset)\n        );\n        const { x, y } = this.annoCtx.graphics.rotateAroundCenter(xAnno);\n        xAnno.setAttribute(\"transform\", `rotate(-90 ${x} ${y})`);\n      }\n    }\n  }\n  /**\n   * @param {any} annoEl\n   * @param {Record<string, any>} anno\n   */\n  addBackgroundToAnno(annoEl, anno) {\n    const w = this.w;\n    if (!annoEl || !anno.label.text || !String(anno.label.text).trim()) {\n      return null;\n    }\n    const gridEl = w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!gridEl) return null;\n    const elGridRect = gridEl.getBoundingClientRect();\n    const gridBBox = (\n      /** @type {SVGGraphicsElement} */\n      gridEl.getBBox()\n    );\n    const zoom = elGridRect.width / gridBBox.width || 1;\n    const coords = annoEl.getBoundingClientRect();\n    let {\n      left: pleft,\n      right: pright,\n      top: ptop,\n      bottom: pbottom\n    } = anno.label.style.padding;\n    if (anno.label.orientation === \"vertical\") {\n      [ptop, pbottom, pleft, pright] = [pleft, pright, ptop, pbottom];\n    }\n    const x1 = (coords.left - elGridRect.left) / zoom - pleft;\n    const y1 = (coords.top - elGridRect.top) / zoom - ptop;\n    const elRect = this.annoCtx.graphics.drawRect(\n      x1 - w.globals.barPadForNumericAxis,\n      y1,\n      coords.width / zoom + pleft + pright,\n      coords.height / zoom + ptop + pbottom,\n      anno.label.borderRadius,\n      anno.label.style.background,\n      1,\n      anno.label.borderWidth,\n      anno.label.borderColor,\n      0\n    );\n    if (anno.id) {\n      elRect.node.classList.add(anno.id);\n    }\n    return elRect;\n  }\n  annotationsBackground() {\n    const w = this.w;\n    const add = (anno, i, type) => {\n      const annoLabel = w.dom.baseEl.querySelector(\n        `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${i}']`\n      );\n      if (annoLabel) {\n        const parent = annoLabel.parentNode;\n        const elRect = this.addBackgroundToAnno(annoLabel, anno);\n        if (elRect) {\n          parent == null ? void 0 : parent.insertBefore(elRect.node, annoLabel);\n          const labelX = annoLabel.getAttribute(\"x\");\n          if (labelX !== null) {\n            applyProgressiveReveal(elRect, parseFloat(labelX), w);\n          }\n          if (anno.label.mouseEnter) {\n            elRect.node.addEventListener(\n              \"mouseenter\",\n              anno.label.mouseEnter.bind(this, anno)\n            );\n          }\n          if (anno.label.mouseLeave) {\n            elRect.node.addEventListener(\n              \"mouseleave\",\n              anno.label.mouseLeave.bind(this, anno)\n            );\n          }\n          if (anno.label.click) {\n            elRect.node.addEventListener(\n              \"click\",\n              anno.label.click.bind(this, anno)\n            );\n          }\n        }\n      }\n    };\n    w.config.annotations.xaxis.forEach(\n      (anno, i) => add(anno, i, \"xaxis\")\n    );\n    w.config.annotations.yaxis.forEach(\n      (anno, i) => add(anno, i, \"yaxis\")\n    );\n    w.config.annotations.points.forEach(\n      (anno, i) => add(anno, i, \"point\")\n    );\n  }\n  /**\n   * @param {string} type\n   * @param {Record<string, any>} anno\n   */\n  getY1Y2(type, anno) {\n    var _a, _b;\n    const w = this.w;\n    const y = type === \"y1\" ? anno.y : anno.y2;\n    let yP;\n    let clipped = false;\n    if (this.annoCtx.invertAxis) {\n      const labels = w.config.xaxis.convertedCatToNumeric ? w.labelData.categoryLabels : w.labelData.labels;\n      const catIndex = labels.indexOf(y);\n      const xLabel = w.dom.baseEl.querySelector(\n        `.apexcharts-yaxis-texts-g text:nth-child(${catIndex + 1})`\n      );\n      yP = xLabel ? parseFloat((_a = xLabel.getAttribute(\"y\")) != null ? _a : \"0\") : (w.layout.gridHeight / labels.length - 1) * (catIndex + 1) - w.globals.barHeight;\n      if (anno.seriesIndex !== void 0 && w.globals.barHeight) {\n        yP -= w.globals.barHeight / 2 * (w.seriesData.series.length - 1) - w.globals.barHeight * anno.seriesIndex;\n      }\n    } else {\n      const seriesIndex = w.globals.seriesYAxisMap[anno.yAxisIndex][0];\n      const yPos = w.config.yaxis[anno.yAxisIndex].logarithmic ? new CoreUtils(this.w).getLogVal(\n        w.config.yaxis[anno.yAxisIndex].logBase,\n        y,\n        seriesIndex\n      ) / /** @type {any} */\n      w.globals.yLogRatio[seriesIndex] : (y - w.globals.minYArr[seriesIndex]) / (w.globals.yRange[seriesIndex] / w.layout.gridHeight);\n      yP = w.layout.gridHeight - Math.min(Math.max(yPos, 0), w.layout.gridHeight);\n      clipped = yPos > w.layout.gridHeight || yPos < 0;\n      if (anno.marker && (anno.y === void 0 || anno.y === null)) {\n        yP = 0;\n      }\n      if ((_b = w.config.yaxis[anno.yAxisIndex]) == null ? void 0 : _b.reversed) {\n        yP = yPos;\n      }\n    }\n    if (typeof y === \"string\" && y.includes(\"px\")) {\n      yP = parseFloat(y);\n    }\n    return { yP, clipped };\n  }\n  /**\n   * @param {string} type\n   * @param {Record<string, any>} anno\n   */\n  getX1X2(type, anno) {\n    const w = this.w;\n    const x = type === \"x1\" ? anno.x : anno.x2;\n    const min = this.annoCtx.invertAxis ? w.globals.minY : w.globals.minX;\n    const max = this.annoCtx.invertAxis ? w.globals.maxY : w.globals.maxX;\n    const range = this.annoCtx.invertAxis ? w.globals.yRange[0] : w.globals.xRange;\n    let clipped = false;\n    let xP = this.annoCtx.inversedReversedAxis ? (max - x) / (range / w.layout.gridWidth) : (x - min) / (range / w.layout.gridWidth);\n    if ((w.config.xaxis.type === \"category\" || w.config.xaxis.convertedCatToNumeric) && !this.annoCtx.invertAxis && !w.axisFlags.dataFormatXNumeric) {\n      if (!w.config.chart.sparkline.enabled) {\n        xP = this.getStringX(x);\n      }\n    }\n    if (typeof x === \"string\" && x.includes(\"px\")) {\n      xP = parseFloat(x);\n    }\n    if ((x === void 0 || x === null) && anno.marker) {\n      xP = w.layout.gridWidth;\n    }\n    if (anno.seriesIndex !== void 0 && w.globals.barWidth && !this.annoCtx.invertAxis) {\n      xP -= w.globals.barWidth / 2 * (w.seriesData.series.length - 1) - w.globals.barWidth * anno.seriesIndex;\n    }\n    if (typeof xP !== \"number\") {\n      xP = 0;\n      clipped = true;\n    }\n    if (parseFloat(xP.toFixed(10)) > parseFloat(w.layout.gridWidth.toFixed(10))) {\n      xP = w.layout.gridWidth;\n      clipped = true;\n    } else if (xP < 0) {\n      xP = 0;\n      clipped = true;\n    }\n    return { x: xP, clipped };\n  }\n  /**\n   * @param {number} x\n   */\n  getStringX(x) {\n    var _a;\n    const w = this.w;\n    let rX = x;\n    if (w.config.xaxis.convertedCatToNumeric && w.labelData.categoryLabels.length) {\n      const strX = String(x);\n      x = w.labelData.categoryLabels.findIndex(\n        (l) => String(l) === strX\n      ) + 1;\n    }\n    const catIndex = w.labelData.labels.map(\n      (item) => Array.isArray(item) ? item.join(\" \") : item\n    ).indexOf(x);\n    const xLabel = w.dom.baseEl.querySelector(\n      `.apexcharts-xaxis-texts-g text:nth-child(${catIndex + 1})`\n    );\n    if (xLabel) {\n      rX = parseFloat((_a = xLabel.getAttribute(\"x\")) != null ? _a : \"0\");\n    }\n    return rX;\n  }\n};\nclass XAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.invertAxis = this.annoCtx.invertAxis;\n    this.helpers = new Helpers$2(this.annoCtx);\n  }\n  /**\n   * @param {XAxisAnnotations} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addXaxisAnnotation(anno, parent, index) {\n    const w = this.w;\n    const result = this.helpers.getX1X2(\"x1\", anno);\n    let x1 = result.x;\n    const clipX1 = result.clipped;\n    let clipX2 = true;\n    let x2;\n    const text = anno.label.text;\n    const strokeDashArray = anno.strokeDashArray;\n    if (!Utils$1.isNumber(x1)) return;\n    if (anno.x2 === null || typeof anno.x2 === \"undefined\") {\n      if (!clipX1) {\n        const line = this.annoCtx.graphics.drawLine(\n          x1 + anno.offsetX,\n          // x1\n          0 + anno.offsetY,\n          // y1\n          x1 + anno.offsetX,\n          // x2\n          w.layout.gridHeight + anno.offsetY,\n          // y2\n          anno.borderColor,\n          // lineColor\n          strokeDashArray,\n          //dashArray\n          anno.borderWidth\n        );\n        parent.appendChild(line.node);\n        if (anno.id) {\n          line.node.classList.add(anno.id);\n        }\n        applyProgressiveReveal(line, x1 + anno.offsetX, w);\n      }\n    } else {\n      const result2 = this.helpers.getX1X2(\"x2\", anno);\n      x2 = result2.x;\n      clipX2 = result2.clipped;\n      if (x2 < x1) {\n        const temp = x1;\n        x1 = x2;\n        x2 = temp;\n      }\n      const rect = this.annoCtx.graphics.drawRect(\n        x1 + anno.offsetX,\n        // x1\n        0 + anno.offsetY,\n        // y1\n        x2 - x1,\n        // x2\n        w.layout.gridHeight + anno.offsetY,\n        // y2\n        0,\n        // radius\n        anno.fillColor,\n        // color\n        anno.opacity,\n        // opacity,\n        1,\n        // strokeWidth\n        anno.borderColor,\n        // strokeColor\n        strokeDashArray\n        // stokeDashArray\n      );\n      rect.node.classList.add(\"apexcharts-annotation-rect\");\n      rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n      parent.appendChild(rect.node);\n      if (anno.id) {\n        rect.node.classList.add(anno.id);\n      }\n      applyProgressiveReveal(rect, x1 + anno.offsetX, w);\n    }\n    if (!(clipX1 && clipX2)) {\n      const textRects = this.annoCtx.graphics.getTextRects(\n        text,\n        anno.label.style.fontSize\n      );\n      const textY = anno.label.position === \"top\" ? 4 : anno.label.position === \"center\" ? w.layout.gridHeight / 2 + (anno.label.orientation === \"vertical\" ? textRects.width / 2 : 0) : w.layout.gridHeight;\n      const elText = this.annoCtx.graphics.drawText({\n        x: x1 + anno.label.offsetX,\n        y: textY + anno.label.offsetY - (anno.label.orientation === \"vertical\" ? anno.label.position === \"top\" ? textRects.width / 2 - 12 : -textRects.width / 2 : 0),\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-xaxis-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n      applyProgressiveReveal(elText, x1 + anno.label.offsetX, w);\n      this.annoCtx.helpers.setOrientations(anno, index);\n    }\n  }\n  drawXAxisAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-xaxis-annotations\"\n    });\n    w.config.annotations.xaxis.map(\n      (anno, index) => {\n        this.addXaxisAnnotation(anno, elg.node, index);\n      }\n    );\n    return elg;\n  }\n}\nclass YAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.helpers = new Helpers$2(this.annoCtx);\n    this.axesUtils = new AxesUtils(this.annoCtx.w, {\n      theme: this.annoCtx.theme,\n      timeScale: this.annoCtx.timeScale\n    });\n  }\n  /**\n   * @param {YAxisAnnotations} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addYaxisAnnotation(anno, parent, index) {\n    const w = this.w;\n    const strokeDashArray = anno.strokeDashArray;\n    let result = this.helpers.getY1Y2(\"y1\", anno);\n    let y1 = result.yP;\n    const clipY1 = result.clipped;\n    let y2;\n    let clipY2 = true;\n    let drawn = false;\n    const text = anno.label.text;\n    if (anno.y2 === null || typeof anno.y2 === \"undefined\") {\n      if (!clipY1) {\n        drawn = true;\n        const line = this.annoCtx.graphics.drawLine(\n          0 + anno.offsetX,\n          // x1\n          y1 + anno.offsetY,\n          // y1\n          this._getYAxisAnnotationWidth(anno),\n          // x2\n          y1 + anno.offsetY,\n          // y2\n          anno.borderColor,\n          // lineColor\n          strokeDashArray,\n          // dashArray\n          anno.borderWidth\n        );\n        parent.appendChild(line.node);\n        if (anno.id) {\n          line.node.classList.add(anno.id);\n        }\n      }\n    } else {\n      result = this.helpers.getY1Y2(\"y2\", anno);\n      y2 = result.yP;\n      clipY2 = result.clipped;\n      if (y2 > y1) {\n        const temp = y1;\n        y1 = y2;\n        y2 = temp;\n      }\n      if (!(clipY1 && clipY2)) {\n        drawn = true;\n        const rect = this.annoCtx.graphics.drawRect(\n          0 + anno.offsetX,\n          // x1\n          y2 + anno.offsetY,\n          // y1\n          this._getYAxisAnnotationWidth(anno),\n          // x2\n          y1 - y2,\n          // y2\n          0,\n          // radius\n          anno.fillColor,\n          // color\n          anno.opacity,\n          // opacity,\n          1,\n          // strokeWidth\n          anno.borderColor,\n          // strokeColor\n          strokeDashArray\n          // stokeDashArray\n        );\n        rect.node.classList.add(\"apexcharts-annotation-rect\");\n        rect.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n        parent.appendChild(rect.node);\n        if (anno.id) {\n          rect.node.classList.add(anno.id);\n        }\n      }\n    }\n    if (drawn) {\n      const textX = anno.label.position === \"right\" ? w.layout.gridWidth : anno.label.position === \"center\" ? w.layout.gridWidth / 2 : 0;\n      const elText = this.annoCtx.graphics.drawText({\n        x: textX + anno.label.offsetX,\n        y: (y2 != null ? y2 : y1) + anno.label.offsetY - 3,\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-yaxis-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n    }\n  }\n  /**\n   * @param {YAxisAnnotations} anno\n   */\n  _getYAxisAnnotationWidth(anno) {\n    const w = this.w;\n    let width = w.layout.gridWidth;\n    if (anno.width.indexOf(\"%\") > -1) {\n      width = w.layout.gridWidth * parseInt(anno.width, 10) / 100;\n    } else {\n      width = parseInt(anno.width, 10);\n    }\n    return width + anno.offsetX;\n  }\n  drawYAxisAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-yaxis-annotations\"\n    });\n    w.config.annotations.yaxis.forEach(\n      (anno, index) => {\n        anno.yAxisIndex = this.axesUtils.translateYAxisIndex(anno.yAxisIndex);\n        if (!(this.axesUtils.isYAxisHidden(anno.yAxisIndex) && this.axesUtils.yAxisAllSeriesCollapsed(anno.yAxisIndex))) {\n          this.addYaxisAnnotation(anno, elg.node, index);\n        }\n      }\n    );\n    return elg;\n  }\n}\nclass PointAnnotations {\n  /**\n   * @param {import('./Annotations').default} annoCtx\n   */\n  constructor(annoCtx) {\n    this.w = annoCtx.w;\n    this.annoCtx = annoCtx;\n    this.helpers = new Helpers$2(this.annoCtx);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addPointAnnotation(anno, parent, index) {\n    const w = this.w;\n    if (w.globals.collapsedSeriesIndices.indexOf(anno.seriesIndex) > -1) {\n      return;\n    }\n    const resultX = this.helpers.getX1X2(\"x1\", anno);\n    const x = resultX.x;\n    const clipX = resultX.clipped;\n    const resultY = this.helpers.getY1Y2(\"y1\", anno);\n    const y = resultY.yP;\n    const clipY = resultY.clipped;\n    if (!Utils$1.isNumber(x)) return;\n    if (!(clipY || clipX)) {\n      const optsPoints = {\n        pSize: anno.marker.size,\n        pointStrokeWidth: anno.marker.strokeWidth,\n        pointFillColor: anno.marker.fillColor,\n        pointStrokeColor: anno.marker.strokeColor,\n        shape: anno.marker.shape,\n        pRadius: anno.marker.radius,\n        class: `apexcharts-point-annotation-marker ${anno.marker.cssClass} ${anno.id ? anno.id : \"\"}`\n      };\n      let point = this.annoCtx.graphics.drawMarker(\n        x + anno.marker.offsetX,\n        y + anno.marker.offsetY,\n        optsPoints\n      );\n      parent.appendChild(point.node);\n      applyProgressiveReveal(point, x, w);\n      const text = anno.label.text ? anno.label.text : \"\";\n      const elText = this.annoCtx.graphics.drawText({\n        x: x + anno.label.offsetX,\n        y: y + anno.label.offsetY - anno.marker.size - parseFloat(anno.label.style.fontSize) / 1.6,\n        text,\n        textAnchor: anno.label.textAnchor,\n        fontSize: anno.label.style.fontSize,\n        fontFamily: anno.label.style.fontFamily,\n        fontWeight: anno.label.style.fontWeight,\n        foreColor: anno.label.style.color,\n        cssClass: `apexcharts-point-annotation-label ${anno.label.style.cssClass} ${anno.id ? anno.id : \"\"}`\n      });\n      elText.attr({\n        rel: index\n      });\n      parent.appendChild(elText.node);\n      applyProgressiveReveal(elText, x, w);\n      if (anno.customSVG.SVG) {\n        const g = this.annoCtx.graphics.group({\n          class: \"apexcharts-point-annotations-custom-svg \" + anno.customSVG.cssClass\n        });\n        g.attr({\n          transform: `translate(${x + anno.customSVG.offsetX}, ${y + anno.customSVG.offsetY})`\n        });\n        g.node.innerHTML = anno.customSVG.SVG;\n        parent.appendChild(g.node);\n      }\n      if (anno.image.path) {\n        const imgWidth = anno.image.width ? anno.image.width : 20;\n        const imgHeight = anno.image.height ? anno.image.height : 20;\n        point = this.annoCtx.addImage({\n          x: x + anno.image.offsetX - imgWidth / 2,\n          y: y + anno.image.offsetY - imgHeight / 2,\n          width: imgWidth,\n          height: imgHeight,\n          path: anno.image.path,\n          appendTo: \".apexcharts-point-annotations\"\n        });\n      }\n      if (anno.mouseEnter) {\n        point.node.addEventListener(\n          \"mouseenter\",\n          anno.mouseEnter.bind(this, anno)\n        );\n      }\n      if (anno.mouseLeave) {\n        point.node.addEventListener(\n          \"mouseleave\",\n          anno.mouseLeave.bind(this, anno)\n        );\n      }\n      if (anno.click) {\n        point.node.addEventListener(\"click\", anno.click.bind(this, anno));\n      }\n    }\n  }\n  drawPointAnnotations() {\n    const w = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-point-annotations\"\n    });\n    w.config.annotations.points.map(\n      (anno, index) => {\n        this.addPointAnnotation(anno, elg.node, index);\n      }\n    );\n    return elg;\n  }\n}\nclass Annotations {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w, { theme = null, timeScale = null } = {}) {\n    this.w = w;\n    this.theme = theme;\n    this.timeScale = timeScale;\n    this.invertAxis = void 0;\n    this.inversedReversedAxis = void 0;\n    this.graphics = new Graphics(this.w);\n    if (this.w.globals.isBarHorizontal) {\n      this.invertAxis = true;\n    }\n    this.helpers = new Helpers$2(this);\n    this.xAxisAnnotations = new XAnnotations(this);\n    this.yAxisAnnotations = new YAnnotations(this);\n    this.pointsAnnotations = new PointAnnotations(this);\n    if (this.w.globals.isBarHorizontal && this.w.config.yaxis[0].reversed) {\n      this.inversedReversedAxis = true;\n    }\n    this.xDivision = this.w.layout.gridWidth / this.w.globals.dataPoints;\n  }\n  drawAxesAnnotations() {\n    const w = this.w;\n    if (w.globals.axisCharts && w.globals.dataPoints) {\n      const yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations();\n      const xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations();\n      const pointAnnotations = this.pointsAnnotations.drawPointAnnotations();\n      const initialAnim = w.config.chart.animations.enabled;\n      const annoArray = [yAnnotations, xAnnotations, pointAnnotations];\n      const annoElArray = [\n        xAnnotations.node,\n        yAnnotations.node,\n        pointAnnotations.node\n      ];\n      const progressiveAnnos = w.config.chart.type === \"line\" || w.config.chart.type === \"area\" || w.config.chart.type === \"rangeArea\";\n      const skipGroupHide = [progressiveAnnos, false, progressiveAnnos];\n      for (let i = 0; i < 3; i++) {\n        w.dom.elGraphical.add(annoArray[i]);\n        if (initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n          if (w.config.chart.type !== \"scatter\" && w.config.chart.type !== \"bubble\" && w.globals.dataPoints > 1 && !skipGroupHide[i]) {\n            annoElArray[i].classList.add(\"apexcharts-element-hidden\");\n          }\n        }\n        w.globals.delayedElements.push({ el: annoElArray[i], index: 0 });\n      }\n      this.helpers.annotationsBackground();\n    }\n  }\n  drawImageAnnos() {\n    const w = this.w;\n    w.config.annotations.images.map((s) => {\n      this.addImage(s);\n    });\n  }\n  drawTextAnnos() {\n    const w = this.w;\n    w.config.annotations.texts.map((t) => {\n      this.addText(t);\n    });\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addXaxisAnnotation(anno, parent, index) {\n    this.xAxisAnnotations.addXaxisAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addYaxisAnnotation(anno, parent, index) {\n    this.yAxisAnnotations.addYaxisAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} parent\n   * @param {number} index\n   */\n  addPointAnnotation(anno, parent, index) {\n    this.pointsAnnotations.addPointAnnotation(anno, parent, index);\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  addText(params) {\n    const {\n      x,\n      y,\n      text,\n      textAnchor,\n      foreColor,\n      fontSize,\n      fontFamily,\n      fontWeight,\n      cssClass,\n      backgroundColor,\n      borderWidth,\n      strokeDashArray,\n      borderRadius,\n      borderColor,\n      appendTo = \".apexcharts-svg\",\n      paddingLeft = 4,\n      paddingRight = 4,\n      paddingBottom = 2,\n      paddingTop = 2\n    } = params;\n    const w = this.w;\n    const elText = this.graphics.drawText({\n      x,\n      y,\n      text,\n      textAnchor: textAnchor || \"start\",\n      fontSize: fontSize || \"12px\",\n      fontWeight: fontWeight || \"regular\",\n      fontFamily: fontFamily || w.config.chart.fontFamily,\n      foreColor: foreColor || w.config.chart.foreColor,\n      cssClass: \"apexcharts-text \" + cssClass ? cssClass : \"\"\n    });\n    const parent = w.dom.baseEl.querySelector(appendTo);\n    if (parent) {\n      parent.appendChild(elText.node);\n    }\n    const textRect = elText.bbox();\n    if (text) {\n      const elRect = this.graphics.drawRect(\n        textRect.x - paddingLeft,\n        textRect.y - paddingTop,\n        textRect.width + paddingLeft + paddingRight,\n        textRect.height + paddingBottom + paddingTop,\n        borderRadius,\n        backgroundColor ? backgroundColor : \"transparent\",\n        1,\n        borderWidth,\n        borderColor,\n        strokeDashArray\n      );\n      parent.insertBefore(elRect.node, elText.node);\n    }\n  }\n  /**\n   * @param {Record<string, any>} params\n   */\n  addImage(params) {\n    const w = this.w;\n    const {\n      path,\n      x = 0,\n      y = 0,\n      width = 20,\n      height = 20,\n      appendTo = \".apexcharts-svg\"\n    } = params;\n    const img = w.dom.Paper.image(path);\n    img.size(width, height).move(x, y);\n    const parent = w.dom.baseEl.querySelector(appendTo);\n    if (parent) {\n      parent.appendChild(img.node);\n    }\n    return img;\n  }\n  // The addXaxisAnnotation method requires a parent class, and user calling this method externally on the chart instance may not specify parent, hence a different method\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addXaxisAnnotationExternal(params, pushToMemory, context) {\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"xaxis\",\n      contextMethod: context.addXaxisAnnotation\n    });\n    return context;\n  }\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addYaxisAnnotationExternal(params, pushToMemory, context) {\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"yaxis\",\n      contextMethod: context.addYaxisAnnotation\n    });\n    return context;\n  }\n  /**\n   * @param {Record<string, any>} params\n   * @param {boolean} pushToMemory\n   * @param {any} context\n   */\n  addPointAnnotationExternal(params, pushToMemory, context) {\n    if (typeof this.invertAxis === \"undefined\") {\n      this.invertAxis = context.w.globals.isBarHorizontal;\n    }\n    this.addAnnotationExternal({\n      params,\n      pushToMemory,\n      context,\n      type: \"point\",\n      contextMethod: context.addPointAnnotation\n    });\n    return context;\n  }\n  /** @param {{params: any, pushToMemory: any, context: any, type: any, contextMethod: any}} opts */\n  addAnnotationExternal({\n    params,\n    pushToMemory,\n    context,\n    type,\n    contextMethod\n  }) {\n    const me = context;\n    const w = me.w;\n    const parent = w.dom.baseEl.querySelector(`.apexcharts-${type}-annotations`);\n    const index = parent.childNodes.length + 1;\n    const options2 = new Options();\n    const axesAnno = Object.assign(\n      {},\n      type === \"xaxis\" ? options2.xAxisAnnotation : type === \"yaxis\" ? options2.yAxisAnnotation : options2.pointAnnotation\n    );\n    const anno = Utils$1.extend(axesAnno, params);\n    switch (type) {\n      case \"xaxis\":\n        this.addXaxisAnnotation(anno, parent, index);\n        break;\n      case \"yaxis\":\n        this.addYaxisAnnotation(anno, parent, index);\n        break;\n      case \"point\":\n        this.addPointAnnotation(anno, parent, index);\n        break;\n    }\n    const axesAnnoLabel = w.dom.baseEl.querySelector(\n      `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${index}']`\n    );\n    const elRect = this.helpers.addBackgroundToAnno(axesAnnoLabel, anno);\n    if (elRect) {\n      parent.insertBefore(elRect.node, axesAnnoLabel);\n    }\n    if (pushToMemory) {\n      w.globals.memory.methodsToExec.push({\n        context: me,\n        id: anno.id ? anno.id : Utils$1.randomId(),\n        method: contextMethod,\n        label: \"addAnnotation\",\n        params\n      });\n    }\n    return context;\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  clearAnnotations(ctx) {\n    const w = ctx.w;\n    const annos = w.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\"\n    );\n    for (let i = w.globals.memory.methodsToExec.length - 1; i >= 0; i--) {\n      if (w.globals.memory.methodsToExec[i].label === \"addText\" || w.globals.memory.methodsToExec[i].label === \"addAnnotation\") {\n        w.globals.memory.methodsToExec.splice(i, 1);\n      }\n    }\n    Array.prototype.forEach.call(annos, (a) => {\n      while (a.firstChild) {\n        a.removeChild(a.firstChild);\n      }\n    });\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {string} id\n   */\n  removeAnnotation(ctx, id) {\n    const w = ctx.w;\n    const annos = w.dom.baseEl.querySelectorAll(`.${id}`);\n    if (annos) {\n      w.globals.memory.methodsToExec.map((m, i) => {\n        if (m.id === id) {\n          w.globals.memory.methodsToExec.splice(i, 1);\n        }\n      });\n      Object.keys(w.config.annotations).forEach((key) => {\n        const annotationArray = w.config.annotations[key];\n        if (Array.isArray(annotationArray)) {\n          w.config.annotations[key] = annotationArray.filter((m) => m.id !== id);\n        }\n      });\n      Array.prototype.forEach.call(annos, (a) => {\n        a.parentElement.removeChild(a);\n      });\n    }\n  }\n}\nApexCharts.registerFeatures({ annotations: Annotations });\nclass KeyboardNavigation {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.seriesIndex = 0;\n    this.dataPointIndex = 0;\n    this.active = false;\n    this._tooltipDismissed = false;\n    this._focusedEl = null;\n    this._hoveredBarEl = null;\n    this._enlargedScatterMarker = null;\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onFocus = this._onFocus.bind(this);\n    this._onBlur = this._onBlur.bind(this);\n    this._onLegendClick = this._onLegendClick.bind(this);\n    this._onPointerDown = this._onPointerDown.bind(this);\n    this._lastPointerDownAt = 0;\n  }\n  // ─── Public API ───────────────────────────────────────────────────────────\n  /**\n   * Called after the chart and tooltip have been fully rendered.\n   * Attaches event listeners and makes the SVG keyboard-focusable.\n   */\n  init() {\n    const w = this.w;\n    const svgEl = w.dom.Paper.node;\n    if (!svgEl) return;\n    svgEl.setAttribute(\"tabindex\", \"0\");\n    svgEl.addEventListener(\"focus\", this._onFocus);\n    svgEl.addEventListener(\"blur\", this._onBlur);\n    svgEl.addEventListener(\"mousedown\", this._onPointerDown, { capture: true });\n    svgEl.addEventListener(\"pointerdown\", this._onPointerDown, {\n      capture: true\n    });\n    svgEl.addEventListener(\"touchstart\", this._onPointerDown, {\n      capture: true,\n      passive: true\n    });\n    svgEl.addEventListener(\"keydown\", this._onKeyDown, { passive: false });\n    this.ctx.events.addEventListener(\"legendClick\", this._onLegendClick);\n  }\n  /**\n   * Removes all event listeners. Called from chart.destroy().\n   */\n  destroy() {\n    const w = this.w;\n    const svgEl = w.dom.Paper && w.dom.Paper.node;\n    if (!svgEl) return;\n    svgEl.removeEventListener(\"focus\", this._onFocus);\n    svgEl.removeEventListener(\"blur\", this._onBlur);\n    svgEl.removeEventListener(\"keydown\", this._onKeyDown);\n    svgEl.removeEventListener(\n      \"mousedown\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    svgEl.removeEventListener(\n      \"pointerdown\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    svgEl.removeEventListener(\n      \"touchstart\",\n      this._onPointerDown,\n      /** @type {any} */\n      { capture: true }\n    );\n    this.ctx.events.removeEventListener(\"legendClick\", this._onLegendClick);\n  }\n  // Records the timestamp of the most recent pointer-down inside the SVG.\n  // `_onFocus` reads this to distinguish keyboard-driven focus (no recent\n  // pointer activity) from mouse-driven focus (pointer event within the\n  // last 100 ms). Stays a no-op for keyboard users.\n  _onPointerDown() {\n    this._lastPointerDownAt = Date.now();\n  }\n  /**\n   * Called from Events.js keydown handler. Navigation keys are already handled\n   * by the direct SVG listener (which can call preventDefault). This entry\n   * point is intentionally a no-op — Events.js still fires the public keyDown\n   * callback and fireEvent('keydown') independently.\n   * @param {Event} _e\n   */\n  handleKey(_e) {\n  }\n  // ─── Focus / blur ─────────────────────────────────────────────────────────\n  _onFocus() {\n    if (!this._isNavEnabled()) return;\n    if (Date.now() - this._lastPointerDownAt < 100) {\n      return;\n    }\n    this.active = true;\n    this._clampCursor();\n    this._snapToVisibleRange();\n    this._showCurrentPoint();\n  }\n  _onBlur() {\n    this.active = false;\n    this._tooltipDismissed = false;\n    this._hideFocus();\n  }\n  // Called when the user clicks a legend item (collapse/expand a series).\n  // Hide the keyboard-nav tooltip — the chart is about to re-render and the\n  // current position may no longer be valid.\n  _onLegendClick() {\n    if (!this.active) return;\n    this.active = false;\n    this._hideFocus();\n  }\n  // ─── Key handler ──────────────────────────────────────────────────────────\n  /**\n   * @param {KeyboardEvent} e\n   */\n  _onKeyDown(e) {\n    var _a, _b, _c;\n    if (!this._isNavEnabled() || !this.active) return;\n    if (e.shiftKey && (e.key === \"ArrowRight\" || e.key === \"ArrowLeft\") && this._canPan()) {\n      e.preventDefault();\n      this._panBy(e.key === \"ArrowRight\" ? 1 : -1);\n      return;\n    }\n    switch (e.key) {\n      case \"ArrowRight\":\n        e.preventDefault();\n        this._move(0, 1);\n        break;\n      case \"ArrowLeft\":\n        e.preventDefault();\n        this._move(0, -1);\n        break;\n      case \"ArrowUp\":\n        e.preventDefault();\n        this._move(-1, 0);\n        break;\n      case \"ArrowDown\":\n        e.preventDefault();\n        this._move(1, 0);\n        break;\n      case \"Home\":\n        e.preventDefault();\n        this.dataPointIndex = 0;\n        this._skipNullForward();\n        this._showCurrentPoint();\n        break;\n      case \"End\":\n        e.preventDefault();\n        this.dataPointIndex = this._getDataPointCount(this.seriesIndex) - 1;\n        this._skipNullBackward();\n        this._showCurrentPoint();\n        break;\n      case \"Enter\":\n      case \" \":\n        e.preventDefault();\n        this._fireClick();\n        break;\n      case \"+\":\n      case \"=\":\n        if (this._canZoom()) {\n          e.preventDefault();\n          (_a = this.ctx.toolbar) == null ? void 0 : _a.handleZoomIn();\n          this._announce(\"Zoomed in\");\n        }\n        break;\n      case \"-\":\n      case \"_\":\n        if (this._canZoom()) {\n          e.preventDefault();\n          (_b = this.ctx.toolbar) == null ? void 0 : _b.handleZoomOut();\n          this._announce(\"Zoomed out\");\n        }\n        break;\n      case \"0\":\n        if (this._canZoom() && this.w.interact.zoomed) {\n          e.preventDefault();\n          (_c = this.ctx.toolbar) == null ? void 0 : _c.handleZoomReset();\n          this._announce(\"Zoom reset\");\n        }\n        break;\n      case \"Escape\":\n        e.preventDefault();\n        if (!this._tooltipDismissed) {\n          this._tooltipDismissed = true;\n          this._hideFocus();\n        } else {\n          this.active = false;\n          this._tooltipDismissed = false;\n          this._hideFocus();\n        }\n        break;\n    }\n  }\n  // ─── Zoom / pan (keyboard alternatives for drag gestures) ─────────────────\n  _canZoom() {\n    const w = this.w;\n    return Boolean(\n      w.globals.axisCharts && w.config.chart.zoom && w.config.chart.zoom.enabled\n    );\n  }\n  _canPan() {\n    return this._canZoom();\n  }\n  /**\n   * Shift the visible x-range by ~10% in the given direction.\n   * @param {number} direction +1 = right, -1 = left\n   */\n  _panBy(direction) {\n    const w = this.w;\n    const toolbar = this.ctx.toolbar;\n    if (!toolbar) return;\n    const minX = Number(w.globals.minX);\n    const maxX = Number(w.globals.maxX);\n    if (!isFinite(minX) || !isFinite(maxX) || minX === maxX) return;\n    const span = maxX - minX;\n    const step = span * 0.1 * direction;\n    toolbar.zoomUpdateOptions(minX + step, maxX + step);\n    this._announce(direction > 0 ? \"Panned right\" : \"Panned left\");\n  }\n  // ─── Navigation ───────────────────────────────────────────────────────────\n  /**\n   * @param {number} dSeries\n   * @param {number} dPoint\n   */\n  _move(dSeries, dPoint) {\n    const w = this.w;\n    const wrapAround = w.config.chart.accessibility.keyboard.navigation.wrapAround;\n    if (dSeries !== 0) {\n      const ttCtx = this.w.globals.tooltip;\n      if (ttCtx && ttCtx.tConfig && ttCtx.tConfig.shared) {\n        const j = this.dataPointIndex;\n        const isActuallyShared = ttCtx.tooltipUtil && ttCtx.tooltipUtil.isXoverlap(j) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n        if (isActuallyShared) return;\n      }\n      const total = this._getSeriesCount();\n      let si = this.seriesIndex + dSeries;\n      let attempts = 0;\n      while (attempts < total) {\n        if (si < 0) si = wrapAround ? total - 1 : 0;\n        if (si >= total) si = wrapAround ? 0 : total - 1;\n        if (!w.globals.collapsedSeriesIndices.includes(si)) break;\n        si += dSeries;\n        attempts++;\n      }\n      this.seriesIndex = si;\n      const dpCount = this._getDataPointCount(si);\n      if (this.dataPointIndex >= dpCount) {\n        this.dataPointIndex = dpCount - 1;\n      }\n    }\n    if (dPoint !== 0) {\n      const dpCount = this._getDataPointCount(this.seriesIndex);\n      let di = this.dataPointIndex + dPoint;\n      if (di < 0) di = wrapAround ? dpCount - 1 : 0;\n      if (di >= dpCount) di = wrapAround ? 0 : dpCount - 1;\n      this.dataPointIndex = di;\n      if (dPoint > 0) {\n        this._skipNullForward();\n      } else {\n        this._skipNullBackward();\n      }\n      if (!this._isDataPointVisible(this.seriesIndex, this.dataPointIndex)) {\n        this._snapToVisibleRangeInDirection(dPoint);\n      }\n    }\n    this._showCurrentPoint();\n  }\n  /** Advance dataPointIndex forward past any nulls */\n  _skipNullForward() {\n    const w = this.w;\n    const si = this.seriesIndex;\n    const dpCount = this._getDataPointCount(si);\n    let di = this.dataPointIndex;\n    let attempts = 0;\n    if (!Array.isArray(w.seriesData.series[si])) return;\n    while (attempts < dpCount && w.seriesData.series[si][di] === null) {\n      di = (di + 1) % dpCount;\n      attempts++;\n    }\n    this.dataPointIndex = di;\n  }\n  /** Retreat dataPointIndex backward past any nulls */\n  _skipNullBackward() {\n    const w = this.w;\n    const si = this.seriesIndex;\n    const dpCount = this._getDataPointCount(si);\n    let di = this.dataPointIndex;\n    let attempts = 0;\n    if (!Array.isArray(w.seriesData.series[si])) return;\n    while (attempts < dpCount && w.seriesData.series[si][di] === null) {\n      di = (di - 1 + dpCount) % dpCount;\n      attempts++;\n    }\n    this.dataPointIndex = di;\n  }\n  // ─── Display ──────────────────────────────────────────────────────────────\n  _showCurrentPoint() {\n    const { seriesIndex: i, dataPointIndex: j } = this;\n    const w = this.w;\n    const ttCtx = w.globals.tooltip;\n    if (!ttCtx || !ttCtx.ttItems) return;\n    w.interact.capturedSeriesIndex = i;\n    w.interact.capturedDataPointIndex = j;\n    this._applyFocusClass(i, j);\n    this._showTooltip(\n      i,\n      j,\n      /** @type {any} */\n      ttCtx\n    );\n  }\n  _hideFocus() {\n    const w = this.w;\n    const ttCtx = (\n      /** @type {any} */\n      w.globals.tooltip\n    );\n    this._removeFocusClass();\n    this._leaveHoveredBar();\n    if (!ttCtx) return;\n    if (ttCtx.marker) {\n      ttCtx.marker.resetPointsSize();\n    }\n    this._enlargedScatterMarker = null;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (tooltipEl) {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n      }\n    }\n    w.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    if (xcrosshairs) xcrosshairs.classList.remove(\"apexcharts-active\");\n  }\n  // ─── Tooltip display per chart type ───────────────────────────────────────\n  /**\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltip(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const tooltipEl = ttCtx.getElTooltip();\n    if (!tooltipEl) return;\n    const cachedDims = ttCtx.getCachedDimensions();\n    ttCtx.tooltipRect = {\n      x: 0,\n      y: 0,\n      ttWidth: cachedDims.ttWidth || 0,\n      ttHeight: cachedDims.ttHeight || 0\n    };\n    this._setSyntheticEvent(i, j, ttCtx);\n    w.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n    tooltipEl.classList.add(\"apexcharts-active\");\n    if (w.config.chart.accessibility.enabled && w.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.removeAttribute(\"aria-hidden\");\n    }\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      this._showTooltipNonAxis(i, j, ttCtx, tooltipEl);\n    } else if (type === \"radialBar\") {\n      this._showTooltipRadialBar(i, j, ttCtx, tooltipEl);\n    } else if (type === \"heatmap\" || type === \"treemap\") {\n      this._showTooltipHeatTree(i, j, ttCtx, tooltipEl, type);\n    } else if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      this._showTooltipBar(i, j, ttCtx);\n    } else {\n      this._showTooltipAxisLine(i, j, ttCtx);\n    }\n  }\n  /**\n   * Set ttCtx.e to a synthetic mouse-event-like object whose clientX/Y point\n   * to the centre of the current data-point element.  This ensures that any\n   * positioning helper that reads ttCtx.e (followCursor path in moveTooltip,\n   * moveStickyTooltipOverBars, moveDynamicPointsOnHover, etc.) gets valid\n   * coordinates rather than crashing on undefined.\n   *\n   * For chart types that don't have a concrete SVG element per data point\n   * (pie, radialBar) we fall back to the SVG centre.\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _setSyntheticEvent(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    let clientX = 0;\n    let clientY = 0;\n    const el = this._getFocusableElement(i, j);\n    if (el) {\n      const rect = el.getBoundingClientRect();\n      clientX = rect.left + rect.width / 2;\n      clientY = rect.top + rect.height / 2;\n    } else if (w.globals.pointsArray && w.globals.pointsArray[i] && w.globals.pointsArray[i][j]) {\n      const pt = w.globals.pointsArray[i][j];\n      const elGrid = ttCtx.getElGrid && ttCtx.getElGrid();\n      if (elGrid) {\n        const gridRect = elGrid.getBoundingClientRect();\n        clientX = gridRect.left + (pt[0] || 0);\n        clientY = gridRect.top + (pt[1] || 0);\n      }\n    } else {\n      const svgEl = w.dom.Paper && w.dom.Paper.node;\n      if (svgEl) {\n        const svgRect = svgEl.getBoundingClientRect();\n        clientX = svgRect.left + svgRect.width / 2;\n        clientY = svgRect.top + svgRect.height / 2;\n      }\n    }\n    if (type === \"line\" || type === \"area\" || type === \"rangeArea\" || type === \"scatter\" || type === \"bubble\" || type === \"radar\") {\n      if (w.globals.pointsArray && w.globals.pointsArray[i] && w.globals.pointsArray[i][j]) {\n        const pt = w.globals.pointsArray[i][j];\n        const elGrid = ttCtx.getElGrid && ttCtx.getElGrid();\n        if (elGrid) {\n          const gridRect = elGrid.getBoundingClientRect();\n          clientX = gridRect.left + (pt[0] || 0);\n          clientY = gridRect.top + (pt[1] || 0);\n        }\n      }\n    }\n    ttCtx.e = { type: \"mousemove\", clientX, clientY };\n  }\n  /**\n   * bar / column / candlestick / boxPlot / rangeBar\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltipBar(i, j, ttCtx) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const shared = ttCtx.tConfig.shared && (ttCtx.tooltipUtil.isXoverlap(j) || w.globals.isBarHorizontal) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    const rangeData = (\n      /** @type {any} */\n      (_d = (_c = (_b = (_a = w.rangeData.seriesRange) == null ? void 0 : _a[i]) == null ? void 0 : _b[j]) == null ? void 0 : _c.y) == null ? void 0 : _d[0]\n    );\n    ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues(__spreadValues({\n      ttItems: ttCtx.ttItems,\n      i,\n      j\n    }, (rangeData == null ? void 0 : rangeData.y1) !== void 0 && { y1: rangeData.y1 }), (rangeData == null ? void 0 : rangeData.y2) !== void 0 && { y2: rangeData.y2 }), {\n      shared\n    }));\n    const parent = `.apexcharts-series[data\\\\:realIndex='${i}']`;\n    const elPath = w.dom.Paper.findOne(\n      `${parent} path[j='${j}'], ${parent} circle[j='${j}'], ${parent} rect[j='${j}']`\n    );\n    if (elPath) {\n      this._leaveHoveredBar();\n      const graphics = new Graphics(this.w, this.ctx);\n      graphics.pathMouseEnter(elPath, null);\n      this._hoveredBarEl = elPath;\n    }\n    if (w.globals.isBarHorizontal) {\n      const barDomEl = elPath && elPath.node;\n      if (barDomEl) {\n        const wrapRect = w.dom.elWrap.getBoundingClientRect();\n        const barRect = barDomEl.getBoundingClientRect();\n        const barCx = barRect.left - wrapRect.left;\n        const barCy = barRect.top - wrapRect.top;\n        const bh = barRect.height;\n        const bw = barRect.width;\n        const ttWidth = ttCtx.tooltipRect.ttWidth || 0;\n        const ttHeight = ttCtx.tooltipRect.ttHeight || 0;\n        const y = barCy + bh / 2 - ttHeight / 2;\n        let x = barCx + bw;\n        const baselineX = ttCtx.xyRatios && ttCtx.xyRatios.baseLineInvertedY != null ? ttCtx.xyRatios.baseLineInvertedY : wrapRect.width / 2;\n        if (barCx < baselineX) {\n          x = barCx - ttWidth;\n        }\n        const tooltipEl = ttCtx.getElTooltip();\n        if (tooltipEl) {\n          tooltipEl.style.left = x + \"px\";\n          tooltipEl.style.top = y + \"px\";\n        }\n      }\n    } else {\n      ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, i);\n    }\n  }\n  /**\n   * line / area / scatter / bubble / radar / rangeArea\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showTooltipAxisLine(i, j, ttCtx) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const sharedConfigured = ttCtx.tConfig.shared;\n    const shared = sharedConfigured && ttCtx.tooltipUtil.isXoverlap(j) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      j,\n      shared\n    });\n    const isScatterLike = type === \"scatter\" || type === \"bubble\";\n    const hasVisibleMarkers = w.globals.markers.largestSize > 0;\n    if (isScatterLike) {\n      this._showScatterBubblePoint(i, j, ttCtx);\n    } else if (hasVisibleMarkers) {\n      if (shared) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i);\n      }\n    } else if (shared) {\n      ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n    } else {\n      ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i);\n    }\n  }\n  /**\n   * Scatter / bubble: find the specific marker element for (seriesIndex i,\n   * dataPointIndex j), resize only that element, and position the tooltip at\n   * its coordinates — mirroring what Position.moveMarkers does for mouse hover.\n   *\n   * Unlike enlargePoints(j) which queries ALL series for rel===j (causing\n   * multiple bubbles to enlarge and tooltip to land on the wrong one), this\n   * method queries by both series index AND data-point index for precision.\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   */\n  _showScatterBubblePoint(i, j, ttCtx) {\n    const baseEl = this.w.dom.baseEl;\n    if (this._enlargedScatterMarker) {\n      ttCtx.marker.oldPointSize(this._enlargedScatterMarker);\n      this._enlargedScatterMarker = null;\n    }\n    const seriesEl = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i}']`\n    );\n    if (!seriesEl) return;\n    const markerEl = seriesEl.querySelector(`.apexcharts-marker[rel='${j}']`);\n    if (!markerEl) return;\n    ttCtx.marker.enlargeCurrentPoint(j, markerEl);\n    this._enlargedScatterMarker = markerEl;\n  }\n  /**\n   * pie / donut / polarArea\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   */\n  _showTooltipNonAxis(i, j, ttCtx, tooltipEl) {\n    var _a, _b;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i: j,\n      shared: false\n    });\n    const tooltipBound = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipBound.width || ttCtx.tooltipRect.ttWidth || 0;\n    const ttHeight = tooltipBound.height || ttCtx.tooltipRect.ttHeight || 0;\n    const sliceEl = w.dom.baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    if (sliceEl) {\n      const cx = parseFloat((_a = sliceEl.getAttribute(\"data:cx\")) != null ? _a : \"\");\n      const cy = parseFloat((_b = sliceEl.getAttribute(\"data:cy\")) != null ? _b : \"\");\n      if (!isNaN(cx) && !isNaN(cy)) {\n        const svgBound = w.dom.Paper.node.getBoundingClientRect();\n        const wrapBound = w.dom.elWrap.getBoundingClientRect();\n        const offsetX = svgBound.left - wrapBound.left;\n        const offsetY = svgBound.top - wrapBound.top;\n        tooltipEl.style.left = offsetX + cx - ttWidth / 2 + \"px\";\n        tooltipEl.style.top = offsetY + cy - ttHeight - 10 + \"px\";\n      }\n    }\n  }\n  /**\n   * radialBar — one ring per series, single value each\n   * @param {number} i\n   * @param {any} _j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   */\n  _showTooltipRadialBar(i, _j, ttCtx, tooltipEl) {\n    var _a;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      shared: false\n    });\n    const { ttWidth = 0, ttHeight = 0 } = ttCtx.getCachedDimensions();\n    const arcEl = w.dom.baseEl.querySelector(\n      `.apexcharts-radialbar-series[data\\\\:realIndex='${i}'] path`\n    );\n    if (arcEl) {\n      const angle = parseFloat((_a = arcEl.getAttribute(\"data:angle\")) != null ? _a : \"\") || 0;\n      const initialAngle = w.config.plotOptions.radialBar.startAngle || 0;\n      const midAngle = initialAngle + angle / 2;\n      const centerX = w.layout.gridWidth / 2;\n      const centerY = w.layout.gridHeight / 2;\n      const radialSize = w.globals.radialSize || Math.min(w.layout.gridWidth, w.layout.gridHeight) / 2;\n      const seriesCount = w.seriesData.series.length;\n      const trackSize = radialSize / Math.max(seriesCount, 1);\n      const outerRadius = radialSize - i * trackSize;\n      const innerRadius = outerRadius - trackSize;\n      const ringRadius = (outerRadius + innerRadius) / 2;\n      const centroid = Utils$1.polarToCartesian(\n        centerX,\n        centerY,\n        ringRadius,\n        midAngle\n      );\n      const x = centroid.x + (w.layout.translateX || 0);\n      const y = centroid.y + (w.layout.translateY || 0);\n      tooltipEl.style.left = x - ttWidth / 2 + \"px\";\n      tooltipEl.style.top = y - ttHeight - 10 + \"px\";\n    }\n  }\n  /**\n   * heatmap / treemap — position tooltip using element bounding rect\n   * @param {number} i\n   * @param {number} j\n   * @param {import('../tooltip/Tooltip').default} ttCtx\n   * @param {HTMLElement} tooltipEl\n   * @param {string} type\n   */\n  _showTooltipHeatTree(i, j, ttCtx, tooltipEl, type) {\n    var _a, _b;\n    const w = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i,\n      j,\n      shared: false\n    });\n    const tooltipRect = tooltipEl.getBoundingClientRect();\n    const ttWidth = tooltipRect.width || ttCtx.tooltipRect.ttWidth || 0;\n    const ttHeight = tooltipRect.height || ttCtx.tooltipRect.ttHeight || 0;\n    const rectClass = type === \"heatmap\" ? \"apexcharts-heatmap-rect\" : \"apexcharts-treemap-rect\";\n    const cell = w.dom.baseEl.querySelector(`.${rectClass}[i='${i}'][j='${j}']`);\n    if (cell) {\n      const wrapRect = w.dom.elWrap.getBoundingClientRect();\n      const cellRect = cell.getBoundingClientRect();\n      const cellCx = cellRect.left - wrapRect.left;\n      const cellCy = cellRect.top - wrapRect.top;\n      const cellWidth = cellRect.width;\n      const cellHeight = cellRect.height;\n      const cx = parseFloat((_a = cell.getAttribute(\"cx\")) != null ? _a : \"\");\n      const cellWidthAttr = parseFloat((_b = cell.getAttribute(\"width\")) != null ? _b : \"\");\n      ttCtx.tooltipPosition.moveXCrosshairs(cx + cellWidthAttr / 2);\n      let x = cellCx + cellWidth + ttWidth / 2;\n      const y = cellCy + cellHeight / 2 - ttHeight / 2;\n      if (cellCx + cellWidth > w.layout.gridWidth / 2) {\n        x = cellCx - ttWidth / 2;\n      }\n      tooltipEl.style.left = x + \"px\";\n      tooltipEl.style.top = y + \"px\";\n    }\n  }\n  // ─── Focus class management ───────────────────────────────────────────────\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  _applyFocusClass(i, j) {\n    this._removeFocusClass();\n    const el = this._getFocusableElement(i, j);\n    if (el) {\n      el.classList.add(\"apexcharts-keyboard-focused\");\n      el.setAttribute(\"role\", \"img\");\n      const label = this._buildPointLabel(i, j);\n      if (label) el.setAttribute(\"aria-label\", label);\n      this._focusedEl = el;\n    }\n  }\n  _removeFocusClass() {\n    if (this._focusedEl) {\n      this._focusedEl.classList.remove(\"apexcharts-keyboard-focused\");\n      this._focusedEl.removeAttribute(\"role\");\n      this._focusedEl.removeAttribute(\"aria-label\");\n      this._focusedEl = null;\n    }\n  }\n  /**\n   * Build an accessible label for the data point at (i, j) using the same\n   * formatters the visible tooltip / axis labels use, so SR output matches\n   * the visual presentation.\n   * @param {number} i\n   * @param {number} j\n   * @returns {string}\n   */\n  _buildPointLabel(i, j) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w = this.w;\n    const type = w.config.chart.type;\n    const seriesNames = w.seriesData.seriesNames || [];\n    const series = w.seriesData.series || [];\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      const sliceLabel = (_b = ((_a = w.labelData) == null ? void 0 : _a.labels) && w.labelData.labels[j]) != null ? _b : \"\";\n      const value = Array.isArray(series) ? series[j] : \"\";\n      return sliceLabel ? `${sliceLabel}: ${value}` : `${value}`;\n    }\n    if (type === \"radialBar\") {\n      const seriesName2 = seriesNames[i] || `Series ${i + 1}`;\n      const value = Array.isArray(series) ? series[i] : \"\";\n      return `${seriesName2}: ${value}`;\n    }\n    const seriesName = seriesNames[i] || `Series ${i + 1}`;\n    const row = Array.isArray(series[i]) ? series[i] : [];\n    const rawValue = row[j];\n    let formattedValue = rawValue == null ? \"\" : String(rawValue);\n    const yFormatter = (_d = (_c = w.formatters) == null ? void 0 : _c.yLabelFormatters) == null ? void 0 : _d[i];\n    if (typeof yFormatter === \"function\") {\n      try {\n        formattedValue = yFormatter(rawValue, {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n      } catch (e) {\n      }\n    }\n    let category = \"\";\n    const categoryLabels = (_e = w.labelData) == null ? void 0 : _e.categoryLabels;\n    const seriesX = (_g = (_f = w.seriesData) == null ? void 0 : _f.seriesX) == null ? void 0 : _g[i];\n    if (Array.isArray(categoryLabels) && categoryLabels[j] != null) {\n      category = String(categoryLabels[j]);\n    } else if (Array.isArray(seriesX) && seriesX[j] != null) {\n      const xFormatter = (_h = w.formatters) == null ? void 0 : _h.xLabelFormatter;\n      if (typeof xFormatter === \"function\") {\n        try {\n          category = String(\n            xFormatter(seriesX[j], { seriesIndex: i, dataPointIndex: j, w })\n          );\n        } catch (e) {\n          category = String(seriesX[j]);\n        }\n      } else {\n        category = String(seriesX[j]);\n      }\n    }\n    return category ? `${seriesName}: ${formattedValue}, ${category}` : `${seriesName}: ${formattedValue}`;\n  }\n  _leaveHoveredBar() {\n    if (this._hoveredBarEl) {\n      const graphics = new Graphics(this.w, this.ctx);\n      graphics.pathMouseLeave(this._hoveredBarEl, null);\n      this._hoveredBarEl = null;\n    }\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  _getFocusableElement(i, j) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    const baseEl = w.dom.baseEl;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    }\n    if (type === \"heatmap\") {\n      return baseEl.querySelector(\n        `.apexcharts-heatmap-rect[i='${i}'][j='${j}']`\n      );\n    }\n    if (type === \"treemap\") {\n      return baseEl.querySelector(\n        `.apexcharts-treemap-rect[i='${i}'][j='${j}']`\n      );\n    }\n    if (type === \"radialBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-radialbar-series[data\\\\:realIndex='${i}'] path`\n      );\n    }\n    if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-series[data\\\\:realIndex='${i}'] path[j='${j}']`\n      );\n    }\n    const marker = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i}'] .apexcharts-marker[rel='${j}']`\n    );\n    return marker || null;\n  }\n  // ─── Click / Enter ────────────────────────────────────────────────────────\n  _fireClick() {\n    const w = this.w;\n    const ttCtx = w.globals.tooltip;\n    if (!ttCtx) return;\n    const syntheticEvent = {\n      type: \"mouseup\",\n      clientX: 0,\n      clientY: 0\n    };\n    ttCtx.markerClick(syntheticEvent, this.seriesIndex, this.dataPointIndex);\n  }\n  // ─── Helpers ──────────────────────────────────────────────────────────────\n  _isNavEnabled() {\n    const a11y = this.w.config.chart.accessibility;\n    return a11y.enabled && a11y.keyboard.enabled && a11y.keyboard.navigation.enabled;\n  }\n  _getSeriesCount() {\n    const w = this.w;\n    const type = w.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return 1;\n    }\n    return w.seriesData.series.length;\n  }\n  /**\n   * @param {number} si\n   */\n  _getDataPointCount(si) {\n    const w = this.w;\n    const type = w.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return w.seriesData.series.length;\n    }\n    const series = w.seriesData.series;\n    return series[si] && Array.isArray(series[si]) ? series[si].length : 0;\n  }\n  _clampCursor() {\n    const seriesCount = this._getSeriesCount();\n    if (this.seriesIndex >= seriesCount) this.seriesIndex = seriesCount - 1;\n    if (this.seriesIndex < 0) this.seriesIndex = 0;\n    const dpCount = this._getDataPointCount(this.seriesIndex);\n    if (this.dataPointIndex >= dpCount) this.dataPointIndex = dpCount - 1;\n    if (this.dataPointIndex < 0) this.dataPointIndex = 0;\n  }\n  /**\n   * When the chart is zoomed in, the current dataPointIndex may point to a\n   * data point that is outside the visible viewport. Snap the cursor to the\n   * first data point whose x-value falls within [minX, maxX].\n   *\n   * Only adjusts when w.seriesData.seriesX is populated (numeric/datetime axes).\n   * Category-only charts (seriesX entries are strings or auto-indices) are\n   * unaffected — all points are always visible.\n   */\n  _snapToVisibleRange() {\n    const w = this.w;\n    const gl = w.globals;\n    const si = this.seriesIndex;\n    if (!w.interact.zoomed) return;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX || !seriesX.length) return;\n    const minX = gl.minX;\n    const maxX = gl.maxX;\n    if (minX === void 0 || maxX === void 0) return;\n    const currentX = seriesX[this.dataPointIndex];\n    if (currentX >= minX && currentX <= maxX) return;\n    const dpCount = seriesX.length;\n    for (let di = 0; di < dpCount; di++) {\n      if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n        this.dataPointIndex = di;\n        return;\n      }\n    }\n  }\n  /**\n   * Snap to the nearest visible data point in the given navigation direction.\n   * direction > 0 → find the first visible point (left boundary of zoomed range)\n   * direction < 0 → find the last visible point (right boundary of zoomed range)\n   * @param {number} direction\n   */\n  _snapToVisibleRangeInDirection(direction) {\n    const w = this.w;\n    const gl = w.globals;\n    const si = this.seriesIndex;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX || !seriesX.length) return;\n    const minX = gl.minX;\n    const maxX = gl.maxX;\n    if (minX === void 0 || maxX === void 0) return;\n    const dpCount = seriesX.length;\n    if (direction >= 0) {\n      for (let di = 0; di < dpCount; di++) {\n        if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n          this.dataPointIndex = di;\n          return;\n        }\n      }\n    } else {\n      for (let di = dpCount - 1; di >= 0; di--) {\n        if (seriesX[di] >= minX && seriesX[di] <= maxX) {\n          this.dataPointIndex = di;\n          return;\n        }\n      }\n    }\n  }\n  /**\n   * Check whether the data point at (si, di) is within the current visible\n   * x-axis range. Used to skip out-of-viewport points during keyboard nav.\n   * @param {number} si\n   * @param {number} di\n   */\n  _isDataPointVisible(si, di) {\n    const w = this.w;\n    const gl = w.globals;\n    if (!w.interact.zoomed) return true;\n    const seriesX = w.seriesData.seriesX && w.seriesData.seriesX[si];\n    if (!seriesX) return true;\n    const x = seriesX[di];\n    if (x === void 0) return true;\n    return x >= gl.minX && x <= gl.maxX;\n  }\n  /**\n   * Push a short status message to the visually-hidden aria-live region so\n   * screen readers announce zoom / pan / reset events that have no inherent\n   * tooltip update. Silently no-op if the region is missing or announcements\n   * are disabled.\n   * @param {string} message\n   */\n  _announce(message) {\n    const w = this.w;\n    if (!w.config.chart.accessibility.announcements.enabled) return;\n    const baseEl = w.dom.baseEl;\n    if (!baseEl) return;\n    const region = baseEl.querySelector(\".apexcharts-sr-status\");\n    if (!region) return;\n    region.textContent = \"\";\n    setTimeout(() => {\n      region.textContent = message;\n    }, 0);\n  }\n}\nApexCharts.registerFeatures({ keyboardNavigation: KeyboardNavigation });\nconst BAR_FAMILY = /* @__PURE__ */ new Set([\"bar\", \"funnel\", \"pyramid\"]);\nconst RADIAL_FAMILY = /* @__PURE__ */ new Set([\"pie\", \"donut\", \"polarArea\", \"radialBar\", \"gauge\"]);\nfunction familyOf(type) {\n  if (BAR_FAMILY.has(type)) return \"bar\";\n  if (RADIAL_FAMILY.has(type)) return \"radial\";\n  return null;\n}\nclass MorphTypeChange {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this._snapshot = null;\n  }\n  /**\n   * @param {string} fromType\n   * @param {string} toType\n   * @returns {boolean}\n   */\n  canMorphTypes(fromType, toType) {\n    if (fromType === toType) return false;\n    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    if (!ff || !tf) return false;\n    return true;\n  }\n  /**\n   * @param {string} fromType\n   * @param {string} toType\n   * @param {any} newSeries\n   * @returns {boolean}\n   */\n  isCompatibleSeriesShape(fromType, toType, newSeries) {\n    if (!Array.isArray(newSeries) || newSeries.length === 0) return false;\n    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    if (tf === \"radial\") {\n      if (newSeries.every((v) => typeof v === \"number\")) return true;\n      return newSeries.length === 1 && newSeries[0] && typeof newSeries[0] === \"object\" && Array.isArray(newSeries[0].data);\n    }\n    if (tf === \"bar\") {\n      return newSeries.every(\n        (s) => s && typeof s === \"object\" && Array.isArray(s.data)\n      );\n    }\n    return ff !== null && tf !== null;\n  }\n  /**\n   * Capture the live DOM of the *current* (outgoing) chart and stash it on\n   * this module. Called from `apexcharts._updateOptions` before the config\n   * merge that flips `chart.type`.\n   *\n   * Returns true if a morph is queued — caller doesn't need the value, but\n   * tests use it.\n   *\n   * @param {{ fromType: string, toType: string, newSeries: any }} args\n   * @returns {boolean}\n   */\n  captureBeforeDestroy({ fromType, toType, newSeries }) {\n    this._snapshot = null;\n    if (!Environment.isBrowser()) return false;\n    const animCfg = this.w.config.chart.animations;\n    if (!animCfg || animCfg.enabled === false) return false;\n    if (animCfg.chartTypeMorph && animCfg.chartTypeMorph.enabled === false)\n      return false;\n    if (animCfg.respectReducedMotion && prefersReducedMotion()) return false;\n    if (!this.canMorphTypes(fromType, toType)) return false;\n    if (!this.isCompatibleSeriesShape(fromType, toType, newSeries)) return false;\n    const captured = this._captureFromDOM(fromType);\n    if (!captured.length) return false;\n    const mapping = this._buildMapping(captured, fromType, toType, newSeries);\n    if (mapping.size === 0) return false;\n    this._snapshot = {\n      fromType,\n      toType,\n      mapping,\n      oldLayout: {\n        translateX: this.w.layout.translateX || 0,\n        translateY: this.w.layout.translateY || 0\n      }\n    };\n    this.w.globals.previousPaths = [];\n    return true;\n  }\n  /**\n   * Walk the outgoing chart's DOM and collect path `d` strings keyed by\n   * (realIndex, j). The selectors are scoped to the chart family — bar\n   * elements have `pathTo` set; pie/radial elements use their final `d`.\n   *\n   * @param {string} fromType\n   * @returns {Array<{ realIndex: number, j: number, d: string, fill: string|null }>}\n   */\n  _captureFromDOM(fromType) {\n    var _a;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl) return [];\n    const captured = [];\n    const fam = familyOf(fromType);\n    if (fam === \"bar\") {\n      const seriesNodes = baseEl.querySelectorAll(\n        \".apexcharts-bar-series .apexcharts-series\"\n      );\n      seriesNodes.forEach((seriesNode) => {\n        var _a2;\n        const realIndex = parseInt(\n          (_a2 = seriesNode.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\",\n          10\n        );\n        const paths = seriesNode.querySelectorAll(\"path[pathTo]\");\n        paths.forEach((p, j) => {\n          const d = p.getAttribute(\"pathTo\") || p.getAttribute(\"d\");\n          if (!d) return;\n          captured.push({\n            realIndex,\n            j,\n            d,\n            fill: p.getAttribute(\"fill\")\n          });\n        });\n      });\n    } else if (fam === \"radial\") {\n      if (fromType === \"radialBar\" || fromType === \"gauge\") {\n        const centerX = this.w.layout.gridWidth / 2;\n        const centerY = Math.min(this.w.layout.gridWidth, this.w.layout.gridHeight) / 2;\n        const rings = baseEl.querySelectorAll(\n          \".apexcharts-radial-series .apexcharts-radialbar-area\"\n        );\n        rings.forEach((p) => {\n          var _a2;\n          const parent = (\n            /** @type {Element|null} */\n            p.parentElement\n          );\n          const realIndex = parseInt(\n            (_a2 = parent == null ? void 0 : parent.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\",\n            10\n          );\n          const rawD = p.getAttribute(\"d\");\n          if (!rawD) return;\n          const strokeWidth = parseFloat(p.getAttribute(\"stroke-width\") || \"0\");\n          const d = strokeWidth > 1 ? this._radialArcToFilledSegment(\n            rawD,\n            strokeWidth,\n            centerX,\n            centerY\n          ) || rawD : rawD;\n          captured.push({\n            realIndex,\n            j: 0,\n            d,\n            fill: p.getAttribute(\"stroke\")\n          });\n        });\n      } else {\n        const slices = baseEl.querySelectorAll(\n          \".apexcharts-pie-series .apexcharts-pie-area\"\n        );\n        slices.forEach(\n          (p, i) => {\n            const d = p.getAttribute(\"d\");\n            if (!d) return;\n            captured.push({\n              realIndex: i,\n              j: 0,\n              d,\n              fill: p.getAttribute(\"fill\")\n            });\n          }\n        );\n      }\n    }\n    return captured;\n  }\n  /**\n   * Convert a radialBar's stroked open-arc `d` (\"M x1 y1 A r r 0 large sweep\n   * x2 y2\") into a closed donut-segment polygon whose FILLED rendering\n   * visually matches the original stroked arc — needed because the morph\n   * target (pie/donut/polarArea) renders by fill, not stroke. Returns null\n   * if the input doesn't match the expected M-then-A shape.\n   *\n   * @param {string} rawD\n   * @param {number} strokeWidth\n   * @param {number} centerX\n   * @param {number} centerY\n   * @returns {string | null}\n   */\n  _radialArcToFilledSegment(rawD, strokeWidth, centerX, centerY) {\n    const m = rawD.match(\n      /M\\s*(-?[\\d.]+)\\s+(-?[\\d.]+)\\s+A\\s*(-?[\\d.]+)\\s+(?:-?[\\d.]+)\\s+(?:-?[\\d.]+)\\s+(\\d)\\s+(\\d)\\s+(-?[\\d.]+)\\s+(-?[\\d.]+)/\n    );\n    if (!m) return null;\n    const x1 = parseFloat(m[1]);\n    const y1 = parseFloat(m[2]);\n    const r = parseFloat(m[3]);\n    const large = parseInt(m[4], 10);\n    const sweep = parseInt(m[5], 10);\n    const x2 = parseFloat(m[6]);\n    const y2 = parseFloat(m[7]);\n    if (!isFinite(r) || r <= 0) return null;\n    const half = strokeWidth / 2;\n    const rOuter = r + half;\n    const rInner = Math.max(0, r - half);\n    const proj = (px, py, newR) => {\n      const dx = px - centerX;\n      const dy = py - centerY;\n      const dist = Math.sqrt(dx * dx + dy * dy);\n      if (dist === 0) return { x: centerX, y: centerY };\n      const k = newR / dist;\n      return { x: centerX + dx * k, y: centerY + dy * k };\n    };\n    const o1 = proj(x1, y1, rOuter);\n    const o2 = proj(x2, y2, rOuter);\n    const i1 = proj(x1, y1, rInner);\n    const i2 = proj(x2, y2, rInner);\n    const sweepBack = sweep ? 0 : 1;\n    return `M ${o1.x} ${o1.y} A ${rOuter} ${rOuter} 0 ${large} ${sweep} ${o2.x} ${o2.y} L ${i2.x} ${i2.y} A ${rInner} ${rInner} 0 ${large} ${sweepBack} ${i1.x} ${i1.y} Z`;\n  }\n  /**\n   * Build a closed donut-segment path for the given polar arc geometry. Used\n   * by Radial.drawArcs when morphing FROM a filled wedge (pie/donut/polarArea)\n   * TO a radialBar arc: the final radialBar is rendered as a stroked open arc,\n   * but during the morph we tween d toward this closed-segment form (which\n   * looks identical to the stroked arc when filled with the same color) so\n   * the in-between frames remain visually consistent filled shapes rather\n   * than a thick-outlined wedge.\n   *\n   * @param {number} centerX\n   * @param {number} centerY\n   * @param {number} ringRadius - centerline radius of the radialBar ring\n   * @param {number} strokeWidth - the ring's stroke thickness\n   * @param {number} startAngleDeg - in degrees, 0° = top (12 o'clock)\n   * @param {number} endAngleDeg\n   * @returns {string}\n   */\n  buildRingSegmentPath(centerX, centerY, ringRadius, strokeWidth, startAngleDeg, endAngleDeg) {\n    const halfStroke = strokeWidth / 2;\n    const rOuter = ringRadius + halfStroke;\n    const rInner = Math.max(0, ringRadius - halfStroke);\n    const sRad = (startAngleDeg - 90) * Math.PI / 180;\n    const eRad = (endAngleDeg - 90) * Math.PI / 180;\n    const oStart = {\n      x: centerX + rOuter * Math.cos(sRad),\n      y: centerY + rOuter * Math.sin(sRad)\n    };\n    const oEnd = {\n      x: centerX + rOuter * Math.cos(eRad),\n      y: centerY + rOuter * Math.sin(eRad)\n    };\n    const iStart = {\n      x: centerX + rInner * Math.cos(sRad),\n      y: centerY + rInner * Math.sin(sRad)\n    };\n    const iEnd = {\n      x: centerX + rInner * Math.cos(eRad),\n      y: centerY + rInner * Math.sin(eRad)\n    };\n    const sweep = endAngleDeg > startAngleDeg ? 1 : 0;\n    const large = Math.abs(endAngleDeg - startAngleDeg) > 180 ? 1 : 0;\n    return `M ${oStart.x} ${oStart.y} A ${rOuter} ${rOuter} 0 ${large} ${sweep} ${oEnd.x} ${oEnd.y} L ${iEnd.x} ${iEnd.y} A ${rInner} ${rInner} 0 ${large} ${1 - sweep} ${iStart.x} ${iStart.y} Z`;\n  }\n  /**\n   * @returns {string | null} the chart-type the active snapshot was captured\n   *   from, or null when no morph is in flight.\n   */\n  getFromType() {\n    return this._snapshot ? this._snapshot.fromType : null;\n  }\n  /**\n   * Build a (targetKey → captured) map. The targetKey matches the lookup\n   * pattern each chart-type renderer uses when it asks\n   * `getInitialPathFor(realIndex, j)`.\n   *\n   * Strategy: flatten the captured items into a linear sequence (matching the\n   * source chart's natural DOM iteration order: series-then-point for bar,\n   * ring-by-ring for radial), then walk the target's iteration positions in\n   * the same order and pair them up 1:1. This handles every supported shape\n   * without per-pair branching:\n   *\n   *   - bar (1 series, N pts) ↔ radial-family (N items)  → linear[k] ↔ k\n   *   - bar (M series, 1 pt)  ↔ radial-family (M items)  → linear[k] ↔ k\n   *   - radial-family (N items) ↔ bar (any matching shape) → linear[k] ↔ flat target\n   *   - radial-family ↔ radial-family                    → linear[k] ↔ k\n   *\n   * @param {Array<{ realIndex: number, j: number, d: string, fill: string|null }>} captured\n   * @param {string} _fromType\n   * @param {string} toType\n   * @param {any} newSeries - the series array being passed to the new chart;\n   *   used only to derive the bar target's (realIndex, j) iteration positions.\n   */\n  _buildMapping(captured, _fromType, toType, newSeries) {\n    const map = /* @__PURE__ */ new Map();\n    const tf = familyOf(toType);\n    const flat = captured.slice().sort((a, b) => a.realIndex - b.realIndex || a.j - b.j);\n    if (tf === \"radial\") {\n      flat.forEach((c, i) => {\n        map.set(`${i}:0`, { d: c.d, fill: c.fill });\n      });\n      return map;\n    }\n    if (tf === \"bar\") {\n      const positions = [];\n      const series = Array.isArray(newSeries) ? newSeries : [];\n      series.forEach((s, seriesIdx) => {\n        const data = s && Array.isArray(s.data) ? s.data : [];\n        for (let j = 0; j < data.length; j++) {\n          positions.push({ realIndex: seriesIdx, j });\n        }\n      });\n      flat.forEach((c, i) => {\n        const pos = positions[i];\n        if (pos) {\n          map.set(`${pos.realIndex}:${pos.j}`, { d: c.d, fill: c.fill });\n        }\n      });\n      return map;\n    }\n    return map;\n  }\n  isActive() {\n    return this._snapshot !== null;\n  }\n  /**\n   * @param {number} realIndex\n   * @param {number} j\n   * @returns {string | null}\n   */\n  getInitialPathFor(realIndex, j) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${realIndex}:${j}`);\n    if (!entry) return null;\n    const dx = this._snapshot.oldLayout.translateX - (this.w.layout.translateX || 0);\n    const dy = this._snapshot.oldLayout.translateY - (this.w.layout.translateY || 0);\n    return dx === 0 && dy === 0 ? entry.d : this._translatePathD(entry.d, dx, dy);\n  }\n  /**\n   * Offset every absolute coordinate in an SVG path `d` by (dx, dy).\n   *\n   * Assumes the path uses only uppercase (absolute) commands — every path\n   * ApexCharts generates does. Relative-command paths would pass through\n   * unchanged at the lowercase, which is also semantically correct (deltas\n   * don't shift under a parent translate).\n   *\n   * @param {string} d\n   * @param {number} dx\n   * @param {number} dy\n   * @returns {string}\n   */\n  _translatePathD(d, dx, dy) {\n    if (dx === 0 && dy === 0) return d;\n    const commands = parsePath(d);\n    return commands.map(\n      /** @param {any[]} c */\n      (c) => {\n        const cmd = c[0];\n        if (cmd === \"Z\") return \"Z\";\n        if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy}`;\n        }\n        if (cmd === \"H\") return `${cmd} ${c[1] + dx}`;\n        if (cmd === \"V\") return `${cmd} ${c[1] + dy}`;\n        if (cmd === \"C\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy} ${c[3] + dx} ${c[4] + dy} ${c[5] + dx} ${c[6] + dy}`;\n        }\n        if (cmd === \"S\" || cmd === \"Q\") {\n          return `${cmd} ${c[1] + dx} ${c[2] + dy} ${c[3] + dx} ${c[4] + dy}`;\n        }\n        if (cmd === \"A\") {\n          return `${cmd} ${c[1]} ${c[2]} ${c[3]} ${c[4]} ${c[5]} ${c[6] + dx} ${c[7] + dy}`;\n        }\n        return c.join(\" \");\n      }\n    ).join(\" \");\n  }\n  /**\n   * @param {number} realIndex\n   * @param {number} j\n   * @returns {string | null}\n   */\n  getInitialFillFor(realIndex, j) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${realIndex}:${j}`);\n    return entry ? entry.fill : null;\n  }\n  /** @returns {number} */\n  getSpeed() {\n    const animCfg = this.w.config.chart.animations;\n    return animCfg.chartTypeMorph && animCfg.chartTypeMorph.speed || animCfg.speed || 600;\n  }\n  /**\n   * Fade newly-mounted axes / grid / legend / titles from opacity 0 → 1 in\n   * parallel with the morph. Without this the chart's chrome would pop in\n   * abruptly while the series elements are still mid-tween, which reads as a\n   * jarring layout shift.\n   */\n  applyChromeFade() {\n    var _a;\n    if (!this._snapshot || !Environment.isBrowser()) return;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl) return;\n    const speed = this.getSpeed();\n    const chromeSelectors = [\n      \".apexcharts-xaxis\",\n      \".apexcharts-yaxis\",\n      \".apexcharts-grid\",\n      \".apexcharts-gridlines-horizontal\",\n      \".apexcharts-gridlines-vertical\",\n      \".apexcharts-legend\",\n      \".apexcharts-title-text\",\n      \".apexcharts-subtitle-text\"\n    ];\n    chromeSelectors.forEach((sel) => {\n      baseEl.querySelectorAll(sel).forEach((el) => {\n        if (!el.style) return;\n        el.style.opacity = \"0\";\n        el.style.transition = `opacity ${speed}ms ease-out`;\n        BrowserAPIs.requestAnimationFrame(() => {\n          el.style.opacity = \"1\";\n        });\n        setTimeout(() => {\n          el.style.transition = \"\";\n          el.style.opacity = \"\";\n        }, speed + 80);\n      });\n    });\n    setTimeout(() => this.cleanup(), speed + 100);\n  }\n  cleanup() {\n    this._snapshot = null;\n  }\n}\nApexCharts.registerFeatures({ morphTypeChange: MorphTypeChange });\nconst XHTML = \"http://www.w3.org/1999/xhtml\";\nclass Breadcrumb {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {import('./Drilldown').default} drilldown\n   */\n  constructor(w, ctx, drilldown) {\n    this.w = w;\n    this.ctx = ctx;\n    this.drilldown = drilldown;\n  }\n  /**\n   * @param {Array<string|number>} path - ['root', id, id, ...]\n   */\n  render(path) {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const elWrap = w.dom.elWrap;\n    if (!elWrap) return;\n    const existing = elWrap.querySelector(\".apexcharts-breadcrumb\");\n    if (existing && existing.parentNode) {\n      existing.parentNode.removeChild(existing);\n    }\n    const cfg = w.config.drilldown && w.config.drilldown.breadcrumb;\n    if (!cfg || cfg.show === false) return;\n    if (this.drilldown.depth === 0) return;\n    const nav = BrowserAPIs.createElementNS(XHTML, \"nav\");\n    nav.setAttribute(\"class\", \"apexcharts-breadcrumb\");\n    nav.setAttribute(\"aria-label\", \"Drilldown breadcrumb\");\n    this._position(nav, cfg);\n    const separator = cfg.separator != null ? cfg.separator : \" / \";\n    path.forEach((id, i) => {\n      if (i > 0) {\n        const sep = BrowserAPIs.createElementNS(XHTML, \"span\");\n        sep.setAttribute(\"class\", \"apexcharts-breadcrumb-separator\");\n        sep.setAttribute(\"aria-hidden\", \"true\");\n        sep.textContent = separator;\n        nav.appendChild(sep);\n      }\n      const label = this._label(id, i);\n      const isCurrent = i === path.length - 1;\n      if (isCurrent) {\n        const cur = BrowserAPIs.createElementNS(XHTML, \"span\");\n        cur.setAttribute(\n          \"class\",\n          \"apexcharts-breadcrumb-item apexcharts-breadcrumb-current\"\n        );\n        cur.setAttribute(\"aria-current\", \"page\");\n        cur.textContent = label;\n        nav.appendChild(cur);\n      } else {\n        const btn = (\n          /** @type {HTMLButtonElement} */\n          BrowserAPIs.createElementNS(XHTML, \"button\")\n        );\n        btn.setAttribute(\"type\", \"button\");\n        btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n        if (i === 0) {\n          const arrow = BrowserAPIs.createElementNS(XHTML, \"span\");\n          arrow.setAttribute(\"class\", \"apexcharts-breadcrumb-arrow\");\n          arrow.setAttribute(\"aria-hidden\", \"true\");\n          arrow.textContent = \"←\";\n          btn.appendChild(arrow);\n        }\n        const text = BrowserAPIs.createElementNS(XHTML, \"span\");\n        text.setAttribute(\"class\", \"apexcharts-breadcrumb-label\");\n        text.textContent = label;\n        btn.appendChild(text);\n        btn.addEventListener(\"click\", () => this.drilldown.drillToLevel(i));\n        nav.appendChild(btn);\n      }\n    });\n    elWrap.appendChild(nav);\n  }\n  /**\n   * @param {string|number} id\n   * @param {number} index\n   * @returns {string}\n   */\n  _label(id, index) {\n    const cfg = this.w.config.drilldown.breadcrumb;\n    let label;\n    if (index === 0) {\n      label = cfg.rootLabel != null ? cfg.rootLabel : \"All\";\n    } else {\n      const list = (this.w.config.drilldown.series || []).find(\n        (s) => s && s.id === id\n      );\n      label = list && list.name || String(id);\n    }\n    if (typeof cfg.formatter === \"function\") {\n      return cfg.formatter(label, { index, depth: this.drilldown.depth });\n    }\n    return label;\n  }\n  /**\n   * @param {HTMLElement} nav\n   * @param {Record<string, any>} cfg\n   */\n  _position(nav, cfg) {\n    const ox = cfg.offsetX || 0;\n    const oy = cfg.offsetY || 0;\n    nav.style.position = \"absolute\";\n    nav.style.top = oy + \"px\";\n    if (cfg.position === \"top-right\") {\n      nav.style.right = -ox + 3 + \"px\";\n    } else {\n      nav.style.left = ox + \"px\";\n    }\n  }\n}\nconst MAX_DEPTH = 32;\nclass Drilldown {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.w = w;\n    this.ctx = ctx;\n    this.stack = [];\n    this.rootSnapshot = null;\n    this._wired = false;\n    this.breadcrumb = new Breadcrumb(w, ctx, this);\n    this._onPointSelect = this._onPointSelect.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    this.init();\n  }\n  init() {\n    const w = this.w;\n    if (!w.config.drilldown || !w.config.drilldown.enabled) return;\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"dataPointSelection\", this._onPointSelect);\n    this.ctx.addEventListener(\"mounted\", this._afterRender);\n    this.ctx.addEventListener(\"updated\", this._afterRender);\n  }\n  // ─── Observable state ──────────────────────────────────────────────────────\n  /** @returns {Array<string|number>} e.g. ['root', '2024-quarters'] */\n  get path() {\n    return [\"root\", ...this.stack.map((f) => f.id)];\n  }\n  /** @returns {number} 0 at root */\n  get depth() {\n    return this.stack.length;\n  }\n  // ─── Navigation API ────────────────────────────────────────────────────────\n  /**\n   * Drill into the child level with the given id.\n   * @param {string|number} id\n   * @param {any} [triggerPoint] - the clicked data point (for events / async ctx)\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} [meta]\n   * @returns {Promise<any>}\n   */\n  drillDown(id, triggerPoint, meta) {\n    const child = this._resolveChild(id);\n    if (child) return this._drillInto(child, triggerPoint, meta);\n    if (typeof this.w.config.drilldown.onDrillDown === \"function\") {\n      return this._drillDownAsync(id, triggerPoint, meta);\n    }\n    console.warn(\n      `ApexCharts: drilldown id \"${id}\" not found in chart.drilldown.series, and no onDrillDown resolver is set.`\n    );\n    return Promise.resolve(this.ctx);\n  }\n  /**\n   * Navigate back one level.\n   * @returns {Promise<any>}\n   */\n  drillUp() {\n    return this.drillToLevel(this.stack.length - 1);\n  }\n  /**\n   * Navigate back to the root view.\n   * @returns {Promise<any>}\n   */\n  drillToRoot() {\n    return this.drillToLevel(0);\n  }\n  /**\n   * Navigate to an arbitrary depth (0 = root). Used by breadcrumb clicks.\n   * @param {number} targetDepth\n   * @returns {Promise<any>}\n   */\n  drillToLevel(targetDepth) {\n    const cur = this.stack.length;\n    if (targetDepth < 0 || targetDepth >= cur) return Promise.resolve(this.ctx);\n    const from = this.path[this.path.length - 1];\n    const restore = targetDepth === 0 ? this.rootSnapshot : this.stack[targetDepth].restore;\n    this.stack = this.stack.slice(0, targetDepth);\n    const to = this.path[this.path.length - 1];\n    return this._apply(this._viewFromSnapshot(restore), \"up\", { from, to });\n  }\n  // ─── Internals ─────────────────────────────────────────────────────────────\n  /**\n   * @param {string|number} id\n   * @returns {any|null}\n   */\n  _resolveChild(id) {\n    const list = this.w.config.drilldown && this.w.config.drilldown.series;\n    if (!Array.isArray(list)) return null;\n    return list.find((s) => s && s.id === id) || null;\n  }\n  /**\n   * @param {any} child\n   * @param {any} [triggerPoint]\n   * @param {object} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillInto(child, triggerPoint, meta) {\n    if (this.stack.length >= MAX_DEPTH) {\n      console.warn(`ApexCharts: drilldown max depth (${MAX_DEPTH}) reached.`);\n      return Promise.resolve(this.ctx);\n    }\n    if (!this.rootSnapshot) this.rootSnapshot = this._snapshot();\n    const from = this.path[this.path.length - 1];\n    this.stack.push({ id: child.id, name: child.name, restore: this._snapshot() });\n    return this._apply(this._viewFromChild(child), \"down\", {\n      from,\n      to: child.id,\n      point: triggerPoint,\n      seriesIndex: meta && meta.seriesIndex,\n      dataPointIndex: meta && meta.dataPointIndex\n    });\n  }\n  /**\n   * Minimal async resolver (loading overlay lands in Phase 3).\n   * @param {string|number|null} id\n   * @param {any} point\n   * @param {object} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillDownAsync(id, point, meta) {\n    const fn = this.w.config.drilldown.onDrillDown;\n    let result;\n    try {\n      result = fn({\n        point,\n        seriesIndex: meta && meta.seriesIndex,\n        dataPointIndex: meta && meta.dataPointIndex\n      });\n    } catch (error) {\n      this._fire(\"drillDownError\", { id, error });\n      return Promise.resolve(this.ctx);\n    }\n    return Promise.resolve(result).then(\n      (child) => {\n        if (!child || !child.data) return this.ctx;\n        return this._drillInto(child, point, meta);\n      },\n      (error) => {\n        this._fire(\"drillDownError\", { id, error });\n        return this.ctx;\n      }\n    );\n  }\n  /**\n   * Capture the overridable surface of the current view so it can be restored.\n   * Only fields that some drilldown.series entry can change are cloned; series\n   * and chart.type/stacked are always captured.\n   * @returns {object}\n   */\n  _snapshot() {\n    const c = this.w.config;\n    const fields = this._overrideFields();\n    const snap = { series: Utils$1.clone(c.series) };\n    if (Array.isArray(c.labels) && c.labels.length) {\n      snap.labels = Utils$1.clone(c.labels);\n    }\n    snap.chart = { type: c.chart.type, stacked: c.chart.stacked };\n    if (fields.has(\"xaxis\")) snap.xaxis = Utils$1.clone(c.xaxis);\n    if (fields.has(\"yaxis\")) snap.yaxis = Utils$1.clone(c.yaxis);\n    if (fields.has(\"colors\")) snap.colors = c.colors ? Utils$1.clone(c.colors) : void 0;\n    if (fields.has(\"plotOptions\")) snap.plotOptions = Utils$1.clone(c.plotOptions);\n    if (fields.has(\"fill\")) snap.fill = Utils$1.clone(c.fill);\n    if (fields.has(\"legend\")) snap.legend = Utils$1.clone(c.legend);\n    return snap;\n  }\n  /**\n   * Union of overridable fields across all declared drilldown levels. Ensures a\n   * deep drillToRoot restores everything any intermediate level may have changed.\n   * @returns {Set<string>}\n   */\n  _overrideFields() {\n    const fields = /* @__PURE__ */ new Set();\n    const list = this.w.config.drilldown && this.w.config.drilldown.series || [];\n    for (const s of list) {\n      if (!s) continue;\n      if (s.xaxis) fields.add(\"xaxis\");\n      if (s.yaxis) fields.add(\"yaxis\");\n      if (s.colors) fields.add(\"colors\");\n      if (s.plotOptions) fields.add(\"plotOptions\");\n      if (s.fill) fields.add(\"fill\");\n      if (s.legend) fields.add(\"legend\");\n    }\n    return fields;\n  }\n  /**\n   * Build an updateOptions/updateSeries payload for drilling INTO a child level.\n   * Works for axis charts and pie/donut alike: both accept series objects with a\n   * `data` array of `{ x, y }` points (pie derives slice labels from `x`).\n   * @param {any} child\n   * @returns {Record<string, any>}\n   */\n  _viewFromChild(child) {\n    const view = {};\n    if (Array.isArray(child.series)) {\n      view.series = child.series;\n    } else {\n      view.series = [{ name: child.name || \"\", data: child.data }];\n    }\n    const chart = {};\n    if (child.chart && child.chart.type) chart.type = child.chart.type;\n    if (child.chart && child.chart.stacked != null) chart.stacked = child.chart.stacked;\n    if (Object.keys(chart).length) view.chart = chart;\n    if (child.xaxis) view.xaxis = child.xaxis;\n    if (child.yaxis) view.yaxis = child.yaxis;\n    if (child.colors) view.colors = child.colors;\n    if (child.plotOptions) view.plotOptions = child.plotOptions;\n    if (child.fill) view.fill = child.fill;\n    if (child.legend) view.legend = child.legend;\n    return view;\n  }\n  /**\n   * Build an updateOptions payload from a restore-snapshot.\n   * @param {Record<string, any>} snap\n   * @returns {Record<string, any>}\n   */\n  _viewFromSnapshot(snap) {\n    const view = { series: snap.series, chart: snap.chart };\n    if (snap.labels && snap.labels.length) view.labels = snap.labels;\n    if (snap.xaxis) view.xaxis = snap.xaxis;\n    if (snap.yaxis) view.yaxis = snap.yaxis;\n    if (snap.colors) view.colors = snap.colors;\n    if (snap.plotOptions) view.plotOptions = snap.plotOptions;\n    if (snap.fill) view.fill = snap.fill;\n    if (snap.legend) view.legend = snap.legend;\n    return view;\n  }\n  /**\n   * Apply a view by delegating to the right update path, firing drill events\n   * around it.\n   * @param {Record<string, any>} view\n   * @param {'down'|'up'} direction\n   * @param {object} meta\n   * @returns {Promise<any>}\n   */\n  _apply(view, direction, meta) {\n    const w = this.w;\n    w.interact.selectedDataPoints = [];\n    w.globals.collapsedSeries = [];\n    w.globals.collapsedSeriesIndices = [];\n    w.globals.ancillaryCollapsedSeries = [];\n    w.globals.ancillaryCollapsedSeriesIndices = [];\n    w.globals.allSeriesCollapsed = false;\n    w.globals.risingSeries = [];\n    const animate = (!w.config.drilldown.animation || w.config.drilldown.animation.enabled !== false) && w.config.chart.animations.enabled !== false;\n    if (direction === \"down\") this._fire(\"drillDownStart\", meta);\n    const runUpdate = (anim) => this.ctx.updateOptions(view, false, anim, false, false);\n    const done = () => {\n      this._fire(direction === \"down\" ? \"drillDownEnd\" : \"drillUp\", meta);\n      return this.ctx;\n    };\n    if (animate && this._zoomEnabled()) {\n      const origin = this._triggerOrigin(meta);\n      if (origin) {\n        return this._zoomDrill(origin, direction, () => runUpdate(false)).then(done);\n      }\n    }\n    return runUpdate(animate).then(done);\n  }\n  /** @returns {boolean} whether trigger-point zoom is configured on. */\n  _zoomEnabled() {\n    const a = this.w.config.drilldown && this.w.config.drilldown.animation;\n    return !!(a && a.zoomFromPoint);\n  }\n  /** @returns {SVGSVGElement|null} the chart's root <svg> node, if present. */\n  _svgNode() {\n    const paper = this.w.dom && this.w.dom.Paper;\n    return paper && paper.node ? paper.node : null;\n  }\n  /**\n   * The group wrapping ONLY the data marks (bars/cells/tiles) — not the axes,\n   * grid, or titles. Animating this keeps the chart frame still while the marks\n   * move. Covers bar/line/area (`.apexcharts-plot-series`), heatmap, and treemap.\n   * @returns {SVGElement|null}\n   */\n  _markGroup() {\n    const svg = this._svgNode();\n    if (!svg || typeof svg.querySelector !== \"function\") return null;\n    return svg.querySelector(\n      \".apexcharts-plot-series, .apexcharts-heatmap, .apexcharts-treemap\"\n    );\n  }\n  /**\n   * Centre of the clicked point in the SVG's view-box pixel space, used as the\n   * transform-origin for the mark-group scale (which uses `transform-box:\n   * view-box`, so the origin is resolved in SVG coordinates and stays stable\n   * across the parent and child renders). Falls back to the mark group's centre\n   * when there is no trigger point (e.g. drillUp / imperative drill). Returns\n   * null when the marks / SVG / WAAPI are unavailable (SSR / old browsers).\n   * @param {object} meta\n   * @returns {{ x: number, y: number }|null}\n   */\n  _triggerOrigin(meta) {\n    if (!Environment.isBrowser()) return null;\n    const svg = this._svgNode();\n    const group = this._markGroup();\n    if (!svg || !group || typeof group.animate !== \"function\" || typeof svg.getBoundingClientRect !== \"function\") {\n      return null;\n    }\n    const svgRect = svg.getBoundingClientRect();\n    let el = null;\n    if (meta && meta.seriesIndex != null && meta.dataPointIndex != null && this.w.dom.baseEl) {\n      el = this.w.dom.baseEl.querySelector(\n        `[index=\"${meta.seriesIndex}\"][j=\"${meta.dataPointIndex}\"]`\n      );\n    }\n    if (el && typeof el.getBoundingClientRect === \"function\") {\n      const r = el.getBoundingClientRect();\n      return {\n        x: r.left + r.width / 2 - svgRect.left,\n        y: r.top + r.height / 2 - svgRect.top\n      };\n    }\n    const gRect = group.getBoundingClientRect();\n    return {\n      x: gRect.left + gRect.width / 2 - svgRect.left,\n      y: gRect.top + gRect.height / 2 - svgRect.top\n    };\n  }\n  /**\n   * Run the \"expand from the clicked point\" choreography around an instant\n   * (un-animated) update. Only the data-mark group is animated — the axes, grid,\n   * and titles stay fixed, so the effect doesn't drag the whole chart frame. The\n   * current marks fade out near-in-place (a quick fade, not a balloon), the child\n   * renders invisibly underneath, then the child marks unfold outward from the\n   * clicked point: a horizontal-biased scale anchored there, so the bars read as\n   * emerging from the column you clicked. Drilling up has no trigger column, so\n   * it settles gently from the marks' centre.\n   *\n   * `transform-box: view-box` resolves the origin in SVG coordinates, so the same\n   * origin applies cleanly to the parent and the freshly-rendered child group.\n   * @param {{ x: number, y: number }} origin\n   * @param {'down'|'up'} direction\n   * @param {() => Promise<any>} runUpdate\n   * @returns {Promise<void>}\n   */\n  _zoomDrill(origin, direction, runUpdate) {\n    return __async(this, null, function* () {\n      const dur = this._zoomDuration();\n      const down = direction === \"down\";\n      const outDur = Math.round(dur * 0.55);\n      const outTo = down ? \"scale(1.03)\" : \"scale(0.97)\";\n      const inFrom = down ? \"scaleX(0.55) scaleY(0.85)\" : \"scale(1.04)\";\n      const anchor = (el) => {\n        el.style.transformBox = \"view-box\";\n        el.style.transformOrigin = `${origin.x}px ${origin.y}px`;\n      };\n      const clear = (el) => {\n        el.style.transform = \"\";\n        el.style.opacity = \"\";\n        el.style.transformOrigin = \"\";\n        el.style.transformBox = \"\";\n      };\n      const outGroup = this._markGroup();\n      let outAnim = null;\n      if (outGroup) {\n        anchor(outGroup);\n        outAnim = outGroup.animate(\n          [\n            { transform: \"scale(1)\", opacity: 1 },\n            { transform: outTo, opacity: 0 }\n          ],\n          { duration: outDur, easing: \"ease-in\", fill: \"forwards\" }\n        );\n        try {\n          yield outAnim.finished;\n        } catch (e) {\n        }\n      }\n      yield runUpdate();\n      const inGroup = this._markGroup();\n      if (inGroup) {\n        anchor(inGroup);\n        inGroup.style.opacity = \"0\";\n        inGroup.style.transform = inFrom;\n        if (outAnim && outGroup === inGroup) outAnim.cancel();\n        const inAnim = inGroup.animate(\n          [\n            { transform: inFrom, opacity: 0 },\n            { transform: \"scale(1)\", opacity: 1 }\n          ],\n          // Decelerating ease so the unfold settles softly into place.\n          { duration: dur, easing: \"cubic-bezier(0.16, 1, 0.3, 1)\", fill: \"forwards\" }\n        );\n        try {\n          yield inAnim.finished;\n        } catch (e) {\n        }\n        clear(inGroup);\n        inAnim.cancel();\n      }\n    });\n  }\n  /** @returns {number} per-phase zoom duration in ms. */\n  _zoomDuration() {\n    const a = this.w.config.drilldown && this.w.config.drilldown.animation;\n    const speed = a && typeof a.speed === \"number\" ? a.speed : 260;\n    return Math.max(80, speed);\n  }\n  /**\n   * Fire a drill event through both the config callback and the listener registry.\n   * @param {string} name\n   * @param {object} payload\n   */\n  _fire(name2, payload) {\n    const cb = this.w.config.chart.events && this.w.config.chart.events[name2];\n    if (typeof cb === \"function\") cb(payload, this.ctx, this.w);\n    this.ctx.events.fireEvent(name2, [payload, this.ctx, this.w]);\n  }\n  // ─── Click + post-render hooks ───────────────────────────────────────────────\n  /**\n   * @param {Event} _event\n   * @param {any} _ctx\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} opts\n   */\n  _onPointSelect(_event, _ctx, opts) {\n    if (!opts) return void 0;\n    const point = this._pointAt(opts.seriesIndex, opts.dataPointIndex);\n    if (point && typeof point === \"object\" && point.drilldown != null) {\n      return this.drillDown(point.drilldown, point, opts);\n    }\n    if (typeof this.w.config.drilldown.onDrillDown === \"function\") {\n      return this._drillDownAsync(null, point, opts);\n    }\n    return void 0;\n  }\n  /**\n   * @param {number|undefined} seriesIndex\n   * @param {number|undefined} dataPointIndex\n   * @returns {any|null}\n   */\n  _pointAt(seriesIndex, dataPointIndex) {\n    const series = this.w.config.series;\n    if (!Array.isArray(series) || seriesIndex == null || dataPointIndex == null) {\n      return null;\n    }\n    const s = series[seriesIndex];\n    if (!s || !Array.isArray(s.data)) return null;\n    return s.data[dataPointIndex] != null ? s.data[dataPointIndex] : null;\n  }\n  _afterRender() {\n    if (!this.w.config.drilldown || !this.w.config.drilldown.enabled) return;\n    this._markDrillableTargets();\n    this.breadcrumb.render(this.path);\n  }\n  /**\n   * Add the drilldown-target cursor class to every point that carries a\n   * `drilldown` field. Best-effort and cosmetic — a missed selector is harmless.\n   */\n  _markDrillableTargets() {\n    if (!Environment.isBrowser()) return;\n    const w = this.w;\n    const baseEl = w.dom.baseEl;\n    const series = w.config.series;\n    if (!baseEl || !Array.isArray(series)) return;\n    series.forEach((s, i) => {\n      const data = s && Array.isArray(s.data) ? s.data : null;\n      if (!data) return;\n      data.forEach((point, j) => {\n        if (!point || typeof point !== \"object\" || point.drilldown == null) return;\n        const nodes = baseEl.querySelectorAll(`[index=\"${i}\"][j=\"${j}\"]`);\n        nodes.forEach(\n          (node) => node.classList.add(\"apexcharts-drilldown-target\")\n        );\n      });\n    });\n  }\n}\nApexCharts.registerFeatures({ drilldown: Drilldown });\nclass BarDataLabels {\n  /**\n   * @param {import('../../../charts/Bar').default} barCtx\n   */\n  constructor(barCtx) {\n    this.w = barCtx.w;\n    this.barCtx = barCtx;\n    this.totalFormatter = this.w.config.plotOptions.bar.dataLabels.total.formatter;\n    if (!this.totalFormatter) {\n      this.totalFormatter = this.w.config.dataLabels.formatter;\n    }\n  }\n  /** handleBarDataLabels is used to calculate the positions for the data-labels\n   * It also sets the element's data attr for bars and calls drawCalculatedBarDataLabels()\n   * After calculating, it also calls the function to draw data labels\n   * @memberof Bar\n   * @param {Record<string, any>} opts - bar properties used throughout the bar drawing function\n   * @return {object} dataLabels node-element which you can append later\n   **/\n  handleBarDataLabels(opts) {\n    const {\n      x,\n      y,\n      y1,\n      y2,\n      i,\n      j,\n      realIndex,\n      columnGroupIndex,\n      series,\n      barHeight,\n      barWidth,\n      barXPosition,\n      barYPosition,\n      visibleSeries\n    } = opts;\n    const w = this.w;\n    const graphics = new Graphics(this.barCtx.w);\n    const strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n    let bcx;\n    let bcy;\n    if (w.axisFlags.isXNumeric && !w.globals.isBarHorizontal) {\n      bcx = x + barWidth * (visibleSeries + 1);\n      bcy = y + barHeight * (visibleSeries + 1) - strokeWidth;\n    } else {\n      bcx = x + barWidth * visibleSeries;\n      bcy = y + barHeight * visibleSeries;\n    }\n    let dataLabels = null;\n    let totalDataLabels = null;\n    let dataLabelsX = x;\n    let dataLabelsY = y;\n    let dataLabelsPos = (\n      /** @type {any} */\n      {}\n    );\n    const dataLabelsConfig = w.config.dataLabels;\n    const barDataLabelsConfig = this.barCtx.barOptions.dataLabels;\n    const barTotalDataLabelsConfig = this.barCtx.barOptions.dataLabels.total;\n    if (typeof barYPosition !== \"undefined\" && (this.barCtx.isRangeBar || this.barCtx.isPyramid)) {\n      bcy = barYPosition;\n      dataLabelsY = barYPosition;\n    }\n    if (typeof barXPosition !== \"undefined\" && this.barCtx.isVerticalGroupedRangeBar) {\n      bcx = barXPosition;\n      dataLabelsX = barXPosition;\n    }\n    const offX = dataLabelsConfig.offsetX;\n    const offY = dataLabelsConfig.offsetY;\n    let textRects = {\n      width: 0,\n      height: 0\n    };\n    if (w.config.dataLabels.enabled) {\n      const yLabel = w.seriesData.series[i][j];\n      textRects = graphics.getTextRects(\n        w.config.dataLabels.formatter ? w.config.dataLabels.formatter(yLabel, __spreadProps(__spreadValues({}, w), {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        })) : w.formatters.yLabelFormatters[0](yLabel),\n        parseFloat(dataLabelsConfig.style.fontSize).toString()\n      );\n    }\n    const params = {\n      x,\n      y,\n      i,\n      j,\n      realIndex,\n      columnGroupIndex,\n      bcx,\n      bcy,\n      barHeight,\n      barWidth,\n      textRects,\n      strokeWidth,\n      dataLabelsX,\n      dataLabelsY,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      offX,\n      offY\n    };\n    if (this.barCtx.isHorizontal) {\n      dataLabelsPos = this.calculateBarsDataLabelsPosition(params);\n    } else {\n      dataLabelsPos = this.calculateColumnsDataLabelsPosition(params);\n    }\n    dataLabels = this.drawCalculatedDataLabels({\n      x: dataLabelsPos.dataLabelsX,\n      y: dataLabelsPos.dataLabelsY,\n      val: this.barCtx.isRangeBar ? [y1, y2] : w.config.chart.stackType === \"100%\" ? series[realIndex][j] : w.seriesData.series[realIndex][j],\n      i: realIndex,\n      j,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsConfig\n    });\n    if (w.config.chart.stacked && barTotalDataLabelsConfig.enabled) {\n      totalDataLabels = this.drawTotalDataLabels({\n        x: dataLabelsPos.totalDataLabelsX,\n        y: dataLabelsPos.totalDataLabelsY,\n        barWidth,\n        barHeight,\n        realIndex,\n        textAnchor: dataLabelsPos.totalDataLabelsAnchor,\n        val: this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig,\n        barTotalDataLabelsConfig\n      });\n    }\n    return {\n      dataLabelsPos,\n      dataLabels,\n      totalDataLabels\n    };\n  }\n  /** @param {{realIndex: any, j: any}} opts */\n  getStackedTotalDataLabel({ realIndex, j }) {\n    const w = this.w;\n    let val = this.barCtx.stackedSeriesTotals[j];\n    if (this.totalFormatter) {\n      val = this.totalFormatter(val, __spreadProps(__spreadValues({}, w), {\n        seriesIndex: realIndex,\n        dataPointIndex: j,\n        w\n      }));\n    }\n    return val;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateColumnsDataLabelsPosition(opts) {\n    const w = this.w;\n    let {\n      i,\n      j,\n      realIndex,\n      y,\n      bcx,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsX,\n      dataLabelsY,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      strokeWidth,\n      offX,\n      offY\n    } = opts;\n    let totalDataLabelsY;\n    let totalDataLabelsX;\n    const totalDataLabelsAnchor = \"middle\";\n    const totalDataLabelsBcx = bcx;\n    barHeight = Math.abs(barHeight);\n    const vertical = w.config.plotOptions.bar.dataLabels.orientation === \"vertical\";\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i,\n      j\n    });\n    bcx = bcx - strokeWidth / 2;\n    const dataPointsDividedWidth = w.layout.gridWidth / w.globals.dataPoints;\n    if (this.barCtx.isVerticalGroupedRangeBar) {\n      dataLabelsX += barWidth / 2;\n    } else {\n      if (w.axisFlags.isXNumeric) {\n        dataLabelsX = bcx - barWidth / 2 + offX;\n      } else {\n        dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX;\n      }\n      if (!w.config.chart.stacked && zeroEncounters > 0 && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        dataLabelsX -= barWidth * zeroEncounters;\n      }\n    }\n    if (vertical) {\n      const offsetDLX = 2;\n      dataLabelsX = dataLabelsX + textRects.height / 2 - strokeWidth / 2 - offsetDLX;\n    }\n    const valIsNegative = w.seriesData.series[i][j] < 0;\n    let newY = y;\n    if (this.barCtx.isReversed) {\n      newY = y + (valIsNegative ? barHeight : -barHeight);\n    }\n    switch (barDataLabelsConfig.position) {\n      case \"center\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight / 2 + offY;\n          } else {\n            dataLabelsY = newY + barHeight / 2 - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight / 2 + textRects.height / 2 + offY;\n          } else {\n            dataLabelsY = newY + barHeight / 2 + textRects.height / 2 - offY;\n          }\n        }\n        break;\n      case \"bottom\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight + offY;\n          } else {\n            dataLabelsY = newY + barHeight - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - barHeight + textRects.height + strokeWidth + offY;\n          } else {\n            dataLabelsY = newY + barHeight - textRects.height / 2 + strokeWidth - offY;\n          }\n        }\n        break;\n      case \"top\":\n        if (vertical) {\n          if (valIsNegative) {\n            dataLabelsY = newY + offY;\n          } else {\n            dataLabelsY = newY - offY;\n          }\n        } else {\n          if (valIsNegative) {\n            dataLabelsY = newY - textRects.height / 2 - offY;\n          } else {\n            dataLabelsY = newY + textRects.height + offY;\n          }\n        }\n        break;\n    }\n    let lowestPrevY = newY;\n    w.labelData.seriesGroups.forEach((sg) => {\n      var _a;\n      (_a = this.barCtx[sg.join(\",\")]) == null ? void 0 : _a.prevY.forEach(\n        (arr) => {\n          if (valIsNegative) {\n            lowestPrevY = Math.max(arr[j], lowestPrevY);\n          } else {\n            lowestPrevY = Math.min(arr[j], lowestPrevY);\n          }\n        }\n      );\n    });\n    if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n      const ADDITIONAL_OFFY = 18;\n      const graphics = new Graphics(this.barCtx.w);\n      const totalLabeltextRects = graphics.getTextRects(\n        this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig.fontSize\n      );\n      if (valIsNegative) {\n        totalDataLabelsY = lowestPrevY - totalLabeltextRects.height / 2 - offY - barTotalDataLabelsConfig.offsetY + ADDITIONAL_OFFY;\n      } else {\n        totalDataLabelsY = lowestPrevY + totalLabeltextRects.height + offY + barTotalDataLabelsConfig.offsetY - ADDITIONAL_OFFY;\n      }\n      const xDivision = dataPointsDividedWidth;\n      totalDataLabelsX = totalDataLabelsBcx + (w.axisFlags.isXNumeric ? -barWidth * w.globals.barGroups.length / 2 : w.globals.barGroups.length * barWidth / 2 - (w.globals.barGroups.length - 1) * barWidth - xDivision) + barTotalDataLabelsConfig.offsetX;\n    }\n    if (!w.config.chart.stacked) {\n      if (dataLabelsY < 0) {\n        dataLabelsY = 0 + strokeWidth;\n      } else if (dataLabelsY + textRects.height / 3 > w.layout.gridHeight) {\n        dataLabelsY = w.layout.gridHeight - strokeWidth;\n      }\n    }\n    return {\n      bcx,\n      bcy: y,\n      dataLabelsX,\n      dataLabelsY,\n      totalDataLabelsX,\n      totalDataLabelsY,\n      totalDataLabelsAnchor\n    };\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateBarsDataLabelsPosition(opts) {\n    var _a;\n    const w = this.w;\n    let {\n      x,\n      i,\n      j,\n      realIndex,\n      bcy,\n      barHeight,\n      barWidth,\n      textRects,\n      dataLabelsX,\n      strokeWidth,\n      dataLabelsConfig,\n      barDataLabelsConfig,\n      barTotalDataLabelsConfig,\n      offX,\n      offY\n    } = opts;\n    const dataPointsDividedHeight = w.layout.gridHeight / w.globals.dataPoints;\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i,\n      j\n    });\n    barWidth = Math.abs(barWidth);\n    let dataLabelsY;\n    if (this.barCtx.isPyramid) {\n      const centerOffset = (_a = textRects.centerOffset) != null ? _a : 0;\n      dataLabelsY = bcy + barHeight / 2 + offY - centerOffset;\n    } else {\n      dataLabelsY = bcy - (this.barCtx.isRangeBar ? 0 : dataPointsDividedHeight) + barHeight / 2 + textRects.height / 2 + offY - 3;\n    }\n    if (!w.config.chart.stacked && zeroEncounters > 0 && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n      dataLabelsY -= barHeight * zeroEncounters;\n    }\n    let totalDataLabelsX;\n    let totalDataLabelsY;\n    let totalDataLabelsAnchor = \"start\";\n    const valIsNegative = w.seriesData.series[i][j] < 0;\n    let newX = x;\n    if (this.barCtx.isReversed) {\n      newX = x + (valIsNegative ? -barWidth : barWidth);\n      totalDataLabelsAnchor = valIsNegative ? \"start\" : \"end\";\n    }\n    if (this.barCtx.isPyramid) {\n      dataLabelsX = w.layout.gridWidth / 2 + offX;\n    } else {\n      switch (barDataLabelsConfig.position) {\n        case \"center\":\n          if (valIsNegative) {\n            dataLabelsX = newX + barWidth / 2 - offX;\n          } else {\n            dataLabelsX = Math.max(textRects.width / 2, newX - barWidth / 2) + offX;\n          }\n          break;\n        case \"bottom\":\n          if (valIsNegative) {\n            dataLabelsX = newX + barWidth - strokeWidth - offX;\n          } else {\n            dataLabelsX = newX - barWidth + strokeWidth + offX;\n          }\n          break;\n        case \"top\":\n          if (valIsNegative) {\n            dataLabelsX = newX - strokeWidth - offX;\n          } else {\n            dataLabelsX = newX - strokeWidth + offX;\n          }\n          break;\n      }\n    }\n    let lowestPrevX = newX;\n    w.labelData.seriesGroups.forEach((sg) => {\n      var _a2;\n      (_a2 = this.barCtx[sg.join(\",\")]) == null ? void 0 : _a2.prevX.forEach(\n        (arr) => {\n          if (valIsNegative) {\n            lowestPrevX = Math.min(arr[j], lowestPrevX);\n          } else {\n            lowestPrevX = Math.max(arr[j], lowestPrevX);\n          }\n        }\n      );\n    });\n    if (this.barCtx.lastActiveBarSerieIndex === realIndex && barTotalDataLabelsConfig.enabled) {\n      const graphics = new Graphics(this.barCtx.w);\n      const totalLabeltextRects = graphics.getTextRects(\n        this.getStackedTotalDataLabel({ realIndex, j }),\n        dataLabelsConfig.fontSize\n      );\n      if (valIsNegative) {\n        totalDataLabelsX = lowestPrevX - strokeWidth - offX - barTotalDataLabelsConfig.offsetX;\n        totalDataLabelsAnchor = \"end\";\n      } else {\n        totalDataLabelsX = lowestPrevX + offX + barTotalDataLabelsConfig.offsetX + (this.barCtx.isReversed ? -(barWidth + strokeWidth) : strokeWidth);\n      }\n      totalDataLabelsY = dataLabelsY - textRects.height / 2 + totalLabeltextRects.height / 2 + barTotalDataLabelsConfig.offsetY + strokeWidth;\n      if (w.globals.barGroups.length > 1) {\n        totalDataLabelsY = totalDataLabelsY - w.globals.barGroups.length / 2 * (barHeight / 2);\n      }\n    }\n    if (!w.config.chart.stacked) {\n      if (dataLabelsConfig.textAnchor === \"start\") {\n        if (dataLabelsX - textRects.width < 0) {\n          dataLabelsX = valIsNegative ? textRects.width + strokeWidth : strokeWidth;\n        } else if (dataLabelsX + textRects.width > w.layout.gridWidth) {\n          dataLabelsX = valIsNegative ? w.layout.gridWidth - strokeWidth : w.layout.gridWidth - textRects.width - strokeWidth;\n        }\n      } else if (dataLabelsConfig.textAnchor === \"middle\") {\n        if (dataLabelsX - textRects.width / 2 < 0) {\n          dataLabelsX = textRects.width / 2 + strokeWidth;\n        } else if (dataLabelsX + textRects.width / 2 > w.layout.gridWidth) {\n          dataLabelsX = w.layout.gridWidth - textRects.width / 2 - strokeWidth;\n        }\n      } else if (dataLabelsConfig.textAnchor === \"end\") {\n        if (dataLabelsX < 1) {\n          dataLabelsX = textRects.width + strokeWidth;\n        } else if (dataLabelsX + 1 > w.layout.gridWidth) {\n          dataLabelsX = w.layout.gridWidth - textRects.width - strokeWidth;\n        }\n      }\n    }\n    return {\n      bcx: x,\n      bcy,\n      dataLabelsX,\n      dataLabelsY,\n      totalDataLabelsX,\n      totalDataLabelsY,\n      totalDataLabelsAnchor\n    };\n  }\n  /** @param {{x: any, y: any, val: any, i: any, j: any, textRects: any, barHeight: any, barWidth: any, dataLabelsConfig: any}} opts */\n  drawCalculatedDataLabels({\n    x,\n    y,\n    val,\n    i,\n    // = realIndex\n    j,\n    textRects,\n    barHeight,\n    barWidth,\n    dataLabelsConfig\n  }) {\n    const w = this.w;\n    let rotate = \"rotate(0)\";\n    if (w.config.plotOptions.bar.dataLabels.orientation === \"vertical\")\n      rotate = `rotate(-90, ${x}, ${y})`;\n    const dataLabels = new DataLabels(this.barCtx.w, this.barCtx.ctx);\n    const graphics = new Graphics(this.barCtx.w);\n    const formatter = dataLabelsConfig.formatter;\n    let elDataLabelsWrap = null;\n    const isSeriesNotCollapsed = w.globals.collapsedSeriesIndices.indexOf(i) > -1;\n    if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\",\n        transform: rotate\n      });\n      let text = \"\";\n      if (typeof val !== \"undefined\") {\n        text = formatter(val, __spreadProps(__spreadValues({}, w), {\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        }));\n      }\n      if (!val && w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        text = \"\";\n      }\n      const valIsNegative = w.seriesData.series[i][j] < 0;\n      const position = w.config.plotOptions.bar.dataLabels.position;\n      if (w.config.plotOptions.bar.dataLabels.orientation === \"vertical\") {\n        if (position === \"top\") {\n          if (valIsNegative) dataLabelsConfig.textAnchor = \"end\";\n          else dataLabelsConfig.textAnchor = \"start\";\n        }\n        if (position === \"center\") {\n          dataLabelsConfig.textAnchor = \"middle\";\n        }\n        if (position === \"bottom\") {\n          if (valIsNegative) dataLabelsConfig.textAnchor = \"end\";\n          else dataLabelsConfig.textAnchor = \"start\";\n        }\n      }\n      if (this.barCtx.isRangeBar && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n        const txRect = graphics.getTextRects(\n          text,\n          parseFloat(dataLabelsConfig.style.fontSize).toString()\n        );\n        if (barWidth < txRect.width) {\n          text = \"\";\n        }\n      }\n      if (w.config.chart.stacked && this.barCtx.barOptions.dataLabels.hideOverflowingLabels) {\n        if (this.barCtx.isHorizontal) {\n          if (textRects.width / 1.6 > Math.abs(barWidth)) {\n            text = \"\";\n          }\n        } else {\n          if (textRects.height / 1.6 > Math.abs(barHeight)) {\n            text = \"\";\n          }\n        }\n      }\n      const modifiedDataLabelsConfig = __spreadValues({}, dataLabelsConfig);\n      if (this.barCtx.isHorizontal) {\n        if (val < 0) {\n          if (dataLabelsConfig.textAnchor === \"start\") {\n            modifiedDataLabelsConfig.textAnchor = \"end\";\n          } else if (dataLabelsConfig.textAnchor === \"end\") {\n            modifiedDataLabelsConfig.textAnchor = \"start\";\n          }\n        }\n      }\n      dataLabels.plotDataLabelsText({\n        x,\n        y,\n        text,\n        i,\n        j,\n        parent: elDataLabelsWrap,\n        dataLabelsConfig: modifiedDataLabelsConfig,\n        alwaysDrawDataLabel: true,\n        offsetCorrection: true\n      });\n    }\n    return elDataLabelsWrap;\n  }\n  /** @param {{ x?: any, y?: any, val?: any, realIndex?: any, textAnchor?: any, barWidth?: any, barHeight?: any, dataLabelsConfig?: any, barTotalDataLabelsConfig?: any }} opts */\n  drawTotalDataLabels({\n    x,\n    y,\n    val,\n    realIndex,\n    textAnchor,\n    barTotalDataLabelsConfig\n  }) {\n    const graphics = new Graphics(this.barCtx.w);\n    let totalDataLabelText;\n    if (barTotalDataLabelsConfig.enabled && typeof x !== \"undefined\" && typeof y !== \"undefined\" && this.barCtx.lastActiveBarSerieIndex === realIndex) {\n      totalDataLabelText = graphics.drawText({\n        x,\n        y,\n        foreColor: barTotalDataLabelsConfig.style.color,\n        text: val,\n        textAnchor,\n        fontFamily: barTotalDataLabelsConfig.style.fontFamily,\n        fontSize: barTotalDataLabelsConfig.style.fontSize,\n        fontWeight: barTotalDataLabelsConfig.style.fontWeight\n      });\n    }\n    return totalDataLabelText;\n  }\n}\nlet Helpers$1 = class Helpers4 {\n  /**\n   * @param {Record<string, any>} barCtx\n   */\n  constructor(barCtx) {\n    this.w = barCtx.w;\n    this.barCtx = barCtx;\n  }\n  /**\n   * @param {any[]} series\n   */\n  initVariables(series) {\n    const w = this.w;\n    this.barCtx.series = series;\n    this.barCtx.totalItems = 0;\n    this.barCtx.seriesLen = 0;\n    this.barCtx.visibleI = -1;\n    this.barCtx.visibleItems = 1;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length > 0) {\n        this.barCtx.seriesLen = this.barCtx.seriesLen + 1;\n        this.barCtx.totalItems += series[sl].length;\n      }\n      if (w.axisFlags.isXNumeric) {\n        for (let j = 0; j < series[sl].length; j++) {\n          if (w.seriesData.seriesX[sl][j] > w.globals.minX && w.seriesData.seriesX[sl][j] < w.globals.maxX) {\n            this.barCtx.visibleItems++;\n          }\n        }\n      } else {\n        this.barCtx.visibleItems = w.globals.dataPoints;\n      }\n    }\n    this.arrBorderRadius = this.createBorderRadiusArr(w.seriesData.series);\n    if (Utils$1.isSafari()) {\n      this.arrBorderRadius = this.arrBorderRadius.map(\n        (brArr) => (\n          /**\n           * @param {any} _\n           */\n          brArr.map((_) => \"none\")\n        )\n      );\n    }\n    if (this.barCtx.seriesLen === 0) {\n      this.barCtx.seriesLen = 1;\n    }\n    this.barCtx.zeroSerieses = [];\n    if (!w.globals.comboCharts) {\n      this.checkZeroSeries({ series });\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  initialPositions(realIndex) {\n    const w = this.w;\n    let x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW;\n    let dataPoints = w.globals.dataPoints;\n    if (this.barCtx.isRangeBar) {\n      dataPoints = w.labelData.labels.length;\n    }\n    let seriesLen = this.barCtx.seriesLen;\n    if (w.config.plotOptions.bar.rangeBarGroupRows) {\n      seriesLen = 1;\n    }\n    if (this.barCtx.isHorizontal) {\n      yDivision = w.layout.gridHeight / dataPoints;\n      barHeight = yDivision / seriesLen;\n      if (w.axisFlags.isXNumeric) {\n        yDivision = w.layout.gridHeight / this.barCtx.totalItems;\n        barHeight = yDivision / this.barCtx.seriesLen;\n      }\n      barHeight = barHeight * parseInt(this.barCtx.barOptions.barHeight, 10) / 100;\n      if (String(this.barCtx.barOptions.barHeight).indexOf(\"%\") === -1) {\n        barHeight = parseInt(this.barCtx.barOptions.barHeight, 10);\n      }\n      zeroW = this.barCtx.baseLineInvertedY + w.globals.padHorizontal + (this.barCtx.isReversed ? w.layout.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0);\n      if (this.barCtx.isFunnel) {\n        zeroW = w.layout.gridWidth / 2;\n      }\n      y = (yDivision - barHeight * this.barCtx.seriesLen) / 2;\n    } else {\n      xDivision = w.layout.gridWidth / this.barCtx.visibleItems;\n      if (w.config.xaxis.convertedCatToNumeric) {\n        xDivision = w.layout.gridWidth / w.globals.dataPoints;\n      }\n      barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n      if (w.axisFlags.isXNumeric) {\n        const xRatio = this.barCtx.xRatio;\n        if (w.globals.minXDiff && w.globals.minXDiff !== 0.5 && w.globals.minXDiff / xRatio > 0) {\n          xDivision = w.globals.minXDiff / xRatio;\n        }\n        barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n        if (barWidth < 1) {\n          barWidth = 1;\n        }\n      }\n      if (String(this.barCtx.barOptions.columnWidth).indexOf(\"%\") === -1) {\n        barWidth = parseInt(this.barCtx.barOptions.columnWidth, 10);\n      }\n      zeroH = w.layout.gridHeight - this.barCtx.baseLineY[this.barCtx.translationsIndex] - (this.barCtx.isReversed ? w.layout.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.translationsIndex] * 2 : 0);\n      if (w.axisFlags.isXNumeric) {\n        const xForNumericX = this.barCtx.getBarXForNumericXAxis({\n          x,\n          j: 0,\n          realIndex,\n          barWidth\n        });\n        x = xForNumericX.x;\n      } else {\n        x = w.globals.padHorizontal + Utils$1.noExponents(xDivision - barWidth * this.barCtx.seriesLen) / 2;\n      }\n    }\n    w.globals.barHeight = barHeight;\n    w.globals.barWidth = barWidth;\n    return {\n      x,\n      y,\n      yDivision,\n      xDivision,\n      barHeight,\n      barWidth,\n      zeroH,\n      zeroW\n    };\n  }\n  /**\n   * @param {Record<string, any>} ctx\n   */\n  initializeStackedPrevVars(ctx) {\n    const w = ctx.w;\n    w.labelData.seriesGroups.forEach((group) => {\n      if (!ctx[group]) ctx[group] = {};\n      ctx[group].prevY = [];\n      ctx[group].prevX = [];\n      ctx[group].prevYF = [];\n      ctx[group].prevXF = [];\n      ctx[group].prevYVal = [];\n      ctx[group].prevXVal = [];\n    });\n  }\n  /**\n   * @param {Record<string, any>} ctx\n   */\n  initializeStackedXYVars(ctx) {\n    const w = ctx.w;\n    w.labelData.seriesGroups.forEach((group) => {\n      if (!ctx[group]) ctx[group] = {};\n      ctx[group].xArrj = [];\n      ctx[group].xArrjF = [];\n      ctx[group].xArrjVal = [];\n      ctx[group].yArrj = [];\n      ctx[group].yArrjF = [];\n      ctx[group].yArrjVal = [];\n    });\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  getPathFillColor(series, i, j, realIndex) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const fill = new Fill(this.barCtx.w);\n    let fillColor = null;\n    const seriesNumber = this.barCtx.barOptions.distributed ? j : i;\n    let useRangeColor = false;\n    if (this.barCtx.barOptions.colors.ranges.length > 0) {\n      const colorRange = this.barCtx.barOptions.colors.ranges;\n      colorRange.map((range) => {\n        if (series[i][j] >= range.from && series[i][j] <= range.to) {\n          fillColor = range.color;\n          useRangeColor = true;\n        }\n      });\n    }\n    const pathFill = fill.fillPath({\n      seriesNumber: this.barCtx.barOptions.distributed ? seriesNumber : realIndex,\n      dataPointIndex: j,\n      color: fillColor,\n      value: series[i][j],\n      fillConfig: (_a = w.config.series[i].data[j]) == null ? void 0 : _a.fill,\n      fillType: ((_c = (_b = w.config.series[i].data[j]) == null ? void 0 : _b.fill) == null ? void 0 : _c.type) ? (_d = w.config.series[i].data[j]) == null ? void 0 : _d.fill.type : Array.isArray(w.config.fill.type) ? w.config.fill.type[realIndex] : w.config.fill.type\n    });\n    return {\n      color: pathFill,\n      useRangeColor\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  getStrokeWidth(i, j, realIndex) {\n    let strokeWidth = 0;\n    const w = this.w;\n    if (typeof this.barCtx.series[i][j] === \"undefined\" || this.barCtx.series[i][j] === null || w.config.chart.type === \"bar\" && !this.barCtx.series[i][j]) {\n      this.barCtx.isNullValue = true;\n    } else {\n      this.barCtx.isNullValue = false;\n    }\n    if (w.config.stroke.show) {\n      if (!this.barCtx.isNullValue) {\n        strokeWidth = Array.isArray(this.barCtx.strokeWidth) ? this.barCtx.strokeWidth[realIndex] : this.barCtx.strokeWidth;\n      }\n    }\n    return strokeWidth;\n  }\n  /**\n   * @param {any[]} series\n   */\n  createBorderRadiusArr(series) {\n    var _a;\n    const w = this.w;\n    const alwaysApplyRadius = !this.w.config.chart.stacked || w.config.plotOptions.bar.borderRadius <= 0;\n    const numSeries = series.length;\n    const numColumns = ((_a = series[0]) == null ? void 0 : _a.length) | 0;\n    const output = Array.from(\n      { length: numSeries },\n      () => Array(numColumns).fill(alwaysApplyRadius ? \"top\" : \"none\")\n    );\n    if (alwaysApplyRadius) return output;\n    const chartType = this.w.config.chart.type;\n    for (let j = 0; j < numColumns; j++) {\n      const positiveIndices = [];\n      const negativeIndices = [];\n      let nonZeroCount = 0;\n      for (let i = 0; i < numSeries; i++) {\n        const value = series[i][j];\n        if (value > 0) {\n          positiveIndices.push(i);\n          nonZeroCount++;\n        } else if (value < 0) {\n          negativeIndices.push(i);\n          nonZeroCount++;\n        }\n      }\n      if (positiveIndices.length > 0 && negativeIndices.length === 0) {\n        if (positiveIndices.length === 1) {\n          output[positiveIndices[0]][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"both\";\n        } else {\n          const firstPositiveIndex = positiveIndices[0];\n          const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n          for (const i of positiveIndices) {\n            if (i === firstPositiveIndex) {\n              output[i][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"bottom\";\n            } else if (i === lastPositiveIndex) {\n              output[i][j] = \"top\";\n            } else {\n              output[i][j] = \"none\";\n            }\n          }\n        }\n      } else if (negativeIndices.length > 0 && positiveIndices.length === 0) {\n        if (negativeIndices.length === 1) {\n          output[negativeIndices[0]][j] = \"both\";\n        } else {\n          const highestNegativeIndex = Math.max(...negativeIndices);\n          const lowestNegativeIndex = Math.min(...negativeIndices);\n          for (const i of negativeIndices) {\n            if (i === highestNegativeIndex) {\n              output[i][j] = \"bottom\";\n            } else if (i === lowestNegativeIndex) {\n              output[i][j] = \"top\";\n            } else {\n              output[i][j] = \"none\";\n            }\n          }\n        }\n      } else if (positiveIndices.length > 0 && negativeIndices.length > 0) {\n        const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n        for (const i of positiveIndices) {\n          if (i === lastPositiveIndex) {\n            output[i][j] = \"top\";\n          } else {\n            output[i][j] = \"none\";\n          }\n        }\n        const highestNegativeIndex = Math.max(...negativeIndices);\n        for (const i of negativeIndices) {\n          if (i === highestNegativeIndex) {\n            output[i][j] = \"bottom\";\n          } else {\n            output[i][j] = \"none\";\n          }\n        }\n      } else if (nonZeroCount === 1) {\n        const index = positiveIndices[0] || negativeIndices[0];\n        output[index][j] = \"both\";\n      }\n    }\n    return output;\n  }\n  /** @param {{ j?: any, i?: any, x1?: any, x2?: any, y1?: any, y2?: any, bc?: any, elSeries?: any }} opts */\n  barBackground({ j, i, x1, x2, y1, y2, elSeries }) {\n    const w = this.w;\n    const graphics = new Graphics(this.barCtx.w);\n    const sr = new Series(this.barCtx.w);\n    const activeSeriesIndex = sr.getActiveConfigSeriesIndex();\n    if (this.barCtx.barOptions.colors.backgroundBarColors.length > 0 && activeSeriesIndex === i) {\n      if (j >= this.barCtx.barOptions.colors.backgroundBarColors.length) {\n        j %= this.barCtx.barOptions.colors.backgroundBarColors.length;\n      }\n      const bcolor = this.barCtx.barOptions.colors.backgroundBarColors[j];\n      const rect = graphics.drawRect(\n        typeof x1 !== \"undefined\" ? x1 : 0,\n        typeof y1 !== \"undefined\" ? y1 : 0,\n        typeof x2 !== \"undefined\" ? x2 : w.layout.gridWidth,\n        typeof y2 !== \"undefined\" ? y2 : w.layout.gridHeight,\n        this.barCtx.barOptions.colors.backgroundBarRadius,\n        bcolor,\n        this.barCtx.barOptions.colors.backgroundBarOpacity\n      );\n      elSeries.add(rect);\n      rect.node.classList.add(\"apexcharts-backgroundBar\");\n    }\n  }\n  /** @param {{ barWidth?: any, barXPosition?: any, y1?: any, y2?: any, yRatio?: any, strokeWidth?: any, isReversed?: any, series?: any, seriesGroup?: any, realIndex?: any, i?: any, j?: any, w?: any }} opts */\n  getColumnPaths({\n    barWidth,\n    barXPosition,\n    y1,\n    y2,\n    strokeWidth,\n    isReversed,\n    series,\n    seriesGroup,\n    realIndex,\n    i,\n    j,\n    w\n  }) {\n    var _a, _b, _c;\n    const graphics = new Graphics(this.barCtx.w);\n    strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n    if (!strokeWidth) strokeWidth = 0;\n    let bW = barWidth;\n    let bXP = barXPosition;\n    if ((_a = w.config.series[realIndex].data[j]) == null ? void 0 : _a.columnWidthOffset) {\n      bXP = barXPosition - w.config.series[realIndex].data[j].columnWidthOffset / 2;\n      bW = barWidth + w.config.series[realIndex].data[j].columnWidthOffset;\n    }\n    const strokeCenter = strokeWidth / 2;\n    const x1 = bXP + strokeCenter;\n    const x2 = bXP + bW - strokeCenter;\n    const direction = (series[i][j] >= 0 ? 1 : -1) * (isReversed ? -1 : 1);\n    y1 += 1e-3 - strokeCenter * direction;\n    y2 += 1e-3 + strokeCenter * direction;\n    const sl = graphics.line(x2, y1);\n    const closing = w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\";\n    let pathTo = graphics.move(x1, y1) + graphics.line(x1, y2) + graphics.line(x2, y2) + sl + closing;\n    if (this.arrBorderRadius[realIndex][j] !== \"none\") {\n      pathTo = graphics.roundPathCorners(\n        pathTo,\n        w.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom;\n    const morphFrom = (_c = (_b = this.barCtx.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = graphics.move(x1, y1) + graphics.line(x1, y1) + sl + sl + sl + sl + sl + graphics.line(x1, y1) + closing;\n    }\n    if (w.config.chart.stacked) {\n      let _ctx = this.barCtx;\n      _ctx = this.barCtx[seriesGroup];\n      _ctx.yArrj.push(y2 - strokeCenter * direction);\n      _ctx.yArrjF.push(Math.abs(y1 - y2 + strokeWidth * direction));\n      _ctx.yArrjVal.push(this.barCtx.series[i][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\n    };\n  }\n  /**\n   * Build a trapezoidal funnel-stage path. Used when\n   * `plotOptions.funnel.shape === 'trapezoid'` is active alongside `isFunnel`.\n   *\n   * Each stage is a 4-corner polygon whose top width matches the current\n   * stage's value and bottom width matches the next stage's value, producing\n   * continuous sloped sides between consecutive stages.\n   *\n   * For the last stage, the bottom width is configurable:\n   * - `lastShape: 'flat'`  → bottom width = top width (parallel sides)\n   * - `lastShape: 'taper'` → bottom width = 0 (taper to a point)\n   *\n   * @param {{ barYPosition: number, barHeight: number, series: any[][], i: number, j: number, realIndex: number, strokeWidth: number, w: any }} opts\n   */\n  getFunnelTrapezoidPaths({\n    barYPosition,\n    barHeight,\n    series,\n    i,\n    j,\n    realIndex,\n    strokeWidth,\n    w\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w.layout.gridWidth / 2;\n    const halfWidthFor = (v) => Math.abs(v / this.barCtx.invertedYRatio) / 2;\n    const topHalf = halfWidthFor(series[i][j]);\n    const lastIdx = series[i].length - 1;\n    const isLast = j === lastIdx;\n    const lastShape = w.config.plotOptions.funnel.lastShape === \"taper\" ? \"taper\" : \"flat\";\n    let bottomHalf;\n    if (isLast) {\n      bottomHalf = lastShape === \"taper\" ? 0 : topHalf;\n    } else {\n      bottomHalf = halfWidthFor(series[i][j + 1]);\n    }\n    const strokeCenter = strokeWidth / 2;\n    const y1 = barYPosition + strokeCenter;\n    const y2 = barYPosition + barHeight - strokeCenter;\n    const topLeftX = center - topHalf;\n    const topRightX = center + topHalf;\n    const bottomLeftX = center - bottomHalf;\n    const bottomRightX = center + bottomHalf;\n    const pathTo = graphics.move(topLeftX, y1) + graphics.line(topRightX, y1) + graphics.line(bottomRightX, y2) + graphics.line(bottomLeftX, y2) + \" Z\";\n    let pathFrom;\n    const morphFrom = (_b = (_a = this.barCtx.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = graphics.move(center, y1) + graphics.line(center, y1) + graphics.line(center, y2) + graphics.line(center, y2) + \" Z\";\n    }\n    return {\n      pathTo,\n      pathFrom,\n      // x is the right edge of the wider (top) side — used by dataLabel\n      // positioning helpers that expect a \"right\" reference.\n      x: topRightX,\n      x1: topLeftX,\n      barXPosition: center\n    };\n  }\n  /**\n   * Pre-compute the per-segment layout for a value-proportional pyramid.\n   *\n   * Each segment is a horizontal slice of a triangle whose apex sits at the\n   * top of the plot area (width = 0) and whose base spans `gridWidth` at the\n   * bottom. The vertical extent of each slice is its share of the total\n   * series value, so areas track value contribution and segments share\n   * edges (no gaps). The first data point is the apex, the last is the base.\n   *\n   * @param {any[]} seriesData - 1D array of values for a single series row\n   * @returns {{ y: number, height: number, topHalf: number, bottomHalf: number }[]}\n   */\n  computePyramidLayout(seriesData) {\n    const w = this.w;\n    const gridHeight = w.layout.gridHeight;\n    const gridWidth = w.layout.gridWidth;\n    const values = seriesData.map(\n      /** @param {any} v */\n      (v) => Math.abs(Number(v) || 0)\n    );\n    const total = values.reduce(\n      /** @param {number} a @param {number} b */\n      (a, b) => a + b,\n      0\n    );\n    if (total === 0 || gridHeight <= 0) {\n      return values.map(() => ({ y: 0, height: 0, topHalf: 0, bottomHalf: 0 }));\n    }\n    const halfWidth = gridWidth / 2;\n    let cumulative = 0;\n    const layout = [];\n    for (let j = 0; j < values.length; j++) {\n      const topRatio = cumulative / total;\n      cumulative += values[j];\n      const bottomRatio = cumulative / total;\n      const topY = topRatio * gridHeight;\n      const bottomY = bottomRatio * gridHeight;\n      layout.push({\n        y: topY,\n        height: bottomY - topY,\n        topHalf: topRatio * halfWidth,\n        bottomHalf: bottomRatio * halfWidth\n      });\n    }\n    return layout;\n  }\n  /**\n   * Build a single pyramid stage path. Geometry is precomputed by\n   * `computePyramidLayout`; this method only renders that geometry into an\n   * SVG path string plus a `pathFrom` for entry/morph animations.\n   *\n   * @param {{ barYPosition: number, barHeight: number, topHalf: number, bottomHalf: number, realIndex: number, j: number, strokeWidth: number, w: any }} opts\n   */\n  getPyramidPaths({\n    barYPosition,\n    barHeight,\n    topHalf,\n    bottomHalf,\n    realIndex,\n    j,\n    strokeWidth,\n    w\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w.layout.gridWidth / 2;\n    const strokeCenter = strokeWidth / 2;\n    const y1 = barYPosition + strokeCenter;\n    const y2 = barYPosition + barHeight - strokeCenter;\n    const topLeftX = center - topHalf;\n    const topRightX = center + topHalf;\n    const bottomLeftX = center - bottomHalf;\n    const bottomRightX = center + bottomHalf;\n    const pathTo = graphics.move(topLeftX, y1) + graphics.line(topRightX, y1) + graphics.line(bottomRightX, y2) + graphics.line(bottomLeftX, y2) + \" Z\";\n    let pathFrom;\n    const morphFrom = (_b = (_a = this.barCtx.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = graphics.move(center, y1) + graphics.line(center, y1) + graphics.line(center, y2) + graphics.line(center, y2) + \" Z\";\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: topRightX,\n      x1: topLeftX,\n      barXPosition: center\n    };\n  }\n  /** @param {{ barYPosition?: any, barHeight?: any, x1?: any, x2?: any, strokeWidth?: any, isReversed?: any, series?: any, seriesGroup?: any, realIndex?: any, i?: any, j?: any, w?: any }} opts */\n  getBarpaths({\n    barYPosition,\n    barHeight,\n    x1,\n    x2,\n    strokeWidth,\n    isReversed,\n    series,\n    seriesGroup,\n    realIndex,\n    i,\n    j,\n    w\n  }) {\n    var _a, _b, _c;\n    const graphics = new Graphics(this.barCtx.w);\n    strokeWidth = Array.isArray(strokeWidth) ? strokeWidth[realIndex] : strokeWidth;\n    if (!strokeWidth) strokeWidth = 0;\n    let bYP = barYPosition;\n    let bH = barHeight;\n    if ((_a = w.config.series[realIndex].data[j]) == null ? void 0 : _a.barHeightOffset) {\n      bYP = barYPosition - w.config.series[realIndex].data[j].barHeightOffset / 2;\n      bH = barHeight + w.config.series[realIndex].data[j].barHeightOffset;\n    }\n    const strokeCenter = strokeWidth / 2;\n    const y1 = bYP + strokeCenter;\n    const y2 = bYP + bH - strokeCenter;\n    const direction = (series[i][j] >= 0 ? 1 : -1) * (isReversed ? -1 : 1);\n    x1 += 1e-3 + strokeCenter * direction;\n    x2 += 1e-3 - strokeCenter * direction;\n    const isFunnel = this.barCtx.isFunnel;\n    const fromX = isFunnel ? (x1 + x2) / 2 : x1;\n    const sl = graphics.line(x1, y2);\n    const closing = w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\";\n    let pathTo = graphics.move(x1, y1) + graphics.line(x2, y1) + graphics.line(x2, y2) + sl + closing;\n    if (this.arrBorderRadius[realIndex][j] !== \"none\") {\n      pathTo = graphics.roundPathCorners(\n        pathTo,\n        w.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom;\n    const morphFrom = (_c = (_b = this.barCtx.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.getInitialPathFor(\n      realIndex,\n      j\n    );\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      const slFrom = isFunnel ? graphics.line(fromX, y2) : sl;\n      pathFrom = graphics.move(fromX, y1) + graphics.line(fromX, y1) + slFrom + slFrom + slFrom + slFrom + slFrom + graphics.line(fromX, y1) + closing;\n    }\n    if (w.config.chart.stacked) {\n      let _ctx = this.barCtx;\n      _ctx = this.barCtx[seriesGroup];\n      _ctx.xArrj.push(x2 + strokeCenter * direction);\n      _ctx.xArrjF.push(Math.abs(x1 - x2 - strokeWidth * direction));\n      _ctx.xArrjVal.push(this.barCtx.series[i][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\n    };\n  }\n  /** @param {{series: any}} opts */\n  checkZeroSeries({ series }) {\n    const w = this.w;\n    for (let zs = 0; zs < series.length; zs++) {\n      let total = 0;\n      for (let zsj = 0; zsj < series[w.globals.maxValsInArrayIndex].length; zsj++) {\n        total += series[zs][zsj];\n      }\n      if (total === 0) {\n        this.barCtx.zeroSerieses.push(zs);\n      }\n    }\n  }\n  /**\n   * @param {number} value\n   * @param {number} zeroW\n   */\n  getXForValue(value, zeroW, zeroPositionForNull = true) {\n    let xForVal = zeroPositionForNull ? zeroW : null;\n    if (typeof value !== \"undefined\" && value !== null) {\n      xForVal = zeroW + value / this.barCtx.invertedYRatio - (this.barCtx.isReversed ? value / this.barCtx.invertedYRatio : 0) * 2;\n    }\n    return xForVal;\n  }\n  /**\n   * @param {number} value\n   * @param {number} zeroH\n   * @param {number} translationsIndex\n   */\n  getYForValue(value, zeroH, translationsIndex, zeroPositionForNull = true) {\n    let yForVal = zeroPositionForNull ? zeroH : null;\n    if (typeof value !== \"undefined\" && value !== null) {\n      yForVal = zeroH - value / this.barCtx.yRatio[translationsIndex] + (this.barCtx.isReversed ? value / this.barCtx.yRatio[translationsIndex] : 0) * 2;\n    }\n    return yForVal;\n  }\n  /**\n   * @param {string} type\n   * @param {number} zeroW\n   * @param {number} zeroH\n   * @param {number} i\n   * @param {number} j\n   * @param {number} translationsIndex\n   */\n  getGoalValues(type, zeroW, zeroH, i, j, translationsIndex) {\n    const w = this.w;\n    const goals = [];\n    const pushGoal = (value, attrs) => {\n      goals.push({\n        [type]: type === \"x\" ? this.getXForValue(value, zeroW, false) : this.getYForValue(value, zeroH, translationsIndex, false),\n        attrs\n      });\n    };\n    if (w.seriesData.seriesGoals[i] && w.seriesData.seriesGoals[i][j] && Array.isArray(w.seriesData.seriesGoals[i][j])) {\n      w.seriesData.seriesGoals[i][j].forEach((goal) => {\n        pushGoal(goal.value, goal);\n      });\n    }\n    if (this.barCtx.barOptions.isDumbbell && w.rangeData.seriesRange.length) {\n      const colors = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : w.globals.colors;\n      const commonAttrs = {\n        strokeHeight: type === \"x\" ? 0 : w.globals.markers.size[i],\n        strokeWidth: type === \"x\" ? w.globals.markers.size[i] : 0,\n        strokeDashArray: 0,\n        strokeLineCap: \"round\",\n        strokeColor: Array.isArray(colors[i]) ? colors[i][0] : colors[i]\n      };\n      pushGoal(w.rangeData.seriesRangeStart[i][j], commonAttrs);\n      pushGoal(w.rangeData.seriesRangeEnd[i][j], __spreadProps(__spreadValues({}, commonAttrs), {\n        strokeColor: Array.isArray(colors[i]) ? colors[i][1] : colors[i]\n      }));\n    }\n    return goals;\n  }\n  /** @param {{barXPosition: any, barYPosition: any, goalX: any, goalY: any, barWidth: any, barHeight: any}} opts */\n  drawGoalLine({\n    barXPosition,\n    barYPosition,\n    goalX,\n    goalY,\n    barWidth,\n    barHeight\n  }) {\n    const graphics = new Graphics(this.barCtx.w);\n    const lineGroup = graphics.group({\n      className: \"apexcharts-bar-goals-groups\"\n    });\n    lineGroup.node.classList.add(\"apexcharts-element-hidden\");\n    this.barCtx.w.globals.delayedElements.push({\n      el: lineGroup.node\n    });\n    lineGroup.attr(\n      \"clip-path\",\n      `url(#gridRectMarkerMask${this.barCtx.w.globals.cuid})`\n    );\n    let line = null;\n    if (this.barCtx.isHorizontal) {\n      if (Array.isArray(goalX)) {\n        goalX.forEach((goal) => {\n          if (goal.x >= -1 && goal.x <= graphics.w.layout.gridWidth + 1) {\n            const sHeight = typeof goal.attrs.strokeHeight !== \"undefined\" ? goal.attrs.strokeHeight : barHeight / 2;\n            const y = barYPosition + sHeight + barHeight / 2;\n            line = graphics.drawLine(\n              goal.x,\n              y - sHeight * 2,\n              goal.x,\n              y,\n              goal.attrs.strokeColor ? goal.attrs.strokeColor : void 0,\n              goal.attrs.strokeDashArray,\n              goal.attrs.strokeWidth ? goal.attrs.strokeWidth : 2,\n              goal.attrs.strokeLineCap\n            );\n            lineGroup.add(line);\n          }\n        });\n      }\n    } else {\n      if (Array.isArray(goalY)) {\n        goalY.forEach((goal) => {\n          if (goal.y >= -1 && goal.y <= graphics.w.layout.gridHeight + 1) {\n            const sWidth = typeof goal.attrs.strokeWidth !== \"undefined\" ? goal.attrs.strokeWidth : barWidth / 2;\n            const x = barXPosition + sWidth + barWidth / 2;\n            line = graphics.drawLine(\n              x - sWidth * 2,\n              goal.y,\n              x,\n              goal.y,\n              goal.attrs.strokeColor ? goal.attrs.strokeColor : void 0,\n              goal.attrs.strokeDashArray,\n              goal.attrs.strokeHeight ? goal.attrs.strokeHeight : 2,\n              goal.attrs.strokeLineCap\n            );\n            lineGroup.add(line);\n          }\n        });\n      }\n    }\n    return lineGroup;\n  }\n  /** @param {{prevPaths: any, currPaths: any, color: any, realIndex: any, j: any}} opts */\n  drawBarShadow({ prevPaths, currPaths, color, realIndex, j }) {\n    const w = this.w;\n    const { x: prevX2, x1: prevX1, barYPosition: prevY1 } = prevPaths;\n    const { x: currX2, x1: currX1, barYPosition: currY1 } = currPaths;\n    const prevY2 = prevY1 + currPaths.barHeight;\n    const graphics = new Graphics(this.barCtx.w);\n    const utils = new Utils$1();\n    const shadowPath = graphics.move(prevX1, prevY2) + graphics.line(prevX2, prevY2) + graphics.line(currX2, currY1) + graphics.line(currX1, currY1) + graphics.line(prevX1, prevY2) + (w.config.plotOptions.bar.borderRadiusApplication === \"around\" || this.arrBorderRadius[realIndex][j] === \"both\" ? \" Z\" : \" z\");\n    return graphics.drawPath({\n      d: shadowPath,\n      fill: utils.shadeColor(0.5, Utils$1.rgb2hex(color)),\n      stroke: \"none\",\n      strokeWidth: 0,\n      fillOpacity: 1,\n      classes: \"apexcharts-bar-shadow apexcharts-decoration-element\"\n    });\n  }\n  /** @param {{i: any, j: any}} opts */\n  getZeroValueEncounters({ i, j }) {\n    var _a;\n    const w = this.w;\n    let nonZeroColumns = 0;\n    let zeroEncounters = 0;\n    const seriesIndices = w.config.plotOptions.bar.horizontal ? w.seriesData.series.map((_, _i) => _i) : ((_a = w.globals.columnSeries) == null ? void 0 : _a.i.map((_i) => _i)) || [];\n    seriesIndices.forEach((_si) => {\n      const val = w.globals.seriesPercent[_si][j];\n      if (val) {\n        nonZeroColumns++;\n      }\n      if (_si < i && val === 0) {\n        zeroEncounters++;\n      }\n    });\n    return {\n      nonZeroColumns,\n      zeroEncounters\n    };\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getGroupIndex(seriesIndex) {\n    const w = this.w;\n    const groupIndex = w.labelData.seriesGroups.findIndex(\n      (group) => (\n        // w.config.series[i].name may be undefined, so use\n        // w.seriesData.seriesNames[i], which has default names for those\n        // series. w.labelData.seriesGroups[] uses the same default naming.\n        group.indexOf(w.seriesData.seriesNames[seriesIndex]) > -1\n      )\n    );\n    const cGI = this.barCtx.columnGroupIndices;\n    let columnGroupIndex = cGI.indexOf(groupIndex);\n    if (columnGroupIndex < 0) {\n      cGI.push(groupIndex);\n      columnGroupIndex = cGI.length - 1;\n    }\n    return { groupIndex, columnGroupIndex };\n  }\n};\nclass Bar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  constructor(w, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w;\n    this.barOptions = w.config.plotOptions.bar;\n    this.isHorizontal = this.barOptions.horizontal;\n    this.strokeWidth = w.config.stroke.width;\n    this.isNullValue = false;\n    this.isRangeBar = w.rangeData.seriesRange.length && this.isHorizontal;\n    this.isVerticalGroupedRangeBar = !w.globals.isBarHorizontal && w.rangeData.seriesRange.length && w.config.plotOptions.bar.rangeBarGroupRows;\n    this.isFunnel = this.barOptions.isFunnel;\n    this.isPyramid = this.barOptions.isPyramid;\n    this.pyramidLayout = null;\n    this.xyRatios = xyRatios;\n    this.xRatio = 0;\n    this.yRatio = [];\n    this.invertedXRatio = 0;\n    this.invertedYRatio = 0;\n    this.baseLineY = [];\n    this.baseLineInvertedY = 0;\n    if (this.xyRatios !== null) {\n      this.xRatio = xyRatios.xRatio;\n      this.yRatio = xyRatios.yRatio;\n      this.invertedXRatio = xyRatios.invertedXRatio;\n      this.invertedYRatio = xyRatios.invertedYRatio;\n      this.baseLineY = xyRatios.baseLineY;\n      this.baseLineInvertedY = xyRatios.baseLineInvertedY;\n    }\n    this.yaxisIndex = 0;\n    this.translationsIndex = 0;\n    this.seriesLen = 0;\n    this.pathArr = [];\n    this.series = [];\n    this.elSeries = null;\n    this.visibleI = 0;\n    this.isReversed = false;\n    const ser = new Series(this.w);\n    this.lastActiveBarSerieIndex = ser.getActiveConfigSeriesIndex(\"desc\", [\n      \"bar\",\n      \"column\"\n    ]);\n    this.columnGroupIndices = [];\n    const barSeriesIndices = ser.getBarSeriesIndices();\n    const coreUtils = new CoreUtils(this.w);\n    this.stackedSeriesTotals = coreUtils.getStackedSeriesTotals(\n      this.w.config.series.map((s, i) => {\n        return barSeriesIndices.indexOf(i) === -1 ? i : -1;\n      }).filter((s) => {\n        return s !== -1;\n      })\n    );\n    this.barHelpers = new Helpers$1(this);\n  }\n  /** primary draw method which is called on bar object\n   * @memberof Bar\n   * @param {any[]} series - user supplied series values\n   * @param {number} seriesIndex - the index by which series will be drawn on the svg\n   * @return {Element} element which is supplied to parent chart draw method for appending\n   **/\n  draw(series, seriesIndex) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const coreUtils = new CoreUtils(this.w);\n    series = coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-bar-series apexcharts-plot-series\"\n    });\n    if (w.config.dataLabels.enabled) {\n      if (this.totalItems > this.barOptions.dataLabels.maxItems) {\n        console.warn(\n          \"WARNING: DataLabels are enabled but there are too many to display. This may cause performance issue when rendering - ApexCharts\"\n        );\n      }\n    }\n    for (let i = 0, bc = 0; i < series.length; i++, bc++) {\n      let x, y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        rel: i + 1,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n        this.translationsIndex = realIndex;\n      }\n      const translationsIndex = this.translationsIndex;\n      this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n      if (this.isPyramid) {\n        this.pyramidLayout = this.barHelpers.computePyramidLayout(series[i]);\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      let barHeight = initPositions.barHeight;\n      let barWidth = initPositions.barWidth;\n      y = initY;\n      x = initX;\n      if (!this.isHorizontal) {\n        xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      }\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      w.globals.delayedElements.push({\n        el: elDataLabelsWrap.node\n      });\n      elDataLabelsWrap.node.classList.add(\"apexcharts-element-hidden\");\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const elBarShadows = graphics.group({\n        class: \"apexcharts-bar-shadows\"\n      });\n      w.globals.delayedElements.push({\n        el: elBarShadows.node\n      });\n      elBarShadows.node.classList.add(\"apexcharts-element-hidden\");\n      for (let j = 0; j < series[i].length; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i,\n            j,\n            realIndex,\n            translationsIndex,\n            bc\n          },\n          x,\n          y,\n          strokeWidth,\n          elSeries\n        };\n        if (this.isHorizontal) {\n          paths = this.drawBarPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            barHeight,\n            zeroW,\n            yDivision\n          }));\n          barWidth = this.series[i][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawColumnPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i][j] / this.yRatio[translationsIndex];\n        }\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        if (this.isFunnel && !this.isPyramid && this.barOptions.isFunnel3d && ((_a = w.config.plotOptions.funnel) == null ? void 0 : _a.shape) !== \"trapezoid\" && this.pathArr.length && j > 0) {\n          const barShadow = this.barHelpers.drawBarShadow({\n            color: typeof pathFill.color === \"string\" && ((_b = pathFill.color) == null ? void 0 : _b.indexOf(\"url\")) === -1 ? pathFill.color : Utils$1.hexToRgba(w.globals.colors[i]),\n            prevPaths: this.pathArr[this.pathArr.length - 1],\n            currPaths: paths,\n            realIndex,\n            j\n          });\n          elBarShadows.add(barShadow);\n          if (w.config.chart.dropShadow.enabled) {\n            const filters = new Filters(this.w);\n            filters.dropShadow(barShadow, w.config.chart.dropShadow, realIndex);\n          }\n        }\n        this.pathArr.push(paths);\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        if (j > 0) {\n          xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n        }\n        yArrj.push(y);\n        this.renderSeries(__spreadProps(__spreadValues({\n          realIndex,\n          pathFill: pathFill.color\n        }, pathFill.useRangeColor ? { lineFill: pathFill.color } : {}), {\n          j,\n          i,\n          columnGroupIndex,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          barHeight: Math.abs(paths.barHeight ? paths.barHeight : barHeight),\n          barWidth: Math.abs(paths.barWidth ? paths.barWidth : barWidth),\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          elBarShadows,\n          visibleSeries: this.visibleI,\n          type: \"bar\"\n        }));\n      }\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{ realIndex?: any, pathFill?: any, lineFill?: any, j?: any, i?: any, columnGroupIndex?: any, pathFrom?: any, pathTo?: any, strokeWidth?: any, elSeries?: any, x?: any, y?: any, y1?: any, y2?: any, series?: any, barHeight?: any, barWidth?: any, barXPosition?: any, barYPosition?: any, elDataLabelsWrap?: any, elGoalsMarkers?: any, elBarShadows?: any, visibleSeries?: any, type?: any, classes?: any }} opts */\n  renderSeries({\n    realIndex,\n    pathFill,\n    lineFill,\n    j,\n    i,\n    columnGroupIndex,\n    pathFrom,\n    pathTo,\n    strokeWidth,\n    elSeries,\n    x,\n    // x pos\n    y,\n    // y pos\n    y1,\n    // absolute value\n    y2,\n    // absolute value\n    series,\n    barHeight,\n    barWidth,\n    barXPosition,\n    barYPosition,\n    elDataLabelsWrap,\n    elGoalsMarkers,\n    elBarShadows,\n    visibleSeries,\n    type,\n    classes\n  }) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    let skipDrawing = false;\n    if (!elSeries._bindingsDelegated) {\n      elSeries._bindingsDelegated = true;\n      graphics.setupEventDelegation(elSeries, `.apexcharts-${type}-area`);\n    }\n    if (!lineFill) {\n      let fetchColor = function(i2) {\n        const exp = w.config.stroke.colors;\n        let c;\n        if (Array.isArray(exp) && exp.length > 0) {\n          c = exp[i2];\n          if (!c) c = \"\";\n          if (typeof c === \"function\") {\n            return c({\n              value: w.seriesData.series[i2][j],\n              dataPointIndex: j,\n              w\n            });\n          }\n        }\n        return c;\n      };\n      const checkAvailableColor = typeof w.globals.stroke.colors[realIndex] === \"function\" ? fetchColor(realIndex) : w.globals.stroke.colors[realIndex];\n      lineFill = this.barOptions.distributed ? w.globals.stroke.colors[j] : checkAvailableColor;\n    }\n    const barDataLabels = new BarDataLabels(this);\n    const dataLabelsObj = (\n      /** @type {any} */\n      barDataLabels.handleBarDataLabels({\n        x,\n        y,\n        y1,\n        y2,\n        i,\n        j,\n        series,\n        realIndex,\n        columnGroupIndex,\n        barHeight,\n        barWidth,\n        barXPosition,\n        barYPosition,\n        visibleSeries\n      })\n    );\n    if (!w.globals.isBarHorizontal) {\n      if (dataLabelsObj.dataLabelsPos.dataLabelsX + Math.max(barWidth, w.globals.barPadForNumericAxis) < 0 || dataLabelsObj.dataLabelsPos.dataLabelsX - Math.max(barWidth, w.globals.barPadForNumericAxis) > w.layout.gridWidth) {\n        skipDrawing = true;\n      }\n    }\n    if (\n      /** @type {Record<string,any>} */\n      w.config.series[i].data[j] && /** @type {Record<string,any>} */\n      w.config.series[i].data[j].strokeColor\n    ) {\n      lineFill = /** @type {Record<string,any>} */\n      w.config.series[i].data[j].strokeColor;\n    }\n    if (this.isNullValue) {\n      pathFill = \"none\";\n    }\n    const animCfg = w.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false;\n    let delay = 0;\n    if (staggerEnabled) {\n      const totalBars = w.globals.dataPoints || 1;\n      const configStep = gradCfg.delay || 0;\n      const baseDelayMs = Math.min(\n        configStep,\n        animCfg.speed * 0.5 / Math.max(1, totalBars)\n      );\n      let delayMs = computeStagger({\n        style: \"sequential\",\n        index: j,\n        baseDelay: baseDelayMs\n      });\n      if (w.config.chart.stacked) {\n        delayMs += i * baseDelayMs * 0.5;\n      }\n      const delayFactor = configStep || 1;\n      delay = delayMs / delayFactor;\n    }\n    if (!skipDrawing) {\n      const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n      const dataChangeSpeed = morphActive ? this.ctx.morphTypeChange.getSpeed() : w.config.chart.animations.dynamicAnimation.speed;\n      const renderedPath = (\n        /** @type {any} */\n        graphics.renderPaths({\n          i,\n          j,\n          realIndex,\n          pathFrom,\n          pathTo,\n          stroke: lineFill,\n          strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: pathFill,\n          animationDelay: delay,\n          initialSpeed: w.config.chart.animations.speed,\n          dataChangeSpeed,\n          className: `apexcharts-${type}-area ${classes}`,\n          chartType: type,\n          bindEventsOnPaths: false\n        })\n      );\n      renderedPath.attr(\"clip-path\", `url(#gridRectBarMask${w.globals.cuid})`);\n      const forecast = w.config.forecastDataPoints;\n      if (forecast.count > 0) {\n        if (j >= w.globals.dataPoints - forecast.count) {\n          renderedPath.node.setAttribute(\"stroke-dasharray\", forecast.dashArray);\n          renderedPath.node.setAttribute(\"stroke-width\", forecast.strokeWidth);\n          renderedPath.node.setAttribute(\"fill-opacity\", forecast.fillOpacity);\n        }\n      }\n      if (typeof y1 !== \"undefined\" && typeof y2 !== \"undefined\") {\n        renderedPath.attr(\"data-range-y1\", y1);\n        renderedPath.attr(\"data-range-y2\", y2);\n      }\n      const filters = new Filters(this.w);\n      filters.setSelectionFilter(renderedPath, realIndex, j);\n      elSeries.add(renderedPath);\n      renderedPath.attr({\n        cy: dataLabelsObj.dataLabelsPos.bcy,\n        cx: dataLabelsObj.dataLabelsPos.bcx,\n        j,\n        val: w.seriesData.series[i][j],\n        barHeight,\n        barWidth\n      });\n      if (dataLabelsObj.dataLabels !== null) {\n        elDataLabelsWrap.add(dataLabelsObj.dataLabels);\n      }\n      if (dataLabelsObj.totalDataLabels) {\n        elDataLabelsWrap.add(dataLabelsObj.totalDataLabels);\n      }\n      elSeries.add(elDataLabelsWrap);\n      if (elGoalsMarkers) {\n        elSeries.add(elGoalsMarkers);\n      }\n      if (elBarShadows) {\n        elSeries.add(elBarShadows);\n      }\n    }\n    return elSeries;\n  }\n  /** @param {{indexes: any, barHeight: any, strokeWidth: any, zeroW: any, x: any, y: any, yDivision: any, elSeries: any}} opts */\n  drawBarPaths({\n    indexes,\n    barHeight,\n    strokeWidth,\n    zeroW,\n    x,\n    y,\n    yDivision,\n    elSeries\n  }) {\n    const w = this.w;\n    const i = indexes.i;\n    const j = indexes.j;\n    let barYPosition;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[i][j] - w.globals.minX) / this.invertedXRatio - barHeight;\n      barYPosition = y + barHeight * this.visibleI;\n    } else {\n      if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i, j });\n        if (nonZeroColumns > 0) {\n          barHeight = this.seriesLen * barHeight / nonZeroColumns;\n        }\n        barYPosition = y + barHeight * this.visibleI;\n        barYPosition -= barHeight * zeroEncounters;\n      } else {\n        barYPosition = y + barHeight * this.visibleI;\n      }\n    }\n    const useTrapezoid = this.isFunnel && w.config.plotOptions.funnel.shape === \"trapezoid\";\n    const pyramidSeg = this.isPyramid && this.pyramidLayout ? this.pyramidLayout[j] : null;\n    const usePyramid = !!pyramidSeg;\n    if (pyramidSeg) {\n      barYPosition = pyramidSeg.y;\n      barHeight = pyramidSeg.height;\n    } else if (this.isFunnel && !useTrapezoid) {\n      const _zeroW = zeroW != null ? zeroW : 0;\n      zeroW = _zeroW - /** @type {number} */\n      /** @type {any} */\n      (this.barHelpers.getXForValue(\n        /** @type {any} */\n        this.series[i][j],\n        _zeroW\n      ) - _zeroW) / 2;\n    }\n    x = this.barHelpers.getXForValue(\n      /** @type {any} */\n      this.series[i][j],\n      zeroW != null ? zeroW : 0\n    );\n    let paths;\n    if (pyramidSeg) {\n      paths = /** @type {any} */\n      this.barHelpers.getPyramidPaths({\n        barYPosition,\n        barHeight,\n        topHalf: pyramidSeg.topHalf,\n        bottomHalf: pyramidSeg.bottomHalf,\n        realIndex: indexes.realIndex,\n        j,\n        strokeWidth,\n        w\n      });\n    } else if (useTrapezoid) {\n      paths = /** @type {any} */\n      this.barHelpers.getFunnelTrapezoidPaths({\n        barYPosition,\n        barHeight,\n        series: (\n          /** @type {any} */\n          this.series\n        ),\n        i,\n        j,\n        realIndex: indexes.realIndex,\n        strokeWidth,\n        w\n      });\n    } else {\n      paths = /** @type {any} */\n      this.barHelpers.getBarpaths({\n        barYPosition,\n        barHeight,\n        x1: zeroW,\n        x2: x,\n        strokeWidth,\n        isReversed: this.isReversed,\n        series: this.series,\n        realIndex: indexes.realIndex,\n        i,\n        j,\n        w\n      });\n    }\n    if (useTrapezoid || usePyramid) {\n      zeroW = paths.x1;\n      x = paths.x;\n    }\n    if (!w.axisFlags.isXNumeric && !usePyramid) {\n      y = y + yDivision;\n    }\n    if (usePyramid) {\n      y = barYPosition;\n    }\n    this.barHelpers.barBackground({\n      j,\n      i,\n      y1: barYPosition - barHeight * this.visibleI,\n      y2: barHeight * this.seriesLen,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      x1: zeroW,\n      x,\n      y,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        i,\n        j,\n        0\n      ),\n      barYPosition,\n      barHeight\n    };\n  }\n  /** @param {{indexes: any, x: any, y: any, xDivision: any, barWidth: any, zeroH: any, strokeWidth: any, elSeries: any}} opts */\n  drawColumnPaths({\n    indexes,\n    x,\n    y,\n    xDivision,\n    barWidth,\n    zeroH,\n    strokeWidth,\n    elSeries\n  }) {\n    const w = this.w;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    const i = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    let barXPosition;\n    if (w.axisFlags.isXNumeric) {\n      const xForNumericX = this.getBarXForNumericXAxis({\n        x,\n        j,\n        realIndex,\n        barWidth\n      });\n      x = xForNumericX.x;\n      barXPosition = xForNumericX.barXPosition;\n    } else {\n      if (w.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i, j });\n        if (nonZeroColumns > 0) {\n          barWidth = this.seriesLen * barWidth / nonZeroColumns;\n        }\n        barXPosition = x + barWidth * this.visibleI;\n        barXPosition -= barWidth * zeroEncounters;\n      } else {\n        barXPosition = x + barWidth * this.visibleI;\n      }\n    }\n    y = this.barHelpers.getYForValue(\n      /** @type {any} */\n      this.series[i][j],\n      zeroH,\n      translationsIndex\n    );\n    const paths = (\n      /** @type {any} */\n      this.barHelpers.getColumnPaths({\n        barXPosition,\n        barWidth,\n        y1: zeroH,\n        y2: y,\n        strokeWidth,\n        isReversed: this.isReversed,\n        series: this.series,\n        realIndex,\n        i,\n        j,\n        w\n      })\n    );\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i,\n      x1: barXPosition - strokeWidth / 2 - barWidth * this.visibleI,\n      x2: barWidth * this.seriesLen + strokeWidth / 2,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      x,\n      y,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        translationsIndex\n      ),\n      barXPosition,\n      barWidth\n    };\n  }\n  /** @param {{x: any, barWidth: any, realIndex: any, j: any}} opts */\n  getBarXForNumericXAxis({ x, barWidth, realIndex, j }) {\n    const w = this.w;\n    let sxI = realIndex;\n    if (!w.seriesData.seriesX[realIndex].length) {\n      sxI = w.globals.maxValsInArrayIndex;\n    }\n    if (Utils$1.isNumber(w.seriesData.seriesX[sxI][j])) {\n      x = (w.seriesData.seriesX[sxI][j] - w.globals.minX) / this.xRatio - barWidth * this.seriesLen / 2;\n    }\n    return {\n      barXPosition: x + barWidth * this.visibleI,\n      x\n    };\n  }\n  /**\n   * Resolve `pathFrom` for a bar on data update. Returns the previous render's\n   * `d` string for the same `(realIndex, j)` only when its SVG command count\n   * matches `pathTo` — that's the survivor-with-stable-shape case where SVG.js\n   * morph produces a smooth resize. When commands mismatch (corner state\n   * flipped, e.g. bar became new top-of-stack after legend toggle) or the bar\n   * is genuinely new (no captured previous), returns `pathTo` — which makes\n   * pathFrom === pathTo so morph is a visual no-op (snap).\n   *\n   * @param {number} realIndex - stable series index from `data:realIndex`\n   * @param {number} j - data-point index within the series\n   * @param {string} pathTo - the freshly-built path for this bar (post-roundPathCorners)\n   * @returns {string}\n   **/\n  getPreviousPath(realIndex, j, pathTo) {\n    const w = this.w;\n    let oldD = null;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        if (typeof gpp.paths[j] !== \"undefined\") {\n          oldD = gpp.paths[j].d;\n        }\n      }\n    }\n    if (oldD && Bar.pathCommandCount(oldD) === Bar.pathCommandCount(pathTo)) {\n      return oldD;\n    }\n    return pathTo;\n  }\n  /**\n   * Count SVG path commands (M, L, C, Q, Z, etc.). Used to detect whether\n   * two paths can be morphed safely — SVG.js requires matching command counts.\n   *\n   * @param {string} d\n   * @returns {number}\n   */\n  static pathCommandCount(d) {\n    if (!d) return 0;\n    const matches = d.match(/[A-Za-z]/g);\n    return matches ? matches.length : 0;\n  }\n}\nclass BarStacked extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {number} seriesIndex\n   */\n  draw(series, seriesIndex) {\n    const w = this.w;\n    this.graphics = new Graphics(this.w);\n    this.bar = new Bar(this.w, this.ctx, this.xyRatios);\n    const coreUtils = new CoreUtils(this.w);\n    series = coreUtils.getLogSeries(series);\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    if (w.config.chart.stackType === \"100%\") {\n      series = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex.map(\n          (_) => w.globals.seriesPercent[_]\n        )\n      ) : w.globals.seriesPercent.slice();\n    }\n    this.series = series;\n    this.barHelpers.initializeStackedPrevVars(this);\n    const ret = this.graphics.group({\n      class: \"apexcharts-bar-series apexcharts-plot-series\"\n    });\n    let x = 0;\n    let y = 0;\n    for (let i = 0, bc = 0; i < series.length; i++, bc++) {\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { groupIndex, columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      this.groupCtx = /** @type {any} */\n      this[\n        /** @type {any} */\n        w.labelData.seriesGroups[groupIndex]\n      ];\n      const xArrValues = [];\n      const yArrValues = [];\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n      let elSeries = this.graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      const elDataLabelsWrap = this.graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = this.graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const initPositions = this.initialPositions(\n        x,\n        y,\n        void 0,\n        void 0,\n        void 0,\n        void 0,\n        translationsIndex\n      );\n      const {\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroH,\n        // zeroH is the baseline where 0 meets y axis\n        zeroW\n        // zeroW is the baseline where 0 meets x axis\n      } = initPositions;\n      let barHeight = initPositions.barHeight;\n      let barWidth = initPositions.barWidth;\n      y = initPositions.y;\n      x = initPositions.x;\n      w.globals.barHeight = barHeight;\n      w.globals.barWidth = barWidth;\n      this.barHelpers.initializeStackedXYVars(this);\n      if (this.groupCtx.prevY.length === 1 && /**\n       * @param {number} val\n       */\n      this.groupCtx.prevY[0].every((val) => isNaN(val))) {\n        this.groupCtx.prevY[0] = this.groupCtx.prevY[0].map(() => zeroH);\n        this.groupCtx.prevYF[0] = this.groupCtx.prevYF[0].map(() => 0);\n      }\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const commonPathOpts = {\n          indexes: { i, j, realIndex, translationsIndex, bc },\n          strokeWidth,\n          x,\n          y,\n          elSeries,\n          columnGroupIndex,\n          seriesGroup: w.labelData.seriesGroups[groupIndex]\n        };\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        if (this.isHorizontal) {\n          paths = this.drawStackedBarPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            zeroW,\n            barHeight,\n            yDivision\n          }));\n          barWidth = this.series[i][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawStackedColumnPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i][j] / this.yRatio[translationsIndex];\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        xArrValues.push(x);\n        yArrValues.push(y);\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        let classes = \"\";\n        const flipClass = w.globals.isBarHorizontal ? \"apexcharts-flip-x\" : \"apexcharts-flip-y\";\n        if (this.barHelpers.arrBorderRadius[realIndex][j] === \"bottom\" && w.seriesData.series[realIndex][j] > 0 || this.barHelpers.arrBorderRadius[realIndex][j] === \"top\" && w.seriesData.series[realIndex][j] < 0) {\n          classes = flipClass;\n        }\n        elSeries = this.renderSeries(__spreadProps(__spreadValues({\n          realIndex,\n          pathFill: pathFill.color\n        }, pathFill.useRangeColor ? { lineFill: pathFill.color } : {}), {\n          j,\n          i,\n          columnGroupIndex,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          barHeight,\n          barWidth,\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          type: \"bar\",\n          visibleSeries: columnGroupIndex,\n          classes\n        }));\n      }\n      w.globals.seriesXvalues[realIndex] = xArrValues;\n      w.globals.seriesYvalues[realIndex] = yArrValues;\n      this.groupCtx.prevY.push(this.groupCtx.yArrj);\n      this.groupCtx.prevYF.push(this.groupCtx.yArrjF);\n      this.groupCtx.prevYVal.push(this.groupCtx.yArrjVal);\n      this.groupCtx.prevX.push(this.groupCtx.xArrj);\n      this.groupCtx.prevXF.push(this.groupCtx.xArrjF);\n      this.groupCtx.prevXVal.push(this.groupCtx.xArrjVal);\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number | undefined} xDivision\n   * @param {number | undefined} yDivision\n   * @param {number | undefined} zeroH\n   * @param {number | undefined} zeroW\n   * @param {number} translationsIndex\n   */\n  initialPositions(x, y, xDivision, yDivision, zeroH, zeroW, translationsIndex) {\n    const w = this.w;\n    let barHeight, barWidth;\n    if (this.isHorizontal) {\n      yDivision = w.layout.gridHeight / w.globals.dataPoints;\n      const userBarHeight = w.config.plotOptions.bar.barHeight;\n      if (String(userBarHeight).indexOf(\"%\") === -1) {\n        barHeight = parseInt(userBarHeight, 10);\n      } else {\n        barHeight = yDivision * parseInt(userBarHeight, 10) / 100;\n      }\n      zeroW = w.globals.padHorizontal + (this.isReversed ? w.layout.gridWidth - this.baseLineInvertedY : this.baseLineInvertedY);\n      y = (yDivision - barHeight) / 2;\n    } else {\n      xDivision = w.layout.gridWidth / w.globals.dataPoints;\n      barWidth = xDivision;\n      const userColumnWidth = w.config.plotOptions.bar.columnWidth;\n      if (w.axisFlags.isXNumeric && w.globals.dataPoints > 1) {\n        xDivision = w.globals.minXDiff / this.xRatio;\n        barWidth = xDivision * parseInt(this.barOptions.columnWidth, 10) / 100;\n      } else if (String(userColumnWidth).indexOf(\"%\") === -1) {\n        barWidth = parseInt(userColumnWidth, 10);\n      } else {\n        barWidth *= parseInt(userColumnWidth, 10) / 100;\n      }\n      if (this.isReversed) {\n        zeroH = this.baseLineY[translationsIndex];\n      } else {\n        zeroH = w.layout.gridHeight - this.baseLineY[translationsIndex];\n      }\n      x = w.globals.padHorizontal + (xDivision - barWidth) / 2;\n    }\n    const subDivisions = w.globals.barGroups.length || 1;\n    return {\n      x,\n      y,\n      yDivision,\n      xDivision,\n      barHeight: (barHeight != null ? barHeight : 0) / subDivisions,\n      barWidth: (barWidth != null ? barWidth : 0) / subDivisions,\n      zeroH,\n      zeroW\n    };\n  }\n  /** @param {{indexes: any, barHeight: any, strokeWidth: any, zeroW: any, x: any, y: any, columnGroupIndex: any, seriesGroup: any, yDivision: any, elSeries: any}} opts */\n  drawStackedBarPaths({\n    indexes,\n    barHeight,\n    strokeWidth,\n    zeroW,\n    x,\n    y,\n    columnGroupIndex,\n    seriesGroup,\n    yDivision,\n    elSeries\n  }) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const barYPosition = y + columnGroupIndex * barHeight;\n    let barXPosition;\n    const i = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    let prevBarW = 0;\n    for (let k = 0; k < this.groupCtx.prevXF.length; k++) {\n      prevBarW = prevBarW + this.groupCtx.prevXF[k][j];\n    }\n    let gsi = i;\n    if (\n      /** @type {Record<string,any>} */\n      w.config.series[realIndex].name\n    ) {\n      gsi = seriesGroup.indexOf(\n        /** @type {Record<string,any>} */\n        w.config.series[realIndex].name\n      );\n    }\n    if (gsi > 0) {\n      let bXP = zeroW;\n      if (this.groupCtx.prevXVal[gsi - 1][j] < 0) {\n        bXP = /** @type {any} */\n        ((_a = this.series[i]) == null ? void 0 : _a[j]) >= 0 ? this.groupCtx.prevX[gsi - 1][j] + prevBarW - (this.isReversed ? prevBarW : 0) * 2 : this.groupCtx.prevX[gsi - 1][j];\n      } else if (this.groupCtx.prevXVal[gsi - 1][j] >= 0) {\n        bXP = /** @type {any} */\n        ((_b = this.series[i]) == null ? void 0 : _b[j]) >= 0 ? this.groupCtx.prevX[gsi - 1][j] : this.groupCtx.prevX[gsi - 1][j] - prevBarW + (this.isReversed ? prevBarW : 0) * 2;\n      }\n      barXPosition = bXP;\n    } else {\n      barXPosition = zeroW;\n    }\n    if (\n      /** @type {any} */\n      ((_c = this.series[i]) == null ? void 0 : _c[j]) === null\n    ) {\n      x = barXPosition;\n    } else {\n      x = barXPosition + /** @type {any} */\n      ((_d = this.series[i]) == null ? void 0 : _d[j]) / this.invertedYRatio - (this.isReversed ? (\n        /** @type {any} */\n        ((_e = this.series[i]) == null ? void 0 : _e[j]) / this.invertedYRatio\n      ) : 0) * 2;\n    }\n    const paths = this.barHelpers.getBarpaths({\n      barYPosition,\n      barHeight,\n      x1: barXPosition,\n      x2: x,\n      strokeWidth,\n      isReversed: this.isReversed,\n      series: this.series,\n      realIndex: indexes.realIndex,\n      seriesGroup,\n      i,\n      j,\n      w\n    });\n    this.barHelpers.barBackground({\n      j,\n      i,\n      y1: barYPosition,\n      y2: barHeight,\n      elSeries\n    });\n    y = y + yDivision;\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        i,\n        j,\n        translationsIndex\n      ),\n      barXPosition,\n      barYPosition,\n      x,\n      y\n    };\n  }\n  /** @param {{indexes: any, x: any, y: any, xDivision: any, barWidth: any, zeroH: any, columnGroupIndex: any, seriesGroup: any, elSeries: any}} opts */\n  drawStackedColumnPaths({\n    indexes,\n    x,\n    y,\n    xDivision,\n    barWidth,\n    zeroH,\n    columnGroupIndex,\n    seriesGroup,\n    elSeries\n  }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const w = this.w;\n    const i = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    if (w.axisFlags.isXNumeric) {\n      let seriesVal = w.seriesData.seriesX[realIndex][j];\n      if (!seriesVal) seriesVal = 0;\n      x = (seriesVal - w.globals.minX) / this.xRatio - barWidth / 2 * w.globals.barGroups.length;\n    }\n    const barXPosition = x + columnGroupIndex * barWidth;\n    let barYPosition;\n    let prevBarH = 0;\n    for (let k = 0; k < this.groupCtx.prevYF.length; k++) {\n      prevBarH = prevBarH + (!isNaN(this.groupCtx.prevYF[k][j]) ? this.groupCtx.prevYF[k][j] : 0);\n    }\n    let gsi = i;\n    if (seriesGroup) {\n      gsi = seriesGroup.indexOf(w.seriesData.seriesNames[realIndex]);\n    }\n    if (gsi > 0 && !w.axisFlags.isXNumeric || gsi > 0 && w.axisFlags.isXNumeric && w.seriesData.seriesX[realIndex - 1][j] === w.seriesData.seriesX[realIndex][j]) {\n      let bYP;\n      let prevYValue;\n      const p = Math.min(this.yRatio.length + 1, realIndex + 1);\n      if (this.groupCtx.prevY[gsi - 1] !== void 0 && this.groupCtx.prevY[gsi - 1].length) {\n        for (let ii = 1; ii < p; ii++) {\n          if (!isNaN((_a = this.groupCtx.prevY[gsi - ii]) == null ? void 0 : _a[j])) {\n            prevYValue = this.groupCtx.prevY[gsi - ii][j];\n            break;\n          }\n        }\n      }\n      for (let ii = 1; ii < p; ii++) {\n        if (((_b = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _b[j]) < 0) {\n          bYP = /** @type {any} */\n          ((_c = this.series[i]) == null ? void 0 : _c[j]) >= 0 ? prevYValue - prevBarH + (this.isReversed ? prevBarH : 0) * 2 : prevYValue;\n          break;\n        } else if (((_d = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _d[j]) >= 0) {\n          bYP = /** @type {any} */\n          ((_e = this.series[i]) == null ? void 0 : _e[j]) >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2;\n          break;\n        }\n      }\n      if (typeof bYP === \"undefined\") bYP = w.layout.gridHeight;\n      if (\n        /**\n         * @param {number} val\n         */\n        ((_f = this.groupCtx.prevYF[0]) == null ? void 0 : _f.every((val) => val === 0)) && this.groupCtx.prevYF.slice(1, gsi).every(\n          (arr) => arr.every((val) => isNaN(val))\n        )\n      ) {\n        barYPosition = zeroH;\n      } else {\n        barYPosition = bYP;\n      }\n    } else {\n      barYPosition = zeroH;\n    }\n    if (\n      /** @type {any} */\n      (_g = this.series[i]) == null ? void 0 : _g[j]\n    ) {\n      y = barYPosition - /** @type {any} */\n      ((_h = this.series[i]) == null ? void 0 : _h[j]) / this.yRatio[translationsIndex] + (this.isReversed ? (\n        /** @type {any} */\n        ((_i = this.series[i]) == null ? void 0 : _i[j]) / this.yRatio[translationsIndex]\n      ) : 0) * 2;\n    } else {\n      y = barYPosition;\n    }\n    const paths = this.barHelpers.getColumnPaths({\n      barXPosition,\n      barWidth,\n      y1: barYPosition,\n      y2: y,\n      yRatio: this.yRatio[translationsIndex],\n      strokeWidth: this.strokeWidth,\n      isReversed: this.isReversed,\n      series: this.series,\n      seriesGroup,\n      realIndex: indexes.realIndex,\n      i,\n      j,\n      w\n    });\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i,\n      x1: barXPosition,\n      x2: barWidth,\n      elSeries\n    });\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        0\n      ),\n      barXPosition,\n      x: w.axisFlags.isXNumeric ? x : x + xDivision,\n      y\n    };\n  }\n}\nfunction buildJitterGroups({\n  w,\n  points,\n  seedA,\n  seedB,\n  center,\n  halfExtent,\n  alongFn,\n  isHorizontal,\n  options: options2,\n  clampAt\n}) {\n  const opts = options2;\n  if (!opts || opts.show === false) return [];\n  if (!points || !points.length) return [];\n  const maxPoints = opts.maxPoints || 3e3;\n  const stride = points.length > maxPoints ? Math.ceil(points.length / maxPoints) : 1;\n  const r = opts.size != null ? opts.size : 2.5;\n  const jitterFrac = opts.jitter != null ? opts.jitter : 0.5;\n  const jitterPx = halfExtent * jitterFrac;\n  const constrain = opts.constrainToViolin !== false && typeof clampAt === \"function\";\n  const isSquare = opts.shape === \"square\";\n  const scale = opts.colorScale;\n  const useScale = scale && Array.isArray(scale.colors) && scale.colors.length > 0;\n  const steps = useScale ? Math.max(2, scale.steps || 24) : 1;\n  const sMin = useScale && scale.min != null ? scale.min : w.globals.minY;\n  const sMax = useScale && scale.max != null ? scale.max : w.globals.maxY;\n  const span = sMax - sMin || 1;\n  const buckets = useScale ? new Array(steps).fill(\"\") : [\"\"];\n  for (let k = 0; k < points.length; k += stride) {\n    const v = points[k];\n    const a = alongFn(v);\n    let off = (hash01(seedA * 7919 + seedB * 100003 + k) - 0.5) * 2 * jitterPx;\n    if (constrain) {\n      const cap = (\n        /** @type {(v:number)=>number} */\n        clampAt(v)\n      );\n      if (off > cap) off = cap;\n      if (off < -cap) off = -cap;\n    }\n    const px = isHorizontal ? a : center + off;\n    const py = isHorizontal ? center + off : a;\n    const sub = isSquare ? squareSubPath(px, py, r) : circleSubPath(px, py, r);\n    if (useScale) {\n      let t = (v - sMin) / span;\n      if (t < 0) t = 0;\n      if (t > 1) t = 1;\n      buckets[Math.round(t * (steps - 1))] += sub;\n    } else {\n      buckets[0] += sub;\n    }\n  }\n  if (!useScale) {\n    return buckets[0] ? [{ fill: null, d: buckets[0] }] : [];\n  }\n  const groups = [];\n  for (let b = 0; b < steps; b++) {\n    if (!buckets[b]) continue;\n    groups.push({\n      fill: rampColorAt(scale.colors, b / (steps - 1)),\n      d: buckets[b]\n    });\n  }\n  return groups;\n}\nfunction renderJitter({\n  graphics,\n  w,\n  elSeries,\n  pointsByCat,\n  options: options2,\n  distributed,\n  realIndex,\n  wrapClass,\n  pointClass\n}) {\n  if (!options2 || options2.show === false || !pointsByCat.length) return;\n  const pOpacity = options2.opacity != null ? options2.opacity : 0.9;\n  const strokeColor = options2.strokeColor != null ? options2.strokeColor : \"#fff\";\n  const strokeW = options2.strokeWidth != null ? options2.strokeWidth : 1;\n  const willAnimateIn = w.config.chart.animations.enabled && !w.globals.resized && !w.globals.dataChanged;\n  const elPointsWrap = graphics.group({\n    class: willAnimateIn ? `${wrapClass} apexcharts-element-hidden` : wrapClass\n  });\n  if (willAnimateIn) {\n    w.globals.delayedElements.push({ el: elPointsWrap.node });\n  }\n  pointsByCat.forEach(({ groups, j }) => {\n    const catColor = distributed ? w.globals.colors[j] : w.globals.colors[realIndex];\n    const fc = options2.fillColor;\n    const defaultFill = fc === \"series\" ? catColor : fc === \"series-dark\" ? darkenColor(catColor, 0.45) : fc || darkenColor(catColor, 0.45);\n    groups.forEach((g) => {\n      const elPoints = graphics.drawPath({\n        d: g.d,\n        fill: g.fill != null ? g.fill : defaultFill,\n        stroke: strokeW > 0 ? strokeColor : \"none\",\n        strokeWidth: strokeW,\n        fillOpacity: pOpacity,\n        classes: pointClass\n      });\n      elPoints.attr(\"data:realIndex\", realIndex);\n      elPoints.attr(\"j\", j);\n      elPoints.attr(\"clip-path\", `url(#gridRectBarMask${w.globals.cuid})`);\n      elPoints.node.style.pointerEvents = \"none\";\n      elPointsWrap.add(elPoints);\n    });\n  });\n  elSeries.add(elPointsWrap);\n}\nfunction darkenColor(color, amount) {\n  const rgb = Utils$1.parseHex(color);\n  if (!rgb) return color;\n  const f = Math.max(0, 1 - amount);\n  return `rgb(${Math.round(rgb[0] * f)},${Math.round(rgb[1] * f)},${Math.round(rgb[2] * f)})`;\n}\nfunction rampColorAt(colors, t) {\n  if (!colors.length) return \"#000\";\n  if (colors.length === 1) return colors[0];\n  const x = Math.max(0, Math.min(1, t)) * (colors.length - 1);\n  const i = Math.floor(x);\n  const frac = x - i;\n  const c0 = Utils$1.parseHex(colors[i]) || [0, 0, 0];\n  const c1 = Utils$1.parseHex(colors[Math.min(i + 1, colors.length - 1)]) || c0;\n  const mix = (a, b) => Math.round(a + (b - a) * frac);\n  return `rgb(${mix(c0[0], c1[0])},${mix(c0[1], c1[1])},${mix(c0[2], c1[2])})`;\n}\nfunction hash01(n) {\n  let h = (n ^ 2654435769) >>> 0;\n  h = Math.imul(h ^ h >>> 16, 73244475);\n  h = Math.imul(h ^ h >>> 16, 73244475);\n  return ((h ^ h >>> 16) >>> 0) / 4294967296;\n}\nfunction circleSubPath(px, py, r) {\n  return `M ${px - r} ${py} a ${r} ${r} 0 1 0 ${2 * r} 0 a ${r} ${r} 0 1 0 ${-2 * r} 0 `;\n}\nfunction squareSubPath(px, py, r) {\n  return `M ${px - r} ${py - r} h ${2 * r} v ${2 * r} h ${-2 * r} z `;\n}\nclass BoxCandleStick extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} seriesIndex\n   */\n  // @ts-ignore -- BoxCandleStick.draw has an extra ctype param compared to Bar.draw\n  draw(series, ctype, seriesIndex) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w.globals.comboCharts ? ctype : w.config.chart.type;\n    const fill = new Fill(this.w);\n    this.candlestickOptions = this.w.config.plotOptions.candlestick;\n    this.boxOptions = this.w.config.plotOptions.boxPlot;\n    this.isHorizontal = w.config.plotOptions.bar.horizontal;\n    this.isOHLC = this.candlestickOptions && this.candlestickOptions.type === \"ohlc\";\n    this.coreUtils = new CoreUtils(this.w);\n    series = this.coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = this.coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: `apexcharts-${type}-series apexcharts-plot-series`\n    });\n    for (let i = 0; i < series.length; i++) {\n      this.isBoxPlot = w.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n      w.config.series[i].type === \"boxPlot\";\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        barHeight,\n        yDivision,\n        // yDivision is the GRIDHEIGHT divided by number of datapoints (bars)\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        barWidth,\n        xDivision,\n        // xDivision is the GRIDWIDTH divided by number of datapoints (columns)\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      y = initY;\n      x = initX;\n      xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-bar-goals-markers\"\n      });\n      const boxPointsOpts = this.isBoxPlot ? this.boxOptions.points : null;\n      const pointsByCat = [];\n      const gridW = w.layout.gridWidth;\n      const cullBuffer = barWidth != null ? barWidth : 0;\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i,\n            j,\n            realIndex,\n            translationsIndex\n          },\n          x,\n          y,\n          strokeWidth,\n          elSeries\n        };\n        if (this.isHorizontal) {\n          paths = this.drawHorizontalBoxPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            yDivision,\n            barHeight,\n            zeroW\n          }));\n        } else {\n          paths = this.drawVerticalBoxPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH,\n            cullBounds: { lo: -cullBuffer, hi: gridW + cullBuffer }\n          }));\n        }\n        y = paths.y;\n        x = paths.x;\n        if (j > 0) {\n          xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n        }\n        yArrj.push(y);\n        if (paths.culled) {\n          continue;\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition: paths.barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        paths.pathTo.forEach(\n          (pathTo, pi) => {\n            const lineFill = !this.isBoxPlot && this.candlestickOptions.wick.useFillColor ? paths.color[pi] : w.globals.stroke.colors[i];\n            const pathFill = fill.fillPath({\n              seriesNumber: realIndex,\n              dataPointIndex: j,\n              color: paths.color[pi],\n              value: series[i][j]\n            });\n            this.renderSeries({\n              realIndex,\n              pathFill,\n              lineFill,\n              j,\n              i,\n              pathFrom: paths.pathFrom,\n              pathTo,\n              strokeWidth,\n              elSeries,\n              x,\n              y,\n              series,\n              columnGroupIndex,\n              barHeight,\n              barWidth,\n              elDataLabelsWrap,\n              elGoalsMarkers,\n              visibleSeries: this.visibleI,\n              type: w.config.chart.type\n            });\n          }\n        );\n        if (boxPointsOpts && boxPointsOpts.show !== false) {\n          const pts = (_a = w.candleData.seriesBoxPoints[realIndex]) == null ? void 0 : _a[j];\n          if (pts && pts.length) {\n            const logVal = (v) => (\n              /** @type {any} */\n              this.coreUtils.getLogValAtSeriesIndex(\n                v,\n                realIndex\n              )\n            );\n            let center, halfExtent, alongFn;\n            if (this.isHorizontal) {\n              const yRatio = this.invertedYRatio;\n              const bh = barHeight != null ? barHeight : 0;\n              const z = zeroW != null ? zeroW : 0;\n              center = paths.barYPosition + bh / 2;\n              halfExtent = bh / 2;\n              alongFn = (v) => z + logVal(v) / yRatio;\n            } else {\n              const yRatio = this.yRatio[translationsIndex];\n              const bw = barWidth != null ? barWidth : 0;\n              const z = zeroH != null ? zeroH : 0;\n              center = paths.barXPosition + bw / 2;\n              halfExtent = bw / 2;\n              alongFn = (v) => z - logVal(v) / yRatio;\n            }\n            const groups = buildJitterGroups({\n              w,\n              points: pts,\n              seedA: realIndex,\n              seedB: j,\n              center,\n              halfExtent,\n              alongFn,\n              isHorizontal: this.isHorizontal,\n              options: boxPointsOpts\n            });\n            if (groups.length) pointsByCat.push({ groups, j });\n          }\n        }\n      }\n      if (boxPointsOpts) {\n        renderJitter({\n          graphics,\n          w,\n          elSeries,\n          pointsByCat,\n          options: boxPointsOpts,\n          distributed: w.config.plotOptions.bar.distributed,\n          realIndex,\n          wrapClass: \"apexcharts-boxPlot-points-wrap\",\n          pointClass: \"apexcharts-boxPlot-points\"\n        });\n      }\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, zeroH: any, strokeWidth: any, cullBounds?: {lo: number, hi: number}|null}} opts */\n  drawVerticalBoxPaths({\n    indexes,\n    x,\n    xDivision,\n    barWidth,\n    zeroH,\n    strokeWidth,\n    cullBounds = null\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const i = indexes.i;\n    const j = indexes.j;\n    const { colors: candleColors } = w.config.plotOptions.candlestick;\n    const { colors: boxColors } = this.boxOptions;\n    const realIndex = indexes.realIndex;\n    const getColor = (color2) => Array.isArray(color2) ? color2[realIndex] : color2;\n    const colorPos = getColor(candleColors.upward);\n    const colorNeg = getColor(candleColors.downward);\n    const yRatio = this.yRatio[indexes.translationsIndex];\n    const ohlc = this.getOHLCValue(realIndex, j);\n    let l1 = zeroH;\n    let l2 = zeroH;\n    let color = ohlc.o < ohlc.c ? [colorPos] : [colorNeg];\n    if (this.isBoxPlot) {\n      color = [getColor(boxColors.lower), getColor(boxColors.upper)];\n    }\n    let y1 = Math.min(ohlc.o, ohlc.c);\n    let y2 = Math.max(ohlc.o, ohlc.c);\n    let m = ohlc.m;\n    if (w.axisFlags.isXNumeric) {\n      x = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      y1 = zeroH;\n      y2 = zeroH;\n    } else {\n      y1 = zeroH - y1 / yRatio;\n      y2 = zeroH - y2 / yRatio;\n      l1 = zeroH - ohlc.h / yRatio;\n      l2 = zeroH - ohlc.l / yRatio;\n      m = zeroH - ohlc.m / yRatio;\n    }\n    if (cullBounds && (barXPosition + barWidth < cullBounds.lo || barXPosition > cullBounds.hi)) {\n      return {\n        pathTo: null,\n        pathFrom: null,\n        x: w.axisFlags.isXNumeric ? x : x + xDivision,\n        y: y2,\n        barXPosition,\n        color,\n        culled: true\n      };\n    }\n    let pathTo;\n    if (this.isOHLC) {\n      const centerX = barXPosition + barWidth / 2;\n      const openY = zeroH - ohlc.o / yRatio;\n      const closeY = zeroH - ohlc.c / yRatio;\n      pathTo = [\n        graphics.move(centerX, l1) + graphics.line(centerX, l2) + graphics.move(centerX, openY) + graphics.line(barXPosition, openY) + graphics.move(centerX, closeY) + graphics.line(barXPosition + barWidth, closeY)\n      ];\n    } else if (this.isBoxPlot) {\n      pathTo = [\n        graphics.move(barXPosition, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 4, l1) + graphics.line(barXPosition + barWidth - barWidth / 4, l1) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition, m) + graphics.line(barXPosition, y1 + strokeWidth / 2),\n        graphics.move(barXPosition, m) + graphics.line(barXPosition + barWidth, m) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth - barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 4, l2) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition, y2) + graphics.line(barXPosition, m) + \"z\"\n      ];\n    } else {\n      pathTo = [\n        graphics.move(barXPosition, y2) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth / 2, l1) + graphics.line(barXPosition + barWidth / 2, y2) + graphics.line(barXPosition + barWidth, y2) + graphics.line(barXPosition + barWidth, y1) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition + barWidth / 2, l2) + graphics.line(barXPosition + barWidth / 2, y1) + graphics.line(barXPosition, y1) + graphics.line(barXPosition, y2 - strokeWidth / 2)\n      ];\n    }\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    } else {\n      pathFrom = graphics.move(barXPosition + barWidth / 2, y1) + graphics.move(barXPosition, y1);\n    }\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x,\n      y: y2,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        indexes.translationsIndex\n      ),\n      barXPosition,\n      color\n    };\n  }\n  /** @param {{indexes: any, y: any, yDivision: any, barHeight: any, zeroW: any, strokeWidth: any}} opts */\n  drawHorizontalBoxPaths({\n    indexes,\n    y,\n    yDivision,\n    barHeight,\n    zeroW,\n    strokeWidth\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const i = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const { colors: candleColors } = w.config.plotOptions.candlestick;\n    const { colors: boxColors } = this.boxOptions;\n    const getColor = (color2) => Array.isArray(color2) ? color2[realIndex] : color2;\n    const yRatio = this.invertedYRatio;\n    const ohlc = this.getOHLCValue(realIndex, j);\n    let color = ohlc.o < ohlc.c ? [getColor(candleColors.upward)] : [getColor(candleColors.downward)];\n    if (this.isBoxPlot) {\n      color = [getColor(boxColors.lower), getColor(boxColors.upper)];\n    }\n    let l1 = zeroW;\n    let l2 = zeroW;\n    let x1 = Math.min(ohlc.o, ohlc.c);\n    let x2 = Math.max(ohlc.o, ohlc.c);\n    let m = ohlc.m;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      x1 = zeroW;\n      x2 = zeroW;\n    } else {\n      x1 = zeroW + x1 / yRatio;\n      x2 = zeroW + x2 / yRatio;\n      l1 = zeroW + ohlc.h / yRatio;\n      l2 = zeroW + ohlc.l / yRatio;\n      m = zeroW + ohlc.m / yRatio;\n    }\n    const pathTo = [\n      graphics.move(x1, barYPosition) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(l1, barYPosition + barHeight / 2 - barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2 + barHeight / 4) + graphics.line(l1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight / 2) + graphics.line(x1, barYPosition + barHeight) + graphics.line(m, barYPosition + barHeight) + graphics.line(m, barYPosition) + graphics.line(x1 + strokeWidth / 2, barYPosition),\n      graphics.move(m, barYPosition) + graphics.line(m, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(l2, barYPosition + barHeight - barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 4) + graphics.line(l2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition + barHeight / 2) + graphics.line(x2, barYPosition) + graphics.line(m, barYPosition) + \"z\"\n    ];\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    } else {\n      pathFrom = graphics.move(x1, barYPosition + barHeight / 2) + graphics.move(x1, barYPosition);\n    }\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: x2,\n      y,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        i,\n        j,\n        0\n      ),\n      barYPosition,\n      color\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getOHLCValue(i, j) {\n    const w = this.w;\n    const coreUtils = this.coreUtils;\n    const getCandleVal = (arr) => arr[i] && arr[i][j] != null ? (\n      /** @type {any} */\n      coreUtils.getLogValAtSeriesIndex(arr[i][j], i)\n    ) : 0;\n    const h = getCandleVal(w.candleData.seriesCandleH);\n    const o = getCandleVal(w.candleData.seriesCandleO);\n    const m = getCandleVal(w.candleData.seriesCandleM);\n    const c = getCandleVal(w.candleData.seriesCandleC);\n    const l = getCandleVal(w.candleData.seriesCandleL);\n    return {\n      o: this.isBoxPlot ? h : o,\n      h: this.isBoxPlot ? o : h,\n      m,\n      l: this.isBoxPlot ? c : l,\n      c: this.isBoxPlot ? l : c\n    };\n  }\n}\nconst tangents = (points) => {\n  const m = finiteDifferences(points);\n  const n = points.length - 1;\n  const ε = 1e-6;\n  const tgts = [];\n  let a, b, d, s;\n  for (let i = 0; i < n; i++) {\n    d = slope(points[i], points[i + 1]);\n    if (Math.abs(d) < ε) {\n      m[i] = m[i + 1] = 0;\n    } else {\n      a = m[i] / d;\n      b = m[i + 1] / d;\n      s = a * a + b * b;\n      if (s > 9) {\n        s = d * 3 / Math.sqrt(s);\n        m[i] = s * a;\n        m[i + 1] = s * b;\n      }\n    }\n  }\n  for (let i = 0; i <= n; i++) {\n    s = (points[Math.min(n, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n    tgts.push([s || 0, m[i] * s || 0]);\n  }\n  return tgts;\n};\nconst svgPath = (points) => {\n  let p = \"\";\n  for (let i = 0; i < points.length; i++) {\n    const point = points[i];\n    const n = point.length;\n    if (n > 4) {\n      p += `C${point[0]}, ${point[1]}`;\n      p += `, ${point[2]}, ${point[3]}`;\n      p += `, ${point[4]}, ${point[5]}`;\n    } else if (n > 2) {\n      p += `S${point[0]}, ${point[1]}`;\n      p += `, ${point[2]}, ${point[3]}`;\n    }\n  }\n  return p;\n};\nconst spline = {\n  /**\n   * Convert 'points' to bezier\n   * @param {any[]} points\n   * @returns {any[]}\n   */\n  points(points) {\n    const tgts = tangents(points);\n    const p = points[1];\n    const p0 = points[0];\n    const pts = [];\n    const t = tgts[1];\n    const t0 = tgts[0];\n    pts.push(p0, [\n      p0[0] + t0[0],\n      p0[1] + t0[1],\n      p[0] - t[0],\n      p[1] - t[1],\n      p[0],\n      p[1]\n    ]);\n    for (let i = 2, n = tgts.length; i < n; i++) {\n      const p2 = points[i];\n      const t2 = tgts[i];\n      pts.push([p2[0] - t2[0], p2[1] - t2[1], p2[0], p2[1]]);\n    }\n    return pts;\n  },\n  /**\n   * Slice out a segment of 'points'\n   * @param {any[]} points\n   * @param {Number} start\n   * @param {Number} end\n   * @returns {any[]}\n   */\n  slice(points, start, end) {\n    const pts = points.slice(start, end);\n    if (start) {\n      if (end - start > 1 && pts[1].length < 6) {\n        const n = pts[0].length;\n        pts[1] = [\n          pts[0][n - 2] * 2 - pts[0][n - 4],\n          pts[0][n - 1] * 2 - pts[0][n - 3]\n        ].concat(pts[1]);\n      }\n      pts[0] = pts[0].slice(-2);\n    }\n    return pts;\n  }\n};\nfunction slope(p0, p1) {\n  return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n}\nfunction finiteDifferences(points) {\n  const m = [];\n  let p0 = points[0];\n  let p1 = points[1];\n  let d = m[0] = slope(p0, p1);\n  let i = 1;\n  for (let n = points.length - 1; i < n; i++) {\n    p0 = p1;\n    p1 = points[i + 1];\n    m[i] = (d + (d = slope(p0, p1))) * 0.5;\n  }\n  m[i] = d;\n  return m;\n}\nclass Violin extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} [seriesIndex]\n   */\n  // @ts-ignore -- Violin.draw has extra ctype param compared to Bar.draw\n  draw(series, ctype, seriesIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    this.violinOptions = w.config.plotOptions.violin;\n    this.pointsOptions = this.violinOptions.points;\n    this.bandwidthScale = this.violinOptions.bandwidthScale || 1;\n    this.normalize = this.violinOptions.normalize || \"individual\";\n    this.distributed = w.config.plotOptions.bar.distributed;\n    this.isHorizontal = w.config.plotOptions.bar.horizontal;\n    this.coreUtils = new CoreUtils(this.w);\n    series = this.coreUtils.getLogSeries(series);\n    this.series = series;\n    this.yRatio = this.coreUtils.getLogYRatios(this.yRatio);\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-violin-series apexcharts-plot-series\"\n    });\n    for (let i = 0; i < series.length; i++) {\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: \"apexcharts-series\",\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        barHeight,\n        yDivision,\n        zeroW,\n        x: initX,\n        barWidth,\n        xDivision,\n        zeroH\n      } = initPositions;\n      y = initY;\n      x = initX;\n      xArrj.push(x + (barWidth != null ? barWidth : 0) / 2);\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      this.seriesMaxWeight = 0;\n      if (this.normalize === \"group\") {\n        const dens = w.violinData.seriesViolinDensity[realIndex] || [];\n        dens.forEach((d) => {\n          if (d && d.maxWeight > this.seriesMaxWeight) {\n            this.seriesMaxWeight = d.maxWeight;\n          }\n        });\n      }\n      const pointsByViolin = [];\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const paths = this.isHorizontal ? this.drawHorizontalViolin({\n          indexes: { i, j, realIndex, translationsIndex },\n          y,\n          yDivision,\n          barHeight,\n          zeroW\n        }) : this.drawVerticalViolin({\n          indexes: { i, j, realIndex, translationsIndex },\n          x,\n          xDivision,\n          barWidth,\n          zeroH\n        });\n        x = paths.x;\n        y = paths.y;\n        if (j > 0) {\n          xArrj.push(paths.center);\n        }\n        yArrj.push(paths.alongRepresentative);\n        const pointGroups = this.buildPointsSubPath({\n          realIndex,\n          j,\n          center: paths.center,\n          halfExtent: paths.halfExtent,\n          alongFn: paths.alongFn,\n          density: paths.density,\n          maxWeight: paths.maxWeight\n        });\n        if (pointGroups.length) pointsByViolin.push({ groups: pointGroups, j });\n        const pathFill = fill.fillPath({\n          // distributed → color per category (data point) instead of per series\n          seriesNumber: this.distributed ? j : realIndex,\n          dataPointIndex: j,\n          color: this.distributed ? w.globals.colors[j] : void 0,\n          value: series[i][j]\n        });\n        this.renderSeries({\n          realIndex,\n          pathFill,\n          lineFill: w.globals.stroke.colors[realIndex],\n          j,\n          i,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          x,\n          y,\n          series,\n          columnGroupIndex,\n          barHeight,\n          barWidth,\n          elDataLabelsWrap,\n          visibleSeries: this.visibleI,\n          type: \"violin\"\n        });\n        const bodyEl = elSeries.node.querySelector(\n          `path.apexcharts-violin-area[j='${j}']`\n        );\n        if (bodyEl && isFinite(paths.alongRepresentative)) {\n          bodyEl.setAttribute(\n            this.isHorizontal ? \"cx\" : \"cy\",\n            `${paths.alongRepresentative}`\n          );\n        }\n      }\n      renderJitter({\n        graphics,\n        w,\n        elSeries,\n        pointsByCat: pointsByViolin,\n        options: this.pointsOptions,\n        distributed: this.distributed,\n        realIndex,\n        wrapClass: \"apexcharts-violin-points-wrap\",\n        pointClass: \"apexcharts-violin-points\"\n      });\n      w.globals.seriesXvalues[realIndex] = xArrj;\n      w.globals.seriesYvalues[realIndex] = yArrj;\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, zeroH: any}} opts */\n  drawVerticalViolin({ indexes, x, xDivision, barWidth, zeroH }) {\n    var _a;\n    const w = this.w;\n    const { realIndex, j, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    if (w.axisFlags.isXNumeric) {\n      x = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    const center = barXPosition + barWidth / 2;\n    const halfExtent = barWidth / 2;\n    const density = this.getDensity(realIndex, j);\n    const maxWeight = this.effectiveMaxWeight(density);\n    const alongFn = (v) => zeroH - this.logVal(v, realIndex) / yRatio;\n    const pathTo = this.buildBodyPath({\n      nodes: density.nodes,\n      center,\n      halfExtent,\n      maxWeight,\n      vertical: true,\n      alongFn,\n      collapsed: false\n    });\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = this.buildBodyPath({\n        nodes: density.nodes,\n        center,\n        halfExtent,\n        maxWeight,\n        vertical: true,\n        alongFn,\n        collapsed: true\n      });\n    }\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x,\n      y: zeroH,\n      center,\n      halfExtent,\n      alongFn,\n      density,\n      maxWeight,\n      alongRepresentative: alongFn((_a = this.series[indexes.i][j]) != null ? _a : 0)\n    };\n  }\n  /** @param {{indexes: any, y: any, yDivision: any, barHeight: any, zeroW: any}} opts */\n  drawHorizontalViolin({ indexes, y, yDivision, barHeight, zeroW }) {\n    var _a;\n    const w = this.w;\n    const { realIndex, j } = indexes;\n    const yRatio = this.invertedYRatio;\n    if (w.axisFlags.isXNumeric) {\n      y = (w.seriesData.seriesX[realIndex][j] - w.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    const center = barYPosition + barHeight / 2;\n    const halfExtent = barHeight / 2;\n    const density = this.getDensity(realIndex, j);\n    const maxWeight = this.effectiveMaxWeight(density);\n    const alongFn = (v) => zeroW + this.logVal(v, realIndex) / yRatio;\n    const pathTo = this.buildBodyPath({\n      nodes: density.nodes,\n      center,\n      halfExtent,\n      maxWeight,\n      vertical: false,\n      alongFn,\n      collapsed: false\n    });\n    let pathFrom;\n    if (w.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    } else {\n      pathFrom = this.buildBodyPath({\n        nodes: density.nodes,\n        center,\n        halfExtent,\n        maxWeight,\n        vertical: false,\n        alongFn,\n        collapsed: true\n      });\n    }\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo,\n      pathFrom,\n      x: zeroW,\n      y,\n      center,\n      halfExtent,\n      alongFn,\n      maxWeight,\n      density,\n      alongRepresentative: alongFn((_a = this.series[indexes.i][j]) != null ? _a : 0)\n    };\n  }\n  /**\n   * Read the parsed density for one violin and return sorted, de-duplicated\n   * nodes (strictly increasing value — a hard requirement for the spline).\n   * @param {number} realIndex\n   * @param {number} j\n   */\n  getDensity(realIndex, j) {\n    var _a;\n    const w = this.w;\n    const d = (_a = w.violinData.seriesViolinDensity[realIndex]) == null ? void 0 : _a[j];\n    if (!d || !d.values.length) {\n      return { nodes: [], maxWeight: 0 };\n    }\n    const order = d.values.map(\n      (_, k) => k\n    );\n    order.sort(\n      (a, b) => d.values[a] - d.values[b]\n    );\n    const nodes = [];\n    let prevV = null;\n    for (const k of order) {\n      const v = d.values[k];\n      if (prevV !== null && v === prevV) continue;\n      nodes.push({ v, w: d.weights[k] });\n      prevV = v;\n    }\n    return { nodes, maxWeight: d.maxWeight };\n  }\n  /**\n   * The peak weight used to scale a violin's width: its own ('individual') or\n   * the densest violin in the series ('group', preserving relative widths).\n   * @param {{maxWeight:number}} density\n   */\n  effectiveMaxWeight(density) {\n    return this.normalize === \"group\" && this.seriesMaxWeight > 0 ? this.seriesMaxWeight : density.maxWeight;\n  }\n  /**\n   * Build the closed, smooth violin outline. The value axis is the monotonic\n   * parameter for the spline (vertical → Y, horizontal → X); the spline is fed\n   * with that axis first and the control points swapped back to screen space.\n   *\n   * @param {{nodes:{v:number,w:number}[], center:number, halfExtent:number, maxWeight:number, vertical:boolean, alongFn:(v:number)=>number, collapsed:boolean}} opts\n   */\n  buildBodyPath({\n    nodes,\n    center,\n    halfExtent,\n    maxWeight,\n    vertical,\n    alongFn,\n    collapsed\n  }) {\n    const graphics = new Graphics(this.w);\n    if (nodes.length === 0) {\n      const a = alongFn(0);\n      return vertical ? graphics.move(center, a) + graphics.line(center, a) : graphics.move(a, center) + graphics.line(a, center);\n    }\n    const wpxOf = (weight) => {\n      if (collapsed || maxWeight <= 0) return 0;\n      const wp = weight / maxWeight * halfExtent * this.bandwidthScale;\n      return Math.min(halfExtent, Math.max(0, wp));\n    };\n    const rightPts = [];\n    const leftPts = [];\n    for (let k = 0; k < nodes.length; k++) {\n      const a = alongFn(nodes[k].v);\n      const wp = wpxOf(nodes[k].w);\n      if (vertical) {\n        rightPts.push([center + wp, a]);\n        leftPts.push([center - wp, a]);\n      } else {\n        rightPts.push([a, center + wp]);\n        leftPts.push([a, center - wp]);\n      }\n    }\n    leftPts.reverse();\n    return this.smoothSegment(rightPts, vertical, false) + this.smoothSegment(leftPts, vertical, true) + \"z\";\n  }\n  /**\n   * Emit one edge as a smooth (monotone-cubic) path segment, or a polyline\n   * when there are too few nodes for a spline.\n   *\n   * @param {[number,number][]} screenPts ordered screen points for this edge\n   * @param {boolean} monotonicIsY true when the value axis is vertical\n   * @param {boolean} continued false → start with M; true → start with L (joins the previous edge)\n   */\n  smoothSegment(screenPts, monotonicIsY, continued) {\n    const graphics = new Graphics(this.w);\n    const first = screenPts[0];\n    let d = continued ? graphics.line(first[0], first[1]) : graphics.move(first[0], first[1]);\n    const usePolyline = screenPts.length < 3 || !this.strictlyMonotonic(screenPts, monotonicIsY);\n    if (usePolyline) {\n      for (let k = 1; k < screenPts.length; k++) {\n        d += graphics.line(screenPts[k][0], screenPts[k][1]);\n      }\n      return d;\n    }\n    const input = screenPts.map(\n      ([px, py]) => monotonicIsY ? [py, px] : [px, py]\n    );\n    const bez = spline.points(input);\n    const out = monotonicIsY ? bez.map(swapPairs) : bez;\n    d += svgPath(out);\n    return d;\n  }\n  /**\n   * @param {[number,number][]} screenPts\n   * @param {boolean} monotonicIsY\n   */\n  strictlyMonotonic(screenPts, monotonicIsY) {\n    const axis = monotonicIsY ? 1 : 0;\n    for (let k = 1; k < screenPts.length; k++) {\n      if (screenPts[k][axis] === screenPts[k - 1][axis]) return false;\n    }\n    return true;\n  }\n  /**\n   * Build the jitter sub-paths for one violin, grouped for rendering. Returns\n   * `[]` when points are hidden or absent. Normally one group (single dot\n   * colour); with `points.colorScale` the dots are bucketed by value into shade\n   * groups, each carrying its ramp colour. Offsets are a deterministic index\n   * hash (SSR-safe); points beyond maxPoints are stride-thinned.\n   *\n   * @param {{realIndex:number, j:number, center:number, halfExtent:number, alongFn:(v:number)=>number, density:{nodes:{v:number,w:number}[], maxWeight:number}, maxWeight:number}} opts\n   * @returns {{fill:string|null, d:string}[]}\n   */\n  buildPointsSubPath({\n    realIndex,\n    j,\n    center,\n    halfExtent,\n    alongFn,\n    density,\n    maxWeight\n  }) {\n    var _a;\n    return buildJitterGroups({\n      w: this.w,\n      points: (_a = this.w.violinData.seriesViolinPoints[realIndex]) == null ? void 0 : _a[j],\n      seedA: realIndex,\n      seedB: j,\n      center,\n      halfExtent,\n      alongFn,\n      isHorizontal: this.isHorizontal,\n      options: this.pointsOptions,\n      // Violin clamps jitter to the density half-width at each value so dots\n      // stay inside the shape.\n      clampAt: (v) => this.halfWidthAtValue(v, density, halfExtent, maxWeight)\n    });\n  }\n  /**\n   * Density half-width (pixels) at a given value — used to keep jitter inside\n   * the violin. Linear interpolation between the two nearest density nodes.\n   * @param {number} value\n   * @param {{nodes:{v:number,w:number}[], maxWeight:number}} density\n   * @param {number} halfExtent\n   * @param {number} [maxWeightOverride] use the group max for 'group' normalize\n   */\n  halfWidthAtValue(value, density, halfExtent, maxWeightOverride) {\n    const { nodes } = density;\n    const maxWeight = maxWeightOverride != null ? maxWeightOverride : density.maxWeight;\n    if (!nodes.length || maxWeight <= 0) return 0;\n    const toPx = (weight) => Math.min(\n      halfExtent,\n      weight / maxWeight * halfExtent * this.bandwidthScale\n    );\n    if (value <= nodes[0].v) return toPx(nodes[0].w);\n    if (value >= nodes[nodes.length - 1].v)\n      return toPx(nodes[nodes.length - 1].w);\n    for (let k = 1; k < nodes.length; k++) {\n      if (value <= nodes[k].v) {\n        const a = nodes[k - 1];\n        const b = nodes[k];\n        const t = b.v === a.v ? 0 : (value - a.v) / (b.v - a.v);\n        return toPx(a.w + (b.w - a.w) * t);\n      }\n    }\n    return 0;\n  }\n  /**\n   * Apply the y-axis log transform to a value when that axis is logarithmic,\n   * mirroring BoxCandleStick. Linear axes return the value unchanged.\n   * @param {number} value\n   * @param {number} realIndex\n   */\n  logVal(value, realIndex) {\n    return (\n      /** @type {any} */\n      this.coreUtils.getLogValAtSeriesIndex(\n        value,\n        realIndex\n      )\n    );\n  }\n}\nfunction swapPairs(arr) {\n  const out = [];\n  for (let k = 0; k < arr.length; k += 2) {\n    out.push(arr[k + 1], arr[k]);\n  }\n  return out;\n}\nclass TreemapHelpers {\n  /**\n   * @param {import('../../../types/internal').ChartStateW} w\n   * @param {import('../../../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n  }\n  checkColorRange() {\n    const w = this.w;\n    let negRange = false;\n    const chartOpts = w.config.plotOptions[w.config.chart.type];\n    if (chartOpts.colorScale.ranges.length > 0) {\n      chartOpts.colorScale.ranges.map((range) => {\n        if (range.from <= 0) {\n          negRange = true;\n        }\n      });\n    }\n    return negRange;\n  }\n  /**\n   * @param {string} chartType\n   * @param {number} i\n   * @param {number} j\n   * @param {any} negRange\n   */\n  getShadeColor(chartType, i, j, negRange) {\n    const w = this.w;\n    let colorShadePercent = 1;\n    const shadeIntensity = w.config.plotOptions[chartType].shadeIntensity;\n    const colorProps = this.determineColor(chartType, i, j);\n    if (\n      /** @type {any} */\n      w.globals.hasNegs || negRange\n    ) {\n      if (w.config.plotOptions[chartType].reverseNegativeShade) {\n        if (colorProps.percent < 0) {\n          colorShadePercent = colorProps.percent / 100 * (shadeIntensity * 1.25);\n        } else {\n          colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n        }\n      } else {\n        if (colorProps.percent <= 0) {\n          colorShadePercent = 1 - (1 + colorProps.percent / 100) * shadeIntensity;\n        } else {\n          colorShadePercent = (1 - colorProps.percent / 100) * shadeIntensity;\n        }\n      }\n    } else {\n      colorShadePercent = 1 - colorProps.percent / 100;\n      if (chartType === \"treemap\") {\n        colorShadePercent = (1 - colorProps.percent / 100) * (shadeIntensity * 1.25);\n      }\n    }\n    let color = colorProps.color;\n    const utils = new Utils$1();\n    if (w.config.plotOptions[chartType].enableShades) {\n      if (this.w.config.theme.mode === \"dark\") {\n        const shadeColor = utils.shadeColor(\n          colorShadePercent * -1,\n          colorProps.color\n        );\n        color = Utils$1.hexToRgba(\n          Utils$1.isColorHex(shadeColor) ? shadeColor : Utils$1.rgb2hex(shadeColor),\n          w.config.fill.opacity\n        );\n      } else {\n        const shadeColor = utils.shadeColor(colorShadePercent, colorProps.color);\n        color = Utils$1.hexToRgba(\n          Utils$1.isColorHex(shadeColor) ? shadeColor : Utils$1.rgb2hex(shadeColor),\n          w.config.fill.opacity\n        );\n      }\n    }\n    return { color, colorProps };\n  }\n  /**\n   * @param {string} chartType\n   * @param {number} i\n   * @param {number} j\n   */\n  determineColor(chartType, i, j) {\n    const w = this.w;\n    const val = w.seriesData.series[i][j];\n    const chartOpts = w.config.plotOptions[chartType];\n    let seriesNumber = chartOpts.colorScale.inverse ? j : i;\n    if (chartOpts.distributed && w.config.chart.type === \"treemap\") {\n      seriesNumber = j;\n    }\n    let color = w.globals.colors[seriesNumber];\n    let foreColor = null;\n    let min = Math.min(...w.seriesData.series[i]);\n    let max = Math.max(...w.seriesData.series[i]);\n    if (!chartOpts.distributed && chartType === \"heatmap\") {\n      min = w.globals.minY;\n      max = w.globals.maxY;\n    }\n    if (typeof chartOpts.colorScale.min !== \"undefined\") {\n      min = chartOpts.colorScale.min < w.globals.minY ? chartOpts.colorScale.min : w.globals.minY;\n      max = chartOpts.colorScale.max > w.globals.maxY ? chartOpts.colorScale.max : w.globals.maxY;\n    }\n    const total = Math.abs(max) + Math.abs(min);\n    let percent = total === 0 ? 0 : 100 * val / total;\n    if (chartOpts.colorScale.ranges.length > 0) {\n      const colorRange = chartOpts.colorScale.ranges;\n      colorRange.map((range) => {\n        if (val >= range.from && val <= range.to) {\n          color = range.color;\n          foreColor = range.foreColor ? range.foreColor : null;\n          min = range.from;\n          max = range.to;\n          const rTotal = Math.abs(max) + Math.abs(min);\n          percent = rTotal === 0 ? 0 : 100 * val / rTotal;\n        }\n      });\n    }\n    return {\n      color,\n      foreColor,\n      percent\n    };\n  }\n  /** @param {{ text?: any, x?: any, y?: any, i?: any, j?: any, colorProps?: any, fontSize?: any, series?: any }} opts */\n  calculateDataLabels({ text, x, y, i, j, colorProps, fontSize }) {\n    const w = this.w;\n    const dataLabelsConfig = w.config.dataLabels;\n    const graphics = new Graphics(this.w);\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    let elDataLabelsWrap = null;\n    if (dataLabelsConfig.enabled) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\"\n      });\n      const offX = dataLabelsConfig.offsetX;\n      const offY = dataLabelsConfig.offsetY;\n      const dataLabelsX = x + offX;\n      const dataLabelsY = y + parseFloat(dataLabelsConfig.style.fontSize) / 3 + offY;\n      dataLabels.plotDataLabelsText({\n        x: dataLabelsX,\n        y: dataLabelsY,\n        text,\n        i,\n        j,\n        color: colorProps.foreColor,\n        parent: elDataLabelsWrap,\n        fontSize,\n        dataLabelsConfig\n      });\n    }\n    return elDataLabelsWrap;\n  }\n}\nclass HeatMap {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  constructor(w, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w;\n    this.xRatio = xyRatios.xRatio;\n    this.yRatio = xyRatios.yRatio;\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.helpers = new TreemapHelpers(w, ctx);\n    this.rectRadius = this.w.config.plotOptions.heatmap.radius;\n    this.strokeWidth = this.w.config.stroke.show ? this.w.config.stroke.width : 0;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const ret = graphics.group({\n      class: \"apexcharts-heatmap\"\n    });\n    ret.attr(\"clip-path\", `url(#gridRectMask${w.globals.cuid})`);\n    const xDivision = w.layout.gridWidth / w.globals.dataPoints;\n    const yDivision = w.layout.gridHeight / w.seriesData.series.length;\n    let y1 = 0;\n    let rev = false;\n    this.negRange = this.helpers.checkColorRange();\n    const heatSeries = series.slice();\n    if (w.config.yaxis[0].reversed) {\n      rev = true;\n      heatSeries.reverse();\n    }\n    for (let i = rev ? 0 : heatSeries.length - 1; rev ? i < heatSeries.length : i >= 0; rev ? i++ : i--) {\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-heatmap-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, i);\n      graphics.setupEventDelegation(elSeries, \".apexcharts-heatmap-rect\");\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(elSeries, shadow, i);\n      }\n      let x1 = 0;\n      const shadeIntensity = w.config.plotOptions.heatmap.shadeIntensity;\n      let j = 0;\n      for (let dIndex = 0; dIndex < w.globals.dataPoints; dIndex++) {\n        if (w.seriesData.seriesX.length && !w.globals.allSeriesHasEqualX) {\n          if (w.globals.minX + w.globals.minXDiff * dIndex < w.seriesData.seriesX[i][j]) {\n            x1 = x1 + xDivision;\n            continue;\n          }\n        }\n        if (j >= heatSeries[i].length) break;\n        const heatColor = this.helpers.getShadeColor(\n          w.config.chart.type,\n          i,\n          j,\n          this.negRange\n        );\n        let color = heatColor.color;\n        const heatColorProps = heatColor.colorProps;\n        if (w.config.fill.type === \"image\") {\n          const fill = new Fill(this.w);\n          color = fill.fillPath({\n            seriesNumber: i,\n            dataPointIndex: j,\n            opacity: (\n              /** @type {any} */\n              w.globals.hasNegs ? heatColorProps.percent < 0 ? 1 - (1 + heatColorProps.percent / 100) : shadeIntensity + heatColorProps.percent / 100 : heatColorProps.percent / 100\n            ),\n            patternID: Utils$1.randomId(),\n            width: w.config.fill.image.width ? w.config.fill.image.width : xDivision,\n            height: w.config.fill.image.height ? w.config.fill.image.height : yDivision\n          });\n        }\n        const radius = this.rectRadius;\n        const rect = graphics.drawRect(x1, y1, xDivision, yDivision, radius);\n        rect.attr({\n          cx: x1,\n          cy: y1\n        });\n        rect.node.classList.add(\"apexcharts-heatmap-rect\");\n        elSeries.add(rect);\n        rect.attr({\n          fill: color,\n          i,\n          index: i,\n          j,\n          val: series[i][j],\n          \"stroke-width\": this.strokeWidth,\n          stroke: w.config.plotOptions.heatmap.useFillColorAsStroke ? color : w.globals.stroke.colors[0],\n          color\n        });\n        if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n          let speed = 1;\n          if (!w.globals.resized) {\n            speed = w.config.chart.animations.speed;\n          }\n          this.animateHeatMap(rect, x1, y1, xDivision, yDivision, speed, i, j);\n        }\n        if (w.globals.dataChanged) {\n          let speed = 1;\n          if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n            speed = this.dynamicAnim.speed;\n            let colorFrom = w.globals.previousPaths[i] && w.globals.previousPaths[i][j] && w.globals.previousPaths[i][j].color;\n            if (!colorFrom) colorFrom = \"rgba(255, 255, 255, 0)\";\n            this.animateHeatColor(\n              rect,\n              Utils$1.isColorHex(colorFrom) ? colorFrom : Utils$1.rgb2hex(colorFrom),\n              Utils$1.isColorHex(color) ? color : Utils$1.rgb2hex(color),\n              speed\n            );\n          }\n        }\n        const formatter = w.config.dataLabels.formatter;\n        const formattedText = formatter(w.seriesData.series[i][j], {\n          value: w.seriesData.series[i][j],\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n        const dataLabels = this.helpers.calculateDataLabels({\n          text: formattedText,\n          x: x1 + xDivision / 2,\n          y: y1 + yDivision / 2,\n          i,\n          j,\n          colorProps: heatColorProps,\n          series: heatSeries\n        });\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n        x1 = x1 + xDivision;\n        j++;\n      }\n      y1 = y1 + yDivision;\n      ret.add(elSeries);\n    }\n    const yAxisScale = (\n      /** @type {any[]} */\n      w.globals.yAxisScale[0].result.slice()\n    );\n    if (w.config.yaxis[0].reversed) {\n      yAxisScale.unshift(\"\");\n    } else {\n      yAxisScale.push(\"\");\n    }\n    w.globals.yAxisScale[0].result = yAxisScale;\n    return ret;\n  }\n  /**\n   * @param {any} el\n   * @param {number} x\n   * @param {number} y\n   * @param {number} width\n   * @param {number} height\n   * @param {number} speed\n   * @param {number} [row] - series index (heatmap row)\n   * @param {number} [col] - data point index (heatmap column)\n   */\n  animateHeatMap(el, x, y, width, height, speed, row = 0, col = 0) {\n    const w = this.w;\n    const animations = new Animations(this.w);\n    const animCfg = w.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false;\n    let delay = 0;\n    if (staggerEnabled) {\n      const seriesCount = (w.seriesData.series || []).length || 1;\n      const pointsCount = w.globals.dataPoints || 1;\n      const maxDiag = seriesCount + pointsCount - 2;\n      const baseDelay = Math.min(\n        gradCfg.delay || 0,\n        speed * 0.5 / Math.max(1, maxDiag)\n      );\n      delay = computeStagger({\n        style: \"diagonal\",\n        index: col,\n        row,\n        col,\n        baseDelay\n      });\n    }\n    animations.animateRect(\n      el,\n      {\n        x: x + width / 2,\n        y: y + height / 2,\n        width: 0,\n        height: 0\n      },\n      {\n        x,\n        y,\n        width,\n        height\n      },\n      speed,\n      () => {\n        animations.animationCompleted(el);\n      },\n      delay\n    );\n  }\n  /**\n   * @param {any} el\n   * @param {string} colorFrom\n   * @param {string} colorTo\n   * @param {number} speed\n   */\n  animateHeatColor(el, colorFrom, colorTo, speed) {\n    el.attr({\n      fill: colorFrom\n    }).animate(speed).attr({\n      fill: colorTo\n    });\n  }\n}\nclass Helpers5 {\n  /**\n   * @param {import('../../../charts/Line').default} lineCtx\n   */\n  constructor(lineCtx) {\n    this.w = lineCtx.w;\n    this.lineCtx = lineCtx;\n  }\n  /**\n   * @param {number} i\n   * @param {any[]} series\n   */\n  sameValueSeriesFix(i, series) {\n    const w = this.w;\n    if (w.config.fill.type === \"gradient\" || w.config.fill.type[i] === \"gradient\") {\n      const coreUtils = new CoreUtils(this.lineCtx.w);\n      if (coreUtils.seriesHaveSameValues(i)) {\n        const gSeries = series[i].slice();\n        gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 1e-6;\n        series[i] = gSeries;\n      }\n    }\n    return series;\n  }\n  /** @param {{series: any, realIndex: any, x: any, y: any, i: any, j: any, prevY: any}} opts */\n  calculatePoints({ series, realIndex, x, y, i, j, prevY }) {\n    const w = this.w;\n    const ptX = [];\n    const ptY = [];\n    let xPT1st = this.lineCtx.categoryAxisCorrection + w.config.markers.offsetX;\n    if (w.axisFlags.isXNumeric) {\n      xPT1st = (w.seriesData.seriesX[realIndex][0] - w.globals.minX) / this.lineCtx.xRatio + w.config.markers.offsetX;\n    }\n    if (j === 0) {\n      ptX.push(xPT1st);\n      ptY.push(\n        Utils$1.isNumber(series[i][0]) ? prevY + w.config.markers.offsetY : null\n      );\n    }\n    ptX.push(x + w.config.markers.offsetX);\n    ptY.push(\n      Utils$1.isNumber(series[i][j + 1]) ? y + w.config.markers.offsetY : null\n    );\n    return {\n      x: ptX,\n      y: ptY\n    };\n  }\n  /** @param {{pathFromLine: any, pathFromArea: any, realIndex: any}} opts */\n  checkPreviousPaths({ pathFromLine, pathFromArea, realIndex }) {\n    const w = this.w;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if ((gpp.type === \"line\" || gpp.type === \"area\") && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(realIndex, 10)) {\n        if (gpp.type === \"line\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromLine = w.globals.previousPaths[pp].paths[0].d;\n        } else if (gpp.type === \"area\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromArea = w.globals.previousPaths[pp].paths[0].d;\n          if (w.config.stroke.show && w.globals.previousPaths[pp].paths[1]) {\n            pathFromLine = w.globals.previousPaths[pp].paths[1].d;\n          }\n        }\n      }\n    }\n    return {\n      pathFromLine,\n      pathFromArea\n    };\n  }\n  /** @param {{i: any, realIndex: any, series: any, prevY: any, lineYPosition: any, translationsIndex: any}} opts */\n  determineFirstPrevY({\n    i,\n    realIndex,\n    series,\n    prevY,\n    lineYPosition,\n    translationsIndex\n  }) {\n    var _a, _b, _c;\n    const w = this.w;\n    const stackSeries = w.config.chart.stacked && !w.globals.comboCharts || w.config.chart.stacked && w.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {any} */\n    ((_a = this.w.config.series[realIndex]) == null ? void 0 : _a.type) === \"bar\" || /** @type {any} */\n    ((_b = this.w.config.series[realIndex]) == null ? void 0 : _b.type) === \"column\");\n    if (typeof ((_c = series[i]) == null ? void 0 : _c[0]) !== \"undefined\") {\n      if (stackSeries) {\n        if (i > 0) {\n          lineYPosition = this.lineCtx.prevSeriesY[i - 1][0];\n        } else {\n          lineYPosition = this.lineCtx.zeroY;\n        }\n      } else {\n        lineYPosition = this.lineCtx.zeroY;\n      }\n      prevY = lineYPosition - series[i][0] / this.lineCtx.yRatio[translationsIndex] + (this.lineCtx.isReversed ? series[i][0] / this.lineCtx.yRatio[translationsIndex] : 0) * 2;\n    } else {\n      if (stackSeries && i > 0 && typeof series[i][0] === \"undefined\") {\n        for (let s = i - 1; s >= 0; s--) {\n          if (series[s][0] !== null && typeof series[s][0] !== \"undefined\") {\n            lineYPosition = this.lineCtx.prevSeriesY[s][0];\n            prevY = lineYPosition;\n            break;\n          }\n        }\n      }\n    }\n    return {\n      prevY,\n      lineYPosition\n    };\n  }\n}\nclass Line {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {boolean} isPointsChart\n   */\n  constructor(w, ctx, xyRatios, isPointsChart) {\n    this.ctx = ctx;\n    this.w = w;\n    this.xyRatios = xyRatios;\n    this.xRatio = 0;\n    this.yRatio = [];\n    this.zRatio = 0;\n    this.baseLineY = [];\n    this.pointsChart = !(this.w.config.chart.type !== \"bubble\" && this.w.config.chart.type !== \"scatter\") || isPointsChart;\n    this.scatter = new Scatter(this.w, this.ctx);\n    this.noNegatives = this.w.globals.minX === Number.MAX_VALUE;\n    this.lineHelpers = new Helpers5(this);\n    this.markers = new Markers(this.w, this.ctx);\n    this.prevSeriesY = [];\n    this.categoryAxisCorrection = 0;\n    this.yaxisIndex = 0;\n    this.xDivision = 0;\n    this.zeroY = 0;\n    this.areaBottomY = 0;\n    this.strokeWidth = 0;\n    this.isReversed = false;\n    this.appendPathFrom = false;\n    this.elSeries = null;\n    this.elPointsMain = null;\n    this.elDataLabelsWrap = null;\n  }\n  /**\n   * @param {any[]} series\n   * @param {string} ctype\n   * @param {number} seriesIndex\n   * @param {any} seriesRangeEnd\n   */\n  draw(series, ctype, seriesIndex, seriesRangeEnd) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w.globals.comboCharts ? ctype : w.config.chart.type;\n    const ret = graphics.group({\n      class: `apexcharts-${type}-series apexcharts-plot-series`\n    });\n    const coreUtils = new CoreUtils(this.w);\n    this.yRatio = this.xyRatios.yRatio;\n    this.zRatio = this.xyRatios.zRatio;\n    this.xRatio = this.xyRatios.xRatio;\n    this.baseLineY = this.xyRatios.baseLineY;\n    series = coreUtils.getLogSeries(series);\n    this.yRatio = coreUtils.getLogYRatios(this.yRatio);\n    this.prevSeriesY = [];\n    const allSeries = [];\n    for (let i = 0; i < series.length; i++) {\n      series = this.lineHelpers.sameValueSeriesFix(i, series);\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const translationsIndex = this.yRatio.length > 1 ? realIndex : 0;\n      this._initSerieVariables(series, i, realIndex);\n      const yArrj = [];\n      const y2Arrj = [];\n      const xArrj = [];\n      let x = w.globals.padHorizontal + this.categoryAxisCorrection;\n      const y = 1;\n      const linePaths = [];\n      const areaPaths = [];\n      Series.addCollapsedClassToSeries(this.w, this.elSeries, realIndex);\n      if (w.axisFlags.isXNumeric && w.seriesData.seriesX.length > 0) {\n        x = (w.seriesData.seriesX[realIndex][0] - w.globals.minX) / this.xRatio;\n      }\n      xArrj.push(x);\n      const pX = x;\n      let pY2;\n      const prevX = pX;\n      let prevY = this.zeroY;\n      let prevY2 = this.zeroY;\n      const lineYPosition = 0;\n      const firstPrevY = this.lineHelpers.determineFirstPrevY({\n        i,\n        realIndex,\n        series,\n        prevY,\n        lineYPosition,\n        translationsIndex\n      });\n      prevY = firstPrevY.prevY;\n      if (w.config.stroke.curve === \"monotoneCubic\" && series[i][0] === null) {\n        yArrj.push(null);\n      } else {\n        yArrj.push(prevY);\n      }\n      const pY = prevY;\n      let firstPrevY2;\n      if (type === \"rangeArea\") {\n        firstPrevY2 = this.lineHelpers.determineFirstPrevY({\n          i,\n          realIndex,\n          series: seriesRangeEnd,\n          prevY: prevY2,\n          lineYPosition,\n          translationsIndex\n        });\n        prevY2 = firstPrevY2.prevY;\n        pY2 = prevY2;\n        y2Arrj.push(yArrj[0] !== null ? prevY2 : null);\n      }\n      const pathsFrom = this._calculatePathsFrom({\n        type,\n        series,\n        i,\n        realIndex,\n        translationsIndex,\n        prevX,\n        prevY,\n        prevY2\n      });\n      const rYArrj = [yArrj[0]];\n      const rY2Arrj = [y2Arrj[0]];\n      const iteratingOpts = {\n        type,\n        series,\n        realIndex,\n        translationsIndex,\n        i,\n        x,\n        y,\n        pX,\n        pY,\n        pathsFrom,\n        linePaths,\n        areaPaths,\n        seriesIndex,\n        lineYPosition,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        seriesRangeEnd\n      };\n      const paths = this._iterateOverDataPoints(__spreadProps(__spreadValues({}, iteratingOpts), {\n        iterations: type === \"rangeArea\" ? series[i].length - 1 : void 0,\n        isRangeStart: true\n      }));\n      if (type === \"rangeArea\") {\n        const pathsFrom2 = this._calculatePathsFrom({\n          series: seriesRangeEnd,\n          i,\n          realIndex,\n          prevX,\n          prevY: prevY2\n        });\n        const rangePaths = this._iterateOverDataPoints(__spreadProps(__spreadValues({}, iteratingOpts), {\n          series: seriesRangeEnd,\n          xArrj: [x],\n          yArrj: rYArrj,\n          y2Arrj: rY2Arrj,\n          pY: pY2,\n          areaPaths: paths.areaPaths,\n          pathsFrom: pathsFrom2,\n          iterations: seriesRangeEnd[i].length - 1,\n          isRangeStart: false\n        }));\n        const segments = paths.linePaths.length / 2;\n        for (let s = 0; s < segments; s++) {\n          paths.linePaths[s] = rangePaths.linePaths[s + segments] + paths.linePaths[s];\n        }\n        paths.linePaths.splice(segments);\n        paths.pathFromLine = rangePaths.pathFromLine + paths.pathFromLine;\n      } else {\n        paths.pathFromArea += \"z\";\n      }\n      this._handlePaths({ type, realIndex, i, paths });\n      this.elSeries.add(this.elPointsMain);\n      this.elSeries.add(this.elDataLabelsWrap);\n      allSeries.push(this.elSeries);\n    }\n    if (typeof /** @type {Record<string,any>} */\n    ((_a = w.config.series[0]) == null ? void 0 : _a.zIndex) !== \"undefined\") {\n      allSeries.sort(\n        (a, b) => Number(a.node.getAttribute(\"zIndex\")) - Number(b.node.getAttribute(\"zIndex\"))\n      );\n    }\n    if (w.config.chart.stacked) {\n      for (let s = allSeries.length - 1; s >= 0; s--) {\n        ret.add(allSeries[s]);\n      }\n    } else {\n      for (let s = 0; s < allSeries.length; s++) {\n        ret.add(allSeries[s]);\n      }\n    }\n    return ret;\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} realIndex\n   */\n  _initSerieVariables(series, i, realIndex) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this.xDivision = w.layout.gridWidth / (w.globals.dataPoints - (w.config.xaxis.tickPlacement === \"on\" ? 1 : 0));\n    this.strokeWidth = Array.isArray(w.config.stroke.width) ? w.config.stroke.width[realIndex] : w.config.stroke.width;\n    let translationsIndex = 0;\n    if (this.yRatio.length > 1) {\n      this.yaxisIndex = w.globals.seriesYAxisReverseMap[realIndex];\n      translationsIndex = realIndex;\n    }\n    this.isReversed = w.config.yaxis[this.yaxisIndex] && w.config.yaxis[this.yaxisIndex].reversed;\n    this.zeroY = w.layout.gridHeight - this.baseLineY[translationsIndex] - (this.isReversed ? w.layout.gridHeight : 0) + (this.isReversed ? this.baseLineY[translationsIndex] * 2 : 0);\n    this.areaBottomY = this.zeroY;\n    if (this.zeroY > w.layout.gridHeight || w.config.plotOptions.area.fillTo === \"end\") {\n      this.areaBottomY = w.layout.gridHeight;\n    }\n    this.categoryAxisCorrection = this.xDivision / 2;\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w.config.series[realIndex]\n    );\n    this.elSeries = graphics.group({\n      class: `apexcharts-series`,\n      zIndex: typeof seriesItem.zIndex !== \"undefined\" ? seriesItem.zIndex : realIndex,\n      seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex])\n    });\n    this.elPointsMain = graphics.group({\n      class: \"apexcharts-series-markers-wrap\",\n      \"data:realIndex\": realIndex\n    });\n    if (w.globals.hasNullValues) {\n      const firstPoint = this.markers.plotChartMarkers({\n        pointsPos: {\n          x: [0],\n          y: [w.layout.gridHeight + w.globals.markers.largestSize]\n        },\n        seriesIndex: i,\n        j: 0,\n        pSize: 0.1,\n        alwaysDrawMarker: true,\n        isVirtualPoint: true\n      });\n      if (firstPoint !== null) {\n        this.elPointsMain.add(firstPoint);\n      }\n    }\n    this.elDataLabelsWrap = graphics.group({\n      class: \"apexcharts-datalabels\",\n      \"data:realIndex\": realIndex\n    });\n    const longestSeries = series[i].length === w.globals.dataPoints;\n    this.elSeries.attr({\n      \"data:longestSeries\": longestSeries,\n      rel: i + 1,\n      \"data:realIndex\": realIndex\n    });\n    this.appendPathFrom = true;\n  }\n  /** @param {{ type?: any, series?: any, i?: any, realIndex?: any, translationsIndex?: any, prevX?: any, prevY?: any, prevY2?: any }} opts */\n  _calculatePathsFrom({\n    type,\n    series,\n    i,\n    realIndex,\n    translationsIndex,\n    prevX,\n    prevY,\n    prevY2\n  }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    let linePath, areaPath, pathFromLine, pathFromArea;\n    if (series[i][0] === null) {\n      for (let s = 0; s < series[i].length; s++) {\n        if (series[i][s] !== null) {\n          prevX = this.xDivision * s;\n          prevY = this.zeroY - series[i][s] / this.yRatio[translationsIndex];\n          linePath = graphics.move(prevX, prevY);\n          areaPath = graphics.move(prevX, this.areaBottomY);\n          break;\n        }\n      }\n    } else {\n      linePath = graphics.move(prevX, prevY);\n      if (type === \"rangeArea\") {\n        linePath = graphics.move(prevX, prevY2) + graphics.line(prevX, prevY);\n      }\n      areaPath = graphics.move(prevX, this.areaBottomY) + graphics.line(prevX, prevY);\n    }\n    pathFromLine = graphics.move(0, this.areaBottomY) + graphics.line(0, this.areaBottomY);\n    pathFromArea = graphics.move(0, this.areaBottomY) + graphics.line(0, this.areaBottomY);\n    if (w.globals.previousPaths.length > 0) {\n      const pathFrom = this.lineHelpers.checkPreviousPaths({\n        pathFromLine,\n        pathFromArea,\n        realIndex\n      });\n      pathFromLine = pathFrom.pathFromLine;\n      pathFromArea = pathFrom.pathFromArea;\n    }\n    return {\n      prevX,\n      prevY,\n      linePath,\n      areaPath,\n      pathFromLine,\n      pathFromArea\n    };\n  }\n  /** @param {{type: any, realIndex: any, i: any, paths: any}} opts */\n  _handlePaths({ type, realIndex, i, paths }) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    this.prevSeriesY.push(paths.yArrj);\n    w.globals.seriesXvalues[realIndex] = paths.xArrj;\n    w.globals.seriesYvalues[realIndex] = paths.yArrj;\n    const forecast = w.config.forecastDataPoints;\n    if (forecast.count > 0 && type !== \"rangeArea\") {\n      const forecastCutoff = w.globals.seriesXvalues[realIndex][w.globals.seriesXvalues[realIndex].length - forecast.count - 1];\n      const elForecastMask = graphics.drawRect(\n        forecastCutoff,\n        0,\n        w.layout.gridWidth,\n        w.layout.gridHeight,\n        0\n      );\n      w.dom.elForecastMask.appendChild(elForecastMask.node);\n      const elNonForecastMask = graphics.drawRect(\n        0,\n        0,\n        forecastCutoff,\n        w.layout.gridHeight,\n        0\n      );\n      w.dom.elNonForecastMask.appendChild(elNonForecastMask.node);\n    }\n    if (!this.pointsChart) {\n      w.globals.delayedElements.push({\n        el: this.elPointsMain.node,\n        index: realIndex\n      });\n    }\n    const defaultRenderedPathOptions = {\n      i,\n      realIndex,\n      animationDelay: i,\n      initialSpeed: w.config.chart.animations.speed,\n      dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n      className: `apexcharts-${type}`\n    };\n    if (type === \"area\") {\n      const pathFill = fill.fillPath({\n        seriesNumber: realIndex\n      });\n      for (let p = 0; p < paths.areaPaths.length; p++) {\n        const renderedPath = graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: paths.pathFromArea,\n          pathTo: paths.areaPaths[p],\n          stroke: \"none\",\n          strokeWidth: 0,\n          strokeLineCap: null,\n          fill: pathFill\n        }));\n        this.elSeries.add(renderedPath);\n      }\n    }\n    if (w.config.stroke.show && !this.pointsChart) {\n      let lineFill = null;\n      if (type === \"line\") {\n        lineFill = fill.fillPath({\n          seriesNumber: realIndex,\n          i\n        });\n      } else {\n        if (w.config.stroke.fill.type === \"solid\") {\n          lineFill = w.globals.stroke.colors[realIndex];\n        } else {\n          const prevFill = w.config.fill;\n          w.config.fill = w.config.stroke.fill;\n          lineFill = fill.fillPath({\n            seriesNumber: realIndex,\n            i\n          });\n          w.config.fill = prevFill;\n        }\n      }\n      for (let p = 0; p < paths.linePaths.length; p++) {\n        let pathFill = lineFill;\n        if (type === \"rangeArea\") {\n          pathFill = fill.fillPath({\n            seriesNumber: realIndex\n          });\n        }\n        const linePathCommonOpts = __spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: paths.pathFromLine,\n          pathTo: paths.linePaths[p],\n          stroke: lineFill,\n          strokeWidth: this.strokeWidth,\n          strokeLineCap: w.config.stroke.lineCap,\n          fill: type === \"rangeArea\" ? pathFill : \"none\"\n        });\n        const renderedPath = graphics.renderPaths(linePathCommonOpts);\n        this.elSeries.add(renderedPath);\n        renderedPath.attr(\"fill-rule\", `evenodd`);\n        if (forecast.count > 0 && type !== \"rangeArea\") {\n          const renderedForecastPath = graphics.renderPaths(linePathCommonOpts);\n          renderedForecastPath.node.setAttribute(\n            \"stroke-dasharray\",\n            forecast.dashArray\n          );\n          if (forecast.strokeWidth) {\n            renderedForecastPath.node.setAttribute(\n              \"stroke-width\",\n              forecast.strokeWidth\n            );\n          }\n          this.elSeries.add(renderedForecastPath);\n          renderedForecastPath.attr(\n            \"clip-path\",\n            `url(#forecastMask${w.globals.cuid})`\n          );\n          renderedPath.attr(\n            \"clip-path\",\n            `url(#nonForecastMask${w.globals.cuid})`\n          );\n        }\n      }\n    }\n  }\n  _iterateOverDataPoints({\n    type,\n    series,\n    iterations,\n    realIndex,\n    translationsIndex,\n    i,\n    x,\n    y,\n    pX,\n    pY,\n    pathsFrom,\n    linePaths,\n    areaPaths,\n    seriesIndex,\n    lineYPosition,\n    xArrj,\n    yArrj,\n    y2Arrj,\n    isRangeStart,\n    seriesRangeEnd\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const yRatio = this.yRatio;\n    let { prevY, linePath, areaPath, pathFromLine, pathFromArea } = pathsFrom;\n    const minY = Utils$1.isNumber(w.globals.minYArr[realIndex]) ? w.globals.minYArr[realIndex] : w.globals.minY;\n    if (!iterations) {\n      iterations = w.globals.dataPoints > 1 ? w.globals.dataPoints - 1 : w.globals.dataPoints;\n    }\n    const getY = (_y, lineYPos) => {\n      return lineYPos - _y / yRatio[translationsIndex] + (this.isReversed ? _y / yRatio[translationsIndex] : 0) * 2;\n    };\n    let y2 = y;\n    const stackSeries = w.config.chart.stacked && !w.globals.comboCharts || w.config.chart.stacked && w.globals.comboCharts && (!this.w.config.chart.stackOnlyBar || /** @type {Record<string,any>} */\n    ((_a = this.w.config.series[realIndex]) == null ? void 0 : _a.type) === \"bar\" || /** @type {Record<string,any>} */\n    ((_b = this.w.config.series[realIndex]) == null ? void 0 : _b.type) === \"column\");\n    let curve = w.config.stroke.curve;\n    if (Array.isArray(curve)) {\n      if (Array.isArray(seriesIndex)) {\n        curve = curve[seriesIndex[i]];\n      } else {\n        curve = curve[i];\n      }\n    }\n    let pathState = 0;\n    let segmentStartX;\n    const jitterPx = this.pointsChart ? this._scatterJitterPx(realIndex) : null;\n    for (let j = 0; j < iterations; j++) {\n      if (series[i].length === 0) break;\n      const isNull = typeof series[i][j + 1] === \"undefined\" || series[i][j + 1] === null;\n      if (w.axisFlags.isXNumeric) {\n        let sX = w.seriesData.seriesX[realIndex][j + 1];\n        if (typeof w.seriesData.seriesX[realIndex][j + 1] === \"undefined\") {\n          sX = w.seriesData.seriesX[realIndex][iterations - 1];\n        }\n        x = (sX - w.globals.minX) / this.xRatio;\n      } else {\n        x = x + this.xDivision;\n      }\n      if (stackSeries) {\n        if (i > 0 && w.globals.collapsedSeries.length < w.config.series.length - 1) {\n          const prevIndex = (pi) => {\n            for (let pii = pi; pii > 0; pii--) {\n              if (w.globals.collapsedSeriesIndices.indexOf(\n                (seriesIndex == null ? void 0 : seriesIndex[pii]) || pii\n              ) > -1) {\n                pii--;\n              } else {\n                return pii;\n              }\n            }\n            return 0;\n          };\n          lineYPosition = this.prevSeriesY[prevIndex(i - 1)][j + 1];\n        } else {\n          lineYPosition = this.zeroY;\n        }\n      } else {\n        lineYPosition = this.zeroY;\n      }\n      if (isNull) {\n        y = getY(minY, lineYPosition);\n      } else {\n        y = getY(series[i][j + 1], lineYPosition);\n        if (type === \"rangeArea\") {\n          y2 = getY(seriesRangeEnd[i][j + 1], lineYPosition);\n        }\n      }\n      let xj = x;\n      let yj = y;\n      if (jitterPx) {\n        const seed = realIndex * 100003 + (j + 1);\n        if (jitterPx.x) xj = x + (hash01(seed * 7919 + 13) - 0.5) * 2 * jitterPx.x;\n        if (jitterPx.y) yj = y + (hash01(seed * 6271 + 97) - 0.5) * 2 * jitterPx.y;\n      }\n      xArrj.push(series[i][j + 1] === null ? null : xj);\n      if (isNull && (w.config.stroke.curve === \"smooth\" || w.config.stroke.curve === \"monotoneCubic\")) {\n        yArrj.push(null);\n        y2Arrj.push(null);\n      } else {\n        yArrj.push(yj);\n        y2Arrj.push(y2);\n      }\n      const pointsPos = this.lineHelpers.calculatePoints({\n        series,\n        x: xj,\n        y: yj,\n        realIndex,\n        i,\n        j,\n        prevY\n      });\n      const calculatedPaths = this._createPaths({\n        type,\n        series,\n        i,\n        j,\n        x,\n        y,\n        y2,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        pX,\n        pY,\n        pathState,\n        segmentStartX,\n        linePath,\n        areaPath,\n        linePaths,\n        areaPaths,\n        curve,\n        isRangeStart\n      });\n      areaPaths = calculatedPaths.areaPaths;\n      linePaths = calculatedPaths.linePaths;\n      pX = calculatedPaths.pX;\n      pY = calculatedPaths.pY;\n      pathState = calculatedPaths.pathState;\n      segmentStartX = calculatedPaths.segmentStartX;\n      areaPath = calculatedPaths.areaPath;\n      linePath = calculatedPaths.linePath;\n      if (this.appendPathFrom && !w.globals.hasNullValues && !(curve === \"monotoneCubic\" && type === \"rangeArea\")) {\n        pathFromLine += graphics.line(x, this.areaBottomY);\n        pathFromArea += graphics.line(x, this.areaBottomY);\n      }\n      this.handleNullDataPoints(series, pointsPos, i, j, realIndex);\n      this._handleMarkersAndLabels({\n        type,\n        pointsPos,\n        i,\n        j,\n        realIndex,\n        isRangeStart\n      });\n    }\n    return {\n      yArrj,\n      xArrj,\n      pathFromArea,\n      areaPaths,\n      pathFromLine,\n      linePaths,\n      linePath,\n      areaPath\n    };\n  }\n  /** @param {{type: any, pointsPos: any, isRangeStart: any, i: any, j: any, realIndex: any}} opts */\n  _handleMarkersAndLabels({ type, pointsPos, isRangeStart, i, j, realIndex }) {\n    const w = this.w;\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (!this.pointsChart) {\n      const useProgressive = !w.globals.dataChanged && !w.globals.resized;\n      if (!useProgressive && w.seriesData.series[i].length > 1) {\n        this.elPointsMain.node.classList.add(\"apexcharts-element-hidden\");\n      }\n      const elPointsWrap = this.markers.plotChartMarkers({\n        pointsPos,\n        seriesIndex: realIndex,\n        j: j + 1\n      });\n      if (elPointsWrap !== null) {\n        this.elPointsMain.add(elPointsWrap);\n      }\n    } else {\n      this.scatter.draw(this.elSeries, j, {\n        realIndex,\n        pointsPos,\n        zRatio: this.zRatio,\n        elParent: this.elPointsMain\n      });\n    }\n    const drawnLabels = dataLabels.drawDataLabel({\n      type,\n      isRangeStart,\n      pos: pointsPos,\n      i: realIndex,\n      j: j + 1\n    });\n    if (drawnLabels !== null) {\n      this.elDataLabelsWrap.add(drawnLabels);\n    }\n  }\n  /**\n   * Max scatter-jitter offsets in pixels for this series, or null when jitter is\n   * off. The config offsets are in axis units (x: 1 = one category step / x-data\n   * unit, y: 1 = one y-data unit); convert each to pixels using the chart's\n   * ratios. The actual per-point offset is a deterministic fraction of these\n   * (see Scatter.drawPoint).\n   * @param {number} realIndex\n   * @returns {{ x: number, y: number } | null}\n   */\n  _scatterJitterPx(realIndex) {\n    var _a;\n    const w = this.w;\n    const jt = (_a = w.config.plotOptions.scatter) == null ? void 0 : _a.jitter;\n    if (!jt || !jt.enabled || !jt.x && !jt.y) return null;\n    const xUnitPx = w.axisFlags.isXNumeric && this.xRatio ? 1 / this.xRatio : this.xDivision;\n    const ti = this.yRatio.length > 1 ? realIndex : 0;\n    const yUnitPx = this.yRatio[ti] ? 1 / this.yRatio[ti] : 0;\n    return {\n      x: (jt.x || 0) * xUnitPx,\n      y: (jt.y || 0) * yUnitPx\n    };\n  }\n  /** @param {{type: any, series: any, i: any, j: any, x: any, y: any, xArrj: any, yArrj: any, y2: any, y2Arrj: any, pX: any, pY: any, pathState: any, segmentStartX: any, linePath: any, areaPath: any, linePaths: any, areaPaths: any, curve: any, isRangeStart: any}} opts */\n  _createPaths({\n    type,\n    series,\n    i,\n    j,\n    x,\n    y,\n    xArrj,\n    yArrj,\n    y2,\n    y2Arrj,\n    pX,\n    pY,\n    pathState,\n    segmentStartX,\n    linePath,\n    areaPath,\n    linePaths,\n    areaPaths,\n    curve,\n    isRangeStart\n  }) {\n    const graphics = new Graphics(this.w);\n    const areaBottomY = this.areaBottomY;\n    const rangeArea = type === \"rangeArea\";\n    const isLowerRangeAreaPath = type === \"rangeArea\" && isRangeStart;\n    switch (curve) {\n      case \"monotoneCubic\": {\n        const yAj = isRangeStart ? yArrj : y2Arrj;\n        const getSmoothInputs = (xArr, yArr) => {\n          return xArr.map((_, i2) => {\n            return [_, yArr[i2]];\n          }).filter((_) => _[1] !== null);\n        };\n        const getSegmentLengths = (yArr) => {\n          const segLens = [];\n          let count = 0;\n          yArr.forEach((_) => {\n            if (_ !== null) {\n              count++;\n            } else if (count > 0) {\n              segLens.push(count);\n              count = 0;\n            }\n          });\n          if (count > 0) {\n            segLens.push(count);\n          }\n          return segLens;\n        };\n        const getSegments = (yArr, points) => {\n          const segLens = getSegmentLengths(yArr);\n          const segments = [];\n          for (let i2 = 0, len = 0; i2 < segLens.length; len += segLens[i2++]) {\n            segments[i2] = spline.slice(points, len, len + segLens[i2]);\n          }\n          return segments;\n        };\n        switch (pathState) {\n          case 0:\n            if (yAj[j + 1] === null) {\n              break;\n            }\n            pathState = 1;\n          // falls through\n          case 1:\n            if (!(rangeArea ? xArrj.length === series[i].length : j === series[i].length - 2)) {\n              break;\n            }\n          // falls through\n          case 2: {\n            const _xAj = isRangeStart ? xArrj : xArrj.slice().reverse();\n            const _yAj = isRangeStart ? yAj : yAj.slice().reverse();\n            const smoothInputs = getSmoothInputs(_xAj, _yAj);\n            const points = smoothInputs.length > 1 ? spline.points(smoothInputs) : smoothInputs;\n            let smoothInputsLower = [];\n            if (rangeArea) {\n              if (isLowerRangeAreaPath) {\n                areaPaths = smoothInputs;\n              } else {\n                smoothInputsLower = areaPaths.reverse();\n              }\n            }\n            let segmentCount = 0;\n            let smoothInputsIndex = 0;\n            getSegments(_yAj, points).forEach((_) => {\n              segmentCount++;\n              const svgPoints = svgPath(_);\n              const _start = smoothInputsIndex;\n              smoothInputsIndex += _.length;\n              const _end = smoothInputsIndex - 1;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints;\n              } else if (rangeArea) {\n                linePath = graphics.move(\n                  smoothInputsLower[_start][0],\n                  smoothInputsLower[_start][1]\n                ) + graphics.line(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints + graphics.line(\n                  smoothInputsLower[_end][0],\n                  smoothInputsLower[_end][1]\n                );\n              } else {\n                linePath = graphics.move(\n                  smoothInputs[_start][0],\n                  smoothInputs[_start][1]\n                ) + svgPoints;\n                areaPath = linePath + graphics.line(smoothInputs[_end][0], areaBottomY) + graphics.line(smoothInputs[_start][0], areaBottomY) + \"z\";\n                areaPaths.push(areaPath);\n              }\n              linePaths.push(linePath);\n            });\n            if (rangeArea && segmentCount > 1 && !isLowerRangeAreaPath) {\n              const upperLinePaths = linePaths.slice(segmentCount).reverse();\n              linePaths.splice(segmentCount);\n              upperLinePaths.forEach(\n                (u) => linePaths.push(u)\n              );\n            }\n            pathState = 0;\n            break;\n          }\n        }\n        break;\n      }\n      case \"smooth\": {\n        const length = (x - pX) * 0.35;\n        if (series[i][j] === null) {\n          pathState = 0;\n        } else {\n          switch (pathState) {\n            case 0:\n              segmentStartX = pX;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(pX, y2Arrj[j]) + graphics.line(pX, pY);\n              } else {\n                linePath = graphics.move(pX, pY);\n              }\n              areaPath = graphics.move(pX, pY);\n              if (series[i][j + 1] === null || typeof series[i][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i].length - 2) {\n                const p = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p;\n                areaPath += p;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i][j + 1] === null) {\n                if (isLowerRangeAreaPath) {\n                  linePath += graphics.line(pX, y2);\n                } else {\n                  linePath += graphics.move(pX, pY);\n                }\n                areaPath += graphics.line(pX, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                pathState = -1;\n              } else {\n                const p = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p;\n                areaPath += p;\n                if (j >= series[i].length - 2) {\n                  if (isLowerRangeAreaPath) {\n                    linePath += graphics.curve(x, y, x, y, x, y2) + graphics.move(x, y2);\n                  }\n                  areaPath += graphics.curve(x, y, x, y, x, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                  linePaths.push(linePath);\n                  areaPaths.push(areaPath);\n                  pathState = -1;\n                }\n              }\n              break;\n          }\n        }\n        pX = x;\n        pY = y;\n        break;\n      }\n      default: {\n        const pathToPoint = (curve2, x2, y3) => {\n          let path = \"\";\n          switch (curve2) {\n            case \"stepline\":\n              path = graphics.line(x2, null, \"H\") + graphics.line(null, y3, \"V\");\n              break;\n            case \"linestep\":\n              path = graphics.line(null, y3, \"V\") + graphics.line(x2, null, \"H\");\n              break;\n            case \"straight\":\n              path = graphics.line(x2, y3);\n              break;\n          }\n          return path;\n        };\n        if (series[i][j] === null) {\n          pathState = 0;\n        } else {\n          switch (pathState) {\n            case 0:\n              segmentStartX = pX;\n              if (isLowerRangeAreaPath) {\n                linePath = graphics.move(pX, y2Arrj[j]) + graphics.line(pX, pY);\n              } else {\n                linePath = graphics.move(pX, pY);\n              }\n              areaPath = graphics.move(pX, pY);\n              if (series[i][j + 1] === null || typeof series[i][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i].length - 2) {\n                const p = pathToPoint(curve, x, y);\n                linePath += p;\n                areaPath += p;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i][j + 1] === null) {\n                if (isLowerRangeAreaPath) {\n                  linePath += graphics.line(pX, y2);\n                } else {\n                  linePath += graphics.move(pX, pY);\n                }\n                areaPath += graphics.line(pX, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                pathState = -1;\n              } else {\n                const p = pathToPoint(curve, x, y);\n                linePath += p;\n                areaPath += p;\n                if (j >= series[i].length - 2) {\n                  if (isLowerRangeAreaPath) {\n                    linePath += graphics.line(x, y2);\n                  }\n                  areaPath += graphics.line(x, areaBottomY) + graphics.line(segmentStartX, areaBottomY) + \"z\";\n                  linePaths.push(linePath);\n                  areaPaths.push(areaPath);\n                  pathState = -1;\n                }\n              }\n              break;\n          }\n        }\n        pX = x;\n        pY = y;\n        break;\n      }\n    }\n    return {\n      linePaths,\n      areaPaths,\n      pX,\n      pY,\n      pathState,\n      segmentStartX,\n      linePath,\n      areaPath\n    };\n  }\n  /**\n   * @param {any[]} series\n   * @param {any} pointsPos\n   * @param {number} i\n   * @param {number} j\n   * @param {number} realIndex\n   */\n  handleNullDataPoints(series, pointsPos, i, j, realIndex) {\n    const w = this.w;\n    if (series[i][j] === null && w.config.markers.showNullDataPoints || series[i].length === 1) {\n      let pSize = this.strokeWidth - w.config.markers.strokeWidth / 2;\n      if (!(pSize > 0)) {\n        pSize = 0;\n      }\n      const elPointsWrap = this.markers.plotChartMarkers({\n        pointsPos,\n        seriesIndex: realIndex,\n        j: j + 1,\n        pSize,\n        alwaysDrawMarker: true\n      });\n      if (elPointsWrap !== null) {\n        this.elPointsMain.add(elPointsWrap);\n      }\n    }\n  }\n}\nclass CircularChartsHelpers {\n  /**\n   * @param {import('../../../types/internal').ChartStateW} w\n   */\n  constructor(w) {\n    this.w = w;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} i\n   * @param {string | number} text\n   */\n  drawYAxisTexts(x, y, i, text) {\n    const w = this.w;\n    const yaxisConfig = w.config.yaxis[0];\n    const formatter = w.formatters.yLabelFormatters[0];\n    const graphics = new Graphics(this.w);\n    const yaxisLabel = graphics.drawText({\n      x: x + yaxisConfig.labels.offsetX,\n      y: y + yaxisConfig.labels.offsetY,\n      text: formatter(text, i),\n      textAnchor: \"middle\",\n      fontSize: yaxisConfig.labels.style.fontSize,\n      fontFamily: yaxisConfig.labels.style.fontFamily,\n      foreColor: Array.isArray(yaxisConfig.labels.style.colors) ? yaxisConfig.labels.style.colors[i] : yaxisConfig.labels.style.colors\n    });\n    return yaxisLabel;\n  }\n  /**\n   * Widest rendered width among the given label strings. Used to reserve\n   * horizontal room for outer (name) labels so the pie can shrink to fit them.\n   * @param {string[]} labels\n   * @param {{ fontSize?: string, fontFamily?: string }} style\n   * @returns {number}\n   */\n  getMaxLabelWidth(labels, { fontSize, fontFamily } = {}) {\n    const graphics = new Graphics(this.w);\n    let maxWidth = 0;\n    labels.forEach((text) => {\n      if (text === null || typeof text === \"undefined\" || text === \"\") return;\n      const rect = graphics.getTextRects(\n        `${text}`,\n        fontSize || \"12px\",\n        fontFamily,\n        \"\"\n      );\n      maxWidth = Math.max(maxWidth, rect.width);\n    });\n    return maxWidth;\n  }\n  /**\n   * Draw a single outer (name) label: an optional leader line from the slice\n   * edge (anchor -> radial elbow -> label) plus the name text (one or more\n   * lines, e.g. name + percent). Geometry is computed by the caller (Pie.js)\n   * so it can run a de-overlap pass first. The text block is vertically\n   * centered on `labelY`, which is where the connector terminates.\n   * @param {{\n   *   lines: string[],\n   *   lineHeight: number,\n   *   anchor: { x: number, y: number },\n   *   elbow: { x: number, y: number },\n   *   labelX: number,\n   *   labelY: number,\n   *   side: 'left' | 'right',\n   *   connector: { show: boolean, width: number, color: string },\n   *   style: { fontSize?: string, fontFamily?: string, fontWeight?: string | number },\n   *   foreColor: string,\n   * }} opts\n   */\n  drawExternalLabel({\n    lines,\n    lineHeight,\n    anchor,\n    elbow,\n    labelX,\n    labelY,\n    side,\n    connector,\n    style,\n    foreColor\n  }) {\n    const graphics = new Graphics(this.w);\n    const group = graphics.group({\n      class: \"apexcharts-pie-name-label-group\"\n    });\n    if (connector.show) {\n      const d = `M ${anchor.x} ${anchor.y} L ${elbow.x} ${elbow.y} L ${labelX} ${labelY}`;\n      const line = graphics.drawPath({\n        d,\n        stroke: connector.color,\n        strokeWidth: connector.width,\n        fill: \"none\",\n        strokeLinecap: \"round\"\n      });\n      line.node.classList.add(\"apexcharts-pie-label-connector\");\n      group.add(line);\n    }\n    const textX = side === \"right\" ? labelX + 4 : labelX - 4;\n    const n = lines.length;\n    const startY = labelY - (n - 1) * lineHeight / 2;\n    const elText = graphics.drawText({\n      x: textX,\n      y: startY,\n      text: n === 1 ? lines[0] : lines,\n      textAnchor: side === \"right\" ? \"start\" : \"end\",\n      fontSize: style.fontSize,\n      fontFamily: style.fontFamily,\n      fontWeight: style.fontWeight,\n      foreColor,\n      dominantBaseline: \"central\",\n      cssClass: \"apexcharts-pie-name-label\"\n    });\n    if (n > 1) {\n      const tspans = elText.node.getElementsByTagName(\"tspan\");\n      for (let li = 0; li < tspans.length; li++) {\n        tspans[li].setAttribute(\"x\", `${textX}`);\n        tspans[li].setAttribute(\"dy\", li === 0 ? \"0\" : `${lineHeight}`);\n      }\n    }\n    group.add(elText);\n    return group;\n  }\n}\nclass Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.chartType = this.w.config.chart.type;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.donutDataLabels = this.w.config.plotOptions.pie.donut.labels;\n    this.lineColorArr = w.globals.stroke.colors !== void 0 ? w.globals.stroke.colors : w.globals.colors;\n    this.defaultSize = Math.min(w.layout.gridWidth, w.layout.gridHeight);\n    this.centerY = this.defaultSize / 2;\n    this.centerX = w.layout.gridWidth / 2;\n    if (w.config.chart.type === \"radialBar\") {\n      this.fullAngle = 360;\n    } else {\n      this.fullAngle = Math.abs(\n        w.config.plotOptions.pie.endAngle - w.config.plotOptions.pie.startAngle\n      );\n    }\n    this.initialAngle = w.config.plotOptions.pie.startAngle % this.fullAngle;\n    w.globals.radialSize = this.defaultSize / 2.05 - w.config.stroke.width - (!w.config.chart.sparkline.enabled ? w.config.chart.dropShadow.blur : 0);\n    this.externalCfg = w.config.plotOptions.pie.dataLabels.external;\n    const dlStyle = w.config.dataLabels.style;\n    this.externalLabelStyle = {\n      fontSize: this.externalCfg.fontSize || dlStyle.fontSize,\n      fontFamily: this.externalCfg.fontFamily || dlStyle.fontFamily,\n      fontWeight: this.externalCfg.fontWeight || dlStyle.fontWeight\n    };\n    this.externalLabels = [];\n    this.externalLabelMaxLines = 1;\n    this.externalLabelLineH = parseFloat(this.externalLabelStyle.fontSize) || 12;\n    w.globals.pieExternalLabelMarginY = 0;\n    this.showExternalLabels = this.externalCfg.show && this.chartType !== \"polarArea\";\n    if (this.showExternalLabels && !w.globals.noData) {\n      this.reserveExternalLabelSpace();\n    }\n    this.donutSize = w.globals.radialSize * parseInt(w.config.plotOptions.pie.donut.size, 10) / 100;\n    const scaleSize = w.config.plotOptions.pie.customScale;\n    const halfW = w.layout.gridWidth / 2;\n    const halfH = w.layout.gridHeight / 2;\n    this.translateX = halfW - halfW * scaleSize;\n    this.translateY = halfH - halfH * scaleSize;\n    this.dataLabelsGroup = new Graphics(this.w).group({\n      class: \"apexcharts-datalabels-group\",\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${scaleSize})`\n    });\n    this.maxY = 0;\n    this.sliceLabels = [];\n    this.sliceSizes = [];\n    this.prevSectorAngleArr = [];\n  }\n  /**\n   * The text shown in an outer (name) label for slice `i`. Applies the\n   * user `name.formatter` if provided, otherwise the raw series name. The\n   * formatter may return a string or an array of strings (one per line, e.g.\n   * `[name, percent]`); normalize via `getExternalLabelLines`.\n   * @param {number} i\n   * @returns {string | string[]}\n   */\n  getExternalLabelText(i) {\n    var _a, _b, _c;\n    const w = this.w;\n    const name2 = w.seriesData.seriesNames[i];\n    const fn = this.externalCfg.formatter;\n    if (typeof fn === \"function\") {\n      return fn(name2, {\n        seriesIndex: i,\n        percent: (_b = (_a = w.globals.seriesPercent) == null ? void 0 : _a[i]) == null ? void 0 : _b[0],\n        value: (_c = w.globals.seriesTotals) == null ? void 0 : _c[i],\n        w\n      });\n    }\n    return name2 == null ? \"\" : `${name2}`;\n  }\n  /**\n   * Outer label content for slice `i` normalized to an array of line strings.\n   * Supports a formatter returning an array, or a string with `\\n` separators.\n   * @param {number} i\n   * @returns {string[]}\n   */\n  getExternalLabelLines(i) {\n    const raw = this.getExternalLabelText(i);\n    const arr = Array.isArray(raw) ? raw : `${raw == null ? \"\" : raw}`.split(\"\\n\");\n    return arr.map((l) => l == null ? \"\" : `${l}`);\n  }\n  /**\n   * Shrink the pie radius (and reposition its center) so outer name labels and\n   * their connector lines fit inside the chart area without clipping. Stores\n   * the reserved vertical band on `w.globals.pieExternalLabelMarginY` so\n   * Core.resizeNonAxisCharts can grow the SVG height to match.\n   */\n  reserveExternalLabelSpace() {\n    const w = this.w;\n    const helpers = new CircularChartsHelpers(w);\n    const lineSets = (w.seriesData.seriesNames || []).map(\n      (_, i) => this.getExternalLabelLines(i)\n    );\n    const maxLabelWidth = helpers.getMaxLabelWidth(lineSets.flat(), {\n      fontSize: this.externalLabelStyle.fontSize,\n      fontFamily: this.externalLabelStyle.fontFamily\n    });\n    this.externalLabelMaxLines = lineSets.reduce((m, s) => Math.max(m, s.length), 1);\n    this.externalLabelLineH = Math.round(\n      (parseFloat(this.externalLabelStyle.fontSize) || 12) * 1.35\n    );\n    const cn = this.externalCfg.connector;\n    const blockHeight = this.externalLabelMaxLines * this.externalLabelLineH;\n    const mh = maxLabelWidth + (cn.length || 0) + (cn.gap || 0) + 12;\n    const mv = blockHeight / 2 + (cn.gap || 0) + 6;\n    const fitted = Math.min(\n      w.globals.radialSize,\n      w.layout.gridWidth / 2 - mh,\n      w.layout.gridHeight / 2 - mv\n    );\n    w.globals.radialSize = Math.max(fitted, this.defaultSize * 0.15);\n    w.globals.pieExternalLabelMarginY = mv;\n    const heightStr = w.config.chart.height ? String(w.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    this.centerY = userSetFixedHeight ? w.layout.gridHeight / 2 : w.globals.radialSize + mv;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const self = this;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const elPie = graphics.group({\n      class: \"apexcharts-pie\"\n    });\n    if (w.globals.noData) return elPie;\n    let total = 0;\n    for (let k = 0; k < series.length; k++) {\n      total += Utils$1.negToZero(series[k]);\n    }\n    const sectorAngleArr = [];\n    const elSeries = graphics.group();\n    if (total === 0) {\n      total = 1e-5;\n    }\n    series.forEach((m) => {\n      this.maxY = Math.max(this.maxY, m);\n    });\n    if (w.config.yaxis[0].max) {\n      this.maxY = w.config.yaxis[0].max;\n    }\n    if (w.config.grid.position === \"back\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    for (let i = 0; i < series.length; i++) {\n      const angle = this.fullAngle * Utils$1.negToZero(series[i]) / total;\n      sectorAngleArr.push(angle);\n      if (this.chartType === \"polarArea\") {\n        sectorAngleArr[i] = this.fullAngle / series.length;\n        this.sliceSizes.push(w.globals.radialSize * series[i] / this.maxY);\n      } else {\n        this.sliceSizes.push(w.globals.radialSize);\n      }\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    if (w.globals.dataChanged && !morphActive) {\n      let prevTotal = 0;\n      for (let k = 0; k < w.globals.previousPaths.length; k++) {\n        prevTotal += Utils$1.negToZero(w.globals.previousPaths[k]);\n      }\n      let previousAngle;\n      for (let i = 0; i < w.globals.previousPaths.length; i++) {\n        previousAngle = this.fullAngle * Utils$1.negToZero(w.globals.previousPaths[i]) / prevTotal;\n        this.prevSectorAngleArr.push(previousAngle);\n      }\n    }\n    if (this.donutSize < 0) {\n      this.donutSize = 0;\n    }\n    if (this.chartType === \"donut\") {\n      const circle = graphics.drawCircle(this.donutSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: w.config.plotOptions.pie.donut.background ? w.config.plotOptions.pie.donut.background : \"transparent\"\n      });\n      elSeries.add(circle);\n    }\n    const elG = self.drawArcs(sectorAngleArr, series);\n    this.sliceLabels.forEach((s) => {\n      elG.add(s);\n    });\n    elSeries.attr({\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${w.config.plotOptions.pie.customScale})`\n    });\n    elSeries.add(elG);\n    elPie.add(elSeries);\n    if (this.donutDataLabels.show) {\n      const shouldFadeInLabels = this.initialAnim && !w.globals.resized && !w.globals.dataChanged && this.animDur > 0;\n      const dataLabels = this.renderInnerDataLabels(\n        this.dataLabelsGroup,\n        this.donutDataLabels,\n        {\n          hollowSize: this.donutSize,\n          centerX: this.centerX,\n          centerY: this.centerY,\n          opacity: shouldFadeInLabels ? 0 : this.donutDataLabels.show\n        }\n      );\n      if (shouldFadeInLabels) {\n        const labelsNode = this.dataLabelsGroup.node;\n        labelsNode.style.transition = \"opacity 280ms ease-out\";\n        setTimeout(() => {\n          labelsNode.style.opacity = \"1\";\n        }, this.animDur);\n      }\n      elPie.add(dataLabels);\n    }\n    if (w.config.grid.position === \"front\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    return elPie;\n  }\n  // core function for drawing pie arcs\n  /**\n   * @param {any[]} sectorAngleArr\n   * @param {any[]} series\n   */\n  drawArcs(sectorAngleArr, series) {\n    var _a, _b;\n    const w = this.w;\n    const filters = new Filters(this.w);\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    const g = graphics.group({\n      class: \"apexcharts-slices\"\n    });\n    let startAngle = this.initialAngle;\n    let prevStartAngle = this.initialAngle;\n    let endAngle = this.initialAngle;\n    let prevEndAngle = this.initialAngle;\n    this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i = 0; i < sectorAngleArr.length; i++) {\n      const elPieArc = graphics.group({\n        class: `apexcharts-series apexcharts-pie-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      g.add(elPieArc);\n      startAngle = endAngle;\n      prevStartAngle = prevEndAngle;\n      endAngle = startAngle + sectorAngleArr[i];\n      prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i];\n      const angle = endAngle < startAngle ? this.fullAngle + endAngle - startAngle : endAngle - startAngle;\n      const pathFill = fill.fillPath({\n        seriesNumber: i,\n        size: this.sliceSizes[i],\n        value: series[i]\n      });\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i, 0) : null;\n      const path = morphFrom || this.getChangedPath(prevStartAngle, prevEndAngle);\n      const elPath = graphics.drawPath({\n        d: path,\n        // Pie/donut/polarArea data is a single series, so a user-supplied\n        // `stroke.colors` shorter than the slice count is NOT padded by the\n        // theme engine (unlike fill colors, which cycle). Without this, only\n        // slice 0 gets the requested color and the rest fall back to a grey\n        // default. Cycle the array — matching fill-color behaviour — so a\n        // single `stroke.colors: ['#fff']` borders every slice as expected.\n        stroke: Array.isArray(this.lineColorArr) ? (_b = this.lineColorArr[i]) != null ? _b : this.lineColorArr[i % this.lineColorArr.length] : this.lineColorArr,\n        strokeWidth: 0,\n        fill: pathFill,\n        fillOpacity: w.config.fill.opacity,\n        classes: `apexcharts-pie-area apexcharts-${this.chartType.toLowerCase()}-slice-${i}`\n      });\n      elPath.attr({\n        index: 0,\n        j: i\n      });\n      filters.setSelectionFilter(elPath, 0, i);\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i);\n      }\n      this.addListeners(elPath, this.donutDataLabels);\n      let labelPosition = {\n        x: 0,\n        y: 0\n      };\n      const midAngle = (startAngle + angle / 2) % this.fullAngle;\n      let arcCenter = { x: this.centerX, y: this.centerY };\n      if (this.chartType === \"pie\" || this.chartType === \"polarArea\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize / 1.25 + w.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize / 2,\n          midAngle\n        );\n      } else if (this.chartType === \"donut\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w.globals.radialSize + this.donutSize) / 2 + w.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w.globals.radialSize + this.donutSize) / 2,\n          midAngle\n        );\n      }\n      Graphics.setAttrs(elPath.node, {\n        \"data:angle\": angle,\n        \"data:startAngle\": startAngle,\n        \"data:strokeWidth\": this.strokeWidth,\n        \"data:value\": series[i],\n        \"data:cx\": arcCenter.x,\n        \"data:cy\": arcCenter.y\n      });\n      elPieArc.add(elPath);\n      let dur = 0;\n      if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n        dur = angle / this.fullAngle * w.config.chart.animations.speed;\n        if (dur === 0) dur = 1;\n        this.animDur = dur + this.animDur;\n        this.animBeginArr.push(this.animDur);\n      } else {\n        this.animBeginArr.push(0);\n      }\n      if (morphActive && morphFrom) {\n        const targetD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: this.sliceSizes[i]\n        });\n        const morphSpeed = this.ctx.morphTypeChange.getSpeed();\n        const animations = this.ctx.animations;\n        elPath.node.setAttribute(\"data:pathOrig\", targetD);\n        const morphRunner = elPath.animate(morphSpeed).plot(targetD, \"polygons\").attr({ \"stroke-width\": this.strokeWidth });\n        if (morphRunner && typeof morphRunner.after === \"function\") {\n          morphRunner.after(() => animations.animationCompleted(elPath));\n        } else {\n          animations.animationCompleted(elPath);\n        }\n      } else if (this.dynamicAnim && w.globals.dataChanged) {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i],\n          endAngle,\n          startAngle,\n          prevStartAngle,\n          prevEndAngle,\n          animateStartingPos: true,\n          i,\n          animBeginArr: this.animBeginArr,\n          shouldSetPrevPaths: true,\n          dur: w.config.chart.animations.dynamicAnimation.speed\n        });\n      } else {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i],\n          endAngle,\n          startAngle,\n          i,\n          totalItems: sectorAngleArr.length - 1,\n          animBeginArr: this.animBeginArr,\n          dur\n        });\n      }\n      if (w.config.plotOptions.pie.expandOnClick && this.chartType !== \"polarArea\") {\n        elPath.node.addEventListener(\"mouseup\", this.pieClicked.bind(this, i));\n      }\n      if (typeof w.interact.selectedDataPoints[0] !== \"undefined\" && w.interact.selectedDataPoints[0].indexOf(i) > -1) {\n        if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged && this.animDur > 0) {\n          const _this = this;\n          const _i = i;\n          setTimeout(() => _this.pieClicked(_i), this.animDur);\n        } else {\n          this.pieClicked(i);\n        }\n      }\n      if (w.config.dataLabels.enabled) {\n        const xPos = labelPosition.x;\n        const yPos = labelPosition.y;\n        let text = 100 * angle / this.fullAngle + \"%\";\n        if (angle !== 0 && w.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i]) {\n          const formatter = w.config.dataLabels.formatter;\n          if (formatter !== void 0) {\n            text = formatter(w.globals.seriesPercent[i][0], {\n              seriesIndex: i,\n              w\n            });\n          }\n          const foreColor = w.globals.dataLabels.style.colors[i];\n          const elPieLabelWrap = graphics.group({\n            class: `apexcharts-datalabels`\n          });\n          const elPieLabel = graphics.drawText({\n            x: xPos,\n            y: yPos,\n            text,\n            textAnchor: \"middle\",\n            fontSize: w.config.dataLabels.style.fontSize,\n            fontFamily: w.config.dataLabels.style.fontFamily,\n            fontWeight: w.config.dataLabels.style.fontWeight,\n            foreColor\n          });\n          elPieLabelWrap.add(elPieLabel);\n          if (w.config.dataLabels.dropShadow.enabled) {\n            const textShadow = w.config.dataLabels.dropShadow;\n            filters.dropShadow(elPieLabel, textShadow);\n          }\n          elPieLabel.node.classList.add(\"apexcharts-pie-label\");\n          if (w.config.chart.animations.animate && w.globals.resized === false) {\n            elPieLabel.node.classList.add(\"apexcharts-pie-label-delay\");\n            elPieLabel.node.style.animationDelay = w.config.chart.animations.speed / 940 + \"s\";\n          }\n          this.sliceLabels.push(elPieLabelWrap);\n        }\n      }\n      if (this.showExternalLabels && angle !== 0) {\n        const lines = this.getExternalLabelLines(i);\n        if (lines.some((l) => l !== \"\")) {\n          const anchor = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w.globals.radialSize,\n            midAngle\n          );\n          const elbow = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w.globals.radialSize + (this.externalCfg.connector.gap || 0),\n            midAngle\n          );\n          const isRight = elbow.x >= this.centerX;\n          const baseLabelX = isRight ? elbow.x + (this.externalCfg.connector.length || 0) : elbow.x - (this.externalCfg.connector.length || 0);\n          this.externalLabels.push({\n            lines,\n            anchor,\n            elbow,\n            side: isRight ? \"right\" : \"left\",\n            labelX: baseLabelX + parseFloat(this.externalCfg.offsetX || 0),\n            idealY: elbow.y + parseFloat(this.externalCfg.offsetY || 0),\n            connectorColor: this.externalCfg.connector.color || w.globals.colors[i],\n            foreColor: this.externalCfg.color || w.config.chart.foreColor\n          });\n        }\n      }\n    }\n    if (this.showExternalLabels && this.externalLabels.length) {\n      this.placeExternalLabels();\n      const revealOnAnimEnd = Environment.isBrowser() && (morphActive || this.dynamicAnim && w.globals.dataChanged || this.initialAnim && !w.globals.resized && !w.globals.dataChanged);\n      this.externalLabels.forEach((lbl) => {\n        const group = new CircularChartsHelpers(w).drawExternalLabel({\n          lines: lbl.lines,\n          lineHeight: this.externalLabelLineH,\n          anchor: lbl.anchor,\n          elbow: lbl.elbow,\n          labelX: lbl.labelX,\n          labelY: lbl.labelY,\n          side: lbl.side,\n          connector: {\n            show: this.externalCfg.connector.show,\n            width: this.externalCfg.connector.width,\n            color: lbl.connectorColor\n          },\n          style: this.externalLabelStyle,\n          foreColor: lbl.foreColor\n        });\n        if (revealOnAnimEnd) {\n          group.node.classList.add(\"apexcharts-element-hidden\");\n          w.globals.delayedElements.push({ el: group.node });\n        }\n        g.add(group);\n      });\n    }\n    return g;\n  }\n  /**\n   * Vertical de-overlap for outer (name) labels: per side, sort by ideal y and\n   * push neighbours apart so they keep at least one line-height of spacing.\n   * Mutates each entry's `labelY`. Connector lines re-route to the moved y.\n   */\n  placeExternalLabels() {\n    const w = this.w;\n    const lineHeight = this.externalLabelMaxLines * this.externalLabelLineH + 2;\n    const maxY = this.centerY + w.globals.radialSize + w.globals.pieExternalLabelMarginY;\n    [\"left\", \"right\"].forEach((side) => {\n      const items = this.externalLabels.filter((l) => l.side === side).sort((a, b) => a.idealY - b.idealY);\n      items.forEach((l) => {\n        l.labelY = l.idealY;\n      });\n      for (let k = 1; k < items.length; k++) {\n        if (items[k].labelY - items[k - 1].labelY < lineHeight) {\n          items[k].labelY = items[k - 1].labelY + lineHeight;\n        }\n      }\n      const last = items[items.length - 1];\n      const overflow = last ? last.labelY - maxY : 0;\n      if (overflow > 0) {\n        for (let k = items.length - 1; k >= 0; k--) {\n          items[k].labelY -= overflow;\n          if (k < items.length - 1 && items[k + 1].labelY - items[k].labelY < lineHeight) {\n            items[k].labelY = items[k + 1].labelY - lineHeight;\n          }\n        }\n      }\n    });\n  }\n  /**\n   * @param {any} elPath\n   * @param {Record<string, any>} dataLabels\n   */\n  addListeners(elPath, dataLabels) {\n    const graphics = new Graphics(this.w);\n    elPath.node.addEventListener(\n      \"mouseenter\",\n      graphics.pathMouseEnter.bind(this, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      graphics.pathMouseLeave.bind(this, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      this.revertDataLabelsInner.bind(this)\n    );\n    elPath.node.addEventListener(\n      \"mousedown\",\n      graphics.pathMouseDown.bind(this, elPath)\n    );\n    if (!this.donutDataLabels.total.showAlways) {\n      elPath.node.addEventListener(\n        \"mouseenter\",\n        this.printDataLabelsInner.bind(this, elPath.node, dataLabels)\n      );\n      elPath.node.addEventListener(\n        \"mousedown\",\n        this.printDataLabelsInner.bind(this, elPath.node, dataLabels)\n      );\n    }\n  }\n  // This function can be used for other circle charts too\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} opts\n   */\n  animatePaths(el, opts) {\n    const w = this.w;\n    const me = this;\n    let angle = opts.endAngle < opts.startAngle ? this.fullAngle + opts.endAngle - opts.startAngle : opts.endAngle - opts.startAngle;\n    let prevAngle = angle;\n    let fromStartAngle = opts.startAngle;\n    const toStartAngle = opts.startAngle;\n    if (opts.prevStartAngle !== void 0 && opts.prevEndAngle !== void 0) {\n      fromStartAngle = opts.prevEndAngle;\n      prevAngle = opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle;\n    }\n    if (opts.i === w.config.series.length - 1) {\n      if (angle + toStartAngle > this.fullAngle) {\n        opts.endAngle = opts.endAngle - (angle + toStartAngle);\n      } else if (angle + toStartAngle < this.fullAngle) {\n        opts.endAngle = opts.endAngle + (this.fullAngle - (angle + toStartAngle));\n      }\n    }\n    if (angle === this.fullAngle) angle = this.fullAngle - 0.01;\n    me.animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts);\n  }\n  /**\n   * @param {any} el\n   * @param {number} fromStartAngle\n   * @param {number} toStartAngle\n   * @param {number} angle\n   * @param {number} prevAngle\n   * @param {Record<string, any>} opts\n   */\n  animateArc(el, fromStartAngle, toStartAngle, angle, prevAngle, opts) {\n    const me = this;\n    const w = this.w;\n    const animations = new Animations(this.w);\n    const size = opts.size;\n    let path;\n    if (isNaN(fromStartAngle) || isNaN(prevAngle)) {\n      fromStartAngle = toStartAngle;\n      prevAngle = angle;\n      opts.dur = 0;\n    }\n    let currAngle = angle;\n    let startAngle = toStartAngle;\n    const fromAngle = fromStartAngle < toStartAngle ? this.fullAngle + fromStartAngle - toStartAngle : fromStartAngle - toStartAngle;\n    if (w.globals.dataChanged && opts.shouldSetPrevPaths) {\n      if (opts.prevEndAngle) {\n        path = me.getPiePath({\n          me,\n          startAngle: opts.prevStartAngle,\n          angle: opts.prevEndAngle < opts.prevStartAngle ? this.fullAngle + opts.prevEndAngle - opts.prevStartAngle : opts.prevEndAngle - opts.prevStartAngle,\n          size\n        });\n        el.attr({ d: path });\n      }\n    }\n    if (opts.dur !== 0) {\n      el.animate(opts.dur, opts.animBeginArr[opts.i]).after(\n        /** @this {any} */\n        function() {\n          if (me.chartType === \"pie\" || me.chartType === \"donut\" || me.chartType === \"polarArea\") {\n            this.animate(\n              w.config.chart.animations.dynamicAnimation.speed\n            ).attr({\n              \"stroke-width\": me.strokeWidth\n            });\n          }\n          if (opts.i === w.config.series.length - 1) {\n            animations.animationCompleted(el);\n          }\n        }\n      ).during((pos) => {\n        currAngle = fromAngle + (angle - fromAngle) * pos;\n        if (opts.animateStartingPos) {\n          currAngle = prevAngle + (angle - prevAngle) * pos;\n          startAngle = fromStartAngle - prevAngle + (toStartAngle - (fromStartAngle - prevAngle)) * pos;\n        }\n        path = me.getPiePath({\n          me,\n          startAngle,\n          angle: currAngle,\n          size\n        });\n        el.node.setAttribute(\"data:pathOrig\", path);\n        el.attr({\n          d: path\n        });\n      });\n    } else {\n      path = me.getPiePath({\n        me,\n        startAngle,\n        angle,\n        size\n      });\n      if (!opts.isTrack) {\n        w.globals.animationEnded = true;\n      }\n      el.node.setAttribute(\"data:pathOrig\", path);\n      el.attr({\n        d: path,\n        \"stroke-width\": me.strokeWidth\n      });\n    }\n  }\n  /**\n   * @param {number} i\n   */\n  pieClicked(i) {\n    const w = this.w;\n    const me = this;\n    const size = me.sliceSizes[i] + (w.config.plotOptions.pie.expandOnClick ? 4 : 0);\n    const elPath = w.dom.Paper.findOne(\n      `.apexcharts-${me.chartType.toLowerCase()}-slice-${i}`\n    );\n    if (elPath.attr(\"data:pieClicked\") === \"true\") {\n      elPath.attr({\n        \"data:pieClicked\": \"false\"\n      });\n      this.revertDataLabelsInner();\n      const origPath = elPath.attr(\"data:pathOrig\");\n      elPath.attr({\n        d: origPath\n      });\n      return;\n    } else {\n      const allEls = w.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");\n      Array.prototype.forEach.call(allEls, (pieSlice) => {\n        pieSlice.setAttribute(\"data:pieClicked\", \"false\");\n        const origPath = pieSlice.getAttribute(\"data:pathOrig\");\n        if (origPath) {\n          pieSlice.setAttribute(\"d\", origPath);\n        }\n      });\n      w.interact.capturedDataPointIndex = i;\n      elPath.attr(\"data:pieClicked\", \"true\");\n    }\n    const startAngle = parseInt(elPath.attr(\"data:startAngle\"), 10);\n    const angle = parseInt(elPath.attr(\"data:angle\"), 10);\n    const path = me.getPiePath({\n      me,\n      startAngle,\n      angle,\n      size\n    });\n    if (angle === 360) return;\n    elPath.plot(path);\n  }\n  /**\n   * @param {number} prevStartAngle\n   * @param {number} prevEndAngle\n   */\n  getChangedPath(prevStartAngle, prevEndAngle) {\n    let path = \"\";\n    if (this.dynamicAnim && this.w.globals.dataChanged) {\n      path = this.getPiePath({\n        me: this,\n        startAngle: prevStartAngle,\n        angle: prevEndAngle - prevStartAngle,\n        // @ts-ignore — size is set dynamically during draw()\n        size: this.size\n      });\n    }\n    return path;\n  }\n  /** @param {{me: any, startAngle: any, angle: any, size: any}} opts */\n  getPiePath({ me, startAngle, angle, size }) {\n    let path;\n    const graphics = new Graphics(this.w);\n    const startDeg = startAngle;\n    const startRadians = Math.PI * (startDeg - 90) / 180;\n    let endDeg = angle + startAngle;\n    if (Math.ceil(endDeg) >= this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle) {\n      endDeg = this.fullAngle + this.w.config.plotOptions.pie.startAngle % this.fullAngle - 0.01;\n    }\n    if (Math.ceil(endDeg) > this.fullAngle) endDeg -= this.fullAngle;\n    const endRadians = Math.PI * (endDeg - 90) / 180;\n    const x1 = me.centerX + size * Math.cos(startRadians);\n    const y1 = me.centerY + size * Math.sin(startRadians);\n    const x2 = me.centerX + size * Math.cos(endRadians);\n    const y2 = me.centerY + size * Math.sin(endRadians);\n    const startInner = Utils$1.polarToCartesian(\n      me.centerX,\n      me.centerY,\n      me.donutSize,\n      endDeg\n    );\n    const endInner = Utils$1.polarToCartesian(\n      me.centerX,\n      me.centerY,\n      me.donutSize,\n      startDeg\n    );\n    const largeArc = angle > 180 ? 1 : 0;\n    const pathBeginning = [\"M\", x1, y1, \"A\", size, size, 0, largeArc, 1, x2, y2];\n    if (me.chartType === \"donut\") {\n      path = [\n        ...pathBeginning,\n        \"L\",\n        startInner.x,\n        startInner.y,\n        \"A\",\n        me.donutSize,\n        me.donutSize,\n        0,\n        largeArc,\n        0,\n        endInner.x,\n        endInner.y,\n        \"L\",\n        x1,\n        y1,\n        \"z\"\n      ].join(\" \");\n    } else if (me.chartType === \"pie\" || me.chartType === \"polarArea\") {\n      path = [...pathBeginning, \"L\", me.centerX, me.centerY, \"L\", x1, y1].join(\n        \" \"\n      );\n    } else {\n      path = [...pathBeginning].join(\" \");\n    }\n    return graphics.roundPathCorners(path, this.strokeWidth * 2);\n  }\n  /**\n   * @param {any} parent\n   */\n  drawPolarElements(parent) {\n    const w = this.w;\n    const scale = new Scales(this.w);\n    const graphics = new Graphics(this.w);\n    const helpers = new CircularChartsHelpers(this.w);\n    const gCircles = graphics.group();\n    const gYAxis = graphics.group();\n    const yScale = scale.niceScale(0, Math.ceil(this.maxY), 0);\n    const yTexts = yScale.result.reverse();\n    const len = yScale.result.length;\n    this.maxY = yScale.niceMax;\n    let circleSize = w.globals.radialSize;\n    const diff = circleSize / (len - 1);\n    for (let i = 0; i < len - 1; i++) {\n      const circle = graphics.drawCircle(circleSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: \"none\",\n        \"stroke-width\": w.config.plotOptions.polarArea.rings.strokeWidth,\n        stroke: w.config.plotOptions.polarArea.rings.strokeColor\n      });\n      if (w.config.yaxis[0].show) {\n        const yLabel = helpers.drawYAxisTexts(\n          this.centerX,\n          this.centerY - circleSize + parseInt(w.config.yaxis[0].labels.style.fontSize, 10) / 2,\n          i,\n          yTexts[i]\n        );\n        gYAxis.add(yLabel);\n      }\n      gCircles.add(circle);\n      circleSize = circleSize - diff;\n    }\n    this.drawSpokes(parent);\n    parent.add(gCircles);\n    parent.add(gYAxis);\n  }\n  /**\n   * @param {any} dataLabelsGroup\n   * @param {Record<string, any>} dataLabelsConfig\n   * @param {Record<string, any>} opts\n   */\n  renderInnerDataLabels(dataLabelsGroup, dataLabelsConfig, opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const showTotal = dataLabelsConfig.total.show;\n    dataLabelsGroup.node.innerHTML = \"\";\n    dataLabelsGroup.node.style.opacity = opts.opacity;\n    const x = opts.centerX;\n    const y = !this.donutDataLabels.total.label ? opts.centerY - opts.centerY / 6 : opts.centerY;\n    let labelColor, valueColor;\n    if (dataLabelsConfig.name.color === void 0) {\n      labelColor = w.globals.colors[0];\n    } else {\n      labelColor = dataLabelsConfig.name.color;\n    }\n    let labelFontSize = dataLabelsConfig.name.fontSize;\n    let labelFontFamily = dataLabelsConfig.name.fontFamily;\n    let labelFontWeight = dataLabelsConfig.name.fontWeight;\n    if (dataLabelsConfig.value.color === void 0) {\n      valueColor = w.config.chart.foreColor;\n    } else {\n      valueColor = dataLabelsConfig.value.color;\n    }\n    const lbFormatter = dataLabelsConfig.value.formatter;\n    let val = \"\";\n    let name2 = \"\";\n    if (showTotal) {\n      labelColor = dataLabelsConfig.total.color;\n      labelFontSize = dataLabelsConfig.total.fontSize;\n      labelFontFamily = dataLabelsConfig.total.fontFamily;\n      labelFontWeight = dataLabelsConfig.total.fontWeight;\n      name2 = !this.donutDataLabels.total.label ? \"\" : dataLabelsConfig.total.label;\n      val = dataLabelsConfig.total.formatter(w);\n    } else {\n      if (w.seriesData.series.length === 1) {\n        val = lbFormatter(w.seriesData.series[0], w);\n        name2 = w.seriesData.seriesNames[0];\n      }\n    }\n    if (name2) {\n      name2 = dataLabelsConfig.name.formatter(\n        name2,\n        dataLabelsConfig.total.show,\n        w\n      );\n    }\n    if (dataLabelsConfig.name.show) {\n      const elLabel = graphics.drawText({\n        x,\n        y: y + parseFloat(dataLabelsConfig.name.offsetY),\n        text: name2,\n        textAnchor: \"middle\",\n        foreColor: labelColor,\n        fontSize: labelFontSize,\n        fontWeight: labelFontWeight,\n        fontFamily: labelFontFamily\n      });\n      elLabel.node.classList.add(\"apexcharts-datalabel-label\");\n      dataLabelsGroup.add(elLabel);\n    }\n    if (dataLabelsConfig.value.show) {\n      const valOffset = dataLabelsConfig.name.show ? parseFloat(dataLabelsConfig.value.offsetY) + 16 : dataLabelsConfig.value.offsetY;\n      const elValue = graphics.drawText({\n        x,\n        y: y + valOffset,\n        text: val,\n        textAnchor: \"middle\",\n        foreColor: valueColor,\n        fontWeight: dataLabelsConfig.value.fontWeight,\n        fontSize: dataLabelsConfig.value.fontSize,\n        fontFamily: dataLabelsConfig.value.fontFamily\n      });\n      elValue.node.classList.add(\"apexcharts-datalabel-value\");\n      dataLabelsGroup.add(elValue);\n    }\n    return dataLabelsGroup;\n  }\n  /**\n   *\n   * @param {string} name - The name of the series\n   * @param {string} val - The value of that series\n   * @param {any} el - Optional el (indicates which series was hovered/clicked). If this param is not present, means we need to show total\n   * @param {Record<string, any>} labelsConfig\n   */\n  printInnerLabels(labelsConfig, name2, val, el) {\n    const w = this.w;\n    let labelColor;\n    if (el) {\n      if (labelsConfig.name.color === void 0) {\n        labelColor = w.globals.colors[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n      } else {\n        labelColor = labelsConfig.name.color;\n      }\n    } else {\n      if (w.seriesData.series.length > 1 && labelsConfig.total.show) {\n        labelColor = labelsConfig.total.color;\n      }\n    }\n    const elLabel = w.dom.baseEl.querySelector(\".apexcharts-datalabel-label\");\n    const elValue = w.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");\n    const lbFormatter = labelsConfig.value.formatter;\n    val = lbFormatter(val, w);\n    if (!el && typeof labelsConfig.total.formatter === \"function\") {\n      val = labelsConfig.total.formatter(w);\n    }\n    const isTotal = name2 === labelsConfig.total.label;\n    name2 = !this.donutDataLabels.total.label ? \"\" : labelsConfig.name.formatter(name2, isTotal, w);\n    if (elLabel !== null) {\n      elLabel.textContent = name2;\n    }\n    if (elValue !== null) {\n      elValue.textContent = val;\n    }\n    if (elLabel !== null) {\n      const elLabelEl = (\n        /** @type {HTMLElement} */\n        elLabel\n      );\n      elLabelEl.style.fill = labelColor;\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} dataLabelsConfig\n   */\n  printDataLabelsInner(el, dataLabelsConfig) {\n    const w = this.w;\n    const val = el.getAttribute(\"data:value\");\n    const name2 = w.seriesData.seriesNames[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n    if (w.seriesData.series.length > 1) {\n      this.printInnerLabels(dataLabelsConfig, name2, val, el);\n    }\n    const dataLabelsGroup = w.dom.baseEl.querySelector(\n      \".apexcharts-datalabels-group\"\n    );\n    if (dataLabelsGroup !== null) {\n      const dataLabelsGroupEl = (\n        /** @type {HTMLElement} */\n        dataLabelsGroup\n      );\n      dataLabelsGroupEl.style.opacity = \"1\";\n    }\n  }\n  /**\n   * @param {any} parent\n   */\n  drawSpokes(parent) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const spokeConfig = w.config.plotOptions.polarArea.spokes;\n    if (spokeConfig.strokeWidth === 0) return;\n    const spokes = [];\n    const angleDivision = 360 / w.seriesData.series.length;\n    for (let i = 0; i < w.seriesData.series.length; i++) {\n      spokes.push(\n        Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w.globals.radialSize,\n          w.config.plotOptions.pie.startAngle + angleDivision * i\n        )\n      );\n    }\n    spokes.forEach((p, i) => {\n      const line = graphics.drawLine(\n        p.x,\n        p.y,\n        this.centerX,\n        this.centerY,\n        Array.isArray(spokeConfig.connectorColors) ? spokeConfig.connectorColors[i] : spokeConfig.connectorColors\n      );\n      parent.add(line);\n    });\n  }\n  revertDataLabelsInner() {\n    const w = this.w;\n    if (this.donutDataLabels.show) {\n      const dataLabelsGroup = w.dom.Paper.findOne(\n        `.apexcharts-datalabels-group`\n      );\n      const dataLabels = this.renderInnerDataLabels(\n        dataLabelsGroup,\n        this.donutDataLabels,\n        {\n          hollowSize: this.donutSize,\n          centerX: this.centerX,\n          centerY: this.centerY,\n          opacity: this.donutDataLabels.show\n        }\n      );\n      const elPie = w.dom.Paper.findOne(\n        \".apexcharts-radialbar, .apexcharts-pie\"\n      );\n      elPie.add(dataLabels);\n    }\n  }\n}\nclass Radar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.chartType = this.w.config.chart.type;\n    this.initialAnim = this.w.config.chart.animations.enabled;\n    this.dynamicAnim = this.initialAnim && this.w.config.chart.animations.dynamicAnimation.enabled;\n    this.animDur = 0;\n    this.graphics = new Graphics(this.w);\n    this.lineColorArr = w.globals.stroke.colors !== void 0 ? w.globals.stroke.colors : w.globals.colors;\n    this.defaultSize = w.globals.svgHeight < w.globals.svgWidth ? w.layout.gridHeight : w.layout.gridWidth;\n    this.isLog = w.config.yaxis[0].logarithmic;\n    this.logBase = w.config.yaxis[0].logBase;\n    this.coreUtils = new CoreUtils(this.w);\n    this.maxValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, w.globals.maxY, 0) : w.globals.maxY;\n    this.minValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, this.w.globals.minY, 0) : w.globals.minY;\n    this.polygons = w.config.plotOptions.radar.polygons;\n    this.strokeWidth = w.config.stroke.show ? w.config.stroke.width : 0;\n    this.size = this.defaultSize / 2.1 - this.strokeWidth - w.config.chart.dropShadow.blur;\n    if (w.config.xaxis.labels.show) {\n      this.size = this.size - w.layout.xAxisLabelsWidth / 1.75;\n    }\n    if (w.config.plotOptions.radar.size !== void 0) {\n      this.size = w.config.plotOptions.radar.size;\n    }\n    this.dataRadiusOfPercent = /** @type {any} */\n    [];\n    this.dataRadius = /** @type {any} */\n    [];\n    this.angleArr = /** @type {any} */\n    [];\n    this.dataPointsLen = 0;\n    this.disAngle = 0;\n    this.yaxisLabelsTextsPos = [];\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const fill = new Fill(this.w);\n    const allSeries = [];\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (series.length) {\n      this.dataPointsLen = series[w.globals.maxValsInArrayIndex].length;\n    }\n    this.disAngle = Math.PI * 2 / this.dataPointsLen;\n    const halfW = w.layout.gridWidth / 2;\n    const halfH = w.layout.gridHeight / 2;\n    const translateX = halfW + w.config.plotOptions.radar.offsetX;\n    const translateY = halfH + w.config.plotOptions.radar.offsetY;\n    const ret = this.graphics.group({\n      class: \"apexcharts-radar-series apexcharts-plot-series\",\n      transform: `translate(${translateX || 0}, ${translateY || 0})`\n    });\n    let dataPointsPos = [];\n    let elPointsMain = null;\n    let elDataPointsMain = null;\n    this.yaxisLabels = this.graphics.group({\n      class: \"apexcharts-yaxis\"\n    });\n    series.forEach((s, i) => {\n      const longestSeries = s.length === w.globals.dataPoints;\n      const elSeries = this.graphics.group().attr({\n        class: `apexcharts-series`,\n        \"data:longestSeries\": longestSeries,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      this.dataRadiusOfPercent[i] = [];\n      this.dataRadius[i] = [];\n      this.angleArr[i] = [];\n      s.forEach((dv, j) => {\n        const range = Math.abs(this.maxValue - this.minValue);\n        dv = dv - this.minValue;\n        if (this.isLog) {\n          dv = this.coreUtils.getLogVal(this.logBase, dv, 0);\n        }\n        this.dataRadiusOfPercent[i][j] = dv / range;\n        this.dataRadius[i][j] = this.dataRadiusOfPercent[i][j] * this.size;\n        this.angleArr[i][j] = j * this.disAngle;\n      });\n      dataPointsPos = this.getDataPointsPos(\n        this.dataRadius[i],\n        this.angleArr[i]\n      );\n      const paths = this.createPaths(dataPointsPos, {\n        x: 0,\n        y: 0\n      });\n      elPointsMain = this.graphics.group({\n        class: \"apexcharts-series-markers-wrap apexcharts-element-hidden\"\n      });\n      elDataPointsMain = this.graphics.group({\n        class: `apexcharts-datalabels`,\n        \"data:realIndex\": i\n      });\n      w.globals.delayedElements.push({\n        el: elPointsMain.node,\n        index: i\n      });\n      const defaultRenderedPathOptions = {\n        i,\n        realIndex: i,\n        animationDelay: i,\n        initialSpeed: w.config.chart.animations.speed,\n        dataChangeSpeed: w.config.chart.animations.dynamicAnimation.speed,\n        className: `apexcharts-radar`,\n        shouldClipToGrid: false,\n        bindEventsOnPaths: false,\n        stroke: w.globals.stroke.colors[i],\n        strokeLineCap: w.config.stroke.lineCap\n      };\n      let pathFrom = null;\n      if (w.globals.previousPaths.length > 0) {\n        pathFrom = this.getPreviousPath(i);\n      }\n      for (let p = 0; p < paths.linePathsTo.length; p++) {\n        const renderedLinePath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.linePathsFrom[p] : pathFrom,\n          pathTo: paths.linePathsTo[p],\n          strokeWidth: Array.isArray(this.strokeWidth) ? this.strokeWidth[i] : this.strokeWidth,\n          fill: \"none\",\n          drawShadow: false\n        }));\n        elSeries.add(renderedLinePath);\n        const pathFill = fill.fillPath({\n          seriesNumber: i\n        });\n        const renderedAreaPath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.areaPathsFrom[p] : pathFrom,\n          pathTo: paths.areaPathsTo[p],\n          strokeWidth: 0,\n          fill: pathFill,\n          drawShadow: false,\n          // Radial mask: the area fill blooms outward from the radar's center\n          // (in this group's local coords) instead of the default L→R rect wipe.\n          drawMask: { type: \"radial\", cx: 0, cy: 0, r: this.size }\n        }));\n        if (w.config.chart.dropShadow.enabled) {\n          const filters = new Filters(this.w);\n          const shadow = w.config.chart.dropShadow;\n          filters.dropShadow(\n            renderedAreaPath,\n            Object.assign({}, shadow, { noUserSpaceOnUse: true }),\n            i\n          );\n        }\n        elSeries.add(renderedAreaPath);\n      }\n      s.forEach((sj, j) => {\n        const markers = new Markers(this.w, this.ctx);\n        const opts = markers.getMarkerConfig({\n          cssClass: \"apexcharts-marker\",\n          seriesIndex: i,\n          dataPointIndex: j\n        });\n        const point = this.graphics.drawMarker(\n          dataPointsPos[j].x,\n          dataPointsPos[j].y,\n          opts\n        );\n        point.attr(\"rel\", j);\n        point.attr(\"j\", j);\n        point.attr(\"index\", i);\n        point.node.setAttribute(\"default-marker-size\", opts.pSize);\n        const elPointsWrap = this.graphics.group({\n          class: \"apexcharts-series-markers\"\n        });\n        if (elPointsWrap) {\n          elPointsWrap.add(point);\n        }\n        elPointsMain.add(elPointsWrap);\n        elSeries.add(elPointsMain);\n        const dataLabelsConfig = w.config.dataLabels;\n        if (dataLabelsConfig.enabled) {\n          const text = dataLabelsConfig.formatter(w.seriesData.series[i][j], {\n            seriesIndex: i,\n            dataPointIndex: j,\n            w\n          });\n          dataLabels.plotDataLabelsText({\n            x: dataPointsPos[j].x,\n            y: dataPointsPos[j].y,\n            text,\n            textAnchor: \"middle\",\n            i,\n            j: i,\n            parent: elDataPointsMain,\n            offsetCorrection: false,\n            dataLabelsConfig: __spreadValues({}, dataLabelsConfig)\n          });\n        }\n        elSeries.add(elDataPointsMain);\n      });\n      allSeries.push(elSeries);\n    });\n    this.drawPolygons({\n      parent: ret\n    });\n    if (w.config.xaxis.labels.show) {\n      const xaxisTexts = this.drawXAxisTexts();\n      ret.add(xaxisTexts);\n    }\n    allSeries.forEach((elS) => {\n      ret.add(elS);\n    });\n    ret.add(this.yaxisLabels);\n    return ret;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawPolygons(opts) {\n    const w = this.w;\n    const { parent } = opts;\n    const helpers = new CircularChartsHelpers(this.w);\n    const yaxisTexts = w.globals.yAxisScale[0].result.reverse();\n    const layers = yaxisTexts.length;\n    const radiusSizes = [];\n    const layerDis = this.size / (layers - 1);\n    for (let i = 0; i < layers; i++) {\n      radiusSizes[i] = layerDis * i;\n    }\n    radiusSizes.reverse();\n    const polygonStrings = [];\n    const lines = [];\n    radiusSizes.forEach((radiusSize, r) => {\n      const polygon = Utils$1.getPolygonPos(radiusSize, this.dataPointsLen);\n      let string = \"\";\n      polygon.forEach((p, i) => {\n        if (r === 0) {\n          const line = this.graphics.drawLine(\n            p.x,\n            p.y,\n            0,\n            0,\n            Array.isArray(this.polygons.connectorColors) ? this.polygons.connectorColors[i] : this.polygons.connectorColors\n          );\n          lines.push(line);\n        }\n        if (i === 0) {\n          this.yaxisLabelsTextsPos.push({\n            x: p.x,\n            y: p.y\n          });\n        }\n        string += p.x + \",\" + p.y + \" \";\n      });\n      polygonStrings.push(string);\n    });\n    polygonStrings.forEach((p, i) => {\n      const strokeColors = this.polygons.strokeColors;\n      const strokeWidth = this.polygons.strokeWidth;\n      const polygon = this.graphics.drawPolygon(\n        p,\n        Array.isArray(strokeColors) ? strokeColors[i] : strokeColors,\n        Array.isArray(strokeWidth) ? strokeWidth[i] : strokeWidth,\n        w.globals.radarPolygons.fill.colors[i]\n      );\n      parent.add(polygon);\n    });\n    lines.forEach((l) => {\n      parent.add(l);\n    });\n    if (w.config.yaxis[0].show) {\n      this.yaxisLabelsTextsPos.forEach(\n        (p, i) => {\n          const yText = helpers.drawYAxisTexts(p.x, p.y, i, yaxisTexts[i]);\n          this.yaxisLabels.add(yText);\n        }\n      );\n    }\n  }\n  drawXAxisTexts() {\n    const w = this.w;\n    const xaxisLabelsConfig = w.config.xaxis.labels;\n    const elXAxisWrap = this.graphics.group({\n      class: \"apexcharts-xaxis\"\n    });\n    const polygonPos = Utils$1.getPolygonPos(this.size, this.dataPointsLen);\n    w.labelData.labels.forEach((label, i) => {\n      const formatter = w.config.xaxis.labels.formatter;\n      const dataLabels = new DataLabels(this.w, this.ctx);\n      if (polygonPos[i]) {\n        const textPos = this.getTextPos(polygonPos[i], this.size);\n        const text = formatter(label, {\n          seriesIndex: -1,\n          dataPointIndex: i,\n          w\n        });\n        const dataLabelText = dataLabels.plotDataLabelsText({\n          x: textPos.newX,\n          y: textPos.newY,\n          text,\n          textAnchor: textPos.textAnchor,\n          i,\n          j: i,\n          parent: elXAxisWrap,\n          className: \"apexcharts-xaxis-label\",\n          color: Array.isArray(xaxisLabelsConfig.style.colors) && xaxisLabelsConfig.style.colors[i] ? xaxisLabelsConfig.style.colors[i] : \"#a8a8a8\",\n          dataLabelsConfig: __spreadValues({\n            textAnchor: textPos.textAnchor,\n            dropShadow: { enabled: false }\n          }, xaxisLabelsConfig),\n          offsetCorrection: false\n        });\n        dataLabelText.on(\"click\", (e) => {\n          if (typeof w.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w, {\n              labelIndex: i\n            });\n            w.config.chart.events.xAxisLabelClick(e, this.ctx, opts);\n          }\n        });\n      }\n    });\n    return elXAxisWrap;\n  }\n  /**\n   * @param {Array<Record<string, any>>} pos\n   * @param {Record<string, any>} origin\n   */\n  createPaths(pos, origin) {\n    const linePathsTo = [];\n    let linePathsFrom = [];\n    const areaPathsTo = [];\n    let areaPathsFrom = [];\n    if (pos.length) {\n      linePathsFrom = [this.graphics.move(origin.x, origin.y)];\n      areaPathsFrom = [this.graphics.move(origin.x, origin.y)];\n      let linePathTo = this.graphics.move(pos[0].x, pos[0].y);\n      let areaPathTo = this.graphics.move(pos[0].x, pos[0].y);\n      pos.forEach((p, i) => {\n        linePathTo += this.graphics.line(p.x, p.y);\n        areaPathTo += this.graphics.line(p.x, p.y);\n        if (i === pos.length - 1) {\n          linePathTo += \"Z\";\n          areaPathTo += \"Z\";\n        }\n      });\n      linePathsTo.push(linePathTo);\n      areaPathsTo.push(areaPathTo);\n    }\n    return {\n      linePathsFrom,\n      linePathsTo,\n      areaPathsFrom,\n      areaPathsTo\n    };\n  }\n  /**\n   * @param {Record<string, any>} pos\n   * @param {number} polygonSize\n   */\n  getTextPos(pos, polygonSize) {\n    const limit = 10;\n    let textAnchor = \"middle\";\n    let newX = pos.x;\n    let newY = pos.y;\n    if (Math.abs(pos.x) >= limit) {\n      if (pos.x > 0) {\n        textAnchor = \"start\";\n        newX += 10;\n      } else if (pos.x < 0) {\n        textAnchor = \"end\";\n        newX -= 10;\n      }\n    } else {\n      textAnchor = \"middle\";\n    }\n    if (Math.abs(pos.y) >= polygonSize - limit) {\n      if (pos.y < 0) {\n        newY -= 10;\n      } else if (pos.y > 0) {\n        newY += 10;\n      }\n    }\n    return {\n      textAnchor,\n      newX,\n      newY\n    };\n  }\n  /**\n   * @param {number} realIndex\n   */\n  getPreviousPath(realIndex) {\n    const w = this.w;\n    let pathFrom = null;\n    for (let pp = 0; pp < w.globals.previousPaths.length; pp++) {\n      const gpp = w.globals.previousPaths[pp];\n      if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        if (typeof w.globals.previousPaths[pp].paths[0] !== \"undefined\") {\n          pathFrom = w.globals.previousPaths[pp].paths[0].d;\n        }\n      }\n    }\n    return pathFrom;\n  }\n  /**\n   * @param {any[]} dataRadiusArr\n   * @param {any[]} angleArr\n   */\n  getDataPointsPos(dataRadiusArr, angleArr, dataPointsLen = this.dataPointsLen) {\n    dataRadiusArr = dataRadiusArr || [];\n    angleArr = angleArr || [];\n    const dataPointsPosArray = [];\n    for (let j = 0; j < dataPointsLen; j++) {\n      const curPointPos = {};\n      curPointPos.x = dataRadiusArr[j] * Math.sin(angleArr[j]);\n      curPointPos.y = -dataRadiusArr[j] * Math.cos(angleArr[j]);\n      dataPointsPosArray.push(curPointPos);\n    }\n    return dataPointsPosArray;\n  }\n}\nclass Radial extends Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    super(w, ctx);\n    this.ctx = ctx;\n    this.w = w;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.startAngle = w.config.plotOptions.radialBar.startAngle;\n    this.endAngle = w.config.plotOptions.radialBar.endAngle;\n    this.totalAngle = Math.abs(\n      w.config.plotOptions.radialBar.endAngle - w.config.plotOptions.radialBar.startAngle\n    );\n    this.trackStartAngle = w.config.plotOptions.radialBar.track.startAngle;\n    this.trackEndAngle = w.config.plotOptions.radialBar.track.endAngle;\n    this.barLabels = this.w.config.plotOptions.radialBar.barLabels;\n    this.donutDataLabels = this.w.config.plotOptions.radialBar.dataLabels;\n    this.radialDataLabels = this.donutDataLabels;\n    if (!this.trackStartAngle) this.trackStartAngle = this.startAngle;\n    if (!this.trackEndAngle) this.trackEndAngle = this.endAngle;\n    if (this.endAngle === 360) this.endAngle = 359.99;\n    this.margin = parseInt(w.config.plotOptions.radialBar.track.margin, 10);\n    this.onBarLabelClick = this.onBarLabelClick.bind(this);\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-radialbar\"\n    });\n    if (w.globals.noData) return ret;\n    const elSeries = graphics.group();\n    const centerY = this.defaultSize / 2;\n    const centerX = w.layout.gridWidth / 2;\n    let size = this.defaultSize / 2.05;\n    if (!w.config.chart.sparkline.enabled) {\n      size = size - w.config.stroke.width - w.config.chart.dropShadow.blur;\n    }\n    const colorArr = w.globals.fill.colors;\n    const rb = w.config.plotOptions.radialBar;\n    const hasBands = Array.isArray(rb.bands) && rb.bands.length > 0;\n    const hideTrack = hasBands && rb.bandsStyle && rb.bandsStyle.hideTrackWhenPresent;\n    const isNeedleShape = rb.shape === \"needle\";\n    if (rb.track.show && !hideTrack) {\n      const elTracks = this.drawTracks({\n        size,\n        centerX,\n        centerY,\n        colorArr,\n        series\n      });\n      elSeries.add(elTracks);\n    }\n    if (hasBands) {\n      const elBands = this.drawBands({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      elSeries.add(elBands);\n    }\n    const elG = this.drawArcs({\n      size,\n      centerX,\n      centerY,\n      colorArr,\n      series,\n      // When `needle.showValueArc` is true, render both the filled value-arc\n      // and the needle on top — required for gauges that want a progress\n      // ring with a pointer indicator (default still hides the arc when in\n      // needle shape, preserving prior behavior).\n      skipValueArc: isNeedleShape && !((_a = rb.needle) == null ? void 0 : _a.showValueArc)\n    });\n    if (rb.ticks && rb.ticks.show) {\n      const elTicks = this.drawTicks({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      const isInitialMount = this.initialAnim && !w.globals.dataChanged && !w.globals.resized;\n      if (isInitialMount && Environment.isBrowser() && w.globals.shouldAnimate) {\n        const ticksNode = elTicks.node;\n        ticksNode.style.opacity = \"0\";\n        ticksNode.style.transition = \"opacity 280ms ease-out\";\n        const sweepDur = w.config.chart.animations.speed || 800;\n        setTimeout(() => {\n          ticksNode.style.opacity = \"1\";\n        }, sweepDur);\n      }\n      elSeries.add(elTicks);\n    }\n    if (isNeedleShape) {\n      const elNeedle = this.drawNeedle({\n        size,\n        centerX,\n        centerY,\n        series\n      });\n      elSeries.add(elNeedle);\n    }\n    let totalAngle = 360;\n    if (w.config.plotOptions.radialBar.startAngle < 0) {\n      totalAngle = this.totalAngle;\n    }\n    const angleRatio = (360 - totalAngle) / 360;\n    w.globals.radialSize = size - size * angleRatio;\n    if (this.radialDataLabels.value.show) {\n      const offset = Math.max(\n        this.radialDataLabels.value.offsetY,\n        this.radialDataLabels.name.offsetY\n      );\n      w.globals.radialSize += offset * angleRatio;\n    }\n    elSeries.add(elG.g);\n    if (w.config.plotOptions.radialBar.hollow.position === \"front\") {\n      elG.g.add(elG.elHollow);\n      if (elG.dataLabels) {\n        elG.g.add(elG.dataLabels);\n      }\n    }\n    ret.add(elSeries);\n    return ret;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawTracks(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const g = graphics.group({\n      class: \"apexcharts-tracks\"\n    });\n    const filters = new Filters(this.w);\n    const fill = new Fill(this.w);\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    for (let i = 0; i < opts.series.length; i++) {\n      const elRadialBarTrack = graphics.group({\n        class: \"apexcharts-radialbar-track apexcharts-track\"\n      });\n      g.add(elRadialBarTrack);\n      elRadialBarTrack.attr({\n        rel: i + 1\n      });\n      opts.size = opts.size - strokeWidth - this.margin;\n      const trackConfig = w.config.plotOptions.radialBar.track;\n      const pathFill = fill.fillPath({\n        seriesNumber: 0,\n        size: opts.size,\n        fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i] : trackConfig.background,\n        solid: true\n      });\n      const startAngle = this.trackStartAngle;\n      let endAngle = this.trackEndAngle;\n      if (Math.abs(endAngle) + Math.abs(startAngle) >= 360)\n        endAngle = 360 - Math.abs(this.startAngle) - 0.1;\n      const elPath = graphics.drawPath({\n        d: \"\",\n        stroke: pathFill,\n        strokeWidth: strokeWidth * parseInt(trackConfig.strokeWidth, 10) / 100,\n        fill: \"none\",\n        strokeOpacity: trackConfig.opacity,\n        classes: \"apexcharts-radialbar-area\"\n      });\n      if (trackConfig.dropShadow.enabled) {\n        const shadow = trackConfig.dropShadow;\n        filters.dropShadow(elPath, shadow);\n      }\n      elRadialBarTrack.add(elPath);\n      elPath.attr(\"id\", \"apexcharts-radialbarTrack-\" + i);\n      this.animatePaths(elPath, {\n        centerX: opts.centerX,\n        centerY: opts.centerY,\n        endAngle,\n        startAngle,\n        size: opts.size,\n        i,\n        totalItems: 2,\n        animBeginArr: 0,\n        dur: 0,\n        isTrack: true\n      });\n    }\n    return g;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawArcs(opts) {\n    var _a;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    const filters = new Filters(this.w);\n    const g = graphics.group();\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    let hollowFillID = w.config.plotOptions.radialBar.hollow.background;\n    const hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2;\n    const hollowRadius = hollowSize - w.config.plotOptions.radialBar.hollow.margin;\n    if (w.config.plotOptions.radialBar.hollow.image !== void 0) {\n      hollowFillID = this.drawHollowImage(opts, g, hollowSize, hollowFillID);\n    }\n    const elHollow = this.drawHollow({\n      size: hollowRadius,\n      centerX: opts.centerX,\n      centerY: opts.centerY,\n      fill: hollowFillID ? hollowFillID : \"transparent\"\n    });\n    if (w.config.plotOptions.radialBar.hollow.dropShadow.enabled) {\n      const shadow = w.config.plotOptions.radialBar.hollow.dropShadow;\n      filters.dropShadow(elHollow, shadow);\n    }\n    let shown = 1;\n    if (!this.radialDataLabels.total.show && w.seriesData.series.length > 1) {\n      shown = 0;\n    }\n    let dataLabels = null;\n    if (this.radialDataLabels.show) {\n      const dataLabelsGroup = w.dom.Paper.findOne(\n        `.apexcharts-datalabels-group`\n      );\n      dataLabels = this.renderInnerDataLabels(\n        dataLabelsGroup,\n        this.radialDataLabels,\n        {\n          hollowSize,\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          opacity: shown\n        }\n      );\n    }\n    if (w.config.plotOptions.radialBar.hollow.position === \"back\") {\n      g.add(elHollow);\n      if (dataLabels) {\n        g.add(dataLabels);\n      }\n    }\n    let reverseLoop = false;\n    if (w.config.plotOptions.radialBar.inverseOrder) {\n      reverseLoop = true;\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i >= 0 : i < opts.series.length; reverseLoop ? i-- : i++) {\n      const elRadialBarArc = graphics.group({\n        class: `apexcharts-series apexcharts-radial-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i])\n      });\n      g.add(elRadialBarArc);\n      elRadialBarArc.attr({\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      Series.addCollapsedClassToSeries(this.w, elRadialBarArc, i);\n      opts.size = opts.size - strokeWidth - this.margin;\n      const pathFill = fill.fillPath({\n        seriesNumber: i,\n        size: opts.size,\n        value: opts.series[i]\n      });\n      const startAngle = this.startAngle;\n      let prevStartAngle;\n      const rb = w.config.plotOptions.radialBar;\n      const domainMin = typeof rb.min === \"number\" ? rb.min : 0;\n      const domainMax = typeof rb.max === \"number\" ? rb.max : 100;\n      const domainSpan = domainMax === domainMin ? 1 : domainMax - domainMin;\n      const valueToFraction = (v) => {\n        const clamped = Math.min(Math.max(v, domainMin), domainMax);\n        return Math.max(0, (clamped - domainMin) / domainSpan);\n      };\n      const dataValue = valueToFraction(Utils$1.negToZero(opts.series[i]));\n      let endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle;\n      let prevEndAngle;\n      if (w.globals.dataChanged) {\n        prevStartAngle = this.startAngle;\n        prevEndAngle = Math.round(\n          this.totalAngle * valueToFraction(Utils$1.negToZero(w.globals.previousPaths[i]))\n        ) + prevStartAngle;\n      }\n      const currFullAngle = Math.abs(endAngle) + Math.abs(startAngle);\n      if (currFullAngle > 360) {\n        endAngle = endAngle - 0.01;\n      }\n      const prevFullAngle = Math.abs(prevEndAngle) + Math.abs(prevStartAngle);\n      if (prevFullAngle > 360) {\n        prevEndAngle = prevEndAngle - 0.01;\n      }\n      const angle = endAngle - startAngle;\n      const dashArray = Array.isArray(w.config.stroke.dashArray) ? w.config.stroke.dashArray[i] : w.config.stroke.dashArray;\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i, 0) : null;\n      const morphFromType = morphActive ? this.ctx.morphTypeChange.getFromType() : null;\n      const morphFromFilled = !!morphFrom && (morphFromType === \"bar\" || morphFromType === \"funnel\" || morphFromType === \"pyramid\" || morphFromType === \"pie\" || morphFromType === \"donut\" || morphFromType === \"polarArea\");\n      const elPath = graphics.drawPath({\n        d: morphFrom || \"\",\n        stroke: morphFromFilled ? \"transparent\" : opts.skipValueArc ? \"transparent\" : pathFill,\n        strokeWidth: morphFromFilled ? 0 : opts.skipValueArc ? 0 : strokeWidth,\n        fill: morphFromFilled ? pathFill : \"none\",\n        fillOpacity: w.config.fill.opacity,\n        classes: \"apexcharts-radialbar-area apexcharts-radialbar-slice-\" + i,\n        strokeDashArray: dashArray\n      });\n      const radialMidAngle = startAngle + angle / 2;\n      const radialArcCenter = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        opts.size,\n        radialMidAngle\n      );\n      Graphics.setAttrs(elPath.node, {\n        \"data:angle\": angle,\n        \"data:value\": opts.series[i],\n        \"data:cx\": radialArcCenter.x,\n        \"data:cy\": radialArcCenter.y\n      });\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i);\n      }\n      filters.setSelectionFilter(elPath, 0, i);\n      this.addListeners(elPath, this.radialDataLabels);\n      elRadialBarArc.add(elPath);\n      elPath.attr({\n        index: 0,\n        j: i\n      });\n      if (this.barLabels.enabled) {\n        const barStartCords = Utils$1.polarToCartesian(\n          opts.centerX,\n          opts.centerY,\n          opts.size,\n          startAngle\n        );\n        const text = this.barLabels.formatter(w.seriesData.seriesNames[i], {\n          seriesIndex: i,\n          w\n        });\n        const classes = [\"apexcharts-radialbar-label\"];\n        if (!this.barLabels.onClick) {\n          classes.push(\"apexcharts-no-click\");\n        }\n        let textColor = this.barLabels.useSeriesColors ? w.globals.colors[i] : w.config.chart.foreColor;\n        if (!textColor) {\n          textColor = w.config.chart.foreColor;\n        }\n        const x = barStartCords.x + this.barLabels.offsetX;\n        const y = barStartCords.y + this.barLabels.offsetY;\n        const elText = graphics.drawText({\n          x,\n          y,\n          text,\n          textAnchor: \"end\",\n          dominantBaseline: \"middle\",\n          fontFamily: this.barLabels.fontFamily,\n          fontWeight: this.barLabels.fontWeight,\n          fontSize: this.barLabels.fontSize,\n          foreColor: textColor,\n          cssClass: classes.join(\" \")\n        });\n        elText.on(\"click\", this.onBarLabelClick);\n        elText.attr({\n          rel: i + 1\n        });\n        if (startAngle !== 0) {\n          elText.attr({\n            \"transform-origin\": `${x} ${y}`,\n            transform: `rotate(${startAngle} 0 0)`\n          });\n        }\n        elRadialBarArc.add(elText);\n      }\n      let dur = 0;\n      if (this.initialAnim && !w.globals.resized && !w.globals.dataChanged) {\n        dur = w.config.chart.animations.speed;\n      }\n      if (w.globals.dataChanged) {\n        dur = w.config.chart.animations.dynamicAnimation.speed;\n      }\n      this.animDur = dur / (opts.series.length * 1.2) + this.animDur;\n      this.animBeginArr.push(this.animDur);\n      if (morphActive && morphFrom) {\n        const morphSpeed = this.ctx.morphTypeChange.getSpeed();\n        const actualArcD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: opts.size\n        });\n        if (morphFromFilled) {\n          const targetD = this.ctx.morphTypeChange.buildRingSegmentPath(\n            opts.centerX,\n            opts.centerY,\n            opts.size,\n            strokeWidth,\n            startAngle,\n            startAngle + angle\n          );\n          elPath.animate(morphSpeed).plot(targetD, \"polygons\").after(\n            /** @this {any} */\n            function() {\n              this.attr({\n                d: actualArcD,\n                fill: \"none\",\n                stroke: opts.skipValueArc ? \"transparent\" : pathFill,\n                \"stroke-width\": opts.skipValueArc ? 0 : strokeWidth\n              });\n            }\n          );\n        } else {\n          elPath.animate(morphSpeed).plot(actualArcD, \"polygons\").attr({ \"stroke-width\": strokeWidth });\n        }\n      } else {\n        this.animatePaths(elPath, {\n          centerX: opts.centerX,\n          centerY: opts.centerY,\n          endAngle,\n          startAngle,\n          prevEndAngle,\n          prevStartAngle,\n          size: opts.size,\n          i,\n          totalItems: 2,\n          animBeginArr: this.animBeginArr,\n          dur,\n          shouldSetPrevPaths: true\n        });\n      }\n    }\n    return {\n      g,\n      elHollow,\n      dataLabels\n    };\n  }\n  /**\n   * Map a domain value (between `min` and `max`) to the corresponding angle\n   * in the gauge's `startAngle`..`endAngle` range. Values outside the\n   * domain are clamped.\n   *\n   * @param {number} value\n   * @returns {number}\n   */\n  _angleAtValue(value) {\n    const rb = this.w.config.plotOptions.radialBar;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const safeMax = max === min ? min + 1 : max;\n    const clamped = Math.max(min, Math.min(safeMax, Number(value)));\n    const t = (clamped - min) / (safeMax - min);\n    return this.startAngle + t * (this.endAngle - this.startAngle);\n  }\n  /**\n   * Build an SVG arc path from `startAngle` to `endAngle` at radius `r`\n   * around `(cx, cy)`. Angles are in degrees, with 0° at the top.\n   * Used by drawBands; mirrors the `M ... A ... ` form used elsewhere.\n   *\n   * @param {number} cx\n   * @param {number} cy\n   * @param {number} r\n   * @param {number} startAngle\n   * @param {number} endAngle\n   * @returns {string}\n   */\n  _describeArc(cx, cy, r, startAngle, endAngle) {\n    const start = Utils$1.polarToCartesian(cx, cy, r, endAngle);\n    const end = Utils$1.polarToCartesian(cx, cy, r, startAngle);\n    const sweep = endAngle - startAngle;\n    const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n    return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 0 ${end.x} ${end.y}`;\n  }\n  /**\n   * Draw threshold bands as colored arc segments along the gauge arc.\n   * Bands sit behind the value-arc and tick marks. Used for gauges that\n   * indicate ranges like 0-30 critical / 30-70 warning / 70-100 healthy.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawBands(opts) {\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const bands = rb.bands || [];\n    const g = graphics.group({\n      class: \"apexcharts-gauge-bands\"\n    });\n    const strokeWidth = this.getStrokeWidth(opts);\n    const radius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const bandStroke = strokeWidth * parseInt(rb.bandsStyle.strokeWidth, 10) / 100;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const gapDeg = max === min ? 0 : (rb.bandsStyle.gap || 0) * ((this.endAngle - this.startAngle) / (max - min));\n    for (let b = 0; b < bands.length; b++) {\n      const band = bands[b];\n      if (band.from === void 0 || band.to === void 0) continue;\n      const a1 = this._angleAtValue(band.from);\n      const a2 = this._angleAtValue(band.to);\n      const startA = Math.min(a1, a2) + gapDeg / 2;\n      const endA = Math.max(a1, a2) - gapDeg / 2;\n      if (endA - startA <= 0) continue;\n      const elBand = graphics.drawPath({\n        d: this._describeArc(opts.centerX, opts.centerY, radius, startA, endA),\n        stroke: band.color || \"#ccc\",\n        strokeWidth: bandStroke,\n        fill: \"none\",\n        strokeLinecap: rb.bandsStyle.linecap || \"butt\",\n        classes: \"apexcharts-gauge-band\"\n      });\n      elBand.node.setAttribute(\"data-band-index\", String(b));\n      g.add(elBand);\n    }\n    return g;\n  }\n  /**\n   * Draw tick marks (major + minor) along the gauge arc, with optional\n   * value labels at each major tick.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawTicks(opts) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const ticks = rb.ticks;\n    const g = graphics.group({ class: \"apexcharts-gauge-ticks\" });\n    const strokeWidth = this.getStrokeWidth(opts);\n    const radius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const min = typeof rb.min === \"number\" ? rb.min : 0;\n    const max = typeof rb.max === \"number\" ? rb.max : 100;\n    const majorCount = Math.max(2, (_b = (_a = ticks.major) == null ? void 0 : _a.count) != null ? _b : 11);\n    const minorCount = Math.max(0, (_d = (_c = ticks.minor) == null ? void 0 : _c.count) != null ? _d : 0);\n    const drawTickAt = (value, cfg, isMajor) => {\n      var _a2, _b2, _c2;\n      const angle = this._angleAtValue(value);\n      const length = (_a2 = cfg.length) != null ? _a2 : 8;\n      const inner = cfg.placement === \"inside\" ? radius - length : radius;\n      const outer = cfg.placement === \"inside\" ? radius : radius + length;\n      const p1 = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        inner,\n        angle\n      );\n      const p2 = Utils$1.polarToCartesian(\n        opts.centerX,\n        opts.centerY,\n        outer,\n        angle\n      );\n      const line = graphics.drawLine(\n        p1.x,\n        p1.y,\n        p2.x,\n        p2.y,\n        cfg.color || (isMajor ? \"#666\" : \"#999\"),\n        0,\n        cfg.width || (isMajor ? 2 : 1)\n      );\n      g.add(line);\n      if (isMajor && ((_b2 = ticks.labels) == null ? void 0 : _b2.show)) {\n        const labelRadius = (cfg.placement === \"inside\" ? inner : outer) + (cfg.placement === \"inside\" ? -1 : 1) * ((_c2 = ticks.labels.offset) != null ? _c2 : 6);\n        const labelPos = Utils$1.polarToCartesian(\n          opts.centerX,\n          opts.centerY,\n          labelRadius,\n          angle\n        );\n        const labelText = typeof ticks.labels.formatter === \"function\" ? ticks.labels.formatter(value) : String(value);\n        const elText = graphics.drawText({\n          x: labelPos.x,\n          y: labelPos.y,\n          text: labelText,\n          textAnchor: \"middle\",\n          dominantBaseline: \"middle\",\n          fontFamily: ticks.labels.fontFamily,\n          fontSize: ticks.labels.fontSize,\n          fontWeight: ticks.labels.fontWeight,\n          foreColor: ticks.labels.color,\n          cssClass: \"apexcharts-gauge-tick-label\"\n        });\n        g.add(elText);\n      }\n    };\n    for (let m = 0; m < majorCount; m++) {\n      const t = m / (majorCount - 1);\n      const value = min + t * (max - min);\n      drawTickAt(value, ticks.major || {}, true);\n      if (m < majorCount - 1 && minorCount > 0) {\n        for (let n = 1; n <= minorCount; n++) {\n          const tMinor = (m + n / (minorCount + 1)) / (majorCount - 1);\n          const minorValue = min + tMinor * (max - min);\n          drawTickAt(minorValue, ticks.minor || {}, false);\n        }\n      }\n    }\n    return g;\n  }\n  /**\n   * Draw a rotating needle pointing at the current series value. Only\n   * called when `plotOptions.radialBar.shape === 'needle'`. The needle is\n   * a tapered polygon inside a `<g>` whose rotation transform is animated\n   * from `startAngle` to the value's angle.\n   *\n   * Renders a single needle for the first series value (gauge use case).\n   * Additional series are ignored — drilled-down multi-series gauges are\n   * out of scope for this iteration.\n   *\n   * @param {Record<string, any>} opts\n   */\n  drawNeedle(opts) {\n    var _a, _b, _c, _d, _e;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w.config.plotOptions.radialBar;\n    const cfg = rb.needle || {};\n    const g = graphics.group({ class: \"apexcharts-gauge-needle\" });\n    if (!opts.series || opts.series.length === 0) return g;\n    const strokeWidth = this.getStrokeWidth(opts);\n    const arcRadius = opts.size - strokeWidth / 2 - strokeWidth - this.margin;\n    const length = typeof cfg.length === \"string\" && cfg.length.endsWith(\"%\") ? arcRadius * parseInt(cfg.length, 10) / 100 : Number(cfg.length || arcRadius * 0.85);\n    const baseW = (_a = cfg.baseWidth) != null ? _a : 4;\n    const tipW = (_b = cfg.tipWidth) != null ? _b : 1;\n    const color = cfg.color || \"#333\";\n    const cx = opts.centerX;\n    const needleOffsetY = Number((_c = cfg.offsetY) != null ? _c : 0);\n    const cy = opts.centerY + needleOffsetY;\n    const path = `M ${cx + baseW / 2} ${cy} A ${baseW / 2} ${baseW / 2} 0 0 1 ${cx - baseW / 2} ${cy} L ${cx - tipW / 2} ${cy - length} L ${cx + tipW / 2} ${cy - length} Z`;\n    const elNeedle = graphics.drawPath({\n      d: path,\n      stroke: color,\n      strokeWidth: 0,\n      fill: color,\n      classes: \"apexcharts-gauge-needle-shape\"\n    });\n    g.add(elNeedle);\n    const value = Number(opts.series[0]);\n    const targetAngle = this._angleAtValue(value);\n    const isInitialMount = this.initialAnim && !w.globals.dataChanged && !w.globals.resized;\n    const ctx = (\n      /** @type {any} */\n      this.ctx\n    );\n    const fromAngle = typeof ctx._lastNeedleAngle === \"number\" ? ctx._lastNeedleAngle : this.startAngle;\n    ctx._lastNeedleAngle = targetAngle;\n    const shouldAnimate = Environment.isBrowser() && w.globals.shouldAnimate && (isInitialMount || w.globals.dataChanged);\n    if (shouldAnimate && fromAngle !== targetAngle) {\n      const node = g.node;\n      node.setAttribute(\"transform-origin\", `${cx} ${cy}`);\n      node.setAttribute(\"transform\", `rotate(${fromAngle})`);\n      const speed = ((_d = cfg.animation) == null ? void 0 : _d.duration) && Number(cfg.animation.duration) || cfg.animationSpeed && Number(cfg.animationSpeed) || ((_e = w.config.chart.animations.dynamicAnimation) == null ? void 0 : _e.speed) || w.config.chart.animations.speed || 800;\n      const c1 = 1.70158;\n      const c3 = c1 + 1;\n      const easeOutBack2 = (t) => 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);\n      const easeOutCubic2 = (t) => 1 - Math.pow(1 - t, 3);\n      const ease = isInitialMount ? easeOutBack2 : easeOutCubic2;\n      const startAt = performance.now();\n      const step = (now) => {\n        const t = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const angle = fromAngle + (targetAngle - fromAngle) * ease(t);\n        node.setAttribute(\"transform\", `rotate(${angle})`);\n        if (t < 1) BrowserAPIs.requestAnimationFrame(step);\n      };\n      BrowserAPIs.requestAnimationFrame(step);\n    } else {\n      g.attr({\n        \"transform-origin\": `${cx} ${cy}`,\n        transform: `rotate(${targetAngle})`\n      });\n    }\n    return g;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawHollow(opts) {\n    var _a;\n    const graphics = new Graphics(this.w);\n    const hollow = this.w.config.plotOptions.radialBar.hollow;\n    const circle = graphics.drawCircle(opts.size * 2);\n    const attrs = {\n      class: \"apexcharts-radialbar-hollow\",\n      cx: opts.centerX,\n      cy: opts.centerY,\n      r: opts.size,\n      fill: opts.fill\n    };\n    if (hollow.stroke || hollow.strokeDasharray) {\n      attrs.stroke = hollow.stroke || \"transparent\";\n      attrs[\"stroke-width\"] = (_a = hollow.strokeWidth) != null ? _a : 1;\n      if (hollow.strokeDasharray) {\n        attrs[\"stroke-dasharray\"] = hollow.strokeDasharray;\n      }\n    }\n    circle.attr(attrs);\n    return circle;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   * @param {any} g\n   * @param {number} hollowSize\n   * @param {string} hollowFillID\n   */\n  drawHollowImage(opts, g, hollowSize, hollowFillID) {\n    const w = this.w;\n    const fill = new Fill(this.w);\n    const randID = Utils$1.randomId();\n    const hollowFillImg = w.config.plotOptions.radialBar.hollow.image;\n    if (w.config.plotOptions.radialBar.hollow.imageClipped) {\n      fill.clippedImgArea({\n        width: hollowSize,\n        height: hollowSize,\n        image: hollowFillImg,\n        patternID: `pattern${w.globals.cuid}${randID}`\n      });\n      hollowFillID = `url(#pattern${w.globals.cuid}${randID})`;\n    } else {\n      const imgWidth = w.config.plotOptions.radialBar.hollow.imageWidth;\n      const imgHeight = w.config.plotOptions.radialBar.hollow.imageHeight;\n      if (imgWidth === void 0 && imgHeight === void 0) {\n        const image = w.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function(loader) {\n            this.move(\n              opts.centerX - loader.width / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - loader.height / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n          }\n        );\n        g.add(image);\n      } else {\n        const image = w.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function() {\n            this.move(\n              opts.centerX - imgWidth / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - imgHeight / 2 + w.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n            this.size(imgWidth, imgHeight);\n          }\n        );\n        g.add(image);\n      }\n    }\n    return hollowFillID;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getStrokeWidth(opts) {\n    const w = this.w;\n    return opts.size * (100 - parseInt(w.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin;\n  }\n  /**\n   * @param {Event} e\n   */\n  onBarLabelClick(e) {\n    var _a;\n    const target = (\n      /** @type {Element} */\n      e.target\n    );\n    const seriesIndex = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"\", 10) - 1;\n    const legendClick = this.barLabels.onClick;\n    const w = this.w;\n    if (legendClick) {\n      legendClick(w.seriesData.seriesNames[seriesIndex], { w, seriesIndex });\n    }\n  }\n}\nclass RangeBar extends Bar {\n  /**\n   * @param {any[]} series\n   * @param {number} seriesIndex\n   */\n  draw(series, seriesIndex) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n    const w = this.w;\n    const graphics = new Graphics(this.w);\n    this.rangeBarOptions = this.w.config.plotOptions.rangeBar;\n    this.series = series;\n    this.seriesRangeStart = w.rangeData.seriesRangeStart;\n    this.seriesRangeEnd = w.rangeData.seriesRangeEnd;\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-rangebar-series apexcharts-plot-series\"\n    });\n    for (let i = 0; i < series.length; i++) {\n      let x, y;\n      const realIndex = w.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i]\n      ) : i;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[realIndex]),\n        rel: i + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      let translationsIndex = 0;\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = /** @type {any} */\n        w.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      const initPositions = this.barHelpers.initialPositions(realIndex);\n      const {\n        y: initY,\n        zeroW,\n        // zeroW is the baseline where 0 meets x axis\n        x: initX,\n        zeroH\n        // zeroH is the baseline where 0 meets y axis\n      } = initPositions;\n      let barWidth = (_a = initPositions.barWidth) != null ? _a : 0;\n      let barHeight = (_b = initPositions.barHeight) != null ? _b : 0;\n      const yDivision = (_c = initPositions.yDivision) != null ? _c : 0;\n      const xDivision = (_d = initPositions.xDivision) != null ? _d : 0;\n      y = initY;\n      x = initX;\n      const elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-datalabels\",\n        \"data:realIndex\": realIndex\n      });\n      const elGoalsMarkers = graphics.group({\n        class: \"apexcharts-rangebar-goals-markers\"\n      });\n      for (let j = 0; j < w.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i, j, realIndex);\n        const y1 = this.seriesRangeStart[i][j];\n        const y2 = this.seriesRangeEnd[i][j];\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        let barXPosition = null;\n        let barYPosition = null;\n        const params = { x, y, strokeWidth, elSeries };\n        let seriesLen = this.seriesLen;\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          seriesLen = 1;\n        }\n        if (typeof /** @type {Record<string,any>} */\n        ((_e = w.config.series[i].data) == null ? void 0 : _e[j]) === \"undefined\") {\n          break;\n        }\n        if (this.isHorizontal) {\n          barYPosition = y + barHeight * /** @type {any} */\n          this.visibleI;\n          const srty = (yDivision - barHeight * seriesLen) / 2;\n          if (\n            /** @type {Record<string,any>} */\n            (_g = (_f = w.config.series[i].data) == null ? void 0 : _f[j]) == null ? void 0 : _g.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i,\n              j,\n              barYPosition,\n              srty,\n              barHeight,\n              yDivision,\n              initPositions\n            });\n            barHeight = positions.barHeight;\n            barYPosition = positions.barYPosition;\n          }\n          paths = this.drawRangeBarPaths(__spreadValues({\n            indexes: { i, j, realIndex },\n            barHeight,\n            barYPosition,\n            zeroW,\n            yDivision,\n            y1,\n            y2\n          }, params));\n          barWidth = paths.barWidth;\n        } else {\n          if (w.axisFlags.isXNumeric) {\n            x = (w.seriesData.seriesX[i][j] - w.globals.minX) / this.xRatio - barWidth / 2;\n          }\n          barXPosition = x + barWidth * /** @type {any} */\n          this.visibleI;\n          const srtx = (xDivision - barWidth * seriesLen) / 2;\n          if (\n            /** @type {Record<string,any>} */\n            (_i = (_h = w.config.series[i].data) == null ? void 0 : _h[j]) == null ? void 0 : _i.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i,\n              j,\n              barXPosition,\n              srtx,\n              barWidth,\n              xDivision,\n              initPositions\n            });\n            barWidth = positions.barWidth;\n            barXPosition = positions.barXPosition;\n          }\n          paths = this.drawRangeColumnPaths(__spreadValues({\n            indexes: { i, j, realIndex, translationsIndex },\n            barWidth,\n            barXPosition,\n            zeroH,\n            xDivision\n          }, params));\n          barHeight = paths.barHeight;\n        }\n        const barGoalLine = this.barHelpers.drawGoalLine({\n          barXPosition: paths.barXPosition,\n          barYPosition,\n          goalX: paths.goalX,\n          goalY: paths.goalY,\n          barHeight,\n          barWidth\n        });\n        if (barGoalLine) {\n          elGoalsMarkers.add(barGoalLine);\n        }\n        y = paths.y;\n        x = paths.x;\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i,\n          j,\n          realIndex\n        );\n        this.renderSeries({\n          realIndex,\n          pathFill: pathFill.color,\n          lineFill: pathFill.useRangeColor ? pathFill.color : w.globals.stroke.colors[realIndex],\n          j,\n          i,\n          x,\n          y,\n          y1,\n          y2,\n          pathFrom: paths.pathFrom,\n          pathTo: paths.pathTo,\n          strokeWidth,\n          elSeries,\n          series,\n          barHeight,\n          barWidth,\n          barXPosition,\n          barYPosition,\n          columnGroupIndex,\n          elDataLabelsWrap,\n          elGoalsMarkers,\n          visibleSeries: this.visibleI,\n          type: \"rangebar\"\n        });\n      }\n      ret.add(elSeries);\n    }\n    return ret;\n  }\n  /** @param {{ i?: any, j?: any, barYPosition?: any, barXPosition?: any, srty?: any, srtx?: any, barHeight?: any, barWidth?: any, yDivision?: any, xDivision?: any, initPositions?: any }} opts */\n  detectOverlappingBars({\n    i,\n    j,\n    barYPosition,\n    barXPosition,\n    srty,\n    srtx,\n    barHeight,\n    barWidth,\n    yDivision,\n    xDivision,\n    initPositions\n  }) {\n    var _a, _b, _c, _d;\n    const w = this.w;\n    let overlaps = [];\n    const rangeName = (\n      /** @type {Record<string,any>} */\n      (_b = (_a = w.config.series[i].data) == null ? void 0 : _a[j]) == null ? void 0 : _b.rangeName\n    );\n    const x = (\n      /** @type {Record<string,any>} */\n      (_d = (_c = w.config.series[i].data) == null ? void 0 : _c[j]) == null ? void 0 : _d.x\n    );\n    const labelX = Array.isArray(x) ? x.join(\" \") : x;\n    const rowIndex = w.labelData.labels.map((_) => Array.isArray(_) ? _.join(\" \") : _).indexOf(labelX);\n    const overlappedIndex = w.rangeData.seriesRange[i].findIndex(\n      (tx) => {\n        var _a2;\n        return tx.x === labelX && ((_a2 = tx.overlaps) == null ? void 0 : _a2.size) > 0;\n      }\n    );\n    if (this.isHorizontal) {\n      if (w.config.plotOptions.bar.rangeBarGroupRows) {\n        barYPosition = srty + yDivision * rowIndex;\n      } else {\n        barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex;\n      }\n      if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w.rangeData.seriesRange[i][overlappedIndex].overlaps\n        );\n        if (overlaps.indexOf(rangeName) > -1) {\n          barHeight = initPositions.barHeight / overlaps.length;\n          barYPosition = barHeight * this.visibleI + yDivision * (100 - parseInt(this.barOptions.barHeight, 10)) / 100 / 2 + barHeight * (this.visibleI + overlaps.indexOf(rangeName)) + yDivision * rowIndex;\n        }\n      }\n    } else {\n      if (rowIndex > -1 && !w.labelData.timescaleLabels.length) {\n        if (w.config.plotOptions.bar.rangeBarGroupRows) {\n          barXPosition = srtx + xDivision * rowIndex;\n        } else {\n          barXPosition = srtx + barWidth * this.visibleI + xDivision * rowIndex;\n        }\n      }\n      if (overlappedIndex > -1 && !w.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w.rangeData.seriesRange[i][overlappedIndex].overlaps\n        );\n        if (overlaps.indexOf(rangeName) > -1) {\n          barWidth = initPositions.barWidth / overlaps.length;\n          barXPosition = barWidth * this.visibleI + xDivision * (100 - parseInt(this.barOptions.barWidth, 10)) / 100 / 2 + barWidth * (this.visibleI + overlaps.indexOf(rangeName)) + xDivision * rowIndex;\n        }\n      }\n    }\n    return {\n      barYPosition,\n      barXPosition,\n      barHeight,\n      barWidth\n    };\n  }\n  /** @param {{indexes: any, x: any, xDivision: any, barWidth: any, barXPosition: any, zeroH: any}} opts */\n  drawRangeColumnPaths({\n    indexes,\n    x,\n    xDivision,\n    barWidth,\n    barXPosition,\n    zeroH\n  }) {\n    var _a, _b;\n    const w = this.w;\n    const { i, j, realIndex, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    const range = this.getRangeValue(realIndex, j);\n    let y1 = Math.min(range.start, range.end);\n    let y2 = Math.max(range.start, range.end);\n    if (typeof /** @type {any} */\n    ((_a = this.series[i]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i]) == null ? void 0 : _b[j]) === null) {\n      y1 = zeroH;\n    } else {\n      y1 = zeroH - y1 / yRatio;\n      y2 = zeroH - y2 / yRatio;\n    }\n    const barHeight = Math.abs(y2 - y1);\n    const paths = this.barHelpers.getColumnPaths({\n      barXPosition,\n      barWidth,\n      y1,\n      y2,\n      strokeWidth: this.strokeWidth,\n      series: this.seriesRangeEnd,\n      realIndex,\n      i: realIndex,\n      j,\n      w\n    });\n    if (!w.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    } else {\n      const xForNumericXAxis = this.getBarXForNumericXAxis({\n        x,\n        j,\n        realIndex,\n        barWidth\n      });\n      x = xForNumericXAxis.x;\n      barXPosition = xForNumericXAxis.barXPosition;\n    }\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      barHeight,\n      x,\n      y: range.start < 0 && range.end < 0 ? y1 : y2,\n      goalY: this.barHelpers.getGoalValues(\n        \"y\",\n        /** @type {any} */\n        null,\n        zeroH,\n        i,\n        j,\n        translationsIndex\n      ),\n      barXPosition\n    };\n  }\n  /**\n   * @param {number} val\n   */\n  preventBarOverflow(val) {\n    const w = this.w;\n    if (val < 0) {\n      val = 0;\n    }\n    if (val > w.layout.gridWidth) {\n      val = w.layout.gridWidth;\n    }\n    return val;\n  }\n  /** @param {{indexes: any, y: any, y1: any, y2: any, yDivision: any, barHeight: any, barYPosition: any, zeroW: any}} opts */\n  drawRangeBarPaths({\n    indexes,\n    y,\n    y1,\n    y2,\n    yDivision,\n    barHeight,\n    barYPosition,\n    zeroW\n  }) {\n    const w = this.w;\n    const { realIndex, j } = indexes;\n    const x1 = this.preventBarOverflow(zeroW + y1 / this.invertedYRatio);\n    const x2 = this.preventBarOverflow(zeroW + y2 / this.invertedYRatio);\n    const range = this.getRangeValue(realIndex, j);\n    const barWidth = Math.abs(x2 - x1);\n    const paths = this.barHelpers.getBarpaths({\n      barYPosition,\n      barHeight,\n      x1,\n      x2,\n      strokeWidth: this.strokeWidth,\n      series: this.seriesRangeEnd,\n      i: realIndex,\n      realIndex,\n      j,\n      w\n    });\n    if (!w.axisFlags.isXNumeric) {\n      y = y + yDivision;\n    }\n    return {\n      pathTo: paths.pathTo,\n      pathFrom: paths.pathFrom,\n      barWidth,\n      x: range.start < 0 && range.end < 0 ? x1 : x2,\n      goalX: this.barHelpers.getGoalValues(\n        \"x\",\n        zeroW,\n        /** @type {any} */\n        null,\n        realIndex,\n        j,\n        0\n      ),\n      y\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getRangeValue(i, j) {\n    const w = this.w;\n    return {\n      start: w.rangeData.seriesRangeStart[i][j],\n      end: w.rangeData.seriesRangeEnd[i][j]\n    };\n  }\n}\nfunction normalize(data, area) {\n  let sum = 0;\n  for (let i = 0; i < data.length; i++) {\n    sum += data[i];\n  }\n  const multiplier = area / sum;\n  const result = new Array(data.length);\n  for (let i = 0; i < data.length; i++) {\n    result[i] = data[i] * multiplier;\n  }\n  return result;\n}\nfunction calculateRatio(rowMin, rowMax, rowSum, length) {\n  const lengthSq = length * length;\n  const sumSq = rowSum * rowSum;\n  return Math.max(\n    lengthSq * rowMax / sumSq,\n    sumSq / (lengthSq * rowMin)\n  );\n}\nfunction improvesRatio(rowLen, rowMin, rowMax, rowSum, nextNode, length) {\n  if (rowLen === 0) return true;\n  const currentRatio = calculateRatio(rowMin, rowMax, rowSum, length);\n  const newRatio = calculateRatio(\n    Math.min(rowMin, nextNode),\n    Math.max(rowMax, nextNode),\n    rowSum + nextNode,\n    length\n  );\n  return currentRatio >= newRatio;\n}\nfunction emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height) {\n  if (width >= height) {\n    const areaWidth = rowSum / height;\n    let subY = yoffset;\n    for (let i = 0; i < rowLen; i++) {\n      const h = row[i] / areaWidth;\n      coords.push([xoffset, subY, xoffset + areaWidth, subY + h]);\n      subY += h;\n    }\n  } else {\n    const areaHeight = rowSum / width;\n    let subX = xoffset;\n    for (let i = 0; i < rowLen; i++) {\n      const w = row[i] / areaHeight;\n      coords.push([subX, yoffset, subX + w, yoffset + areaHeight]);\n      subX += w;\n    }\n  }\n}\nfunction squarify(data, xoffset, yoffset, width, height) {\n  const coords = [];\n  const n = data.length;\n  if (n === 0) return coords;\n  const row = new Array(n);\n  let rowLen = 0;\n  let rowSum = 0;\n  let rowMin = Infinity;\n  let rowMax = -Infinity;\n  let i = 0;\n  while (i < n) {\n    const length = Math.min(width, height);\n    const val = data[i];\n    if (improvesRatio(rowLen, rowMin, rowMax, rowSum, val, length)) {\n      row[rowLen] = val;\n      rowLen++;\n      rowSum += val;\n      if (val < rowMin) rowMin = val;\n      if (val > rowMax) rowMax = val;\n      i++;\n    } else {\n      emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height);\n      if (width >= height) {\n        const areaWidth = rowSum / height;\n        xoffset += areaWidth;\n        width -= areaWidth;\n      } else {\n        const areaHeight = rowSum / width;\n        yoffset += areaHeight;\n        height -= areaHeight;\n      }\n      rowLen = 0;\n      rowSum = 0;\n      rowMin = Infinity;\n      rowMax = -Infinity;\n    }\n  }\n  if (rowLen > 0) {\n    emitCoordinates(coords, row, rowLen, rowSum, xoffset, yoffset, width, height);\n  }\n  return coords;\n}\nfunction generate(data, width, height) {\n  const n = data.length;\n  const sums = new Array(n);\n  for (let i = 0; i < n; i++) {\n    let s = 0;\n    const series = data[i];\n    for (let j = 0; j < series.length; j++) {\n      s += series[j];\n    }\n    sums[i] = s;\n  }\n  const seriesRects = squarify(\n    normalize(sums, width * height),\n    0,\n    0,\n    width,\n    height\n  );\n  const results = new Array(n);\n  for (let i = 0; i < n; i++) {\n    const rect = seriesRects[i];\n    const rx = rect[0];\n    const ry = rect[1];\n    const rw = rect[2] - rx;\n    const rh = rect[3] - ry;\n    results[i] = squarify(\n      normalize(data[i], rw * rh),\n      rx,\n      ry,\n      rw,\n      rh\n    );\n  }\n  return results;\n}\nconst TreemapSquared = { generate };\nclass TreemapChart {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w, ctx) {\n    this.ctx = ctx;\n    this.w = w;\n    this.strokeWidth = this.w.config.stroke.width;\n    this.helpers = new TreemapHelpers(w, ctx);\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.labels = [];\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    const w = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const fill = new Fill(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-treemap\"\n    });\n    if (w.globals.noData) return ret;\n    const ser = [];\n    series.forEach((s) => {\n      const d = s.map((v) => {\n        return Math.abs(v);\n      });\n      ser.push(d);\n    });\n    this.negRange = this.helpers.checkColorRange();\n    w.config.series.forEach((s, i) => {\n      s.data.forEach((l) => {\n        if (!Array.isArray(this.labels[i])) this.labels[i] = [];\n        this.labels[i].push(l.x);\n      });\n    });\n    const nodes = TreemapSquared.generate(\n      ser,\n      w.layout.gridWidth,\n      w.layout.gridHeight\n    );\n    nodes.forEach((node, i) => {\n      var _a;\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-treemap-series`,\n        seriesName: Utils$1.escapeString(w.seriesData.seriesNames[i]),\n        rel: i + 1,\n        \"data:realIndex\": i\n      });\n      graphics.setupEventDelegation(elSeries, \".apexcharts-treemap-rect\");\n      if (w.config.chart.dropShadow.enabled) {\n        const shadow = w.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(ret, shadow, i);\n      }\n      const elDataLabelWrap = graphics.group({\n        class: \"apexcharts-data-labels\"\n      });\n      const bounds = {\n        xMin: Infinity,\n        yMin: Infinity,\n        xMax: -Infinity,\n        yMax: -Infinity\n      };\n      const animCfg = w.config.chart.animations;\n      const gradCfg = animCfg.animateGradually;\n      const cascadeEnabled = gradCfg && gradCfg.enabled !== false;\n      const cascadeDelays = new Array(node.length).fill(0);\n      if (cascadeEnabled) {\n        const tileCount = node.length || 1;\n        const baseDelay = Math.min(\n          gradCfg.delay || 0,\n          animCfg.speed * 0.5 / tileCount\n        );\n        const ranked = node.map(\n          /** @param {number[]} r @param {number} j */\n          (r, j) => ({ j, area: (r[2] - r[0]) * (r[3] - r[1]) })\n        ).sort(\n          /** @param {{j: number, area: number}} a @param {{j: number, area: number}} b */\n          (a, b) => b.area - a.area\n        );\n        ranked.forEach(\n          /** @param {{j: number, area: number}} item @param {number} rank */\n          (item, rank) => {\n            cascadeDelays[item.j] = rank * baseDelay;\n          }\n        );\n      }\n      node.forEach((r, j) => {\n        const x1 = r[0];\n        const y1 = r[1];\n        const x2 = r[2];\n        const y2 = r[3];\n        bounds.xMin = Math.min(bounds.xMin, x1);\n        bounds.yMin = Math.min(bounds.yMin, y1);\n        bounds.xMax = Math.max(bounds.xMax, x2);\n        bounds.yMax = Math.max(bounds.yMax, y2);\n        const colorProps = this.helpers.getShadeColor(\n          w.config.chart.type,\n          i,\n          j,\n          this.negRange\n        );\n        const color = colorProps.color;\n        const pathFill = fill.fillPath({\n          color,\n          seriesNumber: i,\n          dataPointIndex: j\n        });\n        const elRect = graphics.drawRect(\n          x1,\n          y1,\n          x2 - x1,\n          y2 - y1,\n          w.config.plotOptions.treemap.borderRadius,\n          \"#fff\",\n          1,\n          this.strokeWidth,\n          w.config.plotOptions.treemap.useFillColorAsStroke ? color : w.globals.stroke.colors[i]\n        );\n        elRect.attr({\n          cx: x1,\n          cy: y1,\n          index: i,\n          i,\n          j,\n          width: x2 - x1,\n          height: y2 - y1,\n          fill: pathFill\n        });\n        elRect.node.classList.add(\"apexcharts-treemap-rect\");\n        let fromRect = {\n          x: x1 + (x2 - x1) / 2,\n          y: y1 + (y2 - y1) / 2,\n          width: 0,\n          height: 0\n        };\n        const toRect = {\n          x: x1,\n          y: y1,\n          width: x2 - x1,\n          height: y2 - y1\n        };\n        if (w.config.chart.animations.enabled && !w.globals.dataChanged) {\n          let speed = 1;\n          if (!w.globals.resized) {\n            speed = w.config.chart.animations.speed;\n          }\n          this.animateTreemap(\n            elRect,\n            fromRect,\n            toRect,\n            speed,\n            cascadeDelays[j] || 0\n          );\n        }\n        if (w.globals.dataChanged) {\n          let speed = 1;\n          if (this.dynamicAnim.enabled && w.globals.shouldAnimate) {\n            speed = this.dynamicAnim.speed;\n            if (w.globals.previousPaths[i] && /** @type {Record<string,any>} */\n            w.globals.previousPaths[i][j] && /** @type {Record<string,any>} */\n            w.globals.previousPaths[i][j].rect) {\n              fromRect = /** @type {Record<string,any>} */\n              w.globals.previousPaths[i][j].rect;\n            }\n            this.animateTreemap(elRect, fromRect, toRect, speed);\n          }\n        }\n        let fontSize = this.getFontSize(r);\n        let formattedText = w.config.dataLabels.formatter(this.labels[i][j], {\n          value: w.seriesData.series[i][j],\n          seriesIndex: i,\n          dataPointIndex: j,\n          w\n        });\n        if (w.config.plotOptions.treemap.dataLabels.format === \"truncate\") {\n          fontSize = parseInt(String(w.config.dataLabels.style.fontSize), 10);\n          formattedText = this.truncateLabels(\n            String(formattedText),\n            fontSize,\n            x1,\n            y1,\n            x2,\n            y2\n          );\n        }\n        let dataLabels = null;\n        if (w.seriesData.series[i][j]) {\n          dataLabels = this.helpers.calculateDataLabels({\n            text: formattedText,\n            x: (x1 + x2) / 2,\n            y: (y1 + y2) / 2 + this.strokeWidth / 2 + fontSize / 3,\n            i,\n            j,\n            colorProps,\n            fontSize,\n            series\n          });\n        }\n        if (w.config.dataLabels.enabled && dataLabels) {\n          this.rotateToFitLabel(\n            dataLabels,\n            fontSize,\n            formattedText,\n            x1,\n            y1,\n            x2,\n            y2\n          );\n        }\n        elSeries.add(elRect);\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n      });\n      const seriesTitle = w.config.plotOptions.treemap.seriesTitle;\n      if (w.config.series.length > 1 && seriesTitle && seriesTitle.show) {\n        const sName = (\n          /** @type {Record<string,any>} */\n          w.config.series[i].name || \"\"\n        );\n        if (sName && bounds.xMin < Infinity && bounds.yMin < Infinity) {\n          const {\n            offsetX,\n            offsetY,\n            borderColor,\n            borderWidth,\n            borderRadius,\n            style\n          } = seriesTitle;\n          const textColor = style.color || w.config.chart.foreColor;\n          const padding = {\n            left: style.padding.left,\n            right: style.padding.right,\n            top: style.padding.top,\n            bottom: style.padding.bottom\n          };\n          const textSize = graphics.getTextRects(\n            sName,\n            style.fontSize,\n            style.fontFamily\n          );\n          const labelRectWidth = textSize.width + padding.left + padding.right;\n          const labelRectHeight = textSize.height + padding.top + padding.bottom;\n          const labelX = bounds.xMin + (offsetX || 0);\n          const labelY = bounds.yMin + (offsetY || 0);\n          const elLabelRect = graphics.drawRect(\n            labelX,\n            labelY,\n            labelRectWidth,\n            labelRectHeight,\n            borderRadius,\n            style.background,\n            1,\n            borderWidth,\n            borderColor\n          );\n          const elLabelText = graphics.drawText({\n            x: labelX + padding.left,\n            y: labelY + padding.top + ((_a = textSize == null ? void 0 : textSize.height) != null ? _a : 0) * 0.75,\n            text: sName,\n            fontSize: style.fontSize,\n            fontFamily: style.fontFamily,\n            fontWeight: style.fontWeight,\n            foreColor: textColor,\n            cssClass: style.cssClass || \"\"\n          });\n          elSeries.add(elLabelRect);\n          elSeries.add(elLabelText);\n        }\n      }\n      elSeries.add(elDataLabelWrap);\n      ret.add(elSeries);\n    });\n    return ret;\n  }\n  // This calculates a font-size based upon\n  // average label length and the size of the box\n  /**\n   * @param {number[]} coordinates\n   */\n  getFontSize(coordinates) {\n    const w = this.w;\n    function totalLabelLength(arr) {\n      let i, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i = 0; i < arr.length; i++) {\n          total += totalLabelLength(arr[i]);\n        }\n      } else {\n        for (i = 0; i < arr.length; i++) {\n          total += arr[i].length;\n        }\n      }\n      return total;\n    }\n    function countLabels(arr) {\n      let i, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i = 0; i < arr.length; i++) {\n          total += countLabels(arr[i]);\n        }\n      } else {\n        for (i = 0; i < arr.length; i++) {\n          total += 1;\n        }\n      }\n      return total;\n    }\n    const averagelabelsize = totalLabelLength(this.labels) / countLabels(this.labels);\n    function fontSize(width, height) {\n      const area = width * height;\n      const arearoot = Math.pow(area, 0.5);\n      return Math.min(\n        arearoot / averagelabelsize,\n        parseInt(w.config.dataLabels.style.fontSize, 10)\n      );\n    }\n    return fontSize(\n      coordinates[2] - coordinates[0],\n      coordinates[3] - coordinates[1]\n    );\n  }\n  /**\n   * @param {any} elText\n   * @param {string | number} fontSize\n   * @param {string} text\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  rotateToFitLabel(elText, fontSize, text, x1, y1, x2, y2) {\n    const graphics = new Graphics(this.w);\n    const textRect = graphics.getTextRects(text, String(fontSize));\n    if (textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && textRect.width <= y2 - y1) {\n      const labelRotatingCenter = graphics.rotateAroundCenter(elText.node);\n      elText.node.setAttribute(\n        \"transform\",\n        `rotate(-90 ${labelRotatingCenter.x} ${labelRotatingCenter.y}) translate(${textRect.height / 3})`\n      );\n    }\n  }\n  // This is an alternative label formatting method that uses a\n  // consistent font size, and trims the edge of long labels\n  /**\n   * @param {string} text\n   * @param {number} fontSize\n   * @param {number} x1\n   * @param {number} y1\n   * @param {number} x2\n   * @param {number} y2\n   */\n  truncateLabels(text, fontSize, x1, y1, x2, y2) {\n    const graphics = new Graphics(this.w);\n    const textRect = graphics.getTextRects(text, String(fontSize));\n    const labelMaxWidth = textRect.width + this.w.config.stroke.width + 5 > x2 - x1 && y2 - y1 > x2 - x1 ? y2 - y1 : x2 - x1;\n    const truncatedText = graphics.getTextBasedOnMaxWidth({\n      text,\n      maxWidth: labelMaxWidth,\n      fontSize\n    });\n    if (text.length !== truncatedText.length && labelMaxWidth / fontSize < 5) {\n      return \"\";\n    } else {\n      return truncatedText;\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {Record<string, any>} fromRect\n   * @param {Record<string, any>} toRect\n   * @param {number} speed\n   * @param {number} [delay] - per-tile cascade delay in ms\n   */\n  animateTreemap(el, fromRect, toRect, speed, delay = 0) {\n    const animations = new Animations(this.w);\n    animations.animateRect(\n      el,\n      fromRect,\n      toRect,\n      speed,\n      () => {\n        animations.animationCompleted(el);\n      },\n      delay\n    );\n  }\n}\nApexCharts.use({\n  line: Line,\n  area: Line,\n  scatter: Line,\n  bubble: Line,\n  rangeArea: Line,\n  bar: Bar,\n  column: Bar,\n  barStacked: BarStacked,\n  rangeBar: RangeBar,\n  candlestick: BoxCandleStick,\n  boxPlot: BoxCandleStick,\n  violin: Violin,\n  pie: Pie,\n  donut: Pie,\n  polarArea: Pie,\n  radialBar: Radial,\n  radar: Radar,\n  heatmap: HeatMap,\n  treemap: TreemapChart\n});\nexport {\n  ApexCharts as default\n};\n"]}