{"version":3,"sources":["jsdelivr-header.js","/npm/apexcharts@6.9.0/dist/apexcharts.esm.js"],"names":[],"mappings":"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AU,CACR,MAAO,CACL,WAAY,CACV,QAAS,EACjB,EACM,QAAS,CACP,OAAQ,GACR,UAAW,EACnB,EACM,QAAS,CACP,KAAM,EACN,YAAa,EACb,MAAO,CACL,WAAY,CACtB,CACA,CACA,CACE,CACA,SAAU,CACR,MAAO,CACL,MAAO,CACL,QAAS,GAKT,KAAM,CACJ,QAAS,EACnB,CACA,EACM,KAAM,CACJ,QAAS,CACjB,EACM,WAAY,CACV,MAAO,CACL,OAAQ,CAAC,MAAM,CACzB,CACA,EACM,OAAQ,CACN,OAAQ,CAAC,MAAM,CACvB,EACM,QAAS,CAKP,aAAc,GACd,OAAQ,CACN,KAAM,EAChB,EACQ,EAAG,CACD,KAAM,EAChB,CACA,EACM,OAAQ,CACN,SAAU,MACV,QAAS,CACP,MAAO,QACjB,CACA,EACM,KAAM,CACJ,QAAS,CACP,MAAO,EACjB,CACA,CACA,CACE,CACA,SAAU,CACR,MAAO,CACL,MAAO,CACL,KAAM,CACJ,QAAS,EACnB,CACA,EACM,WAAY,CACV,MAAO,CACL,SAAU,GACV,WAAY,IACZ,OAAQ,CAAC,MAAM,CACzB,CACA,EACM,OAAQ,CACN,KAAM,GACN,MAAO,EACP,OAAQ,CAAC,MAAM,CACvB,EACM,OAAQ,CACN,KAAM,EACd,EACM,KAAM,CACJ,QAAS,EACT,SAAU,CACR,MAAO,CAAC,EAAG,GAAG,CACxB,CACA,EACM,QAAS,CACP,aAAc,GACd,EAAG,CACD,KAAM,EAChB,CACA,EACM,KAAM,CACJ,QAAS,CACP,KAAM,EACN,MAAO,CACjB,CACA,EACM,MAAO,CACL,WAAY,CACV,KAAM,EAChB,EACQ,QAAS,CACP,QAAS,EACnB,EAMQ,UAAW,CACT,KAAM,EAChB,CACA,CACA,CACE,CACA,MAAO,CACL,MAAO,CACL,MAAO,CACL,QAAS,CACP,KAAM,EAChB,CACA,EACM,WAAY,CACV,QAAS,EACjB,EACM,OAAQ,CACN,KAAM,GACN,MAAO,CACf,EACM,KAAM,CACJ,QAAS,CACjB,EACM,QAAS,CACP,aAAc,GACd,EAAG,CACD,KAAM,EAChB,CACA,EACM,OAA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G,gBAAkB,CAAA,EACrB,EAAG,YAAc,CAAA,EACjB,EAAG,gBAAkB,KACrB,EAAG,eAAiB,KACpB,EAAG,gBAAkB,CAAA,EACrB,EAAG,2BAA6B,CAAA,EAChC,EAAG,eAAiC,IAAI,IACxC,EAAG,SAA2B,IAAI,IAClC,EAAG,eAAiB,CAAA,EACpB,EAAG,gBAAkB,CAAA,EAChB,EAAG,UACN,KAAK,kBAAkB,CAAE,CAE7B,CAiBA,kBAAkB,EAAI,CACpB,MAAM,EAAQ,CAAC,EAAI,EAAK,EAAQ,IAAQ,CACtC,OAAO,eAAe,EAAI,EAAO,CAC/B,KAAM,CACJ,OAAO,EAAG,CAAG,CACf,EACA,IAAI,EAAI,CACN,EAAG,CAAG,EAAI,CACZ,EACA,WAAY,GACZ,aAAc,EACtB,CAAO,CACH,EACM,EAAW,CAAA,EACjB,EAAM,EAAU,SAAU,MAAM,EAChC,UAAW,IAAO,CAChB,cACA,UACA,UACA,gBACA,gBACA,cACA,YACA,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,QACN,EACM,EAAM,EAAU,CAAG,EAErB,OAAO,eAAe,EAAI,WAAY,CACpC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACpB,CAAK,EACD,MAAM,EAAS,CAAA,EACf,UAAW,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,kBACN,EACM,EAAM,EAAQ,CAAG,EAEnB,OAAO,eAAe,EAAI,OAAQ,CAChC,MAAO,EACP,SAAU,GACV,WAAY,GACZ,aAAc,EACpB,CAAK,EACD,MAAM,EAAW,CAAA,EACjB,UAAW,IAAO,CAChB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","file":"/npm/apexcharts@6.9.0/dist/apexcharts.esm.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/apexcharts@6.9.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 = (a2, b2) => {\n  for (var prop in b2 || (b2 = {}))\n    if (__hasOwnProp.call(b2, prop))\n      __defNormalProp(a2, prop, b2[prop]);\n  if (__getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(b2)) {\n      if (__propIsEnum.call(b2, prop))\n        __defNormalProp(a2, prop, b2[prop]);\n    }\n  return a2;\n};\nvar __spreadProps = (a2, b2) => __defProps(a2, __getOwnPropDescs(b2));\nvar __objRest = (source, exclude) => {\n  var target = {};\n  for (var prop in source)\n    if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)\n      target[prop] = source[prop];\n  if (source != null && __getOwnPropSymbols)\n    for (var prop of __getOwnPropSymbols(source)) {\n      if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))\n        target[prop] = source[prop];\n    }\n  return target;\n};\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 (e2) {\n        reject(e2);\n      }\n    };\n    var rejected = (value) => {\n      try {\n        step(generator.throw(value));\n      } catch (e2) {\n        reject(e2);\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 v6.9.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((c2) => c2.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((c2) => c2.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   * Evaluate a media query. Returns the live MediaQueryList in a browser (so\n   * callers can attach a `change` listener) or null under SSR / when\n   * unsupported. Facet (#13) uses this for `theme.follow: 'os'`.\n   * @param {string} query\n   * @returns {MediaQueryList|null}\n   */\n  static matchMedia(query) {\n    if (Environment.isSSR() || typeof window.matchMedia !== \"function\") {\n      return null;\n    }\n    try {\n      return window.matchMedia(query);\n    } catch (e2) {\n      return null;\n    }\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    if (!this.isObject(target) && this.isObject(source)) {\n      return this.clone(source);\n    }\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 i2 = 0; i2 < source.length; i2++) {\n          cloneResult[i2] = this.clone(source[i2], 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   * @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 (e2) {\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((a2, b2) => {\n      if (Array.isArray(b2)) {\n        b2 = b2.reduce((aa, bb) => aa.length > bb.length ? aa : bb);\n      }\n      return a2.length > b2.length ? a2 : b2;\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 h2 = hexStr.match(new RegExp(\"(.{\" + hexStr.length / 3 + \"})\", \"g\")) || [];\n    for (let i2 = 0; i2 < h2.length; i2++) {\n      h2[i2] = parseInt(h2[i2].length === 1 ? h2[i2] + h2[i2] : h2[i2], 16);\n    }\n    if (typeof opacity !== \"undefined\") h2.push(opacity);\n    return \"rgba(\" + h2.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 h2 = hex.trim().replace(\"#\", \"\");\n    if (h2.length === 3) {\n      h2 = h2.split(\"\").map((c2) => c2 + c2).join(\"\");\n    }\n    if (!/^[0-9a-fA-F]{6}$/.test(h2)) return null;\n    return [\n      parseInt(h2.slice(0, 2), 16),\n      parseInt(h2.slice(2, 4), 16),\n      parseInt(h2.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([r2, g2, b2]) {\n    const channel = (c2) => {\n      const v2 = c2 / 255;\n      return v2 <= 0.03928 ? v2 / 12.92 : Math.pow((v2 + 0.055) / 1.055, 2.4);\n    };\n    return 0.2126 * channel(r2) + 0.7152 * channel(g2) + 0.0722 * channel(b2);\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(\",\"), t2 = percent < 0 ? 0 : 255, p2 = percent < 0 ? percent * -1 : percent, R = parseInt(f[0].slice(4), 10), G2 = parseInt(f[1], 10), B = parseInt(f[2], 10);\n    return \"rgb(\" + (Math.round((t2 - R) * p2) + R) + \",\" + (Math.round((t2 - G2) * p2) + G2) + \",\" + (Math.round((t2 - B) * p2) + B) + \")\";\n  }\n  /**\n   * @param {number} percent\n   * @param {string} color\n   */\n  shadeHexColor(percent, color) {\n    const f = parseInt(color.slice(1), 16), t2 = percent < 0 ? 0 : 255, p2 = percent < 0 ? percent * -1 : percent, R = f >> 16, G2 = f >> 8 & 255, B = f & 255;\n    return \"#\" + (16777216 + (Math.round((t2 - R) * p2) + R) * 65536 + (Math.round((t2 - G2) * p2) + G2) * 256 + (Math.round((t2 - B) * p2) + 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(p2, color) {\n    if (Utils.isColorHex(color)) {\n      return this.shadeHexColor(p2, color);\n    } else {\n      return this.shadeRGBColor(p2, 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 i2 = 0; i2 < dataPointsLen; i2++) {\n      const curPos = {};\n      curPos.x = size * Math.sin(i2 * angle);\n      curPos.y = -size * Math.cos(i2 * 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(s2) {\n    return parseFloat(s2.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(a2, b2) {\n    const aDecimals = (String(a2).split(\".\")[1] || \"\").length;\n    const bDecimals = (String(b2).split(\".\")[1] || \"\").length;\n    const factor = Math.pow(10, Math.max(aDecimals, bDecimals));\n    return (Math.round(a2 * factor) + Math.round(b2 * 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(n2) {\n    return Number(n2) === n2 && n2 % 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(a2, b2, p2 = 7) {\n    let factor = Math.pow(10, p2 - Math.floor(Math.log10(Math.max(a2, b2))));\n    if (factor > 1) {\n      a2 = Math.round(Math.abs(a2) * factor);\n      b2 = Math.round(Math.abs(b2) * factor);\n    } else {\n      factor = 1;\n    }\n    while (b2) {\n      const t2 = b2;\n      b2 = a2 % b2;\n      a2 = t2;\n    }\n    return a2 / factor;\n  }\n  /**\n   * @param {number} n\n   */\n  static getPrimeFactors(n2) {\n    const factors = [];\n    let divisor = 2;\n    while (n2 >= 2) {\n      if (n2 % divisor == 0) {\n        factors.push(divisor);\n        n2 = n2 / divisor;\n      } else {\n        divisor++;\n      }\n    }\n    return factors;\n  }\n  /**\n   * @param {number} a\n   * @param {number} b\n   */\n  static mod(a2, b2, p2 = 7) {\n    const big = Math.pow(10, p2 - Math.floor(Math.log10(Math.max(a2, b2))));\n    a2 = Math.round(Math.abs(a2) * big);\n    b2 = Math.round(Math.abs(b2) * big);\n    return a2 % b2 / big;\n  }\n};\nclass DateTime {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\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 (isNaN(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(i2, len = 2) {\n      let s3 = i2 + \"\";\n      while (s3.length < len) s3 = \"0\" + s3;\n      return s3;\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 M2 = (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(M2));\n    format = format.replace(/(^|[^\\\\])M/g, \"$1\" + M2);\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 h2 = H > 12 ? H - 12 : H === 0 ? 12 : H;\n    format = format.replace(/(^|[^\\\\])hh+/g, \"$1\" + ii(h2));\n    format = format.replace(/(^|[^\\\\])h/g, \"$1\" + h2);\n    const m2 = utc ? date.getUTCMinutes() : date.getMinutes();\n    format = format.replace(/(^|[^\\\\])mm+/g, \"$1\" + ii(m2));\n    format = format.replace(/(^|[^\\\\])m/g, \"$1\" + m2);\n    const s2 = utc ? date.getUTCSeconds() : date.getSeconds();\n    format = format.replace(/(^|[^\\\\])ss+/g, \"$1\" + ii(s2));\n    format = format.replace(/(^|[^\\\\])s/g, \"$1\" + s2);\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 t2 = T.toLowerCase();\n    format = format.replace(/(^|[^\\\\])tt+/g, \"$1\" + t2);\n    format = format.replace(/(^|[^\\\\])t/g, \"$1\" + t2.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[M2]);\n    format = format.replace(new RegExp(MMM[0], \"g\"), MMM[M2]);\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 w2 = this.w;\n    if (w2.config.xaxis.min !== void 0) {\n      minX = w2.config.xaxis.min;\n    }\n    if (w2.config.xaxis.max !== void 0) {\n      maxX = w2.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 s2 = d.getUTCSeconds();\n          const aligned = Math.ceil(s2 / step) * step;\n          if (aligned === s2 && d.getUTCMilliseconds() === 0)\n            return timestamp;\n          d.setUTCMilliseconds(0);\n          d.setUTCSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m2 = d.getUTCMinutes();\n          const aligned = Math.ceil(m2 / step) * step;\n          if (aligned === m2 && 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 h2 = d.getUTCHours();\n          const aligned = Math.ceil(h2 / step) * step;\n          if (aligned === h2 && 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 m2 = d.getUTCMonth();\n          const aligned = Math.ceil(m2 / step) * step;\n          if (aligned === m2 && 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 s2 = d.getSeconds();\n          const aligned = Math.ceil(s2 / step) * step;\n          if (aligned === s2 && d.getMilliseconds() === 0) return timestamp;\n          d.setMilliseconds(0);\n          d.setSeconds(aligned);\n          return d.getTime();\n        }\n        case \"minute\": {\n          const m2 = d.getMinutes();\n          const aligned = Math.ceil(m2 / step) * step;\n          if (aligned === m2 && 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 h2 = d.getHours();\n          const aligned = Math.ceil(h2 / step) * step;\n          if (aligned === h2 && 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 m2 = d.getMonth();\n          const aligned = Math.ceil(m2 / step) * step;\n          if (aligned === m2 && 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(w2) {\n    this.w = w2;\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 w2 = this.w;\n    if (w2.config.xaxis.type === \"datetime\") {\n      if (w2.config.xaxis.labels.formatter === void 0) {\n        if (w2.config.tooltip.x.formatter === void 0) {\n          const datetimeObj = new DateTime(this.w);\n          return datetimeObj.formatDate(\n            datetimeObj.getDate(val),\n            w2.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((v2) => {\n        return v2;\n      });\n    } else {\n      return val;\n    }\n  }\n  /**\n   * @param {any} v\n   * @param {ApexYAxis} yaxe\n   */\n  defaultYFormatter(v2, yaxe) {\n    const w2 = this.w;\n    if (Utils$1.isNumber(v2)) {\n      if (w2.globals.yValueDecimal !== 0) {\n        v2 = v2.toFixed(\n          yaxe.decimalsInFloat !== void 0 ? yaxe.decimalsInFloat : w2.globals.yValueDecimal\n        );\n      } else {\n        const f = v2.toFixed(0);\n        v2 = Number(f) === v2 ? f : v2.toFixed(1);\n      }\n    }\n    return v2;\n  }\n  setLabelFormatters() {\n    const w2 = this.w;\n    const fmt = w2.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 (w2.config.xaxis.labels.formatter !== void 0) {\n      fmt.xLabelFormatter = w2.config.xaxis.labels.formatter;\n    } else {\n      fmt.xLabelFormatter = (val) => {\n        if (Utils$1.isNumber(val)) {\n          if (!w2.config.xaxis.convertedCatToNumeric && w2.config.xaxis.type === \"numeric\") {\n            if (Utils$1.isNumber(w2.config.xaxis.decimalsInFloat)) {\n              return val.toFixed(w2.config.xaxis.decimalsInFloat);\n            } else {\n              const diff = w2.globals.maxX - w2.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 (w2.globals.isBarHorizontal) {\n            const range = w2.globals.maxY - w2.globals.minY;\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 w2.config.tooltip.x.formatter === \"function\") {\n      fmt.ttKeyFormatter = w2.config.tooltip.x.formatter;\n    } else {\n      fmt.ttKeyFormatter = fmt.xLabelFormatter;\n    }\n    if (typeof w2.config.xaxis.tooltip.formatter === \"function\") {\n      fmt.xaxisTooltipFormatter = w2.config.xaxis.tooltip.formatter;\n    }\n    if (Array.isArray(w2.config.tooltip.y)) {\n      fmt.ttVal = w2.config.tooltip.y;\n    } else {\n      if (w2.config.tooltip.y.formatter !== void 0) {\n        fmt.ttVal = w2.config.tooltip.y;\n      }\n    }\n    if (w2.config.tooltip.z.formatter !== void 0) {\n      fmt.ttZFormatter = w2.config.tooltip.z.formatter;\n    }\n    if (w2.config.legend.formatter !== void 0) {\n      fmt.legendFormatter = w2.config.legend.formatter;\n    }\n    fmt.yLabelFormatters = [];\n    w2.config.yaxis.forEach((yaxe, i2) => {\n      if (yaxe.labels.formatter !== void 0) {\n        fmt.yLabelFormatters[i2] = yaxe.labels.formatter;\n      } else if (w2.config.chart.type === \"violin\") {\n        const round = (v2) => typeof v2 === \"number\" && isFinite(v2) ? `${Math.round(v2 * 100) / 100}` : v2;\n        fmt.yLabelFormatters[i2] = (val) => {\n          if (!w2.globals.xyCharts) return val;\n          return Array.isArray(val) ? val.map(round) : round(val);\n        };\n      } else {\n        fmt.yLabelFormatters[i2] = (val) => {\n          if (!w2.globals.xyCharts) return val;\n          if (Array.isArray(val)) {\n            return val.map((v2) => {\n              return this.defaultYFormatter(v2, yaxe);\n            });\n          } else {\n            return this.defaultYFormatter(val, yaxe);\n          }\n        };\n      }\n    });\n    return w2.globals;\n  }\n  heatmapLabelFormatters() {\n    const w2 = this.w;\n    if (w2.config.chart.type === \"heatmap\") {\n      w2.globals.yAxisScale[0].result = /** @type {any} */\n      w2.seriesData.seriesNames.slice();\n      const longest = (\n        /** @type {any} */\n        w2.seriesData.seriesNames.reduce(\n          (a2, b2) => a2.length > b2.length ? a2 : b2,\n          0\n        )\n      );\n      w2.globals.yAxisScale[0].niceMax = longest;\n      w2.globals.yAxisScale[0].niceMin = longest;\n    }\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\", \"measure\": \"Measure\" } };\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      tooltip: {\n        // Show a hover tooltip over the annotation marker, like a regular\n        // data point. Lets you surface richer detail than fits in the label.\n        enabled: false,\n        // Static tooltip content (HTML allowed; array joined with <br/>).\n        // Falls back to label.text when omitted.\n        text: void 0,\n        // formatter({ annotation, seriesIndex, id, w }) => string (HTML).\n        // Takes precedence over `text` when provided.\n        formatter: void 0,\n        // 'light' | 'dark'. Falls back to the global tooltip.theme.\n        theme: void 0,\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      // Weave (#1): public plugin platform. Per-chart activation list:\n      // { name, options?, order? }. Requires the Weave host to be bundled\n      // (`import 'apexcharts/features/weave'`, included in the full bundle) and\n      // the plugin registered via ApexCharts.registerPlugin().\n      plugins: [],\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          // Cadence (#6): easing for the generic tweens (data-update value\n          // transitions, path morphs, marker animate). A registered name, a\n          // cubic-bezier [x1,y1,x2,y2] array, or a function (t in [0,1]).\n          // 'easeInOutSine' is the historical curve, so the default is\n          // behavior-neutral. The tuned initial-draw pen/pop easings are fixed.\n          easing: \"easeInOutSine\",\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            // Easing for data-change morphs only (same accepted forms as\n            // `animations.easing`). Unset -> inherit the chart-wide easing,\n            // except detected streaming scrolls (rolling window / append\n            // under xaxis.range) which default to 'linear' so the window\n            // slides at constant velocity instead of pulsing each tick.\n            easing: void 0\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        // Perspectives (#10): serializable/shareable view state. Passive:\n        // requires `import 'apexcharts/features/perspectives'`. serializeOptions\n        // is the whitelist of function-free option paths stored in a token.\n        perspectives: {\n          serializeOptions: [\"theme\", \"xaxis\", \"yaxis\", \"title\", \"subtitle\"]\n        },\n        // Rewind (#3): undo/redo history. Opt-in (bundle + behavior): requires\n        // `import 'apexcharts/features/history'` AND chart.history.enabled.\n        history: {\n          enabled: false,\n          maxDepth: 100,\n          coalesceMs: 250,\n          keyboard: true\n        },\n        // Strata (#2): hybrid SVG+canvas series renderer. 'svg' (default) |\n        // 'canvas' | 'auto'. 'auto'/'canvas' need the canvas renderer feature\n        // (`import 'apexcharts/features/renderer-canvas'`); without it, or with\n        // a canvas-unsupported feature (pattern/image fill, color-matrix state\n        // filters), selection falls back to 'svg'. Only the series layer is\n        // canvas-capable in v1; chrome stays SVG.\n        renderer: \"svg\",\n        rendererThreshold: 8e3,\n        layers: {\n          series: \"auto\",\n          grid: \"svg\",\n          annotations: \"svg\",\n          dataLabels: \"svg\"\n        },\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          crossFilter: void 0,\n          filterChange: void 0,\n          annotationDragged: void 0,\n          annotationEdited: void 0,\n          annotationCreated: void 0,\n          annotationStyled: void 0,\n          annotationDeleted: void 0,\n          measured: 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        // Per-chart license key override for the gated premium features\n        // (storyboard, link/crossfilter, ink, measure, contextMenu,\n        // perspectives, history). Most specific wins: chart.license ->\n        // ApexCharts.setLicense() -> window.Apex.license -> unlicensed (trial\n        // watermark). Shared across the ApexCharts family. See setLicense().\n        license: 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        // Linked Views (#4): crossfilter / linked highlighting. Requires the\n        // `link` feature. Two modes:\n        //   HIGHLIGHT (P1): `enabled` with no `dimension`. Charts sharing a\n        //   `chart.group` form a set; brushing a range (needs\n        //   `chart.selection.enabled`) dims out-of-range marks in place.\n        //   FILTER (P2): set `dimension` (its presence selects this path). Each\n        //   chart declares a dimension + reduction over a shared record set\n        //   registered with ApexCharts.crossfilter({ id, records }); clicking a\n        //   bucket re-aggregates the other charts. See docs/spec.\n        link: {\n          enabled: false,\n          mode: \"highlight\",\n          dimOpacity: 0.2,\n          // FILTER-mode config (all optional except dimension):\n          id: void 0,\n          // crossfilter coordinator id (defaults to chart.group)\n          dimension: void 0,\n          // (row) => key; presence selects filter mode\n          reduce: void 0,\n          // 'count' | { sum|avg|min|max: field } | (rows)=>n\n          type: void 0,\n          // 'category' | 'range' (else inferred from bins)\n          bins: void 0,\n          // range dims: { width } | { count } | { thresholds }\n          order: void 0,\n          // category order: 'first-seen' | 'asc' | 'desc' | fn\n          seriesName: void 0\n          // axis-chart series name (default 'Count')\n        },\n        // Ink Layer (#7): direct-manipulation annotations. When enabled, every\n        // point annotation is draggable (unless it sets draggable:false); or opt\n        // in per annotation with annotations.points[].draggable. Clicking an\n        // ink-managed annotation opens a floating editor card: rename inline,\n        // recolor, toggle bold, step the font size, size/reshape the marker, or\n        // delete the note. Axis-line annotations get separate Label and Line\n        // color rows, so restyling the label chip never touches the stroke.\n        // Requires the `ink` feature. Fires annotationDragged,\n        // annotationEdited, annotationStyled and annotationDeleted.\n        ink: {\n          enabled: false,\n          // Show a minimal \"add note\" tool palette; clicking it arms create\n          // mode (the next plot click drops an editable, draggable annotation).\n          palette: false,\n          // Snap a dragged point / axis-line annotation to the nearest gridline\n          // (numeric x + linear y). Undo/redo of ink edits is automatic when the\n          // history (Rewind) feature is enabled.\n          snap: false,\n          // Accent swatches offered by the floating note editor; defaults to a\n          // built-in 6-color palette when undefined.\n          noteColors: void 0\n        },\n        // Measure ruler (#18): a measure/delta ruler. Requires the `measure`\n        // feature. Hold `key` (default 'm') and drag A->B on the plot, or call\n        // chart.startMeasure()/chart.stopMeasure() to arm it. The live ruler\n        // reads dx, dy, %change and slope; on release it pins as a data-anchored\n        // overlay that re-projects on zoom/resize. Fires `measured`.\n        measure: {\n          enabled: false,\n          // 'span' (default): finance-style vertical band between two x-points\n          // with a \"change (%) + range\" readout, endpoints snapped to the first\n          // series. 'free': a diagonal ruler between two arbitrary points.\n          mode: \"span\",\n          key: \"m\",\n          pinOnRelease: true,\n          // Styling tokens. Every element also carries a stable CSS class\n          // (apexcharts-measure-band / -vline / -line / -label-bg / -label,\n          // group gets apexcharts-measure-up|down|flat). Colors are left\n          // undefined so they resolve config -> `--apx-measure-*` CSS custom\n          // property -> built-in default; set them here to force a color from JS.\n          colors: {\n            up: void 0,\n            down: void 0,\n            neutral: void 0,\n            guide: void 0\n          },\n          band: true,\n          // span mode: shaded band between the two x-positions\n          guides: true,\n          // span mode: vertical dashed reference lines\n          markers: true,\n          // endpoint dots on the series line\n          // Content: value formatters and a full readout override. `label`\n          // receives { from, to, dx, dy, percentChange, slope, mode } and\n          // returns a string or string[] (lines).\n          format: { x: void 0, y: void 0, percent: void 0 },\n          label: void 0\n        },\n        // Radial Actions (#chrome): right-click / long-press context menu.\n        // Requires the `contextMenu` feature. Each action receives the clicked\n        // data coordinates, so verbs act at the point (not chart-wide like a\n        // toolbar button). `items` is an ordered list of built-in ids\n        // ('annotate' | 'xline' | 'yline' | 'measure') and/or custom\n        // { id, label, icon, onClick(ctx, { x, y, seriesIndex, dataPointIndex,\n        // clientX, clientY }) }. 'measure' is shown only when the measure tool\n        // is enabled. `labels` overrides built-in text; `noteText` is the label\n        // dropped by 'annotate'.\n        contextMenu: {\n          enabled: false,\n          items: [\"annotate\", \"xline\", \"yline\", \"measure\"],\n          labels: {\n            annotate: void 0,\n            xline: void 0,\n            yline: void 0,\n            measure: void 0\n          },\n          noteText: \"Note\",\n          // 'xline' (\"Annotate here\") drops a dashed vertical LINE at the\n          // clicked x; 'yline' (\"Mark this level\") a dashed horizontal line at\n          // the clicked y. Lines only, never a range rectangle. Like the note,\n          // a line is ink-managed when the ink feature is bundled: it opens\n          // the floating editor (rename; separate Label and Line color rows,\n          // so restyling the chip cannot blank the stroke; delete), drags\n          // along its axis, and undoes via Rewind. `line` styles both items.\n          line: {\n            text: \"\",\n            // label drawn on the line; empty for no label\n            strokeDashArray: 4,\n            color: void 0\n            // undefined keeps the annotation default color\n          }\n        },\n        stacked: false,\n        stackOnlyBar: true,\n        // mixed chart with stacked bars and line series - incorrect line draw #907\n        stackType: \"normal\",\n        // Real-time streaming mode. When enabled, appendData() bounds memory\n        // automatically: each series is trimmed to `maxPoints` (when set) or\n        // to the visible `xaxis.range` window plus a two-point off-screen\n        // runway (so exiting segments slide off the left edge instead of\n        // popping). The scroll animation itself needs no opt-in; updates\n        // that continue the previous window (appendData, or updateSeries with\n        // a shifted fixed-length window) always translate at constant\n        // velocity; see modules/animations/StreamScroll.\n        streaming: {\n          enabled: false,\n          maxPoints: void 0\n        },\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            // Shown only when the measure ruler is active (chart.measure.enabled\n            // and the `measure` feature bundled). Toggles the measure tool; set\n            // false to keep the ruler key-driven only. See chart.measure.\n            measure: 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            // An exported SVG is a standalone document: it cannot reach the\n            // page's @font-face rules, so a custom font falls back to a\n            // generic one in the PNG/SVG. When true, matching @font-face\n            // rules are inlined as base64 data URIs. See #3617.\n            embedFonts: true\n          },\n          autoSelected: \"zoom\"\n          // accepts -> zoom, pan, selection, measure\n        },\n        type: \"line\",\n        width: \"100%\",\n        zoom: {\n          enabled: true,\n          type: \"x\",\n          autoScaleYaxis: false,\n          // Wheel and pinch zoom can both be triggered without meaning to (a\n          // page scroll or a two-finger swipe over the chart), so 'auto' offers\n          // them only when the viewer has a way back: the toolbar's reset\n          // button. With the toolbar hidden they stay off, since a zoom nobody\n          // asked for and nobody can undo is a trap. Set either to true to\n          // force the gesture on regardless (for a page that supplies its own\n          // reset control), or false to turn it off outright.\n          allowMouseWheelZoom: \"auto\",\n          // Momentum: two-finger pinch-zoom on touch devices. Zooms the x-axis\n          // around the pinch centroid (matching the x-only wheel/toolbar zoom),\n          // frame-by-frame rather than the 400ms wheel throttle.\n          pinch: \"auto\",\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        // Momentum: kinetic panning on touch. When a one-finger pan is released\n        // with velocity, the chart keeps gliding and decelerates by `friction`\n        // each frame, clamping (no elastic overshoot) at the data edges.\n        pan: {\n          inertia: true,\n          friction: 0.92\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          // Where the whiskers reach when the summary is DERIVED from raw\n          // observations (a datum supplying `points` instead of a 5-number y,\n          // which needs `apexcharts/features/stats`). Ignored for precomputed\n          // summaries, which are drawn exactly as given.\n          //   'minmax' → the extremes, so nothing is hidden\n          //   'tukey'  → the last observation inside 1.5 * IQR of each\n          //              quartile. Points beyond the fence fall outside the\n          //              whisker, so pair it with `points.show` or they become\n          //              invisible.\n          whiskers: \"minmax\",\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          // Kernel density estimation, used only when the density is DERIVED\n          // from raw observations (a datum supplying `points`, or a flat number\n          // array as `y`, which needs `apexcharts/features/stats`). A\n          // precomputed density profile is drawn exactly as given.\n          //   bandwidth  → kernel width in value units. Unset uses Silverman's\n          //                rule of thumb, which takes the smaller of the\n          //                standard deviation and a scaled IQR so one distant\n          //                outlier cannot smear the curve flat. Note this is a\n          //                statistical parameter, unlike `bandwidthScale`\n          //                above, which only scales the drawn width.\n          //   resolution → density samples per violin (default 64).\n          kde: {\n            bandwidth: void 0,\n            resolution: 64\n          },\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        histogram: {\n          // How the bin width is chosen from the raw observations. A rule name\n          // ('auto' | 'fd' | 'sturges' | 'scott' | 'rice' | 'sqrt') or a fixed\n          // bin count. 'auto' takes the narrower of Freedman-Diaconis and\n          // Sturges, falling back to Sturges when the IQR is 0 (which happens\n          // as soon as most values are identical).\n          bins: \"auto\",\n          // Explicit bin width in value units. Wins over `bins` when set: use\n          // it when the bin boundaries carry meaning (decades, 5-minute\n          // buckets) rather than being a statistical choice.\n          binWidth: void 0,\n          // [min, max] to bin over, instead of the data's own extent. Lets\n          // several histograms share one scale.\n          range: void 0,\n          // y units: 'count' (observations per bin), 'relative' (percent of\n          // the series total), or 'density' (count / (n * binWidth), so the\n          // total area is 1 and bins of different widths stay comparable).\n          normalize: \"count\",\n          // Running total across bins, i.e. a cumulative distribution.\n          cumulative: false,\n          // With more than one series, draw every distribution across the FULL\n          // bin so they overlay, instead of dividing the bin between them. All\n          // series already share one set of edges, and comparing two shapes is\n          // the reason to put them on one axis; splitting the bin makes the\n          // columns stop touching, which reads as a clustered bar chart rather\n          // than a distribution. Set false for side-by-side bars.\n          //\n          // An overlay is unreadable opaque, so it also softens the fill and\n          // drops the bin separator stroke. Both remain overridable.\n          overlap: true\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            // Skip a tile's label when it would render below this size.\n            //\n            // With `format: 'scale'` the font size follows the tile's area, so\n            // on a dense treemap most tiles ask for text a few pixels tall,\n            // which nobody can read. Drawing it is not free: each label has to\n            // be built and measured against the DOM, and on a 10k-tile chart\n            // that was the entire render cost (~7.5s, versus ~0.1s once the\n            // unreadable ones are skipped).\n            //\n            // The default sits below the smallest label any bundled sample\n            // draws, so it only ever removes text that was already illegible.\n            // Set 0 to draw a label on every tile regardless of size.\n            minFontSize: 4\n          },\n          colorScale: {\n            inverse: false,\n            ranges: [],\n            min: void 0,\n            max: void 0,\n            // Colour a tile by a SECOND metric, independent of the value that\n            // sizes it (area = how big, colour = how it did). Reads\n            // `datum.colorValue` unless this names another key or supplies an\n            // accessor `(datum, {seriesIndex, dataPointIndex, w}) => number`.\n            colorValue: void 0,\n            // Continuous interpolation between colour stops. Active as soon as\n            // any datum carries a colour metric; `enabled: false` opts out and\n            // `true` forces it on. `ranges` is unaffected and still applies\n            // wherever it is set.\n            gradient: {\n              enabled: void 0,\n              // Domain. Defaults to the extent of the colour metric.\n              min: void 0,\n              max: void 0,\n              // The value the middle colour is pinned to. Defaults to 0 when\n              // the domain straddles zero (a diverging metric), else none.\n              midpoint: void 0,\n              // With a midpoint, balance the domain around it so equal moves\n              // in either direction read as equally saturated.\n              symmetric: true,\n              // Low -> mid -> high. Two colours make a sequential ramp.\n              colors: void 0,\n              // Explicit `[{ value, color }]` stops; overrides colors/midpoint.\n              stops: void 0\n            },\n            // Continuous colour legend: a gradient strip with end labels and a\n            // hover indicator, in place of the categorical legend. Same options\n            // as the heatmap's.\n            gradientLegend: {\n              enabled: false,\n              width: \"70%\",\n              height: \"70%\",\n              thickness: 12,\n              align: \"center\",\n              stops: 16,\n              showLabels: true,\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              },\n              formatter: void 0\n            }\n          },\n          // Arbitrary-depth treemap: a datum may carry `children`.\n          nested: {\n            // Parent containers appear on their own as soon as the data is\n            // nested; `false` forces the flat two-level layout.\n            enabled: void 0,\n            // Read `drilldown: '<id>'` ids as extra levels instead of as a\n            // click target for the drilldown feature. Off by default, because\n            // on a treemap that id has always meant \"descend on click\".\n            drilldownAsLevels: false\n          },\n          // How a parent is drawn once the data is nested. Per-level overrides\n          // go in `levels` below.\n          parents: {\n            // 'auto' (default): on when the data carries `children`.\n            show: \"auto\",\n            // Inset between a parent's edge and the children inside it.\n            padding: 4,\n            fill: void 0,\n            fillOpacity: 1,\n            borderColor: void 0,\n            borderWidth: 1,\n            borderRadius: void 0,\n            hover: {\n              show: true,\n              color: void 0,\n              width: 2\n            },\n            header: {\n              show: true,\n              height: 22,\n              // Skip the strip on tiles too narrow to show a name.\n              minWidth: 40,\n              align: \"left\",\n              offsetX: 0,\n              offsetY: 0,\n              showValue: false,\n              // (name, { value, depth, seriesIndex, node, w }) => string\n              formatter: void 0,\n              style: {\n                fontSize: \"12px\",\n                fontFamily: void 0,\n                fontWeight: 600,\n                color: void 0,\n                background: void 0,\n                cssClass: \"\"\n              }\n            },\n            tooltip: {\n              // ({ name, value, depth, leafCount, percentOfParent,\n              //    percentOfTotal, node, w }) => html\n              formatter: void 0\n            }\n          },\n          // Per-depth overrides of `parents`, indexed from the outermost group\n          // actually drawn (0 = the series, or the first authored level when a\n          // single series is unwrapped).\n          levels: [],\n          // Click a group to fill the canvas with it; a breadcrumb goes back.\n          // Ignored when the drilldown feature is active on the same chart:\n          // both navigate the hierarchy, and drilldown owns the click there.\n          zoom: {\n            enabled: false,\n            // Overrides `drilldown.breadcrumb` for this chart only. Same shape\n            // (show / position / separator / rootLabel / offsetX / offsetY /\n            // formatter), so a zoomed treemap and a drilled-in chart present\n            // the same affordance without importing the drilldown feature.\n            breadcrumb: 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        unit: {\n          // 'grouped' (each category is its own cluster, laid out in a row) |\n          // 'packed' (one blob; categories coloured + sorted, minority centred) |\n          // 'columns' (each category is a vertical bar built from stacked dots) |\n          // 'grid' (one lattice of cells filled in category order - a waffle /\n          // part-to-whole square \"pie\"; `chart.type:'waffle'` presets this) |\n          // 'scatter' (units on real value axes: a beeswarm, or a 2D\n          // value-value scatter - see the `scatter` block below) |\n          // 'arc' (a semicircular fan) |\n          // 'custom' (positions come from `positions` below).\n          layout: \"grouped\",\n          // `layout: 'custom'` only. The layout provider: either a function\n          // `(objects, rect) => [{id, x, y, r?}]` returning plot pixels, or the\n          // name of one registered with `ApexCharts.registerUnitLayout`.\n          //\n          // This is the whole extension point. A layout is objects in,\n          // positions out; it knows nothing about animation, because the engine\n          // already tweens position, radius and colour and already keeps each\n          // mark's identity across a relayout. So an arrangement this file\n          // cannot know about - a country silhouette, a hex grid, a timeline, a\n          // projection handed over by ApexMaps - is a plugin, not a core edit.\n          //\n          // `objects` carries one entry per mark: {id, index, seriesIndex,\n          // dataPointIndex, label, value, datum, r}. `id` is the datum's own\n          // id/name when the per-unit object form supplies one, so a provider\n          // can address a specific unit rather than a positional slot.\n          //\n          // A mark whose id the provider omits animates out; ids matching no\n          // mark are ignored.\n          positions: void 0,\n          // Update transition, controlling which previous dot each new dot\n          // tweens from. 'group' (default): keyed per category, so dots stay in\n          // their group and category-level enters/exits fade. 'flow': keyed by\n          // global order, so the anonymous crowd migrates across a regroup (the\n          // circles-to-bars effect). 'identity': keyed by each datum's id/name,\n          // so a SPECIFIC unit migrates across any regroup/relayout keeping its\n          // colour and size (needs the object form with unique ids/names).\n          transition: \"group\",\n          // 'circle' | 'square' | 'image' (isotype pictogram).\n          shape: \"circle\",\n          // Icon used when shape:'image'. Each unit renders this icon at the\n          // given size. Set `tint:true` to recolour a monochrome icon to the\n          // category colour (or a per-unit fillColor) so the pictogram matches\n          // the legend; leave it off for multi-colour icons that should keep\n          // their own colours.\n          image: {\n            src: void 0,\n            width: 20,\n            height: 20,\n            tint: false\n          },\n          // dot radius in px, or 'auto' to size dots so the largest cluster\n          // fits its allotted box.\n          size: \"auto\",\n          // The 'columns' layout can size its dots independently of `size`\n          // (which the circle layouts / storyboard beats often pin to a\n          // constant so dots do not resize while migrating). 'inherit' uses\n          // `size`; 'auto' sizes the dots to fill the plot height; a number\n          // pins a columns-only size. Circle / square only (image icons keep\n          // their intrinsic size).\n          columns: {\n            size: \"inherit\"\n          },\n          // The 'grid' (waffle) layout: one lattice of cells filled in category\n          // order. `columns` = cells per row. `total` (optional) fixes the cell\n          // budget - e.g. 100 for a percentage waffle - and largest-remainder\n          // allocates the cells to categories; leave it undefined for one cell\n          // per unit (respects unitValue / maxUnits). `fillFrom` picks the first\n          // row: 'bottom' (default) or 'top'.\n          //\n          // `split:true` switches to SMALL MULTIPLES: one mini-waffle per\n          // category, arranged in a near-square trellis (or `tileColumns` per\n          // row). Each tile then has `total` cells (default 100) and fills a\n          // fraction equal to the category's value over `max` (default = the\n          // largest count, so the leader fills its tile; set `max:100` with\n          // percentage data for true \"of 100\" tiles). The unfilled cells show as\n          // a faint `trackColor` backdrop, and each tile gets its own label.\n          grid: {\n            columns: 10,\n            total: void 0,\n            fillFrom: \"bottom\",\n            // small-multiple (one waffle per category) mode + its knobs:\n            split: false,\n            // tiles per row; undefined = auto (near-square).\n            tileColumns: void 0,\n            // value -> filled-cell denominator; undefined = the largest count.\n            max: void 0,\n            // colour of the empty \"track\" cells; undefined = a neutral grey.\n            trackColor: void 0\n          },\n          // The 'scatter' layout places each unit on real value axes (needs the\n          // object-form data). Two modes via `y`:\n          //  - `y:'lanes'` (default): a BEESWARM. X is the per-unit value axis,\n          //    Y is a category lane. `spread:'swarm'` packs dots off the centre\n          //    line so equal values do not overlap; 'jitter' scatters randomly.\n          //  - `y:'value'`: a 2D value-value scatter. X = each datum's `x`, Y =\n          //    each datum's `y`, on two numeric axes; category = colour.\n          // `sizeRange:[min,max]` turns dots into BUBBLES scaled (by area) from\n          // each datum's `sizeField` (default 'z') - a bubble scatter / bubble\n          // beeswarm. `tickAmount`/`xMin`/`xMax`/`xTitle`/`xFormatter` control the\n          // X axis; the `y*` twins the Y axis (2D only); `laneLabelWidth` the\n          // lane-label gutter (lanes mode); `gridlines` the grid.\n          scatter: {\n            y: \"lanes\",\n            spread: \"swarm\",\n            // Beeswarm orientation (1D lanes mode only): 'horizontal' lays the\n            // value on the X axis with category lanes stacked on Y (default);\n            // 'vertical' lays the value on the Y axis with category lanes as\n            // columns across X. Ignored for the 2D value-value scatter (y:'value').\n            orientation: \"horizontal\",\n            tickAmount: 5,\n            xMin: void 0,\n            xMax: void 0,\n            xTitle: void 0,\n            // (value) => string\n            xFormatter: void 0,\n            yTickAmount: 5,\n            yMin: void 0,\n            yMax: void 0,\n            yTitle: void 0,\n            // (value) => string\n            yFormatter: void 0,\n            // bubble sizing: datum key for the size value + [minR, maxR] in px.\n            sizeField: \"z\",\n            sizeRange: void 0,\n            laneLabelWidth: void 0,\n            gridlines: true\n          },\n          // Opt-in bubble sizing: scale each dot's radius by its per-unit value\n          // (needs the object-form data). Circle shape only; the lattice is\n          // spaced for the largest bubble so dots never overlap.\n          sizeByValue: {\n            enabled: false,\n            // radius (px) for the largest value, or 'auto' to fit the largest\n            // bubble to the plot like uniform auto-sizing.\n            maxRadius: \"auto\",\n            // radius (px) for the smallest value; defaults to ~35% of maxRadius.\n            minRadius: void 0,\n            // 'area' (bubble AREA proportional to value) | 'linear'.\n            scale: \"area\"\n          },\n          // packing gap factor between spiral shells (1 = dots touch).\n          spacing: 1.05,\n          // corner radius for shape:'square'.\n          borderRadius: 0,\n          // How marks move between layouts on an update, and where entering\n          // marks come from.\n          //\n          // `motion`: 'spring' settles each mark on a damped spring, so a\n          // gather interrupted by the next update carries the marks' velocity\n          // into it instead of restarting them from a standstill - which is\n          // what a dragged slider or a scrubbed storyboard does on almost every\n          // frame. 'tween' runs the fixed-duration ease below instead. 'auto'\n          // (the default) is spring, unless `easing` was set to something other\n          // than the default, so an explicit curve keeps working without having\n          // to set `motion` as well.\n          //\n          // `spring`: 'crisp' (default) | 'gentle' (softer, for large reflows)\n          // | 'snappy' (faster, a hint of settle). Scaled by\n          // `chart.animations.speed`, which stretches the spring in time\n          // without making it bouncier.\n          //\n          // `easing` (tween only): 'outCubic' (default: decelerate to a stop) |\n          // 'inOutCubic' (accelerate gently out of rest, weighted travel) |\n          // 'outBack' (overshoot each mark past its slot and spring back - a\n          // per-mark settle), with `overshoot` tuning the spring strength.\n          //\n          // `enter`: where a fresh / appearing mark animates FROM - 'burst'\n          // (default: fly out from the cluster centre) | 'fade' (materialise in\n          // place) | 'rise' (fade in while drifting gently up into the slot).\n          //\n          // Colour, radius and opacity always stay on the out-cubic, under\n          // either motion (a back ease overshoots past 1, which would push RGB\n          // channels / radii out of range; and the spring's rest thresholds are\n          // absolute, so they are far too coarse for a 0..1 quantity).\n          gather: {\n            motion: \"auto\",\n            spring: \"crisp\",\n            easing: \"outCubic\",\n            overshoot: 1.70158,\n            enter: \"burst\"\n          },\n          // The 'arc' layout arranges marks as a PARLIAMENT / hemicycle: seats in\n          // concentric arced rows across an annulus, filled in category order so\n          // each category is a contiguous wedge (the classic seating chart). Angles\n          // use the radialBar convention (0 = top, clockwise); the default sweep is\n          // a top semicircle (a full circle = startAngle 0, endAngle 360).\n          // `innerRadiusRatio` is the donut hole (inner radius / outer); `rows`\n          // fixes the number of seat rows, or 'auto' to size the dots as large as\n          // fit. Like 'packed' the legend carries the category names (no per-wedge\n          // labels).\n          arc: {\n            startAngle: -90,\n            endAngle: 90,\n            innerRadiusRatio: 0.4,\n            rows: \"auto\"\n          },\n          // 1 dot represents this many units of value (waffle scaling).\n          unitValue: 1,\n          // safety cap on total dots; counts scale down proportionally above it.\n          maxUnits: 5e3,\n          // packed layout: order categories smallest-first so the minority\n          // group nests in the centre of the blob.\n          sortByGroup: true,\n          clusterLabels: {\n            show: true,\n            // Label placement relative to the cluster/bar: 'top' (default) or\n            // 'bottom'. A 'bottom' label is always straight; the curved arc\n            // (below) rides the top crown only.\n            position: \"top\",\n            curved: true,\n            fontSize: \"13px\",\n            fontFamily: void 0,\n            fontWeight: 600,\n            // defaults to the cluster's own colour when undefined.\n            color: void 0,\n            offsetY: 0,\n            // (name, { seriesIndex, value, percent, w }) => string\n            formatter: void 0\n          },\n          tooltip: {\n            // Per-unit tooltip body. Each dot carries its category (seriesIndex)\n            // and its index within that category (dataPointIndex), so the\n            // formatter can look up per-unit data and return a string/HTML.\n            // ({ seriesName, seriesIndex, dataPointIndex, count, unitValue,\n            //    color, w }) => string\n            // Default: \"#<dataPointIndex+1> of <count>\".\n            formatter: void 0\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(v2) {\n                return String(v2);\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(w2) {\n                return (\n                  /**\n                   * @param {number} a\n                   * @param {number} b\n                   */\n                  w2.globals.seriesTotals.reduce((a2, b2) => a2 + b2, 0) / w2.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          // How far a clicked slice slides out of the pie (px), measured along\n          // its own mid-angle. The slice is translated, not redrawn at a bigger\n          // radius, so its shape and the quantity it encodes are unchanged and\n          // a gap opens between it and the rest of the pie. The inner\n          // percentage label (and the outer name label, when enabled) ride\n          // along with it. Ignored for polarArea, where the radius is the\n          // value, and in a drilldown pie/donut, where a click navigates (the\n          // slice would slide out only to be discarded by the drill, and\n          // states.active takes the click feedback back over). Set 0 to keep\n          // the slice in place.\n          expandOffset: 10,\n          // Hover outline: a translucent band traced just outside the rim of\n          // the hovered slice, so the slice keeps its own colour instead of\n          // being lightened. Takes the place of the states.hover filter for\n          // pie / donut / polarArea, and is skipped entirely when\n          // states.hover.filter.type is 'none' (that stays the way to turn all\n          // hover feedback off). Applies to pie, donut and polarArea.\n          hoverOutline: {\n            show: true,\n            size: 8,\n            // band thickness (px)\n            // Extra clearance between the slice rim and the band (px), ON TOP\n            // of the slice stroke: the band always starts at the outer edge of\n            // the stroke, never under it. Default 0, because a stroke is\n            // normally present (stroke.width defaults to 2) and already reads\n            // as the separation. Any gap beyond that and the band stops\n            // belonging to its slice and starts reading as a ring of its own.\n            gap: 0,\n            opacity: 0.3,\n            // band opacity, over the slice colour\n            color: void 0\n            // defaults to the hovered slice's colour\n          },\n          // Rounds the corners of each slice (in px). Applies to pie, donut and\n          // polarArea (all rendered by the Pie module). 0 = sharp corners\n          // (default, unchanged behavior). The value is clamped per slice so\n          // opposing corner fillets never cross on thin/narrow slices.\n          borderRadius: 0,\n          // Gap between adjacent slices (in px). Applies to pie, donut and\n          // polarArea. 0 = slices touch (default). Each slice is inset\n          // symmetrically, so its mid-angle (data label + hit region) is kept.\n          spacing: 0,\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(w2) {\n                  return w2.globals.seriesTotals.reduce((a2, b2) => a2 + b2, 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        sunburst: {\n          // Sunburst / nested pie-donut (hierarchical radial). Rings go from the\n          // centre hole outward, one per hierarchy level; each child arc is\n          // nested inside its parent's angular wedge.\n          offsetX: 0,\n          offsetY: 0,\n          startAngle: 0,\n          endAngle: 360,\n          // Centre hole radius, as a % of the max radius (like donut size).\n          innerSize: \"15%\",\n          // Corner rounding + inter-arc gap (px), same semantics as the pie\n          // family (see plotOptions.pie.borderRadius / .spacing).\n          borderRadius: 0,\n          spacing: 1,\n          // How a branch that bottoms out before the deepest level is drawn:\n          // 'extend' stretches the leaf arc out to the rim (default, matches\n          // d3); 'stop' leaves the outer rings empty behind it.\n          leaf: \"extend\",\n          // Angular partition of a parent's wedge among its children:\n          // 'normalize' splits by each child's share of its siblings (safe for\n          // any data); 'strict' expects children to sum to the parent's value.\n          partition: \"normalize\",\n          // Each depth level is tinted this much lighter than its parent colour\n          // (0 = keep parent colour, 1 = white). A per-node `color` overrides.\n          tint: 0.14,\n          // Click a wedge to zoom into that branch (its subtree fills the\n          // chart; a breadcrumb walks back). Click the focused inner ring to\n          // zoom out. Set false to disable.\n          zoomOnClick: true,\n          dataLabels: {\n            show: true,\n            // Hide the label on any arc narrower than this (degrees), so tiny\n            // wedges do not overflow with text.\n            minAngleToShow: 8,\n            style: {\n              fontSize: \"12px\",\n              fontFamily: void 0,\n              fontWeight: 400,\n              colors: void 0\n            }\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        // Ride data labels to their new position on a data-change update\n        // (e.g. a bar chart race), instead of snapping. Off by default so\n        // existing charts are unchanged. Speed/easing follow\n        // chart.animations.dynamicAnimation. Bar/column only.\n        animate: {\n          enabled: false\n        },\n        // Count the numeric value up/down from its previous value on update,\n        // like countUp.js. Off by default. The dataLabels.formatter runs each\n        // frame, so number formatting (decimals, separators, prefixes) is\n        // preserved. Bar/column only.\n        countUp: {\n          enabled: false\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`. Receives ({ id, point, seriesIndex, dataPointIndex })\n        // and returns a level (or a promise of one). A throw, a rejection, or a\n        // resolved value without a `data` array leaves the chart exactly where\n        // it was and fires `drillDownError` - a failed fetch is ordinary, not\n        // a reason to strand the view.\n        // onDrillDown: undefined,\n        // Overlay shown while an async level resolves. `text` is optional: with\n        // none, the spinner shows alone (and carries 'Loading' as its\n        // accessible name), which keeps the default free of any language.\n        loading: {\n          show: true\n          // text: 'Loading…',\n        },\n        // Cache levels resolved by `onDrillDown`, keyed by id, so drilling back\n        // down a branch does not re-fetch it. Call `chart.drillDown` module's\n        // clearCache() when the data behind an already-drilled chart changes.\n        cache: true,\n        // The dot that marks a drillable point on a line/area chart drawn\n        // without markers. A bar, slice, tile or cell is already a visible,\n        // clickable mark; a line point is not, so without this the chart would\n        // give no sign that anything can be opened. Only drillable points get\n        // one, which is what makes them read as openable. Set `show: false` to\n        // supply your own affordance (turning `markers.size` on, for instance).\n        // Omitted colours inherit the series marker defaults.\n        marker: {\n          show: true,\n          size: 6,\n          // shape: undefined,      // 'circle' | 'square' | 'rect'\n          // fillColor: undefined,  // defaults to the series colour\n          strokeColor: \"#fff\"\n        }\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            value: 0.15\n          }\n        },\n        active: {\n          allowMultipleDataPointsSelection: false,\n          filter: {\n            type: \"darken\",\n            value: 0.35\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        // Facet (#13): read `--apx-*` CSS design tokens from the cascade\n        // (accent/fore/grid/surface + series-1..N). true (default) reads any\n        // present (absence is a no-op); false disables. Tokens top the\n        // resolution chain below explicit config. Tokens are re-read on every\n        // render; call chart.refreshTokens() to pick up a runtime CSS change\n        // that does not itself trigger a render.\n        tokens: true,\n        // Facet (#13): 'os' follows prefers-color-scheme + prefers-contrast\n        // reactively (SSR-safe, cleaned up on destroy). false disables.\n        follow: false,\n        // 'os' | false\n        // Facet (#13): a theme registered via ApexCharts.registerTheme(name, def)\n        name: \"\",\n        // '' | registered theme name\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}\nconst TYPE_OWNED = \"_apexOwnedByType\";\nconst ownedBy = (types, fn) => {\n  const marked = (\n    /** @type {any} */\n    fn\n  );\n  marked[TYPE_OWNED] = types;\n  return fn;\n};\nconst TYPE_OWNED_PATHS = [\n  // What the tooltip reads and how it resolves a hover. `custom` is the sharp\n  // one: each built-in reads globals only its own type fills.\n  \"tooltip.custom\",\n  \"tooltip.shared\",\n  \"tooltip.intersect\",\n  \"tooltip.followCursor\",\n  // Whether values are written on the marks, and how they are phrased. A pie's\n  // percentage formatter handed a treemap a category name.\n  \"dataLabels.enabled\",\n  \"dataLabels.formatter\",\n  \"plotOptions.bar.dataLabels.position\",\n  // A box plot's outlier markers are hit targets; a violin draws none.\n  \"markers.size\",\n  // Hover and select feedback, off by design on the types that draw their own.\n  \"states.hover.filter.type\",\n  \"states.active.filter.type\",\n  // Axis chrome that exists to be pointed at.\n  \"xaxis.crosshairs.width\",\n  \"xaxis.tickPlacement\",\n  \"xaxis.tooltip.enabled\",\n  // Interaction the type either supports or does not: a violin's categories\n  // cannot be range-zoomed, and an index-keyed summary animates as churn.\n  \"chart.zoom.enabled\",\n  \"chart.animations.dynamicAnimation.enabled\"\n];\nconst readPath = (obj, path) => {\n  let cur = (\n    /** @type {any} */\n    obj\n  );\n  for (const key of path.split(\".\")) {\n    if (cur == null || typeof cur !== \"object\") return void 0;\n    cur = cur[key];\n  }\n  return cur;\n};\nconst writePath = (obj, path, value) => {\n  const keys = path.split(\".\");\n  const last = keys.pop();\n  let cur = (\n    /** @type {any} */\n    obj\n  );\n  for (const key of keys) {\n    if (cur[key] == null || typeof cur[key] !== \"object\") cur[key] = {};\n    cur = cur[key];\n  }\n  if (value === void 0) delete cur[\n    /** @type {string} */\n    last\n  ];\n  else cur[\n    /** @type {string} */\n    last\n  ] = value;\n};\nconst TYPE_ALIASES = {\n  funnel: \"bar\",\n  pyramid: \"bar\",\n  gauge: \"radialBar\",\n  waffle: \"unit\",\n  histogram: \"bar\"\n};\nconst typeOpts = (type, config) => {\n  var _a, _b;\n  const base = (\n    /** @type {Record<string, string>} */\n    TYPE_ALIASES[type]\n  );\n  return {\n    chart: {\n      type: base || type,\n      requestedType: base ? type : void 0,\n      // Stacking belongs to the chart, not to its type, so both sides see it.\n      stacked: (_a = config.chart) == null ? void 0 : _a.stacked\n    },\n    plotOptions: {\n      bar: { isFunnel: type === \"funnel\" || type === \"pyramid\" },\n      histogram: (_b = config.plotOptions) == null ? void 0 : _b.histogram\n    },\n    // The histogram's defaults read the series to decide whether overlaid bins\n    // share a tooltip. Both sides are asked with the series the chart has now.\n    series: config.series,\n    yaxis: [{ title: {}, labels: {}, axisBorder: {}, axisTicks: {} }]\n  };\n};\nconst isUntouched = (current, fromDefault) => {\n  if (typeof current === \"function\") {\n    if (Array.isArray(\n      /** @type {any} */\n      current[TYPE_OWNED]\n    )) return true;\n    return typeof fromDefault === \"function\" && String(current) === String(fromDefault);\n  }\n  if (typeof fromDefault === \"function\") return current === void 0;\n  if (current === fromDefault) return true;\n  try {\n    return JSON.stringify(current) === JSON.stringify(fromDefault);\n  } catch (e2) {\n    return false;\n  }\n};\nconst getRangeValues = ({\n  isTimeline,\n  seriesIndex,\n  dataPointIndex,\n  y1,\n  y2,\n  w: w2\n}) => {\n  var _a;\n  let start = w2.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n  let end = w2.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n  let ylabel = w2.labelData.labels[dataPointIndex];\n  let seriesName = w2.config.series[seriesIndex].name ? w2.config.series[seriesIndex].name : \"\";\n  const yLbFormatter = w2.formatters.ttKeyFormatter;\n  const yLbTitleFormatter = w2.config.tooltip.y.title.formatter;\n  const opts = {\n    w: w2,\n    seriesIndex,\n    dataPointIndex,\n    start,\n    end\n  };\n  if (typeof yLbTitleFormatter === \"function\") {\n    seriesName = yLbTitleFormatter(seriesName, opts);\n  }\n  if ((_a = w2.config.series[seriesIndex].data[dataPointIndex]) == null ? void 0 : _a.x) {\n    ylabel = w2.config.series[seriesIndex].data[dataPointIndex].x;\n  }\n  if (!isTimeline) {\n    if (w2.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(w2);\n      ylabel = xFormat.xLabelFormat(\n        w2.formatters.ttKeyFormatter,\n        ylabel,\n        ylabel,\n        {\n          i: void 0,\n          dateFormatter: new DateTime(w2).formatDate,\n          w: w2\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 = w2.globals.colors[seriesIndex];\n  if (w2.config.tooltip.x.formatter === void 0) {\n    if (w2.config.xaxis.type === \"datetime\") {\n      const datetimeObj = new DateTime(w2);\n      startVal = datetimeObj.formatDate(\n        datetimeObj.getDate(start),\n        w2.config.tooltip.x.format\n      );\n      endVal = datetimeObj.formatDate(\n        datetimeObj.getDate(end),\n        w2.config.tooltip.x.format\n      );\n    } else {\n      startVal = start;\n      endVal = end;\n    }\n  } else {\n    startVal = w2.config.tooltip.x.formatter(start);\n    endVal = w2.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  /**\n   * The defaults a chart type chooses for itself, which is the same pick\n   * Config.init makes on the initial render. Shared with the update path so\n   * that \"what does type X want\" has one answer and cannot drift between the\n   * two. Modes layered on top of a type (brush, slope, sparkline) are not\n   * included: they belong to the chart, not to its type, and a type change does\n   * not disturb them.\n   *\n   * @param {Record<string, any>} opts a config, read for the type and for the\n   *   flags that pick a variant of it\n   * @returns {Record<string, any>}\n   */\n  static forType(opts) {\n    var _a, _b;\n    const defaults = new Defaults(opts);\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      \"unit\",\n      \"sunburst\",\n      \"pie\",\n      \"polarArea\",\n      \"donut\",\n      \"radar\",\n      \"radialBar\"\n    ];\n    const requestedType = opts.chart.requestedType;\n    let chartDefaults;\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 (requestedType === \"histogram\") {\n      chartDefaults = defaults.histogram();\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    return chartDefaults;\n  }\n  /**\n   * Re-choose the type-owned leaves (see TYPE_OWNED_PATHS) after\n   * `updateOptions({ chart: { type } })` moved the chart from one type to\n   * another, so the chart behaves as the type it now is.\n   *\n   * A leaf is only handed over when it still holds exactly what `fromType`\n   * chose for it. That single test covers every way a value can be the user's\n   * instead of ours: set at construction, set by an earlier update, or set by\n   * this very update. `options` is consulted too, so an explicit ask in the\n   * same call wins even when it happens to equal the outgoing default.\n   *\n   * @param {Record<string, any>} config the merged w.config, mutated in place\n   * @param {string} fromType the type (or requested alias) before this update\n   * @param {Record<string, any>} [options] this update's payload\n   */\n  static handOverTypeDefaults(config, fromType, options2) {\n    const toType = config.chart.requestedType || config.chart.type;\n    if (!fromType || fromType === toType) return;\n    const base = new Options().init();\n    const from = Utils$1.extend(\n      base,\n      Defaults.forType(typeOpts(fromType, config))\n    );\n    const to = Utils$1.extend(base, Defaults.forType(typeOpts(toType, config)));\n    for (const path of TYPE_OWNED_PATHS) {\n      if (options2 && readPath(options2, path) !== void 0) continue;\n      const fromDefault = readPath(from, path);\n      const toDefault = readPath(to, path);\n      if (fromDefault === void 0 && toDefault === void 0) continue;\n      if (!isUntouched(readPath(config, path), fromDefault)) continue;\n      writePath(config, path, toDefault);\n    }\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  histogram() {\n    var _a, _b, _c, _d;\n    const overlaid = Array.isArray((_a = this.opts) == null ? void 0 : _a.series) && this.opts.series.length > 1 && ((_d = (_c = (_b = this.opts) == null ? void 0 : _b.plotOptions) == null ? void 0 : _c.histogram) == null ? void 0 : _d.overlap) !== false;\n    return __spreadProps(__spreadValues({}, this.bar()), {\n      chart: {\n        stacked: false,\n        // The bins are the summary: they are chosen once from the whole sample\n        // and do NOT re-derive from the visible window, so zooming only\n        // magnifies bars while hiding the rest of the distribution the shape is\n        // read against. Off by default, mirroring heatmap and violin; users can\n        // opt back in with chart.zoom.enabled: true.\n        zoom: {\n          enabled: false\n        },\n        animations: {\n          // The bars of a histogram are one shape, not N independent\n          // categories, so revealing them one by one reads as a sequence that\n          // is not in the data. The distribution rises as a whole instead.\n          animateGradually: {\n            enabled: false\n          }\n        }\n      },\n      plotOptions: {\n        bar: {\n          // Bins are adjacent by definition, so the columns touch: a gap\n          // between them would read as a gap in the data. Rounded corners are\n          // dropped for the same reason (they shave area off each bar, and a\n          // histogram's whole claim is that area is proportional to count).\n          columnWidth: \"100%\",\n          borderRadius: 0,\n          dataLabels: {\n            position: \"top\"\n          }\n        }\n      },\n      dataLabels: {\n        enabled: false\n      },\n      fill: overlaid ? { opacity: 0.65 } : {},\n      // A hairline separator keeps the bin boundaries readable once the columns\n      // touch, the same treatment heatmap cells get.\n      stroke: overlaid ? { show: false } : {\n        show: true,\n        width: 1,\n        colors: [\"#fff\"]\n      },\n      xaxis: {\n        type: \"numeric\",\n        // The axis carries bin midpoints; the range is what people read, and\n        // the tooltip already states it.\n        tooltip: {\n          enabled: false\n        }\n      },\n      tooltip: {\n        // Overlaid bars share a bin, so hovering one has to report both\n        // distributions: the comparison is the whole point of stacking them on\n        // one axis.\n        shared: overlaid,\n        intersect: false,\n        x: {\n          formatter: (val, opts) => {\n            var _a2, _b2;\n            const edges = (_b2 = (_a2 = opts == null ? void 0 : opts.w) == null ? void 0 : _a2.histogramData) == null ? void 0 : _b2.edges;\n            const k = opts == null ? void 0 : opts.dataPointIndex;\n            if (!Array.isArray(edges) || typeof k !== \"number\" || k < 0) {\n              return String(val);\n            }\n            const lo = edges[k];\n            const hi = edges[k + 1];\n            if (lo === void 0 || hi === void 0) return String(val);\n            const fmt = (v2) => Number.isInteger(v2) ? String(v2) : v2.toFixed(2);\n            return `${fmt(lo)} to ${fmt(hi)}`;\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: ownedBy(\n          [\"candlestick\"],\n          ({ seriesIndex, dataPointIndex, w: w2 }) => {\n            return this._getBoxTooltip(\n              w2,\n              seriesIndex,\n              dataPointIndex,\n              [\"Open\", \"High\", \"\", \"Low\", \"Close\"],\n              \"candlestick\"\n            );\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: ownedBy(\n          [\"boxPlot\"],\n          ({ seriesIndex, dataPointIndex, w: w2 }) => {\n            return this._getBoxTooltip(\n              w2,\n              seriesIndex,\n              dataPointIndex,\n              [\"Minimum\", \"Q1\", \"Median\", \"Q3\", \"Maximum\"],\n              \"boxPlot\"\n            );\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: ownedBy(\n          [\"violin\"],\n          ({ seriesIndex, dataPointIndex, w: w2 }) => {\n            return this._getViolinTooltip(w2, seriesIndex, dataPointIndex);\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  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: w2 }) {\n          const getVal = () => {\n            const start = w2.rangeData.seriesRangeStart[seriesIndex][dataPointIndex];\n            const end = w2.rangeData.seriesRangeEnd[seriesIndex][dataPointIndex];\n            return end - start;\n          };\n          if (w2.globals.comboCharts) {\n            if (w2.config.series[seriesIndex].type === \"rangeBar\" || w2.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        custom: ownedBy(\n          [\"rangeBar\"],\n          /** @param {Record<string, any>} opts */\n          (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      },\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        custom: ownedBy(\n          [\"rangeArea\"],\n          /** @param {Record<string, any>} opts */\n          (opts) => 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((c2) => {\n        return Array.isArray(c2) ? c2 : String(c2);\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        // A heatmap is a fixed grid: zooming/panning only distorts the cells\n        // and (on a datetime axis) collapses the month labels to repeats, so\n        // it is off by default, mirroring treemap. Users can opt back in with\n        // chart.zoom.enabled: true.\n        zoom: {\n          enabled: false\n        }\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        // Anchor the tooltip above the hovered cell with a downward arrow\n        // (flipping below near the top edge), the same treatment horizontal\n        // bars get, rather than trailing the cursor. Opt back into the old\n        // behavior with tooltip.followCursor: true.\n        followCursor: false,\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        // A treemap has no x axis to read: the tiles are the whole plot, and\n        // the ticks mark data-point positions that mean nothing here. One tick\n        // per row is invisible at a dozen rows and a solid comb under the plot\n        // at several hundred, so they are off by default. Set\n        // `xaxis.axisTicks.show: true` to bring them back.\n        axisTicks: {\n          show: false\n        }\n      }\n    };\n  }\n  unit() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        enabled: false\n      },\n      stroke: {\n        show: false,\n        width: 0\n      },\n      fill: {\n        opacity: 1\n      },\n      tooltip: {\n        followCursor: true,\n        x: {\n          show: false\n        }\n      },\n      legend: {\n        show: true,\n        position: \"bottom\"\n      },\n      grid: {\n        padding: {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0\n        }\n      }\n    };\n  }\n  sunburst() {\n    return {\n      chart: {\n        toolbar: {\n          show: false\n        }\n      },\n      dataLabels: {\n        style: {\n          colors: [\"#fff\"]\n        },\n        dropShadow: {\n          enabled: true\n        }\n      },\n      stroke: {\n        colors: [\"#fff\"]\n      },\n      fill: {\n        opacity: 1\n      },\n      // Unlike pie, sunburst keeps the STANDARD themed tooltip (light/dark).\n      // Slice-coloured tooltips (fillSeriesColor) wash out here because child\n      // arcs are tinted toward white per depth; users can still opt in.\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  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         * The share of the whole, as a percentage. Guarded because a config\n         * survives a chart-type change: a pie that becomes a treemap hands\n         * this same default a category NAME, and a default of ours must not\n         * throw on a value it was never designed for.\n         * @param {any} val\n         */\n        formatter(val) {\n          return typeof val === \"number\" ? val.toFixed(1) + \"%\" : val;\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         * The share of the whole, as a percentage. Guarded because a config\n         * survives a chart-type change: a pie that becomes a treemap hands\n         * this same default a category NAME, and a default of ours must not\n         * throw on a value it was never designed for.\n         * @param {any} val\n         */\n        formatter(val) {\n          return typeof val === \"number\" ? val.toFixed(1) + \"%\" : val;\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         * The share of the whole, as a percentage. Guarded because a config\n         * survives a chart-type change: a pie that becomes a treemap hands\n         * this same default a category NAME, and a default of ours must not\n         * throw on a value it was never designed for.\n         * @param {any} val\n         */\n        formatter(val) {\n          return typeof val === \"number\" ? val.toFixed(1) + \"%\" : val;\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(w2, seriesIndex, dataPointIndex, labels, chartType) {\n    const o2 = w2.candleData.seriesCandleO[seriesIndex][dataPointIndex];\n    const h2 = w2.candleData.seriesCandleH[seriesIndex][dataPointIndex];\n    const m2 = w2.candleData.seriesCandleM[seriesIndex][dataPointIndex];\n    const l2 = w2.candleData.seriesCandleL[seriesIndex][dataPointIndex];\n    const c2 = w2.candleData.seriesCandleC[seriesIndex][dataPointIndex];\n    const _si = (\n      /** @type {Record<string,any>} */\n      w2.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>${w2.seriesData.series[seriesIndex][dataPointIndex]}</strong>\n        </div>`;\n    } else {\n      return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w2.config.chart.type}\"><div>${labels[0]}: <span class=\"value\">` + o2 + `</span></div><div>${labels[1]}: <span class=\"value\">` + h2 + \"</span></div>\" + (m2 ? `<div>${labels[2]}: <span class=\"value\">` + m2 + \"</span></div>\" : \"\") + `<div>${labels[3]}: <span class=\"value\">` + l2 + `</span></div><div>${labels[4]}: <span class=\"value\">` + c2 + \"</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(w2, seriesIndex, dataPointIndex) {\n    var _a, _b, _c;\n    const minV = (_a = w2.violinData.seriesViolinMin[seriesIndex]) == null ? void 0 : _a[dataPointIndex];\n    const maxV = (_b = w2.violinData.seriesViolinMax[seriesIndex]) == null ? void 0 : _b[dataPointIndex];\n    const pts = ((_c = w2.violinData.seriesViolinPoints[seriesIndex]) == null ? void 0 : _c[dataPointIndex]) || [];\n    const name2 = (\n      /** @type {Record<string,any>} */\n      w2.config.series[seriesIndex].name || \"series-\" + (seriesIndex + 1)\n    );\n    return `<div class=\"apexcharts-tooltip-box apexcharts-tooltip-${w2.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}\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;\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 = Defaults.forType(opts);\n      if ((_a = opts.chart.brush) == null ? void 0 : _a.enabled) {\n        chartDefaults = defaults.brush(chartDefaults);\n      }\n      if ((_c = (_b = opts.plotOptions) == null ? void 0 : _b.line) == null ? void 0 : _c.isSlopeChart) {\n        chartDefaults = defaults.slope();\n      }\n      if (opts.chart.stacked && opts.chart.stackType === \"100%\") {\n        opts = defaults.stacked100(opts);\n      }\n      if ((_e = (_d = opts.plotOptions) == null ? void 0 : _d.bar) == null ? void 0 : _e.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 (((_f = opts.chart.sparkline) == null ? void 0 : _f.enabled) || ((_h = (_g = Environment.getApex().chart) == null ? void 0 : _g.sparkline) == null ? void 0 : _h.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\" && requested !== \"waffle\" && requested !== \"histogram\") {\n      return opts;\n    }\n    opts.chart.requestedType = requested;\n    if (requested === \"waffle\") {\n      opts.plotOptions = opts.plotOptions || {};\n      opts.plotOptions.unit = opts.plotOptions.unit || {};\n      if (opts.plotOptions.unit.layout == null) {\n        opts.plotOptions.unit.layout = \"grid\";\n      }\n      if (opts.plotOptions.unit.shape == null) {\n        opts.plotOptions.unit.shape = \"square\";\n      }\n      opts.chart.type = \"unit\";\n    } else 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    } else if (requested === \"histogram\") {\n      opts.xaxis = opts.xaxis || {};\n      if (opts.xaxis.type == null) {\n        opts.xaxis.type = \"numeric\";\n      }\n      opts.chart.type = \"bar\";\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\" || chartType === \"unit\" || chartType === \"sunburst\";\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, w2) {\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 (w2 && !series) {\n      series = w2.config.series;\n    }\n    if (isLogY && series.length !== opts.yaxis.length && series.length) {\n      opts.yaxis = series.map((s2, i2) => {\n        if (!s2.name) {\n          series[i2].name = `series-${i2 + 1}`;\n        }\n        if (opts.yaxis[i2]) {\n          opts.yaxis[i2].seriesName = series[i2].name;\n          return opts.yaxis[i2];\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.hasNullValues = false;\n    gl.invalidLogScale = false;\n    gl.seriesRangeName = {};\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.delayedElements = [];\n    gl.pointsArray = [];\n    gl.barCanvasCoords = null;\n    gl.activeRenderer = null;\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(v2) {\n          gl[key] = v2;\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      // ── Animation-frame handles cancellable across re-renders ─────────────────\n      // The chart-type instances that own these loops (Radial needle, Unit\n      // gather/exit) are recreated every render, so the handle lives here: a new\n      // render cancels the previous render's loop before starting its own,\n      // instead of leaving it to animate detached nodes. NOT reset per render.\n      radialNeedleRAF: null,\n      unitGatherRAF: null,\n      unitExitRAF: null,\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      // The `--apx-surface` value Theme wrote into chart.background, so a later\n      // token read can tell its own value from an explicit user background and\n      // update it (see Theme.applyTokenChrome). Persistent: a re-render must\n      // not forget it.\n      tokenSurface: void 0,\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, capturedSeriesIndex, capturedDataPointIndex,\n      //       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      // hasNullValues / invalidLogScale are recomputed every render and reset in\n      // initGlobalVars (they are NOT stable between renders).\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      // polarArea's last-drawn sector angles. Its angles are count-based, not\n      // value-based, so a data-change animation cannot reconstruct them from\n      // previousPaths (the previous VALUES) the way pie does; Pie.draw stashes\n      // the real ones here each render.\n      prevPolarAngles: null,\n      // Streaming scroll: previous frame's parsed rows + pixel positions,\n      // captured by Series.getPreviousPaths(). Consulted (like previousPaths)\n      // only while a data-change morph renders. See StreamScroll.\n      prevStreamFrame: null,\n      // Axis-chrome snapshot (tick label texts/positions + gridline positions)\n      // captured alongside prevStreamFrame; consumed once by AxisTransition\n      // after a variable-length re-render mounts.\n      prevChromeFrame: null,\n      // ── SVG viewport (set by Dimensions, but persistent as layout anchor) ─────\n      svgWidth: 0,\n      svgHeight: 0,\n      // Fingerprint of the container inputs that fed the last rendered size, so\n      // the window-resize handler can skip a redraw (and the animation teardown\n      // it causes) when a resize does not change the chart's drawing box.\n      lastResizeSignature: null,\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   * Lazy initial-series snapshot. Capturing `initialSeries` used to deep-clone\n   * the entire series on every parse and every update: the single largest CPU\n   * bucket at 50k+ points (profiled at ~23ms per 50k update). The setter now\n   * stores a cheap per-series shallow copy (series OBJECTS copied, data arrays\n   * shared) and the deep snapshot materializes only when something actually\n   * reads it (resetSeries, toolbar reset-home, tooltip same-length check).\n   *\n   * Why sharing the data arrays is safe: internal \"mutations\" of a series'\n   * data are property REPLACEMENTS (`series[i].data = []` on legend collapse),\n   * which cannot reach the captured copies because each series object was\n   * copied at capture time. The one in-place mutator (appendData's push loop)\n   * re-captures immediately after mutating, so the pending snapshot never\n   * spans the mutation.\n   *\n   * @param {Record<string, any>} globals\n   */\n  defineLazyInitialSeries(globals) {\n    let src = [];\n    let snap = null;\n    Object.defineProperty(globals, \"initialSeries\", {\n      configurable: true,\n      enumerable: true,\n      get() {\n        if (snap === null) {\n          snap = Utils$1.clone(src);\n        }\n        return snap;\n      },\n      set(value) {\n        src = Array.isArray(value) ? value.map(\n          (s2) => s2 && typeof s2 === \"object\" && !Array.isArray(s2) ? __spreadValues({}, s2) : s2\n        ) : value;\n        snap = null;\n        globals._initialSeriesPeek = src;\n      }\n    });\n    globals._initialSeriesPeek = src;\n  }\n  /**\n   * @param {Record<string, any>} config\n   */\n  init(config) {\n    const globals = this.globalVars(config);\n    this.initGlobalVars(globals);\n    this.defineLazyInitialSeries(globals);\n    globals.initialConfig = Utils$1.extend({}, config);\n    globals.initialSeries = 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 w2 = {\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        // Measure tool pre-selected via toolbar.autoSelected: 'measure'. Armed by\n        // the Measure module (self-arms on mount) and the toolbar button.\n        measureEnabled: config.chart.toolbar.autoSelected === \"measure\" && !!config.chart.toolbar.tools.measure && !!(config.chart.measure && config.chart.measure.enabled),\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        // 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      // Histogram binning — written by Data.binHistogramData() each render;\n      // empty for all other chart types.\n      //   edges[k]     = bin boundaries (length = binCount + 1)\n      //   counts[i][k] = raw observation count per series, before normalize\n      //   rule         = the rule that chose the width ('fd', 'sturges', ...)\n      histogramData: {\n        edges: [],\n        binWidth: 0,\n        counts: [],\n        rule: \"\",\n        capped: false\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        unitData: []\n        // per-unit data for the `unit` chart (see SeriesData)\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        gridPad: { top: 0, right: 0, bottom: 0, left: 0 }\n      }\n    };\n    Object.defineProperty(globals, \"dom\", {\n      get() {\n        return w2.dom;\n      },\n      set(v2) {\n        w2.dom = v2;\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            w2.formatters[key]\n          );\n        },\n        set(v2) {\n          w2.formatters[key] = v2;\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      \"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            w2.interact[key]\n          );\n        },\n        set(v2) {\n          w2.interact[key] = v2;\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      \"gridPad\"\n    ]) {\n      Object.defineProperty(globals, key, {\n        get() {\n          return (\n            /** @type {Record<string,any>} */\n            w2.layout[key]\n          );\n        },\n        set(v2) {\n          w2.layout[key] = v2;\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            w2.seriesData[key]\n          );\n        },\n        set(v2) {\n          w2.seriesData[key] = v2;\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            w2.axisFlags[key]\n          );\n        },\n        set(v2) {\n          w2.axisFlags[key] = v2;\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            w2.labelData[key]\n          );\n        },\n        set(v2) {\n          w2.labelData[key] = v2;\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            w2.rangeData[key]\n          );\n        },\n        set(v2) {\n          w2.rangeData[key] = v2;\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            w2.candleData[key]\n          );\n        },\n        set(v2) {\n          w2.candleData[key] = v2;\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            w2.violinData[key]\n          );\n        },\n        set(v2) {\n          w2.violinData[key] = v2;\n        },\n        enumerable: false,\n        configurable: true\n      });\n    }\n    return (\n      /** @type {import('../types/internal').ChartStateW} */\n      /** @type {unknown} */\n      w2\n    );\n  }\n}\nclass CoreUtils {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\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((s2) => {\n        if (s2.type === \"bar\" || s2.type === \"column\" || s2.type === \"candlestick\" || s2.type === \"boxPlot\" || s2.type === \"violin\") {\n          comboBarCount++;\n        }\n        if (typeof s2.type !== \"undefined\" && s2.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 w2 = this.w;\n    const total = [];\n    if (w2.seriesData.series.length === 0) return total;\n    for (let i2 = 0; i2 < w2.seriesData.series[w2.globals.maxValsInArrayIndex].length; i2++) {\n      let t2 = 0;\n      for (let j = 0; j < w2.seriesData.series.length; j++) {\n        if (typeof w2.seriesData.series[j][i2] !== \"undefined\" && excludedSeriesIndices.indexOf(j) === -1) {\n          t2 += w2.seriesData.series[j][i2];\n        }\n      }\n      total.push(t2);\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 w2 = this.w;\n    const total = [];\n    w2.labelData.seriesGroups.forEach((sg) => {\n      const includedIndexes = [];\n      w2.config.series.forEach((s2, si) => {\n        if (sg.indexOf(w2.seriesData.seriesNames[si]) > -1) {\n          includedIndexes.push(si);\n        }\n      });\n      const excludedIndices = w2.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((a2) => Array.isArray(a2.seriesName));\n    cnf.series.forEach((_s, i2) => {\n      unassignedSeriesIndices.push(i2);\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((s2, si) => {\n            if (\n              /** @type {any} */\n              s2.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                    s2.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 i2 = 0; i2 < unassignedYAxisIndices.length; i2++) {\n      lastUnassignedYAxis = unassignedYAxisIndices[i2];\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((i2) => {\n      axisSeriesMap[lastUnassignedYAxis].push(i2);\n      seriesYAxisReverseMap[i2] = 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 r2 = [];\n    const series = (\n      /** @type {any[]} */\n      this.w.config.series\n    );\n    if (index === null) {\n      r2 = series.filter((d) => d !== null);\n    } else if (series[index] && Array.isArray(series[index].data)) {\n      r2 = series[index].data.filter((d) => d !== null);\n    } else {\n      r2 = series[index] !== null && series[index] !== void 0 ? [series[index]] : [];\n    }\n    return r2.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, i2, arr) => val === arr[0]\n    );\n  }\n  /**\n   * @param {any[]} labels\n   */\n  getCategoryLabels(labels) {\n    const w2 = this.w;\n    let catLabels = labels.slice();\n    if (w2.config.xaxis.convertedCatToNumeric) {\n      catLabels = labels.map((i2) => {\n        return w2.config.xaxis.labels.formatter(i2 - w2.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 w2 = this.w;\n    w2.globals.maxValsInArrayIndex = w2.seriesData.series.map((a2) => a2.length).indexOf(\n      Math.max.apply(\n        Math,\n        /**\n         * @param {number[]} a\n         */\n        w2.seriesData.series.map((a2) => a2.length)\n      )\n    );\n  }\n  getLargestMarkerSize() {\n    const w2 = this.w;\n    let size = 0;\n    w2.globals.markers.size.forEach((m2) => {\n      size = Math.max(size, m2);\n    });\n    if (w2.config.markers.discrete && w2.config.markers.discrete.length) {\n      w2.config.markers.discrete.forEach((m2) => {\n        size = Math.max(size, m2.size);\n      });\n    }\n    if (size > 0) {\n      if (w2.config.markers.hover.size > 0) {\n        size = w2.config.markers.hover.size;\n      } else {\n        size += w2.config.markers.hover.sizeOffset;\n      }\n    }\n    w2.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 w2 = this.w;\n    w2.globals.seriesTotals = w2.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 w2 = this.w;\n    const seriesTotalsXRange = w2.seriesData.series.map((ser, index) => {\n      let total = 0;\n      for (let j = 0; j < ser.length; j++) {\n        if (w2.seriesData.seriesX[index][j] > minX && w2.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 w2 = this.w;\n    w2.globals.seriesPercent = w2.seriesData.series.map((ser) => {\n      const seriesPercent = [];\n      if (Array.isArray(ser)) {\n        for (let j = 0; j < ser.length; j++) {\n          const total = w2.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 = w2.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 w2 = this.w;\n    const gl = w2.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 i2 = 0; i2 < gl.minYArr.length; i2++) {\n        gl.yRange.push(Math.abs(gl.minYArr[i2] - gl.maxYArr[i2]));\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 i2 = 0; i2 < gl.yRange.length; i2++) {\n      yRatio.push(gl.yRange[i2] / 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 (w2.globals.seriesYAxisReverseMap.length > 0) {\n      const scaleBaseLineYScale = (y, i2) => {\n        const yAxis = w2.config.yaxis[w2.globals.seriesYAxisReverseMap[i2]];\n        if (!yAxis) return 0;\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[i2];\n      };\n      if (gl.isMultipleYAxis) {\n        baseLineY = [];\n        for (let i2 = 0; i2 < yRatio.length; i2++) {\n          baseLineY.push(scaleBaseLineYScale(gl.minYArr[i2], i2));\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 w2 = this.w;\n    w2.globals.seriesLog = series.map((s2, i2) => {\n      const yAxisIndex = w2.globals.seriesYAxisReverseMap[i2];\n      if (w2.config.yaxis[yAxisIndex] && w2.config.yaxis[yAxisIndex].logarithmic) {\n        return s2.map((d) => {\n          if (d === null) return null;\n          return this.getLogVal(w2.config.yaxis[yAxisIndex].logBase, d, i2);\n        });\n      } else {\n        return s2;\n      }\n    });\n    return w2.globals.invalidLogScale ? series : w2.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 w2 = this.w;\n    const yAxisIndex = w2.globals.seriesYAxisReverseMap[seriesIndex];\n    if (w2.config.yaxis[yAxisIndex] && w2.config.yaxis[yAxisIndex].logarithmic) {\n      return this.getLogVal(\n        w2.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(b2, d, seriesIndex) {\n    if (d <= 0) {\n      return 0;\n    }\n    const w2 = this.w;\n    const min_log_val = w2.globals.minYArr[seriesIndex] === 0 ? -1 : this.getBaseLog(b2, w2.globals.minYArr[seriesIndex]);\n    const max_log_val = w2.globals.maxYArr[seriesIndex] === 0 ? 0 : this.getBaseLog(b2, w2.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(b2, 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 w2 = 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      (_, i2) => {\n        const yAxisIndex = w2.globals.seriesYAxisReverseMap[i2];\n        if (w2.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            (s2, si) => {\n              s2.forEach((v2) => {\n                if (w2.config.yaxis[si] && w2.config.yaxis[si].logarithmic) {\n                  maxY = Math.max(v2, maxY);\n                  minY = Math.min(v2, minY);\n                }\n              });\n            }\n          );\n          range = Math.pow(gl.yRange[i2], Math.abs(minY - maxY) / gl.yRange[i2]);\n          _gl.yLogRatio[i2] = 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, w2) {\n    var _a, _b;\n    if (options2 == null ? void 0 : options2.yaxis) {\n      options2 = configInstance.extendYAxis(options2, w2);\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 w2 = 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((i2, ii) => {\n          if (\n            /** @type {Record<string,any>} */\n            w2.config.series[i2].group === gn\n          ) {\n            gs.push(typeSeries.series[ii]);\n            gi.push(i2);\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$2 = \"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(a2, b2, c2, d, e2, f) {\n    this.a = a2 != null ? a2 : 1;\n    this.b = b2 != null ? b2 : 0;\n    this.c = c2 != null ? c2 : 0;\n    this.d = d != null ? d : 1;\n    this.e = e2 != null ? e2 : 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(m2) {\n    return new Matrix(\n      this.a * m2.a + this.c * m2.b,\n      this.b * m2.a + this.d * m2.b,\n      this.a * m2.c + this.c * m2.d,\n      this.b * m2.c + this.d * m2.d,\n      this.a * m2.e + this.c * m2.f + this.e,\n      this.b * m2.e + this.d * m2.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, w2, h2) {\n    this.x = x;\n    this.y = y;\n    this.w = w2;\n    this.h = h2;\n    this.width = w2;\n    this.height = h2;\n    this.x2 = x + w2;\n    this.y2 = y + h2;\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 i2 = 0; i2 < letters.length; i2++) {\n    const start = positions[i2] + letters[i2].length;\n    const end = i2 + 1 < positions.length ? positions[i2 + 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[i2].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 i2 = 1; i2 < cmd.length; i2 += 2) {\n      if (i2 + 1 <= cmd.length) {\n        const x = cmd[i2];\n        const y = cmd[i2 + 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 i2 = offset, len = arr.length; i2 < len; ++i2) {\n    if (arr[i2][0] == \"M\") return i2;\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, c2, cSquare, t2, O, OA, OB, tetaStart, tetaEnd, deltaTeta, nbSectors, f, arcSegPoints, angle, sinAngle, cosAngle, pt, i2, 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  c2 = Math.sqrt(cSquare);\n  k[0] /= c2;\n  k[1] /= c2;\n  t2 = cSquare < 4 ? Math.sqrt(1 - cSquare / 4) : 0;\n  if (largeArcFlag === sweepFlag) {\n    t2 *= -1;\n  }\n  O = new Point((B.x + A.x) / 2 + t2 * -k[1], (B.y + A.y) / 2 + t2 * 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 (i2 = 0; i2 <= nbSectors; i2++) {\n    cosAngle = Math.cos(angle);\n    sinAngle = Math.sin(angle);\n    pt = new Point(O.x + cosAngle, O.y + sinAngle);\n    arcSegPoints[i2] = [\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 (i2 = 0, il = arcSegPoints.length; i2 < il; i2++) {\n    arcSegPoints[i2][0] = arcSegPoints[i2][0].transform(mat);\n    arcSegPoints[i2][1] = arcSegPoints[i2][1].transform(mat);\n    arcSegPoints[i2][2] = arcSegPoints[i2][2].transform(mat);\n  }\n  for (i2 = 1, il = arcSegPoints.length; i2 < il; i2++) {\n    pt = arcSegPoints[i2 - 1][2];\n    x1 = pt.x;\n    y1 = pt.y;\n    pt = arcSegPoints[i2][0];\n    x2 = pt.x;\n    y2 = pt.y;\n    pt = arcSegPoints[i2][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 i2 = 0, posStart = { pos: [0, 0], start: [0, 0] }, posDest = { pos: [0, 0], start: [0, 0] };\n  while (true) {\n    startArrTemp[i2] = simplify.call(posStart, startArrTemp[i2]);\n    destArrTemp[i2] = simplify.call(posDest, destArrTemp[i2]);\n    if (startArrTemp[i2][0] != destArrTemp[i2][0] || startArrTemp[i2][0] == \"M\" || startArrTemp[i2][0] == \"A\" && (startArrTemp[i2][4] != destArrTemp[i2][4] || startArrTemp[i2][5] != destArrTemp[i2][5])) {\n      Array.prototype.splice.apply(\n        startArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i2, 1].concat(\n          /** @type {any} */\n          toBezier.call(posStart, startArrTemp[i2])\n        )\n      );\n      Array.prototype.splice.apply(\n        destArrTemp,\n        /** @type {[number, number, ...any[]]} */\n        [i2, 1].concat(\n          /** @type {any} */\n          toBezier.call(posDest, destArrTemp[i2])\n        )\n      );\n    } else {\n      startArrTemp[i2] = /** @type {any} */\n      setPosAndReflection.call(\n        posStart,\n        startArrTemp[i2]\n      );\n      destArrTemp[i2] = /** @type {any} */\n      setPosAndReflection.call(\n        posDest,\n        destArrTemp[i2]\n      );\n    }\n    if (++i2 == startArrTemp.length && i2 == destArrTemp.length) break;\n    if (i2 == 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 (i2 == 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, n2) {\n  const pts = new Array(n2);\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 i2 = 0; i2 < n2; i2++) pts[i2] = { 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 (e2) {\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 i2 = 0; i2 < n2; i2++) pts[i2] = { x: cx, y: cy };\n    return pts;\n  }\n  for (let i2 = 0; i2 < n2; i2++) {\n    try {\n      const p2 = _measurePath.getPointAtLength(i2 / n2 * len);\n      pts[i2] = { x: p2.x, y: p2.y };\n    } catch (e2) {\n      pts[i2] = { x: 0, y: 0 };\n    }\n  }\n  return pts;\n}\nfunction morphPolygons(fromD, toD, n2 = 96) {\n  const fromPts = samplePathPoints(fromD, n2);\n  const toPts = samplePathPoints(toD, n2);\n  let bestOffset = 0;\n  let bestDist = Infinity;\n  for (let off = 0; off < n2; off++) {\n    let dist = 0;\n    for (let i2 = 0; i2 < n2; i2++) {\n      const a2 = fromPts[(i2 + off) % n2];\n      const b2 = toPts[i2];\n      const dx = a2.x - b2.x;\n      const dy = a2.y - b2.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(n2);\n  for (let i2 = 0; i2 < n2; i2++) {\n    aligned[i2] = fromPts[(i2 + bestOffset) % n2];\n  }\n  return function(pos) {\n    let out = \"\";\n    for (let i2 = 0; i2 < n2; i2++) {\n      const a2 = aligned[i2];\n      const b2 = toPts[i2];\n      const x = a2.x + (b2.x - a2.x) * pos;\n      const y = a2.y + (b2.y - a2.y) * pos;\n      out += (i2 === 0 ? \"M\" : \"L\") + x.toFixed(3) + \" \" + y.toFixed(3) + \" \";\n    }\n    return out + \"Z\";\n  };\n}\nfunction easeInOut(t2) {\n  return -Math.cos(t2 * Math.PI) / 2 + 0.5;\n}\nlet _defaultEasing = easeInOut;\nfunction setDefaultEasing(fn) {\n  _defaultEasing = typeof fn === \"function\" ? fn : easeInOut;\n}\nfunction parseColor$1(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 n2 = parseInt(hex, 16);\n    return [n2 >> 16 & 255, n2 >> 8 & 255, n2 & 255, 1];\n  }\n  const m2 = str.match(\n    /rgba?\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*([\\d.]+))?\\s*\\)/\n  );\n  if (m2) return [+m2[1], +m2[2], +m2[3], m2[4] !== void 0 ? +m2[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._plotSnap = null;\n    this._plotAlgorithm = \"commands\";\n    this._afterCb = null;\n    this._duringCb = null;\n    this._easing = null;\n    this._next = null;\n    this._root = null;\n    this._scheduled = false;\n  }\n  /**\n   * Override the easing for this runner (else the module default is used).\n   * @param {(t:number)=>number} fn\n   */\n  ease(fn) {\n    if (typeof fn === \"function\") this._easing = fn;\n    this._schedule();\n    return this;\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   * @param {string} [snapTo] - final d to land on when it differs from the\n   *   interpolation target. Used by reconciled length-change morphs: the\n   *   tween runs against a padded path (extra anchors lying exactly on the\n   *   final geometry) but the element must end with the renderer's clean,\n   *   un-padded d so later captures and morphs stay stable.\n   */\n  plot(d, algorithm, snapTo) {\n    this._plotTarget = d;\n    if (algorithm) this._plotAlgorithm = algorithm;\n    this._plotSnap = snapTo || null;\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 r2 = this;\n    while (r2) {\n      chain.push(r2);\n      r2 = r2._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._plotSnap || 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$1(fromVal);\n          const tc = parseColor$1(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 (e2) {\n          morphFn = null;\n        }\n      }\n      const start = performance.now();\n      const easing = this._easing || _defaultEasing;\n      const tick = (now) => {\n        const elapsed = now - start;\n        const rawPos = Math.min(elapsed / duration, 1);\n        const pos = easing(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._plotSnap || 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 easeInOutSine(t2) {\n  return -Math.cos(t2 * Math.PI) / 2 + 0.5;\n}\nfunction cubicBezier(x1, y1, x2, y2) {\n  x1 = Math.min(Math.max(x1, 0), 1);\n  x2 = Math.min(Math.max(x2, 0), 1);\n  const cx = 3 * x1;\n  const bx = 3 * (x2 - x1) - cx;\n  const ax = 1 - cx - bx;\n  const cy = 3 * y1;\n  const by = 3 * (y2 - y1) - cy;\n  const ay = 1 - cy - by;\n  const sampleX = (t2) => ((ax * t2 + bx) * t2 + cx) * t2;\n  const sampleY = (t2) => ((ay * t2 + by) * t2 + cy) * t2;\n  const solveT = (x) => {\n    let lo = 0;\n    let hi = 1;\n    let t2 = x;\n    if (t2 < lo) return lo;\n    if (t2 > hi) return hi;\n    while (lo < hi) {\n      const xt = sampleX(t2);\n      if (Math.abs(xt - x) < 1e-4) return t2;\n      if (x > xt) lo = t2;\n      else hi = t2;\n      t2 = (lo + hi) / 2;\n    }\n    return t2;\n  };\n  return (t2) => t2 <= 0 ? 0 : t2 >= 1 ? 1 : sampleY(solveT(t2));\n}\nconst REGISTRY = /* @__PURE__ */ new Map();\nconst linear = (t2) => t2;\nREGISTRY.set(\"linear\", linear);\nREGISTRY.set(\"easeInOutSine\", easeInOutSine);\nREGISTRY.set(\"easeInSine\", (t2) => 1 - Math.cos(t2 * Math.PI / 2));\nREGISTRY.set(\"easeOutSine\", (t2) => Math.sin(t2 * Math.PI / 2));\nREGISTRY.set(\"easeInQuad\", (t2) => t2 * t2);\nREGISTRY.set(\"easeOutQuad\", (t2) => 1 - (1 - t2) * (1 - t2));\nREGISTRY.set(\n  \"easeInOutQuad\",\n  (t2) => t2 < 0.5 ? 2 * t2 * t2 : 1 - Math.pow(-2 * t2 + 2, 2) / 2\n);\nREGISTRY.set(\"easeInCubic\", (t2) => t2 * t2 * t2);\nREGISTRY.set(\"easeOutCubic\", (t2) => 1 - Math.pow(1 - t2, 3));\nREGISTRY.set(\n  \"easeInOutCubic\",\n  (t2) => t2 < 0.5 ? 4 * t2 * t2 * t2 : 1 - Math.pow(-2 * t2 + 2, 3) / 2\n);\nREGISTRY.set(\"easeOutBack\", (t2) => {\n  const c1 = 1.70158;\n  const c3 = c1 + 1;\n  return 1 + c3 * Math.pow(t2 - 1, 3) + c1 * Math.pow(t2 - 1, 2);\n});\nREGISTRY.set(\"easeInOutBack\", (t2) => {\n  const c1 = 1.70158;\n  const c2 = c1 * 1.525;\n  return t2 < 0.5 ? Math.pow(2 * t2, 2) * ((c2 + 1) * 2 * t2 - c2) / 2 : (Math.pow(2 * t2 - 2, 2) * ((c2 + 1) * (t2 * 2 - 2) + c2) + 2) / 2;\n});\nfunction registerEasing(name2, fn) {\n  if (typeof name2 === \"string\" && name2 && typeof fn === \"function\") {\n    REGISTRY.set(name2, fn);\n  }\n}\nfunction isBezierArray(v2) {\n  return Array.isArray(v2) && v2.length === 4 && v2.every((n2) => typeof n2 === \"number\");\n}\nfunction resolveEasing(value) {\n  if (typeof value === \"function\") return guardEasing(value);\n  if (isBezierArray(value))\n    return cubicBezier(value[0], value[1], value[2], value[3]);\n  if (typeof value === \"string\" && REGISTRY.has(value)) {\n    return guardEasing(\n      /** @type {(t:number)=>number} */\n      REGISTRY.get(value)\n    );\n  }\n  return easeInOutSine;\n}\nfunction guardEasing(fn) {\n  return (t2) => {\n    const y = fn(t2);\n    return typeof y === \"number\" && isFinite(y) ? y : t2;\n  };\n}\nconst SVGNS$1 = \"http://www.w3.org/2000/svg\";\nfunction easeOutCubic$1(t2) {\n  return 1 - Math.pow(1 - t2, 3);\n}\nfunction easeOutBack$1(t2) {\n  const c1 = 1.70158;\n  const c3 = c1 + 1;\n  return 1 + c3 * Math.pow(t2 - 1, 3) + c1 * Math.pow(t2 - 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, w2) {\n  if (!Environment.isBrowser()) return false;\n  if (w2.globals.dataChanged || w2.globals.resized) return false;\n  const animCfg = w2.config.chart.animations;\n  if (!animCfg || animCfg.enabled === false) return false;\n  const chartType = w2.config.chart.type;\n  if (chartType !== \"line\" && chartType !== \"area\" && chartType !== \"rangeArea\") {\n    return false;\n  }\n  if (!(w2.layout.gridWidth > 0)) return false;\n  const drawSpeed = (animCfg.speed || 800) * 2;\n  const xRatio = Math.max(0, Math.min(1, x / w2.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(w2) {\n  const anim = w2.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  setDefaultEasing(resolveEasing(anim.easing));\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(w2, ctx) {\n    this.w = w2;\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 w2 = this.w;\n    if (!Environment.isBrowser() || !w2.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      if (w2.globals.isDestroyed) return;\n      const t2 = Math.max(0, Math.min(1, (now - startAt) / speed));\n      style.transform = `scale(${easeOutBack$1(t2)})`;\n      style.opacity = String(Math.min(1, t2 * 2));\n      if (t2 < 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 {\n      el,\n      realIndex,\n      j,\n      fill,\n      pathFrom,\n      pathTo,\n      pathToInterp,\n      speed,\n      delay,\n      scrollMorph\n    } = params;\n    const me = this;\n    const w2 = this.w;\n    let delayFactor = 0;\n    if (w2.config.chart.animations.animateGradually.enabled) {\n      delayFactor = w2.config.chart.animations.animateGradually.delay;\n    }\n    if (w2.config.chart.animations.dynamicAnimation.enabled && w2.globals.dataChanged && w2.config.chart.type !== \"bar\") {\n      delayFactor = 0;\n    }\n    me.morphSVG(\n      el,\n      realIndex,\n      j,\n      w2.config.chart.type === \"line\" && !w2.globals.comboCharts ? \"stroke\" : fill,\n      pathFrom,\n      pathTo,\n      speed,\n      delay * delayFactor,\n      scrollMorph,\n      pathToInterp\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 w2 = this.w;\n    el.node.classList.add(\"apexcharts-element-hidden\");\n    w2.globals.delayedElements.push({ el: el.node });\n    if (!Environment.isBrowser() || !w2.globals.shouldAnimate) {\n      this.animationCompleted(el);\n      return;\n    }\n    if (!w2.globals.bulkRevealScheduled) {\n      w2.globals.bulkRevealScheduled = true;\n      BrowserAPIs.requestAnimationFrame(() => {\n        if (w2.globals.isDestroyed) return;\n        w2.globals.bulkRevealScheduled = false;\n        this.animationCompleted(el);\n      });\n    }\n  }\n  showDelayedElements() {\n    this.w.globals.delayedElements.forEach((d) => {\n      if (d.holdUntilComplete && !this.w.globals.animationEnded) return;\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 w2 = this.w;\n    if (w2.globals.animationEnded) return;\n    w2.globals.animationEnded = true;\n    this.showDelayedElements();\n    if (typeof w2.config.chart.events.animationEnd === \"function\") {\n      w2.config.chart.events.animationEnd(this.ctx, { el, w: w2 });\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 w2 = this.w;\n    const me = this;\n    const finalize = () => {\n      if (isLast && w2.globals.shouldAnimate) {\n        me.animationCompleted(el);\n      }\n      me.showDelayedElements();\n    };\n    if (!Environment.isBrowser() || !w2.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 = w2.layout.gridWidth + pad * 2;\n      const radialCx = maskShape && maskShape.cx || 0;\n      const radialCy = maskShape && maskShape.cy || 0;\n      const targetRadius = (maskShape && maskShape.r || w2.layout.gridWidth / 2) + pad;\n      const maskId = `apexDrawMask${w2.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(w2.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(w2.layout.gridHeight + pad * 2));\n        revealEl.setAttribute(\"fill\", \"#fff\");\n      }\n      mask.appendChild(revealEl);\n      w2.dom.elDefs.node.appendChild(mask);\n      node.setAttribute(\"mask\", `url(#${maskId})`);\n      const startAt = performance.now() + (delay || 0);\n      const step = (now) => {\n        if (w2.globals.isDestroyed) return;\n        const t2 = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const eased = easeOutCubic$1(t2);\n        if (isRadial) {\n          revealEl.setAttribute(\"r\", String(eased * targetRadius));\n        } else {\n          revealEl.setAttribute(\"width\", String(eased * targetWidth));\n        }\n        if (t2 < 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 (w2.globals.isDestroyed) return;\n        const t2 = Math.max(0, Math.min(1, (now - startAt) / speed));\n        node.setAttribute(\"stroke-dashoffset\", String(len * (1 - easeOutCubic$1(t2))));\n        if (t2 < 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 (w2.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   * @param {boolean} [scrollMorph] - this morph is a streaming scroll (StreamScroll)\n   * @param {string} [pathToInterp] - interpolation target that differs from the\n   *   final path. Reconciled length-change morphs tween toward a padded copy of\n   *   pathTo (extra anchors sitting exactly on the final geometry) and snap to\n   *   the clean pathTo at the end.\n   */\n  morphSVG(el, realIndex, j, fill, pathFrom, pathTo, speed, delay, scrollMorph, pathToInterp) {\n    var _a, _b;\n    const w2 = 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 (w2.config.chart.type === \"radar\") {\n        speed = 1;\n      }\n      return `M 0 ${w2.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      pathToInterp = void 0;\n    }\n    if (pathToInterp && (!pathToInterp.trim() || pathToInterp.indexOf(\"undefined\") > -1 || pathToInterp.indexOf(\"NaN\") > -1)) {\n      pathToInterp = void 0;\n    }\n    if (!w2.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    let morphEase = null;\n    if (w2.globals.dataChanged) {\n      const dynEasing = w2.config.chart.animations.dynamicAnimation.easing;\n      if (dynEasing != null) {\n        morphEase = resolveEasing(dynEasing);\n      } else if (scrollMorph) {\n        morphEase = resolveEasing(\"linear\");\n      }\n    }\n    const runner = el.plot(pathFrom).animate(1, delay).plot(pathFrom).animate(speed, delay);\n    if (morphEase) {\n      runner.ease(morphEase);\n    }\n    runner.plot(\n      pathToInterp || pathTo,\n      morphAlgo,\n      pathToInterp ? pathTo : void 0\n    ).after(() => {\n      if (Utils$1.isNumber(j)) {\n        const maxSeries = w2.seriesData.series[w2.globals.maxValsInArrayIndex];\n        if (maxSeries && j === maxSeries.length - 2 && w2.globals.shouldAnimate) {\n          this.animationCompleted(el);\n        }\n      } else if (fill !== \"none\" && w2.globals.shouldAnimate) {\n        if (!w2.globals.comboCharts && realIndex === w2.seriesData.series.length - 1 || w2.globals.comboCharts) {\n          this.animationCompleted(el);\n        }\n      }\n      this.showDelayedElements();\n    });\n  }\n}\nconst DEFAULT_INTENSITY = { lighten: 0.15, darken: 0.35 };\nclass Filters {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\n  }\n  /**\n   * The three chart types drawn by the Pie module.\n   * @param {any} w\n   */\n  static isSliceChart(w2) {\n    const type = w2.config.chart.type;\n    return type === \"pie\" || type === \"donut\" || type === \"polarArea\";\n  }\n  /**\n   * True when a pie / donut slice carries the hover state itself, as the\n   * outline band traced outside its rim. The band IS the hover feedback, so\n   * the states.hover lighten filter must not also recolour the slice: the\n   * point of the band is that a hovered slice keeps its own colour.\n   * `states.hover.filter.type: 'none'` still turns every hover visual off, so\n   * this only claims the state when a hover visual was wanted at all.\n   * @param {any} w\n   */\n  static hoverOutlineOwnsHoverState(w2) {\n    var _a;\n    return Filters.isSliceChart(w2) && w2.config.states.hover.filter.type !== \"none\" && ((_a = w2.config.plotOptions.pie.hoverOutline) == null ? void 0 : _a.show) === true;\n  }\n  /**\n   * True when a pie / donut slice carries the selected state itself, by\n   * sliding out of the pie (see Pie.offsetSlice). Moving out of the pie is a\n   * strong enough signal on its own, so the states.active darken filter would\n   * only muddy the slice colour on top of it. polarArea is excluded: it never\n   * slides (its radius is the value), so it keeps the filter as its only\n   * click feedback.\n   * @param {any} w\n   */\n  static sliceOffsetOwnsActiveState(w2) {\n    return Filters.isSliceChart(w2) && w2.config.chart.type !== \"polarArea\" && w2.config.plotOptions.pie.expandOnClick === true && w2.config.plotOptions.pie.expandOffset > 0 && !Filters.drilldownBlocksSliceOffset(w2);\n  }\n  /**\n   * A drilldown pie / donut does not slide its slices out at all: a click there\n   * is navigation, so the slice would pull out and then be thrown away by the\n   * drill it just triggered, which reads as a glitch rather than as motion.\n   * The states.active filter comes back as the click feedback (it is instant,\n   * so the re-render lands on top of it rather than fighting it).\n   * @param {any} w\n   */\n  static drilldownBlocksSliceOffset(w2) {\n    var _a;\n    return Filters.isSliceChart(w2) && ((_a = w2.config.drilldown) == null ? void 0 : _a.enabled) === true;\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, i2) {\n    const w2 = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (w2.config.chart.dropShadow.enabled) {\n      this.dropShadow(el, w2.config.chart.dropShadow, i2);\n    }\n  }\n  /**\n   * @param {any} el\n   * @param {number} i\n   * @param {string} filterType\n   * @param {number} [intensity] Blend strength (0 to 1). Defaults per type.\n   */\n  applyFilter(el, i2, filterType, intensity) {\n    var _a, _b, _c;\n    const w2 = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (filterType === \"none\") {\n      this.getDefaultFilter(el, i2);\n      return;\n    }\n    const shadowAttr = w2.config.chart.dropShadow;\n    const fallback = filterType === \"lighten\" ? DEFAULT_INTENSITY.lighten : DEFAULT_INTENSITY.darken;\n    const t2 = Math.max(\n      0,\n      Math.min(1, typeof intensity === \"number\" ? intensity : fallback)\n    );\n    const diag = 1 - t2;\n    const offset = filterType === \"lighten\" ? t2 : 0;\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        add.colorMatrix({\n          type: \"matrix\",\n          values: `\n            ${diag} 0 0 0 ${offset}\n            0 ${diag} 0 0 ${offset}\n            0 0 ${diag} 0 ${offset}\n            0 0 0 1 0\n          `,\n          in: \"SourceGraphic\",\n          result: \"brightness\"\n        });\n        if (shadowAttr.enabled) {\n          this.addShadow(add, i2, 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, i2, attrs, source) {\n    var _a;\n    const w2 = this.w;\n    let { blur, top, left, color, opacity } = attrs;\n    color = Array.isArray(color) ? color[i2] : color;\n    if (((_a = w2.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (w2.config.chart.dropShadow.enabledOnSeries.indexOf(i2) === -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, i2 = 0) {\n    var _a, _b, _c, _d, _e;\n    const w2 = this.w;\n    if (el.unfilter) {\n      el.unfilter(true);\n    }\n    if (Utils$1.isMsEdge() && w2.config.chart.type === \"radialBar\") {\n      return el;\n    }\n    if (((_a = w2.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _a.length) > 0) {\n      if (((_b = w2.config.chart.dropShadow.enabledOnSeries) == null ? void 0 : _b.indexOf(i2)) === -1) {\n        return el;\n      }\n    }\n    if (el.filterWith) {\n      el.filterWith((add) => {\n        this.addShadow(add, i2, 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 w2 = this.w;\n    if (typeof w2.interact.selectedDataPoints[realIndex] !== \"undefined\") {\n      if (w2.interact.selectedDataPoints[realIndex].indexOf(dataPointIndex) > -1) {\n        el.node.setAttribute(\"selected\", true);\n        if (Filters.sliceOffsetOwnsActiveState(w2)) return;\n        const activeFilter = w2.config.states.active.filter;\n        if (activeFilter.type !== \"none\") {\n          this.applyFilter(el, realIndex, activeFilter.type, activeFilter.value);\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(w2, ctx = null) {\n    this.w = w2;\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, c2) {\n      return str + c2.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 w2 = this.w;\n    const line = w2.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 w2 = this.w;\n    const rect = w2.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 w2 = this.w;\n    const polygon = w2.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 w2 = this.w;\n    if (radius < 0) radius = 0;\n    const c2 = w2.dom.Paper.circle(radius * 2);\n    if (attrs !== null) {\n      c2.attr(attrs);\n    }\n    return c2;\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 w2 = this.w;\n    if (strokeLinecap === null) {\n      strokeLinecap = w2.config.stroke.lineCap;\n    }\n    if (d.indexOf(\"undefined\") > -1 || d.indexOf(\"NaN\") > -1) {\n      d = `M 0 ${w2.layout.gridHeight}`;\n    }\n    const p2 = w2.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 p2;\n  }\n  /**\n   * @param {Record<string, any> | null} attrs\n   */\n  group(attrs = null) {\n    const w2 = this.w;\n    const g2 = w2.dom.Paper.group();\n    if (attrs !== null) {\n      g2.attr(attrs);\n    }\n    return g2;\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   *  scrollMorph = this data-change morph is a streaming scroll (see StreamScroll);\n   *                defaults the morph easing to linear so the slide is constant-velocity\n   * @return {any} svg.js path object\n   **/\n  renderPaths({\n    j,\n    realIndex,\n    pathFrom,\n    pathTo,\n    pathToInterp,\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    scrollMorph = false\n  }) {\n    var _a, _b, _c, _d;\n    const w2 = 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 crossTypeMorph = ((_c = (_b = this.ctx) == null ? void 0 : _b.morphTypeChange) == null ? void 0 : _c.isActive()) === true;\n    const shouldAnimate = !!(initialAnim && !w2.globals.resized || dynamicAnim && w2.globals.dataChanged && w2.globals.shouldAnimate || crossTypeMorph && initialAnim && w2.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 && !w2.globals.resized && !w2.globals.dataChanged && isDrawableSeries);\n    const largeThreshold = (_d = w2.config.chart.animations.largeDatasetThreshold) != null ? _d : 0;\n    const bulkRender = !!(shouldAnimate && !useDrawMode && largeThreshold > 0 && w2.globals.dataPoints > largeThreshold);\n    const isCandleOrBox = chartType === \"candlestick\" || chartType === \"boxPlot\";\n    const fadeOnDataChange = !!(isCandleOrBox && shouldAnimate && !useDrawMode && w2.globals.dataChanged && // ...but a cross-type morph is a deliberate one-off with marks already\n    // paired, so it keeps its tween instead of fading.\n    !crossTypeMorph);\n    const revealViaFade = bulkRender || fadeOnDataChange;\n    if (shouldAnimate && !useDrawMode && !revealViaFade) {\n      d = pathFrom;\n    } else {\n      d = pathTo;\n      if (!shouldAnimate) {\n        w2.globals.animationEnded = true;\n      }\n    }\n    const strokeDashArrayOpt = w2.config.stroke.dashArray;\n    let strokeDashArray = 0;\n    if (Array.isArray(strokeDashArrayOpt)) {\n      strokeDashArray = strokeDashArrayOpt[realIndex];\n    } else {\n      strokeDashArray = w2.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\" && !w2.globals.isBarHorizontal || w2.globals.comboCharts) {\n        el.attr({\n          \"clip-path\": `url(#gridRectBarMask${w2.globals.cuid})`\n        });\n      } else {\n        el.attr({\n          \"clip-path\": `url(#gridRectMask${w2.globals.cuid})`\n        });\n      }\n    }\n    if (w2.config.chart.dropShadow.enabled && drawShadow) {\n      filters.dropShadow(el, w2.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      pathToInterp,\n      fill,\n      strokeWidth,\n      delay: animationDelay,\n      scrollMorph\n    };\n    if (initialAnim && !w2.globals.resized && !w2.globals.dataChanged) {\n      if (useDrawMode) {\n        const drawSpeed = initialSpeed * 2;\n        const isFill = stroke === \"none\" || strokeWidth === 0;\n        const seriesCount = w2.seriesData.series.length;\n        const isLast = w2.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 ((w2.globals.resized || !w2.globals.dataChanged) && !revealViaFade) {\n        anim.showDelayedElements();\n      }\n    }\n    const animateOnUpdate = shouldAnimate && !revealViaFade && (w2.globals.dataChanged && dynamicAnim || crossTypeMorph);\n    if (animateOnUpdate) {\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 w2 = this.w;\n    const p2 = w2.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 p2;\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   * @param {number} [i]\n   * @param {boolean} [verticalUserSpace] anchor a vertical gradient to the plot\n   *   area rather than to each path's own bounding box. Needed when one series\n   *   is drawn as several path elements (nulls split it into segments): with\n   *   the default objectBoundingBox each segment resolves the same offset\n   *   against a different bbox, so the color transition lands on a different\n   *   value in every segment.\n   */\n  drawGradient(style, gfrom, gto, opacityFrom, opacityTo, size = null, stops = null, colorStops = [], i2 = 0, verticalUserSpace = false) {\n    const w2 = this.w;\n    let g2;\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 = !!(w2.config.chart.type === \"donut\" || w2.config.chart.type === \"pie\" || w2.config.chart.type === \"polarArea\" || w2.config.chart.type === \"bubble\");\n    if (!colorStops || colorStops.length === 0) {\n      g2 = w2.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      g2 = w2.dom.Paper.gradient(\n        radial ? \"radial\" : \"linear\",\n        (add) => {\n          const gradientStops = Array.isArray(colorStops[i2]) ? colorStops[i2] : Array.isArray(colorStops[0]) ? colorStops[0] || [] : colorStops;\n          gradientStops.forEach((s2) => {\n            add.stop(s2.offset / 100, s2.color, s2.opacity);\n          });\n        }\n      );\n    }\n    if (!radial) {\n      if (style === \"vertical\") {\n        if (verticalUserSpace) {\n          g2.attr({ gradientUnits: \"userSpaceOnUse\" });\n          g2.from(0, 0).to(0, w2.layout.gridHeight);\n        } else {\n          g2.from(0, 0).to(0, 1);\n        }\n      } else if (style === \"diagonal\") {\n        g2.from(0, 0).to(1, 1);\n      } else if (style === \"horizontal\") {\n        g2.from(0, 1).to(1, 1);\n      } else if (style === \"diagonal2\") {\n        g2.from(1, 0).to(0, 1);\n      }\n    } else {\n      const offx = w2.layout.gridWidth / 2;\n      const offy = w2.layout.gridHeight / 2;\n      if (w2.config.chart.type !== \"bubble\") {\n        g2.attr({\n          gradientUnits: \"userSpaceOnUse\",\n          cx: offx,\n          cy: offy,\n          r: size\n        });\n      } else {\n        g2.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 g2;\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 w2 = 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 = w2.config.chart.foreColor;\n    }\n    fontFamily = fontFamily || w2.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 = w2.dom.Paper.text((add) => {\n        for (let i2 = 0; i2 < text.length; i2++) {\n          truncatedText = text[i2];\n          if (maxWidth) {\n            truncatedText = this.getTextBasedOnMaxWidth(__spreadValues({\n              text: text[i2]\n            }, commonProps));\n          }\n          i2 === 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 ? w2.dom.Paper.plain(text) : (\n        /**\n         * @param {any} add\n         */\n        w2.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    const CROSS_SHRINK = 1.4;\n    const PLUS_SHRINK = 1.12;\n    const STAR_GROW = 1.15;\n    const SPARKLE_SHRINK = 1.1;\n    const SQUARE_SHRINK = 1.125;\n    const DIAMOND_GROW = 1.05;\n    const LINE_SHRINK = 1.1;\n    const CIRCLE_DIAMETER = 2;\n    let d = \"\";\n    switch (type) {\n      case \"cross\":\n        size = size / CROSS_SHRINK;\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 / PLUS_SHRINK;\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 * STAR_GROW;\n        if (type === \"sparkle\") {\n          size = size / SPARKLE_SHRINK;\n          points = 4;\n        }\n        const step = Math.PI / points;\n        for (let i2 = 0; i2 <= 2 * points; i2++) {\n          const angle = i2 * step;\n          const radius = i2 % 2 === 0 ? size : size / 2;\n          const xPos = x + radius * Math.sin(angle);\n          const yPos = y - radius * Math.cos(angle);\n          d += (i2 === 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 / SQUARE_SHRINK;\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 * DIAMOND_GROW;\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 / LINE_SHRINK;\n        d = `M ${x - size} ${y} \n           L ${x + size} ${y}`;\n        break;\n      case \"circle\":\n      default:\n        size = size * CIRCLE_DIAMETER;\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, e2) {\n    var _a, _b;\n    const w2 = this.w;\n    const filters = new Filters(this.w);\n    const i2 = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i2) || isNaN(j)) return;\n    if (typeof w2.config.chart.events.dataPointMouseEnter === \"function\") {\n      w2.config.chart.events.dataPointMouseEnter(e2, this.ctx, {\n        seriesIndex: i2,\n        dataPointIndex: j,\n        w: w2\n      });\n    }\n    Graphics._fireEvent(w2, \"dataPointMouseEnter\", [\n      e2,\n      this.ctx,\n      { seriesIndex: i2, dataPointIndex: j, w: w2 }\n    ]);\n    if (w2.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (Filters.hoverOutlineOwnsHoverState(w2)) return;\n    if (w2.config.states.hover.filter.type !== \"none\") {\n      if (!w2.interact.isTouchDevice) {\n        const hoverFilter = w2.config.states.hover.filter;\n        filters.applyFilter(path, i2, hoverFilter.type, hoverFilter.value);\n      }\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} [e]\n   */\n  pathMouseLeave(path, e2) {\n    var _a, _b;\n    const w2 = this.w;\n    const filters = new Filters(this.w);\n    const i2 = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i2) || isNaN(j)) return;\n    if (typeof w2.config.chart.events.dataPointMouseLeave === \"function\") {\n      w2.config.chart.events.dataPointMouseLeave(e2, this.ctx, {\n        seriesIndex: i2,\n        dataPointIndex: j,\n        w: w2\n      });\n    }\n    Graphics._fireEvent(w2, \"dataPointMouseLeave\", [\n      e2,\n      this.ctx,\n      { seriesIndex: i2, dataPointIndex: j, w: w2 }\n    ]);\n    if (w2.config.states.active.filter.type !== \"none\") {\n      if (path.node.getAttribute(\"selected\") === \"true\") {\n        return;\n      }\n    }\n    if (Filters.hoverOutlineOwnsHoverState(w2)) return;\n    if (w2.config.states.hover.filter.type !== \"none\") {\n      filters.getDefaultFilter(path, i2);\n    }\n  }\n  /**\n   * Clear every selected data point (single-select mode): reset the selection\n   * array and restore the default filter on all series path/circle/rect nodes.\n   * NOTE: preserves the original behavior of passing the clicked series index\n   * `i` to getDefaultFilter for every element (not each element's own index).\n   * @param {any} filters @param {number} i\n   */\n  _clearAllDataPointSelections(filters, i2) {\n    const w2 = this.w;\n    w2.interact.selectedDataPoints = [];\n    const elPaths = w2.dom.Paper.find(\n      \".apexcharts-series path:not(.apexcharts-decoration-element)\"\n    );\n    const elCircles = w2.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, i2);\n      });\n    };\n    deSelect(elPaths);\n    deSelect(elCircles);\n  }\n  /**\n   * Toggle the selected state of a single data point. Mutates\n   * `w.interact.selectedDataPoints` and the path's `selected` attribute,\n   * honoring single- vs multi-select mode. Returns the new selected flag.\n   * @param {any} path @param {any} filters @param {number} i @param {number} j\n   * @returns {'true' | 'false'}\n   */\n  _togglePointSelection(path, filters, i2, j) {\n    const w2 = this.w;\n    if (path.node.getAttribute(\"selected\") === \"true\") {\n      path.node.setAttribute(\"selected\", \"false\");\n      const index = w2.interact.selectedDataPoints[i2].indexOf(j);\n      if (index > -1) {\n        w2.interact.selectedDataPoints[i2].splice(index, 1);\n      }\n      return \"false\";\n    }\n    if (!w2.config.states.active.allowMultipleDataPointsSelection && w2.interact.selectedDataPoints.length > 0) {\n      this._clearAllDataPointSelections(filters, i2);\n    }\n    path.node.setAttribute(\"selected\", \"true\");\n    if (typeof w2.interact.selectedDataPoints[i2] === \"undefined\") {\n      w2.interact.selectedDataPoints[i2] = [];\n    }\n    w2.interact.selectedDataPoints[i2].push(j);\n    return \"true\";\n  }\n  /**\n   * Apply the active / hover / default state filter after a selection toggle,\n   * matching the original inline branching.\n   * @param {any} path @param {any} filters @param {number} i\n   * @param {'true' | 'false'} selected\n   */\n  _applyPointSelectionFilter(path, filters, i2, selected) {\n    const w2 = this.w;\n    if (Filters.sliceOffsetOwnsActiveState(w2)) return;\n    if (selected === \"true\") {\n      const activeFilter = w2.config.states.active.filter;\n      if (activeFilter !== \"none\") {\n        filters.applyFilter(path, i2, activeFilter.type, activeFilter.value);\n      } else {\n        if (w2.config.states.hover.filter !== \"none\") {\n          if (!w2.interact.isTouchDevice) {\n            const hoverFilter = w2.config.states.hover.filter;\n            filters.applyFilter(path, i2, hoverFilter.type, hoverFilter.value);\n          }\n        }\n      }\n    } else {\n      if (w2.config.states.active.filter.type !== \"none\") {\n        if (w2.config.states.hover.filter.type !== \"none\" && !w2.interact.isTouchDevice) {\n          const hoverFilter = w2.config.states.hover.filter;\n          filters.applyFilter(path, i2, hoverFilter.type, hoverFilter.value);\n        } else {\n          filters.getDefaultFilter(path, i2);\n        }\n      }\n    }\n  }\n  /**\n   * @param {any} path\n   * @param {Event | null} e\n   */\n  pathMouseDown(path, e2) {\n    var _a, _b;\n    const w2 = this.w;\n    const filters = new Filters(this.w);\n    const i2 = parseInt((_a = path.node.getAttribute(\"index\")) != null ? _a : \"\", 10);\n    const j = parseInt((_b = path.node.getAttribute(\"j\")) != null ? _b : \"\", 10);\n    if (isNaN(i2) || isNaN(j)) return;\n    const link = w2.config.chart.link;\n    const crossfilterClick = !!(link && (typeof link.dimension === \"function\" || link.enabled));\n    if (!crossfilterClick) {\n      const selected = this._togglePointSelection(path, filters, i2, j);\n      this._applyPointSelectionFilter(path, filters, i2, selected);\n    }\n    if (typeof w2.config.chart.events.dataPointSelection === \"function\") {\n      w2.config.chart.events.dataPointSelection(e2, this.ctx, {\n        selectedDataPoints: w2.interact.selectedDataPoints,\n        seriesIndex: i2,\n        dataPointIndex: j,\n        w: w2\n      });\n    }\n    if (e2) {\n      Graphics._fireEvent(w2, \"dataPointSelection\", [\n        e2,\n        this.ctx,\n        {\n          selectedDataPoints: w2.interact.selectedDataPoints,\n          seriesIndex: i2,\n          dataPointIndex: j,\n          w: w2\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\", (e2) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e2.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          e2\n        );\n      }\n      currentHovered = targetNode;\n      if (targetNode.instance) {\n        this.pathMouseEnter(targetNode.instance, e2);\n      }\n    });\n    parentGroup.node.addEventListener(\"mouseout\", (e2) => {\n      if (!currentHovered) return;\n      const relatedNode = e2.relatedTarget ? Graphics._findDelegateTarget(\n        e2.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            e2\n          );\n        }\n        currentHovered = null;\n      }\n    });\n    parentGroup.node.addEventListener(\"mousedown\", (e2) => {\n      const targetNode = Graphics._findDelegateTarget(\n        e2.target,\n        parentGroup.node,\n        targetSelector\n      );\n      if (targetNode && targetNode.instance) {\n        this.pathMouseDown(targetNode.instance, e2);\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(w2, name2, args) {\n    const evs = w2.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 i2 = 0; i2 < handlers.length; i2++) {\n      handlers[i2].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 w2 = this.w;\n    const cacheKey = [text, fontSize, fontFamily, transform, useBBox].join(\"\\0\");\n    const cache = w2.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    w2.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}\nclass Fill {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\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 w2 = this.w;\n    const cnf = w2.config;\n    const svgW = parseInt(String(w2.layout.gridWidth), 10);\n    const svgH = parseInt(String(w2.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$2, \"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$2, \"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    w2.dom.elDefs.node.appendChild(elPattern);\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getSeriesIndex(opts) {\n    const w2 = this.w;\n    const cType = w2.config.chart.type;\n    if ((cType === \"bar\" || cType === \"rangeBar\") && w2.config.plotOptions.bar.distributed || cType === \"heatmap\" || cType === \"treemap\") {\n      this.seriesIndex = opts.seriesNumber;\n    } else {\n      this.seriesIndex = opts.seriesNumber % w2.seriesData.series.length;\n    }\n    return this.seriesIndex;\n  }\n  /**\n   * The y-axis window a series is plotted against. This is the space the\n   * threshold gradient is measured in, since that gradient spans the plot area.\n   *\n   * @param {number} realIndex\n   */\n  getSeriesAxisRange(realIndex) {\n    var _a, _b, _c;\n    const w2 = this.w;\n    const yaxisIndex = (_b = (_a = w2.globals.seriesYAxisReverseMap) == null ? void 0 : _a[realIndex]) != null ? _b : 0;\n    return {\n      minY: Utils$1.isNumber(w2.globals.minYArr[realIndex]) ? w2.globals.minYArr[realIndex] : w2.globals.minY,\n      maxY: Utils$1.isNumber(w2.globals.maxYArr[realIndex]) ? w2.globals.maxYArr[realIndex] : w2.globals.maxY,\n      reversed: !!((_c = w2.config.yaxis[yaxisIndex]) == null ? void 0 : _c.reversed)\n    };\n  }\n  /**\n   * Builds the two stops that split a series into an above- and a\n   * below-threshold color.\n   *\n   * The stops are painted into a vertical gradient anchored to the plot area\n   * (see Graphics.drawGradient's verticalUserSpace branch), so the boundary is\n   * positioned over the *axis* range. Deriving it from the data range instead\n   * puts the transition on the wrong value whenever the axis extends past the\n   * data, which is the common case: an explicit yaxis.min/max, a nice scale, or\n   * an axis shared with another series.\n   *\n   * @param {{ minY: number, maxY: number, reversed?: boolean }} axisRange\n   * @param {Record<string, any>} multiColorConfig\n   */\n  computeColorStops(axisRange, multiColorConfig) {\n    const w2 = this.w;\n    const { threshold, colorAboveThreshold, colorBelowThreshold } = multiColorConfig;\n    const { minY, maxY } = axisRange;\n    const span = maxY - minY;\n    let offset = span === 0 ? threshold > maxY ? 0 : 100 : (maxY - threshold) / span * 100;\n    if (axisRange.reversed) {\n      offset = 100 - offset;\n    }\n    offset = Math.max(0, Math.min(offset, 100));\n    const fillOpacity = Array.isArray(w2.config.fill.opacity) ? w2.config.fill.opacity[this.seriesIndex] : w2.config.fill.opacity;\n    const above = {\n      offset,\n      color: colorAboveThreshold,\n      opacity: fillOpacity\n    };\n    const below = {\n      offset,\n      color: colorBelowThreshold,\n      opacity: fillOpacity\n    };\n    return axisRange.reversed ? [below, above] : [above, below];\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  fillPath(opts) {\n    var _a, _b, _c, _d;\n    const w2 = 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 (w2.seriesData.seriesColors[this.seriesIndex] !== void 0) {\n      fillColor = w2.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: w2\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      w2.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          this.getSeriesAxisRange(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        // Threshold stops are positioned over the axis range, so the gradient\n        // has to be anchored to the plot area to match. This also keeps every\n        // segment of a null-split series on one shared coordinate space.\n        verticalUserSpace: drawMultiColorLine\n      });\n    }\n    if (fillType === \"image\") {\n      const imgSrc = cnf.fill.image.src;\n      const patternID = opts.patternID ? opts.patternID : \"\";\n      const patternKey = `pattern${w2.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 w2 = this.w;\n    if (Array.isArray(w2.config.fill.type)) {\n      return w2.config.fill.type[seriesIndex];\n    } else {\n      return w2.config.fill.type;\n    }\n  }\n  getFillColors() {\n    const w2 = this.w;\n    const cnf = w2.config;\n    const opts = this.opts;\n    let fillColors = [];\n    if (w2.globals.comboCharts) {\n      if (\n        /** @type {Record<string,any>} */\n        w2.config.series[this.seriesIndex].type === \"line\"\n      ) {\n        if (Array.isArray(w2.globals.stroke.colors)) {\n          fillColors = w2.globals.stroke.colors;\n        } else {\n          fillColors.push(w2.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w2.globals.fill.colors)) {\n          fillColors = w2.globals.fill.colors;\n        } else {\n          fillColors.push(w2.globals.fill.colors);\n        }\n      }\n    } else {\n      if (cnf.chart.type === \"line\") {\n        if (Array.isArray(w2.globals.stroke.colors)) {\n          fillColors = w2.globals.stroke.colors;\n        } else {\n          fillColors.push(w2.globals.stroke.colors);\n        }\n      } else {\n        if (Array.isArray(w2.globals.fill.colors)) {\n          fillColors = w2.globals.fill.colors;\n        } else {\n          fillColors.push(w2.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: i2,\n    verticalUserSpace = false\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[i2] : 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[i2] : 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 t2 = gradientFrom;\n      gradientFrom = gradientTo;\n      gradientTo = t2;\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      i2,\n      verticalUserSpace\n    );\n  }\n}\nconst OK_FILTER_TYPES = [\"none\", \"lighten\", \"darken\"];\nfunction seriesEmitter(ctx, graphics) {\n  const r2 = ctx && ctx.renderer;\n  return r2 && r2.kind && r2.kind !== \"svg\" ? r2 : graphics;\n}\nfunction computeMarkCount(w2) {\n  const series = w2.config.series || [];\n  const type = w2.config.chart.type;\n  const scatterish = type === \"scatter\" || type === \"bubble\";\n  const markerSize = w2.config.markers && w2.config.markers.size;\n  const markersOn = Array.isArray(markerSize) ? markerSize.some((s2) => s2 > 0) : (markerSize || 0) > 0;\n  const labelsOn = !!(w2.config.dataLabels && w2.config.dataLabels.enabled);\n  const isHeatmap = type === \"heatmap\";\n  let total = 0;\n  let maxLen = 0;\n  series.forEach((s2) => {\n    const n2 = Array.isArray(s2.data) ? s2.data.length : 0;\n    if (n2 > maxLen) maxLen = n2;\n    if (scatterish || markersOn || isHeatmap) total += n2;\n    if (labelsOn) total += n2;\n  });\n  const LARGE_D = 5e4;\n  if (maxLen >= LARGE_D) total = Math.max(total, maxLen);\n  return total;\n}\nfunction hasCanvasUnsupportedFeature(w2) {\n  var _a, _b;\n  const fillType = w2.config.fill && w2.config.fill.type;\n  const isUnsupportedFill = (t2) => t2 === \"pattern\" || t2 === \"image\" || t2 === \"gradient\";\n  if (Array.isArray(fillType) ? fillType.some(isUnsupportedFill) : isUnsupportedFill(fillType)) {\n    return true;\n  }\n  const lineColors = (_b = (_a = w2.config.plotOptions) == null ? void 0 : _a.line) == null ? void 0 : _b.colors;\n  if (lineColors && lineColors.colorAboveThreshold && lineColors.colorBelowThreshold) {\n    return true;\n  }\n  const states = w2.config.states || {};\n  const hoverFilter = states.hover && states.hover.filter && states.hover.filter.type;\n  const activeFilter = states.active && states.active.filter && states.active.filter.type;\n  if (hoverFilter && !OK_FILTER_TYPES.includes(hoverFilter)) return true;\n  if (activeFilter && !OK_FILTER_TYPES.includes(activeFilter)) return true;\n  return false;\n}\nclass Markers {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this._filters = new Filters(this.w);\n    this._graphics = new Graphics(this.w, this.ctx);\n    this._seriesWrap = null;\n    this._seriesWrapIndex = -1;\n  }\n  /**\n   * Invalidate the cached per-series wrap group. Callers that drive\n   * plotChartMarkers point-by-point (Line) must call this when a series'\n   * element tree is (re)created, so a later render never appends markers to a\n   * detached group from the previous pass.\n   */\n  resetSeriesWrapCache() {\n    this._seriesWrap = null;\n    this._seriesWrapIndex = -1;\n  }\n  setGlobalMarkerSize() {\n    const w2 = this.w;\n    w2.globals.markers.size = Array.isArray(w2.config.markers.size) ? w2.config.markers.size : [w2.config.markers.size];\n    if (w2.globals.markers.size.length > 0) {\n      if (w2.globals.markers.size.length < w2.seriesData.series.length + 1) {\n        for (let i2 = 0; i2 <= w2.seriesData.series.length; i2++) {\n          if (typeof w2.globals.markers.size[i2] === \"undefined\") {\n            w2.globals.markers.size.push(w2.globals.markers.size[0]);\n          }\n        }\n      }\n    } else {\n      w2.globals.markers.size = w2.config.series.map(\n        () => (\n          /** @type {number} */\n          w2.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 w2 = this.w;\n    const i2 = seriesIndex;\n    const p2 = pointsPos;\n    let elMarkersWrap = null;\n    const graphics = new Graphics(this.w);\n    const emit = seriesEmitter(this.ctx, graphics);\n    const hasDiscreteMarkers = w2.config.markers.discrete && w2.config.markers.discrete.length;\n    if (Array.isArray(p2.x)) {\n      for (let q = 0; q < p2.x.length; q++) {\n        let markerElement;\n        let dataPointIndex = j;\n        let invalidMarker = !Utils$1.isNumber(p2.y[q]);\n        if (w2.globals.markers.largestSize === 0 && w2.globals.hasNullValues && w2.seriesData.series[i2][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 ((w2.config.chart.type === \"line\" || w2.config.chart.type === \"area\") && !w2.globals.comboCharts && !w2.config.tooltip.intersect) {\n          markerClasses += \" no-pointer-events\";\n        }\n        const shouldMarkerDraw = Array.isArray(w2.config.markers.size) ? w2.globals.markers.size[seriesIndex] > 0 : w2.config.markers.size > 0;\n        if (shouldMarkerDraw || alwaysDrawMarker || hasDiscreteMarkers) {\n          if (emit.kind === \"canvas\") {\n            if (typeof w2.globals.pointsArray[seriesIndex] === \"undefined\") {\n              w2.globals.pointsArray[seriesIndex] = [];\n            }\n            w2.globals.pointsArray[seriesIndex][dataPointIndex] = [p2.x[q], p2.y[q]];\n          }\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            w2.config.series[i2]\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 (p2.x[q] < -w2.globals.markers.largestSize || p2.x[q] > w2.layout.gridWidth + w2.globals.markers.largestSize || p2.y[q] < -w2.globals.markers.largestSize || p2.y[q] > w2.layout.gridHeight + w2.globals.markers.largestSize) {\n            opts.pSize = 0;\n          }\n          if (!invalidMarker) {\n            const shouldCreateMarkerWrap = w2.globals.markers.size[seriesIndex] > 0 || alwaysDrawMarker || hasDiscreteMarkers;\n            if (shouldCreateMarkerWrap && !elMarkersWrap) {\n              const standardWrap = !alwaysDrawMarker && !hasDiscreteMarkers;\n              if (standardWrap && this._seriesWrap && this._seriesWrapIndex === seriesIndex) {\n                elMarkersWrap = this._seriesWrap;\n              } else {\n                elMarkersWrap = emit.group({\n                  class: standardWrap ? \"apexcharts-series-markers\" : \"\"\n                });\n                elMarkersWrap.attr(\n                  \"clip-path\",\n                  `url(#gridRectMarkerMask${w2.globals.cuid})`\n                );\n                this.setupMarkerDelegation(elMarkersWrap);\n                if (standardWrap) {\n                  this._seriesWrap = elMarkersWrap;\n                  this._seriesWrapIndex = seriesIndex;\n                }\n              }\n            }\n            markerElement = emit.drawMarker(p2.x[q], p2.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, p2.x[q], w2);\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 w2.globals.pointsArray[seriesIndex] === \"undefined\")\n            w2.globals.pointsArray[seriesIndex] = [];\n          w2.globals.pointsArray[seriesIndex].push([p2.x[q], p2.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 w2 = this.w;\n    const pStyle = this.getMarkerStyle(seriesIndex);\n    let pSize = size === null ? w2.globals.markers.size[seriesIndex] : size;\n    const m2 = w2.config.markers;\n    if (dataPointIndex !== null && m2.discrete.length) {\n      m2.discrete.map((marker) => {\n        if (marker.seriesIndex === seriesIndex && marker.dataPointIndex === dataPointIndex) {\n          if (marker.strokeColor !== void 0) {\n            pStyle.pointStrokeColor = marker.strokeColor;\n          }\n          if (marker.fillColor !== void 0) {\n            pStyle.pointFillColor = marker.fillColor;\n          }\n          if (marker.size !== void 0) pSize = marker.size;\n          if (marker.shape !== void 0) pStyle.pointShape = marker.shape;\n        }\n      });\n    }\n    return {\n      pSize: radius === null ? pSize : radius,\n      pRadius: radius !== null ? radius : m2.radius,\n      pointStrokeWidth: strokeWidth !== null ? strokeWidth : Array.isArray(m2.strokeWidth) ? m2.strokeWidth[seriesIndex] : m2.strokeWidth,\n      pointStrokeColor: pStyle.pointStrokeColor,\n      pointFillColor: pStyle.pointFillColor,\n      shape: pStyle.pointShape || (Array.isArray(m2.shape) ? m2.shape[seriesIndex] : m2.shape),\n      class: cssClass,\n      pointStrokeOpacity: Array.isArray(m2.strokeOpacity) ? m2.strokeOpacity[seriesIndex] : m2.strokeOpacity,\n      pointStrokeDashArray: Array.isArray(m2.strokeDashArray) ? m2.strokeDashArray[seriesIndex] : m2.strokeDashArray,\n      pointFillOpacity: Array.isArray(m2.fillOpacity) ? m2.fillOpacity[seriesIndex] : m2.fillOpacity,\n      seriesIndex\n    };\n  }\n  /**\n   * @param {any} parentGroup\n   */\n  setupMarkerDelegation(parentGroup) {\n    const w2 = this.w;\n    const selector = \".apexcharts-marker\";\n    this._graphics.setupEventDelegation(parentGroup, selector);\n    parentGroup.node.addEventListener(\"click\", (e2) => {\n      if (w2.config.markers.onClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e2.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w2.config.markers.onClick(e2);\n      }\n    });\n    parentGroup.node.addEventListener(\"dblclick\", (e2) => {\n      if (w2.config.markers.onDblClick) {\n        const targetNode = Graphics._findDelegateTarget(\n          e2.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode) w2.config.markers.onDblClick(e2);\n      }\n    });\n    parentGroup.node.addEventListener(\n      \"touchstart\",\n      (e2) => {\n        const targetNode = Graphics._findDelegateTarget(\n          e2.target,\n          parentGroup.node,\n          selector\n        );\n        if (targetNode && targetNode.instance) {\n          this._graphics.pathMouseDown(targetNode.instance, e2);\n        }\n      },\n      { passive: true }\n    );\n  }\n  /**\n   * @returns {any}\n   * @param {number} seriesIndex\n   */\n  getMarkerStyle(seriesIndex) {\n    const w2 = this.w;\n    const colors = w2.globals.markers.colors;\n    const strokeColors = w2.config.markers.strokeColor || w2.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(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\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    this._elPointsWrap = null;\n    this._elPointsWrapParent = null;\n    this._perSeries = null;\n  }\n  /**\n   * @param {Element} elSeries\n   * @param {number} j\n   * @param {Record<string, any>} opts\n   */\n  draw(elSeries, j, opts) {\n    const w2 = this.w;\n    const graphics = this.graphics;\n    const emit = seriesEmitter(this.ctx, graphics);\n    const realIndex = opts.realIndex;\n    const pointsPos = opts.pointsPos;\n    const zRatio = opts.zRatio;\n    const elPointsMain = opts.elParent;\n    let elPointsWrap = this._elPointsWrap;\n    if (!elPointsWrap || this._elPointsWrapParent !== elPointsMain) {\n      elPointsWrap = emit.group({\n        class: `apexcharts-series-markers apexcharts-series-${w2.config.chart.type}`\n      });\n      elPointsWrap.attr(\n        \"clip-path\",\n        `url(#gridRectMarkerMask${w2.globals.cuid})`\n      );\n      this.markers.setupMarkerDelegation(elPointsWrap);\n      elPointsMain.add(elPointsWrap);\n      this._elPointsWrap = elPointsWrap;\n      this._elPointsWrapParent = elPointsMain;\n      this._perSeries = this._buildPerSeriesCache(realIndex, emit);\n    }\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 = w2.globals.markers.size[realIndex];\n        if (zRatio !== Infinity) {\n          const bubble = w2.config.plotOptions.bubble;\n          radius = w2.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 w2.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          if (emit.kind === \"canvas\") {\n            if (typeof w2.globals.pointsArray[realIndex] === \"undefined\") {\n              w2.globals.pointsArray[realIndex] = [];\n            }\n            w2.globals.pointsArray[realIndex][dataPointIndex] = [x, y];\n          }\n        }\n      }\n    }\n  }\n  /**\n   * Per-series constants for drawPoint's hot path. Everything here is uniform\n   * across the points of one series; computing or allocating it per point is\n   * measurable overhead at 20k-50k points.\n   * @param {number} realIndex\n   * @param {any} emit\n   */\n  _buildPerSeriesCache(realIndex, emit) {\n    var _a;\n    const w2 = this.w;\n    return {\n      realIndex,\n      emit,\n      isBubble: w2.config.chart.type === \"bubble\" || w2.globals.comboCharts && w2.config.series[realIndex] && /** @type {Record<string,any>} */\n      w2.config.series[realIndex].type === \"bubble\",\n      // discrete markers vary per point; they disable both caches below\n      canCacheConfig: !w2.config.markers.discrete.length,\n      /** @type {any} lazily built shared marker config (first point) */\n      markerConfig: null,\n      /** @type {boolean|undefined} lazily resolved on the first fillPath call */\n      fillCacheable: void 0,\n      /** @type {any} cached fillPath result (undefined = not cached yet) */\n      fillCircle: void 0,\n      dropShadowEnabled: w2.config.chart.dropShadow.enabled,\n      doInitialAnim: this.initialAnim && !w2.globals.dataChanged && !w2.globals.resized,\n      jitter: (_a = w2.config.plotOptions.scatter) == null ? void 0 : _a.jitter,\n      /** @type {any} lazily built pop-animation constants */\n      anim: null\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;\n    const w2 = this.w;\n    const i2 = realIndex;\n    const anim = this.anim;\n    const filters = this.filters;\n    const fill = this.fill;\n    const markers = this.markers;\n    let ps = this._perSeries;\n    if (!ps || ps.realIndex !== realIndex) {\n      ps = this._perSeries = this._buildPerSeriesCache(\n        realIndex,\n        seriesEmitter(this.ctx, this.graphics)\n      );\n    }\n    const emit = ps.emit;\n    let markerConfig;\n    if (ps.canCacheConfig) {\n      if (!ps.markerConfig) {\n        ps.markerConfig = markers.getMarkerConfig({\n          cssClass: \"apexcharts-marker\",\n          seriesIndex: i2,\n          dataPointIndex,\n          radius: ps.isBubble ? radius : null\n        });\n      }\n      markerConfig = ps.markerConfig;\n      if (ps.isBubble) {\n        markerConfig.pSize = radius;\n        markerConfig.pRadius = radius;\n      }\n    } else {\n      markerConfig = markers.getMarkerConfig({\n        cssClass: \"apexcharts-marker\",\n        seriesIndex: i2,\n        dataPointIndex,\n        radius: ps.isBubble ? radius : null\n      });\n    }\n    const _si = (\n      /** @type {Record<string,any>} */\n      w2.config.series[i2]\n    );\n    const dataItem = _si.data[dataPointIndex];\n    let pathFillCircle;\n    if (ps.fillCircle !== void 0) {\n      pathFillCircle = ps.fillCircle;\n    } else {\n      pathFillCircle = fill.fillPath({\n        seriesNumber: realIndex,\n        dataPointIndex,\n        color: markerConfig.pointFillColor,\n        patternUnits: \"objectBoundingBox\",\n        value: w2.seriesData.series[realIndex][j]\n      });\n      if (ps.fillCacheable === void 0) {\n        ps.fillCacheable = ps.canCacheConfig && fill.getFillType(realIndex) === \"solid\" && typeof markerConfig.pointFillColor === \"string\" && !!markerConfig.pointFillColor;\n      }\n      if (ps.fillCacheable && !(dataItem == null ? void 0 : dataItem.fillColor)) {\n        ps.fillCircle = pathFillCircle;\n      }\n    }\n    const el = emit.drawMarker(x, y, markerConfig);\n    if (dataItem == null ? void 0 : dataItem.fillColor) {\n      pathFillCircle = dataItem.fillColor;\n    }\n    const jt = ps.jitter;\n    if ((jt == null ? void 0 : jt.enabled) && jt.distributed && w2.globals.colors.length) {\n      const bandIdx = Math.round(\n        (_a = w2.seriesData.seriesX[realIndex]) == null ? void 0 : _a[dataPointIndex]\n      );\n      if (!isNaN(bandIdx)) {\n        pathFillCircle = w2.globals.colors[bandIdx % w2.globals.colors.length];\n      }\n    }\n    el.attr({\n      fill: pathFillCircle\n    });\n    if (ps.dropShadowEnabled) {\n      const dropShadow = w2.config.chart.dropShadow;\n      filters.dropShadow(el, dropShadow, realIndex);\n    }\n    if (ps.doInitialAnim) {\n      if (!ps.anim) {\n        const animCfg = w2.config.chart.animations;\n        const totalPoints = w2.globals.dataPoints || 1;\n        const gradCfg = animCfg.animateGradually;\n        const gradEnabled = gradCfg && gradCfg.enabled !== false;\n        ps.anim = {\n          popSpeed: animCfg.speed,\n          baseDelay: gradEnabled ? Math.min(20, animCfg.speed * 0.5 / Math.max(1, totalPoints)) : 0\n        };\n      }\n      const delay = computeStagger({\n        style: ps.anim.baseDelay > 0 ? \"sequential\" : \"none\",\n        index: dataPointIndex,\n        baseDelay: ps.anim.baseDelay\n      });\n      anim.animatePop(el, {\n        speed: ps.anim.popSpeed,\n        delay,\n        onComplete: () => anim.animationCompleted(el)\n      });\n    } else {\n      w2.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    return el;\n  }\n  /**\n   * @param {number} y\n   */\n  centerTextInBubble(y) {\n    const w2 = this.w;\n    y = y + parseInt(w2.config.dataLabels.style.fontSize, 10) / 4;\n    return {\n      y\n    };\n  }\n}\nconst resolveDataLabelOffset = (value, w2, seriesIndex, dataPointIndex) => {\n  if (typeof value !== \"function\") return value;\n  const resolved = value({\n    series: w2.seriesData.series,\n    seriesIndex,\n    dataPointIndex,\n    w: w2\n  });\n  return Number.isFinite(resolved) ? resolved : 0;\n};\nclass DataLabels {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext | null} ctx\n   */\n  constructor(w2, ctx = null) {\n    this.w = w2;\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, i2, dataPointIndex, alwaysDrawDataLabel, fontSize) {\n    const w2 = 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 > w2.layout.gridHeight + height) y = w2.layout.gridHeight + height / 2;\n    if (typeof /** @type {any} */\n    w2.globals.dataLabelsRects[i2] === \"undefined\") {\n      w2.globals.dataLabelsRects[i2] = [];\n    }\n    w2.globals.dataLabelsRects[i2].push({\n      x,\n      y,\n      width,\n      height\n    });\n    const len = (\n      /** @type {any} */\n      w2.globals.dataLabelsRects[i2].length - 2\n    );\n    const lastDrawnIndex = typeof w2.globals.lastDrawnDataLabelsIndexes[i2] !== \"undefined\" ? w2.globals.lastDrawnDataLabelsIndexes[i2][w2.globals.lastDrawnDataLabelsIndexes[i2].length - 1] : 0;\n    if (typeof /** @type {any} */\n    w2.globals.dataLabelsRects[i2][len] !== \"undefined\") {\n      const lastDataLabelRect = (\n        /** @type {any} */\n        w2.globals.dataLabelsRects[i2][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: i2, j, isRangeStart, strokeWidth = 2 }) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const dataLabelsConfig = w2.config.dataLabels;\n    let x = 0;\n    let y = 0;\n    let dataPointIndex = j;\n    let elDataLabelsWrap = null;\n    const seriesCollapsed = w2.globals.collapsedSeriesIndices.indexOf(i2) !== -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      if (j === 1 && q === 0) dataPointIndex = 0;\n      if (j === 1 && q === 1) dataPointIndex = 1;\n      x = pos.x[q] + resolveDataLabelOffset(dataLabelsConfig.offsetX, w2, i2, dataPointIndex);\n      y = pos.y[q] + resolveDataLabelOffset(dataLabelsConfig.offsetY, w2, i2, dataPointIndex) + strokeWidth;\n      if (!isNaN(x)) {\n        let val = w2.seriesData.series[i2][dataPointIndex];\n        if (type === \"rangeArea\") {\n          if (isRangeStart) {\n            val = w2.rangeData.seriesRangeStart[i2][dataPointIndex];\n          } else {\n            val = w2.rangeData.seriesRangeEnd[i2][dataPointIndex];\n          }\n        }\n        let text = \"\";\n        const getText = (v2) => {\n          return w2.config.dataLabels.formatter(v2, {\n            seriesIndex: i2,\n            dataPointIndex,\n            w: w2\n          });\n        };\n        if (w2.config.chart.type === \"bubble\") {\n          val = w2.seriesData.seriesZ[i2][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 = w2.config.dataLabels.textAnchor;\n        if (w2.globals.isSlopeChart) {\n          if (dataPointIndex === 0) {\n            textAnchor = \"end\";\n          } else if (dataPointIndex === /** @type {Record<string,any>} */\n          w2.config.series[i2].data.length - 1) {\n            textAnchor = \"start\";\n          } else {\n            textAnchor = \"middle\";\n          }\n        }\n        this.plotDataLabelsText({\n          x,\n          y,\n          text,\n          i: i2,\n          j: dataPointIndex,\n          parent: elDataLabelsWrap,\n          offsetCorrection: true,\n          dataLabelsConfig: w2.config.dataLabels,\n          textAnchor\n        });\n      }\n    }\n    return elDataLabelsWrap;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  plotDataLabelsText(opts) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    let {\n      x,\n      y,\n      i: i2,\n      j,\n      text,\n      textAnchor,\n      fontSize,\n      parent,\n      dataLabelsConfig,\n      color,\n      alwaysDrawDataLabel,\n      offsetCorrection,\n      className,\n      // some callers (radar) reuse `j` for something other than the data point\n      // index, so per-point offsets take these explicit indices when supplied\n      seriesIndex = i2,\n      dataPointIndex = j\n    } = opts;\n    let dataLabelText = null;\n    if (Array.isArray(w2.config.dataLabels.enabledOnSeries)) {\n      if (w2.config.dataLabels.enabledOnSeries.indexOf(i2) < 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        i2,\n        j,\n        alwaysDrawDataLabel,\n        parseInt(\n          /** @type {any} */\n          dataLabelsConfig.style.fontSize,\n          10\n        ).toString()\n      );\n    }\n    if (!w2.interact.zoomed) {\n      x = correctedLabels.x;\n      y = correctedLabels.y;\n    }\n    if (correctedLabels.textRects) {\n      const barPad = w2.globals.barPadForNumericAxis || 0;\n      if (x < -(barPad + 20) - /** @type {any} */\n      correctedLabels.textRects.width || x > w2.layout.gridWidth + /** @type {any} */\n      correctedLabels.textRects.width + barPad + 30) {\n        text = \"\";\n      }\n    }\n    let dataLabelColor = w2.globals.dataLabels.style.colors[i2];\n    if ((w2.config.chart.type === \"bar\" || w2.config.chart.type === \"rangeBar\") && w2.config.plotOptions.bar.distributed || w2.config.dataLabels.distributed) {\n      dataLabelColor = w2.globals.dataLabels.style.colors[j];\n    }\n    if (typeof dataLabelColor === \"function\") {\n      dataLabelColor = /** @type {any} */\n      dataLabelColor({\n        series: w2.seriesData.series,\n        seriesIndex: i2,\n        dataPointIndex: j,\n        w: w2\n      });\n    }\n    if (color) {\n      dataLabelColor = color;\n    }\n    const offsetsHandledElsewhere = w2.config.chart.type === \"bar\" || w2.config.chart.type === \"rangeBar\";\n    const resolvedOffX = offsetsHandledElsewhere ? 0 : resolveDataLabelOffset(\n      dataLabelsConfig.offsetX,\n      w2,\n      seriesIndex,\n      dataPointIndex\n    );\n    const resolvedOffY = offsetsHandledElsewhere ? 0 : resolveDataLabelOffset(\n      dataLabelsConfig.offsetY,\n      w2,\n      seriesIndex,\n      dataPointIndex\n    );\n    let offX = resolvedOffX;\n    const offY = resolvedOffY;\n    if (w2.globals.isSlopeChart) {\n      if (j !== 0) {\n        offX = resolvedOffX * -2 + 5;\n      }\n      if (j !== 0 && j !== /** @type {Record<string,any>} */\n      w2.config.series[i2].data.length - 1) {\n        offX = 0;\n      }\n    }\n    if (correctedLabels.drawnextLabel) {\n      if (textAnchor === \"middle\") {\n        if (x === w2.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, w2);\n      if (typeof w2.globals.lastDrawnDataLabelsIndexes[i2] === \"undefined\") {\n        w2.globals.lastDrawnDataLabelsIndexes[i2] = [];\n      }\n      w2.globals.lastDrawnDataLabelsIndexes[i2].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 w2 = this.w;\n    const bCnf = w2.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      w2.config.chart.background === \"transparent\" || !w2.config.chart.background ? \"#fff\" : w2.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 w2 = this.w;\n    if (w2.config.chart.type === \"bubble\") return;\n    const elDataLabels = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels text\"\n    );\n    for (let i2 = 0; i2 < elDataLabels.length; i2++) {\n      const el = elDataLabels[i2];\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 = w2.config.dataLabels.background.backgroundColor || el.getAttribute(\"fill\");\n        const shouldAnim = w2.config.chart.animations.enabled && !w2.globals.resized && !w2.globals.dataChanged;\n        if (shouldAnim) {\n          elRect.animate().attr({ fill: background });\n        } else {\n          elRect.attr({ fill: background });\n        }\n        el.setAttribute(\"fill\", w2.config.dataLabels.background.foreColor);\n        const cxAttr = el.getAttribute(\"cx\");\n        if (cxAttr !== null) {\n          applyProgressiveReveal(elRect, parseFloat(cxAttr), w2);\n        }\n      }\n    }\n  }\n  bringForward() {\n    const w2 = this.w;\n    const elDataLabelsNodes = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-datalabels\"\n    );\n    const elSeries = w2.dom.baseEl.querySelector(\n      \".apexcharts-plot-series:last-child\"\n    );\n    for (let i2 = 0; i2 < elDataLabelsNodes.length; i2++) {\n      if (elSeries) {\n        elSeries.insertBefore(elDataLabelsNodes[i2], 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(w2) {\n    if (!w2 || !w2.globals) return;\n    if (w2.globals.cachedSelectors) {\n      w2.globals.cachedSelectors = {};\n    }\n    if (w2.globals.domCache) {\n      w2.globals.domCache.clear();\n    }\n    w2.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate dimension cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateDimensions(w2) {\n    if (!w2 || !w2.globals) return;\n    w2.globals.dimensionCache = {};\n  }\n  /**\n   * Invalidate selector cache only\n   * @param {import('../types/internal').ChartStateW} w - ApexCharts state object\n   */\n  static invalidateSelectors(w2) {\n    if (!w2 || !w2.globals) return;\n    if (w2.globals.cachedSelectors) {\n      w2.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(w2, key, queryFn) {\n    if (!w2 || !w2.globals) return queryFn();\n    if (!w2.globals.cachedSelectors) {\n      w2.globals.cachedSelectors = {};\n    }\n    if (!w2.globals.cachedSelectors[key]) {\n      w2.globals.cachedSelectors[key] = queryFn();\n    }\n    return w2.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(w2, key, computeFn, maxAge = 1e3) {\n    if (!w2 || !w2.globals) return computeFn();\n    if (!w2.globals.dimensionCache) {\n      w2.globals.dimensionCache = {};\n    }\n    const cache = w2.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    w2.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(w2, key, element) {\n    if (!w2 || !w2.globals) return;\n    if (!w2.globals.domCache) {\n      w2.globals.domCache = /* @__PURE__ */ new Map();\n    }\n    w2.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(w2, key) {\n    if (!w2 || !w2.globals || !w2.globals.domCache) return null;\n    return w2.globals.domCache.get(key) || null;\n  }\n}\nclass AxesUtils {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w2, { theme = null, timeScale = null } = {}) {\n    this.w = w2;\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, i2, drawnLabels = [], fontSize = \"12px\", isLeafGroup = true) {\n    const w2 = this.w;\n    const rawLabel = typeof labels[i2] === \"undefined\" ? \"\" : labels[i2];\n    let label = rawLabel;\n    const xlbFormatter = w2.formatters.xLabelFormatter;\n    const customFormatter = w2.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: i2,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w: w2\n        }\n      );\n      if (customFormatter !== void 0) {\n        label = customFormatter(rawLabel, labels[i2], {\n          i: i2,\n          dateFormatter: new DateTime(this.w).formatDate,\n          w: w2\n        });\n      }\n    }\n    if (timescaleLabels.length > 0) {\n      x = timescaleLabels[i2].position;\n      label = timescaleLabels[i2].value;\n    } else {\n      if (w2.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 (w2.layout.rotateXLabels && isLeafGroup) {\n      textRect = graphics.getTextRects(\n        label,\n        parseInt(fontSize, 10).toString(),\n        null,\n        `rotate(${w2.config.xaxis.labels.rotate} 0 0)`,\n        false\n      );\n    } else {\n      textRect = graphics.getTextRects(label, parseInt(fontSize, 10).toString());\n    }\n    const allowDuplicatesInTimeScale = !w2.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(i2, label, labelsLen) {\n    const w2 = this.w;\n    let ticks = w2.config.xaxis.tickAmount;\n    if (ticks === \"dataPoints\") ticks = Math.round(w2.layout.gridWidth / 120);\n    if (ticks > labelsLen) return label;\n    const tickMultiple = Math.round(labelsLen / (ticks + 1));\n    if (i2 % 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(i2, label, labelsLen, drawnLabels, drawnLabelsRects) {\n    const w2 = this.w;\n    if (i2 === 0) {\n      if (w2.globals.skipFirstTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (i2 === labelsLen - 1) {\n      if (w2.globals.skipLastTimelinelabel) {\n        label.text = \"\";\n      }\n    }\n    if (w2.config.xaxis.labels.hideOverlappingLabels && drawnLabels.length > 0) {\n      const prev = drawnLabelsRects[drawnLabelsRects.length - 1];\n      if (w2.config.xaxis.labels.trim && w2.config.xaxis.type !== \"datetime\") {\n        return label;\n      }\n      if (\n        /** @type {any} */\n        label.x < prev.textRect.width / (w2.layout.rotateXLabels ? (\n          // Floor the rotation at 1deg: rotateAlways:true forces\n          // rotateXLabels even with rotate:0, and a 0 divisor here makes the\n          // spread Infinity, blanking every label after the first.\n          Math.max(Math.abs(w2.config.xaxis.labels.rotate), 1) / 12\n        ) : 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(i2, labels) {\n    const w2 = this.w;\n    if (w2.config.yaxis[i2] && w2.config.yaxis[i2].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 w2 = this.w;\n    const gl = w2.globals;\n    const yaxis = w2.config.yaxis;\n    const newStyle = w2.seriesData.series.length > yaxis.length || /**\n     * @param {Record<string, any>} a\n     */\n    yaxis.some((a2) => Array.isArray(a2.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 w2 = this.w;\n    const yaxis = w2.config.yaxis[index];\n    if (!yaxis.show || this.yAxisAllSeriesCollapsed(index)) {\n      return true;\n    }\n    if (!yaxis.showForNullSeries) {\n      const seriesIndices = w2.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 w2 = this.w;\n    if (Array.isArray(yColors) && w2.globals.yAxisScale[realIndex]) {\n      (_a = this.theme) == null ? void 0 : _a.pushExtraColors(\n        yColors,\n        w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    let tY = w2.layout.translateY + w2.config.yaxis[realIndex].labels.offsetY;\n    if (w2.globals.isBarHorizontal) {\n      tY = 0;\n    } else if (w2.config.chart.type === \"heatmap\") {\n      tY += labelsDivider / 2;\n    }\n    if (axisTicks.show && tickAmount > 0) {\n      if (w2.config.yaxis[realIndex].opposite === true) x = x + axisTicks.width;\n      for (let i2 = tickAmount; i2 >= 0; i2--) {\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(w2, ctx, elgrid) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.elgrid = elgrid;\n    this.axesUtils = new AxesUtils(w2, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.xaxisLabels = w2.labelData.labels.slice();\n    if (w2.labelData.timescaleLabels.length > 0 && !w2.globals.isBarHorizontal) {\n      this.xaxisLabels = w2.labelData.timescaleLabels.slice();\n    }\n    if (w2.config.xaxis.overwriteCategories) {\n      this.xaxisLabels = w2.config.xaxis.overwriteCategories;\n    }\n    this.drawnLabels = [];\n    this.drawnLabelsRects = [];\n    if (w2.config.xaxis.position === \"top\") {\n      this.offY = 0;\n    } else {\n      this.offY = w2.layout.gridHeight;\n    }\n    this.offY = this.offY + w2.config.xaxis.axisBorder.offsetY;\n    this.isCategoryBarHorizontal = w2.config.chart.type === \"bar\" && w2.config.plotOptions.bar.horizontal;\n    this.xaxisFontSize = w2.config.xaxis.labels.style.fontSize;\n    this.xaxisFontFamily = w2.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w2.config.xaxis.labels.style.colors;\n    this.xaxisBorderWidth = w2.config.xaxis.axisBorder.width;\n    if (this.isCategoryBarHorizontal) {\n      this.xaxisBorderWidth = w2.config.yaxis[0].axisBorder.width.toString();\n    }\n    if (String(this.xaxisBorderWidth).indexOf(\"%\") > -1) {\n      this.xaxisBorderWidth = w2.layout.gridWidth * parseInt(this.xaxisBorderWidth, 10) / 100;\n    } else {\n      this.xaxisBorderWidth = parseInt(this.xaxisBorderWidth, 10);\n    }\n    this.xaxisBorderHeight = w2.config.xaxis.axisBorder.height;\n    this.yaxis = w2.config.yaxis[0];\n  }\n  drawXaxis() {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const elXaxis = graphics.group({\n      class: \"apexcharts-xaxis\",\n      transform: `translate(${w2.config.xaxis.offsetX}, ${w2.config.xaxis.offsetY})`\n    });\n    const elXaxisTexts = graphics.group({\n      class: \"apexcharts-xaxis-texts-g\",\n      transform: `translate(${w2.layout.translateXAxisX}, ${w2.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let labels = [];\n    for (let i2 = 0; i2 < this.xaxisLabels.length; i2++) {\n      labels.push(this.xaxisLabels[i2]);\n    }\n    this.drawXAxisLabelAndGroup(\n      true,\n      graphics,\n      elXaxisTexts,\n      labels,\n      w2.axisFlags.isXNumeric,\n      (i2, colWidth) => colWidth\n    );\n    if (w2.labelData.hasXaxisGroups) {\n      const labelsGroup = w2.labelData.groups;\n      labels = [];\n      for (let i2 = 0; i2 < labelsGroup.length; i2++) {\n        labels.push(labelsGroup[i2].title);\n      }\n      const overwriteStyles = (\n        /** @type {any} */\n        {}\n      );\n      if (w2.config.xaxis.group.style) {\n        overwriteStyles.xaxisFontSize = w2.config.xaxis.group.style.fontSize;\n        overwriteStyles.xaxisFontFamily = w2.config.xaxis.group.style.fontFamily;\n        overwriteStyles.xaxisForeColors = w2.config.xaxis.group.style.colors;\n        overwriteStyles.fontWeight = w2.config.xaxis.group.style.fontWeight;\n        overwriteStyles.cssClass = w2.config.xaxis.group.style.cssClass;\n      }\n      this.drawXAxisLabelAndGroup(\n        false,\n        graphics,\n        elXaxisTexts,\n        labels,\n        false,\n        (i2, colWidth) => labelsGroup[i2].cols * colWidth,\n        overwriteStyles\n      );\n    }\n    if (w2.config.xaxis.title.text !== void 0) {\n      const elXaxisTitle = graphics.group({\n        class: \"apexcharts-xaxis-title\"\n      });\n      const elXAxisTitleText = graphics.drawText({\n        x: w2.layout.gridWidth / 2 + w2.config.xaxis.title.offsetX,\n        y: this.offY + parseFloat(this.xaxisFontSize) + (w2.config.xaxis.position === \"bottom\" ? w2.layout.xAxisLabelsHeight : -w2.layout.xAxisLabelsHeight - 10) + w2.config.xaxis.title.offsetY,\n        text: w2.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w2.config.xaxis.title.style.fontSize,\n        fontFamily: w2.config.xaxis.title.style.fontFamily,\n        fontWeight: w2.config.xaxis.title.style.fontWeight,\n        foreColor: w2.config.xaxis.title.style.color,\n        cssClass: \"apexcharts-xaxis-title-text \" + w2.config.xaxis.title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elXaxis.add(elXaxisTitle);\n    }\n    if (w2.config.xaxis.axisBorder.show) {\n      const offX = w2.globals.barPadForNumericAxis;\n      const elHorzLine = graphics.drawLine(\n        w2.globals.padHorizontal + w2.config.xaxis.axisBorder.offsetX - offX,\n        this.offY,\n        this.xaxisBorderWidth + offX,\n        this.offY,\n        w2.config.xaxis.axisBorder.color,\n        0,\n        this.xaxisBorderHeight\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w2.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 w2 = 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 || w2.config.xaxis.labels.style.fontWeight;\n    const cssClass = overwriteStyles.cssClass || w2.config.xaxis.labels.style.cssClass;\n    let colWidth;\n    let xPos = w2.globals.padHorizontal;\n    const labelsLen = labels.length;\n    let dataPoints = w2.config.xaxis.type === \"category\" ? w2.globals.dataPoints : labelsLen;\n    if (dataPoints === 0 && labelsLen > dataPoints) dataPoints = labelsLen;\n    if (isXNumeric) {\n      const len = Math.max(\n        Number(w2.config.xaxis.tickAmount) || 1,\n        dataPoints > 1 ? dataPoints - 1 : dataPoints\n      );\n      colWidth = w2.layout.gridWidth / Math.min(len, labelsLen - 1);\n      xPos = xPos + colWidthCb(0, colWidth) / 2 + w2.config.xaxis.labels.offsetX;\n    } else {\n      colWidth = w2.layout.gridWidth / dataPoints;\n      xPos = xPos + colWidthCb(0, colWidth) + w2.config.xaxis.labels.offsetX;\n    }\n    for (let i2 = 0; i2 <= labelsLen - 1; i2++) {\n      let x = xPos - colWidthCb(i2, colWidth) / 2 + w2.config.xaxis.labels.offsetX;\n      if (i2 === 0 && labelsLen === 1 && colWidth / 2 === xPos && dataPoints === 1) {\n        x = w2.layout.gridWidth / 2;\n      }\n      let label = this.axesUtils.getLabel(\n        labels,\n        w2.labelData.timescaleLabels,\n        x,\n        i2,\n        drawnLabels,\n        xaxisFontSize,\n        isLeafGroup\n      );\n      let offsetYCorrection = 28;\n      if (w2.layout.rotateXLabels && isLeafGroup) {\n        offsetYCorrection = 22;\n      }\n      if (w2.config.xaxis.title.text && w2.config.xaxis.position === \"top\") {\n        offsetYCorrection += parseFloat(w2.config.xaxis.title.style.fontSize) + 2;\n      }\n      if (!isLeafGroup) {\n        offsetYCorrection = offsetYCorrection + parseFloat(xaxisFontSize) + (w2.layout.xAxisLabelsHeight - w2.layout.xAxisGroupLabelsHeight) + (w2.layout.rotateXLabels ? 10 : 0);\n      }\n      const isCategoryTickAmounts = typeof w2.config.xaxis.tickAmount !== \"undefined\" && w2.config.xaxis.tickAmount !== \"dataPoints\" && w2.config.xaxis.type !== \"datetime\";\n      if (isCategoryTickAmounts) {\n        label = this.axesUtils.checkLabelBasedOnTickamount(i2, label, labelsLen);\n      } else {\n        label = this.axesUtils.checkForOverflowingLabels(\n          i2,\n          label,\n          labelsLen,\n          drawnLabels,\n          drawnLabelsRects\n        );\n      }\n      const getCatForeColor = () => {\n        return isLeafGroup && w2.config.xaxis.convertedCatToNumeric ? xaxisForeColors[w2.globals.minX + i2 - 1] : xaxisForeColors[i2];\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 (w2.config.xaxis.labels.show && !fullyOutsideGrid) {\n        const elText = graphics.drawText({\n          x: label.x,\n          y: this.offY + w2.config.xaxis.labels.offsetY + offsetYCorrection - (w2.config.xaxis.position === \"top\" ? w2.layout.xAxisHeight + w2.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\", (e2) => {\n          if (typeof w2.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w2, {\n              labelIndex: i2\n            });\n            w2.config.chart.events.xAxisLabelClick(e2, this.ctx, opts);\n          }\n        });\n        if (isLeafGroup) {\n          const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS$2, \"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 (i2 < labelsLen - 1) {\n        xPos = xPos + colWidthCb(i2 + 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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const translateYAxisX = w2.config.yaxis[0].opposite ? w2.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 (w2.config.yaxis[realIndex].show) {\n      for (let i2 = 0; i2 < this.xaxisLabels.length; i2++) {\n        labels.push(this.xaxisLabels[i2]);\n      }\n    }\n    const colHeight = w2.layout.gridHeight / labels.length;\n    let yPos = -(colHeight / 2.2);\n    const lbFormatter = w2.formatters.yLabelFormatters[0];\n    const ylabels = w2.config.yaxis[0].labels;\n    if (ylabels.show) {\n      for (let i2 = 0; i2 <= labels.length - 1; i2++) {\n        let label = typeof labels[i2] === \"undefined\" ? \"\" : labels[i2];\n        label = lbFormatter(label, {\n          seriesIndex: realIndex,\n          dataPointIndex: i2,\n          w: w2\n        });\n        const yColors = this.axesUtils.getYAxisForeColor(\n          ylabels.style.colors,\n          realIndex\n        );\n        const getForeColor = () => {\n          return Array.isArray(yColors) ? yColors[i2] : 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 (w2.config.yaxis[0].labels.align === \"left\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"start\";\n        } else if (w2.config.yaxis[0].labels.align === \"center\") {\n          offsetX = ylabels.offsetX;\n          textAnchor = \"middle\";\n        } else if (w2.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\", (e2) => {\n          if (typeof w2.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w2, {\n              labelIndex: i2\n            });\n            w2.config.chart.events.xAxisLabelClick(e2, this.ctx, opts);\n          }\n        });\n        const elTooltipTitle = BrowserAPIs.createElementNS(SVGNS$2, \"title\");\n        elTooltipTitle.textContent = Array.isArray(label) ? label.join(\" \") : label;\n        elLabel.node.appendChild(elTooltipTitle);\n        if (w2.config.yaxis[realIndex].labels.rotate !== 0) {\n          const labelRotatingCenter = graphics.rotateAroundCenter(elLabel.node);\n          elLabel.node.setAttribute(\n            \"transform\",\n            `rotate(${w2.config.yaxis[realIndex].labels.rotate} 0 ${labelRotatingCenter.y})`\n          );\n        }\n        yPos = yPos + colHeight;\n      }\n    }\n    if (w2.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: w2.config.yaxis[0].title.offsetX,\n        y: w2.layout.gridHeight / 2 + w2.config.yaxis[0].title.offsetY,\n        text: w2.config.yaxis[0].title.text,\n        textAnchor: \"middle\",\n        foreColor: w2.config.yaxis[0].title.style.color,\n        fontSize: w2.config.yaxis[0].title.style.fontSize,\n        fontWeight: w2.config.yaxis[0].title.style.fontWeight,\n        fontFamily: w2.config.yaxis[0].title.style.fontFamily,\n        cssClass: \"apexcharts-yaxis-title-text \" + w2.config.yaxis[0].title.style.cssClass\n      });\n      elXaxisTitle.add(elXAxisTitleText);\n      elYaxis.add(elXaxisTitle);\n    }\n    let offX = 0;\n    if (this.isCategoryBarHorizontal && w2.config.yaxis[0].opposite) {\n      offX = w2.layout.gridWidth;\n    }\n    const axisBorder = w2.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        w2.globals.padHorizontal + axisBorder.offsetX + offX,\n        1 + axisBorder.offsetY,\n        w2.globals.padHorizontal + axisBorder.offsetX + offX,\n        w2.layout.gridHeight + axisBorder.offsetY,\n        axisBorder.color,\n        0\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w2.config.grid.show) {\n        this.elgrid.elGridBorders.add(elVerticalLine);\n      } else {\n        elYaxis.add(elVerticalLine);\n      }\n    }\n    if (w2.config.yaxis[0].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        offX,\n        labels.length,\n        w2.config.yaxis[0].axisBorder,\n        w2.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 w2 = this.w;\n    const x2 = x1;\n    if (x1 < 0 || x1 - 2 > w2.layout.gridWidth) return;\n    const y1 = this.offY + w2.config.xaxis.axisTicks.offsetY;\n    y2 = y2 + y1 + w2.config.xaxis.axisTicks.height;\n    if (w2.config.xaxis.position === \"top\") {\n      y2 = y1 - w2.config.xaxis.axisTicks.height;\n    }\n    if (w2.config.xaxis.axisTicks.show) {\n      const graphics = new Graphics(this.w);\n      const line = graphics.drawLine(\n        x1 + w2.config.xaxis.axisTicks.offsetX,\n        y1 + w2.config.xaxis.offsetY,\n        x2 + w2.config.xaxis.axisTicks.offsetX,\n        y2 + w2.config.xaxis.offsetY,\n        w2.config.xaxis.axisTicks.color\n      );\n      appendToElement.add(line);\n      line.node.classList.add(\"apexcharts-xaxis-tick\");\n    }\n  }\n  getXAxisTicksPositions() {\n    const w2 = this.w;\n    const xAxisTicksPositions = [];\n    const xCount = this.xaxisLabels.length;\n    let x1 = w2.globals.padHorizontal;\n    if (w2.labelData.timescaleLabels.length > 0) {\n      for (let i2 = 0; i2 < xCount; i2++) {\n        x1 = this.xaxisLabels[i2].position;\n        xAxisTicksPositions.push(x1);\n      }\n    } else {\n      const xCountForCategoryCharts = xCount;\n      for (let i2 = 0; i2 < xCountForCategoryCharts; i2++) {\n        let x1Count = xCountForCategoryCharts;\n        if (w2.axisFlags.isXNumeric && w2.config.chart.type !== \"bar\") {\n          x1Count -= 1;\n        }\n        x1 = x1 + w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const xAxis = w2.dom.baseEl.querySelector(\".apexcharts-xaxis-texts-g\");\n    const xAxisTexts = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)\"\n    );\n    const yAxisTextsInversed = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-inversed text\"\n    );\n    const xAxisTextsInversed = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-xaxis-inversed-texts-g text tspan\"\n    );\n    if (w2.layout.rotateXLabels || w2.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(${w2.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 (w2.config.xaxis.labels.trim) {\n          Array.prototype.forEach.call(tSpan, (ts) => {\n            graphics.placeTextWithEllipsis(\n              ts,\n              ts.textContent,\n              w2.layout.xAxisLabelsHeight - (w2.config.legend.position === \"bottom\" ? 20 : 10)\n            );\n          });\n        }\n      }\n    } else {\n      const width = w2.layout.gridWidth / (w2.labelData.labels.length + 1);\n      for (let xat = 0; xat < xAxisTexts.length; xat++) {\n        const tSpan = xAxisTexts[xat].childNodes;\n        if (w2.config.xaxis.labels.trim && w2.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 > w2.layout.gridWidth && !w2.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          w2.config.yaxis[0].labels.maxWidth - (w2.config.yaxis[0].title.text ? parseFloat(w2.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(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.xaxisLabels = w2.labelData.labels.slice();\n    this.axesUtils = new AxesUtils(ctx.w, {\n      theme: ctx.theme,\n      timeScale: ctx.timeScale\n    });\n    this.isRangeBar = w2.rangeData.seriesRange.length && w2.globals.isBarHorizontal;\n    if (w2.labelData.timescaleLabels.length > 0) {\n      this.xaxisLabels = w2.labelData.timescaleLabels.slice();\n    }\n  }\n  /**\n   * @param {any} elGrid\n   */\n  drawGridArea(elGrid = null) {\n    const w2 = 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      w2.globals.padHorizontal,\n      1,\n      w2.globals.padHorizontal,\n      w2.layout.gridHeight,\n      \"transparent\"\n    );\n    const elHorzLine = graphics.drawLine(\n      w2.globals.padHorizontal,\n      w2.layout.gridHeight,\n      w2.layout.gridWidth,\n      w2.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 w2 = this.w;\n    const gl = w2.globals;\n    const graphics = new Graphics(this.w);\n    const strokeSize = Array.isArray(w2.config.stroke.width) ? Math.max(...w2.config.stroke.width) : w2.config.stroke.width;\n    const createClipPath = (id) => {\n      const clipPath = BrowserAPIs.createElementNS(SVGNS$2, \"clipPath\");\n      clipPath.setAttribute(\"id\", id);\n      return clipPath;\n    };\n    w2.dom.elGridRectMask = createClipPath(`gridRectMask${gl.cuid}`);\n    w2.dom.elGridRectBarMask = createClipPath(`gridRectBarMask${gl.cuid}`);\n    w2.dom.elGridRectMarkerMask = createClipPath(`gridRectMarkerMask${gl.cuid}`);\n    w2.dom.elForecastMask = createClipPath(`forecastMask${gl.cuid}`);\n    w2.dom.elNonForecastMask = createClipPath(`nonForecastMask${gl.cuid}`);\n    const hasBar = [\"bar\", \"rangeBar\", \"candlestick\", \"boxPlot\", \"violin\"].includes(\n      w2.config.chart.type\n    ) || w2.globals.comboBarCount > 0;\n    let barWidthLeft = 0;\n    let barWidthRight = 0;\n    if (hasBar && w2.axisFlags.isXNumeric && !w2.globals.isBarHorizontal) {\n      barWidthLeft = Math.max(w2.layout.gridPad.left, gl.barPadForNumericAxis);\n      barWidthRight = Math.max(w2.layout.gridPad.right, gl.barPadForNumericAxis);\n    }\n    w2.dom.elGridRect = graphics.drawRect(\n      -strokeSize / 2 - 2,\n      -strokeSize / 2 - 2,\n      w2.layout.gridWidth + strokeSize + 4,\n      w2.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    w2.dom.elGridRectBar = graphics.drawRect(\n      -strokeSize / 2 - barWidthLeft - 2,\n      -strokeSize / 2 - 2,\n      w2.layout.gridWidth + strokeSize + barWidthRight + barWidthLeft + 4,\n      w2.layout.gridHeight + strokeSize + 4,\n      0,\n      \"#fff\"\n    );\n    const markerSize = w2.globals.markers.largestSize;\n    w2.dom.elGridRectMarker = graphics.drawRect(\n      Math.min(-strokeSize / 2 - barWidthLeft - 2, -markerSize),\n      -markerSize,\n      w2.layout.gridWidth + Math.max(strokeSize + barWidthRight + barWidthLeft + 4, markerSize * 2),\n      w2.layout.gridHeight + markerSize * 2,\n      0,\n      \"#fff\"\n    );\n    w2.dom.elGridRectMask.appendChild(w2.dom.elGridRect.node);\n    w2.dom.elGridRectBarMask.appendChild(w2.dom.elGridRectBar.node);\n    w2.dom.elGridRectMarkerMask.appendChild(w2.dom.elGridRectMarker.node);\n    const defs = w2.dom.elDefs.node;\n    defs.appendChild(w2.dom.elGridRectMask);\n    defs.appendChild(w2.dom.elGridRectBarMask);\n    defs.appendChild(w2.dom.elGridRectMarkerMask);\n    defs.appendChild(w2.dom.elForecastMask);\n    defs.appendChild(w2.dom.elNonForecastMask);\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLines({ i: i2, x1, y1, x2, y2, xCount, parent }) {\n    const w2 = this.w;\n    const shouldDraw = () => {\n      if (i2 === 0 && w2.globals.skipFirstTimelinelabel) return false;\n      if (i2 === xCount - 1 && w2.globals.skipLastTimelinelabel && !w2.config.xaxis.labels.formatter)\n        return false;\n      if (w2.config.chart.type === \"radar\") return false;\n      return true;\n    };\n    if (shouldDraw()) {\n      if (w2.config.grid.xaxis.lines.show) {\n        this._drawGridLine({ i: i2, x1, y1, x2, y2, xCount, parent });\n      }\n      let y_2 = 0;\n      if (w2.labelData.hasXaxisGroups && w2.config.xaxis.tickPlacement === \"between\") {\n        const groups = w2.labelData.groups;\n        if (groups) {\n          let gacc = 0;\n          for (let gi = 0; gacc < i2 && gi < groups.length; gi++) {\n            gacc += groups[gi].cols;\n          }\n          if (gacc === i2) {\n            y_2 = w2.layout.xAxisLabelsHeight * 0.6;\n          }\n        }\n      }\n      const xAxis = new XAxis(this.w, this.ctx);\n      xAxis.drawXaxisTicks(x1, y_2, w2.dom.elGraphical);\n    }\n  }\n  /** @param {{i: any, x1: any, y1: any, x2: any, y2: any, xCount: any, parent: any}} opts */\n  _drawGridLine({ i: i2, x1, y1, x2, y2, xCount, parent }) {\n    const w2 = this.w;\n    const isHorzLine = parent.node.classList.contains(\n      \"apexcharts-gridlines-horizontal\"\n    );\n    const offX = w2.globals.barPadForNumericAxis;\n    const excludeBorders = y1 === 0 && y2 === 0 || x1 === 0 && x2 === 0 || y1 === w2.layout.gridHeight && y2 === w2.layout.gridHeight || w2.globals.isBarHorizontal && (i2 === 0 || i2 === 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      w2.config.grid.borderColor,\n      w2.config.grid.strokeDashArray\n    );\n    line.node.classList.add(\"apexcharts-gridline\");\n    if (excludeBorders && w2.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: c2, x1, y1, x2, y2, type }) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const offX = w2.globals.barPadForNumericAxis;\n    const color = w2.config.grid[type].colors[c2];\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      w2.config.grid[type].opacity\n    );\n    this.elg.add(rect);\n    rect.attr(\"clip-path\", `url(#gridRectMask${w2.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 w2 = this.w;\n    const datetimeLines = ({ xC, x1, y1, x2, y2 }) => {\n      for (let i2 = 0; i2 < xC; i2++) {\n        x1 = /** @type {any} */\n        this.xaxisLabels[i2].position;\n        x2 = /** @type {any} */\n        this.xaxisLabels[i2].position;\n        if (x1 < 0 || x1 - 2 > w2.layout.gridWidth) continue;\n        this._drawGridLines({\n          i: i2,\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 i2 = 0; i2 < xC + (w2.axisFlags.isXNumeric ? 0 : 1); i2++) {\n        if (i2 === 0 && xC === 1 && w2.globals.dataPoints === 1) {\n          x1 = w2.layout.gridWidth / 2;\n          x2 = x1;\n        }\n        this._drawGridLines({\n          i: i2,\n          x1,\n          y1,\n          x2,\n          y2,\n          xCount,\n          parent: this.elgridLinesV\n        });\n        x1 += w2.layout.gridWidth / (w2.axisFlags.isXNumeric ? xC - 1 : xC);\n        x2 = x1;\n      }\n    };\n    if (w2.config.grid.xaxis.lines.show || w2.config.xaxis.axisTicks.show) {\n      const x1 = w2.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w2.layout.gridHeight;\n      if (w2.labelData.timescaleLabels.length) {\n        datetimeLines({ xC: xCount, x1, y1, x2, y2 });\n      } else {\n        if (w2.axisFlags.isXNumeric) {\n          xCount = (_a = w2.globals.xAxisScale) == null ? void 0 : _a.result.length;\n        }\n        categoryLines({ xC: xCount, x1, y1, x2, y2 });\n      }\n    }\n    if (w2.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w2.layout.gridWidth;\n      let tA = tickAmount + 1;\n      if (this.isRangeBar) {\n        tA = w2.labelData.labels.length;\n      }\n      for (let i2 = 0; i2 < tA + (this.isRangeBar ? 1 : 0); i2++) {\n        this._drawGridLine({\n          i: i2,\n          xCount: tA + (this.isRangeBar ? 1 : 0),\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w2.layout.gridHeight / (this.isRangeBar ? tA : tickAmount);\n        y2 = y1;\n      }\n    }\n  }\n  /** @param {{ xCount?: any, tickAmount?: any }} opts */\n  _drawInvertedXYLines({ xCount }) {\n    const w2 = this.w;\n    if (w2.config.grid.xaxis.lines.show || w2.config.xaxis.axisTicks.show) {\n      let x1 = w2.globals.padHorizontal;\n      const y1 = 0;\n      let x2;\n      const y2 = w2.layout.gridHeight;\n      for (let i2 = 0; i2 < xCount + 1; i2++) {\n        if (w2.config.grid.xaxis.lines.show) {\n          this._drawGridLine({\n            i: i2,\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, w2.dom.elGraphical);\n        x1 += w2.layout.gridWidth / xCount;\n        x2 = x1;\n      }\n    }\n    if (w2.config.grid.yaxis.lines.show) {\n      const x1 = 0;\n      let y1 = 0;\n      let y2 = 0;\n      const x2 = w2.layout.gridWidth;\n      for (let i2 = 0; i2 < w2.globals.dataPoints + 1; i2++) {\n        this._drawGridLine({\n          i: i2,\n          xCount: w2.globals.dataPoints + 1,\n          x1,\n          y1,\n          x2,\n          y2,\n          parent: this.elgridLinesH\n        });\n        y1 += w2.layout.gridHeight / w2.globals.dataPoints;\n        y2 = y1;\n      }\n    }\n  }\n  renderGrid() {\n    var _a, _b, _c;\n    const w2 = this.w;\n    const gl = w2.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 (!w2.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 = w2.labelData.labels.length;\n        if (w2.config.xaxis.tickAmount && w2.config.xaxis.labels.formatter) {\n          xCount = w2.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 && w2.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: w2.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 w2 = this.w;\n    const drawBands = (type, count, x1, y1, x2, y2) => {\n      for (let i2 = 0, c2 = 0; i2 < count; i2++, c2++) {\n        if (c2 >= w2.config.grid[type].colors.length) {\n          c2 = 0;\n        }\n        this._drawGridBandRect({ c: c2, x1, y1, x2, y2, type });\n        y1 += w2.layout.gridHeight / tickAmount;\n      }\n    };\n    if (((_a = w2.config.grid.row.colors) == null ? void 0 : _a.length) > 0) {\n      drawBands(\n        \"row\",\n        tickAmount,\n        0,\n        0,\n        w2.layout.gridWidth,\n        w2.layout.gridHeight / tickAmount\n      );\n    }\n    if (((_b = w2.config.grid.column.colors) == null ? void 0 : _b.length) > 0) {\n      let xc = !w2.globals.isBarHorizontal && w2.config.xaxis.tickPlacement === \"on\" && (w2.config.xaxis.type === \"category\" || w2.config.xaxis.convertedCatToNumeric) ? xCount - 1 : xCount;\n      if (w2.axisFlags.isXNumeric) {\n        xc = ((_d = (_c = w2.globals.xAxisScale) == null ? void 0 : _c.result.length) != null ? _d : 1) - 1;\n      }\n      let x1 = w2.globals.padHorizontal;\n      const y1 = 0;\n      let x2 = w2.globals.padHorizontal + w2.layout.gridWidth / xc;\n      const y2 = w2.layout.gridHeight;\n      for (let i2 = 0, c2 = 0; i2 < xCount; i2++, c2++) {\n        if (c2 >= w2.config.grid.column.colors.length) {\n          c2 = 0;\n        }\n        if (w2.config.xaxis.type === \"datetime\") {\n          x1 = /** @type {any} */\n          this.xaxisLabels[i2].position;\n          x2 = /** @type {any} */\n          (((_e = this.xaxisLabels[i2 + 1]) == null ? void 0 : _e.position) || w2.layout.gridWidth) - /** @type {any} */\n          this.xaxisLabels[i2].position;\n        }\n        this._drawGridBandRect({ c: c2, x1, y1, x2, y2, type: \"column\" });\n        x1 += w2.layout.gridWidth / xc;\n      }\n    }\n  }\n}\nclass Scales {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\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 w2 = this.w;\n    const gl = w2.globals;\n    let axisCnf;\n    let maxTicks;\n    let gotMin;\n    let gotMax;\n    if (gl.isBarHorizontal) {\n      axisCnf = w2.config.xaxis;\n      maxTicks = Math.max((gl.svgWidth - 100) / 25, 2);\n    } else {\n      axisCnf = w2.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.max !== 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 t2 = tt;\n          let div = 1;\n          for (var next = lowest; next <= stop; next++) {\n            div *= pf[next];\n          }\n          t2 /= div;\n          if (t2 < maxTicks) {\n            tt = t2;\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 v2 = yMin;\n    while (tickCount >= 0) {\n      result.push(v2);\n      v2 = Utils$1.preciseAddition(v2, 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 i2 = logMin; i2 < logMax; i2++) {\n      logs.push(Math.pow(base, i2));\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 i2 = 0, logTick = logMin; i2 < ticks; i2++, 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 w2 = this.w;\n    const gl = w2.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        w2.config.xaxis.max === void 0 ? w2.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 i2 = 0; i2 < axisSeries.length; i2++) {\n            if (!seriesType && /** @type {Record<string,any>} */\n            cnf.series[axisSeries[i2]].type) {\n              seriesType = /** @type {Record<string,any>} */\n              cnf.series[axisSeries[i2]].type;\n            }\n            const si = axisSeries[i2];\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 i2 = 0; i2 < axisSeries.length; i2++) {\n            const si = axisSeries[i2];\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((v2, i2, a2) => a2.indexOf(v2) === i2);\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((p2) => {\n        this.setYScaleForIndex(p2.ai, p2.minY, p2.maxY);\n        axisSeriesMap[p2.ai].forEach((si) => {\n          minYArr[si] = gl.yAxisScale[p2.ai].niceMin;\n          maxYArr[si] = gl.yAxisScale[p2.ai].niceMax;\n        });\n      });\n      let targetRatio = 0;\n      alignZeroParticipants.forEach((p2) => {\n        const scale = gl.yAxisScale[p2.ai];\n        const range = scale.niceMax - scale.niceMin;\n        if (range > 0) {\n          const r2 = -scale.niceMin / range;\n          if (r2 > targetRatio) targetRatio = r2;\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((p2) => {\n        const scale = gl.yAxisScale[p2.ai];\n        if (!scale.result || scale.result.length < 2) return;\n        const range = scale.niceMax - scale.niceMin;\n        if (range <= 0) return;\n        const r2 = -scale.niceMin / range;\n        if (Math.abs(r2 - targetRatio) <= 1e-9) return;\n        const extendMin = r2 < targetRatio && targetRatio < 1 - 1e-9;\n        const extendMaxOnly = !extendMin && r2 > 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 v2 = newNiceMin; v2 <= newNiceMax + newStep * 1e-9; v2 = Utils$1.preciseAddition(v2, newStep)) {\n          scale.result.push(Utils$1.stripNumber(v2, 7));\n        }\n        scale.niceMin = newNiceMin;\n        scale.niceMax = newNiceMax;\n        axisSeriesMap[p2.ai].forEach((si) => {\n          minYArr[si] = scale.niceMin;\n          maxYArr[si] = scale.niceMax;\n        });\n      });\n    } else if (alignZeroParticipants.length === 1) {\n      const p2 = alignZeroParticipants[0];\n      this.setYScaleForIndex(p2.ai, p2.minY, p2.maxY);\n      axisSeriesMap[p2.ai].forEach((si) => {\n        minYArr[si] = gl.yAxisScale[p2.ai].niceMin;\n        maxYArr[si] = gl.yAxisScale[p2.ai].niceMax;\n      });\n    }\n  }\n}\nclass Range {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\n    this.scales = new Scales(this.w);\n  }\n  init() {\n    this.setYRange();\n    this.setXRange();\n    this.setZRange();\n  }\n  /**\n   * One rendered x-pixel expressed in data units, used to widen the\n   * autoScaleYaxis window so a boundary point that is still drawn inside the\n   * plot survives a sub-pixel rounding error in `xaxis.min`/`xaxis.max`.\n   *\n   * The window is taken from the configured bounds (that is what maps onto the\n   * grid) and falls back to the series' own x-extent for whichever bound is\n   * unset. Returns 0 when there is nothing to scale against: `gridWidth` is\n   * still 0 before the first `plotCoords()` run, and a first render has no\n   * pixel round-trip to compensate for anyway.\n   *\n   * @param {number[] | undefined} seriesX\n   * @returns {number}\n   */\n  _xPixelTolerance(seriesX) {\n    const gridWidth = this.w.layout.gridWidth;\n    if (!gridWidth || !seriesX || !seriesX.length) return 0;\n    const cnfX = this.w.config.xaxis;\n    const lo = typeof cnfX.min === \"number\" ? cnfX.min : seriesX[0];\n    const hi = typeof cnfX.max === \"number\" ? cnfX.max : seriesX[seriesX.length - 1];\n    if (!(hi > lo)) return 0;\n    return (hi - lo) / gridWidth;\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, _i;\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 i2 = startingSeriesIndex; i2 < endingSeriesIndex; i2++) {\n      gl.dataPoints = Math.max(gl.dataPoints, series[i2].length);\n      const seriesType = (\n        /** @type {Record<string,any>} */\n        cnf.series[i2].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((a2, c2) => a2 + c2.length, 0) !== 0) {\n        gl.dataPoints = Math.max(gl.dataPoints, this.w.labelData.labels.length);\n      }\n      let firstXIndex = 0;\n      let lastXIndex = series[i2].length - 1;\n      if (autoScaleYaxis) {\n        const xTolerance = this._xPixelTolerance(this.w.seriesData.seriesX[i2]);\n        if (cnf.xaxis.min) {\n          const lowerBound = cnf.xaxis.min - xTolerance;\n          for (; firstXIndex < lastXIndex && this.w.seriesData.seriesX[i2][firstXIndex] < lowerBound; firstXIndex++) {\n          }\n        }\n        if (cnf.xaxis.max) {\n          const upperBound = cnf.xaxis.max + xTolerance;\n          for (; lastXIndex > firstXIndex && this.w.seriesData.seriesX[i2][lastXIndex] > upperBound; lastXIndex--) {\n          }\n        }\n      }\n      const plainNumeric = seriesMin === series && seriesMax === series && cnf.chart.type !== \"boxPlot\" && seriesType !== \"candlestick\" && seriesType !== \"boxPlot\" && seriesType !== \"violin\" && seriesType !== \"rangeArea\" && seriesType !== \"rangeBar\" && !(this.w.seriesData.seriesGoals[i2] && this.w.seriesData.seriesGoals[i2].length);\n      if (plainNumeric) {\n        const arr = series[i2];\n        const jEnd = Math.min(lastXIndex, arr.length - 1);\n        const pe = (_b = this.w.seriesData._parsedExtrema) == null ? void 0 : _b[i2];\n        if (pe && pe.ref === arr && pe.len === arr.length && firstXIndex === 0 && jEnd === arr.length - 1) {\n          if (pe.maxY > maxY) maxY = pe.maxY;\n          if (pe.lowestY < lowestY) lowestY = pe.lowestY;\n          if (pe.negMinY < 0 && pe.negMinY < minY) minY = pe.negMinY;\n          if (pe.yDec > gl.yValueDecimal) gl.yValueDecimal = pe.yDec;\n          if (pe.hasNulls) gl.hasNullValues = true;\n        } else {\n          let yDec = gl.yValueDecimal;\n          let hasNulls = false;\n          for (let j = firstXIndex; j <= jEnd; j++) {\n            const val = arr[j];\n            if (val !== null && typeof val === \"number\" && val === val && val !== Infinity && val !== -Infinity) {\n              if (val > maxY) maxY = val;\n              if (val < lowestY) lowestY = val;\n              if (minY > val && val < 0) minY = val;\n              if (!Number.isInteger(val)) {\n                const av = val < 0 ? -val : val;\n                if (av >= 1e-6 && av < 1e21) {\n                  const str = \"\" + val;\n                  const dot = str.indexOf(\".\");\n                  const dec = dot === -1 ? 0 : str.length - dot - 1;\n                  if (dec > yDec) yDec = dec;\n                } else {\n                  const nv = Utils$1.noExponents(val);\n                  if (Utils$1.isFloat(nv)) {\n                    yDec = Math.max(yDec, nv.toString().split(\".\")[1].length);\n                  }\n                }\n              }\n            } else {\n              hasNulls = true;\n            }\n          }\n          gl.yValueDecimal = yDec;\n          if (hasNulls) gl.hasNullValues = true;\n        }\n        highestY = maxY;\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        continue;\n      }\n      for (let j = firstXIndex; j <= lastXIndex && j < this.w.seriesData.series[i2].length; j++) {\n        let val = series[i2][j];\n        if (val !== null && Utils$1.isNumber(val)) {\n          if (typeof ((_c = seriesMax[i2]) == null ? void 0 : _c[j]) !== \"undefined\") {\n            maxY = Math.max(maxY, seriesMax[i2][j]);\n            lowestY = Math.min(lowestY, seriesMax[i2][j]);\n          }\n          if (typeof ((_d = seriesMin[i2]) == null ? void 0 : _d[j]) !== \"undefined\") {\n            lowestY = Math.min(lowestY, seriesMin[i2][j]);\n            highestY = Math.max(highestY, seriesMin[i2][j]);\n          }\n          switch (seriesType) {\n            case \"candlestick\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i2][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleH[i2][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleL[i2][j]\n                  );\n                }\n              }\n              break;\n            case \"boxPlot\":\n              {\n                if (typeof this.w.candleData.seriesCandleC[i2][j] !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.candleData.seriesCandleC[i2][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.candleData.seriesCandleO[i2][j]\n                  );\n                }\n              }\n              break;\n            case \"violin\":\n              {\n                if (typeof ((_e = this.w.violinData.seriesViolinMax[i2]) == null ? void 0 : _e[j]) !== \"undefined\") {\n                  maxY = Math.max(maxY, this.w.violinData.seriesViolinMax[i2][j]);\n                  lowestY = Math.min(\n                    lowestY,\n                    this.w.violinData.seriesViolinMin[i2][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[i2][j]);\n            lowestY = Math.min(lowestY, this.w.seriesData.series[i2][j]);\n          }\n          if (this.w.seriesData.seriesGoals[i2] && this.w.seriesData.seriesGoals[i2][j] && Array.isArray(this.w.seriesData.seriesGoals[i2][j])) {\n            this.w.seriesData.seriesGoals[i2][j].forEach(\n              (g2) => {\n                maxY = Math.max(maxY, g2.value);\n                lowestY = Math.min(lowestY, g2.value);\n              }\n            );\n          }\n          if (this.w.config.chart.type === \"boxPlot\" || seriesType === \"boxPlot\") {\n            const boxPts = (_g = (_f = this.w.candleData.seriesBoxPoints) == null ? void 0 : _f[i2]) == null ? void 0 : _g[j];\n            if (boxPts) {\n              for (let p2 = 0; p2 < boxPts.length; p2++) {\n                const pv = boxPts[p2];\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 > ((_h = seriesMin[i2]) == null ? void 0 : _h[j]) && ((_i = seriesMin[i2]) == null ? void 0 : _i[j]) < 0) {\n            minY = seriesMin[i2][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 i2 = 0; i2 < this.w.seriesData.series.length; i2++) {\n        minYMaxY = this.getMinYMaxY(i2);\n        gl.minYArr[i2] = minYMaxY.lowestY;\n        gl.maxYArr[i2] = 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((m2) => {\n        if (cnf.xaxis[m2] !== void 0 && typeof cnf.xaxis[m2] === \"number\") {\n          m2 === \"min\" ? gl.minY = cnf.xaxis[m2] : gl.maxY = cnf.xaxis[m2];\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((s2) => {\n      const _s = (\n        /** @type {any} */\n        s2\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((v2, i2, a2) => a2.indexOf(v2) === i2);\n    gl.lineGroups = gl.lineGroups.filter((v2, i2, a2) => a2.indexOf(v2) === i2);\n    gl.areaGroups = gl.areaGroups.filter((v2, i2, a2) => a2.indexOf(v2) === i2);\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      var _a;\n      let minX = gl.minX;\n      let maxX = gl.maxX;\n      for (let i2 = 0; i2 < this.w.seriesData.series.length; i2++) {\n        const lbls = (\n          /** @type {any} */\n          this.w.labelData.labels[i2]\n        );\n        if (!lbls) continue;\n        const pe = (_a = this.w.seriesData._parsedExtrema) == null ? void 0 : _a[i2];\n        if (pe && pe.xNumeric && pe.xref === lbls && pe.len === lbls.length) {\n          if (pe.maxX > maxX) maxX = pe.maxX;\n          if (pe.minX < minX) minX = pe.minX;\n          continue;\n        }\n        for (let j = 0; j < lbls.length; j++) {\n          const v2 = lbls[j];\n          if (v2 !== null && typeof v2 === \"number\" && v2 === v2) {\n            if (v2 > maxX) maxX = v2;\n            if (v2 < minX) minX = v2;\n          }\n        }\n      }\n      gl.maxX = maxX;\n      gl.initialMaxX = maxX;\n      gl.minX = minX;\n      gl.initialMinX = minX;\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 i2 = gl.minX - 1; i2 < gl.maxX; i2++) {\n            catScale.push(i2 + 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 i2 = 0; i2 < this.w.seriesData.series.length; i2++) {\n      if (typeof this.w.seriesData.seriesZ[i2] !== \"undefined\") {\n        for (let j = 0; j < this.w.seriesData.seriesZ[i2].length; j++) {\n          if (this.w.seriesData.seriesZ[i2][j] !== null && Utils$1.isNumber(this.w.seriesData.seriesZ[i2][j])) {\n            gl.maxZ = Math.max(gl.maxZ, this.w.seriesData.seriesZ[i2][j]);\n            gl.minZ = Math.min(gl.minZ, this.w.seriesData.seriesZ[i2][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, si) => {\n        var _a;\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 pe = (_a = this.w.seriesData._parsedExtrema) == null ? void 0 : _a[si];\n          if (pe && pe.xNumeric && pe.xSorted && pe.xref === sX && pe.len === sX.length) {\n            if (pe.minXDiff < gl.minXDiff) gl.minXDiff = pe.minXDiff;\n            if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n              gl.minXDiff = 0.5;\n            }\n            return;\n          }\n          let presorted = true;\n          let minDiff = gl.minXDiff;\n          for (let j = 1; j < sX.length; j++) {\n            const d = sX[j] - sX[j - 1];\n            if (d > 0) {\n              if (d < minDiff) minDiff = d;\n            } else if (d < 0) {\n              presorted = false;\n              break;\n            }\n          }\n          if (presorted) {\n            gl.minXDiff = minDiff;\n            if (gl.dataPoints === 1 || gl.minXDiff === Number.MAX_VALUE) {\n              gl.minXDiff = 0.5;\n            }\n            return;\n          }\n          const seriesX = sX.slice();\n          seriesX.sort((a2, b2) => a2 - b2);\n          seriesX.forEach((s2, j) => {\n            if (j > 0) {\n              const xDiff = s2 - 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((i2) => {\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[i2]) == null ? void 0 : _b.type) === \"bar\" || /** @type {Record<string,any>} */\n          ((_d = (_c = this.w.config.series) == null ? void 0 : _c[i2]) == null ? void 0 : _d.type) === \"column\");\n          if (stackSeries) {\n            if (this.w.seriesData.series[i2][j] !== null && Utils$1.isNumber(this.w.seriesData.series[i2][j])) {\n              this.w.seriesData.series[i2][j] > 0 ? stackedPoss[group][j] += parseFloat(String(this.w.seriesData.series[i2][j])) + 1e-4 : stackedNegs[group][j] += parseFloat(\n                String(this.w.seriesData.series[i2][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(w2, { theme = null, timeScale = null } = {}, elgrid) {\n    this.w = w2;\n    this.elgrid = elgrid;\n    this.xaxisFontSize = w2.config.xaxis.labels.style.fontSize;\n    this.axisFontFamily = w2.config.xaxis.labels.style.fontFamily;\n    this.xaxisForeColors = w2.config.xaxis.labels.style.colors;\n    this.isCategoryBarHorizontal = w2.config.chart.type === \"bar\" && w2.config.plotOptions.bar.horizontal;\n    this.xAxisoffX = w2.config.xaxis.position === \"bottom\" ? w2.layout.gridHeight : 0;\n    this.drawnLabels = [];\n    this.axesUtils = new AxesUtils(w2, { theme, timeScale });\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxis(realIndex) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const yaxisStyle = w2.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(${w2.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 = w2.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w2.layout.gridHeight / tickAmount;\n    const lbFormatter = w2.formatters.yLabelFormatters[realIndex];\n    const labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w2.globals.yAxisScale[realIndex].result.slice()\n    );\n    let labelStep = 1;\n    if (w2.config.chart.type === \"heatmap\" && !w2.config.yaxis[realIndex].labels.formatter) {\n      const fs = parseInt(yaxisFontSize, 10) || 11;\n      const maxLabels = Math.max(1, Math.floor(w2.layout.gridHeight / (fs * 1.4)));\n      const count = tickAmount + 1;\n      if (count > maxLabels) labelStep = Math.ceil(count / maxLabels);\n    }\n    if (w2.config.yaxis[realIndex].labels.show) {\n      let lY = w2.layout.translateY + w2.config.yaxis[realIndex].labels.offsetY;\n      if (w2.globals.isBarHorizontal) lY = 0;\n      else if (w2.config.chart.type === \"heatmap\") lY -= labelsDivider / 2;\n      lY += parseInt(yaxisFontSize, 10) / 3;\n      let firstLabel = null;\n      for (let i2 = tickAmount; i2 >= 0; i2--) {\n        const thinned = labelStep > 1 && i2 % labelStep !== 0;\n        const val = thinned ? \"\" : lbFormatter(labels[i2], i2, w2);\n        let xPad = w2.config.yaxis[realIndex].labels.padding;\n        if (w2.config.yaxis[realIndex].opposite && w2.config.yaxis.length !== 0)\n          xPad *= -1;\n        const textAnchor = this.getTextAnchor(\n          w2.config.yaxis[realIndex].labels.align,\n          w2.config.yaxis[realIndex].opposite\n        );\n        const yColors = this.axesUtils.getYAxisForeColor(\n          yaxisStyle.colors,\n          realIndex\n        );\n        const foreColor = Array.isArray(yColors) ? yColors[i2] : yColors;\n        const existingYLabels = Array.from(\n          w2.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) && !w2.config.yaxis[realIndex].labels.showDuplicates ? \"\" : val,\n          textAnchor,\n          fontSize: yaxisFontSize,\n          fontFamily: yaxisFontFamily,\n          fontWeight: yaxisFontWeight,\n          maxWidth: w2.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 (w2.config.yaxis[realIndex].labels.rotate !== 0) {\n          this.rotateLabel(\n            graphics,\n            label,\n            firstLabel,\n            w2.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$2, \"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 w2 = this.w;\n    if (w2.config.yaxis[realIndex].title.text !== void 0) {\n      const elYaxisTitle = graphics.group({ class: \"apexcharts-yaxis-title\" });\n      const x = w2.config.yaxis[realIndex].opposite ? w2.globals.translateYAxisX[realIndex] : 0;\n      const elYAxisTitleText = graphics.drawText({\n        x,\n        y: w2.layout.gridHeight / 2 + w2.layout.translateY + w2.config.yaxis[realIndex].title.offsetY,\n        text: w2.config.yaxis[realIndex].title.text,\n        textAnchor: \"end\",\n        foreColor: w2.config.yaxis[realIndex].title.style.color,\n        fontSize: w2.config.yaxis[realIndex].title.style.fontSize,\n        fontWeight: w2.config.yaxis[realIndex].title.style.fontWeight,\n        fontFamily: w2.config.yaxis[realIndex].title.style.fontFamily,\n        cssClass: `apexcharts-yaxis-title-text ${w2.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 w2 = this.w;\n    const axisBorder = w2.config.yaxis[realIndex].axisBorder;\n    let x = 31 + axisBorder.offsetX;\n    if (w2.config.yaxis[realIndex].opposite) x = -31 - axisBorder.offsetX;\n    if (axisBorder.show) {\n      const elVerticalLine = graphics.drawLine(\n        x,\n        w2.layout.translateY + axisBorder.offsetY - 2,\n        x,\n        w2.layout.gridHeight + w2.layout.translateY + axisBorder.offsetY + 2,\n        axisBorder.color,\n        0,\n        axisBorder.width\n      );\n      elYaxis.add(elVerticalLine);\n    }\n    if (w2.config.yaxis[realIndex].axisTicks.show) {\n      this.axesUtils.drawYAxisTicks(\n        x,\n        tickAmount,\n        axisBorder,\n        w2.config.yaxis[realIndex].axisTicks,\n        realIndex,\n        labelsDivider,\n        elYaxis\n      );\n    }\n  }\n  /**\n   * @param {number} realIndex\n   */\n  drawYaxisInversed(realIndex) {\n    const w2 = 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(${w2.layout.translateXAxisX}, ${w2.layout.translateXAxisY})`\n    });\n    elXaxis.add(elXaxisTexts);\n    let tickAmount = w2.globals.yAxisScale[realIndex].result.length - 1;\n    const labelsDivider = w2.layout.gridWidth / tickAmount + 0.1;\n    let l2 = labelsDivider + w2.config.xaxis.labels.offsetX;\n    const lbFormatter = w2.formatters.xLabelFormatter;\n    let labels = this.axesUtils.checkForReversedLabels(\n      realIndex,\n      w2.globals.yAxisScale[realIndex].result.slice()\n    );\n    const timescaleLabels = w2.labelData.timescaleLabels;\n    if (timescaleLabels.length > 0) {\n      this.xaxisLabels = timescaleLabels.slice();\n      labels = timescaleLabels.slice();\n      tickAmount = labels.length;\n    }\n    if (w2.config.xaxis.labels.show) {\n      for (let i2 = timescaleLabels.length ? 0 : tickAmount; timescaleLabels.length ? i2 < timescaleLabels.length : i2 >= 0; timescaleLabels.length ? i2++ : i2--) {\n        let val = lbFormatter == null ? void 0 : lbFormatter(labels[i2], i2, w2);\n        let x = w2.layout.gridWidth + w2.globals.padHorizontal - (l2 - labelsDivider + w2.config.xaxis.labels.offsetX);\n        if (timescaleLabels.length) {\n          const label = this.axesUtils.getLabel(\n            labels,\n            timescaleLabels,\n            x,\n            i2,\n            this.drawnLabels,\n            this.xaxisFontSize\n          );\n          x = label.x;\n          val = label.text;\n          this.drawnLabels.push(label.text);\n          if (i2 === 0 && w2.globals.skipFirstTimelinelabel) val = \"\";\n          if (i2 === labels.length - 1 && w2.globals.skipLastTimelinelabel)\n            val = \"\";\n        }\n        const elTick = graphics.drawText({\n          x,\n          y: this.xAxisoffX + w2.config.xaxis.labels.offsetY + 30 - (w2.config.xaxis.position === \"top\" ? w2.layout.xAxisHeight + w2.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: w2.config.xaxis.labels.style.fontWeight,\n          isPlainText: false,\n          cssClass: `apexcharts-xaxis-label ${w2.config.xaxis.labels.style.cssClass}`\n        });\n        elXaxisTexts.add(elTick);\n        this.addTooltip(elTick, val);\n        l2 += 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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const axisBorder = w2.config.xaxis.axisBorder;\n    if (axisBorder.show) {\n      let lineCorrection = 0;\n      if (w2.config.chart.type === \"bar\" && w2.axisFlags.isXNumeric)\n        lineCorrection -= 15;\n      const elHorzLine = graphics.drawLine(\n        w2.globals.padHorizontal + lineCorrection + axisBorder.offsetX,\n        this.xAxisoffX,\n        w2.layout.gridWidth,\n        this.xAxisoffX,\n        axisBorder.color,\n        0,\n        axisBorder.height\n      );\n      if (this.elgrid && this.elgrid.elGridBorders && w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    if (w2.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: w2.layout.gridWidth / 2 + w2.config.xaxis.title.offsetX,\n        y: this.xAxisoffX + parseFloat(this.xaxisFontSize) + parseFloat(w2.config.xaxis.title.style.fontSize) + w2.config.xaxis.title.offsetY + 20,\n        text: w2.config.xaxis.title.text,\n        textAnchor: \"middle\",\n        fontSize: w2.config.xaxis.title.style.fontSize,\n        fontFamily: w2.config.xaxis.title.style.fontFamily,\n        fontWeight: w2.config.xaxis.title.style.fontWeight,\n        foreColor: w2.config.xaxis.title.style.color,\n        cssClass: `apexcharts-xaxis-title-text ${w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const elYAxisLabelsWrap = w2.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 = w2.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 ? w2.config.yaxis[realIndex].title.rotate * -1 : w2.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 w2 = this.w;\n    let x = 0;\n    let padd = 10;\n    if (w2.config.yaxis[realIndex].title.text === void 0 || realIndex < 0) {\n      return { xPos: x, padd: 0 };\n    }\n    if (yAxisOpposite) {\n      x = yAxisLabelsCoord.width + w2.config.yaxis[realIndex].title.offsetX + yAxisTitleCoord.width / 2 + padd / 2;\n    } else {\n      x = yAxisLabelsCoord.width * -1 + w2.config.yaxis[realIndex].title.offsetX + padd / 2 + yAxisTitleCoord.width / 2;\n      if (w2.globals.isBarHorizontal) {\n        padd = 25;\n        x = yAxisLabelsCoord.width * -1 - w2.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 w2 = this.w;\n    let xLeft = 0;\n    let xRight = 0;\n    let leftOffsetX = 18;\n    let rightOffsetX = 1;\n    if (w2.config.yaxis.length > 1) this.multipleYs = true;\n    w2.config.yaxis.forEach((yaxe, index) => {\n      const shouldNotDrawAxis = w2.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 = w2.layout.translateX - leftOffsetX;\n        if (!shouldNotDrawAxis) leftOffsetX += axisWidth + 20;\n        w2.globals.translateYAxisX[index] = xLeft + yaxe.labels.offsetX;\n      } else {\n        if (w2.globals.isBarHorizontal) {\n          xRight = w2.layout.gridWidth + w2.layout.translateX - 1;\n          w2.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX;\n        } else {\n          xRight = w2.layout.gridWidth + w2.layout.translateX + rightOffsetX;\n          if (!shouldNotDrawAxis) rightOffsetX += axisWidth + 20;\n          w2.globals.translateYAxisX[index] = xRight - yaxe.labels.offsetX + 20;\n        }\n      }\n    });\n  }\n  setYAxisTextAlignments() {\n    const w2 = this.w;\n    const yaxis = Array.from(\n      w2.dom.baseEl.getElementsByClassName(\"apexcharts-yaxis\")\n    );\n    yaxis.forEach((y, index) => {\n      const yaxe = w2.config.yaxis[index];\n      if (yaxe && !yaxe.floating && yaxe.labels.align !== void 0) {\n        const yAxisInner = w2.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        );\n        const yAxisTexts = Array.from(\n          w2.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(w2, ctx) {\n    this.w = w2;\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 w2 = this.w;\n    if (Object.prototype.hasOwnProperty.call(w2.globals.events, name2)) {\n      w2.globals.events[name2].push(handler);\n    } else {\n      w2.globals.events[name2] = [handler];\n    }\n  }\n  /**\n   * @param {string} name\n   * @param {Function} handler\n   */\n  removeEventListener(name2, handler) {\n    const w2 = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w2.globals.events, name2)) {\n      return;\n    }\n    const index = (\n      /** @type {Record<string,any>} */\n      w2.globals.events[name2].indexOf(handler)\n    );\n    if (index !== -1) {\n      w2.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 w2 = this.w;\n    if (!Object.prototype.hasOwnProperty.call(w2.globals.events, name2)) {\n      return;\n    }\n    if (!args || !args.length) {\n      args = [];\n    }\n    const evs = (\n      /** @type {Record<string,any>} */\n      w2.globals.events[name2]\n    );\n    const l2 = evs.length;\n    for (let i2 = 0; i2 < l2; i2++) {\n      evs[i2].apply(null, args);\n    }\n  }\n  setupEventHandlers() {\n    const w2 = this.w;\n    const me = this.ctx;\n    const clickableArea = w2.dom.baseEl.querySelector(w2.globals.chartClass);\n    this.ctx.eventList.forEach((event) => {\n      clickableArea == null ? void 0 : clickableArea.addEventListener(\n        event,\n        (e2) => {\n          const capturedSeriesIndex = e2.target.getAttribute(\"i\") === null && w2.interact.capturedSeriesIndex !== -1 ? w2.interact.capturedSeriesIndex : e2.target.getAttribute(\"i\");\n          const capturedDataPointIndex = e2.target.getAttribute(\"j\") === null && w2.interact.capturedDataPointIndex !== -1 ? w2.interact.capturedDataPointIndex : e2.target.getAttribute(\"j\");\n          const opts = Object.assign({}, w2, {\n            seriesIndex: w2.globals.axisCharts ? capturedSeriesIndex : 0,\n            dataPointIndex: capturedDataPointIndex\n          });\n          if (e2.type === \"keydown\") {\n            if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.keyboard.enabled) {\n              if (me.ctx.keyboardNavigation) {\n                me.ctx.keyboardNavigation.handleKey(e2);\n              }\n              if (typeof w2.config.chart.events.keyDown === \"function\") {\n                w2.config.chart.events.keyDown(e2, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keydown\", [e2, me, opts]);\n            }\n          } else if (e2.type === \"keyup\") {\n            if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.keyboard.enabled) {\n              if (typeof w2.config.chart.events.keyUp === \"function\") {\n                w2.config.chart.events.keyUp(e2, me, opts);\n              }\n              me.ctx.events.fireEvent(\"keyup\", [e2, me, opts]);\n            }\n          } else if (e2.type === \"mousemove\" || e2.type === \"touchmove\") {\n            if (typeof w2.config.chart.events.mouseMove === \"function\") {\n              w2.config.chart.events.mouseMove(e2, me, opts);\n            }\n          } else if (e2.type === \"mouseleave\" || e2.type === \"touchleave\") {\n            if (typeof w2.config.chart.events.mouseLeave === \"function\") {\n              w2.config.chart.events.mouseLeave(e2, me, opts);\n            }\n          } else if (e2.type === \"mouseup\" && e2.which === 1 || e2.type === \"touchend\") {\n            if (typeof w2.config.chart.events.click === \"function\") {\n              w2.config.chart.events.click(e2, me, opts);\n            }\n            me.ctx.events.fireEvent(\"click\", [e2, me, opts]);\n          }\n        },\n        { capture: false, passive: true }\n      );\n    });\n    this.ctx.eventList.forEach((event) => {\n      w2.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(e2) {\n    const w2 = this.w;\n    const target = e2.target.className;\n    if (e2.type === \"click\") {\n      const elMenu = w2.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    w2.interact.clientX = e2.type === \"touchmove\" ? e2.touches[0].clientX : e2.clientX;\n    w2.interact.clientY = e2.type === \"touchmove\" ? e2.touches[0].clientY : e2.clientY;\n  }\n}\nclass Localization {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\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      (c2) => c2.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(w2, ctx) {\n    this.w = w2;\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(w2) {\n    this.w = w2;\n  }\n  drawXCrosshairs() {\n    const w2 = this.w;\n    w2.dom.elGraphical.node.querySelectorAll(\":scope > .apexcharts-xcrosshairs\").forEach((el) => el.remove());\n    const graphics = new Graphics(this.w);\n    const filters = new Filters(this.w);\n    const crosshairGradient = w2.config.xaxis.crosshairs.fill.gradient;\n    const crosshairShadow = w2.config.xaxis.crosshairs.dropShadow;\n    const fillType = w2.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 = w2.config.xaxis.crosshairs.fill.color;\n    if (w2.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 = w2.config.xaxis.crosshairs.width === 1 ? graphics.drawLine(0, 0, 0, 0) : graphics.drawRect();\n      let gridHeight = w2.layout.gridHeight;\n      if (!Utils$1.isNumber(gridHeight) || gridHeight < 0) {\n        gridHeight = 0;\n      }\n      let crosshairsWidth = w2.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\": w2.config.xaxis.crosshairs.opacity,\n        stroke: w2.config.xaxis.crosshairs.stroke.color,\n        \"stroke-width\": w2.config.xaxis.crosshairs.stroke.width,\n        \"stroke-dasharray\": w2.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      w2.dom.elGraphical.add(xcrosshairs);\n    }\n  }\n  drawYCrosshairs() {\n    const w2 = this.w;\n    w2.dom.elGraphical.node.querySelectorAll(\n      \":scope > .apexcharts-ycrosshairs, :scope > .apexcharts-ycrosshairs-hidden\"\n    ).forEach((el) => el.remove());\n    const graphics = new Graphics(this.w);\n    const crosshair = (\n      /** @type {any[]} */\n      w2.config.yaxis[0].crosshairs\n    );\n    const offX = w2.globals.barPadForNumericAxis;\n    if (\n      /** @type {any[]} */\n      w2.config.yaxis[0].crosshairs.show\n    ) {\n      const ycrosshairs = graphics.drawLine(\n        -offX,\n        0,\n        w2.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      w2.dom.elGraphical.add(ycrosshairs);\n    }\n    const ycrosshairsHidden = graphics.drawLine(\n      -offX,\n      0,\n      w2.layout.gridWidth + offX,\n      0,\n      crosshair.stroke.color,\n      0,\n      0\n    );\n    ycrosshairsHidden.attr({\n      class: \"apexcharts-ycrosshairs-hidden\"\n    });\n    w2.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 v2 = override[key];\n    if (v2 === void 0) continue;\n    if (Utils$1.isObject(v2) && Utils$1.isObject(base[key])) {\n      out[key] = mergeYaxisOverride(base[key], v2);\n    } else {\n      out[key] = v2;\n    }\n  }\n  return out;\n}\nclass Responsive {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\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 w2 = this.w;\n    const cnf = w2.config;\n    if (cnf.responsive.length === 0) return;\n    const res = cnf.responsive.slice();\n    res.sort(\n      (a2, b2) => a2.breakpoint > b2.breakpoint ? 1 : b2.breakpoint > a2.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 (!w2.globals.initialConfig) return;\n          const initialConfig = Utils$1.clone(w2.globals.initialConfig);\n          initialConfig.series = Utils$1.clone(w2.config.series);\n          const options2 = CoreUtils.extendArrayProps(config, initialConfig, w2);\n          newOptions = Utils$1.extend(options2, newOptions);\n          this.overrideResponsiveOptions(newOptions);\n          this._activeBreakpoint = null;\n        }\n      } else {\n        for (let i2 = 0; i2 < res.length; i2++) {\n          if (width < res[i2].breakpoint) {\n            const originalUserYaxis = ((_a = res[i2].options) == null ? void 0 : _a.yaxis) ? Utils$1.clone(res[i2].options.yaxis) : null;\n            newOptions = CoreUtils.extendArrayProps(config, res[i2].options, w2);\n            newOptions = Utils$1.extend(w2.config, newOptions);\n            if (Array.isArray(w2.config.yaxis) && originalUserYaxis) {\n              const userYaxis = Array.isArray(originalUserYaxis) ? originalUserYaxis : [originalUserYaxis];\n              newOptions = __spreadProps(__spreadValues({}, newOptions), {\n                yaxis: w2.config.yaxis.map(\n                  (baseAxis, idx) => mergeYaxisOverride(baseAxis, userYaxis[idx])\n                )\n              });\n            }\n            this.overrideResponsiveOptions(newOptions);\n            this._activeBreakpoint = res[i2].breakpoint;\n          }\n        }\n      }\n    };\n    if (opts) {\n      let options2 = CoreUtils.extendArrayProps(config, opts, w2);\n      options2 = Utils$1.extend(w2.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}\nfunction captureStreamFrame(w2) {\n  var _a, _b, _c;\n  const gl = w2.globals;\n  if (!gl.axisCharts || !w2.seriesData || !Array.isArray(w2.seriesData.series) || w2.seriesData.series.length === 0) {\n    gl.prevStreamFrame = null;\n    return;\n  }\n  const rPixels = [];\n  if ((_b = (_a = w2.dom) == null ? void 0 : _a.baseEl) == null ? void 0 : _b.querySelectorAll) {\n    w2.dom.baseEl.querySelectorAll(\".apexcharts-marker\").forEach((node) => {\n      var _a2, _b2, _c2, _d, _e;\n      const ri = parseInt((_a2 = node.getAttribute(\"index\")) != null ? _a2 : \"\", 10);\n      const j = parseInt(\n        (_c2 = (_b2 = node.getAttribute(\"j\")) != null ? _b2 : node.getAttribute(\"rel\")) != null ? _c2 : \"\",\n        10\n      );\n      const r2 = parseFloat(\n        (_e = (_d = node.getAttribute(\"r\")) != null ? _d : node.getAttribute(\"default-marker-size\")) != null ? _e : \"\"\n      );\n      if (isFinite(ri) && isFinite(j) && isFinite(r2)) {\n        (rPixels[ri] = rPixels[ri] || [])[j] = r2;\n      }\n    });\n  }\n  gl.prevStreamFrame = {\n    seriesX: (w2.seriesData.seriesX || []).slice(),\n    seriesY: w2.seriesData.series.slice(),\n    xPixels: (gl.seriesXvalues || []).slice(),\n    yPixels: (gl.seriesYvalues || []).slice(),\n    rPixels,\n    labels: (gl.labels || []).slice(),\n    isXNumeric: !!((_c = w2.axisFlags) == null ? void 0 : _c.isXNumeric)\n  };\n}\nfunction detectStreamScroll(w2, realIndex, newXPixels, newYPixels) {\n  var _a;\n  const gl = w2.globals;\n  const frame = gl.prevStreamFrame;\n  if (!frame || !gl.dataChanged || !((_a = w2.axisFlags) == null ? void 0 : _a.isXNumeric)) return null;\n  const oldX = frame.seriesX[realIndex];\n  const oldY = frame.seriesY[realIndex];\n  const newX = w2.seriesData.seriesX[realIndex];\n  const newY = w2.seriesData.series[realIndex];\n  if (!oldX || !oldY || !newX || !newY) return null;\n  if (oldX.length < 3 || newX.length < 3) return null;\n  let k = -1;\n  for (let i2 = 0; i2 < oldX.length; i2++) {\n    if (oldX[i2] === newX[0]) {\n      k = i2;\n      break;\n    }\n  }\n  if (k === -1) return null;\n  const overlap = Math.min(oldX.length - k, newX.length);\n  if (overlap < 2) return null;\n  const appended = newX.length - overlap;\n  if (k === 0 && appended === 0) return null;\n  for (let i2 = 0; i2 < overlap; i2++) {\n    if (oldX[k + i2] !== newX[i2]) return null;\n    const oy = oldY[k + i2];\n    const ny = newY[i2];\n    if (oy !== ny && !(oy == null && ny == null)) return null;\n  }\n  const oldXP = frame.xPixels[realIndex];\n  const oldYP = frame.yPixels[realIndex];\n  if (!oldXP || !oldYP) return null;\n  let a2 = -1;\n  let b2 = -1;\n  for (let i2 = 0; i2 < overlap; i2++) {\n    if (oldXP[k + i2] == null || oldYP[k + i2] == null || newXPixels[i2] == null || newYPixels[i2] == null) {\n      continue;\n    }\n    if (a2 === -1) a2 = i2;\n    b2 = i2;\n  }\n  if (a2 === -1 || b2 <= a2) return null;\n  const nxA = (\n    /** @type {number} */\n    newXPixels[a2]\n  );\n  const nxB = (\n    /** @type {number} */\n    newXPixels[b2]\n  );\n  const oxA = (\n    /** @type {number} */\n    oldXP[k + a2]\n  );\n  const oxB = (\n    /** @type {number} */\n    oldXP[k + b2]\n  );\n  if (Math.abs(nxB - nxA) < 1e-6) return null;\n  const ax = (oxB - oxA) / (nxB - nxA);\n  const bx = oxA - ax * nxA;\n  if (!isFinite(ax) || !isFinite(bx)) return null;\n  if (Math.abs(ax - 1) > 0.02) return null;\n  if (Math.abs(bx) < 0.5) return null;\n  let yLo = a2;\n  let yHi = a2;\n  for (let i2 = a2; i2 <= b2; i2++) {\n    const ny = newYPixels[i2];\n    if (ny == null || oldYP[k + i2] == null) continue;\n    if (ny < /** @type {number} */\n    newYPixels[yLo]) yLo = i2;\n    if (ny > /** @type {number} */\n    newYPixels[yHi]) yHi = i2;\n  }\n  let ay = 1;\n  let by = 0;\n  const nyLo = (\n    /** @type {number} */\n    newYPixels[yLo]\n  );\n  const nyHi = (\n    /** @type {number} */\n    newYPixels[yHi]\n  );\n  if (Math.abs(nyHi - nyLo) > 1e-6) {\n    ay = /** @type {number} */\n    (oldYP[k + yHi] - /** @type {number} */\n    oldYP[k + yLo]) / (nyHi - nyLo);\n    by = /** @type {number} */\n    oldYP[k + yLo] - ay * nyLo;\n  } else {\n    by = /** @type {number} */\n    oldYP[k + yLo] - nyLo;\n  }\n  if (!isFinite(ay) || !isFinite(by) || ay < 0.2 || ay > 5) return null;\n  const m2 = Math.floor((a2 + b2) / 2);\n  if (m2 !== a2 && m2 !== b2 && newXPixels[m2] != null && oldXP[k + m2] != null) {\n    const predX = ax * /** @type {number} */\n    newXPixels[m2] + bx;\n    if (Math.abs(predX - /** @type {number} */\n    oldXP[k + m2]) > 1.5) {\n      return null;\n    }\n    if (newYPixels[m2] != null && oldYP[k + m2] != null) {\n      const predY = ay * /** @type {number} */\n      newYPixels[m2] + by;\n      if (Math.abs(predY - /** @type {number} */\n      oldYP[k + m2]) > 1.5) {\n        return null;\n      }\n    }\n  }\n  return { ax, bx, ay, by };\n}\nconst NUM_RE = /[+-]?(?:\\d+\\.?\\d*|\\.\\d+)(?:e[+-]?\\d+)?/gi;\nfunction projectPathToPrevFrame(d, t2) {\n  const { ax, bx, ay, by } = t2;\n  const out = [];\n  const re = /([MmLlHhVvCcSsQqTtAaZz])([^MmLlHhVvCcSsQqTtAaZz]*)/g;\n  let match;\n  while ((match = re.exec(d)) !== null) {\n    const cmd = match[1].toUpperCase();\n    const nums = (match[2].match(NUM_RE) || []).map(parseFloat);\n    if (cmd === \"Z\") {\n      out.push(\"z\");\n      continue;\n    }\n    if (cmd === \"H\") {\n      for (const x of nums) out.push(`H ${ax * x + bx}`);\n      continue;\n    }\n    if (cmd === \"V\") {\n      for (const y of nums) out.push(`V ${ay * y + by}`);\n      continue;\n    }\n    if (cmd === \"A\") {\n      for (let i2 = 0; i2 + 6 < nums.length; i2 += 7) {\n        out.push(\n          `A ${nums[i2]} ${nums[i2 + 1]} ${nums[i2 + 2]} ${nums[i2 + 3]} ${nums[i2 + 4]} ${ax * nums[i2 + 5] + bx} ${ay * nums[i2 + 6] + by}`\n        );\n      }\n      continue;\n    }\n    const coords = [];\n    for (let i2 = 0; i2 + 1 < nums.length; i2 += 2) {\n      coords.push(`${ax * nums[i2] + bx} ${ay * nums[i2 + 1] + by}`);\n    }\n    if (coords.length) out.push(`${cmd} ${coords.join(\" \")}`);\n  }\n  return out.join(\" \");\n}\nfunction trimStreamingSeries(newSeries, w2) {\n  const cfg = w2.config.chart.streaming;\n  if (!cfg || !cfg.enabled) return;\n  const maxPoints = cfg.maxPoints;\n  const range = w2.config.xaxis.range;\n  const xOf = (p2) => {\n    if (p2 == null) return null;\n    if (Array.isArray(p2)) return typeof p2[0] === \"number\" ? p2[0] : null;\n    if (typeof p2 === \"object\") return typeof p2.x === \"number\" ? p2.x : null;\n    return null;\n  };\n  newSeries.forEach((s2) => {\n    var _a;\n    const data = s2 == null ? void 0 : s2.data;\n    if (!Array.isArray(data) || data.length < 2) return;\n    if (typeof maxPoints === \"number\" && maxPoints > 0) {\n      if (data.length > maxPoints) s2.data = data.slice(data.length - maxPoints);\n      return;\n    }\n    if (!range) return;\n    const lastX = xOf(data[data.length - 1]);\n    const firstX = xOf(data[0]);\n    if (lastX == null || firstX == null || lastX <= firstX) return;\n    const avgSpacing = (lastX - firstX) / (data.length - 1);\n    const cutoff = lastX - range - 2 * avgSpacing;\n    let idx = 0;\n    while (idx < data.length && ((_a = xOf(data[idx])) != null ? _a : cutoff) < cutoff) idx++;\n    if (idx > 0) s2.data = data.slice(idx);\n  });\n}\nfunction buildUnionEntries(join, oldN) {\n  const exitSet = new Set(join.exits);\n  const entries = [];\n  let oi = 0;\n  for (let nj = 0; nj < join.toOld.length; nj++) {\n    const oj = join.toOld[nj];\n    if (oj !== -1) {\n      while (oi < oj) {\n        if (exitSet.has(oi)) entries.push({ oldJ: oi, newJ: -1 });\n        oi++;\n      }\n      entries.push({ oldJ: oj, newJ: nj });\n      oi = oj + 1;\n    } else {\n      entries.push({ oldJ: -1, newJ: nj });\n    }\n  }\n  while (oi < oldN) {\n    if (exitSet.has(oi)) entries.push({ oldJ: oi, newJ: -1 });\n    oi++;\n  }\n  return entries;\n}\nfunction analyzeSeriesPath(d, expectedAnchors, isArea) {\n  if (!d || typeof d !== \"string\") return null;\n  const cmds = parsePath(d);\n  if (!cmds.length || cmds[0][0] !== \"M\") return null;\n  for (let i2 = 1; i2 < cmds.length; i2++) {\n    if (cmds[i2][0] === \"M\") return null;\n  }\n  let body = cmds;\n  let closing = null;\n  if (isArea) {\n    if (cmds.length < 5) return null;\n    closing = cmds.slice(-3);\n    body = cmds.slice(0, -3);\n    if (closing[2][0] !== \"Z\") return null;\n    if (closing[1][0] !== \"L\") return null;\n    if (closing[0][0] !== \"L\" && closing[0][0] !== \"C\") return null;\n  } else if (cmds[cmds.length - 1][0] === \"Z\") {\n    return null;\n  }\n  if (body.length !== expectedAnchors || body.length < 2) return null;\n  const segType = body[1][0];\n  if (segType !== \"L\" && segType !== \"C\") return null;\n  for (let i2 = 2; i2 < body.length; i2++) {\n    if (body[i2][0] !== segType) return null;\n  }\n  const anchors = body.map(\n    (c2) => c2[0] === \"C\" ? [Number(c2[5]), Number(c2[6])] : [Number(c2[1]), Number(c2[2])]\n  );\n  for (const a2 of anchors) {\n    if (!isFinite(a2[0]) || !isFinite(a2[1])) return null;\n  }\n  return { body, closing, segType, anchors };\n}\nfunction lerpPt(a2, b2, t2) {\n  return [a2[0] + (b2[0] - a2[0]) * t2, a2[1] + (b2[1] - a2[1]) * t2];\n}\nfunction splitCubic(s2, cmd, t2) {\n  const p0 = s2;\n  const p1 = [cmd[1], cmd[2]];\n  const p2 = [cmd[3], cmd[4]];\n  const p3 = [cmd[5], cmd[6]];\n  const p01 = lerpPt(p0, p1, t2);\n  const p12 = lerpPt(p1, p2, t2);\n  const p23 = lerpPt(p2, p3, t2);\n  const p012 = lerpPt(p01, p12, t2);\n  const p123 = lerpPt(p12, p23, t2);\n  const mid = lerpPt(p012, p123, t2);\n  return {\n    first: [\"C\", p01[0], p01[1], p012[0], p012[1], mid[0], mid[1]],\n    second: [\"C\", p123[0], p123[1], p23[0], p23[1], p3[0], p3[1]],\n    mid\n  };\n}\nfunction splitLine(s2, cmd, t2) {\n  const e2 = [cmd[1], cmd[2]];\n  const mid = lerpPt(s2, e2, t2);\n  return {\n    first: [\"L\", mid[0], mid[1]],\n    second: [\"L\", e2[0], e2[1]],\n    mid\n  };\n}\nfunction expandPath(analysis, ownIdx) {\n  const { body, closing, segType, anchors } = analysis;\n  const n2 = anchors.length;\n  const m2 = ownIdx.length;\n  const degen = (p2) => segType === \"C\" ? [\"C\", p2[0], p2[1], p2[0], p2[1], p2[0], p2[1]] : [\"L\", p2[0], p2[1]];\n  const out = [[\"M\", anchors[0][0], anchors[0][1]]];\n  let firstOwn = 0;\n  while (firstOwn < m2 && ownIdx[firstOwn] !== 0) firstOwn++;\n  for (let q = 1; q <= firstOwn; q++) out.push(degen(anchors[0]));\n  let entry = firstOwn + 1;\n  for (let s2 = 0; s2 < n2 - 1; s2++) {\n    let interior = 0;\n    while (entry + interior < m2 && ownIdx[entry + interior] === -1) interior++;\n    const cmd = body[s2 + 1];\n    if (!interior) {\n      out.push(cmd.slice());\n    } else {\n      const totalParts = interior + 1;\n      let start = anchors[s2];\n      let rest = cmd;\n      for (let q = 0; q < interior; q++) {\n        const t2 = 1 / (totalParts - q);\n        const sp = segType === \"C\" ? splitCubic(start, rest, t2) : splitLine(start, rest, t2);\n        out.push(sp.first);\n        start = sp.mid;\n        rest = sp.second;\n      }\n      out.push(rest);\n    }\n    entry += interior + 1;\n  }\n  while (entry < m2) {\n    out.push(degen(anchors[n2 - 1]));\n    entry++;\n  }\n  if (closing) closing.forEach((c2) => out.push(c2.slice()));\n  return out;\n}\nfunction reconcilePathPair(fromD, toD, entries, oldN, newN, isArea) {\n  const fromAnalysis = analyzeSeriesPath(fromD, oldN, isArea);\n  if (!fromAnalysis) return null;\n  const toAnalysis = analyzeSeriesPath(toD, newN, isArea);\n  if (!toAnalysis) return null;\n  if (fromAnalysis.segType !== toAnalysis.segType) return null;\n  if ((fromAnalysis.closing || toAnalysis.closing) && (!fromAnalysis.closing || !toAnalysis.closing || fromAnalysis.closing[0][0] !== toAnalysis.closing[0][0])) {\n    return null;\n  }\n  const fromOwn = entries.map((e2) => e2.oldJ);\n  const toOwn = entries.map((e2) => e2.newJ);\n  return {\n    from: arrayToPath(expandPath(fromAnalysis, fromOwn)),\n    toInterp: arrayToPath(expandPath(toAnalysis, toOwn))\n  };\n}\nfunction lengthTransitionEnabled(w2) {\n  var _a;\n  const anim = w2.config.chart.animations;\n  if (!anim || anim.enabled === false) return false;\n  if (!anim.dynamicAnimation || anim.dynamicAnimation.enabled === false) {\n    return false;\n  }\n  const largeThreshold = (_a = anim.largeDatasetThreshold) != null ? _a : 0;\n  if (largeThreshold > 0 && w2.globals.dataPoints > largeThreshold) return false;\n  return !!(Environment.isBrowser() && w2.globals.dataChanged && w2.globals.shouldAnimate);\n}\nfunction datumKey(w2, realIndex, j) {\n  var _a, _b, _c, _d;\n  if ((_a = w2.axisFlags) == null ? void 0 : _a.isXNumeric) {\n    const sx = (_c = (_b = w2.seriesData) == null ? void 0 : _b.seriesX) == null ? void 0 : _c[realIndex];\n    if (sx && sx.length && sx[j] != null) return \"x:\" + sx[j];\n  }\n  const lbl = (_d = w2.globals.labels) == null ? void 0 : _d[j];\n  if (lbl != null && String(lbl) !== \"\") {\n    return \"c:\" + (Array.isArray(lbl) ? lbl.join(\" \") : String(lbl));\n  }\n  return \"j:\" + j;\n}\nfunction frameDatumKey(frame, realIndex, j) {\n  var _a, _b;\n  if (frame.isXNumeric) {\n    const sx = (_a = frame.seriesX) == null ? void 0 : _a[realIndex];\n    if (sx && sx.length && sx[j] != null) return \"x:\" + sx[j];\n  }\n  const lbl = (_b = frame.labels) == null ? void 0 : _b[j];\n  if (lbl != null && String(lbl) !== \"\") {\n    return \"c:\" + (Array.isArray(lbl) ? lbl.join(\" \") : String(lbl));\n  }\n  return \"j:\" + j;\n}\nfunction joinKeys(oldKeys, newKeys) {\n  const oldIndex = /* @__PURE__ */ new Map();\n  oldKeys.forEach((k, i2) => {\n    if (!oldIndex.has(k)) oldIndex.set(k, i2);\n  });\n  const toOld = new Array(newKeys.length);\n  const usedOld = /* @__PURE__ */ new Set();\n  let prev = -1;\n  let ordered = true;\n  let identity = oldKeys.length === newKeys.length;\n  newKeys.forEach((k, i2) => {\n    const oi = oldIndex.has(k) && !usedOld.has(oldIndex.get(k)) ? oldIndex.get(k) : -1;\n    toOld[i2] = oi;\n    if (oi !== -1) {\n      usedOld.add(oi);\n      if (oi < prev) ordered = false;\n      prev = oi;\n    }\n    if (oi !== i2) identity = false;\n  });\n  const exits = [];\n  for (let i2 = 0; i2 < oldKeys.length; i2++) {\n    if (!usedOld.has(i2)) exits.push(i2);\n  }\n  return { toOld, exits, ordered, changed: !identity };\n}\nfunction uniquifyKeys(keys) {\n  const seen = /* @__PURE__ */ new Map();\n  return keys.map((k) => {\n    const count = seen.get(k) || 0;\n    seen.set(k, count + 1);\n    return count === 0 ? k : `${k}#${count}`;\n  });\n}\nfunction seriesJoin(w2, realIndex, includeIdentity = false, allowReorder = false) {\n  var _a, _b;\n  if (!lengthTransitionEnabled(w2)) return null;\n  const frame = w2.globals.prevStreamFrame;\n  if (!frame) return null;\n  const oldY = (_a = frame.seriesY) == null ? void 0 : _a[realIndex];\n  const newY = (_b = w2.seriesData.series) == null ? void 0 : _b[realIndex];\n  if (!Array.isArray(oldY) || !Array.isArray(newY)) return null;\n  if (!oldY.length || !newY.length) return null;\n  const oldKeys = uniquifyKeys(\n    oldY.map((_, j) => frameDatumKey(frame, realIndex, j))\n  );\n  const newKeys = uniquifyKeys(newY.map((_, j) => datumKey(w2, realIndex, j)));\n  const join = joinKeys(oldKeys, newKeys);\n  if (!join.ordered && !allowReorder) return null;\n  if (!join.changed && !includeIdentity) return null;\n  return { join, oldKeys, newKeys };\n}\nfunction morphEasing(w2) {\n  var _a, _b;\n  const anim = w2.config.chart.animations;\n  return resolveEasing((_b = (_a = anim.dynamicAnimation) == null ? void 0 : _a.easing) != null ? _b : anim.easing);\n}\nfunction rafTween(w2, duration, ease, onFrame, onDone) {\n  const startAt = performance.now();\n  const step = (now) => {\n    if (w2.globals.isDestroyed) return;\n    const raw = Math.max(0, Math.min(1, (now - startAt) / duration));\n    onFrame(ease(raw), raw);\n    if (raw < 1) {\n      BrowserAPIs.requestAnimationFrame(step);\n    } else if (onDone) {\n      onDone();\n    }\n  };\n  BrowserAPIs.requestAnimationFrame(step);\n}\nfunction tweenSeriesMarkers(w2, { elPointsMain, realIndex, speed }) {\n  var _a, _b, _c, _d;\n  if (!(elPointsMain == null ? void 0 : elPointsMain.node)) return false;\n  const sj = seriesJoin(w2, realIndex, true);\n  if (!sj) return false;\n  const frame = w2.globals.prevStreamFrame;\n  if (!frame) return false;\n  const oldXP = (_a = frame.xPixels) == null ? void 0 : _a[realIndex];\n  const oldYP = (_b = frame.yPixels) == null ? void 0 : _b[realIndex];\n  if (!oldXP || !oldYP) return false;\n  const markers = elPointsMain.node.querySelectorAll(\".apexcharts-marker\");\n  if (!markers.length) return false;\n  const newXP = ((_c = w2.globals.seriesXvalues) == null ? void 0 : _c[realIndex]) || [];\n  const newYP = ((_d = w2.globals.seriesYvalues) == null ? void 0 : _d[realIndex]) || [];\n  const ease = morphEasing(w2);\n  const duration = Math.max(1, speed || 1);\n  elPointsMain.node.classList.remove(\"apexcharts-element-hidden\");\n  markers.forEach((node) => {\n    var _a2, _b2, _c2, _d2, _e, _f, _g, _h, _i;\n    const j = parseInt(\n      (_b2 = (_a2 = node.getAttribute(\"j\")) != null ? _a2 : node.getAttribute(\"rel\")) != null ? _b2 : \"\",\n      10\n    );\n    if (!isFinite(j) || j < 0 || j >= sj.join.toOld.length) return;\n    const oldJ = sj.join.toOld[j];\n    const to = newXP[j] != null && newYP[j] != null ? [newXP[j], newYP[j]] : null;\n    if (oldJ === -1 || !to) {\n      const style = (\n        /** @type {any} */\n        node.style\n      );\n      style.opacity = \"0\";\n      rafTween(\n        w2,\n        duration,\n        ease,\n        (eased) => {\n          style.opacity = String(eased);\n        },\n        () => {\n          style.opacity = \"\";\n        }\n      );\n      return;\n    }\n    const dx = ((_c2 = oldXP[oldJ]) != null ? _c2 : NaN) - to[0];\n    const dy = ((_d2 = oldYP[oldJ]) != null ? _d2 : NaN) - to[1];\n    if (!isFinite(dx) || !isFinite(dy)) return;\n    const rFrom = (_g = (_f = (_e = frame.rPixels) == null ? void 0 : _e[realIndex]) == null ? void 0 : _f[oldJ]) != null ? _g : NaN;\n    const rTo = parseFloat(\n      (_i = (_h = node.getAttribute(\"r\")) != null ? _h : node.getAttribute(\"default-marker-size\")) != null ? _i : \"\"\n    );\n    const scales = isFinite(rFrom) && isFinite(rTo) && rTo > 0 && Math.abs(rFrom - rTo) > 0.25;\n    const moves = Math.abs(dx) >= 0.5 || Math.abs(dy) >= 0.5;\n    if (!moves && !scales) return;\n    const apply = (eased) => {\n      const offX = dx * (1 - eased);\n      const offY = dy * (1 - eased);\n      if (scales) {\n        const s2 = (rFrom + (rTo - rFrom) * eased) / rTo;\n        node.setAttribute(\n          \"transform\",\n          `translate(${offX + to[0] * (1 - s2)}, ${offY + to[1] * (1 - s2)}) scale(${s2})`\n        );\n      } else {\n        node.setAttribute(\"transform\", `translate(${offX}, ${offY})`);\n      }\n    };\n    apply(0);\n    rafTween(w2, duration, ease, apply, () => {\n      node.removeAttribute(\"transform\");\n    });\n  });\n  return true;\n}\nfunction reconcileSeriesPaths(w2, { type, realIndex, pathFromLine, pathFromArea, linePaths, areaPaths }) {\n  var _a, _b;\n  const sj = seriesJoin(w2, realIndex);\n  if (!sj) return null;\n  const { join, oldKeys, newKeys } = sj;\n  const frame = w2.globals.prevStreamFrame;\n  if (!frame) return null;\n  const oldY = (_a = frame.seriesY) == null ? void 0 : _a[realIndex];\n  const newY = (_b = w2.seriesData.series) == null ? void 0 : _b[realIndex];\n  if (oldY.length < 2 || newY.length < 2) return null;\n  if (oldY.some((v2) => v2 === null) || newY.some((v2) => v2 === null)) return null;\n  const entries = buildUnionEntries(join, oldKeys.length);\n  const out = {};\n  if (Array.isArray(linePaths) && linePaths.length === 1 && pathFromLine) {\n    out.line = reconcilePathPair(\n      pathFromLine,\n      linePaths[0],\n      entries,\n      oldKeys.length,\n      newKeys.length,\n      false\n    );\n  }\n  if (type === \"area\" && Array.isArray(areaPaths) && areaPaths.length === 1 && pathFromArea) {\n    out.area = reconcilePathPair(\n      pathFromArea,\n      areaPaths[0],\n      entries,\n      oldKeys.length,\n      newKeys.length,\n      true\n    );\n  }\n  if (!out.line && !out.area) return null;\n  return out;\n}\nfunction firstMove(d) {\n  const m2 = /^M\\s*([+-]?[\\d.eE]+)[\\s,]+([+-]?[\\d.eE]+)/.exec(d || \"\");\n  if (!m2) return null;\n  const x = parseFloat(m2[1]);\n  const y = parseFloat(m2[2]);\n  return isFinite(x) && isFinite(y) ? { x, y } : null;\n}\nfunction renderBarExitGhosts({\n  w: w2,\n  elSeries,\n  record,\n  newKeys,\n  isHorizontal,\n  speed\n}) {\n  var _a;\n  if (!lengthTransitionEnabled(w2)) return;\n  if (!record || !Array.isArray(record.paths) || !(elSeries == null ? void 0 : elSeries.node)) return;\n  const newKeySet = new Set(newKeys);\n  const exits = record.paths.filter(\n    (p2) => p2 && p2.d && p2.key != null && !newKeySet.has(p2.key)\n  );\n  if (!exits.length) return;\n  const graphics = new Graphics(w2);\n  const fallbackFill = (_a = w2.globals.colors) == null ? void 0 : _a[parseInt(String(record.realIndex), 10)];\n  exits.forEach((p2) => {\n    let fill = p2.fill || fallbackFill || \"#c8c8c8\";\n    if (String(fill).indexOf(\"url(\") === 0) fill = fallbackFill || \"#c8c8c8\";\n    const ghost = graphics.drawPath({\n      d: p2.d,\n      stroke: \"none\",\n      strokeWidth: 0,\n      fill,\n      fillOpacity: 1,\n      classes: \"apexcharts-bar-ghost\"\n    });\n    const node = ghost.node;\n    node.setAttribute(\"pointer-events\", \"none\");\n    ghost.attr(\n      \"clip-path\",\n      `url(#gridRectBarMask${w2.globals.cuid})`\n    );\n    elSeries.node.insertBefore(node, elSeries.node.firstChild);\n    const start = firstMove(p2.d);\n    let origin = isHorizontal ? \"left center\" : \"center bottom\";\n    try {\n      const bb = node.getBBox();\n      if (start && bb) {\n        if (isHorizontal) {\n          origin = Math.abs(start.x - bb.x) <= Math.abs(start.x - (bb.x + bb.width)) ? \"left center\" : \"right center\";\n        } else {\n          origin = Math.abs(start.y - (bb.y + bb.height)) <= Math.abs(start.y - bb.y) ? \"center bottom\" : \"center top\";\n        }\n      }\n    } catch (_) {\n    }\n    const style = node.style;\n    style.transformBox = \"fill-box\";\n    style.transformOrigin = origin;\n    const duration = Math.max(1, speed || 1);\n    const startAt = performance.now();\n    const step = (now) => {\n      if (w2.globals.isDestroyed || !node.parentNode) return;\n      const t2 = Math.max(0, Math.min(1, (now - startAt) / duration));\n      const eased = 1 - Math.pow(1 - t2, 3);\n      const scale = 1 - eased;\n      style.transform = isHorizontal ? `scaleX(${scale})` : `scaleY(${scale})`;\n      style.opacity = String(1 - eased);\n      if (t2 < 1) {\n        BrowserAPIs.requestAnimationFrame(step);\n      } else {\n        node.parentNode.removeChild(node);\n      }\n    };\n    BrowserAPIs.requestAnimationFrame(step);\n  });\n}\nfunction grabLabels(root, sel, posAttr) {\n  return [...root.querySelectorAll(sel)].map((el) => {\n    var _a, _b, _c;\n    return {\n      // `text` is the matching KEY (textContent, which doubles tspan + title\n      // but does so consistently on both sides); `display` is the visible\n      // string, used when rendering an exit ghost.\n      text: el.textContent || \"\",\n      display: (_c = (_b = (_a = el.querySelector(\"tspan\")) == null ? void 0 : _a.textContent) != null ? _b : el.textContent) != null ? _c : \"\",\n      pos: parseFloat(el.getAttribute(posAttr) || \"\"),\n      transform: el.getAttribute(\"transform\")\n    };\n  });\n}\nfunction grabLines(root, sel, posAttr) {\n  return [...root.querySelectorAll(sel)].map(\n    (el) => parseFloat(el.getAttribute(posAttr) || \"\")\n  );\n}\nconst NO_GHOST = \":not(.apexcharts-tick-ghost)\";\nconst X_LABELS_SEL = `.apexcharts-xaxis-texts-g text:not(.apexcharts-xaxis-group-label)${NO_GHOST}`;\nconst Y_LABELS_SEL = `.apexcharts-yaxis-texts-g text${NO_GHOST}`;\nconst V_GRID_SEL = `.apexcharts-gridlines-vertical line${NO_GHOST}`;\nconst H_GRID_SEL = `.apexcharts-gridlines-horizontal line${NO_GHOST}`;\nfunction currentXScale(w2) {\n  var _a, _b;\n  const gl = w2.globals;\n  if (!((_a = w2.axisFlags) == null ? void 0 : _a.isXNumeric) || gl.isBarHorizontal) return null;\n  if ((_b = w2.config.xaxis) == null ? void 0 : _b.reversed) return null;\n  const min = gl.minX;\n  const max = gl.maxX;\n  const width = w2.layout.gridWidth;\n  if (!isFinite(min) || !isFinite(max) || !(max > min) || !(width > 0)) {\n    return null;\n  }\n  return { min, max, width };\n}\nfunction currentYAnchors(w2, labels) {\n  var _a;\n  const gl = w2.globals;\n  if (gl.isBarHorizontal) return null;\n  if (!Array.isArray(w2.config.yaxis) || w2.config.yaxis.length !== 1) return null;\n  if ((_a = w2.config.yaxis[0]) == null ? void 0 : _a.logarithmic) return null;\n  const min = gl.minY;\n  const max = gl.maxY;\n  if (!isFinite(min) || !isFinite(max) || !(max > min)) return null;\n  const ps = labels.map((l2) => l2.pos).filter((p2) => isFinite(p2));\n  if (ps.length < 2) return null;\n  return { min, max, pLo: Math.max(...ps), pHi: Math.min(...ps) };\n}\nfunction composeXMap(o2, n2) {\n  if (!o2 || !n2) return null;\n  const os = o2.max - o2.min;\n  const ns = n2.max - n2.min;\n  if (!(os > 0) || !(ns > 0) || !(o2.width > 0) || !(n2.width > 0)) return null;\n  return {\n    toNew: (p2) => (o2.min + p2 / o2.width * os - n2.min) / ns * n2.width,\n    toOld: (p2) => (n2.min + p2 / n2.width * ns - o2.min) / os * o2.width\n  };\n}\nfunction composeYMap(o2, n2) {\n  if (!o2 || !n2) return null;\n  const oSpanP = o2.pHi - o2.pLo;\n  const nSpanP = n2.pHi - n2.pLo;\n  const oSpanV = o2.max - o2.min;\n  const nSpanV = n2.max - n2.min;\n  if (!oSpanP || !nSpanP || !(oSpanV > 0) || !(nSpanV > 0)) return null;\n  const oldVal = (p2) => o2.min + (p2 - o2.pLo) / oSpanP * oSpanV;\n  const newVal = (p2) => n2.min + (p2 - n2.pLo) / nSpanP * nSpanV;\n  return {\n    toNew: (p2) => n2.pLo + (oldVal(p2) - n2.min) / nSpanV * nSpanP,\n    toOld: (p2) => o2.pLo + (newVal(p2) - o2.min) / oSpanV * oSpanP\n  };\n}\nfunction captureAxisChrome(w2) {\n  const gl = w2.globals;\n  gl.prevChromeFrame = null;\n  if (!gl.axisCharts || !Environment.isBrowser()) return;\n  const root = w2.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  try {\n    const yLabels = grabLabels(root, Y_LABELS_SEL, \"y\");\n    gl.prevChromeFrame = {\n      xLabels: grabLabels(root, X_LABELS_SEL, \"x\"),\n      yLabels,\n      vGrid: grabLines(root, V_GRID_SEL, \"x1\"),\n      hGrid: grabLines(root, H_GRID_SEL, \"y1\"),\n      // Value scales of the outgoing render, so ticks whose TEXT has no\n      // counterpart (e.g. a zoom across datetime granularities) can still be\n      // re-projected: new ticks slide in from where their value sat, old\n      // ticks ghost out to where their value lands.\n      xScale: currentXScale(w2),\n      yAnchors: currentYAnchors(w2, yLabels)\n    };\n  } catch (_) {\n    gl.prevChromeFrame = null;\n  }\n}\nfunction fadeIn$1(w2, node, duration, ease) {\n  const style = (\n    /** @type {any} */\n    node.style\n  );\n  style.opacity = \"0\";\n  rafTween(\n    w2,\n    duration,\n    ease,\n    (eased) => {\n      style.opacity = String(eased);\n    },\n    () => {\n      style.opacity = \"\";\n    }\n  );\n}\nfunction tweenPos(w2, node, attrs, from, to, duration, ease) {\n  attrs.forEach((a2) => node.setAttribute(a2, String(from)));\n  rafTween(\n    w2,\n    duration,\n    ease,\n    (eased) => {\n      const v2 = String(from + (to - from) * eased);\n      attrs.forEach((a2) => node.setAttribute(a2, v2));\n    },\n    () => {\n      attrs.forEach((a2) => node.setAttribute(a2, String(to)));\n    }\n  );\n}\nfunction spawnGhost(w2, { template, display, attrs, from, to, duration, ease }) {\n  const parent = template.parentNode;\n  if (!parent) return;\n  const ghost = (\n    /** @type {Element} */\n    template.cloneNode(true)\n  );\n  ghost.classList.add(\"apexcharts-tick-ghost\");\n  ghost.setAttribute(\"pointer-events\", \"none\");\n  ghost.removeAttribute(\"id\");\n  if (display !== void 0) {\n    const tspan = ghost.querySelector(\"tspan\");\n    if (tspan) tspan.textContent = display;\n    else ghost.textContent = display;\n    const title = ghost.querySelector(\"title\");\n    if (title) title.textContent = display;\n  }\n  attrs.forEach((a2) => ghost.setAttribute(a2, String(from)));\n  const style = (\n    /** @type {any} */\n    ghost.style\n  );\n  style.opacity = \"1\";\n  parent.appendChild(ghost);\n  rafTween(\n    w2,\n    duration,\n    ease,\n    (eased) => {\n      const v2 = String(from + (to - from) * eased);\n      attrs.forEach((a2) => ghost.setAttribute(a2, v2));\n      style.opacity = String(1 - eased);\n    },\n    () => {\n      if (ghost.parentNode) ghost.parentNode.removeChild(ghost);\n    }\n  );\n}\nconst MAX_GHOSTS = 20;\nfunction transitionAxis(w2, {\n  newLabels,\n  oldLabels,\n  posAttr,\n  newLines,\n  oldLines,\n  lineAttrs,\n  duration,\n  ease,\n  project\n}) {\n  const oldByText = /* @__PURE__ */ new Map();\n  oldLabels.forEach((l2, i2) => {\n    if (!oldByText.has(l2.text)) oldByText.set(l2.text, __spreadProps(__spreadValues({}, l2), { i: i2 }));\n  });\n  const matchedOld = /* @__PURE__ */ new Set();\n  const newLinesAligned = newLines.length === newLabels.length;\n  const oldLinesAligned = oldLines.length === oldLabels.length;\n  const spanPs = oldLabels.map((l2) => l2.pos).concat(\n    newLabels.map((l2) => parseFloat(l2.getAttribute(posAttr) || \"\"))\n  ).filter((p2) => isFinite(p2));\n  const spanLo = Math.min(...spanPs);\n  const spanHi = Math.max(...spanPs);\n  const margin = Math.max(40, (spanHi - spanLo) * 0.25);\n  const clamp = (p2) => Math.max(spanLo - margin, Math.min(spanHi + margin, p2));\n  const tweenPairedLine = (line, old) => {\n    if (!line) return;\n    const lineTo = parseFloat(line.getAttribute(lineAttrs[0]) || \"\");\n    const lineFrom = oldLines[old.i];\n    if (isFinite(lineTo) && isFinite(lineFrom)) {\n      tweenPos(w2, line, lineAttrs, lineFrom, lineTo, duration, ease);\n    }\n  };\n  newLabels.forEach((label, i2) => {\n    const to = parseFloat(label.getAttribute(posAttr) || \"\");\n    const old = oldByText.get(label.textContent || \"\");\n    const line = newLinesAligned ? newLines[i2] : null;\n    if (old) matchedOld.add(old.i);\n    const labelTransform = label.getAttribute(\"transform\");\n    if (!old || !isFinite(old.pos)) {\n      if (!old) {\n        if (project && isFinite(to) && !labelTransform) {\n          const from = isFinite(project.toOld(to)) ? clamp(project.toOld(to)) : NaN;\n          if (isFinite(from) && Math.abs(from - to) > 0.5) {\n            tweenPos(w2, label, [posAttr], from, to, duration, ease);\n            if (line) tweenPos(w2, line, lineAttrs, from, to, duration, ease);\n          }\n        }\n        fadeIn$1(w2, label, duration, ease);\n        if (line) fadeIn$1(w2, line, duration, ease);\n      }\n      return;\n    }\n    if (!isFinite(to) || Math.abs(old.pos - to) < 0.5) return;\n    if (labelTransform || old.transform) {\n      const delta = old.pos - to;\n      if (isFinite(delta)) {\n        const base = labelTransform || \"\";\n        rafTween(\n          w2,\n          duration,\n          ease,\n          (eased) => {\n            const v2 = delta * (1 - eased);\n            const t2 = posAttr === \"x\" ? `translate(${v2} 0)` : `translate(0 ${v2})`;\n            label.setAttribute(\"transform\", `${t2} ${base}`.trim());\n          },\n          () => {\n            if (base) label.setAttribute(\"transform\", base);\n            else label.removeAttribute(\"transform\");\n          }\n        );\n      }\n      tweenPairedLine(line, old);\n      return;\n    }\n    tweenPos(w2, label, [posAttr], old.pos, to, duration, ease);\n    tweenPairedLine(line, old);\n  });\n  if (!project || !newLabels.length) return;\n  let ghosts = 0;\n  oldLabels.forEach((old, i2) => {\n    if (matchedOld.has(i2)) return;\n    if (!isFinite(old.pos) || old.transform) return;\n    if (ghosts >= MAX_GHOSTS) return;\n    const rawTo = project.toNew(old.pos);\n    if (!isFinite(rawTo) || Math.abs(rawTo - old.pos) < 0.5) return;\n    ghosts++;\n    spawnGhost(w2, {\n      template: newLabels[0],\n      display: old.display,\n      attrs: [posAttr],\n      from: old.pos,\n      to: clamp(rawTo),\n      duration,\n      ease\n    });\n    if (oldLinesAligned && newLines.length && isFinite(oldLines[i2])) {\n      spawnGhost(w2, {\n        template: newLines[0],\n        attrs: lineAttrs,\n        from: oldLines[i2],\n        to: clamp(project.toNew(oldLines[i2])),\n        duration,\n        ease\n      });\n    }\n  });\n}\nfunction applyAxisTransition(w2) {\n  const gl = w2.globals;\n  const chrome = gl.prevChromeFrame;\n  gl.prevChromeFrame = null;\n  if (!chrome || !gl.axisCharts || !Environment.isBrowser()) return;\n  if (!lengthTransitionEnabled(w2)) return;\n  const anyMotion = (w2.seriesData.series || []).some(\n    (_, i2) => seriesJoin(w2, i2, true, true) !== null\n  );\n  if (!anyMotion) return;\n  const root = w2.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  const duration = Math.max(1, w2.config.chart.animations.dynamicAnimation.speed || 1);\n  const ease = morphEasing(w2);\n  try {\n    const newYLabels = [...root.querySelectorAll(Y_LABELS_SEL)];\n    const projX = composeXMap(chrome.xScale, currentXScale(w2));\n    const projY = composeYMap(\n      chrome.yAnchors,\n      currentYAnchors(\n        w2,\n        newYLabels.map((el) => ({\n          pos: parseFloat(el.getAttribute(\"y\") || \"\")\n        }))\n      )\n    );\n    transitionAxis(w2, {\n      newLabels: [...root.querySelectorAll(X_LABELS_SEL)],\n      oldLabels: chrome.xLabels,\n      posAttr: \"x\",\n      newLines: [...root.querySelectorAll(V_GRID_SEL)],\n      oldLines: chrome.vGrid,\n      lineAttrs: [\"x1\", \"x2\"],\n      duration,\n      ease,\n      project: projX\n    });\n    transitionAxis(w2, {\n      newLabels: newYLabels,\n      oldLabels: chrome.yLabels,\n      posAttr: \"y\",\n      newLines: [...root.querySelectorAll(H_GRID_SEL)],\n      oldLines: chrome.hGrid,\n      lineAttrs: [\"y1\", \"y2\"],\n      duration,\n      ease,\n      project: projY\n    });\n  } catch (_) {\n  }\n}\nconst DL_GROUP_SEL = \".apexcharts-data-labels[data\\\\:dlKey]\";\nconst DL_TEXT_SEL = \".apexcharts-datalabel\";\nfunction dataLabelMotionEnabled(w2) {\n  var _a, _b;\n  const dl = w2.config.dataLabels;\n  return !!(((_a = dl == null ? void 0 : dl.animate) == null ? void 0 : _a.enabled) || ((_b = dl == null ? void 0 : dl.countUp) == null ? void 0 : _b.enabled));\n}\nfunction decimalsOf(n2) {\n  if (!isFinite(n2)) return 0;\n  const s2 = String(Math.abs(n2));\n  const e2 = s2.indexOf(\"e\");\n  if (e2 !== -1) {\n    const mantissa = s2.slice(0, e2);\n    const exp = parseInt(s2.slice(e2 + 1), 10);\n    const dot2 = mantissa.indexOf(\".\");\n    const mantissaDec = dot2 === -1 ? 0 : mantissa.length - dot2 - 1;\n    return Math.min(6, Math.max(0, mantissaDec - exp));\n  }\n  const dot = s2.indexOf(\".\");\n  return dot === -1 ? 0 : Math.min(6, s2.length - dot - 1);\n}\nfunction writeLabel(textEl, s2) {\n  const tspan = textEl.querySelector(\"tspan\");\n  if (tspan) tspan.textContent = s2;\n  else textEl.textContent = s2;\n}\nfunction captureDataLabels(w2) {\n  const gl = w2.globals;\n  gl.prevDataLabels = null;\n  if (!gl.axisCharts || !Environment.isBrowser()) return;\n  if (!dataLabelMotionEnabled(w2)) return;\n  const root = w2.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  try {\n    const map = /* @__PURE__ */ new Map();\n    root.querySelectorAll(DL_GROUP_SEL).forEach((group) => {\n      const key = group.getAttribute(\"data:dlKey\");\n      if (!key) return;\n      const textEl = group.querySelector(DL_TEXT_SEL);\n      if (!textEl) return;\n      map.set(key, {\n        cx: parseFloat(textEl.getAttribute(\"cx\") || \"\"),\n        cy: parseFloat(textEl.getAttribute(\"cy\") || \"\"),\n        val: parseFloat(group.getAttribute(\"data:dlVal\") || \"\")\n      });\n    });\n    gl.prevDataLabels = map.size ? map : null;\n  } catch (_) {\n    gl.prevDataLabels = null;\n  }\n}\nfunction fadeIn(w2, node, duration, ease) {\n  const style = (\n    /** @type {any} */\n    node.style\n  );\n  style.opacity = \"0\";\n  rafTween(\n    w2,\n    duration,\n    ease,\n    (eased) => {\n      style.opacity = String(eased);\n    },\n    () => {\n      style.opacity = \"\";\n    }\n  );\n}\nfunction applyDataLabelTransition(w2) {\n  var _a, _b;\n  const gl = w2.globals;\n  const prev = gl.prevDataLabels;\n  gl.prevDataLabels = null;\n  if (!prev || !gl.axisCharts || !Environment.isBrowser()) return;\n  if (!dataLabelMotionEnabled(w2)) return;\n  if (!lengthTransitionEnabled(w2)) return;\n  const root = w2.dom.baseEl;\n  if (!Utils$1.elementExists(root)) return;\n  const dl = w2.config.dataLabels;\n  const ride = !!((_a = dl.animate) == null ? void 0 : _a.enabled);\n  const countUp = !!((_b = dl.countUp) == null ? void 0 : _b.enabled);\n  const formatter = dl.formatter;\n  const duration = Math.max(1, w2.config.chart.animations.dynamicAnimation.speed || 1);\n  const ease = morphEasing(w2);\n  try {\n    root.querySelectorAll(DL_GROUP_SEL).forEach((group) => {\n      const key = group.getAttribute(\"data:dlKey\");\n      if (!key) return;\n      const textEl = group.querySelector(DL_TEXT_SEL);\n      if (!textEl) return;\n      const old = prev.get(key);\n      if (ride) {\n        if (old && isFinite(old.cx) && isFinite(old.cy)) {\n          const newCx = parseFloat(textEl.getAttribute(\"cx\") || \"\");\n          const newCy = parseFloat(textEl.getAttribute(\"cy\") || \"\");\n          const dx = old.cx - newCx;\n          const dy = old.cy - newCy;\n          if (isFinite(dx) && isFinite(dy) && Math.abs(dx) + Math.abs(dy) > 0.5) {\n            const base = group.getAttribute(\"transform\") || \"\";\n            rafTween(\n              w2,\n              duration,\n              ease,\n              (eased) => {\n                const t2 = 1 - eased;\n                group.setAttribute(\n                  \"transform\",\n                  `translate(${dx * t2} ${dy * t2}) ${base}`.trim()\n                );\n              },\n              () => {\n                group.setAttribute(\"transform\", base);\n              }\n            );\n          }\n        } else if (!old) {\n          fadeIn(w2, group, duration, ease);\n        }\n      }\n      if (countUp && old && isFinite(old.val)) {\n        const newVal = parseFloat(group.getAttribute(\"data:dlVal\") || \"\");\n        if (isFinite(newVal) && Math.abs(newVal - old.val) > 1e-9) {\n          const from = old.val;\n          const dec = Math.max(decimalsOf(from), decimalsOf(newVal));\n          const realIndex = parseInt(key, 10);\n          const j = parseInt(group.getAttribute(\"data:dlJ\") || \"\", 10);\n          const fmtOpts = __spreadProps(__spreadValues({}, w2), {\n            seriesIndex: realIndex,\n            dataPointIndex: isFinite(j) ? j : 0,\n            w: w2\n          });\n          const format = (v2) => {\n            const rounded = Number(v2.toFixed(dec));\n            let out = rounded;\n            if (typeof formatter === \"function\") {\n              try {\n                out = formatter(rounded, fmtOpts);\n              } catch (_) {\n                out = rounded;\n              }\n            }\n            return String(out);\n          };\n          rafTween(\n            w2,\n            duration,\n            ease,\n            (eased) => {\n              writeLabel(textEl, format(from + (newVal - from) * eased));\n            },\n            () => {\n              writeLabel(textEl, format(newVal));\n            }\n          );\n        }\n      }\n    });\n  } catch (_) {\n  }\n}\nclass Series {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {{ toggleDataSeries?: Function, revertDefaultAxisMinMax?: Function, updateSeries?: Function }} [callbacks]\n   */\n  constructor(w2, {\n    toggleDataSeries = void 0,\n    revertDefaultAxisMinMax = void 0,\n    updateSeries = void 0\n  } = {}) {\n    this.w = w2;\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 w2 = this.w;\n    if (w2.globals.cachedSelectors) {\n      delete w2.globals.cachedSelectors.allSeriesEls;\n      delete w2.globals.cachedSelectors.highlightSeriesEls;\n    }\n  }\n  getAllSeriesEls() {\n    const w2 = this.w;\n    const cacheKey = \"allSeriesEls\";\n    if (!w2.globals.cachedSelectors[cacheKey]) {\n      w2.globals.cachedSelectors[cacheKey] = /** @type {any} */\n      w2.dom.baseEl.getElementsByClassName(`apexcharts-series`);\n    }\n    return w2.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(w2, 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(w2.globals.collapsedSeries);\n    iterateOnAllCollapsedSeries(w2.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  /**\n   * Cheap pre-update reset for the data-replacement paths (updateSeries /\n   * appendSeries). Clears the same bookkeeping resetSeries() clears (series\n   * cache, previous paths, collapsed-series state) WITHOUT restoring\n   * config.series from the initialSeries snapshot: the caller is about to\n   * replace the series anyway (parseData assigns config.series = newSeries),\n   * so materializing and cloning the snapshot per update is pure waste (two\n   * O(n) deep clones per streaming tick at 50k points).\n   */\n  prepareDataUpdate() {\n    const w2 = this.w;\n    this.clearSeriesCache();\n    w2.globals.previousPaths = [];\n    w2.globals.collapsedSeries = [];\n    w2.globals.ancillaryCollapsedSeries = [];\n    w2.globals.collapsedSeriesIndices = [];\n    w2.globals.ancillaryCollapsedSeriesIndices = [];\n  }\n  resetSeries(shouldUpdateChart = true, shouldResetZoom = true, shouldResetCollapsed = true) {\n    var _a, _b;\n    const w2 = this.w;\n    this.clearSeriesCache();\n    let series = Utils$1.clone(w2.globals.initialSeries);\n    if (!Array.isArray(series)) {\n      series = Utils$1.clone(w2.config.series) || [];\n    }\n    w2.globals.previousPaths = [];\n    if (shouldResetCollapsed) {\n      w2.globals.collapsedSeries = [];\n      w2.globals.ancillaryCollapsedSeries = [];\n      w2.globals.collapsedSeriesIndices = [];\n      w2.globals.ancillaryCollapsedSeriesIndices = [];\n    } else {\n      series = this.emptyCollapsedSeries(series);\n    }\n    w2.config.series = series;\n    if (shouldUpdateChart) {\n      if (shouldResetZoom) {\n        w2.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        w2.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  emptyCollapsedSeries(series) {\n    const w2 = this.w;\n    if (!Array.isArray(series)) return series;\n    for (let i2 = 0; i2 < series.length; i2++) {\n      if (w2.globals.collapsedSeriesIndices.indexOf(i2) > -1) {\n        if (series[i2] && typeof series[i2] === \"object\") {\n          series[i2].data = [];\n        } else {\n          series[i2] = 0;\n        }\n      }\n    }\n    return series;\n  }\n  /**\n   * Series display names for the CURRENT `w.config` (post-merge), derived the\n   * same way the parser does: an object series' own `name`, else the matching\n   * `labels` entry (non-axis / pie / unit), else a generated `series-N`.\n   * @returns {string[]}\n   */\n  _deriveSeriesNames() {\n    const w2 = this.w;\n    const series = w2.config.series || [];\n    const labels = w2.config.labels || [];\n    return series.map((s2, i2) => {\n      if (s2 && typeof s2 === \"object\" && s2.name != null) return String(s2.name);\n      return labels[i2] != null ? String(labels[i2]) : `series-${i2 + 1}`;\n    });\n  }\n  /**\n   * Re-apply legend-hidden (collapsed) series to a freshly-updated\n   * `w.config.series`, matching BY CATEGORY NAME rather than index. This keeps a\n   * hide alive across a data update that reorders or regroups categories - most\n   * visibly a storyboard beat that supplies new series each scroll:\n   *   - a category still present stays hidden (at its possibly-new index);\n   *   - a category the update dropped/regrouped away is un-hidden (it no longer\n   *     exists, so it must reappear as part of the new grouping).\n   * Records without a stored name (older collapses) fall back to their index.\n   */\n  reconcileCollapsedByName() {\n    const w2 = this.w;\n    const gl = w2.globals;\n    const newNames = this._deriveSeriesNames();\n    const reconcile = (records) => {\n      const nextRecords = [];\n      const nextIndices = [];\n      records.forEach((rec) => {\n        const j = rec && rec.name != null ? newNames.indexOf(rec.name) : rec.index;\n        if (j == null || j < 0 || j >= w2.config.series.length) return;\n        const s2 = (\n          /** @type {any} */\n          w2.config.series[j]\n        );\n        rec.index = j;\n        rec.data = gl.axisCharts ? s2 && s2.data ? s2.data.slice() : [] : s2;\n        nextRecords.push(rec);\n        nextIndices.push(j);\n      });\n      return { records: nextRecords, indices: nextIndices };\n    };\n    const main = reconcile(gl.collapsedSeries);\n    gl.collapsedSeries = main.records;\n    gl.collapsedSeriesIndices = main.indices;\n    const anc = reconcile(gl.ancillaryCollapsedSeries);\n    gl.ancillaryCollapsedSeries = anc.records;\n    gl.ancillaryCollapsedSeriesIndices = anc.indices;\n    gl.allSeriesCollapsed = gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === w2.config.series.length;\n    this.emptyCollapsedSeries(w2.config.series);\n  }\n  /**\n   * @param {string} seriesName\n   */\n  /**\n   * Bridge SVG series-dim state to the canvas renderer: SVG opacity classes\n   * (legend-mouseover-inactive) don't touch the painted canvas series layer, so\n   * repaint it with a matching per-series opacity. No-op unless the canvas\n   * renderer is active. The renderer is mirrored on globals by RendererController\n   * (Series has no ctx handle).\n   * @param {{active:number, opacity:number}|null} dim\n   */\n  canvasRestyle(dim) {\n    const r2 = this.w.globals.activeRenderer;\n    if (r2 && r2.kind === \"canvas\" && typeof r2.restyle === \"function\") {\n      r2.restyle(dim);\n    }\n  }\n  /**\n   * @param {string} seriesName\n   */\n  highlightSeries(seriesName) {\n    var _a;\n    const w2 = 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 = w2.globals.cachedSelectors[cacheKey];\n    if (!allSeriesEls) {\n      allSeriesEls = w2.dom.baseEl.querySelectorAll(\n        `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n      );\n      w2.globals.cachedSelectors[cacheKey] = allSeriesEls;\n    }\n    let seriesEl = null;\n    let dataLabelEl = null;\n    let yaxisEl = null;\n    if (w2.globals.axisCharts || w2.config.chart.type === \"radialBar\") {\n      if (w2.globals.axisCharts) {\n        seriesEl = w2.dom.baseEl.querySelector(\n          `.apexcharts-series[data\\\\:realIndex='${realIndex}']`\n        );\n        dataLabelEl = w2.dom.baseEl.querySelector(\n          `.apexcharts-datalabels[data\\\\:realIndex='${realIndex}']`\n        );\n        const yaxisIndex = w2.globals.seriesYAxisReverseMap[realIndex];\n        yaxisEl = w2.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${yaxisIndex}']`\n        );\n      } else {\n        seriesEl = w2.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${realIndex + 1}']`\n        );\n      }\n    } else {\n      seriesEl = w2.dom.baseEl.querySelector(\n        `.apexcharts-series[rel='${realIndex + 1}'] path`\n      );\n    }\n    for (let se2 = 0; se2 < allSeriesEls.length; se2++) {\n      const serEl = (\n        /** @type {Element} */\n        allSeriesEls[se2]\n      );\n      serEl.classList.add(this.legendInactiveClass);\n    }\n    if (seriesEl) {\n      if (!w2.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 se2 = 0; se2 < allSeriesEls.length; se2++) {\n        const serEl = (\n          /** @type {Element} */\n          allSeriesEls[se2]\n        );\n        serEl.classList.remove(this.legendInactiveClass);\n      }\n    }\n    this.canvasRestyle(\n      seriesEl && !Number.isNaN(realIndex) ? { active: realIndex, opacity: 0.2 } : null\n    );\n  }\n  /**\n   * @param {Event} e\n   * @param {any} targetElement\n   */\n  toggleSeriesOnHover(e2, targetElement) {\n    const w2 = this.w;\n    if (!targetElement) targetElement = e2.target;\n    const allSeriesEls = w2.dom.baseEl.querySelectorAll(\n      `.apexcharts-series, .apexcharts-datalabels, .apexcharts-yaxis`\n    );\n    if (e2.type === \"mousemove\") {\n      const realIndex = parseInt(targetElement.getAttribute(\"rel\"), 10) - 1;\n      this.highlightSeries(w2.seriesData.seriesNames[realIndex]);\n    } else if (e2.type === \"mouseout\") {\n      for (let se2 = 0; se2 < allSeriesEls.length; se2++) {\n        allSeriesEls[se2].classList.remove(this.legendInactiveClass);\n      }\n      this.canvasRestyle(null);\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 w2 = this.w;\n    const allHeatMapElements = w2.dom.baseEl.getElementsByClassName(\n      \"apexcharts-heatmap-rect\"\n    );\n    const toggleAllInactive = (op) => {\n      for (let i2 = 0; i2 < allHeatMapElements.length; i2++) {\n        const classList = (\n          /** @type {any} */\n          allHeatMapElements[i2].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 = w2.config.plotOptions.heatmap.colorScale.ranges;\n    const range = ranges && ranges[rangeIndex];\n    if (!range) return;\n    toggleAllInactive(\"add\");\n    for (let i2 = 0; i2 < allHeatMapElements.length; i2++) {\n      const val = Number(allHeatMapElements[i2].getAttribute(\"val\"));\n      if (val >= range.from && val <= range.to) {\n        allHeatMapElements[i2].classList.remove(this.legendInactiveClass);\n      }\n    }\n  }\n  /**\n   * @param {string[]} chartTypes\n   */\n  getActiveConfigSeriesIndex(order = \"asc\", chartTypes = []) {\n    const w2 = this.w;\n    let activeIndex = 0;\n    if (w2.config.series.length > 1) {\n      const activeSeriesIndex = w2.config.series.map((s2, index) => {\n        const checkChartType = () => {\n          if (w2.globals.comboCharts) {\n            return chartTypes.length === 0 || chartTypes.length && chartTypes.indexOf(\n              /** @type {Record<string,any>} */\n              w2.config.series[index].type\n            ) > -1;\n          }\n          return true;\n        };\n        const hasData = (\n          /** @type {any} */\n          s2.data && /** @type {any} */\n          s2.data.length > 0 && w2.globals.collapsedSeriesIndices.indexOf(index) === -1\n        );\n        return hasData && checkChartType() ? index : -1;\n      });\n      for (let a2 = order === \"asc\" ? 0 : activeSeriesIndex.length - 1; order === \"asc\" ? a2 < activeSeriesIndex.length : a2 >= 0; order === \"asc\" ? a2++ : a2--) {\n        if (activeSeriesIndex[a2] !== -1) {\n          activeIndex = activeSeriesIndex[a2];\n          break;\n        }\n      }\n    }\n    return activeIndex;\n  }\n  /**\n   * The highest active series index inside each series group, as an array\n   * parallel to `w.labelData.seriesGroups`. Entries are -1 for a group whose\n   * every series is collapsed or empty.\n   *\n   * Same activity test as `getActiveConfigSeriesIndex` (has data and is not\n   * legend-collapsed), applied per group so grouped stacked bars can ask which\n   * series caps each individual stack rather than the chart as a whole.\n   * @param {string[]} chartTypes\n   * @returns {number[]}\n   */\n  getActiveConfigSeriesIndexByGroup(chartTypes = []) {\n    const w2 = this.w;\n    const groups = w2.labelData.seriesGroups || [];\n    return groups.map((group) => {\n      let last = -1;\n      w2.config.series.forEach((s2, i2) => {\n        if (group.indexOf(w2.seriesData.seriesNames[i2]) === -1) return;\n        if (w2.globals.comboCharts && chartTypes.length && chartTypes.indexOf(s2.type) === -1) {\n          return;\n        }\n        const hasData = s2.data && s2.data.length > 0 && w2.globals.collapsedSeriesIndices.indexOf(i2) === -1;\n        if (hasData) last = i2;\n      });\n      return last;\n    });\n  }\n  getBarSeriesIndices() {\n    const w2 = this.w;\n    if (w2.globals.comboCharts) {\n      return this.w.config.series.map((s2, i2) => {\n        return s2.type === \"bar\" || s2.type === \"column\" ? i2 : -1;\n      }).filter((i2) => {\n        return i2 !== -1;\n      });\n    }\n    return this.w.config.series.map((s2, i2) => {\n      return i2;\n    });\n  }\n  getPreviousPaths() {\n    var _a, _b, _c, _d;\n    const w2 = this.w;\n    captureStreamFrame(w2);\n    captureAxisChrome(w2);\n    captureDataLabels(w2);\n    if (!w2.globals.axisCharts) {\n      w2.globals.previousPaths = w2.seriesData.series;\n      return;\n    }\n    if (!Utils$1.elementExists(w2.dom.baseEl)) {\n      w2.globals.previousPaths = [];\n      return;\n    }\n    w2.globals.previousPaths = [];\n    function pushPaths(seriesEls, i2, type) {\n      const paths = seriesEls[i2].childNodes;\n      const dArr = {\n        type,\n        paths: (\n          /** @type {any[]} */\n          []\n        ),\n        realIndex: seriesEls[i2].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({\n            d,\n            key: paths[j].getAttribute(\"data:pathKey\"),\n            fill: paths[j].getAttribute(\"fill\")\n          });\n        }\n      }\n      w2.globals.previousPaths.push(dArr);\n    }\n    const getPaths = (chartType) => {\n      return w2.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 p2 = 0; p2 < paths.length; p2++) {\n        pushPaths(paths, p2, type);\n      }\n    });\n    const heatTreeSeries = w2.dom.baseEl.querySelectorAll(\n      `.apexcharts-${w2.config.chart.type} .apexcharts-series`\n    );\n    if (heatTreeSeries.length > 0) {\n      for (let h2 = 0; h2 < heatTreeSeries.length; h2++) {\n        const seriesEls = w2.dom.baseEl.querySelectorAll(\n          `.apexcharts-${w2.config.chart.type} .apexcharts-series[data\\\\:realIndex='${h2}'] rect`\n        );\n        const dArr = [];\n        for (let i2 = 0; i2 < seriesEls.length; i2++) {\n          const getAttr = (x) => {\n            return (\n              /** @type {Element} */\n              seriesEls[i2].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[i2].getAttribute(\"color\")\n          });\n        }\n        w2.globals.previousPaths.push(dArr);\n      }\n    }\n  }\n  clearPreviousPaths() {\n    const w2 = this.w;\n    w2.globals.previousPaths = [];\n    w2.globals.allSeriesCollapsed = false;\n  }\n  handleNoData() {\n    const w2 = this.w;\n    const me = this;\n    const noDataOpts = w2.config.noData;\n    const graphics = new Graphics(me.w);\n    let x = w2.globals.svgWidth / 2;\n    let y = w2.globals.svgHeight / 2;\n    let textAnchor = \"middle\";\n    w2.globals.noData = true;\n    w2.globals.animationEnded = true;\n    if (noDataOpts.align === \"left\") {\n      x = 10;\n      textAnchor = \"start\";\n    } else if (noDataOpts.align === \"right\") {\n      x = w2.globals.svgWidth - 10;\n      textAnchor = \"end\";\n    }\n    if (noDataOpts.verticalAlign === \"top\") {\n      y = 50;\n    } else if (noDataOpts.verticalAlign === \"bottom\") {\n      y = w2.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      w2.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 w2 = this.w;\n    for (let sl = 0; sl < series.length; sl++) {\n      if (series[sl].length === 0) {\n        for (let j = 0; j < series[w2.globals.maxValsInArrayIndex].length; j++) {\n          series[sl].push(0);\n        }\n      }\n    }\n    return series;\n  }\n  hasAllSeriesEqualX() {\n    let equalLen = true;\n    const w2 = this.w;\n    const filteredSerX = this.filteredSeriesX();\n    for (let i2 = 0; i2 < filteredSerX.length - 1; i2++) {\n      if (filteredSerX[i2][0] !== filteredSerX[i2 + 1][0]) {\n        equalLen = false;\n        break;\n      }\n    }\n    w2.globals.allSeriesHasEqualX = equalLen;\n    return equalLen;\n  }\n  filteredSeriesX() {\n    const w2 = this.w;\n    const filteredSeriesX = w2.seriesData.seriesX.map(\n      (ser) => ser.length > 0 ? ser : []\n    );\n    return filteredSeriesX;\n  }\n}\nconst TOKEN_MAP = {\n  accent: \"--apx-accent\",\n  fore: \"--apx-fore\",\n  grid: \"--apx-grid\",\n  surface: \"--apx-surface\"\n};\nconst MAX_SERIES_TOKENS = 24;\nfunction readTokens(w2) {\n  if (!Environment.isBrowser()) return {};\n  const el = w2.dom && (w2.dom.elWrap || w2.dom.baseEl) || null;\n  if (!el) return {};\n  const cs = BrowserAPIs.getComputedStyle(el);\n  if (!cs || typeof /** @type {any} */\n  cs.getPropertyValue !== \"function\") {\n    return {};\n  }\n  const read = (name2) => {\n    const v2 = (\n      /** @type {any} */\n      cs.getPropertyValue(name2)\n    );\n    return v2 ? String(v2).trim() : \"\";\n  };\n  const out = {};\n  for (const key in TOKEN_MAP) {\n    const v2 = read(\n      /** @type {any} */\n      TOKEN_MAP[key]\n    );\n    if (v2) out[key] = v2;\n  }\n  const series = [];\n  for (let i2 = 1; i2 <= MAX_SERIES_TOKENS; i2++) {\n    const v2 = read(`--apx-series-${i2}`);\n    if (!v2) break;\n    series.push(v2);\n  }\n  if (series.length) out.series = series;\n  return out;\n}\nconst THEME_KEY = \"__apexcharts_themes__\";\nif (!/** @type {any} */\nglobalThis[THEME_KEY]) {\n  globalThis[THEME_KEY] = {};\n}\nfunction getThemes() {\n  return (\n    /** @type {any} */\n    globalThis[THEME_KEY]\n  );\n}\nfunction registerTheme(name2, def) {\n  if (!name2 || typeof name2 !== \"string\") {\n    console.warn(\"ApexCharts: registerTheme requires a non-empty name.\");\n    return;\n  }\n  if (def != null && (typeof def !== \"object\" || Array.isArray(def))) {\n    console.warn(\n      `ApexCharts: registerTheme(\"${name2}\") expects an object like { mode, palette, tokens, monochrome, accessibility }.`\n    );\n    return;\n  }\n  getThemes()[name2] = def || {};\n}\nfunction getTheme(name2) {\n  if (!name2) return null;\n  return getThemes()[name2] || null;\n}\nfunction unregisterTheme(name2) {\n  if (!name2) return;\n  delete getThemes()[name2];\n}\nconst DEFAULT_FORECOLOR_LIGHT = \"#373d3f\";\nconst DEFAULT_FORECOLOR_DARK = \"#f6f7f8\";\nconst DEFAULT_AXIS_GRID = \"#e0e0e0\";\nclass Theme {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\n    this.colors = [];\n    this.isColorFn = false;\n    this.isHeatmapDistributed = this.checkHeatmapDistributed();\n    this.isBarDistributed = this.checkBarDistributed();\n    this._tokens = {};\n    this._namedTheme = null;\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 w2 = this.w;\n    const utils = new Utils$1();\n    this._namedTheme = getTheme(w2.config.theme.name);\n    this._applyNamedThemeMode();\n    w2.dom.elWrap.classList.add(\n      `apexcharts-theme-${w2.config.theme.mode || \"light\"}`\n    );\n    this._applyModeDefaults();\n    this._tokens = this._resolveTokens();\n    this.applyTokenChrome(this._tokens);\n    const colorBlindMode = (_a = w2.config.theme.accessibility) == null ? void 0 : _a.colorBlindMode;\n    if (colorBlindMode) {\n      w2.globals.colors = this.getColorBlindColors(colorBlindMode);\n      this.applySeriesColors(w2.seriesData.seriesColors, w2.globals.colors);\n      const defaultColors2 = w2.globals.colors.slice();\n      this.pushExtraColors(w2.globals.colors);\n      this.applyColorTypes([\"fill\", \"stroke\"], defaultColors2);\n      this.applyDataLabelsColors(defaultColors2);\n      this.applyRadarPolygonsColors();\n      this.applyMarkersColors(defaultColors2);\n      if (colorBlindMode === \"highContrast\") {\n        w2.dom.elWrap.classList.add(\"apexcharts-high-contrast\");\n      }\n      return;\n    }\n    const configColors = [...w2.config.colors || w2.config.fill.colors || []];\n    w2.globals.colors = this.getColors(configColors);\n    this.applySeriesColors(w2.seriesData.seriesColors, w2.globals.colors);\n    if (w2.config.theme.monochrome.enabled) {\n      w2.globals.colors = this.getMonochromeColors(\n        w2.config.theme.monochrome,\n        w2.seriesData.series,\n        utils\n      );\n    }\n    const defaultColors = w2.globals.colors.slice();\n    this.pushExtraColors(w2.globals.colors);\n    this.applyColorTypes([\"fill\", \"stroke\"], defaultColors);\n    this.applyDataLabelsColors(defaultColors);\n    this.applyRadarPolygonsColors();\n    this.applyMarkersColors(defaultColors);\n  }\n  /**\n   * Facet (#13): normalize the mode's concrete defaults (foreColor + palette +\n   * tooltip theme) at render time. Only overwrites a value still at its\n   * opposite-mode default sentinel, so an explicit user value or a value\n   * already normalized by checkForDarkTheme/updateThemeOptions is untouched.\n   */\n  _applyModeDefaults() {\n    const w2 = this.w;\n    const mode = w2.config.theme.mode;\n    if (mode === \"dark\") {\n      if (w2.config.chart.foreColor === DEFAULT_FORECOLOR_LIGHT) {\n        w2.config.chart.foreColor = DEFAULT_FORECOLOR_DARK;\n      }\n      if (w2.config.theme.palette === \"palette1\") {\n        w2.config.theme.palette = \"palette4\";\n      }\n      if (w2.config.tooltip && w2.config.tooltip.theme !== \"light\") {\n        w2.config.tooltip.theme = \"dark\";\n      }\n    } else if (mode === \"light\") {\n      if (w2.config.chart.foreColor === DEFAULT_FORECOLOR_DARK) {\n        w2.config.chart.foreColor = DEFAULT_FORECOLOR_LIGHT;\n      }\n      if (w2.config.theme.palette === \"palette4\") {\n        w2.config.theme.palette = \"palette1\";\n      }\n    }\n  }\n  /**\n   * Facet (#13): apply a registered named theme's mode / accessibility /\n   * monochrome, each only when the user (or the OS watcher) has not set it, so\n   * explicit config and `follow:'os'` both win over the named theme.\n   */\n  _applyNamedThemeMode() {\n    const named = this._namedTheme;\n    if (!named) return;\n    const theme = this.w.config.theme;\n    if (named.mode && !theme.mode) {\n      theme.mode = named.mode;\n    }\n    if (named.accessibility && named.accessibility.colorBlindMode && !(theme.accessibility && theme.accessibility.colorBlindMode)) {\n      theme.accessibility = theme.accessibility || {};\n      theme.accessibility.colorBlindMode = named.accessibility.colorBlindMode;\n    }\n    if (named.monochrome && named.monochrome.enabled && !theme.monochrome.enabled) {\n      theme.monochrome = __spreadValues(__spreadValues({}, theme.monochrome), named.monochrome);\n    }\n  }\n  /**\n   * Facet (#13): the effective token set. CSS `--apx-*` tokens (when enabled)\n   * layer over the named theme's `tokens`, so a page-level token overrides a\n   * registered brand default.\n   * @returns {{accent?:string, fore?:string, grid?:string, surface?:string, series?:string[]}}\n   */\n  _resolveTokens() {\n    const named = this._namedTheme && this._namedTheme.tokens || {};\n    const css = this._shouldUseTokens() ? readTokens(this.w) : {};\n    return __spreadValues(__spreadValues({}, named), css);\n  }\n  /**\n   * Facet (#13): tokens are on unless explicitly disabled (`theme.tokens:false`).\n   * `true` is the default (the legacy `'auto'` value is accepted and means the\n   * same); `readTokens` returns only the tokens actually present, so absence\n   * is a no-op.\n   * @returns {boolean}\n   */\n  _shouldUseTokens() {\n    return this.w.config.theme.tokens !== false;\n  }\n  /**\n   * Facet (#13): overwrite chrome defaults with `--apx-*` tokens, but only where\n   * the value still equals its built-in default (so explicit config wins).\n   * @param {{fore?:string, grid?:string, surface?:string}} tokens\n   */\n  applyTokenChrome(tokens) {\n    if (!tokens) return;\n    const w2 = this.w;\n    if (tokens.fore && (w2.config.chart.foreColor === DEFAULT_FORECOLOR_LIGHT || w2.config.chart.foreColor === DEFAULT_FORECOLOR_DARK)) {\n      w2.config.chart.foreColor = tokens.fore;\n    }\n    if (tokens.grid) {\n      if (w2.config.grid.borderColor === DEFAULT_AXIS_GRID) {\n        w2.config.grid.borderColor = tokens.grid;\n      }\n      const applyAxis = (axis) => {\n        if (!axis) return;\n        if (axis.axisBorder && axis.axisBorder.color === DEFAULT_AXIS_GRID) {\n          axis.axisBorder.color = tokens.grid;\n        }\n        if (axis.axisTicks && axis.axisTicks.color === DEFAULT_AXIS_GRID) {\n          axis.axisTicks.color = tokens.grid;\n        }\n      };\n      applyAxis(w2.config.xaxis);\n      if (Array.isArray(w2.config.yaxis)) {\n        w2.config.yaxis.forEach(applyAxis);\n      } else {\n        applyAxis(w2.config.yaxis);\n      }\n    }\n    const appliedSurface = w2.globals.tokenSurface;\n    const currentBg = w2.config.chart.background;\n    const isOurs = !currentBg || currentBg === appliedSurface;\n    if (tokens.surface) {\n      if (isOurs) {\n        w2.config.chart.background = tokens.surface;\n        w2.globals.tokenSurface = tokens.surface;\n        const paperNode = w2.dom.Paper && w2.dom.Paper.node;\n        if (paperNode && paperNode.style) {\n          paperNode.style.background = tokens.surface;\n        }\n      }\n    } else if (appliedSurface && currentBg === appliedSurface) {\n      w2.config.chart.background = \"\";\n      w2.globals.tokenSurface = void 0;\n      const paperNode = w2.dom.Paper && w2.dom.Paper.node;\n      if (paperNode && paperNode.style) {\n        paperNode.style.background = \"\";\n      }\n    }\n  }\n  /**\n   * @param {any[]} configColors\n   */\n  getColors(configColors) {\n    const w2 = 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 w2.config.series.map((s2, i2) => {\n        const c2 = configColors[i2] || configColors[0];\n        return typeof c2 === \"function\" ? c2({\n          value: w2.globals.axisCharts ? w2.seriesData.series[i2][0] || 0 : w2.seriesData.series[i2],\n          seriesIndex: i2,\n          dataPointIndex: i2,\n          w: this.w\n        }) : c2;\n      });\n    }\n    return configColors;\n  }\n  /**\n   * @param {any[]} seriesColors\n   * @param {any[]} globalsColors\n   */\n  applySeriesColors(seriesColors, globalsColors) {\n    seriesColors.forEach((c2, i2) => {\n      if (c2) {\n        globalsColors[i2] = c2;\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 w2 = this.w;\n    colorTypes.forEach((c2) => {\n      w2.globals[c2].colors = w2.config[c2].colors === void 0 ? this.isColorFn ? w2.config.colors : defaultColors : w2.config[c2].colors.slice();\n      this.pushExtraColors(\n        /** @type {Record<string,any>} */\n        w2.globals[c2].colors\n      );\n    });\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyDataLabelsColors(defaultColors) {\n    const w2 = this.w;\n    w2.globals.dataLabels.style.colors = w2.config.dataLabels.style.colors === void 0 ? defaultColors : w2.config.dataLabels.style.colors.slice();\n    this.pushExtraColors(w2.globals.dataLabels.style.colors, 50);\n  }\n  applyRadarPolygonsColors() {\n    const w2 = this.w;\n    w2.globals.radarPolygons.fill.colors = w2.config.plotOptions.radar.polygons.fill.colors === void 0 ? [w2.config.theme.mode === \"dark\" ? \"#343A3F\" : \"none\"] : w2.config.plotOptions.radar.polygons.fill.colors.slice();\n    this.pushExtraColors(w2.globals.radarPolygons.fill.colors, 20);\n  }\n  /**\n   * @param {string[]} defaultColors\n   */\n  applyMarkersColors(defaultColors) {\n    const w2 = this.w;\n    w2.globals.markers.colors = w2.config.markers.colors === void 0 ? defaultColors : w2.config.markers.colors.slice();\n    this.pushExtraColors(w2.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 w2 = this.w;\n    let len = length || w2.seriesData.series.length;\n    if (distributed === null) {\n      distributed = this.isBarDistributed || this.isHeatmapDistributed || w2.config.chart.type === \"heatmap\" && w2.config.plotOptions.heatmap && w2.config.plotOptions.heatmap.colorScale.inverse;\n    }\n    if (distributed && w2.seriesData.series.length) {\n      len = w2.seriesData.series[w2.globals.maxValsInArrayIndex].length * w2.seriesData.series.length;\n    }\n    if (colorSeries.length < len) {\n      const diff = len - colorSeries.length;\n      for (let i2 = 0; i2 < diff; i2++) {\n        colorSeries.push(colorSeries[i2]);\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    const builtin = (\n      /** @type {Record<string,any>} */\n      palettes[palette] || palettes.palette1\n    );\n    const tokens = this._tokens || {};\n    if (Array.isArray(tokens.series) && tokens.series.length) {\n      return tokens.series.slice();\n    }\n    if (tokens.accent) {\n      return [tokens.accent, ...builtin];\n    }\n    const named = this._namedTheme;\n    if (named && Array.isArray(named.palette) && named.palette.length) {\n      return named.palette.slice();\n    }\n    return builtin;\n  }\n}\nclass TitleSubtitle {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\n  }\n  draw() {\n    this.drawTitleSubtitle(\"title\");\n    this.drawTitleSubtitle(\"subtitle\");\n  }\n  /**\n   * @param {'title' | 'subtitle'} type\n   */\n  drawTitleSubtitle(type) {\n    const w2 = this.w;\n    const tsConfig = type === \"title\" ? w2.config.title : w2.config.subtitle;\n    let x = w2.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 = w2.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      w2.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 w2 = this.w;\n    let width = 0;\n    let height = 0;\n    const floating = type === \"title\" ? w2.config.title.floating : w2.config.subtitle.floating;\n    const el = w2.dom.baseEl.querySelector(`.apexcharts-${type}-text`);\n    if (el !== null && !floating) {\n      const coord = el.getBoundingClientRect();\n      width = coord.width;\n      height = w2.globals.axisCharts ? coord.height + 5 : coord.height;\n    }\n    return {\n      width,\n      height\n    };\n  }\n  getLegendsRect() {\n    const w2 = this.w;\n    const elLegendWrap = w2.dom.elLegendWrap;\n    if (!w2.config.legend.height && (w2.config.legend.position === \"top\" || w2.config.legend.position === \"bottom\")) {\n      if (elLegendWrap)\n        elLegendWrap.style.maxHeight = w2.globals.svgHeight / 2 + \"px\";\n    }\n    const lgRect = (\n      /** @type {any} */\n      Object.assign({}, Utils$1.getBoundingClientRect(elLegendWrap))\n    );\n    if (elLegendWrap !== null && !w2.config.legend.floating && w2.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 (w2.config.legend.position === \"left\" || w2.config.legend.position === \"right\") {\n      if (this.dCtx.lgRect.width * 1.5 > w2.globals.svgWidth) {\n        this.dCtx.lgRect.width = w2.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 w2 = this.w;\n    const allLabels = [];\n    w2.config.series.forEach(\n      (serie, seriesIndex) => {\n        serie.data.forEach(\n          (datum, dataPointIndex) => {\n            const getText = (v2) => {\n              return w2.config.dataLabels.formatter(v2, {\n                seriesIndex,\n                dataPointIndex,\n                w: w2\n              });\n            };\n            const labelText = getText(\n              w2.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 = w2.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 w2 = this.w;\n    let valArr = val;\n    if (w2.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  /**\n   * Vertical space a sparkline has to keep free inside its SVG so the series\n   * stroke isn't clipped at the top / bottom edge.\n   *\n   * A stroke is centred on its path, so half of it hangs outside the plot\n   * wherever the path runs along an edge. Reserving that half unconditionally\n   * lifts the whole plot away from the SVG edges even when nothing is drawn\n   * there, which shows up as a strip of empty space under an area fill or a\n   * bar base (#5137). So reserve only what the ink can't absorb itself: where\n   * the stroke traces the data points, the distance between the extreme datum\n   * and the axis extreme already swallows part or all of the overhang. Fills\n   * need nothing: area fills are drawn unstroked (see Line.js renderPaths).\n   *\n   * @returns {{ top: number, bottom: number }}\n   **/\n  getSparklineStrokeInset() {\n    const w2 = this.w;\n    const maxStrokeWidth = Array.isArray(w2.config.stroke.width) ? Math.max(...w2.config.stroke.width) : w2.config.stroke.width;\n    const half = maxStrokeWidth / 2;\n    if (!w2.config.stroke.show || !(half > 0)) {\n      return { top: 0, bottom: 0 };\n    }\n    const yRange = w2.globals.maxY - w2.globals.minY;\n    const extremes = this._getSeriesYExtremes();\n    if (!this._strokeTracesDataPoints() || !(yRange > 0) || !extremes) {\n      return { top: half, bottom: half };\n    }\n    const plotHeight = Math.max(w2.globals.svgHeight - maxStrokeWidth, 0);\n    const roomAbove = plotHeight * (w2.globals.maxY - extremes.max) / yRange;\n    const roomBelow = plotHeight * (extremes.min - w2.globals.minY) / yRange;\n    return {\n      top: Math.min(Math.max(half - roomAbove, 0), half),\n      bottom: Math.min(Math.max(half - roomBelow, 0), half)\n    };\n  }\n  /**\n   * Whether every drawn series is one whose stroke follows the data points, so\n   * the extreme datum marks the outermost ink. False for anything that strokes\n   * to the baseline or fills the plot (bar, heatmap, ...) and for stacked\n   * charts, where the ink is the cumulative total rather than the raw values.\n   * @returns {boolean}\n   **/\n  _strokeTracesDataPoints() {\n    const w2 = this.w;\n    if (!w2.globals.axisCharts || w2.config.chart.stacked) return false;\n    const tracesPoints = [\"line\", \"area\", \"scatter\"];\n    return (\n      /** @type {any[]} */\n      w2.config.series.every(\n        (s2) => tracesPoints.includes(s2.type || w2.config.chart.type)\n      )\n    );\n  }\n  /**\n   * Min / max across every plotted y value, or null when nothing is plottable.\n   * @returns {{ min: number, max: number } | null}\n   **/\n  _getSeriesYExtremes() {\n    let min = Infinity;\n    let max = -Infinity;\n    this.w.seriesData.series.forEach((data) => {\n      if (!Array.isArray(data)) return;\n      data.forEach((val) => {\n        if (!Number.isFinite(val)) return;\n        if (val < min) min = val;\n        if (val > max) max = val;\n      });\n    });\n    return min === Infinity ? null : { min, max };\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 w2 = this.w;\n    let xaxisLabels = w2.labelData.labels.slice();\n    if (w2.config.xaxis.convertedCatToNumeric && xaxisLabels.length === 0) {\n      xaxisLabels = w2.labelData.categoryLabels;\n    }\n    let rect;\n    if (w2.labelData.timescaleLabels.length > 0) {\n      const coords = this.getxAxisTimeScaleLabelsCoords();\n      rect = {\n        width: coords.width,\n        height: coords.height\n      };\n      w2.layout.rotateXLabels = false;\n    } else {\n      this.dCtx.lgWidthForSideLegends = (w2.config.legend.position === \"left\" || w2.config.legend.position === \"right\") && !w2.config.legend.floating ? this.dCtx.lgRect.width : 0;\n      const xlbFormatter = w2.formatters.xLabelFormatter;\n      let val = Utils$1.getLargestStringFromArr(xaxisLabels);\n      let valArr = this.dCtx.dimHelpers.getLargestStringFromMultiArr(\n        val,\n        xaxisLabels\n      );\n      if (w2.globals.isBarHorizontal) {\n        val = w2.globals.yAxisScale[0].result.reduce(\n          (a2, b2) => a2.length > b2.length ? a2 : b2,\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: w2\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: w2\n        }\n      );\n      if (w2.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        w2.config.xaxis.labels.style.fontSize\n      );\n      let xArrLabelrect = xLabelrect;\n      if (val !== valArr) {\n        xArrLabelrect = graphics.getTextRects(\n          valArr,\n          w2.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 > w2.globals.svgWidth - this.dCtx.lgWidthForSideLegends - this.dCtx.yAxisWidth - this.dCtx.gridPad.left - this.dCtx.gridPad.right && w2.config.xaxis.labels.rotate !== 0 || w2.config.xaxis.labels.rotateAlways) {\n        if (!w2.globals.isBarHorizontal) {\n          w2.layout.rotateXLabels = true;\n          const getRotatedTextRects = (text) => {\n            return graphics.getTextRects(\n              text,\n              w2.config.xaxis.labels.style.fontSize,\n              w2.config.xaxis.labels.style.fontFamily,\n              `rotate(${w2.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        w2.layout.rotateXLabels = false;\n      }\n    }\n    if (!w2.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 w2 = this.w;\n    if (!w2.labelData.hasXaxisGroups) {\n      return { width: 0, height: 0 };\n    }\n    const fontSize = ((_a = w2.config.xaxis.group.style) == null ? void 0 : _a.fontSize) || w2.config.xaxis.labels.style.fontSize;\n    const xaxisLabels = w2.labelData.groups.map(\n      (g2) => g2.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 (!w2.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 w2 = this.w;\n    let width = 0;\n    let height = 0;\n    if (w2.config.xaxis.title.text !== void 0) {\n      const graphics = new Graphics(this.w);\n      const rect = graphics.getTextRects(\n        w2.config.xaxis.title.text,\n        w2.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 w2 = this.w;\n    this.dCtx.timescaleLabels = w2.labelData.timescaleLabels.slice();\n    const labels = this.dCtx.timescaleLabels.map(\n      (label) => label.value\n    );\n    const val = labels.reduce((a2, b2) => {\n      if (typeof a2 === \"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 a2.length > b2.length ? a2 : b2;\n      }\n    }, 0);\n    const graphics = new Graphics(this.w);\n    const rect = graphics.getTextRects(\n      val,\n      w2.config.xaxis.labels.style.fontSize\n    );\n    const totalWidthRotated = rect.width * 1.05 * labels.length;\n    if (totalWidthRotated > w2.layout.gridWidth && w2.config.xaxis.labels.rotate !== 0) {\n      w2.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 w2 = this.w;\n    const gl = w2.globals;\n    const cnf = w2.config;\n    const xtype = cnf.xaxis.type;\n    const lbWidth = xaxisLabelCoords.width;\n    gl.skipLastTimelinelabel = false;\n    gl.skipFirstTimelinelabel = false;\n    const isBarOpposite = w2.config.yaxis[0].opposite && w2.globals.isBarHorizontal;\n    const isCollapsed = (i2) => gl.collapsedSeriesIndices.indexOf(i2) !== -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 = w2.config.legend.position === \"right\" && this.dCtx.lgRect.width > 0 ? this.dCtx.lgRect.width : 0;\n        if (lastLabelPosition > gl.svgWidth - w2.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 && !w2.layout.rotateXLabels) {\n          gl.skipLastTimelinelabel = true;\n        }\n      } else if (xtype !== \"datetime\") {\n        if (this.dCtx.gridPad.right < lbWidth / 2 - this.dCtx.yAxisWidthRight && !w2.layout.rotateXLabels && !w2.config.xaxis.labels.trim) {\n          this.dCtx.xPadRight = lbWidth / 2 + 1;\n        }\n      }\n    };\n    const padYAxe = (yaxe, i2) => {\n      if (cnf.yaxis.length > 1 && isCollapsed(i2)) return;\n      rightPad(yaxe);\n    };\n    cnf.yaxis.forEach((yaxe, i2) => {\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, i2);\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 w2 = 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    w2.config.yaxis.map((yaxe, index) => {\n      const formatterArgs = {\n        seriesIndex: index,\n        dataPointIndex: -1,\n        w: w2\n      };\n      const yS = w2.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 = w2.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 (w2.globals.isBarHorizontal) {\n          labelPad = 0;\n          const barYaxisLabels = w2.labelData.labels.slice();\n          val = Utils$1.getLargestStringFromArr(barYaxisLabels);\n          val = lbFormatter(val, { seriesIndex: index, dataPointIndex: -1, w: w2 });\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 w2 = this.w;\n    const ret = [];\n    w2.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 w2 = this.w;\n    let yAxisWidth = 0;\n    let yAxisWidthLeft = 0;\n    let yAxisWidthRight = 0;\n    const padding = w2.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 w2.globals.ignoreYAxisIndexes.indexOf(index) > -1;\n    };\n    const padForLabelTitle = (coord, index) => {\n      const floating = w2.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      w2.config.yaxis[index].opposite ? yAxisWidthRight = yAxisWidthRight + width : yAxisWidthLeft = yAxisWidthLeft + width;\n      yAxisWidth = yAxisWidth + width;\n    };\n    w2.layout.yLabelsCoords.map((yLabelCoord, index) => {\n      padForLabelTitle(yLabelCoord, index);\n    });\n    w2.layout.yTitleCoords.map((yTitleCoord, index) => {\n      padForLabelTitle(yTitleCoord, index);\n    });\n    if (w2.globals.isBarHorizontal && !w2.config.yaxis[0].floating) {\n      yAxisWidth = w2.layout.yLabelsCoords[0].width + w2.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: w2 } = this;\n    const { config: cnf, globals: gl } = w2;\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((c2) => {\n      if (hasBar(c2.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 && w2.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  /**\n   * Reserve room to the right of the plot for stacked *total* dataLabels on a\n   * 100% horizontal bar chart.\n   *\n   * The total label is placed just past the end of the stack. Under\n   * `stackType: '100%'` every stack ends at the axis maximum, i.e. exactly at\n   * the right edge of the plot, so the label was drawn outside the grid and\n   * clipped by the SVG viewport. See #3579.\n   *\n   * Scoped to the 100% case on purpose: with ordinary stacking the axis\n   * maximum is a rounded \"nice\" number that normally sits beyond the longest\n   * stack, so there is already room and padding every such chart would move\n   * layouts that render correctly today.\n   *\n   * Raises `xPadRight`, which narrows `gridWidth` without translating the plot\n   * origin, so the y-axis and its labels stay put and only the bars get\n   * shorter.\n   */\n  gridPadForStackedTotalDataLabels() {\n    const { w: w2 } = this;\n    const totalConfig = w2.config.plotOptions.bar.dataLabels.total;\n    if (!w2.globals.isBarHorizontal || !w2.config.chart.stacked || w2.config.chart.stackType !== \"100%\" || !totalConfig.enabled) {\n      return;\n    }\n    const totals = w2.seriesData.stackedSeriesTotals || [];\n    if (!totals.length) return;\n    const formatter = totalConfig.formatter || w2.config.dataLabels.formatter;\n    const labels = totals.map(\n      (val, j) => String(\n        formatter ? formatter(val, __spreadProps(__spreadValues({}, w2), { seriesIndex: 0, dataPointIndex: j, w: w2 })) : val\n      )\n    );\n    const graphics = new Graphics(w2);\n    const rect = graphics.getTextRects(\n      Utils$1.getLargestStringFromArr(labels),\n      parseFloat(totalConfig.style.fontSize).toString(),\n      totalConfig.style.fontFamily\n    );\n    const needed = rect.width + Math.abs(totalConfig.offsetX || 0) + 2;\n    this.dCtx.xPadRight = Math.max(this.dCtx.xPadRight, needed);\n  }\n  gridPadFortitleSubtitle() {\n    const { w: w2 } = this;\n    const { globals: gl } = w2;\n    let gridShrinkOffset = this.dCtx.isSparkline || !gl.axisCharts ? 0 : 10;\n    const titleSubtitle = [\"title\", \"subtitle\"];\n    titleSubtitle.forEach((t2) => {\n      if (w2.config[t2].text !== void 0) {\n        gridShrinkOffset += w2.config[t2].margin;\n      } else {\n        gridShrinkOffset += this.dCtx.isSparkline || !gl.axisCharts ? 0 : 5;\n      }\n    });\n    if (w2.config.legend.show && w2.config.legend.position === \"bottom\" && !w2.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    this.dCtx.titleBlockPad = gridShrinkOffset;\n    w2.layout.gridHeight -= titleCoords.height + subtitleCoords.height + gridShrinkOffset;\n    w2.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: w2 } = this;\n    const axesUtils = new AxesUtils(this.w, { theme: this.dCtx.theme, timeScale: this.dCtx.timeScale });\n    w2.config.yaxis.forEach((yaxe, index) => {\n      if (w2.globals.ignoreYAxisIndexes.indexOf(index) === -1 && !yaxe.floating && !axesUtils.isYAxisHidden(index)) {\n        if (yaxe.opposite) {\n          w2.layout.translateX -= yaxisLabelCoords[index].width + yTitleCoords[index].width + parseInt(yaxe.labels.style.fontSize, 10) / 1.2 + 12;\n        }\n        if (w2.layout.translateX < 2) {\n          w2.layout.translateX = 2;\n        }\n      }\n    });\n  }\n}\nconst XHTML$3 = \"http://www.w3.org/1999/xhtml\";\nconst BREADCRUMB_HEIGHT = 18;\nconst BREADCRUMB_HEIGHT_FULL = 23;\nfunction breadcrumbConfig(w2, localCfg) {\n  const shared = w2.config.drilldown && w2.config.drilldown.breadcrumb || {};\n  return __spreadValues(__spreadValues({\n    show: true,\n    position: \"top-left\",\n    separator: \" / \",\n    rootLabel: \"All\",\n    offsetX: 0,\n    offsetY: 0,\n    formatter: void 0\n  }, shared), localCfg || {});\n}\nfunction avoidChromeOverlap(w2, nav) {\n  const chrome = (\n    /** @type {Element[]} */\n    [\".apexcharts-title-text\", \".apexcharts-subtitle-text\"].map((s2) => w2.dom.baseEl.querySelector(s2)).filter((el) => el !== null)\n  );\n  if (!chrome.length) return;\n  const wrapTop = w2.dom.elWrap.getBoundingClientRect().top;\n  for (let pass = 0; pass < chrome.length + 1; pass++) {\n    const nr = nav.getBoundingClientRect();\n    const hit = chrome.find((el) => {\n      const r2 = el.getBoundingClientRect();\n      return nr.left < r2.right && nr.right > r2.left && nr.top < r2.bottom && nr.bottom > r2.top;\n    });\n    if (!hit) break;\n    nav.style.top = `${hit.getBoundingClientRect().bottom - wrapTop + 4}px`;\n  }\n}\nfunction breadcrumbCeiling(w2, nav) {\n  const gridTop = w2.layout.translateY || 0;\n  const elWrap = w2.dom.elWrap;\n  if (!elWrap) return gridTop;\n  const labels = w2.dom.baseEl.querySelectorAll(\".apexcharts-yaxis-label\");\n  if (!labels.length) return gridTop;\n  const wrapTop = elWrap.getBoundingClientRect().top;\n  const navRect = nav.getBoundingClientRect();\n  let ceiling = gridTop;\n  for (let i2 = 0; i2 < labels.length; i2++) {\n    const r2 = labels[i2].getBoundingClientRect();\n    if (!r2.height) continue;\n    if (r2.left >= navRect.right || r2.right <= navRect.left) continue;\n    ceiling = Math.min(ceiling, r2.top - wrapTop);\n  }\n  return ceiling;\n}\nfunction placeInReservedBand(w2, ctx, nav, cfg) {\n  var _a;\n  const dimHelpers = (_a = ctx == null ? void 0 : ctx.dimensions) == null ? void 0 : _a.dimHelpers;\n  const titleArea = dimHelpers ? dimHelpers.getTitleSubtitleCoords(\"title\").height + dimHelpers.getTitleSubtitleCoords(\"subtitle\").height : 0;\n  const navH = nav.getBoundingClientRect().height || BREADCRUMB_HEIGHT;\n  const offsetY = cfg && cfg.offsetY || 0;\n  const ceiling = breadcrumbCeiling(w2, nav);\n  if (ceiling - titleArea >= navH + 1) {\n    nav.style.top = `${ceiling - navH - 1 + offsetY}px`;\n    return true;\n  }\n  nav.style.top = `${titleArea + offsetY}px`;\n  const dark = w2.config.theme.mode === \"dark\";\n  nav.style.background = dark ? \"rgba(20,24,30,0.82)\" : \"rgba(255,255,255,0.86)\";\n  nav.style.borderRadius = \"4px\";\n  return false;\n}\nfunction clearBreadcrumb(w2) {\n  const elWrap = w2.dom.elWrap;\n  if (!elWrap) return;\n  const existing = elWrap.querySelector(\".apexcharts-breadcrumb\");\n  if (existing && existing.parentNode) existing.parentNode.removeChild(existing);\n}\nfunction renderBreadcrumb(w2, opts) {\n  if (!Environment.isBrowser()) return null;\n  const elWrap = w2.dom.elWrap;\n  if (!elWrap) return null;\n  clearBreadcrumb(w2);\n  const cfg = opts.config || breadcrumbConfig(w2);\n  if (cfg.show === false) return null;\n  const crumbs = opts.crumbs || [];\n  if (crumbs.length < 2) return null;\n  const nav = BrowserAPIs.createElementNS(XHTML$3, \"nav\");\n  nav.setAttribute(\"class\", \"apexcharts-breadcrumb\");\n  nav.setAttribute(\"aria-label\", opts.ariaLabel || \"Breadcrumb\");\n  positionBreadcrumb(nav, cfg);\n  if (opts.compact) {\n    nav.style.fontSize = \"11px\";\n    nav.style.padding = \"0 2px\";\n  }\n  const separator = cfg.separator != null ? cfg.separator : \" / \";\n  crumbs.forEach((crumb, i2) => {\n    var _a;\n    if (i2 > 0) {\n      const sep = BrowserAPIs.createElementNS(XHTML$3, \"span\");\n      sep.setAttribute(\"class\", \"apexcharts-breadcrumb-separator\");\n      sep.setAttribute(\"aria-hidden\", \"true\");\n      sep.textContent = separator;\n      nav.appendChild(sep);\n    }\n    let label = i2 === 0 ? (_a = cfg.rootLabel) != null ? _a : \"All\" : crumb.label;\n    if (typeof cfg.formatter === \"function\") {\n      label = cfg.formatter(label, {\n        index: i2,\n        depth: crumbs.length - 1,\n        data: crumb.data\n      });\n    }\n    if (i2 === crumbs.length - 1) {\n      const cur = BrowserAPIs.createElementNS(XHTML$3, \"span\");\n      cur.setAttribute(\n        \"class\",\n        \"apexcharts-breadcrumb-item apexcharts-breadcrumb-current\"\n      );\n      cur.setAttribute(\"aria-current\", \"page\");\n      cur.textContent = String(label);\n      nav.appendChild(cur);\n      return;\n    }\n    const btn = (\n      /** @type {HTMLButtonElement} */\n      BrowserAPIs.createElementNS(XHTML$3, \"button\")\n    );\n    btn.setAttribute(\"type\", \"button\");\n    btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n    if (i2 === 0) {\n      const arrow = BrowserAPIs.createElementNS(XHTML$3, \"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$3, \"span\");\n    text.setAttribute(\"class\", \"apexcharts-breadcrumb-label\");\n    text.textContent = String(label);\n    btn.appendChild(text);\n    btn.addEventListener(\"click\", () => opts.onNavigate(i2, crumb));\n    nav.appendChild(btn);\n  });\n  elWrap.appendChild(nav);\n  return nav;\n}\nfunction positionBreadcrumb(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}\nclass Dimensions {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\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 = __spreadValues({}, this.w.config.grid.padding);\n    this.xPadRight = 0;\n    this.titleBlockPad = 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 w2 = this.w;\n    const gl = w2.globals;\n    this.gridPad = __spreadValues({}, w2.config.grid.padding);\n    this.lgRect = this.dimHelpers.getLegendsRect();\n    this.datalabelsCoords = { width: 0, height: 0 };\n    if (this.isSparkline) {\n      if (this.w.globals.markers.largestSize > 0) {\n        Object.entries(this.gridPad).forEach(([k, v2]) => {\n          this.gridPad[k] = Math.max(\n            v2,\n            this.w.globals.markers.largestSize / 1.5\n          );\n        });\n      }\n      const strokeInset = this.dimHelpers.getSparklineStrokeInset();\n      this.gridPad.top = Math.max(strokeInset.top, this.gridPad.top);\n      this.gridPad.bottom = Math.max(strokeInset.bottom, this.gridPad.bottom);\n    }\n    if (gl.axisCharts) {\n      this.setDimensionsForAxisCharts();\n    } else {\n      this.setDimensionsForNonAxisCharts();\n    }\n    this.dimGrid.gridPadFortitleSubtitle();\n    this.gridPadForBreadcrumb();\n    this.dimGrid.gridPadForStackedTotalDataLabels();\n    w2.layout.gridHeight = w2.layout.gridHeight - this.gridPad.top - this.gridPad.bottom;\n    w2.layout.gridWidth = w2.layout.gridWidth - this.gridPad.left - this.gridPad.right - this.xPadRight - this.xPadLeft;\n    const barWidth = this.dimGrid.gridPadForColumnsInNumericAxis(\n      w2.layout.gridWidth\n    );\n    w2.layout.gridWidth = w2.layout.gridWidth - barWidth * 2;\n    w2.layout.translateX = w2.layout.translateX + this.gridPad.left + this.xPadLeft + (barWidth > 0 ? barWidth : 0);\n    w2.layout.translateY = w2.layout.translateY + this.gridPad.top;\n    return {\n      // w.layout (future slice)\n      layout: {\n        gridHeight: w2.layout.gridHeight,\n        gridWidth: w2.layout.gridWidth,\n        translateX: w2.layout.translateX,\n        translateY: w2.layout.translateY,\n        translateXAxisX: w2.layout.translateXAxisX,\n        translateXAxisY: w2.layout.translateXAxisY,\n        rotateXLabels: w2.layout.rotateXLabels,\n        xAxisHeight: w2.layout.xAxisHeight,\n        xAxisLabelsHeight: w2.layout.xAxisLabelsHeight,\n        xAxisGroupLabelsHeight: w2.layout.xAxisGroupLabelsHeight,\n        xAxisLabelsWidth: w2.layout.xAxisLabelsWidth,\n        yLabelsCoords: w2.layout.yLabelsCoords,\n        yTitleCoords: w2.layout.yTitleCoords,\n        gridPad: __spreadValues({}, this.gridPad)\n      }\n    };\n  }\n  /**\n   * Reserve a strip above the plot for a navigation breadcrumb.\n   *\n   * A treemap fills its plot edge to edge, so unlike a sunburst - whose rings\n   * leave the corners empty - an absolutely-positioned breadcrumb has nowhere\n   * to float without covering a tile. Giving it real space is the only way it\n   * never overlaps.\n   *\n   * Reserved whenever click-to-zoom is enabled, not only while zoomed in: the\n   * strip appears and disappears as the reader navigates, and sizing the plot\n   * around its presence would reflow every tile on each zoom.\n   */\n  gridPadForBreadcrumb() {\n    var _a, _b, _c, _d, _e, _f;\n    const w2 = this.w;\n    const isTreemap = w2.config.chart.type === \"treemap\";\n    if (isTreemap) {\n      const zoom = (_b = (_a = w2.config.plotOptions) == null ? void 0 : _a.treemap) == null ? void 0 : _b.zoom;\n      if (zoom && zoom.enabled) {\n        if (breadcrumbConfig(w2, zoom.breadcrumb).show === false) return;\n        this.gridPad.top += BREADCRUMB_HEIGHT + 4;\n        return;\n      }\n    }\n    if (!w2.globals.axisCharts) return;\n    if (!this.ctx.drilldown) return;\n    if (!w2.config.drilldown || !w2.config.drilldown.enabled) return;\n    if (breadcrumbConfig(w2).show === false) return;\n    const labelFs = parseFloat(String((_f = (_e = (_d = (_c = w2.config.yaxis) == null ? void 0 : _c[0]) == null ? void 0 : _d.labels) == null ? void 0 : _e.style) == null ? void 0 : _f.fontSize)) || 11;\n    const yLabelOverhang = isTreemap ? 0 : Math.ceil(labelFs * LINE_HEIGHT_RATIO / 2);\n    const needed = BREADCRUMB_HEIGHT_FULL + 1 + yLabelOverhang;\n    const alreadyFree = isTreemap ? 0 : this.titleBlockPad || 0;\n    this.gridPad.top += Math.max(0, needed - alreadyFree);\n  }\n  setDimensionsForAxisCharts() {\n    const w2 = this.w;\n    const gl = w2.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    w2.layout.yLabelsCoords = [];\n    w2.layout.yTitleCoords = [];\n    w2.config.yaxis.map((yaxe, index) => {\n      w2.layout.yLabelsCoords.push({\n        width: yaxisLabelCoords[index].width,\n        index\n      });\n      w2.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    w2.layout.translateXAxisY = w2.layout.rotateXLabels ? this.xAxisHeight / 8 : -4;\n    w2.layout.translateXAxisX = w2.layout.rotateXLabels && w2.axisFlags.isXNumeric && w2.config.xaxis.labels.rotate <= -45 ? -this.xAxisWidth / 4 : 0;\n    if (w2.globals.isBarHorizontal) {\n      w2.layout.rotateXLabels = false;\n      w2.layout.translateXAxisY = -1 * ((parseInt(w2.config.xaxis.labels.style.fontSize, 10) || 12) / 1.5);\n    }\n    w2.layout.translateXAxisY = w2.layout.translateXAxisY + w2.config.xaxis.labels.offsetY;\n    w2.layout.translateXAxisX = w2.layout.translateXAxisX + w2.config.xaxis.labels.offsetX;\n    let yAxisWidth = this.yAxisWidth;\n    let xAxisHeight = this.xAxisHeight;\n    w2.layout.xAxisLabelsHeight = this.xAxisHeight - xtitleCoords.height;\n    w2.layout.xAxisGroupLabelsHeight = w2.layout.xAxisLabelsHeight - xaxisLabelCoords.height;\n    w2.layout.xAxisLabelsWidth = this.xAxisWidth;\n    w2.layout.xAxisHeight = this.xAxisHeight;\n    let translateY = 10;\n    if (w2.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 || w2.config.chart.type === \"treemap\") {\n      yAxisWidth = 0;\n      xAxisHeight = 0;\n      translateY = 0;\n    }\n    if (!this.isSparkline && w2.config.chart.type !== \"treemap\") {\n      this.dimXAxis.additionalPaddingXLabels(xaxisLabelCoords);\n    }\n    const legendTopBottom = () => {\n      w2.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n      w2.layout.gridHeight = gl.svgHeight - this.lgRect.height - xAxisHeight - (!this.isSparkline && w2.config.chart.type !== \"treemap\" ? w2.layout.rotateXLabels ? 10 : 15 : 0);\n      w2.layout.gridWidth = gl.svgWidth - yAxisWidth - this.datalabelsCoords.width * 2;\n    };\n    if (w2.config.xaxis.position === \"top\")\n      translateY = w2.layout.xAxisHeight - w2.config.xaxis.axisTicks.height - 5;\n    switch (w2.config.legend.position) {\n      case \"bottom\":\n        w2.layout.translateY = translateY;\n        legendTopBottom();\n        break;\n      case \"top\":\n        w2.layout.translateY = this.lgRect.height + translateY;\n        legendTopBottom();\n        break;\n      case \"left\":\n        w2.layout.translateY = translateY;\n        w2.layout.translateX = this.lgRect.width + yAxisWidth + this.datalabelsCoords.width;\n        w2.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w2.layout.gridWidth = gl.svgWidth - this.lgRect.width - yAxisWidth - this.datalabelsCoords.width * 2;\n        break;\n      case \"right\":\n        w2.layout.translateY = translateY;\n        w2.layout.translateX = yAxisWidth + this.datalabelsCoords.width;\n        w2.layout.gridHeight = gl.svgHeight - xAxisHeight - 12;\n        w2.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 w2 = this.w;\n    const gl = w2.globals;\n    const cnf = w2.config;\n    let xPad = 0;\n    if (w2.config.legend.show && !w2.config.legend.floating) {\n      xPad = 20;\n    }\n    if (cnf.chart.type === \"unit\") {\n      const legendVisible = cnf.legend.show && !cnf.legend.floating;\n      const pos = cnf.legend.position;\n      let top = 0;\n      let side = 0;\n      if (legendVisible) {\n        if (pos === \"bottom\" || pos === \"top\") {\n          top = this.lgRect.height;\n        } else {\n          side = this.lgRect.width + xPad;\n        }\n      }\n      w2.layout.gridWidth = gl.svgWidth - side;\n      w2.layout.gridHeight = gl.svgHeight - top;\n      w2.layout.translateX = pos === \"left\" ? side : 0;\n      w2.layout.translateY = pos === \"top\" ? top : 0;\n      return;\n    }\n    const type = cnf.chart.type === \"sunburst\" ? \"sunburst\" : 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      w2.layout.gridHeight = gl.svgHeight;\n      const maxWidth = w2.dom.elWrap.getBoundingClientRect().width;\n      w2.layout.gridWidth = Math.min(maxWidth, w2.layout.gridHeight);\n      w2.layout.translateY = offY;\n      w2.layout.translateX = offX + (gl.svgWidth - w2.layout.gridWidth) / 2;\n      return;\n    }\n    switch (cnf.legend.position) {\n      case \"bottom\":\n        w2.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w2.layout.gridWidth = gl.svgWidth;\n        w2.layout.translateY = offY - 10;\n        w2.layout.translateX = offX + (gl.svgWidth - w2.layout.gridWidth) / 2;\n        break;\n      case \"top\":\n        w2.layout.gridHeight = gl.svgHeight - this.lgRect.height;\n        w2.layout.gridWidth = gl.svgWidth;\n        w2.layout.translateY = this.lgRect.height + offY + 10;\n        w2.layout.translateX = offX + (gl.svgWidth - w2.layout.gridWidth) / 2;\n        break;\n      case \"left\":\n        w2.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad;\n        w2.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w2.layout.gridWidth;\n        w2.layout.translateY = offY;\n        w2.layout.translateX = offX + this.lgRect.width + xPad;\n        break;\n      case \"right\":\n        w2.layout.gridWidth = gl.svgWidth - this.lgRect.width - xPad - 5;\n        w2.layout.gridHeight = cnf.chart.height !== \"auto\" ? gl.svgHeight : w2.layout.gridWidth;\n        w2.layout.translateY = offY;\n        w2.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 w2 = this.w;\n    const xAxisNum = w2.labelData.hasXaxisGroups ? 2 : 1;\n    const baseXAxisHeight = xaxisGroupLabelCoords.height + xaxisLabelCoords.height + xtitleCoords.height;\n    const xAxisHeightMultiplicate = w2.axisFlags.isMultiLineX ? 1.2 : LINE_HEIGHT_RATIO;\n    const rotatedXAxisOffset = w2.layout.rotateXLabels ? 22 : 10;\n    const rotatedXAxisLegendOffset = w2.layout.rotateXLabels && w2.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 > w2.config.xaxis.labels.maxHeight) {\n      this.xAxisHeight = w2.config.xaxis.labels.maxHeight;\n    }\n    if (w2.config.xaxis.labels.minHeight && this.xAxisHeight < w2.config.xaxis.labels.minHeight) {\n      this.xAxisHeight = w2.config.xaxis.labels.minHeight;\n    }\n    if (w2.config.xaxis.floating) {\n      this.xAxisHeight = 0;\n    }\n    let minYAxisWidth = 0;\n    let maxYAxisWidth = 0;\n    w2.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(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.tickInterval = null;\n    this.timeScaleArray = [];\n    this.utc = w2.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 w2 = this.w;\n    if (w2.globals.allSeriesCollapsed) {\n      w2.labelData.labels = [];\n      w2.labelData.timescaleLabels = [];\n      this.timeScaleArray = [];\n      return [];\n    }\n    const span = maxX - minX;\n    const daysDiff = span / DAY;\n    w2.interact.disableZoomIn = false;\n    w2.interact.disableZoomOut = false;\n    if (daysDiff < MIN_ZOOM_DAYS) {\n      w2.interact.disableZoomIn = true;\n    } else if (daysDiff > 5e4) {\n      w2.interact.disableZoomOut = true;\n    }\n    const targetCount = Number.isFinite(w2.config.xaxis.tickAmount) ? (\n      /** @type {number} */\n      w2.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 w2 = this.w;\n    const dt = new DateTime(w2);\n    const isUTC = this.utc;\n    const gridWidth = w2.layout.gridWidth;\n    const span = maxX - minX;\n    const ticks = [];\n    let t2 = 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 (t2 <= maxX && iter < MAX_ITER) {\n      const f = dt.getDateFields(t2, isUTC);\n      const position = span > 0 ? (t2 - minX) / span * gridWidth : 0;\n      ticks.push({\n        timestamp: t2,\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: t2\n      });\n      t2 = dt.addInterval(\n        t2,\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 w2 = this.w;\n    const formatted = this.formatDates(rawTicks);\n    const filtered = this.removeOverlappingTS(formatted);\n    w2.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 w2 = this.w;\n    const dt = new DateTime(w2);\n    const userFormat = w2.config.xaxis.labels.format;\n    const dtFmt = w2.config.xaxis.labels.datetimeFormatter;\n    const isUTC = this.utc;\n    const pad = (n2, len = 2) => String(n2).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 w2 = this.w;\n    const graphics = new Graphics(w2);\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        w2.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 (!w2.config.xaxis.labels.hideOverlappingLabels) return item;\n      const prevLabelWidth = equalLabelLengthFlag ? (\n        /** @type {number} */\n        constantLabelWidth\n      ) : graphics.getTextRects(\n        arr[lastDrawnIndex].value,\n        w2.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$1 = \"__apexcharts_registry__\";\nconst CUSTOM_KEY = \"__apexcharts_custom_types__\";\nif (!/** @type {any} */\nglobalThis[REGISTRY_KEY$1]) {\n  globalThis[REGISTRY_KEY$1] = {};\n}\nif (!/** @type {any} */\nglobalThis[CUSTOM_KEY]) {\n  globalThis[CUSTOM_KEY] = /* @__PURE__ */ new Set();\n}\nfunction getRegistry$1() {\n  return (\n    /** @type {any} */\n    globalThis[REGISTRY_KEY$1]\n  );\n}\nfunction getCustomTypes() {\n  return (\n    /** @type {any} */\n    globalThis[CUSTOM_KEY]\n  );\n}\nfunction markCustom(name2) {\n  getCustomTypes().add(name2);\n}\nfunction isCustom(name2) {\n  return getCustomTypes().has(name2);\n}\nfunction hasChartClass(type) {\n  return !!getRegistry$1()[type];\n}\nfunction unregister(name2) {\n  delete getRegistry$1()[name2];\n  getCustomTypes().delete(name2);\n}\nfunction register(typeMap) {\n  Object.assign(getRegistry$1(), typeMap);\n}\nfunction getChartClass(type) {\n  const Cls = getRegistry$1()[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, w2, ctx) {\n    this.w = w2;\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    const isCustomType = !axisChartsArrTypes.includes(ct) && ![\"pie\", \"donut\", \"polarArea\", \"radialBar\"].includes(ct) && isCustom(ct);\n    gl.axisCharts = axisChartsArrTypes.includes(ct) || isCustomType;\n    gl.xyCharts = xyChartsArrTypes.includes(ct) || isCustomType;\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$2,\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$2, \"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   * Classify each series by its resolved chart type into per-type render\n   * buckets (`{ series, i }`, plus `seriesRangeEnd` for rangeArea). Side\n   * effects mirror the original inline code: sets `w.globals.columnSeries`,\n   * folds `w.globals.comboCharts`, and warns on unsupported combinations (a\n   * non-combo type mixed in, or horizontal bars in a combo). Extracted from\n   * plotChartType to shrink it (audit C2).\n   * @param {any[]} ser\n   * @returns {{ seriesTypes: Record<string, any>, customBuckets: Record<string, {series: any[], i: number[]}> }}\n   */\n  _classifySeriesByType(ser) {\n    const { w: w2 } = this;\n    const { config: cnf, globals: gl } = w2;\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 customBuckets = {};\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\") w2.globals.columnSeries = seriesTypes.bar;\n      } else if ([\n        \"heatmap\",\n        \"treemap\",\n        \"pie\",\n        \"donut\",\n        \"polarArea\",\n        \"radialBar\",\n        \"radar\",\n        \"unit\",\n        \"sunburst\"\n      ].includes(seriesType)) {\n        nonComboType = seriesType;\n      } else if (isCustom(seriesType)) {\n        if (!customBuckets[seriesType]) {\n          customBuckets[seriesType] = { series: [], i: [] };\n        }\n        customBuckets[seriesType].series.push(serie);\n        customBuckets[seriesType].i.push(st);\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        w2.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    return { seriesTypes, customBuckets };\n  }\n  /**\n   * @param {any[]} ser\n   * @param {import('../types/internal').XYRatios} xyRatios\n   */\n  plotChartType(ser, xyRatios) {\n    const { w: w2, ctx } = this;\n    const canvasMode = ctx.renderer && ctx.renderer.kind === \"canvas\";\n    if (canvasMode) ctx.renderer.beginSeries();\n    const { seriesTypes, customBuckets } = this._classifySeriesByType(ser);\n    const renderers = this._instantiateSeriesRenderers(seriesTypes, xyRatios);\n    const elGraph = this._assembleSeriesGraphics(\n      seriesTypes,\n      customBuckets,\n      renderers,\n      xyRatios\n    );\n    if (canvasMode) {\n      const rr = (\n        /** @type {any} */\n        ctx.renderer\n      );\n      if (rr && rr._repaintHostInPlace) {\n        rr._repaintHostInPlace = false;\n        const wrapNode = this.w.dom.elGraphical.node.querySelector(\n          \".apexcharts-canvas-series-wrap\"\n        );\n        if (wrapNode && rr.canRepaintInPlace && rr.canRepaintInPlace()) {\n          rr.repaintInPlace();\n          const groups = Array.isArray(elGraph) ? elGraph : [elGraph];\n          groups.forEach((g2) => {\n            if (g2 && g2.node) wrapNode.appendChild(g2.node);\n          });\n          return [];\n        }\n      }\n      const host = ctx.renderer.present();\n      if (host) {\n        const wrap = new Graphics(w2).group({\n          class: \"apexcharts-canvas-series-wrap\"\n        });\n        wrap.add(host);\n        const groups = Array.isArray(elGraph) ? elGraph : [elGraph];\n        groups.forEach((g2) => {\n          if (g2) wrap.add(g2);\n        });\n        return wrap;\n      }\n    }\n    return elGraph;\n  }\n  /**\n   * Lazily instantiate the shared series renderers the orchestration below\n   * needs. getChartClass() is only called for types actually present, so a page\n   * that registers just 'line' never triggers a lookup for 'candlestick' etc.\n   * (tree-shaking). Returns the line/candlestick/violin renderers and sets\n   * ctx.pie / ctx.rangeBar as a side effect (both may be null). Extracted from\n   * plotChartType (audit C2).\n   * @param {Record<string, any>} seriesTypes\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @returns {{ line: any, boxCandlestick: any, violin: any }}\n   */\n  _instantiateSeriesRenderers(seriesTypes, xyRatios) {\n    const { w: w2, ctx } = this;\n    const { config: cnf, globals: gl } = w2;\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    return { line, boxCandlestick, violin };\n  }\n  /**\n   * Build the ordered list of series graphic groups (elGraph) from the\n   * classified buckets. Combo charts layer per-type draws in z-order; a\n   * single-type chart dispatches on cnf.chart.type. Sets ctx.bar for the\n   * non-stacked bar paths (side effect, preserved). Extracted from\n   * plotChartType (audit C2).\n   * @param {Record<string, any>} seriesTypes\n   * @param {Record<string, {series: any[], i: number[]}>} customBuckets\n   * @param {{ line: any, boxCandlestick: any, violin: any }} renderers\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @returns {any}\n   */\n  _assembleSeriesGraphics(seriesTypes, customBuckets, renderers, xyRatios) {\n    const { w: w2, ctx } = this;\n    const { config: cnf, globals: gl } = w2;\n    const { line, boxCandlestick, violin } = renderers;\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      Object.keys(customBuckets).forEach((cname) => {\n        const bucket = customBuckets[cname];\n        if (bucket.series.length > 0) {\n          const cs = new (getChartClass(cname))(ctx.w, ctx, xyRatios);\n          elGraph.push(cs.draw(bucket.series, cname, bucket.i));\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 \"unit\": {\n          const unit = new (getChartClass(\"unit\"))(ctx.w, ctx);\n          elGraph = unit.draw(this.w.seriesData.series);\n          break;\n        }\n        case \"sunburst\": {\n          const sunburst = new (getChartClass(\"sunburst\"))(ctx.w, ctx);\n          elGraph = sunburst.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          if (isCustom(type)) {\n            const cs = new (getChartClass(type))(ctx.w, ctx, xyRatios);\n            elGraph = cs.draw(this.w.seriesData.series, type);\n          } else {\n            elGraph = line.draw(this.w.seriesData.series);\n          }\n      }\n    }\n    return elGraph;\n  }\n  /**\n   * Extract the CSS unit suffix from a chart width/height config value\n   * (`'100%'` -> `'%'`, `'300px'` -> `'px'`, `300`/`'300'` -> `''`). Kept as the\n   * original digit-split idiom so results are identical for every input the\n   * call sites already handle ('%', 'px', '', 'auto').\n   * @param {string|number} value\n   * @returns {string|undefined}\n   */\n  _extractDimensionUnit(value) {\n    return String(value).split(/[0-9]+/g).pop();\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 = this._extractDimensionUnit(rawWidth);\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 = this._extractDimensionUnit(rawHeight);\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    gl.lastResizeSignature = this.getResizeSignature();\n  }\n  /**\n   * A stable fingerprint of the container measurements that actually feed the\n   * chart's rendered dimensions, given the width/height config. Only inputs that\n   * a resize can change are included: the element width when the width is a\n   * percentage, and the parent height when the height is a percentage. A fully\n   * pixel-sized chart therefore has a constant signature, so a resize never\n   * forces a redraw; a percentage-sized chart's signature tracks the container.\n   * The window-resize handler compares this against the last render to skip\n   * redraws (and the entrance-animation teardown they cause) that aren't needed.\n   * @returns {{ w: number, h: number }}\n   */\n  getResizeSignature() {\n    const { config: cnf } = this.w;\n    const rawWidth = (cnf.chart.width || \"100%\").toString().trim();\n    const rawHeight = (cnf.chart.height || \"auto\").toString().trim();\n    let w2 = 0;\n    let h2 = 0;\n    if (rawWidth.endsWith(\"%\")) {\n      let elDim = Utils$1.getDimensions(this.el);\n      if (!elDim[0]) elDim = Utils$1.getDimensions(this.el.parentNode);\n      w2 = elDim[0] || 0;\n    }\n    if (rawHeight.endsWith(\"%\")) {\n      h2 = Utils$1.getDimensions(this.el.parentNode)[1] || 0;\n    }\n    const sig = { w: Math.round(w2), h: Math.round(h2) };\n    if (cnf.responsive && cnf.responsive.length && Environment.isBrowser()) {\n      sig.iw = window.innerWidth;\n    }\n    return sig;\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, _g, _h, _i;\n    const { w: w2 } = this;\n    const heightStr = w2.config.chart.height ? String(w2.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    const isPercentHeight = heightStr.includes(\"%\");\n    let legendHeight = 0;\n    let offY = w2.config.chart.sparkline.enabled ? 1 : 15;\n    offY += w2.layout.gridPad.bottom;\n    if ([\"top\", \"bottom\"].includes(w2.config.legend.position) && w2.config.legend.show && !w2.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 = w2.dom.baseEl.querySelector(\n      \".apexcharts-radialbar, .apexcharts-pie, .apexcharts-sunburst\"\n    );\n    const externalLabelMarginY = w2.globals.pieExternalLabelMarginY || 0;\n    let chartInnerDimensions = externalLabelMarginY > 0 ? w2.globals.radialSize * 2 + externalLabelMarginY * 2 : w2.globals.radialSize * 2.05;\n    const angleType = w2.config.chart.type === \"sunburst\" ? \"sunburst\" : w2.config.chart.type === \"pie\" || w2.config.chart.type === \"donut\" || w2.config.chart.type === \"polarArea\" ? \"pie\" : \"radialBar\";\n    const radialAngleSpan = Math.abs(\n      w2.config.plotOptions[angleType].endAngle - w2.config.plotOptions[angleType].startAngle\n    );\n    if (el && !w2.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((c2) => accumulate(\n            /** @type {Element} */\n            c2\n          ));\n          return;\n        }\n        const r2 = Utils$1.getBoundingClientRect(node);\n        const height = r2.bottom - r2.top;\n        if (height > 0) {\n          const top = r2.top - svgRect.top;\n          const bottom = r2.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        (c2) => accumulate(\n          /** @type {Element} */\n          c2\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, w2.globals.radialSize * 0.2);\n      const verticalShift = Math.max(padding - arcTopFromSVGTop, 0);\n      if (verticalShift !== 0) {\n        w2.layout.translateY = ((_d = w2.layout.translateY) != null ? _d : 0) + verticalShift;\n        Graphics.setAttrs(this.w.dom.elGraphical.node, {\n          transform: `translate(${(_e = w2.layout.translateX) != null ? _e : 0}, ${w2.layout.translateY})`\n        });\n        arcBottomFromSVGTop += verticalShift;\n      }\n      chartInnerDimensions = arcBottomFromSVGTop > 0 ? arcBottomFromSVGTop : w2.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 = w2.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          const grandparent = (_g = this.w.dom.Paper.node.parentNode) == null ? void 0 : _g.parentNode;\n          if (grandparent) {\n            grandparent.style.minHeight = `${elWrapHeight}px`;\n          }\n        }\n        w2.globals.svgHeight = svgHeight;\n        if (w2.config.legend.position === \"bottom\" && w2.config.legend.show && !w2.config.legend.floating) {\n          (_h = this.ctx.legend) == null ? void 0 : _h.setLegendWrapXY(20, 0);\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      const grandparent = (_i = this.w.dom.Paper.node.parentNode) == null ? void 0 : _i.parentNode;\n      if (grandparent) {\n        grandparent.style.minHeight = `${newHeight}px`;\n      }\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: w2 } = this;\n    let xyRatios = null;\n    if (w2.globals.axisCharts) {\n      if (w2.config.xaxis.crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawXCrosshairs();\n      }\n      if (w2.config.yaxis[0].crosshairs.position === \"back\") {\n        new Crosshairs(this.w).drawYCrosshairs();\n      }\n      if (w2.config.xaxis.type === \"datetime\" && w2.config.xaxis.labels.formatter === void 0) {\n        this.ctx.timeScale = new TimeScale(this.w, this.ctx);\n        let formattedTimeScale = [];\n        if (isFinite(w2.globals.minX) && isFinite(w2.globals.maxX) && !w2.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w2.globals.minX,\n            w2.globals.maxX\n          );\n        } else if (w2.globals.isBarHorizontal) {\n          formattedTimeScale = this.ctx.timeScale.calculateTimeScaleTicks(\n            w2.globals.minY,\n            w2.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: w2 } = this;\n    if (!w2.config.chart.brush.enabled) return;\n    if (typeof w2.config.chart.events.selection !== \"function\") {\n      const targets = Array.isArray(w2.config.chart.brush.targets) ? w2.config.chart.brush.targets : [w2.config.chart.brush.target];\n      targets.forEach((target) => {\n        const targetChart = (\n          /** @type {any} */\n          ctx.constructor.getChartByID(\n            target\n          )\n        );\n        if (!targetChart) {\n          console.warn(\n            `ApexCharts: brush target \"${target}\" was not found. Ensure the target chart is rendered (and its chart.id matches) before the brush chart.`\n          );\n          return;\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      w2.config.chart.events.selection = (chart, e2) => {\n        targets.forEach((target) => {\n          const targetChart = (\n            /** @type {any} */\n            ctx.constructor.getChartByID(\n              target\n            )\n          );\n          if (!targetChart) return;\n          targetChart.ctx.updateHelpers._updateOptions(\n            {\n              xaxis: {\n                min: e2.xaxis.min,\n                max: e2.xaxis.max\n              }\n            },\n            false,\n            false,\n            false,\n            false\n          );\n        });\n      };\n    }\n  }\n  getAccessibleChartLabel() {\n    const w2 = this.w;\n    const cnf = w2.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(w2.seriesData.seriesNames) && w2.seriesData.seriesNames.length) {\n          return w2.seriesData.seriesNames.filter(Boolean);\n        }\n        if (Array.isArray(cnf.series)) {\n          return cnf.series.map((s2) => typeof s2 === \"object\" && s2 !== null ? s2.name : null).filter(Boolean);\n        }\n        return [];\n      })();\n      const seriesCount = w2.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}\nconst TRANSFORM_KEY = \"__apexcharts_series_transforms__\";\nif (!/** @type {any} */\nglobalThis[TRANSFORM_KEY]) {\n  globalThis[TRANSFORM_KEY] = {};\n}\nfunction getTransforms() {\n  return (\n    /** @type {any} */\n    globalThis[TRANSFORM_KEY]\n  );\n}\nfunction registerSeriesTransform(name2, fn) {\n  if (!name2 || typeof name2 !== \"string\") {\n    console.warn(\n      \"ApexCharts: registerSeriesTransform requires a non-empty name.\"\n    );\n    return;\n  }\n  if (typeof fn !== \"function\") {\n    console.warn(\n      `ApexCharts: registerSeriesTransform(\"${name2}\") expects a function (series, w) => series.`\n    );\n    return;\n  }\n  getTransforms()[name2] = fn;\n}\nfunction getSeriesTransform(name2) {\n  if (!name2) return null;\n  return getTransforms()[name2] || null;\n}\nfunction drilldownById(w2, id) {\n  const dd = w2.config.drilldown;\n  const list = dd && Array.isArray(dd.series) ? dd.series : [];\n  return list.find((s2) => s2 && s2.id === id);\n}\nfunction toNode(w2, d, i2, paletteFromParent, parentKey, seenIds = null, opts = {}) {\n  var _a, _b, _c;\n  const isObj = d && typeof d === \"object\";\n  const name2 = isObj ? (_b = (_a = d.x) != null ? _a : d.name) != null ? _b : \"\" : \"\";\n  const value = isObj ? Number((_c = d.y) != null ? _c : d.value) : Number(d);\n  const node = {\n    name: String(name2),\n    value: isNaN(value) ? null : value,\n    color: isObj && d.color ? d.color : void 0,\n    // Identity across data updates: the path of names (indexed so same-named\n    // siblings stay distinct). Update animations morph matched keys in place.\n    _key: `${parentKey}/${i2}:${name2}`\n  };\n  if (paletteFromParent && !node.color) {\n    node.color = paletteFromParent[i2 % paletteFromParent.length];\n  }\n  if (opts.keepDatum) node._datum = d;\n  if (isObj && Array.isArray(d.children) && d.children.length) {\n    node.children = d.children.map(\n      (c2, j) => toNode(w2, c2, j, null, node._key, seenIds, opts)\n    );\n  } else if (isObj && d.drilldown != null && opts.expandDrilldown !== false) {\n    const visited = seenIds || /* @__PURE__ */ new Set();\n    if (!visited.has(d.drilldown)) {\n      const dd = drilldownById(w2, d.drilldown);\n      if (dd && Array.isArray(dd.data) && dd.data.length) {\n        const nextSeen = new Set(visited);\n        nextSeen.add(d.drilldown);\n        const palette = Array.isArray(dd.colors) ? dd.colors : null;\n        node.children = dd.data.map(\n          (c2, j) => toNode(w2, c2, j, palette, node._key, nextSeen, opts)\n        );\n      }\n    }\n  }\n  return node;\n}\nfunction buildHierarchy(w2, opts = {}) {\n  const cfgSeries = (\n    /** @type {any} */\n    w2.config.series\n  );\n  const first = cfgSeries && cfgSeries[0];\n  const data = first && Array.isArray(first.data) ? first.data : cfgSeries;\n  if (!Array.isArray(data)) return [];\n  return data.map(\n    (d, i2) => toNode(w2, d, i2, null, \"\", null, opts)\n  );\n}\nfunction buildSeriesRoots(w2, series, opts = {}) {\n  const cfgSeries = (\n    /** @type {any} */\n    series || w2.config.series\n  );\n  if (!Array.isArray(cfgSeries)) return [];\n  return cfgSeries.map((s2, i2) => {\n    var _a, _b;\n    const data = s2 && Array.isArray(s2.data) ? s2.data : [];\n    const key = `${i2}:${(_a = s2 == null ? void 0 : s2.name) != null ? _a : \"\"}`;\n    const root = {\n      name: String((_b = s2 == null ? void 0 : s2.name) != null ? _b : \"\"),\n      value: null,\n      color: (s2 == null ? void 0 : s2.color) || void 0,\n      _key: key,\n      _seriesIndex: i2,\n      children: data.map(\n        (d, j) => toNode(w2, d, j, null, key, null, opts)\n      )\n    };\n    return root;\n  });\n}\nfunction fillValues(node) {\n  if (node.children && node.children.length) {\n    node.children.forEach((c2) => fillValues(c2));\n    if (node.value == null || isNaN(node.value)) {\n      node.value = node.children.reduce(\n        (s2, c2) => s2 + Math.max(0, c2.value || 0),\n        0\n      );\n    }\n  }\n  if (node.value == null || isNaN(node.value)) node.value = 0;\n}\nfunction hasNesting(series, opts = {}) {\n  if (!Array.isArray(series)) return false;\n  const countDrilldown = opts.drilldown !== false;\n  for (let i2 = 0; i2 < series.length; i2++) {\n    const data = series[i2] && series[i2].data;\n    if (!Array.isArray(data)) continue;\n    for (let j = 0; j < data.length; j++) {\n      const d = data[j];\n      if (!d || typeof d !== \"object\") continue;\n      if (Array.isArray(d.children) && d.children.length) return true;\n      if (countDrilldown && d.drilldown != null) return true;\n    }\n  }\n  return false;\n}\nfunction morphKey(key) {\n  if (typeof key !== \"string\") return \"\";\n  const i2 = key.indexOf(\"/\");\n  return i2 === -1 ? \"\" : key.slice(i2);\n}\nfunction drilldownAsLevels(w2) {\n  var _a, _b, _c, _d;\n  return !!((_d = (_c = (_b = (_a = w2 == null ? void 0 : w2.config) == null ? void 0 : _a.plotOptions) == null ? void 0 : _b.treemap) == null ? void 0 : _c.nested) == null ? void 0 : _d.drilldownAsLevels);\n}\nfunction isNestedTreemap(w2, series) {\n  var _a, _b, _c;\n  const nestedCfg = (_c = (_b = (_a = w2 == null ? void 0 : w2.config) == null ? void 0 : _a.plotOptions) == null ? void 0 : _b.treemap) == null ? void 0 : _c.nested;\n  if (nestedCfg && nestedCfg.enabled === false) return false;\n  return hasNesting(series, { drilldown: drilldownAsLevels(w2) });\n}\nfunction annotate(roots) {\n  const leaves = [];\n  let maxDepth = 0;\n  roots.forEach((root, si) => {\n    const seriesLeaves = [];\n    const walk = (node, depth, parent) => {\n      node._parent = parent;\n      node._depth = depth;\n      node._si = si;\n      node._leaf = !(node.children && node.children.length);\n      if (depth > maxDepth) maxDepth = depth;\n      if (node._leaf) {\n        node._di = seriesLeaves.length;\n        seriesLeaves.push(node);\n      } else {\n        node._di = -1;\n        node.children.forEach(\n          (c2) => walk(c2, depth + 1, node)\n        );\n      }\n    };\n    walk(root, 0, null);\n    leaves.push(seriesLeaves);\n  });\n  return { leaves, maxDepth };\n}\nfunction leafRow(node) {\n  const d = node._datum;\n  if (d && typeof d === \"object\") {\n    const row = __spreadProps(__spreadValues({}, d), { x: node.name, y: node.value });\n    delete row.children;\n    return row;\n  }\n  return { x: node.name, y: node.value };\n}\nfunction resolveTreemapTree(w2, series) {\n  const roots = buildSeriesRoots(w2, series, {\n    keepDatum: true,\n    expandDrilldown: drilldownAsLevels(w2)\n  });\n  roots.forEach(fillValues);\n  const { leaves, maxDepth } = annotate(roots);\n  const leafSeries = series.map((s2, i2) => __spreadProps(__spreadValues({}, s2), {\n    data: (leaves[i2] || []).map(leafRow)\n  }));\n  return { roots, leafSeries, maxDepth };\n}\nfunction getTreemapRoots(w2) {\n  const stashed = w2.globals.treemapRoots;\n  if (stashed && stashed.length) {\n    return {\n      roots: stashed,\n      maxDepth: w2.globals.treemapMaxDepth || 1,\n      nested: true\n    };\n  }\n  const roots = buildSeriesRoots(w2, w2.config.series, {\n    keepDatum: true,\n    expandDrilldown: false\n  });\n  roots.forEach(fillValues);\n  const { maxDepth } = annotate(roots);\n  return { roots, maxDepth, nested: false };\n}\nconst RAW_SAMPLE_TYPES = [\"histogram\"];\nclass Data {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   */\n  constructor(w2, { resetGlobals = () => {\n  }, isMultipleY = () => {\n  } } = {}) {\n    this.w = w2;\n    this.resetGlobals = resetGlobals;\n    this.isMultipleY = isMultipleY;\n    this.twoDSeries = [];\n    this.threeDSeries = [];\n    this.twoDSeriesX = [];\n    this.seriesGoals = [];\n    this._warnedMissingTransform = false;\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   * Typed single pass for the dominant [[x, y], ...] shape: scalar numeric or\n   * null y, no z, no OHLC tuples. One monomorphic loop fills preallocated\n   * x/y arrays and fuses the y-extrema scan that Range.getMinYMaxY would\n   * otherwise repeat over every value (the extrema entry is ref+length\n   * guarded, so any later reshaping of the series array simply falls back to\n   * the scan). Returns false untouched on any non-conforming point so the\n   * general loop below handles mixed/exotic data with unchanged output.\n   * @param {any[]} data\n   * @param {number} i\n   * @returns {boolean}\n   */\n  _fast2DArrayParse(data, i2) {\n    var _a, _b;\n    const n2 = data.length;\n    if (n2 === 0) return false;\n    const ys = new Array(n2);\n    const xs = new Array(n2);\n    let maxY = -Number.MAX_VALUE;\n    let lowestY = Number.MAX_VALUE;\n    let negMinY = Infinity;\n    let hasNulls = false;\n    let yDec = 0;\n    let xNumeric = true;\n    let minX = Infinity;\n    let maxX = -Infinity;\n    let xSorted = true;\n    let minXDiff = Infinity;\n    let prevX = NaN;\n    for (let j = 0; j < n2; j++) {\n      const point = data[j];\n      if (!Array.isArray(point) || point.length > 2) return false;\n      const x = point[0];\n      const y = point[1];\n      if (xNumeric) {\n        if (typeof x === \"number\") {\n          if (x === x) {\n            if (x < minX) minX = x;\n            if (x > maxX) maxX = x;\n          }\n          const d = x - prevX;\n          if (d > 0) {\n            if (d < minXDiff) minXDiff = d;\n          } else if (d < 0) {\n            xSorted = false;\n          }\n          prevX = x;\n        } else {\n          xNumeric = false;\n        }\n      }\n      if (typeof y === \"number\") {\n        if (y === y && y !== Infinity && y !== -Infinity) {\n          if (y > maxY) maxY = y;\n          if (y < lowestY) lowestY = y;\n          if (y < 0 && y < negMinY) negMinY = y;\n          if (!Number.isInteger(y)) {\n            const av = y < 0 ? -y : y;\n            if (av >= 1e-6 && av < 1e21) {\n              const str = \"\" + y;\n              const dot = str.indexOf(\".\");\n              const dec = dot === -1 ? 0 : str.length - dot - 1;\n              if (dec > yDec) yDec = dec;\n            } else {\n              const nv = Utils$1.noExponents(y);\n              if (Utils$1.isFloat(nv)) {\n                yDec = Math.max(yDec, nv.toString().split(\".\")[1].length);\n              }\n            }\n          }\n        } else {\n          hasNulls = true;\n        }\n      } else if (y === null) {\n        hasNulls = true;\n      } else {\n        return false;\n      }\n      ys[j] = y;\n      xs[j] = x;\n    }\n    this.twoDSeries = ys;\n    this.twoDSeriesX = xs;\n    this.w.axisFlags.dataFormatXNumeric = true;\n    const extrema = (_b = (_a = this.w.seriesData)._parsedExtrema) != null ? _b : _a._parsedExtrema = [];\n    extrema[i2] = {\n      ref: ys,\n      len: n2,\n      maxY,\n      lowestY,\n      negMinY,\n      hasNulls,\n      yDec,\n      xref: xs,\n      xNumeric,\n      minX,\n      maxX,\n      xSorted,\n      minXDiff\n    };\n    return true;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleFormat2DArray(ser, i2) {\n    const cnf = this.w.config;\n    const data = ser[i2].data;\n    const isBoxPlot = cnf.chart.type === \"boxPlot\" || /** @type {any} */\n    cnf.series[i2].type === \"boxPlot\";\n    if (!isBoxPlot && cnf.xaxis.type !== \"datetime\" && this._fast2DArrayParse(data, i2)) {\n      return;\n    }\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, i2) {\n    const cnf = this.w.config;\n    const gl = this.w.globals;\n    const dt = new DateTime(this.w);\n    const data = ser[i2].data;\n    let activeI = i2;\n    if (gl.collapsedSeriesIndices.indexOf(i2) > -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[i2] === \"undefined\") {\n        this.seriesGoals[i2] = [];\n      }\n      if (typeof point.goals !== \"undefined\" && Array.isArray(point.goals)) {\n        this.seriesGoals[i2].push(point.goals);\n      } else {\n        this.seriesGoals[i2].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, i2) {\n    let range = { start: [], end: [], rangeUniques: [] };\n    if (this.isFormat2DArray()) {\n      range = this.handleRangeDataFormat(\"array\", ser, i2);\n    } else if (this.isFormatXY()) {\n      range = this.handleRangeDataFormat(\"xy\", ser, i2);\n    }\n    this.w.rangeData.seriesRangeStart[i2] = range.start === void 0 ? [] : range.start;\n    this.w.rangeData.seriesRangeEnd[i2] = range.end === void 0 ? [] : range.end;\n    this.w.rangeData.seriesRange[i2] = 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   * Marks (#11) P3: fold a custom series' per-datum y-extent into the\n   * range-data slice so both bounds drive the y-axis scale. When `yExtent` is\n   * given it supplies the values a datum occupies (scalar or array => min/max\n   * across them); otherwise the datum's `y` is used (array => first/last,\n   * scalar => itself). The datum still carries a representative scalar `y`\n   * (folded by handleFormatXY into seriesData.series) that gates Range.\n   * @param {any[]} ser @param {number} i @param {Function|null} yExtent\n   */\n  handleCustomRangeData(ser, i2, yExtent) {\n    const data = ser[i2].data || [];\n    const start = [];\n    const end = [];\n    for (let j = 0; j < data.length; j++) {\n      const datum = data[j];\n      let lo;\n      let hi;\n      if (typeof yExtent === \"function\") {\n        let ext = yExtent(datum, j);\n        if (!Array.isArray(ext)) ext = [ext];\n        const nums = ext.map((v2) => Utils$1.parseNumber(v2)).filter((v2) => v2 !== null && !isNaN(v2));\n        lo = nums.length ? Math.min(...nums) : null;\n        hi = nums.length ? Math.max(...nums) : null;\n      } else {\n        const y = datum == null ? null : datum.y;\n        if (Array.isArray(y)) {\n          lo = Utils$1.parseNumber(y[0]);\n          hi = Utils$1.parseNumber(y[y.length - 1]);\n        } else {\n          lo = hi = Utils$1.parseNumber(y);\n        }\n      }\n      start.push(lo);\n      end.push(hi);\n    }\n    this.w.rangeData.seriesRangeStart[i2] = start;\n    this.w.rangeData.seriesRangeEnd[i2] = end;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleCandleStickBoxData(ser, i2) {\n    let ohlc = { o: [], h: [], m: [], l: [], c: [] };\n    if (this.isFormat2DArray()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"array\", ser, i2);\n    } else if (this.isFormatXY()) {\n      ohlc = this.handleCandleStickBoxDataFormat(\"xy\", ser, i2);\n    }\n    this.w.candleData.seriesCandleO[i2] = ohlc.o;\n    this.w.candleData.seriesCandleH[i2] = ohlc.h;\n    this.w.candleData.seriesCandleM[i2] = ohlc.m;\n    this.w.candleData.seriesCandleL[i2] = ohlc.l;\n    this.w.candleData.seriesCandleC[i2] = ohlc.c;\n    this.w.candleData.seriesBoxPoints[i2] = 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, i2) {\n    var _a, _b, _c, _d, _e, _f;\n    const w2 = this.w;\n    const data = ser[i2].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 v2 = Utils$1.parseNumber(dens[k][0]);\n        const wt = Utils$1.parseNumber(dens[k][1]);\n        if (v2 === null || wt === null) continue;\n        values.push(v2);\n        weights.push(wt);\n        if (wt > maxWeight) {\n          maxWeight = wt;\n          modeValue = v2;\n        }\n        if (v2 < minVal) minVal = v2;\n        if (v2 > maxVal) maxVal = v2;\n      }\n      const cleanPts = [];\n      for (let k = 0; k < pts.length; k++) {\n        const p2 = Utils$1.parseNumber(pts[k]);\n        if (p2 === null) continue;\n        cleanPts.push(p2);\n        if (p2 < minVal) minVal = p2;\n        if (p2 > maxVal) maxVal = p2;\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    w2.violinData.seriesViolinDensity[i2] = densityArr;\n    w2.violinData.seriesViolinPoints[i2] = pointsArr;\n    w2.violinData.seriesViolinMin[i2] = minArr;\n    w2.violinData.seriesViolinMax[i2] = maxArr;\n    this.twoDSeries = placeholders;\n  }\n  /**\n   * @param {string} format\n   * @param {any[]} ser\n   * @param {number} i\n   */\n  handleRangeDataFormat(format, ser, i2) {\n    const rangeStart = [];\n    const rangeEnd = [];\n    const uniqueKeysMap = /* @__PURE__ */ new Map();\n    const uniqueKeys = [];\n    ser[i2].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[i2].data.length; j++) {\n        if (Array.isArray(ser[i2].data[j])) {\n          rangeStart.push(ser[i2].data[j][1][0]);\n          rangeEnd.push(ser[i2].data[j][1][1]);\n        } else {\n          rangeStart.push(ser[i2].data[j]);\n          rangeEnd.push(ser[i2].data[j]);\n        }\n      }\n    } else if (format === \"xy\") {\n      for (let j = 0; j < ser[i2].data.length; j++) {\n        const isDataPoint2D = Array.isArray(ser[i2].data[j].y);\n        const id = Utils$1.randomId();\n        const x = ser[i2].data[j].x;\n        const y = {\n          y1: isDataPoint2D ? ser[i2].data[j].y[0] : ser[i2].data[j].y,\n          y2: isDataPoint2D ? ser[i2].data[j].y[1] : ser[i2].data[j].y,\n          rangeName: id\n        };\n        const gl = this.w.globals;\n        if (!gl.seriesRangeName) gl.seriesRangeName = {};\n        if (!gl.seriesRangeName[i2]) gl.seriesRangeName[i2] = {};\n        gl.seriesRangeName[i2][j] = 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, i2) {\n    const w2 = this.w;\n    const isBoxPlot = w2.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n    w2.config.series[i2].type === \"boxPlot\";\n    const serO = [];\n    const serH = [];\n    const serM = [];\n    const serL = [];\n    const serC = [];\n    const serPoints = [];\n    const data = ser[i2].data;\n    let getVals;\n    if (format === \"array\") {\n      const first = data[0];\n      const isFlat = isBoxPlot && first && first.length === 6 || !isBoxPlot && first && first.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    this.w.seriesData._parsedExtrema = [];\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((s2, i2) => {\n      if (s2.name !== void 0) {\n        this.w.seriesData.seriesNames.push(s2.name);\n      } else {\n        this.w.seriesData.seriesNames.push(\n          \"series-\" + parseInt(String(i2 + 1), 10)\n        );\n      }\n    });\n    this.coreUtils.setSeriesYAxisMappings();\n    const buckets = [];\n    const groups = [\n      ...new Set(cnf.series.map((s2) => s2.group))\n    ];\n    cnf.series.forEach((s2, i2) => {\n      const index = groups.indexOf(s2.group);\n      if (!buckets[index]) buckets[index] = [];\n      buckets[index].push(this.w.seriesData.seriesNames[i2]);\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 i2 = 0; i2 < ser.length; i2++) {\n      this.twoDSeries = [];\n      this.twoDSeriesX = [];\n      this.threeDSeries = [];\n      if (typeof ser[i2].data === \"undefined\") {\n        console.error(\n          \"It is a possibility that you may have not included 'data' property in series.\"\n        );\n        ser[i2] = __spreadProps(__spreadValues({}, ser[i2]), { data: [] });\n      }\n      const dr = cnf.chart.dataReducer;\n      const rawStash = (_b = (_a = gl.dataReducerRawSeries) == null ? void 0 : _a[i2]) == 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[i2] = __spreadProps(__spreadValues({}, ser[i2]), { data: reduced });\n      }\n      if (cnf.chart.type === \"rangeBar\" || cnf.chart.type === \"rangeArea\" || ser[i2].type === \"rangeBar\" || ser[i2].type === \"rangeArea\") {\n        this.w.axisFlags.isRangeData = true;\n        this.handleRangeData(ser, i2);\n      }\n      const customType = ser[i2].type || cnf.chart.type;\n      if (isCustom(customType)) {\n        const cls = (\n          /** @type {any} */\n          getChartClass(customType)\n        );\n        const yExtent = cls && cls.yExtent;\n        if (cls && cls.dataType === \"rangeXY\" || typeof yExtent === \"function\") {\n          this.w.axisFlags.isRangeData = true;\n          this.handleCustomRangeData(ser, i2, yExtent);\n        }\n      }\n      if (this.isMultiFormat()) {\n        if (this.isFormat2DArray()) {\n          this.handleFormat2DArray(ser, i2);\n        } else if (this.isFormatXY()) {\n          this.handleFormatXY(ser, i2);\n        }\n        if (cnf.chart.type === \"candlestick\" || ser[i2].type === \"candlestick\" || cnf.chart.type === \"boxPlot\" || ser[i2].type === \"boxPlot\") {\n          this.handleCandleStickBoxData(ser, i2);\n        }\n        if (cnf.chart.type === \"violin\" || ser[i2].type === \"violin\") {\n          this.handleViolinData(ser, i2);\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 (i2 === 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[i2].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[i2].color !== void 0) {\n        this.w.seriesData.seriesColors.push(ser[i2].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    this.w.seriesData.unitData = [];\n    const hasOldFormat = Array.isArray(ser) && ser.every((s2) => typeof s2 === \"number\") && cnf.labels.length > 0;\n    const hasNewFormat = Array.isArray(ser) && ser.some(\n      (s2) => s2 && typeof s2 === \"object\" && s2.data || s2 && typeof s2 === \"object\" && s2.parsing\n    );\n    if (cnf.chart.type === \"unit\" && hasNewFormat && !hasOldFormat) {\n      return this.parseUnitSeries(ser);\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 i2 = 0; i2 < this.w.seriesData.series.length; i2++) {\n        if (this.w.seriesData.seriesNames[i2] === void 0) {\n          this.w.seriesData.seriesNames.push(\"series-\" + (i2 + 1));\n        }\n      }\n      return this.w;\n    }\n    if (Array.isArray(ser) && ser.every((s2) => typeof s2 === \"number\")) {\n      this.w.seriesData.series = /** @type {any} */\n      ser.slice();\n      this.w.seriesData.seriesNames = [];\n      for (let i2 = 0; i2 < this.w.seriesData.series.length; i2++) {\n        this.w.seriesData.seriesNames.push(cnf.labels[i2] || `series-${i2 + 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 i2 = 0; i2 < this.w.seriesData.series.length; i2++) {\n      if (this.w.seriesData.seriesNames[i2] === void 0) {\n        this.w.seriesData.seriesNames.push(\"series-\" + (i2 + 1));\n      }\n    }\n    return this.w;\n  }\n  /**\n   * Parse the unit chart's per-unit object form:\n   *   series: [{ name, data: [datum, datum, ...] }, ...]\n   * Each category's dot count is `data.length` (one dot per datum), and the\n   * per-unit data is kept on `w.seriesData.unitData` so the renderer can colour\n   * dots individually and the tooltip can show each unit's own info.\n   * @param {any[]} ser\n   * @returns {any} w\n   */\n  parseUnitSeries(ser) {\n    const cnf = this.w.config;\n    const series = [];\n    const seriesNames = [];\n    const unitData = [];\n    ser.forEach((s2, i2) => {\n      var _a;\n      const data = s2 && Array.isArray(s2.data) ? s2.data : [];\n      series.push(data.length);\n      const name2 = s2 && s2.name !== void 0 && s2.name !== null ? s2.name : void 0;\n      seriesNames.push((_a = name2 != null ? name2 : cnf.labels[i2]) != null ? _a : `series-${i2 + 1}`);\n      unitData.push(data.slice());\n    });\n    this.w.seriesData.series = /** @type {any} */\n    series;\n    this.w.seriesData.seriesNames = seriesNames;\n    this.w.seriesData.unitData = unitData;\n    return this.w;\n  }\n  /**\n   * Reset parsing flags to allow re-parsing of data during updates\n   */\n  resetParsingFlags() {\n    const w2 = this.w;\n    w2.axisFlags.dataWasParsed = false;\n    w2.globals.originalSeries = null;\n    if (w2.config.series) {\n      w2.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            (p2, c2, i2, a2) => a2[p2].length > c2.length ? p2 : i2,\n            0\n          );\n          for (let i2 = 0; i2 < seriesDataFiltered[len].length; i2++) {\n            labelArr.push(i2 + 1);\n          }\n        } else {\n          for (let i2 = 0; i2 < this.w.seriesData.series[gl.maxValsInArrayIndex].length; i2++) {\n            labelArr.push(i2 + 1);\n          }\n        }\n      }\n      this.w.seriesData.seriesX = [];\n      for (let i2 = 0; i2 < ser.length; i2++) {\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 i2 = 0; i2 < ser.length; i2++) {\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((l2) => {\n        return cnf.xaxis.labels.formatter(l2);\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    const hasGlobalParsing = !!(globalParsing && (globalParsing.x || globalParsing.y || globalParsing.z));\n    const hasSeriesParsing = series.some(\n      (s2) => s2.parsing && (s2.parsing.x || s2.parsing.y || s2.parsing.z)\n    );\n    if (!hasGlobalParsing && !hasSeriesParsing) {\n      return series;\n    }\n    const processedSeries = series.map((serie, index) => {\n      var _a, _b, _c, _d, _e;\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        const missing = [];\n        if (!effectiveParsing.x) missing.push(\"x\");\n        if (!effectiveParsing.y || Array.isArray(effectiveParsing.y) && effectiveParsing.y.length === 0) {\n          missing.push(\"y\");\n        }\n        const seriesName = (_d = serie.name) != null ? _d : `series[${index}]`;\n        console.warn(\n          `ApexCharts [${this.w.globals.chartID}]: \"${seriesName}\" has a parseData config but is missing the '${missing.join(\n            \"', '\"\n          )}' field specification.`,\n          { parsing: (_e = serie.parsing) != null ? _e : globalParsing }\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 i2 = 0; i2 < keys.length; i2++) {\n      if (current === null || current === void 0 || typeof current !== \"object\") {\n        return void 0;\n      }\n      current = /** @type {any} */\n      current[keys[i2]];\n    }\n    return current;\n  }\n  /**\n   * Optional pre-parse series transform. A chart type whose series carries RAW\n   * observations rather than the values it draws (a histogram's sample, and in\n   * time a boxPlot's or a violin's) registers a transform through\n   * `apexcharts/features/stats`. Core keeps only this lookup, so a bundle that\n   * never asks for a raw-sample type never pays for the statistics.\n   *\n   * @param {any[]} ser\n   * @returns {any[]}\n   */\n  applySeriesTransform(ser) {\n    const cnf = this.w.config;\n    const name2 = cnf.chart.requestedType || cnf.chart.type;\n    const transform = getSeriesTransform(name2);\n    if (transform) return transform(ser, this.w);\n    if (!Array.isArray(ser) || RAW_SAMPLE_TYPES.indexOf(name2) === -1) return ser;\n    if (!this._warnedMissingTransform) {\n      this._warnedMissingTransform = true;\n      console.warn(\n        `ApexCharts: chart.type '${name2}' needs the stats feature. Add \\`import 'apexcharts/features/stats'\\`, or import from 'apexcharts/${name2}'.`\n      );\n    }\n    return ser.map((s2) => __spreadProps(__spreadValues({}, s2), { data: [] }));\n  }\n  /**\n   * Nested treemap: resolve a `children` hierarchy into the tree the renderer\n   * lays out, and return the leaves as a flat series.\n   *\n   * Everything downstream of here addresses a treemap by `(seriesIndex,\n   * dataPointIndex)` into a flat matrix, so the leaves are flattened in\n   * depth-first order and `dataPointIndex` keeps meaning \"the nth leaf of this\n   * series\". The tree itself goes on globals for the renderer.\n   *\n   * `cnf.series` is replaced with the flattened leaves further down parseData,\n   * which is the only copy that survives — so the nested input is stashed on\n   * the first parse and every later parse resolves from the stash, never from\n   * the already-flattened view. That is the same contract the histogram's raw\n   * observations and the downsampler's raw series use, and `_updateSeries`\n   * clears all three when the user pushes new data.\n   *\n   * @param {any[]} ser\n   * @returns {any[]}\n   */\n  flattenTreemapHierarchy(ser) {\n    const w2 = this.w;\n    const gl = w2.globals;\n    if (w2.config.chart.type !== \"treemap\" || !Array.isArray(ser)) return ser;\n    if (!gl.treemapRawSeries) {\n      if (!isNestedTreemap(w2, ser)) {\n        gl.treemapRoots = null;\n        return ser;\n      }\n      gl.treemapRawSeries = ser.map((s2) => __spreadProps(__spreadValues({}, s2), {\n        data: Array.isArray(s2 == null ? void 0 : s2.data) ? s2.data.slice() : s2 == null ? void 0 : s2.data\n      }));\n    }\n    const { roots, leafSeries, maxDepth } = resolveTreemapTree(\n      w2,\n      gl.treemapRawSeries\n    );\n    gl.treemapRoots = roots;\n    gl.treemapMaxDepth = maxDepth;\n    return leafSeries;\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      (s2) => Array.isArray(s2 == null ? void 0 : s2.data) && s2.data.some(\n        (d) => d && !Array.isArray(d) && Array.isArray(d.y)\n      )\n    );\n    if (!hasArrayY) {\n      if (cnf.xaxis.type !== \"datetime\") {\n        if (Array.isArray(cnf.xaxis.categories) && cnf.xaxis.categories.length) {\n          this._applyBandAxis(cnf.xaxis.categories.slice());\n        } else if (Array.isArray(cnf.xaxis._scatterBandLabels) && cnf.xaxis._scatterBandLabels.length) {\n          this._applyBandAxis(cnf.xaxis._scatterBandLabels);\n        }\n      }\n      return ser;\n    }\n    const bandLabels = [];\n    const bandIndex = /* @__PURE__ */ new Map();\n    ser.forEach((s2) => {\n      if (!Array.isArray(s2 == null ? void 0 : s2.data)) return;\n      s2.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((s2) => {\n      if (!Array.isArray(s2 == null ? void 0 : s2.data)) return s2;\n      const out = [];\n      s2.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({}, s2), { 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. The exception is an interactive\n   * zoom/pan window (w.interact.zoomed): its fractional bounds are snapped to\n   * whole bands so tick labels stay on band centers and edge bands are never\n   * half-cropped.\n   *\n   * @param {any[]} bandLabels\n   */\n  _applyBandAxis(bandLabels) {\n    var _a;\n    const xa = this.w.config.xaxis;\n    const n2 = bandLabels.length;\n    if (!n2) return;\n    const owned = (\n      /** @type {Record<string, boolean>} */\n      xa._scatterBand = xa._scatterBand || {}\n    );\n    xa._scatterBandLabels = bandLabels.slice();\n    xa.type = \"numeric\";\n    if (((_a = this.w.interact) == null ? void 0 : _a.zoomed) && typeof xa.min === \"number\" && typeof xa.max === \"number\" && isFinite(xa.min) && isFinite(xa.max)) {\n      const clampBand = (b2) => Math.max(0, Math.min(n2 - 1, b2));\n      let first = clampBand(Math.round(xa.min + 0.49));\n      let last = clampBand(Math.round(xa.max - 0.49));\n      if (last < first) {\n        first = last = clampBand(Math.round((xa.min + xa.max) / 2));\n      }\n      xa.min = first - 1;\n      xa.max = last + 1;\n      xa.tickAmount = last - first + 2;\n      owned.min = true;\n      owned.max = true;\n      owned.tick = true;\n    } else {\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 = n2;\n        owned.max = true;\n      }\n      if (xa.tickAmount == null || xa.tickAmount === \"dataPoints\" || owned.tick) {\n        xa.tickAmount = n2 + 1;\n        owned.tick = true;\n      }\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 r2 = Math.round(val);\n          return Math.abs(val - r2) < 1e-6 && bandLabels[r2] !== void 0 ? bandLabels[r2] : \"\";\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, _g;\n    const w2 = this.w;\n    const cnf = w2.config;\n    const gl = w2.globals;\n    ser = this.parseRawDataIfNeeded(ser);\n    ser = this.applySeriesTransform(ser);\n    ser = this.expandScatterJitterData(ser);\n    ser = this.flattenTreemapHierarchy(ser);\n    if (((_a = cnf.chart.dataReducer) == null ? void 0 : _a.enabled) && gl.axisCharts && !gl.dataReducerRawSeries) {\n      gl.dataReducerRawSeries = ser.map((s2) => ({\n        data: Array.isArray(s2 == null ? void 0 : s2.data) ? s2.data.slice() : s2 == null ? void 0 : s2.data\n      }));\n      let rawMinX = Infinity;\n      let rawMaxX = -Infinity;\n      for (const s2 of ser) {\n        const d = s2 == null ? void 0 : s2.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    if (gl.dataReducerRawSeries && ((_f = cnf.chart.dataReducer) == null ? void 0 : _f.enabled)) {\n      ser = ser.map((s2) => __spreadValues({}, s2));\n    }\n    cnf.series = ser;\n    if (gl.dataReducerRawSeries && ((_g = cnf.chart.dataReducer) == null ? void 0 : _g.enabled)) {\n      const stash = gl.dataReducerRawSeries;\n      gl.initialSeries = ser.map((s2, i2) => {\n        var _a2, _b2, _c2;\n        return __spreadProps(__spreadValues({}, s2), {\n          data: (_c2 = (_b2 = (_a2 = stash[i2]) == null ? void 0 : _a2.data) == null ? void 0 : _b2.slice()) != null ? _c2 : s2.data\n        });\n      });\n    } else if (gl.histogramRawSeries) {\n      gl.initialSeries = gl.histogramRawSeries;\n    } else if (gl.treemapRawSeries) {\n      gl.initialSeries = gl.treemapRawSeries;\n    } else {\n      gl.initialSeries = 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      Data._defineLazyResult(\n        this.w.seriesData,\n        \"stackedSeriesTotals\",\n        () => this.coreUtils.getStackedSeriesTotals()\n      );\n      Data._defineLazyResult(\n        this.w.seriesData,\n        \"stackedSeriesTotalsByGroups\",\n        () => this.coreUtils.getStackedSeriesTotalsByGroups()\n      );\n      Data._defineLazyResult(gl, \"seriesPercent\", () => {\n        this.coreUtils.getPercentSeries();\n        return gl.seriesPercent;\n      });\n    } else {\n      this.coreUtils.getPercentSeries();\n    }\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 l2 = 0; l2 < catLabels.length; l2++) {\n      if (Array.isArray(catLabels[l2])) {\n        this.w.axisFlags.isMultiLineX = true;\n        break;\n      }\n    }\n    return {\n      // w.seriesData (future slice)\n      // initialSeries/originalSeries and the stacked totals are deliberately\n      // ABSENT: they already live as lazy accessors on gl / w.seriesData, so\n      // a snapshot field would either force their materialization (a deep\n      // clone plus three O(n) passes per parse that most charts never need)\n      // or, as a delegating getter, recurse into itself when a writer copies\n      // it back onto the object it delegates to.\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        unitData: this.w.seriesData.unitData,\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  /**\n   * Define `key` on `obj` as a lazily computed property: `compute` runs on\n   * first read after this call and its result is cached; assigning to the\n   * property stores the assigned value directly (so code that writes the\n   * field, like getPercentSeries, keeps working). Re-calling resets the cache\n   * (used once per parse).\n   * @param {any} obj\n   * @param {string} key\n   * @param {() => any} compute\n   */\n  static _defineLazyResult(obj, key, compute) {\n    let has = false;\n    let value;\n    Object.defineProperty(obj, key, {\n      configurable: true,\n      enumerable: true,\n      get() {\n        if (!has) {\n          has = true;\n          value = compute();\n        }\n        return value;\n      },\n      set(v2) {\n        has = true;\n        value = v2;\n      }\n    });\n  }\n  /**\n   * @param {any[]} data\n   * @param {any} xmin\n   * @param {any} xmax\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 ? (p2) => p2.x : (p2) => p2[0];\n    let lo = 0;\n    if (xmin != null) {\n      let l2 = 0;\n      let r2 = len - 1;\n      while (l2 <= r2) {\n        const m2 = l2 + r2 >> 1;\n        if (getX(data[m2]) < xmin) l2 = m2 + 1;\n        else r2 = m2 - 1;\n      }\n      lo = Math.max(0, l2 - 1);\n    }\n    let hi = len;\n    if (xmax != null) {\n      let l2 = 0;\n      let r2 = len - 1;\n      while (l2 <= r2) {\n        const m2 = l2 + r2 >> 1;\n        if (getX(data[m2]) > xmax) r2 = m2 - 1;\n        else l2 = m2 + 1;\n      }\n      hi = Math.min(len, l2 + 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 ? (p2) => p2.x : (p2) => p2[0];\n    const getY = isXY ? (p2) => p2.y : (p2) => p2[1];\n    const sampled = [];\n    sampled.push(data[0]);\n    const bucketSize = (len - 2) / (targetPoints - 2);\n    let a2 = 0;\n    for (let i2 = 0; i2 < targetPoints - 2; i2++) {\n      const avgRangeStart = Math.floor((i2 + 1) * bucketSize) + 1;\n      const avgRangeEnd = Math.min(Math.floor((i2 + 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(i2 * bucketSize) + 1;\n      const rangeEnd = Math.min(Math.floor((i2 + 1) * bucketSize) + 1, len);\n      const pointAX = getX(data[a2]);\n      const pointAY = getY(data[a2]);\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      a2 = 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 ? (p2) => p2.x : (p2) => p2[0];\n    const getY = isXY ? (p2) => p2.y : (p2) => p2[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i2 = 0; i2 < targetPoints; i2++) {\n      const start = Math.floor(i2 * bucketSize);\n      const end = i2 === targetPoints - 1 ? len : Math.floor((i2 + 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 ? (p2) => p2.x : (p2) => p2[0];\n    const getY = isXY ? (p2) => p2.y : (p2) => p2[1];\n    const make = isXY ? (x, y) => ({ x, y }) : (x, y) => [x, y];\n    const out = [];\n    const bucketSize = len / targetPoints;\n    for (let i2 = 0; i2 < targetPoints; i2++) {\n      const start = Math.floor(i2 * bucketSize);\n      const end = i2 === targetPoints - 1 ? len : Math.floor((i2 + 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 v2 = y[k];\n          if (v2 == null || !isFinite(v2)) continue;\n          if (v2 < low) low = v2;\n          if (v2 > high) high = v2;\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 w2 = this.w;\n    const yAxisIndexes = [];\n    w2.globals.seriesYAxisMap.forEach((yAxisArr, yi) => {\n      let collapsedCount = 0;\n      yAxisArr.forEach((seriesIndex) => {\n        if (w2.globals.collapsedSeriesIndices.indexOf(seriesIndex) !== -1) {\n          collapsedCount++;\n        }\n      });\n      if (collapsedCount > 0 && collapsedCount == yAxisArr.length) {\n        yAxisIndexes.push(yi);\n      }\n    });\n    w2.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(w2, ctx) {\n    this.w = w2;\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, reject) => {\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 w2 = ch.w;\n        w2.globals.shouldAnimate = animate;\n        if (!redraw) {\n          w2.globals.resized = true;\n          w2.globals.dataChanged = true;\n          if (animate && w2.config.chart.animations.enabled) {\n            ch.series.getPreviousPaths();\n          }\n        }\n        const fromType = w2.config.chart.requestedType || w2.config.chart.type;\n        if (animate && options2 && typeof options2 === \"object\") {\n          const newType = (_a = options2 == null ? void 0 : options2.chart) == null ? void 0 : _a.type;\n          if (newType && newType !== fromType) {\n            (_b = ch.morphTypeChange) == null ? void 0 : _b.captureBeforeDestroy({\n              fromType,\n              toType: newType,\n              newSeries: options2.series || w2.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 = !!w2.config.chart.requestedType;\n          if (incomingType && !isAliasRequest && wasAlias) {\n            options2.chart = options2.chart || {};\n            options2.chart.requestedType = incomingType;\n            const prev = w2.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, w2);\n          if (ch.w.globals.chartID !== this.w.globals.chartID) {\n            delete options2.series;\n            delete options2.yaxis;\n          }\n          w2.config = Utils$1.extend(w2.config, options2);\n          Defaults.handOverTypeDefaults(w2.config, fromType, options2);\n          if (overwriteInitialConfig) {\n            w2.globals.lastXAxis = options2.xaxis ? Utils$1.clone(options2.xaxis) : [];\n            w2.globals.lastYAxis = options2.yaxis ? Utils$1.clone(options2.yaxis) : [];\n            w2.globals.initialConfig = Utils$1.extend({}, w2.config);\n            w2.globals.initialSeries = w2.config.series;\n          }\n          if (options2.series && (w2.globals.collapsedSeriesIndices.length > 0 || w2.globals.ancillaryCollapsedSeriesIndices.length > 0)) {\n            ch.series.reconcileCollapsedByName();\n          }\n        }\n        return ch.update(options2).then(() => {\n          if (chartIndex === charts.length - 1) {\n            resolve(ch);\n          }\n        }).catch(reject);\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, reject) => {\n      const w2 = this.w;\n      w2.globals.shouldAnimate = animate;\n      w2.globals.dataChanged = true;\n      const prevAxisScaleSig = JSON.stringify({\n        y: (w2.globals.yAxisScale || []).map((s2) => s2 ? s2.result : null),\n        xMin: w2.globals.minX,\n        xMax: w2.globals.maxX\n      });\n      PerformanceCache.invalidateSelectors(w2);\n      if (animate && w2.config.chart.animations.enabled) {\n        this.ctx.series.getPreviousPaths();\n      }\n      const prevSeriesCount = w2.config.series.length;\n      const prevDataLengths = w2.config.series.map(\n        (s2) => {\n          var _a, _b;\n          return (_b = (_a = s2 == null ? void 0 : s2.data) == null ? void 0 : _a.length) != null ? _b : 0;\n        }\n      );\n      if (overwriteInitialSeries) {\n        w2.globals.dataReducerRawSeries = null;\n        w2.globals.histogramRawSeries = null;\n        w2.globals.treemapRawSeries = null;\n      }\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 (w2.globals.initialConfig) {\n          w2.globals.initialConfig.series = w2.config.series;\n        }\n        w2.globals.initialSeries = w2.config.series;\n      }\n      if (this._canUseFastPath(newSeries, prevSeriesCount, prevDataLengths, w2)) {\n        return this.ctx.fastUpdate(animate, prevAxisScaleSig).then(() => {\n          resolve(this.ctx);\n        }).catch(reject);\n      }\n      if (this.ctx._updateStats) this.ctx._updateStats.full++;\n      return this.ctx.update().then(() => {\n        resolve(this.ctx);\n      }).catch(reject);\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   * - Per-series data lengths unchanged (the fast path preserves the axis DOM,\n   *   and a changed point count re-slots categories/ticks: with explicit\n   *   categories the axis-scale signature can still match, leaving a stale\n   *   ruler under the re-slotted marks; length changes also want the full\n   *   render so enter/exit and axis transitions run)\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 {number[]} prevDataLengths\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  _canUseFastPath(newSeries, prevSeriesCount, prevDataLengths, w2) {\n    if (!w2.dom.elGraphical) return false;\n    if (!w2.globals.axisCharts) return false;\n    if (newSeries.length !== prevSeriesCount) return false;\n    if (newSeries.some(\n      (s2, i2) => {\n        var _a, _b;\n        return ((_b = (_a = s2 == null ? void 0 : s2.data) == null ? void 0 : _a.length) != null ? _b : 0) !== prevDataLengths[i2];\n      }\n    )) {\n      return false;\n    }\n    if (w2.globals.collapsedSeries.length > 0) return false;\n    if (w2.globals.ancillaryCollapsedSeries.length > 0) return false;\n    if (w2.globals.risingSeries.length > 0) return false;\n    if (w2.globals.comboCharts) return false;\n    if (w2.interact.zoomed) return false;\n    return true;\n  }\n  /**\n   * @param {any} s\n   * @param {number} i\n   */\n  _extendSeries(s2, i2) {\n    const w2 = this.w;\n    const ser = w2.config.series[i2];\n    return __spreadProps(__spreadValues(\n      {},\n      /** @type {Record<string,any>} */\n      w2.config.series[i2]\n    ), {\n      name: s2.name ? s2.name : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.name\n      ),\n      color: s2.color ? s2.color : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.color\n      ),\n      type: s2.type ? s2.type : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.type\n      ),\n      group: s2.group ? s2.group : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.group\n      ),\n      hidden: typeof s2.hidden !== \"undefined\" ? s2.hidden : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.hidden\n      ),\n      data: s2.data ? s2.data : (\n        /** @type {any} */\n        ser == null ? void 0 : ser.data\n      ),\n      zIndex: typeof s2.zIndex !== \"undefined\" ? s2.zIndex : i2\n    });\n  }\n  /**\n   * @param {number} seriesIndex\n   * @param {number} dataPointIndex\n   */\n  toggleDataPointSelection(seriesIndex, dataPointIndex) {\n    const w2 = this.w;\n    let elPath = null;\n    const parent = `.apexcharts-series[data\\\\:realIndex='${seriesIndex}']`;\n    if (w2.globals.axisCharts) {\n      elPath = w2.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 = w2.dom.Paper.findOne(`${parent} path[j='${seriesIndex}']`);\n        if (w2.config.chart.type === \"pie\" || w2.config.chart.type === \"polarArea\" || w2.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 w2 = this.w;\n    const minmax = [\"min\", \"max\"];\n    minmax.forEach((a2) => {\n      if (typeof options2.xaxis[a2] !== \"undefined\") {\n        w2.config.xaxis[a2] = options2.xaxis[a2];\n        w2.globals.lastXAxis[a2] = options2.xaxis[a2];\n      }\n    });\n    if (options2.xaxis.categories && options2.xaxis.categories.length) {\n      w2.config.xaxis.categories = options2.xaxis.categories;\n    }\n    if (w2.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 w2 = this.w;\n    let xaxis = w2.globals.lastXAxis;\n    let yaxis = w2.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    w2.config.xaxis.min = _xaxis.min;\n    w2.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        w2.config.yaxis[index].min = _y.min;\n        w2.config.yaxis[index].max = _y.max;\n      }\n    };\n    w2.config.yaxis.map((yaxe, index) => {\n      if (w2.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 AxisMapping {\n  /**\n   * Pixels per data-unit on the x-axis. Derived from `minX..maxX` so it is the\n   * exact inverse used by both {@link dataXToPx} and {@link pxToDataX}.\n   * @param {import('../types/internal').ChartStateW} w\n   * @returns {number}\n   */\n  static xRatio(w2) {\n    const gw = w2.layout.gridWidth || 1;\n    return (w2.globals.maxX - w2.globals.minX) / gw;\n  }\n  /**\n   * Data-x -> pixels from the plot origin (usable as an SVG `x` attribute).\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} dataX\n   * @returns {number}\n   */\n  static dataXToPx(w2, dataX) {\n    return (dataX - w2.globals.minX) / AxisMapping.xRatio(w2);\n  }\n  /**\n   * Pixels from the plot origin -> data-x. Feed it `screenX - svgLeft - translateX`.\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} px\n   * @returns {number}\n   */\n  static pxToDataX(w2, px) {\n    return w2.globals.minX + px * AxisMapping.xRatio(w2);\n  }\n  /**\n   * Client (screen) x -> pixels from the plot origin. The origin is the svg\n   * element's left edge plus `translateX`, never the `.apexcharts-grid` box\n   * (fact 2 above), so the result does not depend on what the grid happens to\n   * render. `svgWidth` is the unscaled width the svg was drawn at, so the ratio\n   * against the measured one is the CSS zoom of any container the chart sits in.\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {number} screenX\n   * @returns {number}\n   */\n  static screenXToPlotPx(w2, screenX) {\n    const baseEl = w2.dom.baseEl;\n    const svg = baseEl && baseEl.querySelector(\".apexcharts-svg\");\n    if (!svg) return screenX - w2.layout.translateX;\n    const svgRect = svg.getBoundingClientRect();\n    const zoom = w2.globals.svgWidth ? svgRect.width / w2.globals.svgWidth : 1;\n    return (screenX - svgRect.left) / (zoom || 1) - w2.layout.translateX;\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 w2 = this.w;\n    const seriesBound = elGrid.getBoundingClientRect();\n    const hoverWidth = w2.layout.gridWidth;\n    const hoverHeight = seriesBound.height;\n    let xDivisor = hoverWidth / (w2.globals.dataPoints - 1);\n    const yDivisor = hoverHeight / w2.globals.dataPoints;\n    const hasBars = this.hasBars();\n    if ((w2.globals.comboCharts || hasBars) && !w2.config.xaxis.convertedCatToNumeric) {\n      xDivisor = hoverWidth / w2.globals.dataPoints;\n    }\n    const hoverX = AxisMapping.screenXToPlotPx(w2, clientX);\n    const hoverY = clientY - seriesBound.top;\n    const edgePad = w2.globals.barPadForNumericAxis || 0;\n    const notInRect = hoverX < -edgePad || hoverY < 0 || hoverX > hoverWidth + edgePad || hoverY > hoverHeight;\n    if (notInRect) {\n      hoverArea.classList.remove(\"hovering-zoom\");\n      hoverArea.classList.remove(\"hovering-pan\");\n    } else {\n      if (w2.interact.zoomEnabled) {\n        hoverArea.classList.remove(\"hovering-pan\");\n        hoverArea.classList.add(\"hovering-zoom\");\n      } else if (w2.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 && !w2.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 = w2.globals.seriesXvalues.map(\n      (seriesXVal) => {\n        return seriesXVal.filter(\n          (s2) => Utils$1.isNumber(s2)\n        );\n      }\n    );\n    const seriesYValArr = w2.globals.seriesYvalues.map(\n      (seriesYVal) => {\n        return seriesYVal.filter(\n          (s2) => Utils$1.isNumber(s2)\n        );\n      }\n    );\n    if (w2.axisFlags.isXNumeric) {\n      closest = this.closestInMultiArray(\n        hoverX,\n        hoverY,\n        seriesXValArr,\n        seriesYValArr\n      );\n      capturedSeries = closest.index;\n      j = (_a = closest.j) != null ? _a : 0;\n      if (capturedSeries !== null && w2.globals.hasNullValues) {\n        seriesXValArr = w2.globals.seriesXvalues[capturedSeries];\n        closest = this.closestInArray(hoverX, seriesXValArr);\n        j = (_b = closest.j) != null ? _b : 0;\n      }\n    }\n    w2.interact.capturedSeriesIndex = capturedSeries === null ? -1 : capturedSeries;\n    if (!j || j < 1) j = 0;\n    if (w2.globals.isBarHorizontal) {\n      w2.interact.capturedDataPointIndex = jHorz;\n    } else {\n      w2.interact.capturedDataPointIndex = j;\n    }\n    return {\n      capturedSeries,\n      j: w2.globals.isBarHorizontal ? jHorz : j,\n      hoverX,\n      hoverY\n    };\n  }\n  /**\n   * @param {any[]} Xarrays\n   */\n  getFirstActiveXArray(Xarrays) {\n    const w2 = 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 a2 = 0; a2 < firstActiveSeriesIndex.length; a2++) {\n      if (firstActiveSeriesIndex[a2] !== -1 && w2.globals.collapsedSeriesIndices.indexOf(a2) === -1 && w2.globals.ancillaryCollapsedSeriesIndices.indexOf(a2) === -1) {\n        activeIndex = firstActiveSeriesIndex[a2];\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 w2 = this.w;\n    const isActiveSeries = (seriesIndex) => {\n      return w2.globals.collapsedSeriesIndices.indexOf(seriesIndex) === -1 && w2.globals.ancillaryCollapsedSeriesIndices.indexOf(seriesIndex) === -1;\n    };\n    const chartType = w2.config.chart.type;\n    const isLineArea = !w2.globals.comboCharts && (chartType === \"line\" || chartType === \"area\");\n    let closestDist = Infinity;\n    let closestSeriesIndex = null;\n    let closestPointIndex = null;\n    if (w2.globals.allSeriesHasEqualX) {\n      let bucketDistX = Infinity;\n      for (let i2 = 0; i2 < Xarrays.length; i2++) {\n        if (!isActiveSeries(i2)) continue;\n        const xArr = Xarrays[i2];\n        const yArr = Yarrays[i2];\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 i2 = 0; i2 < Xarrays.length; i2++) {\n            if (!isActiveSeries(i2)) continue;\n            const xArr = Xarrays[i2];\n            const yArr = Yarrays[i2];\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 = i2;\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 = i2;\n              }\n            }\n          }\n        } else {\n          let bestY = Infinity;\n          for (let i2 = 0; i2 < Xarrays.length; i2++) {\n            if (!isActiveSeries(i2)) continue;\n            const yVal = Yarrays[i2][closestPointIndex];\n            if (typeof yVal !== \"number\") continue;\n            const distY = Math.abs(hoverY - yVal);\n            if (distY < bestY) {\n              bestY = distY;\n              closestSeriesIndex = i2;\n            }\n          }\n        }\n      }\n      return {\n        index: closestSeriesIndex,\n        j: closestPointIndex\n      };\n    }\n    for (let i2 = 0; i2 < Xarrays.length; i2++) {\n      if (!isActiveSeries(i2)) {\n        continue;\n      }\n      const xArr = Xarrays[i2];\n      const yArr = Yarrays[i2];\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 = i2;\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 = i2;\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 t2 = lenSq === 0 ? 0 : ((px - ax) * dx + (py - ay) * dy) / lenSq;\n    if (t2 < 0) t2 = 0;\n    else if (t2 > 1) t2 = 1;\n    const cx = ax + t2 * dx;\n    const cy = ay + t2 * dy;\n    const ex = px - cx;\n    const ey = py - cy;\n    return { dist: Math.sqrt(ex * ex + ey * ey), t: t2 };\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 i2 = 0; i2 < arr.length; i2++) {\n      const newdiff = Math.abs(val - arr[i2]);\n      if (newdiff < diff) {\n        diff = newdiff;\n        currIndex = i2;\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 w2 = this.w;\n    const xSameForAllSeriesJArr = [];\n    const seriesX = w2.seriesData.seriesX.filter(\n      (s2) => typeof s2[0] !== \"undefined\"\n    );\n    if (seriesX.length > 0) {\n      for (let i2 = 0; i2 < seriesX.length - 1; i2++) {\n        if (typeof seriesX[i2][j] !== \"undefined\" && typeof seriesX[i2 + 1][j] !== \"undefined\") {\n          if (seriesX[i2][j] !== seriesX[i2 + 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, _d;\n    let sameLen = true;\n    const initialSeries = (\n      /** @type {any[]} */\n      ((_b = (_a = this.w.globals._initialSeriesPeek) != null ? _a : this.w.globals.initialSeries) == null ? void 0 : _b.filter(\n        /**\n         * @param {Record<string, any>} s\n         * @param {number} i\n         */\n        (s2, i2) => {\n          var _a2;\n          return !((_a2 = this.w.globals.collapsedSeriesIndices) == null ? void 0 : _a2.includes(i2));\n        }\n      )) || []\n    );\n    for (let i2 = 0; i2 < initialSeries.length - 1; i2++) {\n      if (!((_c = initialSeries[i2]) == null ? void 0 : _c.data) || !((_d = initialSeries[i2 + 1]) == null ? void 0 : _d.data)) return true;\n      if (initialSeries[i2].data.length !== initialSeries[i2 + 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((m2) => {\n        const realIndex = Number(m2.getAttribute(\"data:realIndex\"));\n        return this.w.globals.collapsedSeriesIndices.indexOf(realIndex) === -1;\n      });\n    }\n    markersWraps.sort((a2, b2) => {\n      var indexA = Number(a2.getAttribute(\"data:realIndex\"));\n      var indexB = Number(b2.getAttribute(\"data:realIndex\"));\n      return indexB < indexA ? 1 : indexB > indexA ? -1 : 0;\n    });\n    const markers = [];\n    markersWraps.forEach((m2) => {\n      markers.push(m2.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 w2 = this.w;\n    let hoverSize = w2.config.markers.hover.size;\n    if (hoverSize === void 0) {\n      hoverSize = w2.globals.markers.size[index] + w2.config.markers.hover.sizeOffset;\n    }\n    return hoverSize;\n  }\n  /**\n   * @param {string} state\n   */\n  toggleAllTooltipSeriesGroups(state) {\n    const w2 = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.allTooltipSeriesGroups.length === 0) {\n      ttCtx.allTooltipSeriesGroups = w2.dom.baseEl.querySelectorAll(\n        \".apexcharts-tooltip-series-group\"\n      );\n    }\n    const allTooltipSeriesGroups = ttCtx.allTooltipSeriesGroups;\n    for (let i2 = 0; i2 < allTooltipSeriesGroups.length; i2++) {\n      if (state === \"enable\") {\n        allTooltipSeriesGroups[i2].classList.add(\"apexcharts-active\");\n        allTooltipSeriesGroups[i2].style.display = w2.config.tooltip.items.display;\n      } else {\n        allTooltipSeriesGroups[i2].classList.remove(\"apexcharts-active\");\n        allTooltipSeriesGroups[i2].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: i2 = 0, j = null, y1, y2, e: e2 }) {\n    const w2 = this.w;\n    if (w2.config.tooltip.custom !== void 0) {\n      this.handleCustomTooltip({ i: i2, j, y1, y2, w: w2 });\n    } else {\n      this.toggleActiveInactiveSeries(shared, i2);\n    }\n    const values = this.getValuesToPrint({\n      i: i2,\n      j\n    });\n    this.printLabels({\n      i: i2,\n      j,\n      values,\n      ttItems,\n      shared,\n      e: e2\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: i2, j, values, ttItems, shared, e: e2 }) {\n    const w2 = this.w;\n    const { xVal, zVal, xAxisTTVal } = values;\n    const seriesLen = w2.seriesData.series.length;\n    const basePColor = j !== null && w2.config.plotOptions.bar.distributed ? w2.globals.colors[j] : w2.globals.colors[i2];\n    for (let t2 = 0; t2 < seriesLen; t2++) {\n      const tIndex = w2.config.tooltip.inverseOrder ? seriesLen - 1 - t2 : t2;\n      const row = this.computeSeriesRow({\n        i: i2,\n        j,\n        t: t2,\n        tIndex,\n        shared,\n        e: e2,\n        basePColor\n      });\n      this.DOMHandling({\n        i: i2,\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: i2, j, tIndex, shared, e: e2, basePColor }) {\n    const w2 = this.w;\n    let f = this.getFormatters(i2);\n    let pColor = basePColor;\n    let val;\n    let goalVals = (\n      /** @type {any[]} */\n      []\n    );\n    let seriesName = w2.config.chart.type === \"treemap\" ? f.yLbTitleFormatter(\n      String(\n        /** @type {any} */\n        w2.config.series[i2].data[j].x\n      ),\n      {\n        series: w2.seriesData.series,\n        seriesIndex: i2,\n        dataPointIndex: j,\n        w: w2\n      }\n    ) : this.getSeriesName({\n      fn: f.yLbTitleFormatter,\n      index: i2,\n      seriesIndex: i2,\n      j\n    });\n    if (w2.globals.axisCharts) {\n      if (shared) {\n        f = this.getFormatters(tIndex);\n        seriesName = this.getSeriesName({\n          fn: f.yLbTitleFormatter,\n          index: tIndex,\n          seriesIndex: i2,\n          j\n        });\n        pColor = w2.globals.colors[tIndex];\n        val = this.formatYValue(f, tIndex, j);\n        goalVals = this.formatGoalVals(f, tIndex, j);\n      } else {\n        pColor = this.resolvePatternColor(e2, pColor);\n        val = this.formatYValue(f, i2, j);\n        goalVals = this.formatGoalVals(f, i2, j);\n      }\n    }\n    if (j === null) {\n      val = f.yLbFormatter(w2.seriesData.series[i2], __spreadProps(__spreadValues({}, w2), {\n        seriesIndex: i2,\n        dataPointIndex: i2\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 w2 = this.w;\n    if (w2.axisFlags.isRangeData) {\n      return f.yLbFormatter((_b = (_a = w2.rangeData.seriesRangeStart) == null ? void 0 : _a[index]) == null ? void 0 : _b[j], {\n        series: w2.rangeData.seriesRangeStart,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w: w2\n      }) + \" - \" + f.yLbFormatter((_d = (_c = w2.rangeData.seriesRangeEnd) == null ? void 0 : _c[index]) == null ? void 0 : _d[j], {\n        series: w2.rangeData.seriesRangeEnd,\n        seriesIndex: index,\n        dataPointIndex: j,\n        w: w2\n      });\n    }\n    return f.yLbFormatter(w2.seriesData.series[index][j], {\n      series: w2.seriesData.series,\n      seriesIndex: index,\n      dataPointIndex: j,\n      w: w2\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 w2 = this.w;\n    const goals = (_a = w2.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: w2\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(e2, fallback) {\n    var _a, _b, _c;\n    const w2 = this.w;\n    const targetFill = (_a = e2 == null ? void 0 : e2.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 = w2.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(i2) {\n    const w2 = this.w;\n    let yLbFormatter = w2.formatters.yLabelFormatters[i2];\n    let yLbTitleFormatter;\n    if (w2.formatters.ttVal !== void 0) {\n      if (Array.isArray(w2.formatters.ttVal)) {\n        yLbFormatter = /** @type {any} */\n        w2.formatters.ttVal[i2] && /** @type {any} */\n        w2.formatters.ttVal[i2].formatter;\n        yLbTitleFormatter = /** @type {any} */\n        w2.formatters.ttVal[i2] && /** @type {any} */\n        w2.formatters.ttVal[i2].title && /** @type {any} */\n        w2.formatters.ttVal[i2].title.formatter;\n      } else {\n        yLbFormatter = /** @type {any} */\n        w2.formatters.ttVal.formatter;\n        if (typeof /** @type {any} */\n        w2.formatters.ttVal.title.formatter === \"function\") {\n          yLbTitleFormatter = /** @type {any} */\n          w2.formatters.ttVal.title.formatter;\n        }\n      }\n    } else {\n      yLbTitleFormatter = w2.config.tooltip.y.title.formatter;\n    }\n    if (typeof yLbFormatter !== \"function\") {\n      if (w2.formatters.yLabelFormatters[0]) {\n        yLbFormatter = w2.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 w2 = this.w;\n    return fn(String(w2.seriesData.seriesNames[index]), {\n      series: w2.seriesData.series,\n      seriesIndex,\n      dataPointIndex: j,\n      w: w2\n    });\n  }\n  /** @param {{ t?: any, j?: any, i?: any, ttItems?: any, values?: any, seriesName?: any, shared?: any, pColor?: any }} opts */\n  DOMHandling({ t: t2, j, ttItems, values, seriesName, shared, pColor }) {\n    const w2 = this.w;\n    const ttCtx = this.ttCtx;\n    const { val, goalVals, xVal, xAxisTTVal, zVal } = values;\n    if (!ttItems || !ttItems[t2]) return;\n    let ttItemsChildren = null;\n    ttItemsChildren = ttItems[t2].children;\n    if (w2.config.tooltip.fillSeriesColor) {\n      ttItems[t2].style.backgroundColor = pColor;\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    if (ttCtx.showTooltipTitle) {\n      if (ttCtx.tooltipTitle === null) {\n        ttCtx.tooltipTitle = w2.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[t2].querySelector(\n      \".apexcharts-tooltip-text-y-label\"\n    );\n    if (ttYLabel) {\n      ttYLabel.innerHTML = seriesName ? seriesName : \"\";\n    }\n    const ttYVal = ttItems[t2].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 (w2.config.tooltip.marker.fillColors && Array.isArray(w2.config.tooltip.marker.fillColors)) {\n        pColor = w2.config.tooltip.marker.fillColors[t2];\n      }\n      if (w2.config.tooltip.fillSeriesColor) {\n        ttItemsChildren[0].style.backgroundColor = pColor;\n      } else {\n        ttItemsChildren[0].style.color = pColor;\n      }\n    }\n    if (!w2.config.tooltip.marker.show) {\n      ttItemsChildren[0].style.display = \"none\";\n    }\n    const ttGLabel = ttItems[t2].querySelector(\n      \".apexcharts-tooltip-text-goals-label\"\n    );\n    const ttGVal = ttItems[t2].querySelector(\n      \".apexcharts-tooltip-text-goals-value\"\n    );\n    if (goalVals.length && w2.seriesData.seriesGoals[t2]) {\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 (w2.seriesData.seriesGoals[t2][j] && Array.isArray(w2.seriesData.seriesGoals[t2][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[t2].querySelector(\n        \".apexcharts-tooltip-text-z-label\"\n      );\n      ttZLabel.innerHTML = w2.config.tooltip.z.title;\n      const ttZVal = ttItems[t2].querySelector(\n        \".apexcharts-tooltip-text-z-value\"\n      );\n      ttZVal.innerHTML = typeof zVal !== \"undefined\" ? zVal : \"\";\n    }\n    if (shared && ttItemsChildren[0]) {\n      if (w2.config.tooltip.hideEmptySeries) {\n        const ttItemMarker = ttItems[t2].querySelector(\n          \".apexcharts-tooltip-marker\"\n        );\n        const ttItemText = ttItems[t2].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 || w2.globals.ancillaryCollapsedSeriesIndices.indexOf(t2) > -1 || w2.globals.collapsedSeriesIndices.indexOf(t2) > -1 || Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t2) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      } else {\n        ttItemsChildren[0].parentNode.style.display = w2.config.tooltip.items.display;\n      }\n    } else {\n      if (Array.isArray(ttCtx.tConfig.enabledOnSeries) && ttCtx.tConfig.enabledOnSeries.indexOf(t2) === -1) {\n        ttItemsChildren[0].parentNode.style.display = \"none\";\n      }\n    }\n  }\n  /**\n   * @param {boolean} shared\n   * @param {number} i\n   */\n  toggleActiveInactiveSeries(shared, i2) {\n    const w2 = this.w;\n    if (shared) {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"enable\");\n    } else {\n      this.tooltipUtil.toggleAllTooltipSeriesGroups(\"disable\");\n      const firstTooltipSeriesGroup = w2.dom.baseEl.querySelector(\n        `.apexcharts-tooltip-series-group-${i2}`\n      );\n      if (firstTooltipSeriesGroup) {\n        const ftsGroup = (\n          /** @type {HTMLElement} */\n          firstTooltipSeriesGroup\n        );\n        ftsGroup.classList.add(\"apexcharts-active\");\n        ftsGroup.style.display = w2.config.tooltip.items.display;\n      }\n    }\n  }\n  /** @param {{i: any, j: any}} opts */\n  getValuesToPrint({ i: i2, j }) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w2 = this.w;\n    const filteredSeriesX = w2.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: w2.seriesData.series,\n      seriesIndex: i2,\n      dataPointIndex: j,\n      w: w2\n    };\n    const zFormatter = w2.formatters.ttZFormatter;\n    if (j === null) {\n      val = w2.seriesData.series[i2];\n    } else {\n      if (w2.axisFlags.isXNumeric && w2.config.chart.type !== \"treemap\") {\n        xVal = filteredSeriesX[i2][j];\n        if (filteredSeriesX[i2].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          w2.config.series[i2].data[j] !== \"undefined\" ? (\n            /** @type {any} */\n            w2.config.series[i2].data[j].x\n          ) : \"\";\n        } else {\n          xVal = typeof w2.labelData.labels[j] !== \"undefined\" ? w2.labelData.labels[j] : \"\";\n        }\n      }\n    }\n    const bufferXVal = xVal;\n    if (w2.axisFlags.isXNumeric && w2.config.xaxis.type === \"datetime\") {\n      const xFormat = new Formatters(this.w);\n      xVal = xFormat.xLabelFormat(\n        /** @type {Function} */\n        w2.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 (w2.globals.isBarHorizontal) {\n        xVal = w2.formatters.yLabelFormatters[0](bufferXVal, customFormatterOpts);\n      } else {\n        xVal = (_c = (_b = (_a = w2.formatters).xLabelFormatter) == null ? void 0 : _b.call(_a, bufferXVal, customFormatterOpts)) != null ? _c : bufferXVal;\n      }\n    }\n    if (w2.config.tooltip.x.formatter !== void 0) {\n      xVal = (_f = (_e = (_d = w2.formatters).ttKeyFormatter) == null ? void 0 : _e.call(_d, bufferXVal, customFormatterOpts)) != null ? _f : bufferXVal;\n    }\n    if (w2.seriesData.seriesZ.length > 0 && w2.seriesData.seriesZ[i2].length > 0) {\n      zVal = zFormatter == null ? void 0 : zFormatter(w2.seriesData.seriesZ[i2][j], w2);\n    }\n    if (typeof w2.config.xaxis.tooltip.formatter === \"function\") {\n      xAxisTTVal = (_h = (_g = w2.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: i2, j, y1, y2, w: w2 }) {\n    const tooltipEl = this.ttCtx.getElTooltip();\n    let fn = w2.config.tooltip.custom;\n    if (Array.isArray(fn)) {\n      fn = fn[i2];\n    }\n    if (typeof fn !== \"function\") return;\n    const customTooltip = fn({\n      series: w2.seriesData.series,\n      seriesIndex: i2,\n      dataPointIndex: j,\n      y1,\n      y2,\n      w: w2\n    });\n    if (tooltipEl) {\n      const arrowEl = tooltipEl.querySelector(\".apexcharts-tooltip-arrow\");\n      if (typeof customTooltip === \"string\" || typeof customTooltip === \"number\") {\n        tooltipEl.innerHTML = String(customTooltip);\n      } else if (customTooltip != null && (customTooltip instanceof Element || typeof customTooltip.nodeName === \"string\")) {\n        tooltipEl.innerHTML = \"\";\n        tooltipEl.appendChild(customTooltip.cloneNode(true));\n      }\n      if (arrowEl) tooltipEl.appendChild(arrowEl);\n    }\n  }\n}\nconst ARROW_TIP_OVERHANG = 7;\nconst POINT_TIP_GAP = 0;\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 w2 = this.w;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    let x = cx - ttCtx.xcrosshairsWidth / 2;\n    const tickAmount = w2.labelData.labels.slice().length;\n    if (j !== null) {\n      x = w2.layout.gridWidth / tickAmount * j;\n    }\n    if (xcrosshairs !== null && !w2.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(w2.layout.gridHeight));\n      xcrosshairs.classList.add(\"apexcharts-active\");\n    }\n    if (x < 0) {\n      x = 0;\n    }\n    if (x > w2.layout.gridWidth) {\n      x = w2.layout.gridWidth;\n    }\n    if (ttCtx.isXAxisTooltipEnabled) {\n      let tx = x;\n      if (w2.config.xaxis.crosshairs.width === \"tickWidth\" || w2.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 w2 = 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 + w2.config.xaxis.tooltip.offsetY + w2.layout.translateY + 5 + w2.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 + w2.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          w2.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 w2 = this.w;\n    const ttCtx = this.ttCtx;\n    if (ttCtx.yaxisTTEls === null) {\n      ttCtx.yaxisTTEls = /** @type {any[]} */\n      [\n        ...w2.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 = w2.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        w2.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}'] .apexcharts-yaxis-texts-g`\n        )\n      );\n      const elWrapRect = w2.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 = w2.config.yaxis[index].opposite ? w2.globals.translateYAxisX[index] + GAP : w2.globals.translateYAxisX[index] - yAxisTTRect.width - GAP;\n      }\n      cy = cy - yAxisTTHeight / 2;\n      if (w2.globals.ignoreYAxisIndexes.indexOf(index) === -1 && cy > 0 && cy < w2.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 + w2.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 w2 = this.w;\n    const ttCtx = this.ttCtx;\n    const tooltipRect = ttCtx.tooltipRect;\n    const arrowEnabled = !!w2.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) || isNaN(cyNum)) return null;\n    const clearance = pointSize + (arrowEnabled ? ARROW_TIP_OVERHANG : 0) + POINT_TIP_GAP;\n    let x = cxNum + clearance;\n    const pointY = cyNum + w2.layout.translateY;\n    let y = arrowEnabled ? pointY - ttH / 2 + pointSize / 2 : cyNum + pointSize / 2;\n    let placement = \"right\";\n    if (x > w2.layout.gridWidth / 2) {\n      x = cxNum - ttW - clearance;\n      placement = \"left\";\n    }\n    if (x > w2.layout.gridWidth - ttW - 10) {\n      x = placement === \"left\" ? Math.min(w2.layout.gridWidth - ttW, x) : w2.layout.gridWidth - ttW;\n    }\n    if (x < -20) {\n      x = -20;\n    }\n    if (w2.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 > w2.layout.gridWidth / 2) {\n        x = x - ttW;\n        placement = \"left\";\n      } else {\n        placement = \"right\";\n      }\n      y = ttCtx.e.clientY + w2.layout.translateY - seriesBound.top;\n      if (y > w2.layout.gridHeight / 2) {\n        y = y - ttH;\n      }\n    } else {\n      if (!w2.globals.isBarHorizontal) {\n        if (arrowEnabled) {\n          const gridTop = w2.layout.translateY;\n          const gridBottom = w2.layout.translateY + w2.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 > w2.layout.gridHeight) {\n            y = w2.layout.gridHeight - ttH + w2.layout.translateY;\n          }\n        }\n      }\n    }\n    if (isNaN(x)) return null;\n    x = x + w2.layout.translateX;\n    const a11y = (_b = (_a = w2.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 = w2.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(i2, j) {\n    var _a;\n    const w2 = this.w;\n    const ttCtx = this.ttCtx;\n    if (w2.globals.markers.size[i2] > 0) {\n      const allPoints = w2.dom.baseEl.querySelectorAll(\n        ` .apexcharts-series[data\\\\:realIndex='${i2}'] .apexcharts-marker`\n      );\n      for (let p2 = 0; p2 < allPoints.length; p2++) {\n        if (parseInt((_a = allPoints[p2].getAttribute(\"rel\")) != null ? _a : \"0\", 10) === j) {\n          ttCtx.marker.resetPointsSize();\n          ttCtx.marker.enlargeCurrentPoint(j, allPoints[p2]);\n        }\n      }\n    } else {\n      ttCtx.marker.resetPointsSize();\n      this.moveDynamicPointOnHover(j, i2);\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 w2 = 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 = w2.globals.pointsArray;\n    const hoverSize = ttCtx.tooltipUtil.getHoverMarkerSize(capturedSeries);\n    const serType = (\n      /** @type {any} */\n      w2.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 = w2.dom.baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${capturedSeries}'] .apexcharts-series-markers path`\n    );\n    if (point && cy < w2.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 w2 = ttCtx.w;\n    let cx = 0;\n    let cy = 0;\n    let activeSeries = 0;\n    const pointsArr = w2.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 p2 = 0; p2 < w2.seriesData.series.length; p2++) {\n        const pointArr = pointsArr[p2];\n        if (w2.globals.comboCharts) {\n          if (typeof pointArr === \"undefined\") {\n            points.splice(p2, 0, null);\n          }\n        }\n        if (points[p2] && pointArr && pointArr.length) {\n          let pcy = pointsArr[p2][j][1];\n          let pcy2;\n          points[p2].setAttribute(\"cx\", cx);\n          const shape = (_b = points[p2].getAttribute(\"shape\")) != null ? _b : \"circle\";\n          if (w2.config.chart.type === \"rangeArea\" && !w2.globals.comboCharts) {\n            const rangeStartIndex = j + w2.seriesData.series[p2].length;\n            pcy2 = pointsArr[p2][rangeStartIndex][1];\n            const pcyDiff = Math.abs(pcy - pcy2) / 2;\n            pcy = pcy - pcyDiff;\n          }\n          if (pcy !== null && !isNaN(pcy) && pcy < w2.layout.gridHeight + hoverSize && pcy + hoverSize > 0) {\n            const path = graphics.getMarkerPath(cx, pcy, shape, hoverSize);\n            points[p2].setAttribute(\"d\", path);\n          } else {\n            points[p2].setAttribute(\"d\", \"\");\n          }\n        }\n      }\n    }\n    this.moveXCrosshairs(cx);\n    if (!ttCtx.fixedTooltip) {\n      this.moveTooltip(cx, cy || w2.layout.gridHeight, hoverSize);\n    }\n  }\n  /**\n   * @param {number} j\n   * @param {number} capturedSeries\n   */\n  moveStickyTooltipOverBars(j, capturedSeries) {\n    var _a, _b, _c, _d, _e;\n    const w2 = this.w;\n    const ttCtx = this.ttCtx;\n    let barLen = w2.globals.columnSeries ? (\n      /** @type {any} */\n      w2.globals.columnSeries.length\n    ) : w2.seriesData.series.length;\n    if (w2.config.chart.stacked) {\n      barLen = w2.globals.barGroups.length;\n    }\n    let i2 = barLen >= 2 && barLen % 2 === 0 ? Math.floor(barLen / 2) : Math.floor(barLen / 2) + 1;\n    if (w2.globals.isBarHorizontal) {\n      const series = new Series(this.w);\n      i2 = series.getActiveConfigSeriesIndex(\"desc\") + 1;\n    }\n    let jBar = w2.dom.baseEl.querySelector(\n      `.apexcharts-bar-series .apexcharts-series[rel='${i2}'] path[j='${j}'], .apexcharts-candlestick-series .apexcharts-series[rel='${i2}'] path[j='${j}'], .apexcharts-boxPlot-series .apexcharts-series[rel='${i2}'] path[j='${j}'], .apexcharts-violin-series .apexcharts-series[rel='${i2}'] path[j='${j}'], .apexcharts-rangebar-series .apexcharts-series[rel='${i2}'] path[j='${j}']`\n    );\n    if (!jBar && typeof capturedSeries === \"number\") {\n      jBar = w2.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 bc = null;\n    const bcc = (\n      /** @type {any} */\n      w2.globals.barCanvasCoords\n    );\n    if (!jBar && bcc) {\n      bc = typeof capturedSeries === \"number\" && ((_a = bcc[capturedSeries]) == null ? void 0 : _a[j]) || null;\n      if (!bc) {\n        for (const key in bcc) {\n          if ((_b = bcc[key]) == null ? void 0 : _b[j]) {\n            bc = bcc[key][j];\n            break;\n          }\n        }\n      }\n    }\n    let bcx = jBar ? parseFloat((_c = jBar.getAttribute(\"cx\")) != null ? _c : \"0\") : bc ? bc.cx : 0;\n    let bcy = jBar ? parseFloat((_d = jBar.getAttribute(\"cy\")) != null ? _d : \"0\") : bc ? bc.cy : 0;\n    const bw = jBar ? parseFloat((_e = jBar.getAttribute(\"barWidth\")) != null ? _e : \"0\") : bc ? bc.barWidth : 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 (w2.axisFlags.isXNumeric) {\n      if (jBar && !isBoxOrCandle) {\n        const center = this._datapointCenterXFromBars(j);\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 (!w2.globals.isBarHorizontal && !bc) {\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 (!w2.globals.isBarHorizontal) {\n      if (w2.config.tooltip.followCursor) {\n        bcy = ttCtx.e.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2;\n      } else {\n        if (bcy + ttCtx.tooltipRect.ttHeight + 15 > w2.layout.gridHeight) {\n          bcy = w2.layout.gridHeight;\n        }\n      }\n    } else {\n      bcy = bcy - ttCtx.tooltipRect.ttHeight;\n    }\n    if (!w2.globals.isBarHorizontal) {\n      this.moveXCrosshairs(bcx);\n    }\n    if (!ttCtx.fixedTooltip) {\n      if (w2.globals.isBarHorizontal && !w2.config.tooltip.followCursor) {\n        const placed = this.placeHorizontalSharedTooltip(j);\n        if (placed) return;\n      }\n      this.moveTooltip(bcx, bcy || w2.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   * @returns {number | null}\n   */\n  _datapointCenterXFromBars(j) {\n    var _a, _b;\n    const w2 = this.w;\n    const bars = w2.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 r2 = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r2.width === 0 && r2.height === 0) continue;\n      if (r2.left < unionLeft) unionLeft = r2.left;\n      if (r2.right > unionRight) unionRight = r2.right;\n    }\n    if (!isFinite(unionLeft)) return null;\n    return AxisMapping.screenXToPlotPx(w2, (unionLeft + unionRight) / 2);\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 w2 = 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 = w2.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 r2 = (\n        /** @type {Element} */\n        bar.getBoundingClientRect()\n      );\n      if (r2.width === 0 && r2.height === 0) continue;\n      if (r2.left < unionLeft) unionLeft = r2.left;\n      if (r2.right > unionRight) unionRight = r2.right;\n      if (r2.top < unionTop) unionTop = r2.top;\n      if (r2.bottom > unionBottom) unionBottom = r2.bottom;\n    }\n    if (!isFinite(unionLeft)) return false;\n    const ttW = ttCtx.tooltipRect.ttWidth || 0;\n    const ttH = ttCtx.tooltipRect.ttHeight || 0;\n    const rowCenterX = (unionLeft + unionRight) / 2 - gridRect.left + w2.layout.translateX;\n    const rowTopElWrap = unionTop - gridRect.top + w2.layout.translateY;\n    const rowBottomElWrap = unionBottom - gridRect.top + w2.layout.translateY;\n    const gridTop = w2.layout.translateY;\n    const gridBottom = w2.layout.translateY + w2.layout.gridHeight;\n    const gridLeft = w2.layout.translateX;\n    const gridRight = w2.layout.translateX + w2.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 w2 = 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        ...w2.dom.baseEl.querySelectorAll(\".apexcharts-series\")\n      ]\n    );\n    if (w2.config.chart.stacked) {\n      elsSeries.sort((a2, b2) => {\n        return parseFloat(a2.getAttribute(\"data:realIndex\")) - parseFloat(b2.getAttribute(\"data:realIndex\"));\n      });\n    }\n    for (let i2 = 0; i2 < elsSeries.length; i2++) {\n      const pointsMain = elsSeries[i2].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 ((w2.config.chart.type === \"line\" || w2.config.chart.type === \"area\") && !w2.globals.comboCharts && !w2.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$2, \"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 w2 = this.w;\n    let appliedSize = w2.config.markers.hover.size;\n    if (w2.config.chart.type !== \"bubble\") {\n      appliedSize = 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 (w2.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, appliedSize);\n    }\n  }\n  /**\n   * @param {number} j\n   */\n  enlargePoints(j) {\n    var _a, _b;\n    const w2 = this.w;\n    const me = this;\n    const ttCtx = this.ttCtx;\n    const col = j;\n    const points = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    let newSize = w2.config.markers.hover.size;\n    for (let p2 = 0; p2 < points.length; p2++) {\n      const rel = points[p2].getAttribute(\"rel\");\n      const index = points[p2].getAttribute(\"index\");\n      if (newSize === void 0) {\n        newSize = w2.globals.markers.size[\n          /** @type {any} */\n          index\n        ] + w2.config.markers.hover.sizeOffset;\n      }\n      if (col === parseInt(rel != null ? rel : \"0\", 10)) {\n        me.newPointSize(col, points[p2]);\n        const cx = (_a = points[p2].getAttribute(\"cx\")) != null ? _a : \"0\";\n        const cy = (_b = points[p2].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[p2]);\n      }\n    }\n  }\n  /**\n   * Resizes the hovered marker to its hover size and returns the size applied,\n   * so the caller can position the tooltip clear of the enlarged dot. Undefined\n   * when nothing was resized (a zero-size marker has nothing to clear).\n   * @param {any} rel\n   * @param {any} point\n   * @returns {number | undefined}\n   */\n  newPointSize(rel, point) {\n    const w2 = this.w;\n    let newSize = w2.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 = w2.globals.markers.size[index] + w2.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      return newSize;\n    }\n    return void 0;\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 w2 = this.w;\n    const points = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-series:not(.apexcharts-series-collapsed) .apexcharts-marker\"\n    );\n    for (let p2 = 0; p2 < points.length; p2++) {\n      const size = parseFloat(\n        (_a = points[p2].getAttribute(\"default-marker-size\")) != null ? _a : \"0\"\n      );\n      if (Utils$1.isNumber(size) && size > 0) {\n        const path = this.ttCtx.tooltipUtil.getPathFromPoint(points[p2], size);\n        points[p2].setAttribute(\"d\", path);\n      } else {\n        points[p2].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 w2 = this.w;\n    this.ttCtx = tooltipContext;\n    this.isVerticalGroupedRangeBar = !w2.globals.isBarHorizontal && w2.config.chart.type === \"rangeBar\" && w2.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(e2, attr) {\n    var _a;\n    return parseFloat(\n      /** @type {Element} */\n      (_a = e2.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: e2, opt, x, y, type }) {\n    var _a, _b;\n    const ttCtx = this.ttCtx;\n    const w2 = this.w;\n    const renderer = w2.globals.activeRenderer;\n    const canvasCells = type === \"heatmap\" && renderer && renderer.kind === \"canvas\" && typeof renderer.hitTest === \"function\";\n    let i2, j, cx, cy, width, height;\n    if (canvasCells) {\n      const seriesBound = opt.elGrid.getBoundingClientRect();\n      const clientX = e2.type === \"touchmove\" ? e2.touches[0].clientX : e2.clientX;\n      const clientY = e2.type === \"touchmove\" ? e2.touches[0].clientY : e2.clientY;\n      const hit = renderer.hitTest(\n        clientX - seriesBound.left,\n        clientY - seriesBound.top\n      );\n      if (!hit) {\n        return { x, y, noHit: true };\n      }\n      i2 = hit.seriesIndex;\n      j = hit.dataPointIndex;\n      cx = hit.x;\n      cy = hit.y;\n      width = hit.width;\n      height = hit.height;\n    } else if (e2.target.classList.contains(`apexcharts-${type}-rect`)) {\n      i2 = this.getAttr(e2, \"i\");\n      j = this.getAttr(e2, \"j\");\n      cx = this.getAttr(e2, \"cx\");\n      cy = this.getAttr(e2, \"cy\");\n      width = this.getAttr(e2, \"width\");\n      height = this.getAttr(e2, \"height\");\n    } else {\n      return { x, y };\n    }\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: opt.ttItems,\n      i: i2,\n      j,\n      shared: false,\n      e: e2\n    });\n    w2.interact.capturedSeriesIndex = i2;\n    w2.interact.capturedDataPointIndex = j;\n    ttCtx.tooltipPosition.moveXCrosshairs(cx + width / 2);\n    const tooltipEl = ttCtx.getElTooltip();\n    if (type === \"heatmap\" && w2.config.tooltip.arrow && !w2.config.tooltip.followCursor && tooltipEl) {\n      const elGridRect = opt.elGrid.getBoundingClientRect();\n      const elWrapRect = w2.dom.elWrap.getBoundingClientRect();\n      const gridOffsetXInElWrap = elGridRect.left - elWrapRect.left;\n      let clLeft, clTop, clRight, clBottom;\n      if (canvasCells) {\n        clLeft = cx;\n        clTop = cy;\n        clRight = cx + width;\n        clBottom = cy + height;\n      } else {\n        const r2 = e2.target.getBoundingClientRect();\n        clLeft = r2.left - elGridRect.left;\n        clTop = r2.top - elGridRect.top;\n        clRight = r2.right - elGridRect.left;\n        clBottom = r2.bottom - elGridRect.top;\n      }\n      const ttW = ttCtx.tooltipRect.ttWidth || 0;\n      const ttH = ttCtx.tooltipRect.ttHeight || 0;\n      const cellCenterXInElWrap = (clLeft + clRight) / 2 + gridOffsetXInElWrap;\n      const cellTopInElWrap = clTop + w2.layout.translateY;\n      const cellBottomInElWrap = clBottom + w2.layout.translateY;\n      const gridTop = w2.layout.translateY;\n      const gridBottom = w2.layout.translateY + w2.layout.gridHeight;\n      const gridLeft = gridOffsetXInElWrap;\n      const gridRight = gridOffsetXInElWrap + w2.layout.gridWidth;\n      let placement = \"top\";\n      let finalY = cellTopInElWrap - ttH - ARROW_TIP_OVERHANG;\n      if (finalY < gridTop) {\n        const belowTop = cellBottomInElWrap + ARROW_TIP_OVERHANG;\n        if (belowTop + ttH <= gridBottom) {\n          placement = \"bottom\";\n          finalY = belowTop;\n        } else {\n          finalY = gridTop;\n        }\n      }\n      let finalX = cellCenterXInElWrap - 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, cellCenterXInElWrap - finalX));\n      ttCtx.tooltipPosition.applyTooltipPosition(tooltipEl, {\n        x: finalX,\n        y: finalY,\n        placement,\n        arrowY: null,\n        arrowX\n      });\n      return { x: finalX, y: finalY, positioned: true };\n    }\n    x = cx + ttCtx.tooltipRect.ttWidth / 2 + width;\n    y = cy + ttCtx.tooltipRect.ttHeight / 2 - height / 2;\n    if (x > w2.layout.gridWidth / 2) {\n      x = cx - ttCtx.tooltipRect.ttWidth / 2 + width;\n    }\n    if (ttCtx.w.config.tooltip.followCursor) {\n      const seriesBound = w2.dom.elWrap.getBoundingClientRect();\n      x = ((_a = w2.interact.clientX) != null ? _a : 0) - seriesBound.left - (x > w2.layout.gridWidth / 2 ? ttCtx.tooltipRect.ttWidth : 0);\n      y = ((_b = w2.interact.clientY) != null ? _b : 0) - seriesBound.top - (y > w2.layout.gridHeight / 2 ? ttCtx.tooltipRect.ttHeight : 0);\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: e2, opt, x, y }) {\n    const w2 = this.w;\n    const ttCtx = this.ttCtx;\n    let i2;\n    let j;\n    if (e2.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      i2 = 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          i2 = parseInt(el.getAttribute(\"data:realIndex\"), 10);\n        }\n      }\n      ttCtx.tooltipLabels.drawSeriesTexts({\n        ttItems: opt.ttItems,\n        i: i2,\n        j,\n        shared: ttCtx.showOnIntersect ? false : w2.config.tooltip.shared,\n        e: e2\n      });\n      if (e2.type === \"mouseup\") {\n        ttCtx.markerClick(e2, i2, j);\n      }\n      w2.interact.capturedSeriesIndex = i2;\n      w2.interact.capturedDataPointIndex = j;\n      const arrowEnabled = !!w2.config.tooltip.arrow;\n      x = cx;\n      if (arrowEnabled) {\n        y = cy;\n      } else {\n        y = cy + w2.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 + w2.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: e2, opt }) {\n    var _a, _b, _c;\n    const w2 = 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 i2 = 0;\n    let strokeWidth;\n    const barXY = this.getBarTooltipXY({\n      e: e2,\n      opt\n    });\n    if (barXY.j === null && barXY.barHeight === 0 && barXY.barWidth === 0) {\n      return;\n    }\n    i2 = barXY.i;\n    const j = barXY.j;\n    w2.interact.capturedSeriesIndex = i2;\n    w2.interact.capturedDataPointIndex = j !== null ? j : w2.interact.capturedDataPointIndex;\n    if (w2.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars() || !w2.config.tooltip.shared) {\n      x = barXY.x;\n      y = barXY.y;\n      strokeWidth = Array.isArray(w2.config.stroke.width) ? w2.config.stroke.width[i2] : w2.config.stroke.width;\n      bx = x;\n    } else {\n      if (!w2.globals.comboCharts && !w2.config.tooltip.shared) {\n        bx = bx / 2;\n      }\n    }\n    if (isNaN(y)) {\n      y = w2.globals.svgHeight - ttCtx.tooltipRect.ttHeight;\n    }\n    if (x + ttCtx.tooltipRect.ttWidth > w2.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 = w2.dom.baseEl.querySelector(\n        \".apexcharts-tooltip:not(.apexcharts-annotation-tooltip)\"\n      );\n    }\n    if (!w2.config.tooltip.shared) {\n      if (w2.globals.comboBarCount > 0) {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx + strokeWidth / 2);\n      } else {\n        ttCtx.tooltipPosition.moveXCrosshairs(bx);\n      }\n    }\n    if (!ttCtx.fixedTooltip && (!w2.config.tooltip.shared || w2.globals.isBarHorizontal && ttCtx.tooltipUtil.hasBars())) {\n      y = y + w2.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 = !!w2.config.tooltip.arrow;\n        const { barAnchorXInGrid, barAnchorYInGrid, barRectInGrid } = barXY;\n        const elGridRect = (_a = ttCtx.getElGrid()) == null ? void 0 : _a.getBoundingClientRect();\n        const elWrapRect = w2.dom.elWrap.getBoundingClientRect();\n        const gridOffsetXInElWrap = elGridRect ? elGridRect.left - elWrapRect.left : w2.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 && w2.globals.isBarHorizontal && barRectInGrid != null) {\n          const gridTop = w2.layout.translateY;\n          const gridBottom = w2.layout.translateY + w2.layout.gridHeight;\n          const gridLeft = gridOffsetXInElWrap;\n          const gridRight = gridOffsetXInElWrap + w2.layout.gridWidth;\n          const barCenterXInElWrap = (barRectInGrid.left + barRectInGrid.right) / 2 + gridOffsetXInElWrap;\n          const barTopInElWrap = barRectInGrid.top + w2.layout.translateY;\n          const barBottomInElWrap = barRectInGrid.bottom + w2.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 + w2.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 + w2.layout.translateY;\n            finalY = barCenterYInElWrap - ttH / 2;\n            const gridTop = w2.layout.translateY;\n            const gridBottom = w2.layout.translateY + w2.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 + w2.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: e2, opt }) {\n    const w2 = this.w;\n    let j = null;\n    const ttCtx = this.ttCtx;\n    let i2 = 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 = e2.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 = e2.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 = w2.globals.isBarHorizontal ? rectCenterYInGrid : rectTopInGrid;\n      barRectInGrid = {\n        left: rectLeftInGrid,\n        top: rectTopInGrid,\n        right: rectLeftInGrid + bw,\n        bottom: rectTopInGrid + bh\n      };\n      const clientX = e2.type === \"touchmove\" ? e2.touches[0].clientX : e2.clientX;\n      j = parseInt(bar.getAttribute(\"j\"), 10);\n      i2 = 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 (w2.globals.comboCharts) {\n        i2 = parseInt(bar.parentNode.getAttribute(\"data:realIndex\"), 10);\n      }\n      const handleXForColumns = (x2) => {\n        if (w2.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: i2,\n        j,\n        y1: y1 ? parseInt(y1, 10) : null,\n        y2: y2 ? parseInt(y2, 10) : null,\n        shared: ttCtx.showOnIntersect ? false : w2.config.tooltip.shared,\n        e: e2\n      });\n      if (w2.config.tooltip.followCursor) {\n        if (w2.globals.isBarHorizontal) {\n          x = clientX - seriesBound.left + 15;\n          y = handleYForBars();\n        } else {\n          x = handleXForColumns(x);\n          y = e2.clientY - seriesBound.top - ttCtx.tooltipRect.ttHeight / 2 - 15;\n        }\n      } else {\n        if (w2.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: i2,\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 w2 = this.w;\n    const ttCtx = this.ttCtx;\n    const isBottom = w2.config.xaxis.position === \"bottom\";\n    ttCtx.xaxisOffY = isBottom ? w2.layout.gridHeight + 1 : -w2.layout.xAxisHeight - w2.config.xaxis.axisTicks.height + 3;\n    const tooltipCssClass = isBottom ? \"apexcharts-xaxistooltip apexcharts-xaxistooltip-bottom\" : \"apexcharts-xaxistooltip apexcharts-xaxistooltip-top\";\n    const renderTo = w2.dom.elWrap;\n    if (ttCtx.isXAxisTooltipEnabled) {\n      const xaxisTooltip = w2.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-\" + w2.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 = w2.config.xaxis.tooltip.style.fontFamily || w2.config.chart.fontFamily;\n        ttCtx.xaxisTooltipText.style.fontSize = w2.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 w2 = this.w;\n    const ttCtx = this.ttCtx;\n    for (let i2 = 0; i2 < w2.config.yaxis.length; i2++) {\n      const isRight = w2.config.yaxis[i2].opposite || w2.config.yaxis[i2].crosshairs.opposite;\n      ttCtx.yaxisOffX = isRight ? w2.layout.gridWidth + 1 : 1;\n      const tooltipCssClass = isRight ? `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i2} apexcharts-yaxistooltip-right` : `apexcharts-yaxistooltip apexcharts-yaxistooltip-${i2} apexcharts-yaxistooltip-left`;\n      const renderTo = w2.dom.elWrap;\n      const yaxisTooltip = w2.dom.baseEl.querySelector(\n        `.apexcharts-yaxistooltip.apexcharts-yaxistooltip-${i2}`\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-\" + w2.config.tooltip.theme\n        );\n        renderTo.appendChild(ttCtx.yaxisTooltip);\n        if (i2 === 0) ttCtx.yaxisTooltipText = [];\n        ttCtx.yaxisTooltipText[i2] = BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n        ttCtx.yaxisTooltipText[i2].classList.add(\n          \"apexcharts-yaxistooltip-text\"\n        );\n        ttCtx.yaxisTooltip.appendChild(\n          /** @type {any} */\n          ttCtx.yaxisTooltipText[i2]\n        );\n      }\n    }\n  }\n  /**\n   * @memberof Tooltip\n   **/\n  setXCrosshairWidth() {\n    var _a, _b;\n    const w2 = this.w;\n    const ttCtx = this.ttCtx;\n    const xcrosshairs = ttCtx.getElXCrosshairs();\n    ttCtx.xcrosshairsWidth = parseInt(w2.config.xaxis.crosshairs.width, 10);\n    if (!w2.globals.comboCharts) {\n      if (w2.config.xaxis.crosshairs.width === \"tickWidth\") {\n        const count = w2.labelData.labels.length;\n        ttCtx.xcrosshairsWidth = w2.layout.gridWidth / count;\n      } else if (w2.config.xaxis.crosshairs.width === \"barWidth\") {\n        const bar = w2.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 = w2.dom.baseEl.querySelector(\".apexcharts-bar-area\");\n      if (bar !== null && w2.config.xaxis.crosshairs.width === \"barWidth\") {\n        const barWidth = parseFloat((_b = bar.getAttribute(\"barWidth\")) != null ? _b : \"0\");\n        ttCtx.xcrosshairsWidth = barWidth;\n      } else {\n        if (w2.config.xaxis.crosshairs.width === \"tickWidth\") {\n          const count = w2.labelData.labels.length;\n          ttCtx.xcrosshairsWidth = w2.layout.gridWidth / count;\n        }\n      }\n    }\n    if (w2.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 w2 = this.w;\n    const ttCtx = this.ttCtx;\n    ttCtx.ycrosshairs = w2.dom.baseEl.querySelector(\".apexcharts-ycrosshairs\");\n    ttCtx.ycrosshairsHidden = w2.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 w2 = this.w;\n    const gl = w2.globals;\n    const yAxisSeriesArr = gl.seriesYAxisMap[index];\n    if (ttCtx.yaxisTooltips[index] && yAxisSeriesArr.length > 0) {\n      const lbFormatter = w2.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 (w2.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(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.tConfig = w2.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 = !w2.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 w2 = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    this.updateDimensionCache();\n    if (typeof ResizeObserver !== \"undefined\" && !w2.globals.resizeObserver) {\n      w2.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      w2.globals.resizeObserver.observe(tooltipEl);\n    }\n  }\n  updateDimensionCache() {\n    const w2 = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const rect = tooltipEl.getBoundingClientRect();\n    w2.globals.dimensionCache.tooltip = /** @type {any} */\n    {\n      width: rect.width,\n      height: rect.height,\n      lastUpdate: Date.now()\n    };\n  }\n  getCachedDimensions() {\n    const w2 = this.w;\n    if (w2.globals.dimensionCache.tooltip) {\n      const cache2 = (\n        /** @type {Record<string,any>} */\n        w2.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      w2.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(\n        \".apexcharts-tooltip:not(.apexcharts-annotation-tooltip)\"\n      )\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 w2 = this.w;\n    this.xyRatios = xyRatios;\n    this.isXAxisTooltipEnabled = w2.config.xaxis.tooltip.enabled && w2.globals.axisCharts;\n    this.yaxisTooltips = w2.config.yaxis.map((y) => {\n      return y.show && y.tooltip.enabled && w2.globals.axisCharts ? true : false;\n    });\n    this.allTooltipSeriesGroups = [];\n    if (!w2.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 (w2.config.tooltip.cssClass) {\n      tooltipEl.classList.add(w2.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 && w2.config.series.length > 1 && !w2.globals.isBarHorizontal && w2.config.chart.type !== \"heatmap\";\n    const shouldDrawArrow = this.tConfig.arrow && !this.tConfig.followCursor && !this.tConfig.fixed.enabled && !isSharedMulti && !this.tConfig.fillSeriesColor && w2.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 (w2.config.chart.accessibility.enabled && w2.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    w2.dom.elWrap.appendChild(tooltipEl);\n    if (w2.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 ((w2.globals.comboCharts || this.tConfig.intersect || w2.config.chart.type === \"rangeBar\") && !this.tConfig.shared) {\n      this.showOnIntersect = true;\n    }\n    if (w2.config.markers.size === 0 || w2.globals.markers.largestSize === 0) {\n      this.marker.drawDynamicPoints();\n    }\n    if (w2.globals.collapsedSeries.length === w2.seriesData.series.length) return;\n    this.dataPointsDividedHeight = w2.layout.gridHeight / w2.globals.dataPoints;\n    this.dataPointsDividedWidth = w2.layout.gridWidth / w2.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 || w2.config.chart.fontFamily;\n      this.tooltipTitle.style.fontSize = this.tConfig.style.fontSize;\n      tooltipEl.appendChild(this.tooltipTitle);\n    }\n    let ttItemsCnt = w2.seriesData.series.length;\n    if ((w2.globals.xyCharts || w2.globals.comboCharts) && this.tConfig.shared) {\n      if (!this.showOnIntersect) {\n        ttItemsCnt = w2.seriesData.series.length;\n      } else {\n        ttItemsCnt = 1;\n      }\n    }\n    this.legendLabels = w2.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 w2 = this.w;\n    const ttItems = [];\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return ttItems;\n    for (let i2 = 0; i2 < ttItemsCnt; i2++) {\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-${i2}`\n      );\n      gTxt.style.order = String(\n        w2.config.tooltip.inverseOrder ? ttItemsCnt - i2 : i2 + 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 (w2.config.tooltip.fillSeriesColor) {\n        point.style.backgroundColor = w2.globals.colors[i2];\n      } else {\n        point.style.color = w2.globals.colors[i2];\n      }\n      const mShape = w2.config.markers.shape;\n      let shape = mShape;\n      if (Array.isArray(mShape)) {\n        shape = mShape[i2];\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 || w2.config.chart.fontFamily;\n      gYZ.style.fontSize = this.tConfig.style.fontSize;\n      [\"y\", \"goals\", \"z\"].forEach((g2) => {\n        const gValText = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"div\"\n        );\n        gValText.classList.add(`apexcharts-tooltip-${g2}-group`);\n        const txtLabel = BrowserAPIs.createElementNS(\n          \"http://www.w3.org/1999/xhtml\",\n          \"span\"\n        );\n        txtLabel.classList.add(`apexcharts-tooltip-text-${g2}-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-${g2}-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 w2 = this.w;\n    const type = w2.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 isPolarMarkerChart = chartWithmarkers && !w2.globals.xyCharts;\n    const hoverArea = w2.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 (w2.globals.axisCharts) {\n      if (chartWithmarkers) {\n        points = w2.dom.baseEl.querySelectorAll(\n          \".apexcharts-series[data\\\\:longestSeries='true'] .apexcharts-marker\"\n        );\n      } else if (commonBar) {\n        points = w2.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 = w2.dom.baseEl.querySelectorAll(\n          \".apexcharts-series .apexcharts-heatmap, .apexcharts-series .apexcharts-treemap\"\n        );\n      }\n      if (points && points.length) {\n        for (let p2 = 0; p2 < points.length; p2++) {\n          tooltipY.push(points[p2].getAttribute(\"cy\"));\n          tooltipX.push(points[p2].getAttribute(\"cx\"));\n        }\n      }\n    }\n    const validSharedChartTypes = w2.globals.xyCharts && !this.showOnIntersect || w2.globals.comboCharts && !this.showOnIntersect || commonBar && this.tooltipUtil.hasBars() && this.tConfig.shared;\n    if (validSharedChartTypes) {\n      this.addPathsEventListeners([hoverArea], seriesHoverParams);\n    } else if (commonBar && !w2.globals.comboCharts || chartWithmarkers && this.showOnIntersect || isPolarMarkerChart) {\n      this.addDatapointEventsListeners(seriesHoverParams);\n    } else if (type === \"heatmap\" && w2.globals.activeRenderer && w2.globals.activeRenderer.kind === \"canvas\") {\n      this.addPathsEventListeners([hoverArea], seriesHoverParams);\n    } else if (!w2.globals.axisCharts || type === \"heatmap\" || type === \"treemap\") {\n      const seriesAll = w2.dom.baseEl.querySelectorAll(\".apexcharts-series\");\n      this.addPathsEventListeners(seriesAll, seriesHoverParams);\n    }\n    if (this.showOnIntersect) {\n      const lineAreaPoints = w2.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 w2 = 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 + w2.globals.svgWidth - ttWidth + 10;\n    }\n    if (fixed.indexOf(\"bottom\") > -1) {\n      y = y + w2.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 w2 = this.w;\n    const points = w2.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 p2 = 0; p2 < paths.length; p2++) {\n      const extendedOpts = {\n        paths: paths[p2],\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[p2].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, e2) {\n    const targetDelay = 20;\n    const timeSinceLastUpdate = Date.now() - this.lastHoverTime;\n    if (timeSinceLastUpdate >= targetDelay) {\n      this.seriesHover(opt, e2);\n    } else {\n      clearTimeout(this.seriesHoverTimeout);\n      this.seriesHoverTimeout = setTimeout(() => {\n        this.seriesHover(opt, e2);\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, e2) {\n    if (this.w.globals.isDestroyed) return;\n    this.lastHoverTime = Date.now();\n    let chartGroups = [];\n    const w2 = this.w;\n    const isCfMember = (chart) => {\n      var _a, _b, _c;\n      const link = (_c = (_b = (_a = chart == null ? void 0 : chart.w) == null ? void 0 : _a.config) == null ? void 0 : _b.chart) == null ? void 0 : _c.link;\n      return !!(link && typeof link.dimension === \"function\");\n    };\n    if (w2.config.chart.group && !isCfMember(this.ctx)) {\n      chartGroups = this.ctx.getSyncedCharts().filter((ch) => !isCfMember(ch));\n    }\n    if (w2.globals.axisCharts && (w2.globals.minX === -Infinity && w2.globals.maxX === Infinity || w2.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: e2\n          });\n        }\n      });\n    } else {\n      this.seriesHoverByContext({\n        chartCtx: this.ctx,\n        ttCtx: this.w.globals.tooltip,\n        opt,\n        e: e2\n      });\n    }\n  }\n  /** @param {{chartCtx: any, ttCtx: any, opt: any, e: any}} opts */\n  seriesHoverByContext({ chartCtx, ttCtx, opt, e: e2 }) {\n    const w2 = 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 = e2;\n    if (ttCtx.tooltipUtil.hasBars() && !w2.globals.comboCharts && !ttCtx.isBarShared) {\n      if (this.tConfig.onDatasetHover.highlightDataSeries) {\n        const series = new Series(chartCtx.w);\n        series.toggleSeriesOnHover(e2, e2.target.parentNode);\n      }\n    }\n    if (w2.globals.axisCharts) {\n      ttCtx.axisChartsTooltips({\n        e: e2,\n        opt,\n        tooltipRect: ttCtx.tooltipRect\n      });\n    } else {\n      ttCtx.nonAxisChartsTooltips({\n        e: e2,\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: e2, opt }) {\n    var _a;\n    const w2 = this.w;\n    let x, y;\n    if (!opt.elGrid) return;\n    const seriesBound = opt.elGrid.getBoundingClientRect();\n    const clientX = e2.type === \"touchmove\" ? e2.touches[0].clientX : e2.clientX;\n    const clientY = e2.type === \"touchmove\" ? e2.touches[0].clientY : e2.clientY;\n    this.clientY = clientY;\n    this.clientX = clientX;\n    w2.interact.capturedSeriesIndex = -1;\n    w2.interact.capturedDataPointIndex = -1;\n    if (clientY < seriesBound.top || clientY > seriesBound.top + seriesBound.height) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (w2.dom.elWrap.querySelector(\n      \".apexcharts-annotation-tooltip.apexcharts-active\"\n    )) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (Array.isArray(this.tConfig.enabledOnSeries) && !w2.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 (w2.config.chart.group) {\n      syncedCharts = this.ctx.getSyncedCharts();\n    }\n    const isStickyTooltip = w2.globals.xyCharts || w2.config.chart.type === \"bar\" && !w2.globals.isBarHorizontal && this.tooltipUtil.hasBars() && this.tConfig.shared || w2.globals.comboCharts && this.tooltipUtil.hasBars();\n    if (e2.type === \"mousemove\" || e2.type === \"touchmove\" || e2.type === \"mouseup\") {\n      if (w2.globals.collapsedSeries.length + w2.globals.ancillaryCollapsedSeries.length === w2.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        (b2) => {\n          return b2 === 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(e2, clientX, clientY, opt);\n      } else {\n        if (w2.config.chart.type === \"heatmap\" || w2.config.chart.type === \"treemap\") {\n          const markerXY = this.intersect.handleHeatTreeTooltip({\n            e: e2,\n            opt,\n            x,\n            y,\n            type: w2.config.chart.type\n          });\n          if (markerXY.noHit) {\n            this.handleMouseOut(opt);\n            return;\n          }\n          x = markerXY.x;\n          y = markerXY.y;\n          if (!markerXY.positioned) {\n            tooltipEl.style.left = x + \"px\";\n            tooltipEl.style.top = y + \"px\";\n          }\n        } else {\n          if (this.tooltipUtil.hasBars()) {\n            this.intersect.handleBarTooltip({\n              e: e2,\n              opt\n            });\n          }\n          if (this.tooltipUtil.hasMarkers(0)) {\n            this.intersect.handleMarkerTooltip({\n              e: e2,\n              opt,\n              x,\n              y\n            });\n          }\n        }\n      }\n      if (this.yaxisTooltips && this.yaxisTooltips.length) {\n        for (let yt = 0; yt < w2.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      w2.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      opt.tooltipEl.classList.add(\"apexcharts-active\");\n      if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.announcements.enabled) {\n        opt.tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n    } else if (e2.type === \"mouseout\" || e2.type === \"touchend\") {\n      this.handleMouseOut(opt);\n    }\n  }\n  /**\n   * Where a pie / donut / polarArea slice wants its tooltip anchored, in\n   * elWrap-relative pixels.\n   *\n   * Pie.js stamps the arc centroid on the path as `data:cx` / `data:cy`, in\n   * the slice's OWN user space: below the inner group's translate, and below\n   * the pie group's customScale. Reading those as if they were SVG-root\n   * coordinates silently drops both, and the inner translate is exactly the\n   * offset that centres a pie in a chart wider than it is tall, so on such a\n   * chart the tooltip landed a couple of hundred pixels to the left of the\n   * slice it described. The element's screen matrix accounts for every\n   * ancestor transform at once, including the translate a slice picks up while\n   * it is slid out on click.\n   *\n   * @param {any} el a slice path carrying data:cx / data:cy\n   * @returns {{x: number, y: number} | null} null when it carries neither\n   */\n  getSliceAnchor(el) {\n    var _a, _b;\n    const w2 = this.w;\n    const cx = parseFloat((_a = el == null ? void 0 : el.getAttribute(\"data:cx\")) != null ? _a : \"\");\n    const cy = parseFloat((_b = el == null ? void 0 : el.getAttribute(\"data:cy\")) != null ? _b : \"\");\n    if (isNaN(cx) || isNaN(cy)) return null;\n    const wrapBound = w2.dom.elWrap.getBoundingClientRect();\n    const ctm = typeof el.getScreenCTM === \"function\" ? el.getScreenCTM() : null;\n    if (!ctm) {\n      const svgBound = w2.dom.Paper.node.getBoundingClientRect();\n      return {\n        x: svgBound.left - wrapBound.left + cx,\n        y: svgBound.top - wrapBound.top + cy\n      };\n    }\n    return {\n      x: ctm.a * cx + ctm.c * cy + ctm.e - wrapBound.left,\n      y: ctm.b * cx + ctm.d * cy + ctm.f - wrapBound.top\n    };\n  }\n  // tooltip handling for pie/donuts\n  /** @param {{e: any, opt: any, tooltipRect: any}} opts */\n  nonAxisChartsTooltips({ e: e2, opt, tooltipRect }) {\n    var _a, _b, _c, _d;\n    const w2 = this.w;\n    const rel = opt.paths.getAttribute(\"rel\");\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const seriesBound = w2.dom.elWrap.getBoundingClientRect();\n    if (e2.type === \"mousemove\" || e2.type === \"touchmove\") {\n      w2.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n      tooltipEl.classList.add(\"apexcharts-active\");\n      if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.removeAttribute(\"aria-hidden\");\n      }\n      if (w2.config.chart.type === \"unit\") {\n        const unitDot = e2.target && typeof e2.target.closest === \"function\" ? e2.target.closest(\".apexcharts-unit-area\") : null;\n        if (!unitDot) return;\n        this.renderUnitTooltip(unitDot);\n      } else {\n        this.tooltipLabels.drawSeriesTexts({\n          ttItems: opt.ttItems,\n          i: parseInt(rel, 10) - 1,\n          shared: false\n        });\n      }\n      let x, y;\n      const arcPath = opt.paths.querySelector(\"path[data\\\\:cx]\") || opt.paths;\n      const anchor = w2.config.tooltip.intersect ? this.getSliceAnchor(arcPath) : null;\n      if (anchor) {\n        x = anchor.x - tooltipRect.ttWidth / 2;\n        y = anchor.y - tooltipRect.ttHeight - 10;\n      } else {\n        x = ((_a = w2.interact.clientX) != null ? _a : 0) - seriesBound.left - tooltipRect.ttWidth / 2;\n        y = ((_b = w2.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 (w2.config.legend.tooltipHoverFormatter) {\n        const legendFormatter = w2.config.legend.tooltipHoverFormatter;\n        const i2 = rel - 1;\n        const legendEl = (\n          /** @type {HTMLElement | undefined} */\n          (_c = this.legendLabels) == null ? void 0 : _c[i2]\n        );\n        if (!legendEl) return;\n        const legendName = legendEl.getAttribute(\"data:default-text\");\n        const text = legendFormatter(legendName, {\n          seriesIndex: i2,\n          dataPointIndex: i2,\n          w: w2\n        });\n        legendEl.innerHTML = text;\n      }\n    } else if (e2.type === \"mouseout\" || e2.type === \"touchend\") {\n      tooltipEl.classList.remove(\"apexcharts-active\");\n      w2.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n      if (w2.config.legend.tooltipHoverFormatter) {\n        (_d = this.legendLabels) == null ? void 0 : _d.forEach((l2) => {\n          const defaultText = l2.getAttribute(\"data:default-text\");\n          l2.innerHTML = decodeURIComponent(\n            defaultText != null ? defaultText : \"\"\n          );\n        });\n      }\n    }\n  }\n  /**\n   * Fill the tooltip for one hovered unit-chart dot. Each dot carries `i` (its\n   * category / series index) and `j` (its index within that category). The\n   * default body reads \"#<j+1> of <count>\"; `plotOptions.unit.tooltip.formatter`\n   * overrides just the body text (it is handed i/j so it can look up per-unit\n   * data), and the global `tooltip.custom` still overrides the whole markup.\n   * @param {Element} dotEl the hovered `.apexcharts-unit-area` node\n   */\n  renderUnitTooltip(dotEl) {\n    var _a, _b, _c, _d, _e;\n    const w2 = this.w;\n    const tooltipEl = this.getElTooltip();\n    if (!tooltipEl) return;\n    const i2 = parseInt(dotEl.getAttribute(\"i\") || \"0\", 10);\n    const j = parseInt(dotEl.getAttribute(\"j\") || \"0\", 10);\n    if (typeof w2.config.tooltip.custom === \"function\") {\n      this.tooltipLabels.handleCustomTooltip({ i: i2, j, y1: null, y2: null, w: w2 });\n      return;\n    }\n    const seriesName = w2.seriesData.seriesNames[i2] || `series-${i2 + 1}`;\n    const value = Math.round(Number(w2.seriesData.series[i2]) || 0);\n    const group = dotEl.parentNode;\n    const count = group && group.querySelectorAll ? group.querySelectorAll(\".apexcharts-unit-area\").length : value;\n    const unitOpts = w2.config.plotOptions.unit || {};\n    const unitValue = unitOpts.unitValue > 0 ? unitOpts.unitValue : 1;\n    const catData = w2.seriesData.unitData && w2.seriesData.unitData[i2];\n    const datum = catData ? catData[j] : void 0;\n    const datumObj = datum && typeof datum === \"object\" ? datum : null;\n    const color = datumObj && datumObj.fillColor || w2.globals.colors && w2.globals.colors[i2] || \"#008FFB\";\n    let body;\n    const fmt = unitOpts.tooltip && unitOpts.tooltip.formatter;\n    if (typeof fmt === \"function\") {\n      body = fmt({\n        seriesName,\n        seriesIndex: i2,\n        dataPointIndex: j,\n        count,\n        value,\n        unitValue,\n        datum,\n        color,\n        w: w2\n      });\n    } else if (datum !== void 0 && datum !== null) {\n      const label = datumObj ? (_c = (_b = (_a = datumObj.name) != null ? _a : datumObj.label) != null ? _b : datumObj.x) != null ? _c : null : null;\n      const dVal = datumObj ? (_e = (_d = datumObj.value) != null ? _d : datumObj.y) != null ? _e : null : datum;\n      body = label != null && dVal != null ? `${label}: ${dVal}` : label != null ? String(label) : dVal != null ? String(dVal) : `#${(j + 1).toLocaleString()} of ${count.toLocaleString()}`;\n    } else {\n      body = `#${(j + 1).toLocaleString()} of ${count.toLocaleString()}`;\n      if (unitValue !== 1) {\n        body += ` &middot; ${unitValue.toLocaleString()} per dot`;\n      }\n    }\n    const fontFamily = w2.config.chart.fontFamily || \"inherit\";\n    const fontSize = w2.config.tooltip.style && w2.config.tooltip.style.fontSize || \"12px\";\n    const arrowEl = tooltipEl.querySelector(\".apexcharts-tooltip-arrow\");\n    tooltipEl.innerHTML = `<div class=\"apexcharts-tooltip-title\" style=\"font-family: ${fontFamily}; font-size: ${fontSize};\">${seriesName}</div><div class=\"apexcharts-tooltip-series-group apexcharts-active\" style=\"display: flex;\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color: ${color};\"></span><div class=\"apexcharts-tooltip-text\" style=\"font-family: ${fontFamily}; font-size: ${fontSize};\"><div class=\"apexcharts-tooltip-y-group\"><span class=\"apexcharts-tooltip-text-y-value\">${body}</span></div></div></div>`;\n    if (arrowEl) tooltipEl.appendChild(arrowEl);\n    const rect = tooltipEl.getBoundingClientRect();\n    this.tooltipRect.ttWidth = rect.width;\n    this.tooltipRect.ttHeight = rect.height;\n  }\n  /**\n   * @param {Event} e\n   * @param {number} clientX\n   * @param {number} clientY\n   * @param {Record<string, any>} opt\n   */\n  handleStickyTooltip(e2, clientX, clientY, opt) {\n    const w2 = 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 && w2.globals.collapsedSeriesIndices.includes(capturedSeries != null ? capturedSeries : -1))\n      capturedSeries = null;\n    const edgePad = w2.globals.barPadForNumericAxis || 0;\n    if (capj.hoverX < -edgePad || capj.hoverX > w2.layout.gridWidth + edgePad) {\n      this.handleMouseOut(opt);\n      return;\n    }\n    if (capturedSeries !== null) {\n      this.handleStickyCapturedSeries(e2, capturedSeries != null ? capturedSeries : -1, opt, j != null ? j : 0);\n    } else {\n      if (this.tooltipUtil.isXoverlap(j != null ? j : 0) || w2.globals.isBarHorizontal) {\n        const firstVisibleSeries = w2.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s2, i2) => !w2.globals.collapsedSeriesIndices.includes(i2)\n        );\n        this.create(e2, 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(e2, capturedSeries, opt, j) {\n    const w2 = this.w;\n    if (!this.tConfig.shared) {\n      const ignoreNull = w2.seriesData.series[capturedSeries][j] === null;\n      if (ignoreNull) {\n        this.handleMouseOut(opt);\n        return;\n      }\n    }\n    if (typeof w2.seriesData.series[capturedSeries][j] !== \"undefined\") {\n      if (this.tConfig.shared && this.tooltipUtil.isXoverlap(j) && this.tooltipUtil.isInitialSeriesSameLen()) {\n        this.create(e2, this, capturedSeries, j, opt.ttItems);\n      } else {\n        this.create(e2, this, capturedSeries, j, opt.ttItems, false);\n      }\n    } else {\n      if (this.tooltipUtil.isXoverlap(j)) {\n        const firstVisibleSeries = w2.seriesData.series.findIndex(\n          /**\n           * @param {any} s\n           * @param {number} i\n           */\n          (s2, i2) => !w2.globals.collapsedSeriesIndices.includes(i2)\n        );\n        this.create(e2, this, firstVisibleSeries, j, opt.ttItems);\n      }\n    }\n  }\n  deactivateHoverFilter() {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const allPaths = w2.dom.Paper.find(`.apexcharts-bar-area`);\n    for (let b2 = 0; b2 < allPaths.length; b2++) {\n      graphics.pathMouseLeave(\n        /** @type {any} */\n        allPaths[b2],\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 w2 = this.w;\n    const xcrosshairs = this.getElXCrosshairs();\n    w2.dom.baseEl.classList.remove(\"apexcharts-tooltip-active\");\n    opt.tooltipEl.classList.remove(\"apexcharts-active\");\n    delete opt.tooltipEl.dataset.positioned;\n    if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.announcements.enabled) {\n      opt.tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n    }\n    this.deactivateHoverFilter();\n    if (w2.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          ...w2.dom.baseEl.querySelectorAll(\".apexcharts-yaxistooltip\")\n        ];\n      }\n      for (let i2 = 0; i2 < this.yaxisTTEls.length; i2++) {\n        this.yaxisTTEls[i2].classList.remove(\"apexcharts-active\");\n      }\n    }\n    if (w2.config.legend.tooltipHoverFormatter) {\n      (_b = this.legendLabels) == null ? void 0 : _b.forEach((l2) => {\n        const defaultText = l2.getAttribute(\"data:default-text\");\n        l2.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(e2, seriesIndex, dataPointIndex) {\n    const w2 = this.w;\n    if (typeof w2.config.chart.events.markerClick === \"function\") {\n      w2.config.chart.events.markerClick(e2, this.ctx, {\n        seriesIndex,\n        dataPointIndex,\n        w: w2\n      });\n    }\n    this.ctx.events.fireEvent(\"markerClick\", [\n      e2,\n      this.ctx,\n      { seriesIndex, dataPointIndex, w: w2 }\n    ]);\n  }\n  /**\n   * Marks (#11): whether the chart's type (or any series' type) is a registered\n   * custom series, whose marks live outside the built-in marker DOM.\n   * @returns {boolean}\n   */\n  _hasCustomSeries() {\n    const w2 = this.w;\n    if (isCustom(w2.config.chart.type)) return true;\n    const series = w2.config.series || [];\n    return series.some(\n      (s2) => s2 && s2.type && isCustom(s2.type)\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(e2, 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, _t, _u;\n    const w2 = this.w;\n    const ttCtx = context;\n    if (e2.type === \"mouseup\") {\n      this.markerClick(e2, capturedSeries, j);\n    }\n    if (shared === null) shared = this.tConfig.shared;\n    const hasMarkers = this.tooltipUtil.hasMarkers(capturedSeries);\n    const canvasMode = ((_b = (_a = this.ctx) == null ? void 0 : _a.renderer) == null ? void 0 : _b.kind) === \"canvas\";\n    const canvasNonBar = canvasMode && !this.tooltipUtil.hasBars();\n    const marksMode = !canvasMode && !hasMarkers && !this.tooltipUtil.hasBars() && this._hasCustomSeries();\n    const dynamicPoints = canvasNonBar || marksMode;\n    const bars = this.tooltipUtil.getElBars();\n    const handlePoints = () => {\n      if (w2.globals.markers.largestSize > 0 && !canvasMode) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n      }\n    };\n    if (w2.config.legend.tooltipHoverFormatter) {\n      const legendFormatter = w2.config.legend.tooltipHoverFormatter;\n      const els = (\n        /** @type {HTMLElement[]} */\n        Array.from((_c = this.legendLabels) != null ? _c : [])\n      );\n      els.forEach((l2) => {\n        const legendName = l2.getAttribute(\"data:default-text\");\n        l2.innerHTML = decodeURIComponent(legendName != null ? legendName : \"\");\n      });\n      for (let i2 = 0; i2 < els.length; i2++) {\n        const l2 = els[i2];\n        const lsIndex = parseInt((_d = l2.getAttribute(\"i\")) != null ? _d : \"\", 10);\n        const legendName = decodeURIComponent(\n          (_e = l2.getAttribute(\"data:default-text\")) != null ? _e : \"\"\n        );\n        const text = legendFormatter(legendName, {\n          seriesIndex: shared ? lsIndex : capturedSeries,\n          dataPointIndex: j,\n          w: w2\n        });\n        if (!shared) {\n          l2.innerHTML = lsIndex === capturedSeries ? text : legendName;\n          if (capturedSeries === lsIndex) {\n            break;\n          }\n        } else {\n          l2.innerHTML = w2.globals.collapsedSeriesIndices.indexOf(lsIndex) < 0 ? text : legendName;\n        }\n      }\n    }\n    const _rangeData = (\n      /** @type {any} */\n      w2.rangeData\n    );\n    const commonSeriesTextsParams = __spreadValues(__spreadValues({\n      ttItems,\n      i: capturedSeries,\n      j\n    }, ((_i = (_h = (_g = (_f = _rangeData.seriesRange) == null ? void 0 : _f[capturedSeries]) == null ? void 0 : _g[j]) == null ? void 0 : _h.y[0]) == null ? void 0 : _i.y1) !== void 0 && {\n      y1: (_m = (_l = (_k = (_j = _rangeData.seriesRange) == null ? void 0 : _j[capturedSeries]) == null ? void 0 : _k[j]) == null ? void 0 : _l.y[0]) == null ? void 0 : _m.y1\n    }), ((_q = (_p = (_o = (_n = _rangeData.seriesRange) == null ? void 0 : _n[capturedSeries]) == null ? void 0 : _o[j]) == null ? void 0 : _p.y[0]) == null ? void 0 : _q.y2) !== void 0 && {\n      y2: (_u = (_t = (_s = (_r = _rangeData.seriesRange) == null ? void 0 : _r[capturedSeries]) == null ? void 0 : _s[j]) == null ? void 0 : _t.y[0]) == null ? void 0 : _u.y2\n    });\n    if (shared) {\n      ttCtx.tooltipLabels.drawSeriesTexts(__spreadProps(__spreadValues({}, commonSeriesTextsParams), {\n        shared: this.showOnIntersect ? false : this.tConfig.shared\n      }));\n      if (hasMarkers || dynamicPoints) {\n        handlePoints();\n      } else if (this.tooltipUtil.hasBars()) {\n        if (canvasMode) {\n          ttCtx.tooltipPosition.moveStickyTooltipOverBars(j, capturedSeries);\n        }\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 = w2.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 b2 = 0; b2 < paths.length; b2++) {\n            graphics.pathMouseEnter(\n              /** @type {any} */\n              paths[b2],\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      } else if (dynamicPoints) {\n        ttCtx.tooltipPosition.moveDynamicPointOnHover(j, capturedSeries);\n      }\n    }\n  }\n}\nclass SvgRenderer {\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.kind = \"svg\";\n  }\n  // ── lifecycle (SVG builds its layer via the existing plotChartType flow) ──\n  beginSeries() {\n  }\n  present() {\n    return null;\n  }\n  clear() {\n  }\n  // ── emit primitives (delegate to Graphics: the canvas renderer mirrors\n  //    this exact surface) ──\n  /** @param {any} attrs */\n  group(attrs) {\n    return this.ctx.graphics.group(attrs);\n  }\n  /** @param {any} opts */\n  drawPath(opts) {\n    return this.ctx.graphics.drawPath(opts);\n  }\n  /** @param {any[]} args */\n  drawLine(...args) {\n    return this.ctx.graphics.drawLine(...args);\n  }\n  /** @param {any[]} args */\n  drawRect(...args) {\n    return this.ctx.graphics.drawRect(...args);\n  }\n  /**\n   * @param {number} r\n   * @param {any} attrs\n   */\n  drawCircle(r2, attrs) {\n    return this.ctx.graphics.drawCircle(r2, attrs);\n  }\n  /** @param {any} opts */\n  drawText(opts) {\n    return this.ctx.graphics.drawText(opts);\n  }\n  /**\n   * A series mark path (animation-aware). Faithful passthrough to Graphics.\n   * Note: the SVG emit path in the per-type draw() methods routes through\n   * `seriesEmitter`, which returns the caller's own `Graphics` in SVG mode: so\n   * this method is the interface contract surface (mirrored by the canvas\n   * renderer), not the hot path.\n   * @param {any} opts\n   */\n  renderPaths(opts) {\n    return this.ctx.graphics.renderPaths(opts);\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} opts\n   */\n  drawMarker(x, y, opts = {}) {\n    return this.ctx.graphics.drawMarker(x, y, opts);\n  }\n  // ── capabilities: SVG supports everything the interface enumerates ──\n  /** @param {string} _feature */\n  supports(_feature) {\n    return true;\n  }\n  // ── interaction: the DOM does this natively in SVG mode ──\n  hitTest() {\n    return null;\n  }\n  restyle() {\n  }\n  // ── export: SVG serializes directly; no bitmap to composite ──\n  toBitmap() {\n    return null;\n  }\n  destroy() {\n  }\n}\nconst RENDERER_REGISTRY_KEY = \"__apexcharts_renderers__\";\nfunction getRendererRegistry() {\n  const g2 = (\n    /** @type {any} */\n    globalThis\n  );\n  if (!g2[RENDERER_REGISTRY_KEY]) g2[RENDERER_REGISTRY_KEY] = /* @__PURE__ */ new Map();\n  return g2[RENDERER_REGISTRY_KEY];\n}\nclass RendererController {\n  /** Same Map as getRendererRegistry(); exposed for tests/tooling. */\n  static get _rendererRegistry() {\n    return getRendererRegistry();\n  }\n  /**\n   * @param {string} kind\n   * @param {(w: any, ctx: any) => any} factory\n   */\n  static registerRenderer(kind, factory) {\n    getRendererRegistry().set(kind, factory);\n  }\n  /**\n   * Remove a registered renderer backend (tests / hot-reload). Charts fall\n   * back to SVG on their next resolve().\n   * @param {string} kind\n   */\n  static unregisterRenderer(kind) {\n    getRendererRegistry().delete(kind);\n  }\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.svg = new SvgRenderer(w2, ctx);\n    this.active = this.svg;\n    this._activeKind = \"svg\";\n    this._instances = {};\n  }\n  /**\n   * The kind selection WANTS (before availability/fallback). Pure.\n   * @returns {import('../renderers/Renderer').RendererKind}\n   */\n  _desiredKind() {\n    const cfg = this.w.config.chart;\n    const mode = cfg.renderer || \"svg\";\n    if (!Environment.isBrowser()) return \"svg\";\n    if (mode === \"svg\") return \"svg\";\n    if (hasCanvasUnsupportedFeature(this.w)) return \"svg\";\n    if (mode === \"canvas\") return \"canvas\";\n    const marks = computeMarkCount(this.w);\n    const threshold = cfg.rendererThreshold || 8e3;\n    return marks >= threshold ? \"canvas\" : \"svg\";\n  }\n  /**\n   * Resolve + instantiate the active renderer and set `ctx.renderer`. Falls\n   * back to SVG (with a warning only when canvas was explicitly requested) if\n   * the desired backend is not registered.\n   * @returns {import('../renderers/Renderer').RendererKind}\n   */\n  resolve() {\n    const mode = this.w.config.chart.renderer || \"svg\";\n    const desired = this._desiredKind();\n    if (desired !== \"svg\") {\n      const factory = getRendererRegistry().get(desired);\n      if (factory) {\n        if (!this._instances[desired]) {\n          this._instances[desired] = factory(this.w, this.ctx);\n        }\n        this.active = this._instances[desired];\n        this._activeKind = desired;\n        this.ctx.renderer = this.active;\n        this.w.globals.activeRenderer = this.active;\n        return this._activeKind;\n      }\n      if (mode === desired) {\n        console.warn(\n          `[apexcharts] renderer:\"${desired}\" requested but that renderer is not bundled (import 'apexcharts/features/renderer-${desired}'); falling back to SVG.`\n        );\n      }\n    } else if (mode === \"canvas\" && hasCanvasUnsupportedFeature(this.w)) {\n      console.warn(\n        `[apexcharts] renderer:\"canvas\" requested but this chart uses a feature the canvas renderer does not render yet (gradient/pattern/image fill or a state color-matrix filter); falling back to SVG.`\n      );\n    }\n    this.active = this.svg;\n    this._activeKind = \"svg\";\n    this.ctx.renderer = this.active;\n    this.w.globals.activeRenderer = this.active;\n    return this._activeKind;\n  }\n  /** @returns {import('../renderers/Renderer').RendererKind} */\n  getActiveKind() {\n    return this._activeKind;\n  }\n  /** Destroy the owned non-SVG renderer instances (full chart destroy). */\n  teardown() {\n    for (const kind in this._instances) {\n      const r2 = this._instances[kind];\n      if (r2 && typeof r2.destroy === \"function\") r2.destroy();\n    }\n    this._instances = {};\n    this.active = this.svg;\n    this._activeKind = \"svg\";\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(a2, v2) {\n    if (typeof a2 === \"string\" && v2 === void 0) {\n      return this.node.getAttribute(a2);\n    }\n    const attrs = typeof a2 === \"string\" ? { [a2]: v2 } : a2;\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 i2 = 0; i2 < tspans.length; i2++) {\n        tspans[i2].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(v2) {\n    if (typeof v2 === \"object\") {\n      return this.attr(v2);\n    }\n    return this.attr(\"fill\", v2);\n  }\n  /**\n   * @param {any} v\n   */\n  stroke(v2) {\n    if (typeof v2 === \"object\") {\n      if (v2.color !== void 0) this.attr(\"stroke\", v2.color);\n      if (v2.width !== void 0) this.attr(\"stroke-width\", v2.width);\n      if (v2.dasharray !== void 0) this.attr(\"stroke-dasharray\", v2.dasharray);\n      if (v2.linecap !== void 0) this.attr(\"stroke-linecap\", v2.linecap);\n      if (v2.opacity !== void 0) this.attr(\"stroke-opacity\", v2.opacity);\n      return this;\n    }\n    return this.attr(\"stroke\", v2);\n  }\n  /**\n   * @param {number} w\n   * @param {number} h\n   */\n  size(w2, h2) {\n    return this.attr({ width: w2, height: h2 });\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    if (child && child.__isCanvasMark) return this;\n    this.node.appendChild(child.node || child);\n    return this;\n  }\n  /**\n   * @param {any} parent\n   */\n  addTo(parent) {\n    const p2 = parent.node || parent;\n    p2.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      (n2) => n2.instance || new SVGElement(n2)\n    );\n  }\n  /**\n   * @param {string} selector\n   */\n  findOne(selector) {\n    const n2 = this.node.querySelector(selector);\n    return n2 ? n2.instance || new SVGElement(n2) : 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((l2) => {\n        this.node.removeEventListener(l2.eventType, l2.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((l2) => {\n        if (l2.eventType === eventType) {\n          this.node.removeEventListener(l2.eventType, l2.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((l2) => {\n        if (l2.eventType === eventType && l2.handler === handler) {\n          this.node.removeEventListener(l2.eventType, l2.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((n2) => n2.nodeType === 1).map((n2) => n2.instance || new SVGElement(n2));\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 (e2) {\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`, `unfilter` and `filterer` are installed on the prototype by\n  // installFilterMethods() (svg/index.js). This stub only exists so a call\n  // before the filter module is installed fails with a clear message.\n  filterWith() {\n    throw new Error(\"Filter module not loaded\");\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$2, 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$2, \"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 s2 = BrowserAPIs.createElementNS(SVGNS$2, \"stop\");\n    s2.setAttribute(\"offset\", offset);\n    s2.setAttribute(\"stop-color\", color);\n    if (opacity !== void 0) s2.setAttribute(\"stop-opacity\", String(opacity));\n    this.node.appendChild(s2);\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, w2, h2, builder) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, \"pattern\");\n    super(node);\n    this._id = \"SvgjsPattern\" + ++patternCounter;\n    this.attr({\n      id: this._id,\n      width: w2,\n      height: h2,\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$2, \"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(w2, h2) {\n    const el = this._make(\"rect\");\n    if (w2 !== void 0) {\n      el.attr({ width: w2, height: h2 });\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$2, \"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$2, \"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$2, \"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\" && Environment.isBrowser()) {\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(w2, h2, builder) {\n    return new SVGPattern(this, w2, h2, builder);\n  }\n  /**\n   * @param {string} tag\n   */\n  _make(tag) {\n    const node = BrowserAPIs.createElementNS(SVGNS$2, 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$2, 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$2, \"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$2, \"filter\");\n    super(node);\n    this._id = \"SvgjsFilter\" + ++filterCounter;\n    this.attr(\"id\", this._id);\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 m2 = BrowserAPIs.createElementNS(SVGNS$2, \"feMerge\");\n    sources.forEach((src) => {\n      const mn = BrowserAPIs.createElementNS(SVGNS$2, \"feMergeNode\");\n      mn.setAttribute(\"in\", src);\n      m2.appendChild(mn);\n    });\n    this.filter.node.appendChild(m2);\n    return new SVGElement(m2);\n  }\n  /**\n   * @param {string} tag\n   * @param {Record<string, any>} attrs\n   */\n  _primitive(tag, attrs) {\n    const el = BrowserAPIs.createElementNS(SVGNS$2, 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$2, \"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}\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 = (e2) => {\n      if (e2.button && e2.button !== 0) return;\n      e2.stopPropagation();\n      const isTouch = e2.type === \"touchstart\";\n      const ev = isTouch ? e2.touches[0] : e2;\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 w2 = parseFloat(svgEl.getAttribute(\"width\")) || 0;\n        const h2 = 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 + w2 > constraints.maxX)\n          newX = constraints.maxX - w2;\n        if (constraints.maxY !== void 0 && newY + h2 > constraints.maxY)\n          newY = constraints.maxY - h2;\n        const box = {\n          x: newX,\n          y: newY,\n          w: w2,\n          h: h2,\n          x2: newX + w2,\n          y2: newY + h2\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        el._activeDrag = null;\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        el._activeDrag = { onMove, 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      if (el._activeDrag && Environment.isBrowser()) {\n        document.removeEventListener(\"mousemove\", el._activeDrag.onMove);\n        document.removeEventListener(\"touchmove\", el._activeDrag.onMove);\n        document.removeEventListener(\"mouseup\", el._activeDrag.onUp);\n        document.removeEventListener(\"touchend\", el._activeDrag.onUp);\n        el._activeDrag = null;\n      }\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$2, \"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$2, \"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 w2 = parseFloat(el.attr(\"width\")) || 0;\n      const h2 = 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 + w2 / 2, y],\n        b: [x + w2 / 2, y + h2],\n        l: [x, y + h2 / 2],\n        r: [x + w2, y + h2 / 2],\n        lt: [x, y],\n        rt: [x + w2, y],\n        lb: [x, y + h2],\n        rb: [x + w2, y + h2]\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 = (e2) => {\n        if (e2.button && e2.button !== 0) return;\n        e2.stopPropagation();\n        const isTouch = e2.type === \"touchstart\";\n        const ev = isTouch ? e2.touches[0] : e2;\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$2, \"svg\");\n  const svg = new SVGContainer(svgEl);\n  svg.attr({ xmlns: SVGNS$2 });\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      \"clearDrilldownCache\",\n      \"paper\",\n      \"getActiveRenderer\",\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: (...a2) => {\n        var _a;\n        return (_a = this.ctx.legend) == null ? void 0 : _a.legendHelpers.toggleDataSeries(...a2);\n      },\n      revertDefaultAxisMinMax: () => this.ctx.updateHelpers.revertDefaultAxisMinMax(),\n      updateSeries: (...a2) => this.ctx.updateHelpers._updateSeries(...a2)\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    this.ctx.rendererController = new RendererController(this.w, this.ctx);\n    this.ctx.renderer = this.ctx.rendererController.active;\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 w2 = this.w;\n    const ctx = this.ctx;\n    const ExportsCtor = reg.get(\"exports\");\n    ctx.exports = ExportsCtor ? new ExportsCtor(w2, ctx) : null;\n    const LegendCtor = reg.get(\"legend\");\n    ctx.legend = LegendCtor ? new LegendCtor(w2, ctx) : null;\n    const MorphCtor = reg.get(\"morphTypeChange\");\n    ctx.morphTypeChange = MorphCtor ? new MorphCtor(w2, ctx) : null;\n    const DrilldownCtor = reg.get(\"drilldown\");\n    ctx.drilldown = DrilldownCtor ? new DrilldownCtor(w2, ctx) : null;\n    const PerspectivesCtor = reg.get(\"perspectives\");\n    ctx.perspectives = PerspectivesCtor ? new PerspectivesCtor(w2, ctx) : null;\n    const StoryboardCtor = reg.get(\"storyboard\");\n    ctx.storyboard = StoryboardCtor ? new StoryboardCtor(w2, ctx) : null;\n    const HistoryCtor = reg.get(\"history\");\n    ctx.history = HistoryCtor ? new HistoryCtor(w2, ctx) : null;\n    const LinkedViewsCtor = reg.get(\"linkedViews\");\n    ctx.linkedViews = LinkedViewsCtor ? new LinkedViewsCtor(w2, ctx) : null;\n    const InkCtor = reg.get(\"ink\");\n    ctx.ink = InkCtor ? new InkCtor(w2, ctx) : null;\n    const MeasureCtor = reg.get(\"measure\");\n    ctx.measure = MeasureCtor ? new MeasureCtor(w2, ctx) : null;\n    const ContextMenuCtor = reg.get(\"contextMenu\");\n    ctx.contextMenu = ContextMenuCtor ? new ContextMenuCtor(w2, ctx) : null;\n    const WeaveCtor = reg.get(\"weave\");\n    ctx.weave = WeaveCtor ? new WeaveCtor(w2, ctx) : null;\n    const OSThemeCtor = reg.get(\"osThemeWatcher\");\n    ctx.osThemeWatcher = OSThemeCtor ? new OSThemeCtor(w2, 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(w2, 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(w2, 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(w2, 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    var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n    (_a = this.ctx.weave) == null ? void 0 : _a.teardown(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      (_b = this.ctx._keyboardNavigation) == null ? void 0 : _b.destroy();\n      this.ctx._keyboardNavigation = null;\n    } else {\n      (_c = this.ctx.perspectives) == null ? void 0 : _c.teardown();\n      this.ctx.perspectives = null;\n      (_d = this.ctx.storyboard) == null ? void 0 : _d.teardown();\n      this.ctx.storyboard = null;\n      (_e = this.ctx.history) == null ? void 0 : _e.teardown();\n      this.ctx.history = null;\n      (_f = this.ctx.linkedViews) == null ? void 0 : _f.teardown();\n      this.ctx.linkedViews = null;\n      (_g = this.ctx.ink) == null ? void 0 : _g.teardown();\n      this.ctx.ink = null;\n      (_h = this.ctx.measure) == null ? void 0 : _h.teardown();\n      this.ctx.measure = null;\n      (_i = this.ctx.contextMenu) == null ? void 0 : _i.teardown();\n      this.ctx.contextMenu = null;\n      (_j = this.ctx.osThemeWatcher) == null ? void 0 : _j.teardown();\n      this.ctx.osThemeWatcher = null;\n      this.ctx.weave = null;\n      (_l = (_k = this.ctx.rendererController) == null ? void 0 : _k.teardown) == null ? void 0 : _l.call(_k);\n      this.ctx.rendererController = null;\n      this.ctx.renderer = null;\n      this.ctx.drilldown = null;\n      this.ctx.morphTypeChange = null;\n      this.ctx.exports = null;\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.Paper = null;\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 LAYOUT_KEY = \"__apexcharts_unit_layouts__\";\nif (!/** @type {any} */\nglobalThis[LAYOUT_KEY]) {\n  globalThis[LAYOUT_KEY] = {};\n}\nfunction getLayouts() {\n  return (\n    /** @type {any} */\n    globalThis[LAYOUT_KEY]\n  );\n}\nfunction registerUnitLayout(name2, fn) {\n  if (!name2 || typeof name2 !== \"string\") {\n    console.warn(\"ApexCharts: registerUnitLayout requires a non-empty name.\");\n    return;\n  }\n  if (typeof fn !== \"function\") {\n    console.warn(\n      `ApexCharts: registerUnitLayout(\"${name2}\") expects a function (objects, rect) => [{id, x, y}].`\n    );\n    return;\n  }\n  getLayouts()[name2] = fn;\n}\nfunction getUnitLayout(name2) {\n  if (!name2) return null;\n  return getLayouts()[name2] || null;\n}\nfunction unregisterUnitLayout(name2) {\n  delete getLayouts()[name2];\n}\nconst ROW_SOURCE_KEY = \"__apexcharts_row_sources__\";\nif (!/** @type {any} */\nglobalThis[ROW_SOURCE_KEY]) {\n  globalThis[ROW_SOURCE_KEY] = {};\n}\nfunction getSources() {\n  return (\n    /** @type {any} */\n    globalThis[ROW_SOURCE_KEY]\n  );\n}\nfunction registerRowSource(name2, fn) {\n  if (!name2 || typeof name2 !== \"string\") {\n    console.warn(\"ApexCharts: registerRowSource requires a non-empty name.\");\n    return;\n  }\n  if (typeof fn !== \"function\") {\n    console.warn(\n      `ApexCharts: registerRowSource(\"${name2}\") expects a function (w, opts) => series.`\n    );\n    return;\n  }\n  getSources()[name2] = fn;\n}\nfunction getRowSource(name2) {\n  if (!name2) return null;\n  return getSources()[name2] || null;\n}\nfunction unregisterRowSource(name2) {\n  delete getSources()[name2];\n}\nfunction rowSourceFor(w2) {\n  const cnf = w2 && w2.config && w2.config.chart;\n  if (!cnf) return null;\n  return getRowSource(cnf.requestedType) || getRowSource(cnf.type);\n}\nconst REGISTRY_KEY = \"__apexcharts_plugins__\";\nfunction getRegistry() {\n  const g2 = (\n    /** @type {any} */\n    globalThis\n  );\n  if (!g2[REGISTRY_KEY]) g2[REGISTRY_KEY] = {};\n  return g2[REGISTRY_KEY];\n}\nfunction registerPlugin(def) {\n  if (!def || typeof def.name !== \"string\" || typeof def.setup !== \"function\") {\n    console.error(\n      \"[apexcharts] registerPlugin: a plugin needs a { name, setup } shape.\"\n    );\n    return;\n  }\n  getRegistry()[def.name] = def;\n}\nfunction getPlugin(name2) {\n  return getRegistry()[name2] || null;\n}\nfunction unregisterPlugin(name2) {\n  delete getRegistry()[name2];\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((r2) => {\n    if (called) {\n      fn.call(el, r2);\n    }\n    called = true;\n  });\n  if (el.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n    Array.from(el.children).forEach((c2) => ro.observe(c2));\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/* Linked Views (#4): per-mark crossfilter dim. Applied to individual data\\n   marks (not whole series) whose x is outside the brushed range. Opacity is\\n   overridable per chart via the --apx-cf-dim custom property. */\\n.apexcharts-crossfilter-dimmed {\\n  transition: opacity .25s ease;\\n  opacity: var(--apx-cf-dim, .2)\\n}\\n\\n/* Linked Views (#4): default styling for the built-in crossfilter data table\\n   (cf.dataTable). Deliberately light so host styles can override. */\\n.apexcharts-cf-table {\\n  border-collapse: collapse;\\n  width: 100%;\\n  font-size: 13px;\\n}\\n.apexcharts-cf-table caption {\\n  caption-side: bottom;\\n  text-align: right;\\n  padding: 6px 2px;\\n  font-size: 12px;\\n  opacity: .7\\n}\\n.apexcharts-cf-table th,\\n.apexcharts-cf-table td {\\n  padding: 6px 10px;\\n  text-align: left;\\n  border-bottom: 1px solid rgba(0, 0, 0, .08)\\n}\\n.apexcharts-cf-table th {\\n  font-weight: 600;\\n  border-bottom-width: 2px\\n}\\n.apexcharts-cf-table tbody tr:hover {\\n  background: rgba(99, 102, 241, .06)\\n}\\n\\n/* Measure ruler (#18): measure / delta ruler.\\n   Theme via these classes or the --apx-measure-* custom properties below\\n   (config `chart.measure.colors` overrides both). The ruler group also carries\\n   a direction class: apexcharts-measure-up | -down | -flat.\\n   Element classes:\\n     .apexcharts-measure-band     shaded span band\\n     .apexcharts-measure-vline    vertical guide lines\\n     .apexcharts-measure-line     free-mode diagonal line\\n     .apexcharts-measure-label-bg readout box     .apexcharts-measure-label text\\n   Colors are applied as SVG presentation attributes, so any rule you write on\\n   these classes overrides them. */\\n.apexcharts-canvas {\\n  --apx-measure-up: #16a34a;\\n  --apx-measure-down: #dc2626;\\n  --apx-measure-neutral: #64748b;\\n  --apx-measure-guide: #94a3b8;\\n}\\n.apexcharts-measure-capture {\\n  cursor: crosshair;\\n}\\n\\n/* Radial Actions (#chrome): right-click context menu. Theme via these classes\\n   or the --apx-menu-* custom properties. */\\n.apexcharts-canvas {\\n  --apx-menu-bg: #ffffff;\\n  --apx-menu-fg: #1e293b;\\n  --apx-menu-border: #e2e8f0;\\n  --apx-menu-hover: #f1f5f9;\\n  --apx-menu-shadow: rgba(15, 23, 42, 0.18);\\n}\\n.apexcharts-context-menu {\\n  min-width: 168px;\\n  padding: 4px;\\n  border-radius: 8px;\\n  background: var(--apx-menu-bg);\\n  border: 1px solid var(--apx-menu-border);\\n  box-shadow: 0 6px 22px var(--apx-menu-shadow);\\n  font-family: Helvetica, Arial, sans-serif;\\n  font-size: 13px;\\n  z-index: 20;\\n  user-select: none;\\n}\\n.apexcharts-context-menu-item {\\n  display: block;\\n  width: 100%;\\n  box-sizing: border-box;\\n  text-align: left;\\n  padding: 7px 12px;\\n  border: 0;\\n  border-radius: 5px;\\n  background: transparent;\\n  color: var(--apx-menu-fg);\\n  font: inherit;\\n  cursor: pointer;\\n}\\n.apexcharts-context-menu-item:hover,\\n.apexcharts-context-menu-item--active {\\n  background: var(--apx-menu-hover);\\n}\\n.apexcharts-context-menu-item:focus {\\n  outline: none;\\n}\\n\\n/* Ink Layer (#7): the floating note editor card, opened by clicking an\\n   ink-managed annotation. Theme via these classes or the --apx-ink-* vars. */\\n.apexcharts-canvas {\\n  --apx-ink-card-bg: #ffffff;\\n  --apx-ink-card-fg: #1e293b;\\n  --apx-ink-card-border: #e2e8f0;\\n  --apx-ink-card-hover: #f1f5f9;\\n  --apx-ink-card-accent: #6366f1;\\n  --apx-ink-card-shadow: rgba(15, 23, 42, 0.18);\\n}\\n.apexcharts-ink-card {\\n  position: absolute;\\n  z-index: 25;\\n  display: flex;\\n  flex-direction: column;\\n  gap: 6px;\\n  padding: 8px;\\n  border-radius: 8px;\\n  background: var(--apx-ink-card-bg);\\n  border: 1px solid var(--apx-ink-card-border);\\n  box-shadow: 0 6px 22px var(--apx-ink-card-shadow);\\n  font-family: Helvetica, Arial, sans-serif;\\n  font-size: 12px;\\n  color: var(--apx-ink-card-fg);\\n  user-select: none;\\n}\\n.apexcharts-ink-card-row {\\n  display: flex;\\n  align-items: center;\\n  gap: 4px;\\n}\\n.apexcharts-ink-card input.apexcharts-ink-editor {\\n  flex: 1 1 auto;\\n  width: 150px;\\n  min-width: 0;\\n  box-sizing: border-box;\\n  padding: 4px 6px;\\n  font: inherit;\\n  color: inherit;\\n  background: transparent;\\n  border: 1px solid var(--apx-ink-card-border);\\n  border-radius: 5px;\\n}\\n.apexcharts-ink-card input.apexcharts-ink-editor:focus {\\n  outline: none;\\n  border-color: var(--apx-ink-card-accent);\\n}\\n.apexcharts-ink-btn {\\n  flex: 0 0 auto;\\n  width: 24px;\\n  height: 24px;\\n  display: inline-flex;\\n  align-items: center;\\n  justify-content: center;\\n  padding: 0;\\n  border: 0;\\n  border-radius: 5px;\\n  background: transparent;\\n  color: inherit;\\n  font: inherit;\\n  font-size: 12px;\\n  line-height: 1;\\n  cursor: pointer;\\n}\\n.apexcharts-ink-btn:hover,\\n.apexcharts-ink-btn--active {\\n  background: var(--apx-ink-card-hover);\\n}\\n.apexcharts-ink-btn:focus-visible,\\n.apexcharts-ink-swatch:focus-visible {\\n  outline: 2px solid var(--apx-ink-card-accent);\\n  outline-offset: 1px;\\n}\\n.apexcharts-ink-btn--bold {\\n  font-weight: 700;\\n}\\n.apexcharts-ink-btn--delete:hover {\\n  color: #dc2626;\\n}\\n.apexcharts-ink-swatch {\\n  flex: 0 0 auto;\\n  width: 16px;\\n  height: 16px;\\n  padding: 0;\\n  border: 1px solid rgba(100, 116, 139, 0.45);\\n  border-radius: 50%;\\n  cursor: pointer;\\n}\\n.apexcharts-ink-swatch--active {\\n  box-shadow:\\n    0 0 0 2px var(--apx-ink-card-bg),\\n    0 0 0 4px var(--apx-ink-card-accent);\\n}\\n.apexcharts-ink-sep {\\n  flex: 0 0 auto;\\n  width: 1px;\\n  height: 16px;\\n  margin: 0 2px;\\n  background: var(--apx-ink-card-border);\\n}\\n.apexcharts-ink-cardlabel {\\n  flex: 0 0 auto;\\n  font-size: 10px;\\n  letter-spacing: 0.4px;\\n  text-transform: uppercase;\\n  opacity: 0.65;\\n  margin-right: 2px;\\n}\\n.apexcharts-ink-marker-size {\\n  flex: 0 0 auto;\\n  min-width: 16px;\\n  text-align: center;\\n  font-variant-numeric: tabular-nums;\\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  /* Shared by the body and the arrow\\'s two outward facets, so the\\n   * hairline reads as one continuous outline around the whole shape.\\n   * Keep it strong enough to survive on its own: the shadow below is\\n   * elevation, not edge definition. */\\n  --apx-tt-border: rgba(15, 23, 42, 0.12);\\n  /* Elevation, in three layers: a tight contact shadow that anchors the\\n   * bottom edge, a directional key shadow for the lift, and a wide\\n   * ambient one that grounds the whole box. Each is weaker and more\\n   * diffuse than the last.\\n   *\\n   * A tooltip is unusual in that it floats over *data*, so reach costs\\n   * more than it does on a page: every pixel the shadow travels tints a\\n   * bar or a line the reader is trying to compare. These numbers are\\n   * tuned to keep the near-edge contrast that reads as elevation while\\n   * dropping the long low haze that only muddies the plot.\\n   *\\n   * Note there is deliberately no `0 0 0 1px` ring layer. That used to\\n   * stand in for edge definition back when --apx-tt-border was barely\\n   * visible; now that the border is a real hairline (and the arrow\\n   * shares it) a ring only double-draws the outline, and being spread\\n   * rather than offset it leaked ink upward too, flattening the lift.\\n   *\\n   * `--apx-tt-shadow-dir` flips the whole stack\\'s Y in one place — see\\n   * the `[data-placement=\"bottom\"]` rule further down. */\\n  --apx-tt-shadow-dir: 1;\\n  --apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(15, 23, 42, 0.06), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(15, 23, 42, 0.10), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(15, 23, 42, 0.14);\\n  --apx-tt-arrow-bg: var(--apx-tt-bg);\\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.16);\\n  /* Dark needs more alpha than light to register at all, but not as much\\n   * as it used to: the light rim above now carries the edge, so the\\n   * shadow is free to be pure elevation instead of doubling as an\\n   * outline. Same geometry as light, heavier ink. */\\n  --apx-tt-shadow: 0 calc(var(--apx-tt-shadow-dir) * 1px) 2px rgba(0, 0, 0, 0.24), 0 calc(var(--apx-tt-shadow-dir) * 4px) 8px -2px rgba(0, 0, 0, 0.30), 0 calc(var(--apx-tt-shadow-dir) * 12px) 20px -8px rgba(0, 0, 0, 0.38);\\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/* Point-annotation hover tooltip (apexcharts/apexcharts.js#2424). Reuses the\\n * glass body/border/shadow from `.apexcharts-tooltip` but holds free-form\\n * content, so it needs its own padding, wrapping and a sane max width. */\\n.apexcharts-tooltip.apexcharts-annotation-tooltip {\\n  padding: 6px 10px;\\n  max-width: 240px;\\n  white-space: normal;\\n  line-height: 1.4;\\n  pointer-events: none;\\n  z-index: 13\\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 — a 45°-rotated square straddling the body\\'s edge, so\\n * the body\\'s 1px border runs continuously out across the arrow and back.\\n * The two facets that face away from the tooltip carry the border; the\\n * two that face into it carry none, and the square\\'s opaque fill covers\\n * the segment of the body\\'s own border it sits on, hiding the seam.\\n *\\n * This is why it\\'s a rotated square and not a triangle: `clip-path`\\n * erases `border` and `box-shadow` along with everything outside the\\n * polygon, which left `filter: drop-shadow` as the only way to suggest\\n * an edge — and a drop-shadow can only ever blur one, never draw a\\n * hairline. Nothing here needs a filter.\\n *\\n * Geometry: a square of side S rotated 45° reaches S/√2 from its centre\\n * to each corner, so S = 10px gives the ~7px tip overhang that\\n * ARROW_TIP_OVERHANG assumes (tooltip/constants.js) over a ~14px base.\\n * The offsets park the square\\'s *centre* 1px outside the padding box\\n * (-6px = -1px border - 10px/2), i.e. exactly on the body\\'s border line,\\n * so the two borders meet end to end instead of overlapping or gapping.\\n * `box-sizing` must be border-box or the bordered sides would grow the\\n * square asymmetrically and knock its centre off that line. */\\n.apexcharts-tooltip-arrow {\\n  position: absolute;\\n  box-sizing: border-box;\\n  width: 10px;\\n  height: 10px;\\n  background: var(--apx-tt-arrow-bg);\\n  transform: rotate(45deg);\\n  pointer-events: none;\\n  top: calc(var(--apx-tt-arrow-y, 50%) - 5px)\\n}\\n\\n/* Which two sides face outward depends on the placement. Under\\n * `rotate(45deg)` the square\\'s bottom-left corner swings to the left,\\n * top-right to the right, top-left to the top and bottom-right to the\\n * bottom — so the pair of borders below is always the two sharing the\\n * corner that ends up as the tip. */\\n.apexcharts-tooltip[data-placement=\"right\"] .apexcharts-tooltip-arrow {\\n  left: -6px;\\n  border-left: 1px solid var(--apx-tt-border);\\n  border-bottom: 1px solid var(--apx-tt-border)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"left\"] .apexcharts-tooltip-arrow {\\n  right: -6px;\\n  border-top: 1px solid var(--apx-tt-border);\\n  border-right: 1px solid var(--apx-tt-border)\\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 centre on `--apx-tt-arrow-x`\\n * instead (set by applyTooltipPosition). */\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow,\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  top: auto;\\n  left: calc(var(--apx-tt-arrow-x, 50%) - 5px)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"top\"] .apexcharts-tooltip-arrow {\\n  bottom: -6px;\\n  border-right: 1px solid var(--apx-tt-border);\\n  border-bottom: 1px solid var(--apx-tt-border)\\n}\\n\\n.apexcharts-tooltip[data-placement=\"bottom\"] .apexcharts-tooltip-arrow {\\n  top: -6px;\\n  border-top: 1px solid var(--apx-tt-border);\\n  border-left: 1px solid var(--apx-tt-border)\\n}\\n\\n/* When the tooltip is flipped below the data point, the default\\n * downward-biased shadow leaves its top edge undefined. Negating the\\n * direction casts the whole elevation upward instead, so the shadow\\n * falls between the tooltip and the mark above it. One multiplier flips\\n * all three layers together; the arrow needs no counterpart, since its\\n * border doesn\\'t depend on light direction. */\\n.apexcharts-tooltip[data-placement=\"bottom\"] {\\n  --apx-tt-shadow-dir: -1\\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-measure-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-measure-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-measure-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-measure-icon.apexcharts-selected,\\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-measure-icon:not(.apexcharts-selected):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-measure-icon:not(.apexcharts-selected):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-measure-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-drilldown-loading {\\n  position: absolute;\\n  inset: 0;\\n  z-index: 12;\\n  display: flex;\\n  align-items: center;\\n  justify-content: center;\\n  gap: 10px;\\n  font-size: 13px;\\n  font-family: inherit;\\n  color: inherit;\\n  background: rgba(255, 255, 255, 0.62);\\n  /* The chart underneath stays interactive-looking but must not take clicks\\n     while a level is resolving, or a second drill can start mid-fetch. */\\n  cursor: progress\\n}\\n\\n.apexcharts-drilldown-loading-spinner {\\n  width: 26px;\\n  height: 26px;\\n  border-radius: 50%;\\n  border: 2.5px solid rgba(0, 0, 0, 0.16);\\n  border-top-color: rgba(0, 0, 0, 0.55);\\n  animation: apexcharts-drilldown-spin 0.7s linear infinite\\n}\\n\\n.apexcharts-drilldown-loading-text {\\n  opacity: 0.8\\n}\\n\\n.apexcharts-theme-dark .apexcharts-drilldown-loading {\\n  background: rgba(30, 30, 30, 0.62)\\n}\\n\\n.apexcharts-theme-dark .apexcharts-drilldown-loading-spinner {\\n  border-color: rgba(255, 255, 255, 0.22);\\n  border-top-color: rgba(255, 255, 255, 0.7)\\n}\\n\\n@keyframes apexcharts-drilldown-spin {\\n  to {\\n    transform: rotate(360deg)\\n  }\\n}\\n\\n@media (prefers-reduced-motion: reduce) {\\n  .apexcharts-drilldown-loading-spinner {\\n    animation: apexcharts-drilldown-pulse 1.4s ease-in-out infinite\\n  }\\n\\n  @keyframes apexcharts-drilldown-pulse {\\n    0%, 100% {\\n      opacity: 0.35\\n    }\\n\\n    50% {\\n      opacity: 1\\n    }\\n  }\\n}\\n\\n.apexcharts-disable-transitions * {\\n  transition: none !important;\\n}';\nconst e = globalThis.console;\nfunction t(t2) {\n  e.error(t2);\n}\nfunction s(t2) {\n  e.warn(t2);\n}\nconst i = \"APEX-\", n = /* @__PURE__ */ new Date(\"2027-07-31T00:00:00Z\"), r = \"__apex_license_v1__\";\nfunction a() {\n  const e2 = globalThis;\n  let t2 = e2[r];\n  return t2 || (t2 = { key: null, listeners: /* @__PURE__ */ new Set(), result: null }, e2[r] = t2), t2;\n}\nconst l = class {\n  static get licenseKey() {\n    return a().key;\n  }\n  static set licenseKey(e2) {\n    a().key = e2;\n  }\n  static get listeners() {\n    return a().listeners;\n  }\n  static get validationResult() {\n    return a().result;\n  }\n  static set validationResult(e2) {\n    a().result = e2;\n  }\n  static getKey() {\n    return this.licenseKey;\n  }\n  static getLicenseStatus() {\n    return this.licenseKey ? (this.validationResult = this.validateKey(this.licenseKey), this.validationResult) : { expired: false, signatureVerified: false, valid: false };\n  }\n  static isKeyValid(e2) {\n    return !!e2 && this.validateKey(e2).valid;\n  }\n  static isLicenseValid() {\n    return this.getLicenseStatus().valid;\n  }\n  static onChange(e2) {\n    return this.listeners.add(e2), () => {\n      this.listeners.delete(e2);\n    };\n  }\n  static setLicense(e2) {\n    var _a;\n    var i2;\n    if (!e2) return this.licenseKey = null, void this.publish({ expired: false, signatureVerified: false, valid: false });\n    const n2 = this.validateKey(e2);\n    n2.valid || e2 === this.licenseKey || !(null == (i2 = this.validationResult) ? void 0 : i2.valid) ? (this.licenseKey = e2, this.publish(n2), n2.valid || t(`[Apex] ${n2.message}`)) : s(`[Apex] Ignoring license key: ${(_a = n2.message) != null ? _a : \"it is not valid\"} A valid license is already active on this page.`);\n  }\n  static validateKey(e2) {\n    const t2 = this.parseKey(e2), s2 = this.validateStructure(e2, t2);\n    if (!s2.valid || !(null == t2 ? void 0 : t2.signature)) return s2;\n    const i2 = this.verdicts.get(e2);\n    return false === i2 ? { data: t2.data, expired: false, message: \"Invalid license key. The license signature does not verify.\", signatureVerified: true, valid: false } : (void 0 === i2 && this.verifySignature(e2, t2, s2), __spreadProps(__spreadValues({}, s2), { signatureVerified: true === i2 }));\n  }\n  static _resetSignatureState() {\n    this.verdicts.clear(), this.verifying.clear(), this.warnedUnverifiable = false, this.epoch++;\n  }\n  static base64ToBytes(e2) {\n    const t2 = e2.replace(/-/g, \"+\").replace(/_/g, \"/\"), s2 = t2.padEnd(4 * Math.ceil(t2.length / 4), \"=\"), i2 = globalThis.atob;\n    if (\"function\" != typeof i2) throw new Error(\"no base64 decoder available\");\n    const n2 = i2(s2), r2 = new Uint8Array(n2.length);\n    for (let e3 = 0; e3 < n2.length; e3++) r2[e3] = n2.charCodeAt(e3);\n    return r2;\n  }\n  static canonicalPayload(e2) {\n    const t2 = e2.domains && e2.domains.length > 0 ? e2.domains.join(\",\") : \"\";\n    return `v1|${e2.issueDate}|${e2.expiryDate}|${e2.plan}|${t2}`;\n  }\n  static notify(e2) {\n    for (const t2 of this.listeners) try {\n      t2(e2);\n    } catch (e3) {\n    }\n  }\n  static parseKey(e2) {\n    if (\"string\" != typeof e2 || !e2.startsWith(i)) return null;\n    const t2 = e2.slice(5);\n    if (!t2) return null;\n    try {\n      const e3 = new TextDecoder().decode(this.base64ToBytes(t2)), s2 = JSON.parse(e3);\n      return s2.issueDate && s2.expiryDate && s2.plan ? { data: { domains: Array.isArray(s2.domains) ? s2.domains : void 0, expiryDate: s2.expiryDate, issueDate: s2.issueDate, plan: s2.plan, valid: true }, signature: \"string\" == typeof s2.sig && s2.sig ? s2.sig : null } : null;\n    } catch (e3) {\n      return null;\n    }\n  }\n  static publish(e2) {\n    this.validationResult = e2, this.notify(e2);\n  }\n  static validateStructure(e2, t2) {\n    const s2 = (e3) => ({ expired: false, message: e3, signatureVerified: false, valid: false });\n    if (\"string\" != typeof e2 || !e2.startsWith(i)) return s2('Invalid license key format. License key must start with \"APEX-\".');\n    if (!t2) return s2(\"Invalid license key. Unable to decode license data.\");\n    const { data: r2, signature: a2 } = t2;\n    if (!a2 && /* @__PURE__ */ new Date() >= n) return s2(\"This license key is in the old unsigned format, which is no longer accepted. Please request a replacement key.\");\n    if (new Date(r2.expiryDate) < /* @__PURE__ */ new Date()) return { data: r2, expired: true, message: `License expired on ${r2.expiryDate}. Please renew your license.`, signatureVerified: false, valid: false };\n    if (r2.domains && r2.domains.length > 0) {\n      const e3 = \"undefined\" == typeof location ? \"\" : location.hostname;\n      if (!r2.domains.some(((t3) => e3 === t3 || e3.endsWith(`.${t3}`)))) return { data: r2, expired: false, message: `License is not valid for this domain (${e3}). Allowed domains: ${r2.domains.join(\", \")}.`, signatureVerified: false, valid: false };\n    }\n    return { data: r2, expired: false, signatureVerified: false, valid: true };\n  }\n  static verifySignature(e2, i2, n2) {\n    return __async(this, null, function* () {\n      var r2;\n      if (this.verifying.has(e2) || this.verdicts.has(e2)) return;\n      this.verifying.add(e2);\n      const a2 = this.epoch, l2 = null == (r2 = globalThis.crypto) ? void 0 : r2.subtle;\n      if (!l2 || 0 === this.publicKeysSpki.length) return this.verifying.delete(e2), void (this.warnedUnverifiable || (this.warnedUnverifiable = true, s(l2 ? \"[Apex] No license signing key is configured in this build, so license signatures cannot be verified.\" : \"[Apex] Web Crypto is unavailable (a secure context is required), so the license signature cannot be verified.\")));\n      const o2 = new TextEncoder().encode(this.canonicalPayload(i2.data));\n      let c2 = false;\n      for (const e3 of this.publicKeysSpki) {\n        try {\n          const t2 = yield l2.importKey(\"spki\", this.base64ToBytes(e3), { name: \"ECDSA\", namedCurve: \"P-256\" }, false, [\"verify\"]);\n          c2 = yield l2.verify({ hash: \"SHA-256\", name: \"ECDSA\" }, t2, this.base64ToBytes(i2.signature), o2);\n        } catch (e4) {\n          c2 = false;\n        }\n        if (c2) break;\n      }\n      if (this.verifying.delete(e2), this.epoch !== a2) return;\n      if (this.verdicts.set(e2, c2), c2) {\n        const t2 = __spreadProps(__spreadValues({}, n2), { signatureVerified: true });\n        return void (this.licenseKey === e2 ? this.publish(t2) : this.notify(t2));\n      }\n      const h2 = \"Invalid license key. The license signature does not verify.\", d = { data: i2.data, expired: false, message: h2, signatureVerified: true, valid: false };\n      this.licenseKey === e2 ? this.publish(d) : this.notify(d), t(`[Apex] ${h2}`);\n    });\n  }\n};\nl.publicKeysSpki = [\"MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQIaK9UMD6n0oR/FIy8QdL0uSzKMQlf1BB+tOrji4/WuHsyRNxeDhVykoSsNURozMi1xhmqWvBH1L//xIfugTPA==\"], l.verdicts = /* @__PURE__ */ new Map(), l.verifying = /* @__PURE__ */ new Set(), l.warnedUnverifiable = false, l.epoch = 0;\nlet o = l;\nconst c = class {\n  static applyStyles(e2) {\n    Object.assign(e2.style, this.CRITICAL_STYLES, { backgroundImage: this.createWatermarkPattern(), backgroundRepeat: \"repeat\" });\n  }\n  static node(e2) {\n    return e2 ? e2.querySelector(`[${this.WATERMARK_ATTR}]`) : null;\n  }\n  static add(e2, t2) {\n    return e2 && \"undefined\" != typeof document ? (this.setManaged(e2, t2), this.paint(e2)) : null;\n  }\n  static exists(e2) {\n    return !!this.node(e2);\n  }\n  static remove(e2, t2) {\n    e2 && (this.setManaged(e2, t2), this.erase(e2));\n  }\n  static untrack(e2) {\n    this.managed.delete(e2);\n  }\n  static createWatermarkPattern() {\n    const e2 = this.WATERMARK_TEXT;\n    return `url(\"data:image/svg+xml,${encodeURIComponent(`\n      <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"300\" height=\"200\">\n        <text\n          x=\"50%\"\n          y=\"50%\"\n          dominant-baseline=\"middle\"\n          text-anchor=\"middle\"\n          font-family=\"-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Arial, sans-serif\"\n          font-size=\"18\"\n          font-weight=\"600\"\n          fill=\"rgba(134, 134, 134, 0.1)\"\n          transform=\"rotate(-35, 100, 60)\"\n        >${e2}</text>\n      </svg>\n    `.trim())}\")`;\n  }\n  static erase(e2) {\n    var t2;\n    null == (t2 = this.node(e2)) || t2.remove();\n  }\n  static paint(e2) {\n    let t2 = this.node(e2);\n    return t2 || (t2 = document.createElement(\"div\"), t2.setAttribute(this.WATERMARK_ATTR, \"\"), e2.appendChild(t2)), this.applyStyles(t2), \"function\" == typeof getComputedStyle && \"static\" === getComputedStyle(e2).position && (e2.style.position = \"relative\"), t2;\n  }\n  static reconcile() {\n    const e2 = o.isLicenseValid();\n    for (const t2 of this.managed) t2.isConnected ? e2 ? this.erase(t2) : this.paint(t2) : this.managed.delete(t2);\n  }\n  static setManaged(e2, t2) {\n    false !== (null == t2 ? void 0 : t2.manage) ? this.track(e2) : this.managed.delete(e2);\n  }\n  static track(e2) {\n    this.managed.add(e2), this.subscribed || (this.subscribed = true, o.onChange((() => {\n      this.reconcile();\n    })));\n  }\n};\nc.WATERMARK_ATTR = \"data-apexcharts-watermark\", c.WATERMARK_TEXT = \"APEXCHARTS\", c.ATTR = \"data-apexcharts-watermark\", c.CRITICAL_STYLES = { bottom: \"0\", display: \"block\", left: \"0\", msUserSelect: \"none\", opacity: \"1\", pointerEvents: \"none\", position: \"absolute\", right: \"0\", top: \"0\", userSelect: \"none\", visibility: \"visible\", webkitUserSelect: \"none\", zIndex: \"10000\" }, c.managed = /* @__PURE__ */ new Set(), c.subscribed = false;\nlet h = c;\nconst p = 0.05, m = 0.05, g = 1 / 45;\nfunction v(e2, t2, s2, i2) {\n  const n2 = { value: e2, velocity: 0, target: e2, stiffness: t2, damping: s2 };\n  return n2;\n}\nfunction b(e2, t2) {\n  if (t2 <= 0) return M(e2);\n  let s2 = t2;\n  for (; s2 > 0; ) {\n    const t3 = Math.min(s2, g), i2 = -e2.stiffness * (e2.value - e2.target) - e2.damping * e2.velocity;\n    e2.velocity += i2 * t3, e2.value += e2.velocity * t3, s2 -= t3;\n  }\n  return !!M(e2) && (e2.value = e2.target, e2.velocity = 0, true);\n}\nfunction w(e2, t2) {\n  e2.target = t2;\n}\nfunction M(e2) {\n  var _a, _b;\n  const t2 = (_a = e2.restVelocity) != null ? _a : p, s2 = (_b = e2.restDisplacement) != null ? _b : m;\n  return Math.abs(e2.velocity) < t2 && Math.abs(e2.value - e2.target) < s2;\n}\nconst S = { crisp: [210, 26], gentle: [120, 20], snappy: [320, 30] };\nfunction L(e2) {\n  var _a;\n  return (_a = S[e2 != null ? e2 : \"crisp\"]) != null ? _a : S.crisp;\n}\nconst X = \"__apexcharts_crossfilters__\";\nfunction Y(e2) {\n  if (!Number.isFinite(e2)) return e2;\n  const t2 = Number(e2.toPrecision(12));\n  return Object.is(t2, -0) ? 0 : t2;\n}\nfunction Z(e2) {\n  return \"number\" == typeof e2 && Number.isFinite(e2);\n}\nfunction J(e2) {\n  if (\"function\" == typeof e2) return e2;\n  if (e2 && \"object\" == typeof e2) {\n    if (\"string\" == typeof e2.sum) {\n      const t2 = e2.sum;\n      return (e3) => e3.reduce(((e4, s2) => e4 + (Number(s2[t2]) || 0)), 0);\n    }\n    if (\"string\" == typeof e2.avg) {\n      const t2 = e2.avg;\n      return (e3) => e3.length ? e3.reduce(((e4, s2) => e4 + (Number(s2[t2]) || 0)), 0) / e3.length : 0;\n    }\n    if (\"string\" == typeof e2.min) {\n      const t2 = e2.min;\n      return (e3) => e3.length ? Math.min(...e3.map(((e4) => Number(e4[t2]) || 0))) : 0;\n    }\n    if (\"string\" == typeof e2.max) {\n      const t2 = e2.max;\n      return (e3) => e3.length ? Math.max(...e3.map(((e4) => Number(e4[t2]) || 0))) : 0;\n    }\n  }\n  return (e3) => e3.length;\n}\nfunction G(e2, t2) {\n  return \"function\" == typeof t2 ? e2.slice().sort(t2) : \"asc\" === t2 ? e2.slice().sort(((e3, t3) => e3 > t3 ? 1 : e3 < t3 ? -1 : 0)) : \"desc\" === t2 ? e2.slice().sort(((e3, t3) => e3 < t3 ? 1 : e3 > t3 ? -1 : 0)) : e2;\n}\nfunction ee(e2, t2) {\n  if (!Z(e2)) return -1;\n  const s2 = t2.length - 1;\n  if (e2 < t2[0] || e2 > t2[s2]) return -1;\n  if (e2 === t2[s2]) return s2 - 1;\n  for (let i2 = 0; i2 < s2; i2++) if (e2 >= t2[i2] && e2 < t2[i2 + 1]) return i2;\n  return -1;\n}\nfunction te(e2) {\n  const t2 = [];\n  for (let s2 = 0; s2 < e2.length - 1; s2++) t2.push(Y((e2[s2] + e2[s2 + 1]) / 2));\n  return t2;\n}\nclass se {\n  constructor(e2, t2) {\n    this.dims = /* @__PURE__ */ new Map(), this.listeners = /* @__PURE__ */ new Map(), this.id = e2, this.records = Array.isArray(t2) ? t2 : [];\n  }\n  static store() {\n    const e2 = globalThis;\n    return e2[X] || (e2[X] = /* @__PURE__ */ new Map()), e2[X];\n  }\n  static getOrCreate(e2) {\n    if (!e2 || \"string\" != typeof e2.id) throw new Error(\"Crossfilter.getOrCreate requires an { id } string.\");\n    const t2 = se.store(), s2 = t2.get(e2.id);\n    if (s2) return e2.records && s2.setRecords(e2.records), s2;\n    const i2 = new se(e2.id, e2.records);\n    return t2.set(e2.id, i2), i2;\n  }\n  static get(e2) {\n    return se.store().get(e2) || null;\n  }\n  setRecords(e2) {\n    return this.records = Array.isArray(e2) ? e2 : [], this.dims.forEach(((e3) => this.recomputeDomain(e3))), this.emit(\"records\", this.state()), this.emit(\"change\", this.state()), this;\n  }\n  registerDimension(e2, t2) {\n    if (!t2 || \"function\" != typeof t2.dimension) throw new Error(`crossfilter.registerDimension(\"${e2}\") needs a dimension function.`);\n    const s2 = t2.type || (t2.bins ? \"range\" : \"category\"), i2 = { accessor: t2.dimension, reducer: J(t2.reduce), type: s2, bins: t2.bins, order: t2.order, filter: null, labels: [], edges: null, xLabels: [], yLabels: [] };\n    return this.dims.set(e2, i2), this.recomputeDomain(i2), null != t2.filter && this.setFilterOn(i2, t2.filter), this;\n  }\n  hasDimension(e2) {\n    return this.dims.has(e2);\n  }\n  removeDimension(e2) {\n    const t2 = this.dims.get(e2), s2 = !!t2 && this.hasFilter(t2);\n    return this.dims.delete(e2), s2 && this.emit(\"change\", this.state()), this;\n  }\n  recomputeDomain(e2) {\n    if (\"matrix\" === e2.type) {\n      const t2 = (function(e3, t3, s2) {\n        const i2 = /* @__PURE__ */ new Set(), n2 = /* @__PURE__ */ new Set(), r2 = [], a2 = [];\n        for (let s3 = 0; s3 < e3.length; s3++) {\n          const l2 = t3(e3[s3]);\n          if (!l2) continue;\n          const o2 = l2[0], c2 = l2[1];\n          null == o2 || i2.has(o2) || (i2.add(o2), r2.push(o2)), null == c2 || n2.has(c2) || (n2.add(c2), a2.push(c2));\n        }\n        return { xLabels: G(r2, s2), yLabels: G(a2, s2) };\n      })(this.records, e2.accessor, e2.order);\n      return e2.xLabels = t2.xLabels, e2.yLabels = t2.yLabels, void (e2.edges = null);\n    }\n    if (\"range\" === e2.type) return e2.edges = (function(e3, t2, s2) {\n      if (s2 && Array.isArray(s2.thresholds) && s2.thresholds.length >= 2) {\n        const e4 = Array.from(new Set(s2.thresholds.filter(Z))).sort(((e5, t3) => e5 - t3));\n        return e4.length >= 2 ? e4.map(Y) : [0, 1];\n      }\n      let i2 = 1 / 0, n2 = -1 / 0;\n      for (let s3 = 0; s3 < e3.length; s3++) {\n        const r3 = t2(e3[s3]);\n        Z(r3) && (r3 < i2 && (i2 = r3), r3 > n2 && (n2 = r3));\n      }\n      if (i2 === 1 / 0) return [0, 1];\n      if (i2 === n2) {\n        const e4 = Math.abs(i2) > 0 ? Math.abs(i2) : 1;\n        return [Y(i2), Y(i2 + e4)];\n      }\n      if (s2 && Z(s2.width) && s2.width > 0) {\n        const e4 = s2.width, t3 = Math.floor(i2 / e4) * e4;\n        let r3 = Math.ceil(n2 / e4) * e4;\n        r3 <= t3 && (r3 = t3 + e4);\n        const a3 = Math.max(1, Math.round((r3 - t3) / e4)), l3 = new Array(a3 + 1);\n        for (let s3 = 0; s3 <= a3; s3++) l3[s3] = Y(t3 + s3 * e4);\n        return l3;\n      }\n      const r2 = s2 && Z(s2.count) && s2.count >= 1 ? Math.floor(s2.count) : 30, a2 = (n2 - i2) / r2, l2 = new Array(r2 + 1);\n      for (let e4 = 0; e4 <= r2; e4++) l2[e4] = Y(i2 + e4 * a2);\n      return l2[r2] = Y(n2), l2;\n    })(this.records, e2.accessor, e2.bins), void (e2.labels = te(e2.edges));\n    if (e2.labels = (function(e3, t2, s2) {\n      const i2 = /* @__PURE__ */ new Set(), n2 = [];\n      for (let s3 = 0; s3 < e3.length; s3++) {\n        const r2 = t2(e3[s3]);\n        null != r2 && (i2.has(r2) || (i2.add(r2), n2.push(r2)));\n      }\n      return G(n2, s2);\n    })(this.records, e2.accessor, e2.order), e2.edges = null, e2.filter instanceof Set) {\n      const t2 = new Set(e2.labels);\n      Array.from(e2.filter).forEach(((s2) => {\n        t2.has(s2) || e2.filter.delete(s2);\n      }));\n    }\n  }\n  filter(e2, t2) {\n    const s2 = this.dims.get(e2);\n    return s2 ? (this.setFilterOn(s2, t2), this.emit(\"change\", this.state()), this) : this;\n  }\n  toggleKey(e2, t2) {\n    const s2 = this.dims.get(e2);\n    if (!s2 || \"category\" !== s2.type) return this;\n    s2.filter instanceof Set || (s2.filter = /* @__PURE__ */ new Set());\n    const i2 = s2.filter;\n    return i2.has(t2) ? i2.delete(t2) : i2.add(t2), 0 === i2.size && (s2.filter = null), this.emit(\"change\", this.state()), this;\n  }\n  setFilterOn(e2, t2) {\n    if (null == t2) return void (e2.filter = null);\n    if (\"range\" === e2.type) {\n      if (Array.isArray(t2) && 2 === t2.length && t2.every(Z)) {\n        const [s3, i2] = t2;\n        e2.filter = [Math.min(s3, i2), Math.max(s3, i2)];\n      } else e2.filter = null;\n      return;\n    }\n    const s2 = new Set(t2);\n    e2.filter = s2.size ? s2 : null;\n  }\n  clear(e2) {\n    const t2 = this.dims.get(e2);\n    return t2 && (t2.filter = null), this.emit(\"change\", this.state()), this;\n  }\n  reset() {\n    return this.dims.forEach(((e2) => {\n      e2.filter = null;\n    })), this.emit(\"change\", this.state()), this;\n  }\n  hasFilter(e2) {\n    return null != e2.filter && (!(e2.filter instanceof Set) || e2.filter.size > 0);\n  }\n  passes(e2, t2) {\n    if (!this.hasFilter(e2)) return true;\n    const s2 = e2.accessor(t2);\n    if (e2.filter instanceof Set) return e2.filter.has(s2);\n    if (!Z(s2)) return false;\n    const [i2, n2] = e2.filter;\n    return s2 >= i2 && s2 <= n2;\n  }\n  filteredRecords(e2) {\n    const t2 = [];\n    return this.dims.forEach(((s2, i2) => {\n      i2 !== e2 && this.hasFilter(s2) && t2.push(s2);\n    })), 0 === t2.length ? this.records : this.records.filter(((e3) => t2.every(((t3) => this.passes(t3, e3)))));\n  }\n  filteredRows() {\n    return this.filteredRecords(null);\n  }\n  aggregateFor(e2) {\n    const t2 = this.dims.get(e2);\n    if (!t2) return { type: \"category\", labels: [], values: [], keys: [] };\n    const s2 = this.filteredRecords(e2);\n    if (\"matrix\" === t2.type) {\n      const e3 = new Map(t2.xLabels.map(((e4, t3) => [e4, t3]))), i3 = new Map(t2.yLabels.map(((e4, t3) => [e4, t3]))), n2 = t2.yLabels.map((() => t2.xLabels.map((() => []))));\n      for (let r2 = 0; r2 < s2.length; r2++) {\n        const a2 = t2.accessor(s2[r2]);\n        if (!a2) continue;\n        const l2 = e3.get(a2[0]), o2 = i3.get(a2[1]);\n        null != l2 && null != o2 && n2[o2][l2].push(s2[r2]);\n      }\n      return { type: \"matrix\", xLabels: t2.xLabels.slice(), yLabels: t2.yLabels.slice(), matrix: n2.map(((e4) => e4.map(((e5) => t2.reducer(e5))))) };\n    }\n    if (\"range\" === t2.type) {\n      const e3 = t2.edges || [0, 1], i3 = e3.length - 1, n2 = Array.from({ length: i3 }, (() => []));\n      for (let i4 = 0; i4 < s2.length; i4++) {\n        const r2 = ee(t2.accessor(s2[i4]), e3);\n        r2 >= 0 && n2[r2].push(s2[i4]);\n      }\n      return { type: \"range\", labels: te(e3), values: n2.map(((e4) => t2.reducer(e4))), keys: n2.map(((t3, s3) => [e3[s3], e3[s3 + 1]])), edges: e3 };\n    }\n    const i2 = /* @__PURE__ */ new Map();\n    t2.labels.forEach(((e3) => i2.set(e3, [])));\n    for (let e3 = 0; e3 < s2.length; e3++) {\n      const n2 = i2.get(t2.accessor(s2[e3]));\n      n2 && n2.push(s2[e3]);\n    }\n    return { type: \"category\", labels: t2.labels.slice(), values: t2.labels.map(((e3) => t2.reducer(i2.get(e3) || []))), keys: t2.labels.slice() };\n  }\n  aggregateAll() {\n    const e2 = {};\n    return this.dims.forEach(((t2, s2) => {\n      e2[s2] = this.aggregateFor(s2);\n    })), e2;\n  }\n  state() {\n    const e2 = {};\n    return this.dims.forEach(((t2, s2) => {\n      this.hasFilter(t2) && (e2[s2] = t2.filter instanceof Set ? Array.from(t2.filter) : t2.filter.slice());\n    })), { filters: e2, filteredCount: this.filteredRows().length, total: this.records.length };\n  }\n  filterOf(e2) {\n    const t2 = this.dims.get(e2);\n    return t2 && this.hasFilter(t2) ? t2.filter instanceof Set ? new Set(t2.filter) : t2.filter.slice() : null;\n  }\n  on(e2, t2) {\n    let s2 = this.listeners.get(e2);\n    return s2 || (s2 = /* @__PURE__ */ new Set(), this.listeners.set(e2, s2)), s2.add(t2), () => this.off(e2, t2);\n  }\n  off(e2, t2) {\n    var s2;\n    return null == (s2 = this.listeners.get(e2)) || s2.delete(t2), this;\n  }\n  emit(e2, t2) {\n    var s2;\n    null == (s2 = this.listeners.get(e2)) || s2.forEach(((e3) => {\n      try {\n        e3(t2);\n      } catch (e4) {\n      }\n    }));\n  }\n  static esc(e2) {\n    return String(null == e2 ? \"\" : e2).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n  }\n  resolveColumns(e2) {\n    if (Array.isArray(e2) && e2.length) return e2.map(((e3) => \"string\" == typeof e3 ? { field: e3, label: e3 } : { field: e3.field, label: e3.label || e3.field, format: e3.format }));\n    const t2 = this.records[0];\n    return (t2 ? Object.keys(t2) : []).map(((e3) => ({ field: e3, label: e3 })));\n  }\n  tableHTML(e2, t2, s2) {\n    const i2 = \"<thead><tr>\" + e2.map(((e3) => `<th>${se.esc(e3.label)}</th>`)).join(\"\") + \"</tr></thead>\", n2 = \"<tbody>\" + t2.map(((t3) => \"<tr>\" + e2.map(((e3) => {\n      const s3 = t3[e3.field], i3 = e3.format ? e3.format(s3, t3) : s3;\n      return `<td>${se.esc(i3)}</td>`;\n    })).join(\"\") + \"</tr>\")).join(\"\") + \"</tbody>\";\n    return `<table class=\"apexcharts-cf-table\">${`<caption>${t2.length} of ${s2} rows</caption>`}${i2}${n2}</table>`;\n  }\n  dataTable(e2, t2) {\n    if (!e2) return { refresh() {\n    }, destroy() {\n    } };\n    const s2 = t2 || {}, i2 = this.resolveColumns(s2.columns), n2 = s2.pageSize || 0, r2 = s2.page || 0, a2 = () => {\n      const t3 = this.filteredRows(), s3 = n2 ? t3.slice(r2 * n2, r2 * n2 + n2) : t3;\n      e2.innerHTML = this.tableHTML(i2, s3, t3.length);\n    };\n    a2();\n    const l2 = this.on(\"change\", a2);\n    return { refresh: a2, destroy: () => {\n      l2(), e2.innerHTML = \"\";\n    } };\n  }\n  destroy() {\n    se.store().delete(this.id), this.dims.clear(), this.listeners.clear(), this.records = [];\n  }\n}\nconst PRICING_URL = \"https://apexcharts.com/pricing\";\nlet _perspectivesTokenDecoded = false;\nconst enforced = /* @__PURE__ */ new Set();\nfunction untrackChart(ctx) {\n  enforced.delete(ctx);\n}\nfunction markPerspectivesTokenDecoded() {\n  _perspectivesTokenDecoded = true;\n  reevaluateLicenseAcrossCharts();\n}\nfunction premiumFeaturesInUse(w2, ctx) {\n  const chart = w2 && w2.config && w2.config.chart || {};\n  const used = [];\n  if (chart.type === \"unit\") used.push(\"unit\");\n  if (ctx.storyboard && ctx.storyboard._used) used.push(\"storyboard\");\n  const link = chart.link;\n  if (ctx.linkedViews && link && (link.enabled === true || typeof link.dimension === \"function\")) {\n    used.push(\"link\");\n  }\n  if (ctx.ink && chart.ink && chart.ink.enabled === true) used.push(\"ink\");\n  if (ctx.measure && chart.measure && chart.measure.enabled === true) {\n    used.push(\"measure\");\n  }\n  if (ctx.contextMenu && chart.contextMenu && chart.contextMenu.enabled === true) {\n    used.push(\"context-menu\");\n  }\n  if (ctx.perspectives && (ctx.perspectives._used || _perspectivesTokenDecoded)) {\n    used.push(\"perspectives\");\n  }\n  if (ctx.history && chart.history && chart.history.enabled === true) {\n    used.push(\"history\");\n  }\n  return used;\n}\nfunction resolveKey(w2) {\n  const perChart = w2 && w2.config && w2.config.chart && w2.config.chart.license;\n  if (perChart) return perChart;\n  const singleton = o.getKey();\n  if (singleton) return singleton;\n  const apex = Environment.getApex();\n  if (apex && apex.license) return apex.license;\n  return null;\n}\nconst PREMIUM_PLANS = /* @__PURE__ */ new Set([\"premium\", \"enterprise\"]);\nfunction licensedForPremium(key) {\n  if (!key) return false;\n  const result = o.validateKey(key);\n  if (!result.valid) return false;\n  const plan = result.data && result.data.plan;\n  return typeof plan === \"string\" && PREMIUM_PLANS.has(plan.toLowerCase());\n}\nfunction reinstateWatermark(ctx, elWrap) {\n  const node = h.add(elWrap, { manage: false });\n  if (!node || typeof MutationObserver === \"undefined\") return;\n  if (ctx._wmNodeObserver && ctx._wmObservedNode === node) return;\n  if (ctx._wmNodeObserver) ctx._wmNodeObserver.disconnect();\n  const nodeObs = new MutationObserver(() => {\n    const n2 = h.node(elWrap);\n    if (!n2) return;\n    nodeObs.disconnect();\n    h.applyStyles(n2);\n    nodeObs.takeRecords();\n    nodeObs.observe(n2, { attributes: true, attributeFilter: [\"style\"] });\n  });\n  nodeObs.observe(node, { attributes: true, attributeFilter: [\"style\"] });\n  ctx._wmNodeObserver = nodeObs;\n  ctx._wmObservedNode = node;\n}\nfunction addWatermark(ctx, elWrap) {\n  reinstateWatermark(ctx, elWrap);\n  if (typeof MutationObserver === \"undefined\" || ctx._wmWrapObserver) return;\n  const wrapObs = new MutationObserver(() => {\n    if (!h.node(elWrap)) reinstateWatermark(ctx, elWrap);\n  });\n  wrapObs.observe(elWrap, { childList: true });\n  ctx._wmWrapObserver = wrapObs;\n}\nfunction teardownWatermark(ctx, elWrap) {\n  if (ctx._wmWrapObserver) {\n    ctx._wmWrapObserver.disconnect();\n    ctx._wmWrapObserver = null;\n  }\n  if (ctx._wmNodeObserver) {\n    ctx._wmNodeObserver.disconnect();\n    ctx._wmNodeObserver = null;\n  }\n  ctx._wmObservedNode = null;\n  const wrap = elWrap || ctx.w && ctx.w.dom && ctx.w.dom.elWrap;\n  if (wrap) h.remove(wrap, { manage: false });\n}\nfunction notifyTrial(ctx, key, features) {\n  if (ctx._premiumLicenseNotified) return;\n  ctx._premiumLicenseNotified = true;\n  const many = features.length > 1;\n  if (!key) {\n    console.warn(\n      `[ApexCharts] Premium feature${many ? \"s\" : \"\"} in use (${features.join(\", \")}) without a license. Running in trial mode with a watermark. Get a license: ${PRICING_URL}`\n    );\n    return;\n  }\n  const result = o.validateKey(key);\n  if (result.valid) {\n    const plan = result.data && result.data.plan || \"current\";\n    console.warn(\n      `[ApexCharts] Premium feature${many ? \"s\" : \"\"} in use (${features.join(\", \")}) require a Premium or Enterprise license; the ${plan} plan does not include ${many ? \"them\" : \"it\"}. Running in trial mode with a watermark. Upgrade: ${PRICING_URL}`\n    );\n    return;\n  }\n  if (key !== o.getKey()) {\n    console.error(`[Apex] ${result.message}`);\n  }\n}\nfunction enforceLicense(w2, ctx) {\n  try {\n    if (!Environment.isBrowser()) return;\n    if (w2 && w2.globals && w2.globals.isDestroyed) {\n      enforced.delete(ctx);\n      return;\n    }\n    const elWrap = w2 && w2.dom && w2.dom.elWrap;\n    if (!elWrap) return;\n    const features = premiumFeaturesInUse(w2, ctx);\n    if (features.length === 0) {\n      enforced.delete(ctx);\n      teardownWatermark(ctx, elWrap);\n      return;\n    }\n    enforced.add(ctx);\n    const key = resolveKey(w2);\n    if (licensedForPremium(key)) {\n      teardownWatermark(ctx, elWrap);\n      return;\n    }\n    addWatermark(ctx, elWrap);\n    notifyTrial(ctx, key, features);\n  } catch (e2) {\n  }\n}\nfunction reevaluateLicenseAcrossCharts() {\n  if (!Environment.isBrowser()) return;\n  const visited = /* @__PURE__ */ new Set();\n  const apex = Environment.getApex();\n  const instances = apex && apex._chartInstances;\n  if (Array.isArray(instances)) {\n    instances.forEach((entry) => {\n      const chart = entry && entry.chart;\n      if (chart && chart.w && !chart.w.globals.isDestroyed) {\n        visited.add(chart);\n        enforceLicense(chart.w, chart);\n      }\n    });\n  }\n  Array.from(enforced).forEach((ctx) => {\n    const w2 = ctx && ctx.w;\n    const elWrap = w2 && w2.dom && w2.dom.elWrap;\n    if (!w2 || w2.globals.isDestroyed || !elWrap || elWrap.isConnected === false) {\n      enforced.delete(ctx);\n      return;\n    }\n    if (visited.has(ctx)) return;\n    enforceLicense(w2, ctx);\n  });\n}\no.onChange(reevaluateLicenseAcrossCharts);\nconst _ApexCharts = class _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, \"_zoomPanSelection\");\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 {Promise<any> | null} */\n    __publicField(this, \"_renderPromise\", null);\n    /** @type {any} */\n    __publicField(this, \"config\");\n    /** @type {any} */\n    __publicField(this, \"perspectives\");\n    /** @type {any} */\n    __publicField(this, \"storyboard\");\n    /** @type {any} */\n    __publicField(this, \"history\");\n    /** @type {any} */\n    __publicField(this, \"linkedViews\");\n    /** @type {any} */\n    __publicField(this, \"ink\");\n    /** @type {any} */\n    __publicField(this, \"measure\");\n    /** @type {any} */\n    __publicField(this, \"contextMenu\");\n    /** @type {any} */\n    __publicField(this, \"weave\");\n    /** @type {any} */\n    __publicField(this, \"renderer\");\n    /** @type {any} */\n    __publicField(this, \"rendererController\");\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._updateStats = { fast: 0, fastWithAxes: 0, full: 0 };\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    if (this._renderPromise) return this._renderPromise;\n    const renderPromise = 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((e2) => {\n          var _a3, _b2;\n          const enriched = e2 instanceof Error ? e2 : new Error(String(e2));\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    this._renderPromise = renderPromise;\n    renderPromise.catch(() => {\n      if (this._renderPromise === renderPromise) this._renderPromise = null;\n    });\n    return renderPromise;\n  }\n  /**\n   * @param {any[]} ser\n   * @param {object} opts\n   */\n  create(ser, opts) {\n    var _a, _b, _c, _d, _e, _f;\n    const w2 = 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    applyAnimationPolicy(w2);\n    if (w2.config.xaxis.convertedCatToNumeric) {\n      const defaults = new Defaults(w2.config);\n      defaults.convertCatToNumericXaxis(w2.config, this.ctx);\n    }\n    this.core.setupElements();\n    if (w2.config.chart.type === \"treemap\") {\n      w2.config.grid.show = false;\n      w2.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((s2, realIndex) => {\n      if (s2.hidden) {\n        series = this.legend.legendHelpers.getSeriesAfterCollapsing({\n          realIndex\n        });\n      }\n    });\n    const combo = CoreUtils.checkComboSeries(series, w2.config.chart.type);\n    gl.comboCharts = combo.comboCharts;\n    gl.comboBarCount = combo.comboBarCount;\n    const allSeriesAreEmpty = series.every((s2) => s2.data && s2.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    (_a = this.rendererController) == null ? void 0 : _a.resolve();\n    (_b = this.weave) == null ? void 0 : _b.dispatch(\"afterParse\");\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 === w2.seriesData.series.length || w2.config.legend.showForSingleSeries) {\n      (_c = this.legend) == null ? void 0 : _c.init();\n    }\n    this.series.hasAllSeriesEqualX();\n    if (gl.axisCharts) {\n      this.core.coreCalculations();\n      if (w2.config.xaxis.type !== \"category\") {\n        this.formatters.setLabelFormatters();\n      }\n      if (this.ctx.toolbar) {\n        this.ctx.toolbar.minX = w2.globals.minX;\n        this.ctx.toolbar.maxX = w2.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    (_d = this.weave) == null ? void 0 : _d.dispatch(\"afterScales\", { xyRatios });\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 (w2.config.dataLabels.background.enabled) {\n      dataLabels.dataLabelsBackground();\n    }\n    this.core.shiftGraphPosition();\n    (_f = (_e = this.legend) == null ? void 0 : _e.heatmapGradientLegend) == null ? void 0 : _f.repositionToPlot();\n    if (w2.globals.dataPoints > 50) {\n      w2.dom.elWrap.classList.add(\"apexcharts-disable-transitions\");\n    }\n    const dim = {\n      plot: {\n        left: w2.layout.translateX,\n        top: w2.layout.translateY,\n        width: w2.layout.gridWidth,\n        height: w2.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 w2 = me.w;\n    return new Promise((resolve, reject) => {\n      var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;\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 (w2.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 (w2.config.grid.position === \"back\") {\n        if (elgrid) {\n          w2.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_c = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _c.node) {\n          w2.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (Array.isArray(graphData.elGraph)) {\n        for (let g2 = 0; g2 < graphData.elGraph.length; g2++) {\n          w2.dom.elGraphical.add(graphData.elGraph[g2]);\n        }\n      } else {\n        w2.dom.elGraphical.add(graphData.elGraph);\n      }\n      if (w2.config.grid.position === \"front\") {\n        if (elgrid) {\n          w2.dom.elGraphical.add(elgrid.el);\n        }\n        if ((_d = elgrid == null ? void 0 : elgrid.elGridBorders) == null ? void 0 : _d.node) {\n          w2.dom.elGraphical.add(elgrid.elGridBorders);\n        }\n      }\n      if (w2.config.xaxis.crosshairs.position === \"front\") {\n        me.crosshairs.drawXCrosshairs();\n      }\n      if (w2.config.yaxis[0].crosshairs.position === \"front\") {\n        me.crosshairs.drawYCrosshairs();\n      }\n      if (w2.config.chart.type !== \"treemap\") {\n        me.axes.drawAxis(w2.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        w2.config.yaxis.map((yaxe, index) => {\n          if (w2.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 (!w2.globals.noData) {\n        if (Environment.isBrowser() && w2.config.tooltip.enabled && !w2.globals.noData) {\n          (_f = me.w.globals.tooltip) == null ? void 0 : _f.drawTooltip(graphData.xyRatios);\n        }\n        if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.keyboard.enabled && w2.config.chart.accessibility.keyboard.navigation.enabled) {\n          (_g = me.keyboardNavigation) == null ? void 0 : _g.init();\n        }\n        if (Environment.isBrowser() && w2.globals.axisCharts && (w2.axisFlags.isXNumeric || /** @type {Record<string,any>} */\n        w2.config.xaxis.convertedCatToNumeric || w2.axisFlags.isRangeBar)) {\n          if (w2.config.chart.zoom.enabled || w2.config.chart.selection && w2.config.chart.selection.enabled || // @ts-ignore — chart.pan is an internal toolbar config property\n          w2.config.chart.pan && w2.config.chart.pan.enabled) {\n            (_h = me.zoomPanSelection) == null ? void 0 : _h.init({\n              xyRatios: graphData.xyRatios\n            });\n          }\n        } else {\n          const tools = w2.config.chart.toolbar.tools;\n          const toolsArr = [\n            \"zoom\",\n            \"zoomin\",\n            \"zoomout\",\n            \"selection\",\n            \"pan\",\n            \"reset\"\n          ];\n          toolsArr.forEach((t2) => {\n            tools[t2] = false;\n          });\n        }\n        if (w2.config.chart.toolbar.show && !w2.globals.allSeriesCollapsed) {\n          (_i = me.toolbar) == null ? void 0 : _i.createToolbar();\n        }\n      }\n      (_j = me.weave) == null ? void 0 : _j.dispatch(\"draw\", {\n        pass: \"full\",\n        xyRatios: graphData == null ? void 0 : graphData.xyRatios\n      });\n      if (w2.globals.memory.methodsToExec.length > 0) {\n        w2.globals.memory.methodsToExec.forEach((fn) => {\n          fn.method(fn.params, false, fn.context);\n        });\n      }\n      if (!w2.globals.axisCharts && !w2.globals.noData) {\n        me.core.resizeNonAxisCharts();\n      }\n      enforceLicense(w2, me);\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    this._renderPromise = null;\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        (c2, i2) => {\n          if (c2.id === Utils$1.escapeString(chartID)) {\n            Apex._chartInstances.splice(i2, 1);\n          }\n        }\n      );\n    }\n    if (this._keyboardNavigation) {\n      this._keyboardNavigation.destroy();\n    }\n    teardownWatermark(this);\n    untrackChart(this);\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 w2 = this.w;\n    if (options2 && \"series\" in options2 && !Array.isArray(options2.series)) {\n      console.warn(\n        \"ApexCharts: updateOptions() ignored `series` because it is not an array.\"\n      );\n      options2 = __spreadValues({}, options2);\n      delete options2.series;\n    }\n    w2.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 && !_ApexCharts._optionsTooBigToCompare(options2)) {\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          (s2, i2) => {\n            return this.updateHelpers._extendSeries(s2, i2);\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 (w2.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    if (!Array.isArray(newSeries)) {\n      console.warn(\n        \"ApexCharts: updateSeries() ignored the call because the series is not an array.\"\n      );\n      return Promise.resolve(this);\n    }\n    this.data.resetParsingFlags();\n    this.series.prepareDataUpdate();\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.prepareDataUpdate();\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    if (me.w.config.chart.animations.enabled) {\n      me.series.getPreviousPaths();\n    }\n    const histRaw = me.w.globals.histogramRawSeries;\n    if (histRaw) {\n      for (let i2 = 0; i2 < histRaw.length; i2++) {\n        const src = (\n          /** @type {any} */\n          newData[i2]\n        );\n        if (src && Array.isArray(src.data) && Array.isArray(histRaw[i2].data)) {\n          for (let j = 0; j < src.data.length; j++) {\n            histRaw[i2].data.push(src.data[j]);\n          }\n        }\n      }\n      return this.update();\n    }\n    const newSeries = me.w.config.series.slice();\n    for (let i2 = 0; i2 < newSeries.length; i2++) {\n      if (newData[i2] !== null && typeof newData[i2] !== \"undefined\") {\n        const srcSerie = (\n          /** @type {any} */\n          newData[i2]\n        );\n        const dstSerie = (\n          /** @type {any} */\n          newSeries[i2]\n        );\n        for (let j = 0; j < srcSerie.data.length; j++) {\n          dstSerie.data.push(srcSerie.data[j]);\n        }\n      }\n    }\n    trimStreamingSeries(newSeries, me.w);\n    me.w.config.series = newSeries;\n    if (overwriteInitialSeries) {\n      me.w.globals.initialSeries = me.w.config.series;\n    }\n    return this.update();\n  }\n  /**\n   * True when an options object carries enough series data that a\n   * JSON.stringify equality check (and the Utils.clone needed to store it for\n   * later comparison) would cost more than the re-render it tries to avoid.\n   * @param {any} options\n   * @returns {boolean}\n   */\n  static _optionsTooBigToCompare(options2) {\n    const series = options2 && options2.series;\n    if (!Array.isArray(series)) return false;\n    let points = 0;\n    for (let i2 = 0; i2 < series.length; i2++) {\n      const d = series[i2] && series[i2].data;\n      points += Array.isArray(d) ? d.length : 1;\n      if (points > 1e3) return true;\n    }\n    return false;\n  }\n  /**\n   * @param {object} [options]\n   */\n  update(options2) {\n    return new Promise((resolve, reject) => {\n      if (options2 && this.lastUpdateOptions && !_ApexCharts._optionsTooBigToCompare(options2) && JSON.stringify(this.lastUpdateOptions) === JSON.stringify(options2)) {\n        return resolve(this);\n      }\n      this.lastUpdateOptions = options2 && !_ApexCharts._optionsTooBigToCompare(options2) ? Utils$1.clone(options2) : null;\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        applyAxisTransition(this.w);\n        applyDataLabelTransition(this.w);\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((e2) => {\n        reject(e2);\n      });\n    });\n  }\n  /**\n   * Redraws the scale-dependent chrome (grid lines, x-axis, y-axes) IN PLACE\n   * within the frozen layout after a data-only update changed the axis\n   * domain. The rebuilt groups replace the old nodes positionally, so z-order\n   * (grid back/front) is preserved without re-running mount. Legend,\n   * annotations containers, toolbar, defs/masks, and the plot geometry are\n   * untouched.\n   *\n   * Returns false when the refresh cannot faithfully reproduce the chart and\n   * the caller must fall back to a full render:\n   * - horizontal bar charts (inversed axes draw through a different path)\n   * - charts with annotations or ink notes (their positions are scale-bound\n   *   and are laid out by the full render)\n   * - the new y labels no longer fit the width reserved at layout time\n   *\n   * @param {any} _xyRatios\n   * @returns {boolean} true when the chrome was refreshed in place\n   */\n  _fastAxisChromeRefresh(_xyRatios) {\n    const w2 = this.w;\n    const gl = w2.globals;\n    this._fastAxisBailReason = \"\";\n    try {\n      if (gl.isBarHorizontal) {\n        this._fastAxisBailReason = \"barHorizontal\";\n        return false;\n      }\n      if (w2.config.chart.sparkline.enabled) return true;\n      const a2 = w2.config.annotations;\n      if (a2 && (a2.yaxis && a2.yaxis.length || a2.xaxis && a2.xaxis.length || a2.points && a2.points.length || a2.texts && a2.texts.length || a2.images && a2.images.length)) {\n        this._fastAxisBailReason = \"annotations\";\n        return false;\n      }\n      if (w2.config.chart.ink && w2.config.chart.ink.enabled) {\n        this._fastAxisBailReason = \"ink\";\n        return false;\n      }\n      const dim = this.dimensions;\n      if (!dim || !dim.dimYAxis) {\n        this._fastAxisBailReason = \"noDimensions\";\n        return false;\n      }\n      const prevYLabelsCoords = w2.layout.yLabelsCoords;\n      const prevYTitleCoords = w2.layout.yTitleCoords;\n      const yaxisLabelCoords = dim.dimYAxis.getyAxisLabelsCoords();\n      const yTitleCoords = dim.dimYAxis.getyAxisTitleCoords();\n      w2.layout.yLabelsCoords = [];\n      w2.layout.yTitleCoords = [];\n      w2.config.yaxis.map((_yaxe, index) => {\n        w2.layout.yLabelsCoords.push({\n          width: yaxisLabelCoords[index].width,\n          index\n        });\n        w2.layout.yTitleCoords.push(\n          /** @type {any} */\n          { width: yTitleCoords[index].width, index }\n        );\n      });\n      const newYAxisWidth = dim.dimYAxis.getTotalYAxisWidth();\n      if (newYAxisWidth > dim.yAxisWidth + 2) {\n        w2.layout.yLabelsCoords = prevYLabelsCoords;\n        w2.layout.yTitleCoords = prevYTitleCoords;\n        this._fastAxisBailReason = `labelWidth ${newYAxisWidth} > ${dim.yAxisWidth}`;\n        return false;\n      }\n      const innerEl = w2.dom.elGraphical.node;\n      const oldGrid = innerEl.querySelector(\".apexcharts-grid\");\n      const oldGridBorders = innerEl.querySelector(\".apexcharts-grid-borders\");\n      if (!oldGrid) {\n        this._fastAxisBailReason = \"missingGridNode\";\n        return false;\n      }\n      const gridParent = oldGrid.parentNode;\n      const gridNext = oldGridBorders ? oldGridBorders.nextSibling : oldGrid.nextSibling;\n      oldGrid.remove();\n      if (oldGridBorders) oldGridBorders.remove();\n      innerEl.querySelectorAll(\".apexcharts-xaxis-tick\").forEach((t2) => t2.remove());\n      this.grid = new Grid(w2, this);\n      const elgrid = this.grid.drawGrid();\n      if (elgrid && elgrid.el) {\n        gridParent.insertBefore(elgrid.el.node, gridNext);\n        if (elgrid.elGridBorders && elgrid.elGridBorders.node) {\n          gridParent.insertBefore(elgrid.elGridBorders.node, gridNext);\n        }\n      }\n      const xAxis = new XAxis(this.w, this.ctx, elgrid);\n      const oldXaxis = innerEl.querySelector(\".apexcharts-xaxis\");\n      if (oldXaxis) {\n        const xParent = oldXaxis.parentNode;\n        const xNext = oldXaxis.nextSibling;\n        oldXaxis.remove();\n        const elXaxis = xAxis.drawXaxis();\n        xParent.insertBefore(elXaxis.node, xNext);\n      }\n      const yAxis = new YAxis(\n        this.w,\n        { theme: this.theme, timeScale: this.timeScale },\n        elgrid\n      );\n      for (let index = 0; index < w2.config.yaxis.length; index++) {\n        if (gl.ignoreYAxisIndexes.indexOf(index) !== -1) continue;\n        const oldY = w2.dom.baseEl.querySelector(\n          `.apexcharts-yaxis[rel='${index}']`\n        );\n        if (!oldY) {\n          this._fastAxisBailReason = \"missingYAxisNode\";\n          return false;\n        }\n        const yParent = oldY.parentNode;\n        if (!yParent) {\n          this._fastAxisBailReason = \"missingYAxisParent\";\n          return false;\n        }\n        const yNext = oldY.nextSibling;\n        oldY.remove();\n        const elYaxis = yAxis.drawYaxis(index);\n        yParent.insertBefore(elYaxis.node, yNext);\n      }\n      if (elgrid !== null) {\n        xAxis.xAxisLabelCorrections();\n        yAxis.setYAxisTextAlignments();\n        w2.config.yaxis.map((yaxe, index) => {\n          if (gl.ignoreYAxisIndexes.indexOf(index) === -1) {\n            yAxis.yAxisTitleRotate(index, yaxe.opposite);\n          }\n        });\n      }\n      return true;\n    } catch (e2) {\n      this._fastAxisBailReason = \"error: \" + (e2 && /** @type {any} */\n      e2.message);\n      return false;\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   * @param {string} [prevAxisScaleSig] - Signature of the on-screen axis scale\n   *   captured by _updateSeries() before parseData recomputed bounds. When the\n   *   recomputed scale differs, the fast path can't repaint the ruler in place,\n   *   so it delegates to a full render. Omitted -> the check is skipped.\n   * @returns {Promise<ApexCharts>} Resolves with the chart instance.\n   */\n  fastUpdate(animate, prevAxisScaleSig) {\n    return new Promise((resolve, reject) => {\n      var _a, _b, _c;\n      try {\n        const w2 = this.w;\n        const gl = w2.globals;\n        gl.shouldAnimate = animate;\n        gl.dataChanged = true;\n        gl.animationEnded = false;\n        PerformanceCache.invalidateSelectors(w2);\n        const gl2 = w2.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.barCanvasCoords = null;\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 (w2.config.xaxis.type !== \"category\") {\n            this.formatters.setLabelFormatters();\n          }\n        }\n        this.formatters.heatmapLabelFormatters();\n        const xyRatios = this.core.xySettings();\n        if (this._zoomPanSelection) this._zoomPanSelection.xyRatios = xyRatios;\n        const newAxisScaleSig = JSON.stringify({\n          y: (gl.yAxisScale || []).map((s2) => s2 ? s2.result : null),\n          xMin: gl.minX,\n          xMax: gl.maxX\n        });\n        const scaleChanged = gl.axisCharts && prevAxisScaleSig != null && newAxisScaleSig !== prevAxisScaleSig;\n        if (scaleChanged && !this._fastAxisChromeRefresh(xyRatios)) {\n          this._updateStats.full++;\n          return this.update().then(() => resolve(this)).catch(reject);\n        }\n        if (scaleChanged) {\n          this._updateStats.fastWithAxes++;\n        } else {\n          this._updateStats.fast++;\n        }\n        (_a = this.weave) == null ? void 0 : _a.dispatch(\"afterScales\", { pass: \"fast\", xyRatios });\n        const rr = (\n          /** @type {any} */\n          this.ctx.renderer\n        );\n        const reuseCanvasHost = !!(rr && rr.kind === \"canvas\" && rr.canRepaintInPlace && rr.canRepaintInPlace());\n        if (reuseCanvasHost) rr._repaintHostInPlace = true;\n        const innerEl = w2.dom.elGraphical.node;\n        const toRemove = innerEl.querySelectorAll(\n          (reuseCanvasHost ? \"\" : \".apexcharts-canvas-series-wrap, \") + \".apexcharts-plot-series, .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(w2.config.series, xyRatios);\n        const gridEl = innerEl.querySelector(\".apexcharts-grid\");\n        const xaxisEl = innerEl.querySelector(\".apexcharts-xaxis\");\n        const graphs = Array.isArray(elGraph) ? elGraph : [elGraph];\n        const anchor = gridEl && w2.config.grid.position === \"front\" ? gridEl : xaxisEl;\n        if (anchor) {\n          graphs.forEach((g2) => {\n            const node = g2 && g2.node ? g2.node : g2;\n            if (node) innerEl.insertBefore(node, anchor);\n          });\n        } else {\n          graphs.forEach((g2) => {\n            w2.dom.elGraphical.add(g2);\n          });\n        }\n        const dataLabels = new DataLabels(w2, this);\n        dataLabels.bringForward();\n        if (w2.config.dataLabels.background.enabled) {\n          dataLabels.dataLabelsBackground();\n        }\n        if (Environment.isBrowser() && w2.config.tooltip.enabled && !gl.noData) {\n          (_b = w2.globals.tooltip) == null ? void 0 : _b.drawTooltip(xyRatios);\n        }\n        (_c = this.weave) == null ? void 0 : _c.dispatch(\"draw\", { pass: \"fast\", xyRatios });\n        if (typeof w2.config.chart.events.updated === \"function\") {\n          w2.config.chart.events.updated(this, w2);\n        }\n        this.events.fireEvent(\"updated\", [this, w2]);\n        enforceLicense(w2, this);\n        gl.isDirty = true;\n        resolve(this);\n      } catch (e2) {\n        reject(e2);\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 group = (\n      /** @type {ApexCharts[]} */\n      this.getGroupedCharts()\n    );\n    group.splice(0, 0, this);\n    return group;\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(\n      (ch) => this !== ch.chart && !!this.w.config.chart.group && this.w.config.chart.group === ch.group\n    ).map((ch) => ch.chart);\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 c2 = Apex._chartInstances.filter(\n      (ch) => ch.id === chartId\n    )[0];\n    return c2 && c2.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 i2 = 0; i2 < els.length; i2++) {\n      const el = (\n        /** @type {HTMLElement} */\n        els[i2]\n      );\n      const options2 = JSON.parse((_a = els[i2].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   * Set the license key that unlocks the premium features (storyboard, link /\n   * crossfilter, ink, measure, contextMenu, perspectives, history). Without a\n   * valid key those features still work but the chart shows an \"APEXCHARTS\"\n   * trial watermark; a valid key removes it. Keys are shared across the whole\n   * ApexCharts family (apexgantt, apextree, apexsankey, apex-grid-enterprise,\n   * apexstock), so one customer key works everywhere.\n   *\n   * Call before render(). The watermark is re-evaluated on every render/update,\n   * so a late setLicense(validKey) followed by chart.update() clears it.\n   *\n   * Precedence per chart: `chart.license` (most specific) -> this key ->\n   * `window.Apex.license` -> unlicensed (trial).\n   *\n   * @param {string} key  the `APEX-<base64(JSON)>` license key\n   * @returns {typeof ApexCharts}\n   */\n  static setLicense(key) {\n    o.setLicense(key);\n    reevaluateLicenseAcrossCharts();\n    return _ApexCharts;\n  }\n  /**\n   * Register a Weave plugin definition (a plain { name, setup } object).\n   * Lives in core so plugins can always be registered; they only activate when\n   * the Weave host is bundled (`import 'apexcharts/features/weave'`, included in\n   * the full bundle) and listed in a chart's `plugins` config.\n   *\n   * @param {{ name: string, apiVersion?: number, setup: Function, destroy?: Function }} def\n   * @returns {typeof ApexCharts}\n   */\n  static registerPlugin(def) {\n    registerPlugin(def);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a registered Weave plugin definition. Charts already holding an\n   * active instance keep it until their plugins config changes or they are\n   * destroyed; the name simply stops resolving for new activations. Intended\n   * for tests and hot-reload flows.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterPlugin(name2) {\n    unregisterPlugin(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Register a non-SVG series renderer (Strata #2). SVG is built in; the canvas\n   * backend registers itself via `import 'apexcharts/features/renderer-canvas'`.\n   * When a `kind` is not registered, selection falls back to SVG.\n   *\n   * @param {string} kind  e.g. 'canvas'\n   * @param {(w: any, ctx: any) => any} factory  returns a Renderer instance\n   */\n  static registerRenderer(kind, factory) {\n    RendererController.registerRenderer(kind, factory);\n  }\n  /**\n   * Register a custom series type (Marks #11): a `{ renderItem }` definition\n   * that draws primitives (path/line/rect/circle/text) per datum. Requires the\n   * Marks feature to be bundled (`import 'apexcharts/features/marks'`, included\n   * in the full bundle); without it this warns and no-ops. Once registered, use\n   * it via `series[].type` or `chart.type`.\n   *\n   * @param {string} name  the type name, e.g. 'dumbbell'\n   * @param {{ renderItem: Function, dataType?: string, yExtent?: Function, tooltip?: Function }} def\n   * @returns {typeof ApexCharts}\n   */\n  static registerSeriesType(name2, def) {\n    const factory = (\n      /** @type {any} */\n      _ApexCharts._customSeriesFactory\n    );\n    if (!factory) {\n      console.warn(\n        `[apexcharts] registerSeriesType(\"${name2}\") requires the Marks feature: import 'apexcharts/features/marks'.`\n      );\n      return _ApexCharts;\n    }\n    if (!def || typeof def.renderItem !== \"function\") {\n      console.warn(\n        `[apexcharts] registerSeriesType(\"${name2}\") needs a def with a renderItem() function.`\n      );\n      return _ApexCharts;\n    }\n    if (hasChartClass(name2) && !isCustom(name2)) {\n      console.warn(\n        `[apexcharts] registerSeriesType(\"${name2}\") would override the built-in \"${name2}\" chart type; pick another name.`\n      );\n      return _ApexCharts;\n    }\n    register({ [name2]: factory(name2, def) });\n    markCustom(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a custom series type registered via registerSeriesType. Built-in\n   * chart types cannot be unregistered. Intended for tests and hot-reload.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterSeriesType(name2) {\n    if (isCustom(name2)) unregister(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Facet (#13): register a named theme (palette + design tokens + mode)\n   * referenceable via `theme: { name }`. The theme sits below explicit config\n   * and CSS `--apx-*` tokens, above the built-in palette/mode defaults.\n   *\n   * @param {string} name  the theme name, e.g. 'brand'\n   * @param {any} def  { mode?, palette?, tokens?, monochrome?, accessibility? }\n   * @returns {typeof ApexCharts}\n   */\n  static registerTheme(name2, def) {\n    registerTheme(name2, def);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a theme registered via registerTheme. Charts referencing it by\n   * `theme.name` fall back to the built-in defaults on their next render.\n   * Intended for tests and hot-reload flows.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterTheme(name2) {\n    unregisterTheme(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Cadence (#6): register a named easing function referenceable via\n   * `chart.animations.easing: '<name>'`. `fn` maps linear progress t in [0,1]\n   * to eased progress (back/elastic curves may overshoot 1).\n   *\n   * @param {string} name  the easing name, e.g. 'bounce'\n   * @param {(t:number)=>number} fn\n   * @returns {typeof ApexCharts}\n   */\n  static registerEasing(name2, fn) {\n    registerEasing(name2, fn);\n    return _ApexCharts;\n  }\n  /**\n   * Register a named unit-chart layout, referenceable via\n   * `plotOptions.unit.positions: '<name>'` with `plotOptions.unit.layout:\n   * 'custom'`.\n   *\n   * A layout is objects in, positions out: `(objects, rect) => [{id, x, y,\n   * r?}]`, in plot pixels. It knows nothing about animation, because the engine\n   * already tweens position, radius and colour and already keeps each mark's\n   * identity across a relayout. That is what lets an arrangement the engine\n   * cannot know about - a country silhouette, a hex grid, a timeline, a\n   * projection supplied by ApexMaps - be a plugin rather than a core change.\n   *\n   * Marks whose id the layout omits animate out; ids matching no mark are\n   * ignored.\n   *\n   * @param {string} name  the layout name, e.g. 'silhouette'\n   * @param {(objects: any[], rect: {x:number,y:number,width:number,height:number}) => any[]} fn\n   * @returns {typeof ApexCharts}\n   */\n  static registerUnitLayout(name2, fn) {\n    registerUnitLayout(name2, fn);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a layout registered via registerUnitLayout. Charts referencing it by\n   * name fall back to the grouped layout on their next render.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterUnitLayout(name2) {\n    unregisterUnitLayout(name2);\n    return _ApexCharts;\n  }\n  /**\n   * Register a row source: given a chart's state, what rows is each of its\n   * marks standing for?\n   *\n   * Most marks cannot answer. An ordinary bar aggregates rows the library never\n   * saw. The types that can are the ones whose series carries raw observations\n   * (histogram, boxPlot, violin), and their sources ship with the statistics in\n   * `apexcharts/features/stats`; core keeps only the lookup.\n   *\n   * The function returns a unit-chart series (one cluster per mark, one datum\n   * per row) in the marks' own draw order, or null. See RowSourceRegistry for\n   * why that order is a contract rather than a convention.\n   *\n   * @param {string} name  chart type name, matched against `chart.requestedType` then `chart.type`\n   * @param {(w: any, opts?: any) => any[] | null} fn\n   * @returns {typeof ApexCharts}\n   */\n  static registerRowSource(name2, fn) {\n    registerRowSource(name2, fn);\n    return _ApexCharts;\n  }\n  /**\n   * Remove a row source registered via registerRowSource.\n   * @param {string} name\n   * @returns {typeof ApexCharts}\n   */\n  static unregisterRowSource(name2) {\n    unregisterRowSource(name2);\n    return _ApexCharts;\n  }\n  /**\n   * The rows behind this chart's marks, as a unit-chart series.\n   *\n   * A histogram bar stands for the observations it counted, a box for the\n   * sample it summarises. This hands them back as one cluster per mark, so a\n   * mark can come apart into its own rows:\n   *\n   *     chart.updateOptions({ chart: { type: 'unit' }, series: chart.rowSeries() })\n   *\n   * With the morph feature loaded, each dot then leaves from the part of the\n   * mark that was standing for it, and collapsing back is the inverse.\n   *\n   * Returns null when the chart's type cannot name its rows, or when\n   * `apexcharts/features/stats` (which carries the sources for the types that\n   * can) is not loaded.\n   *\n   * @param {{ maxRows?: number }} [opts] `maxRows` caps the dots produced\n   *   (default 3000, matching the jitter overlay); past it every cluster is\n   *   thinned by one shared stride so their relative sizes survive.\n   * @returns {any[]|null}\n   */\n  rowSeries(opts) {\n    const source = rowSourceFor(this.w);\n    if (!source) return null;\n    return source(this.w, opts) || null;\n  }\n  /**\n   * Linked Views (#4) Phase 2: get-or-create a crossfilter coordinator by id.\n   * Register one shared record set, then let each chart declare a dimension +\n   * reduction under `chart.link`. Selecting in one chart re-aggregates the\n   * others over the filtered subset.\n   *\n   * Lives in core (always callable) but the engine ships in the `link` feature\n   * (`import 'apexcharts/features/link'`, included in the full bundle); without\n   * it this warns and returns null so the engine shakes out when unused.\n   *\n   * @param {{ id: string, records?: any[] }} opts\n   * @returns {any} the coordinator handle, or null if the feature is absent\n   */\n  static crossfilter(opts) {\n    if (!opts || typeof opts.id !== \"string\") {\n      throw new Error(\"ApexCharts.crossfilter requires an { id } string.\");\n    }\n    const factory = (\n      /** @type {any} */\n      _ApexCharts._crossfilterFactory\n    );\n    if (!factory) {\n      console.warn(\n        `[apexcharts] ApexCharts.crossfilter(...) requires the link feature: import 'apexcharts/features/link'.`\n      );\n      return null;\n    }\n    const coordinator = factory(opts);\n    reevaluateLicenseAcrossCharts();\n    return coordinator;\n  }\n  /**\n   * Look up an existing crossfilter coordinator by id (null if none / feature\n   * absent).\n   * @param {string} id\n   * @returns {any}\n   */\n  static getCrossfilter(id) {\n    const get = (\n      /** @type {any} */\n      _ApexCharts._crossfilterGet\n    );\n    return get ? get(id) : null;\n  }\n  /**\n   * Linked Views (#4): clear crossfilter dimming across this chart and every\n   * chart in its `chart.group`. No-op unless the `link` feature is bundled.\n   */\n  clearCrossfilter() {\n    var _a;\n    (_a = this.linkedViews) == null ? void 0 : _a.clearGroup();\n  }\n  /**\n   * Measure ruler (#18): arm a sticky measure-ruler mode (drag A->B on the\n   * plot to read dx/dy/%change/slope). Alternatively hold the measure key\n   * (chart.measure.key, default 'm') and drag. No-op unless the `measure`\n   * feature is bundled and chart.measure.enabled.\n   */\n  startMeasure() {\n    var _a;\n    (_a = this.measure) == null ? void 0 : _a.startMeasure();\n  }\n  /** Measure ruler (#18): leave measure mode. */\n  stopMeasure() {\n    var _a;\n    (_a = this.measure) == null ? void 0 : _a.stopMeasure();\n  }\n  /** Measure ruler (#18): remove all pinned measure rulers. */\n  clearMeasures() {\n    var _a;\n    (_a = this.measure) == null ? void 0 : _a.clearMeasures();\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(e2, targetElement) {\n    return this.series.toggleSeriesOnHover(e2, 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    me.lastUpdateOptions = null;\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    me.lastUpdateOptions = null;\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 w2 = this.w;\n    const gl = w2.globals;\n    return {\n      // Series data — computed/parsed form used for rendering\n      series: w2.seriesData.series,\n      seriesNames: w2.seriesData.seriesNames,\n      colors: gl.colors,\n      labels: w2.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: w2.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: w2.layout.gridWidth,\n      gridHeight: w2.layout.gridHeight,\n      // Interactive state\n      selectedDataPoints: w2.interact.selectedDataPoints,\n      collapsedSeriesIndices: gl.collapsedSeriesIndices,\n      zoomed: w2.interact.zoomed,\n      // Chart-type-specific series data (null when not applicable)\n      seriesX: w2.seriesData.seriesX,\n      seriesZ: w2.seriesData.seriesZ,\n      seriesCandleO: w2.candleData.seriesCandleO,\n      seriesCandleH: w2.candleData.seriesCandleH,\n      seriesCandleM: w2.candleData.seriesCandleM,\n      seriesCandleL: w2.candleData.seriesCandleL,\n      seriesCandleC: w2.candleData.seriesCandleC,\n      seriesRangeStart: w2.rangeData.seriesRangeStart,\n      seriesRangeEnd: w2.rangeData.seriesRangeEnd,\n      seriesGoals: w2.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   * Returns the active series renderer for the last render: `'svg'` (default)\n   * or `'canvas'` (Strata #2). `'auto'`/`'canvas'` resolve to `'svg'` unless the\n   * canvas renderer feature is bundled and no canvas-unsupported feature is in\n   * use. See `chart.renderer` / `chart.rendererThreshold`.\n   *\n   * @returns {'svg' | 'canvas' | 'gpu'}\n   */\n  getActiveRenderer() {\n    return this.rendererController ? this.rendererController.getActiveKind() : \"svg\";\n  }\n  /**\n   * Facet (#13): re-resolve the `--apx-*` design tokens and re-render.\n   *\n   * Tokens are read from the CSS cascade once per render, so a runtime change\n   * that is NOT an OS color-scheme flip (e.g. the host app swaps its own\n   * design-system theme by toggling a class or setting style properties) is\n   * invisible until the next render, and `updateOptions({})` is memoized away.\n   * This busts the memo and re-renders, picking up the current token values.\n   * @returns {Promise<any>}\n   */\n  refreshTokens() {\n    this.lastUpdateOptions = null;\n    return this.update();\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  /**\n   * Drops levels cached from `drilldown.onDrillDown`, so the next drill re-runs\n   * the resolver. Call it when the data behind an already-drilled chart changes.\n   * Requires the Drilldown feature: `import 'apexcharts/features/drilldown'`.\n   *\n   * @param {string|number} [id] - A single level id, or every level when omitted.\n   * @returns {ApexCharts}\n   */\n  clearDrilldownCache(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.clearCache(id);\n  }\n  // ─── Slice write-back stubs ─────────────────────────────────────────────────\n  /**\n   * Copy own DATA properties of a parse-state slice onto a live w.* slice.\n   * Never Object.assign here: several w.* fields (and, historically, snapshot\n   * fields) are lazy accessors, and [[Get]]-ing an accessor while copying\n   * forces its deferred computation (a deep initialSeries clone plus O(n)\n   * stacked-totals passes on every render/update) and can replace the live\n   * accessor with a materialized value for the life of the instance.\n   * @param {any} target\n   * @param {any} slice\n   */\n  static _writeDataProps(target, slice) {\n    for (const key of Object.keys(slice)) {\n      const d = Object.getOwnPropertyDescriptor(slice, key);\n      if (d && \"value\" in d) target[key] = d.value;\n    }\n  }\n  /**\n   * @param {Partial<import('./types/internal').SeriesData>} slice\n   */\n  _writeParsedSeriesData(slice) {\n    _ApexCharts._writeDataProps(this.w.seriesData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').RangeData>} slice\n   */\n  _writeParsedRangeData(slice) {\n    _ApexCharts._writeDataProps(this.w.rangeData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').CandleData>} slice\n   */\n  _writeParsedCandleData(slice) {\n    _ApexCharts._writeDataProps(this.w.candleData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LabelData>} slice\n   */\n  _writeParsedLabelData(slice) {\n    _ApexCharts._writeDataProps(this.w.labelData, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').AxisFlags>} slice\n   */\n  _writeParsedAxisFlags(slice) {\n    _ApexCharts._writeDataProps(this.w.axisFlags, slice);\n  }\n  /**\n   * @param {Partial<import('./types/internal').LayoutCoords>} slice\n   */\n  _writeLayoutCoords(slice) {\n    _ApexCharts._writeDataProps(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      const gl = this.w.globals;\n      if (this.core && gl.lastResizeSignature) {\n        const sig = this.core.getResizeSignature();\n        if (sig.w === gl.lastResizeSignature.w && sig.h === gl.lastResizeSignature.h && sig.iw === gl.lastResizeSignature.iw) {\n          return;\n        }\n      }\n      gl.resized = true;\n      gl.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};\n/**\n * Static Perspectives helpers (decode/fromURL), populated by the perspectives\n * feature when imported (`import 'apexcharts/features/perspectives'`); null\n * otherwise. Declared here as a placeholder so core stays free of the\n * Perspectives module while the assignment in the feature file type-checks.\n * @type {any}\n */\n__publicField(_ApexCharts, \"perspectives\", null);\nlet ApexCharts = _ApexCharts;\nclass Exports {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\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   * Inline any Strata canvas series layer into the clone as an SVG `<image>`.\n   * A serialized `<canvas>` loses its bitmap, so a canvas-mode export would drop\n   * the series; an `<image>` carrying the canvas `toDataURL()` preserves it in\n   * place. Because it replaces the `<foreignObject>` at the same DOM position,\n   * the grid-behind / annotations-in-front z-order is retained automatically.\n   * No-op in SVG mode (no series canvas present).\n   * @param {any} clonedNode the cloned elWrap about to be serialized\n   */\n  inlineCanvasLayers(clonedNode) {\n    const w2 = this.w;\n    const XLINK = \"http://www.w3.org/1999/xlink\";\n    const origCanvases = w2.dom.elWrap.querySelectorAll(\n      \".apexcharts-series-canvas\"\n    );\n    if (!origCanvases.length) return;\n    const clonedFOs = clonedNode.querySelectorAll(\".apexcharts-canvas-series\");\n    for (let i2 = 0; i2 < origCanvases.length && i2 < clonedFOs.length; i2++) {\n      let dataURL;\n      try {\n        dataURL = /** @type {HTMLCanvasElement} */\n        origCanvases[i2].toDataURL();\n      } catch (e2) {\n        continue;\n      }\n      const fo = clonedFOs[i2];\n      const img = document.createElementNS(SVGNS$2, \"image\");\n      img.setAttribute(\"x\", fo.getAttribute(\"x\") || \"0\");\n      img.setAttribute(\"y\", fo.getAttribute(\"y\") || \"0\");\n      img.setAttribute(\"width\", fo.getAttribute(\"width\") || \"0\");\n      img.setAttribute(\"height\", fo.getAttribute(\"height\") || \"0\");\n      img.setAttribute(\"href\", dataURL);\n      img.setAttributeNS(XLINK, \"xlink:href\", dataURL);\n      if (fo.parentNode) fo.parentNode.replaceChild(img, fo);\n    }\n  }\n  /**\n   * `querySelectorAll` as a typed array. Both HTML and SVG elements carry\n   * `style` / `classList`, but `NodeListOf<Element>` does not.\n   * @param {ParentNode} root\n   * @param {string} selector\n   * @returns {Array<HTMLElement | SVGElement>}\n   */\n  queryStyleable(root, selector) {\n    return (\n      /** @type {Array<HTMLElement | SVGElement>} */\n      Array.prototype.slice.call(root.querySelectorAll(selector))\n    );\n  }\n  /**\n   * Applies `styles` only where the element has no inline value for that\n   * property yet.\n   *\n   * The rules being re-applied here came from a stylesheet, so anything a\n   * module set inline has to keep winning exactly like it does in the live\n   * DOM: `legend.fontSize` (Legend.js) and the heatmap gradient legend's\n   * deliberate `display`/`overflow`/`padding` overrides on the legend wrap\n   * (HeatmapGradientLegend.js) would otherwise be clobbered in the export.\n   * @param {HTMLElement | SVGElement} el\n   * @param {Record<string, string>} styles\n   */\n  setStyleDefaults(el, styles) {\n    Object.keys(styles).forEach((prop) => {\n      if (el.style.getPropertyValue(prop) === \"\") {\n        el.style.setProperty(prop, styles[prop]);\n      }\n    });\n  }\n  /**\n   * Re-applies, as inline styles on the clone, the rules that used to reach\n   * the exported SVG through an injected `<style>` block. A strict\n   * Content-Security-Policy without `'unsafe-inline'` blocks that block and\n   * breaks the export, so the export must not depend on one. See #5146.\n   *\n   * Mirrors `src/assets/apexcharts-legend.css`. Interaction-only rules\n   * (`cursor`, `pointer-events`) are carried over for parity even though they\n   * do nothing in a static image; the layout rules are what matter.\n   * @param {HTMLElement} clonedNode the cloned elWrap about to be serialized\n   */\n  applyExportStyles(clonedNode) {\n    const w2 = this.w;\n    this.queryStyleable(clonedNode, \"style\").forEach((el) => el.remove());\n    this.queryStyleable(\n      clonedNode,\n      [\n        \".apexcharts-tooltip\",\n        \".apexcharts-toolbar\",\n        \".apexcharts-xaxistooltip\",\n        \".apexcharts-yaxistooltip\",\n        \".apexcharts-xcrosshairs\",\n        \".apexcharts-ycrosshairs\",\n        \".apexcharts-zoom-rect\",\n        \".apexcharts-selection-rect\"\n      ].join(\", \")\n    ).forEach((el) => {\n      el.style.setProperty(\"display\", \"none\", \"important\");\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-flip-y\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        transform: \"scaleY(-1) translateY(-100%)\",\n        \"transform-origin\": \"top\",\n        \"transform-box\": \"fill-box\"\n      });\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-flip-x\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        transform: \"scaleX(-1)\",\n        \"transform-origin\": \"center\",\n        \"transform-box\": \"fill-box\"\n      });\n    });\n    if (!w2.config.legend.show || !w2.dom.elLegendWrap || !w2.dom.elLegendWrap.children.length) {\n      return;\n    }\n    this.queryStyleable(clonedNode, \".apexcharts-legend\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        display: \"flex\",\n        overflow: \"auto\",\n        padding: \"0 10px\"\n      });\n      const cl = el.classList;\n      const isSide = cl.contains(\"apx-legend-position-left\") || cl.contains(\"apx-legend-position-right\");\n      const isTopOrBottom = cl.contains(\"apx-legend-position-top\") || cl.contains(\"apx-legend-position-bottom\");\n      if (cl.contains(\"apexcharts-legend-group-horizontal\")) {\n        this.setStyleDefaults(el, { \"flex-direction\": \"column\" });\n      }\n      if (isSide) {\n        this.setStyleDefaults(el, { \"flex-direction\": \"column\", bottom: \"0\" });\n      }\n      if (isTopOrBottom) {\n        this.setStyleDefaults(el, { \"flex-wrap\": \"wrap\" });\n      }\n      if (isSide || isTopOrBottom && cl.contains(\"apexcharts-align-left\")) {\n        this.setStyleDefaults(el, {\n          \"justify-content\": \"flex-start\",\n          \"align-items\": \"flex-start\"\n        });\n      } else if (isTopOrBottom && cl.contains(\"apexcharts-align-center\")) {\n        this.setStyleDefaults(el, {\n          \"justify-content\": \"center\",\n          \"align-items\": \"center\"\n        });\n      } else if (isTopOrBottom && cl.contains(\"apexcharts-align-right\")) {\n        this.setStyleDefaults(el, {\n          \"justify-content\": \"flex-end\",\n          \"align-items\": \"flex-end\"\n        });\n      }\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-legend-group\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, { display: \"flex\" });\n      }\n    );\n    this.queryStyleable(\n      clonedNode,\n      \".apexcharts-legend-group-vertical\"\n    ).forEach((el) => {\n      this.setStyleDefaults(el, { \"flex-direction\": \"column-reverse\" });\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-legend-series\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, {\n          cursor: el.classList.contains(\"apexcharts-no-click\") ? \"auto\" : \"pointer\",\n          \"line-height\": \"normal\",\n          display: \"flex\",\n          \"align-items\": \"center\"\n        });\n      }\n    );\n    this.queryStyleable(clonedNode, \".apexcharts-legend-text\").forEach((el) => {\n      this.setStyleDefaults(el, {\n        position: \"relative\",\n        \"font-size\": \"14px\"\n      });\n    });\n    this.queryStyleable(clonedNode, \".apexcharts-legend-marker\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, {\n          position: \"relative\",\n          display: \"flex\",\n          \"align-items\": \"center\",\n          \"justify-content\": \"center\",\n          cursor: \"pointer\",\n          \"margin-right\": \"1px\"\n        });\n      }\n    );\n    this.queryStyleable(clonedNode, \".apexcharts-inactive-legend\").forEach(\n      (el) => {\n        this.setStyleDefaults(el, { opacity: \"0.45\" });\n      }\n    );\n    this.queryStyleable(\n      clonedNode,\n      \".apexcharts-legend .apexcharts-hidden-zero-series, .apexcharts-legend .apexcharts-hidden-null-series\"\n    ).forEach((el) => {\n      el.style.setProperty(\"display\", \"none\", \"important\");\n    });\n  }\n  /**\n   * The colour a raster export paints under the chart.\n   *\n   * A PNG needs an opaque base, so `dataURI` fills the canvas before drawing\n   * the SVG onto it. That fill used to be `#fff` whenever `chart.background`\n   * was unset *or* `'transparent'`, which is wrong for a dark theme:\n   * `theme.mode: 'dark'` moves `chart.foreColor` to a near-white `#f6f7f8` but\n   * leaves the background alone, so `background: 'transparent'` produced\n   * near-white labels, axes and legend on white — a PNG that looked like it had\n   * lost all its text. See #2920.\n   *\n   * The unset-background case was already covered: `Core.setupElements` paints\n   * the SVG paper `#343A3F` for a dark theme, and the clone carries that inline\n   * style into the export. `'transparent'` is the gap, because it makes that\n   * paper style transparent too and nothing is left to cover the white fill.\n   *\n   * An explicit non-transparent `chart.background` still wins, including one\n   * written by the Facet `--apx-surface` token (Theme assigns it into the same\n   * field).\n   * @returns {string}\n   */\n  resolveExportBackground() {\n    const w2 = this.w;\n    const bg = w2.config.chart.background;\n    if (bg && bg !== \"transparent\") return bg;\n    return w2.config.theme.mode === \"dark\" ? \"#343A3F\" : \"#fff\";\n  }\n  /**\n   * Font families the rendered chart actually paints with.\n   *\n   * Read off the live DOM rather than the config: computed styles resolve\n   * `chart.fontFamily`, every per-element `style.fontFamily` override, and any\n   * family the chart inherits from the page, none of which are reliably\n   * enumerable from config alone. The clone is not in the document, so its\n   * computed styles would come back empty.\n   * @returns {Set<string>}\n   */\n  collectFontFamilies() {\n    const families = /* @__PURE__ */ new Set();\n    const w2 = this.w;\n    if (!Environment.isBrowser() || !w2.dom.elWrap) return families;\n    const els = this.queryStyleable(\n      w2.dom.elWrap,\n      \"text, tspan, .apexcharts-legend-text, .apexcharts-title-text, .apexcharts-subtitle-text\"\n    );\n    const all = [w2.dom.elWrap, ...els];\n    all.forEach((el) => {\n      const cs = (\n        /** @type {any} */\n        BrowserAPIs.getComputedStyle(\n          /** @type {any} */\n          el\n        )\n      );\n      const ff = cs && cs.fontFamily;\n      if (!ff) return;\n      ff.split(\",\").forEach((name2) => {\n        const clean = name2.trim().replace(/^['\"]|['\"]$/g, \"\");\n        if (clean) families.add(clean.toLowerCase());\n      });\n    });\n    return families;\n  }\n  /**\n   * Every `@font-face` rule reachable from the document, as `{ family, css }`.\n   *\n   * Same-origin sheets are read through `cssRules`. A cross-origin sheet throws\n   * on that access, so it is re-fetched by href and its `@font-face` blocks are\n   * pulled out of the text: that is the path that matters in practice, since\n   * hosted webfonts (the subject of #3617) are exactly the cross-origin case.\n   * @returns {Promise<Array<{family: string, css: string}>>}\n   */\n  collectFontFaceRules() {\n    if (!Environment.isBrowser()) return Promise.resolve([]);\n    const found = [];\n    const remote = [];\n    const pushFromText = (cssText) => {\n      const blocks = cssText.match(/@font-face\\s*\\{[^}]*\\}/gi) || [];\n      blocks.forEach((css) => {\n        const m2 = css.match(/font-family\\s*:\\s*([^;}]+)/i);\n        if (!m2) return;\n        const family = m2[1].trim().replace(/^['\"]|['\"]$/g, \"\");\n        found.push({ family: family.toLowerCase(), css });\n      });\n    };\n    const sheets = Array.from(document.styleSheets || []);\n    sheets.forEach((sheet) => {\n      let rules = null;\n      try {\n        rules = sheet.cssRules;\n      } catch (e2) {\n        rules = null;\n      }\n      if (rules) {\n        Array.from(rules).forEach((rule) => {\n          if (rule.type === 5 && rule.cssText) pushFromText(rule.cssText);\n        });\n        return;\n      }\n      if (sheet.href) {\n        remote.push(\n          fetch(sheet.href).then((r2) => r2.ok ? r2.text() : \"\").then(pushFromText).catch(() => {\n          })\n        );\n      }\n    });\n    return Promise.all(remote).then(() => found);\n  }\n  /**\n   * Inline the `@font-face` rules for the families the chart uses, with the\n   * font files themselves as base64 data URIs, into the exported SVG.\n   *\n   * Needed because the export is a standalone document: rasterizing it through\n   * `<img src=\"data:image/svg+xml,...\">` gives it no access to the page's\n   * stylesheets *or* its loaded fonts, and an SVG-as-image may not fetch\n   * external resources at all. Without this the text silently reflows into a\n   * generic fallback face. See #3617.\n   *\n   * `@font-face` only exists as a stylesheet construct, so unlike the rules in\n   * `applyExportStyles` this cannot be expressed as inline styles and has to\n   * ship as a `<style>` element. A page whose CSP forbids inline styles will\n   * drop it and fall back to today's behaviour, which is why the whole thing is\n   * best-effort: any failure leaves the export exactly as it was.\n   * @param {any} svgNode the parsed outer <svg> about to be serialized\n   * @returns {Promise<void>}\n   */\n  embedFonts(svgNode) {\n    const w2 = this.w;\n    if (!Environment.isBrowser() || !w2.config.chart.toolbar.export.embedFonts || typeof fetch !== \"function\") {\n      return Promise.resolve();\n    }\n    const used = this.collectFontFamilies();\n    if (!used.size) return Promise.resolve();\n    return this.collectFontFaceRules().then((faces) => {\n      const wanted = faces.filter((f) => used.has(f.family));\n      if (!wanted.length) return Promise.resolve([]);\n      return Promise.all(\n        wanted.map(\n          (face) => this.inlineFontFaceUrls(face.css).catch(() => null)\n        )\n      );\n    }).then((cssBlocks) => {\n      const css = (cssBlocks || []).filter(Boolean).join(\"\\n\");\n      if (!css) return;\n      const style = document.createElementNS(SVGNS$2, \"style\");\n      style.textContent = css;\n      svgNode.insertBefore(style, svgNode.firstChild);\n    }).catch(() => {\n    });\n  }\n  /**\n   * Replace every remote `url(...)` in one `@font-face` block with a base64\n   * data URI. Resolves to null if no url could be fetched, so the caller can\n   * drop a block that would only reference unreachable files.\n   * @param {string} css\n   * @returns {Promise<string | null>}\n   */\n  inlineFontFaceUrls(css) {\n    const urls = [];\n    const re = /url\\(\\s*(['\"]?)([^'\")]+)\\1\\s*\\)/gi;\n    let m2;\n    while ((m2 = re.exec(css)) !== null) {\n      if (!m2[2].startsWith(\"data:\")) urls.push(m2[2]);\n    }\n    if (!urls.length) return Promise.resolve(css.includes(\"data:\") ? css : null);\n    return Promise.all(\n      urls.map(\n        (url) => this.fetchAsDataUri(url).then((dataUri) => ({ url, dataUri })).catch(() => ({ url, dataUri: null }))\n      )\n    ).then((results) => {\n      let out = css;\n      let replaced = 0;\n      results.forEach(({ url, dataUri }) => {\n        if (!dataUri) return;\n        out = out.split(url).join(dataUri);\n        replaced++;\n      });\n      return replaced ? out : null;\n    });\n  }\n  /**\n   * Fetch a binary asset as a base64 data URI.\n   *\n   * Uses `fetch` rather than the `<img>`+canvas route in `getBase64FromUrl`:\n   * that route only works for raster images and taints the canvas for any\n   * response without CORS headers, whereas this works for fonts too and fails\n   * cleanly when CORS denies it.\n   * @param {string} url\n   * @returns {Promise<string>}\n   */\n  fetchAsDataUri(url) {\n    if (typeof fetch !== \"function\" || typeof btoa !== \"function\") {\n      return Promise.reject(new Error(\"fetch unavailable\"));\n    }\n    return fetch(url).then((res) => {\n      if (!res.ok) throw new Error(`HTTP ${res.status} for ${url}`);\n      const type = res.headers.get(\"content-type\") || \"application/octet-stream\";\n      return res.arrayBuffer().then((buf) => {\n        const bytes = new Uint8Array(buf);\n        let binary = \"\";\n        const CHUNK = 32768;\n        for (let i2 = 0; i2 < bytes.length; i2 += CHUNK) {\n          binary += String.fromCharCode.apply(\n            null,\n            /** @type {any} */\n            bytes.subarray(i2, i2 + CHUNK)\n          );\n        }\n        return `data:${type};base64,${btoa(binary)}`;\n      });\n    });\n  }\n  /**\n   * @param {number} [_scale]\n   */\n  getSvgString(_scale) {\n    return new Promise((resolve) => {\n      const w2 = this.w;\n      let scale = _scale || w2.config.chart.toolbar.export.scale || w2.config.chart.toolbar.export.width / w2.globals.svgWidth;\n      if (!scale) {\n        scale = 1;\n      }\n      const width = w2.globals.svgWidth * scale;\n      const height = w2.globals.svgHeight * scale;\n      const clonedNode = (\n        /** @type {HTMLElement} */\n        w2.dom.elWrap.cloneNode(true)\n      );\n      clonedNode.style.width = width + \"px\";\n      clonedNode.style.height = height + \"px\";\n      this.inlineCanvasLayers(clonedNode);\n      this.applyExportStyles(clonedNode);\n      const serializedNode = new XMLSerializer().serializeToString(clonedNode);\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=\"${w2.globals.svgWidth}px\" height=\"${w2.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              ${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      Promise.all([\n        this.convertImagesToBase64(svgNode),\n        this.embedFonts(svgNode)\n      ]).then(() => {\n        svgString = new XMLSerializer().serializeToString(svgNode);\n        resolve(svgString.replace(/&nbsp;/g, \"&#160;\"));\n      });\n    });\n  }\n  /**\n   * Turn every remote `<image>` in the export into an inline data URI.\n   *\n   * This is not an optimisation: an SVG rasterized through `<img src=\"data:...\">`\n   * is not allowed to fetch external resources, so any href left pointing at a\n   * URL vanishes from the PNG entirely. Image annotations and `hollow.image`\n   * were disappearing from downloads for exactly this reason. See #3170.\n   *\n   * Two things were missing before. `SVGContainer.image()` writes `xlink:href`,\n   * but Strata's inlined canvas layers and hand-authored `customSVG` markup use\n   * the plain `href` form, and only the namespaced attribute was being read.\n   * And conversion went through `<img>`+canvas, which taints (and therefore\n   * throws) for any response without CORS headers, so a cross-origin icon,\n   * the common case, silently failed. `fetch` is tried first and only falls\n   * back to the canvas route, which still helps for a same-origin image on a\n   * page whose CSP blocks `connect-src`.\n   * @param {any} svgNode\n   */\n  convertImagesToBase64(svgNode) {\n    const XLINK = \"http://www.w3.org/1999/xlink\";\n    const images = svgNode.getElementsByTagName(\"image\");\n    const promises = Array.from(images).map((img) => {\n      const nsHref = img.getAttributeNS(XLINK, \"href\");\n      const plainHref = img.getAttribute(\"href\");\n      const href = nsHref || plainHref;\n      if (!href || href.startsWith(\"data:\")) return Promise.resolve();\n      const write = (base64) => {\n        if (nsHref) img.setAttributeNS(XLINK, \"href\", base64);\n        if (plainHref || !nsHref) img.setAttribute(\"href\", base64);\n      };\n      return this.fetchAsDataUri(href).then(write).catch(\n        () => this.getBase64FromUrl(href).then(write).catch((error) => {\n          console.error(\"Error converting image to base64:\", error);\n        })\n      );\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 w2 = this.w;\n      const scale = options2 ? options2.scale || options2.width / w2.globals.svgWidth : 1;\n      const canvas = document.createElement(\"canvas\");\n      canvas.width = w2.globals.svgWidth * scale;\n      canvas.height = parseInt(w2.dom.elWrap.style.height, 10) * scale;\n      const canvasBg = this.resolveExportBackground();\n      const ctx = canvas.getContext(\"2d\");\n      if (!ctx) return;\n      ctx.fillStyle = canvasBg;\n      ctx.fillRect(0, 0, canvas.width, canvas.height);\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 w2 = this.w;\n    if (!series) series = w2.config.series;\n    let columns = [];\n    const rows = [];\n    let result = \"\";\n    const universalBOM = \"\\uFEFF\";\n    const gSeries = w2.seriesData.series.map((s2, i2) => {\n      return w2.globals.collapsedSeriesIndices.indexOf(i2) === -1 ? s2 : [];\n    });\n    const csvSafe = (val) => {\n      if (val == null || Utils$1.isNumber(val)) return val;\n      const s2 = String(val);\n      return /^[=+\\-@\\t\\r]/.test(s2) ? `'${s2}` : s2;\n    };\n    const getFormattedCategory = (cat) => {\n      if (typeof w2.config.chart.toolbar.export.csv.categoryFormatter === \"function\") {\n        return w2.config.chart.toolbar.export.csv.categoryFormatter(cat);\n      }\n      if (w2.config.xaxis.type === \"datetime\" && String(cat).length >= 10) {\n        return new Date(cat).toDateString();\n      }\n      return Utils$1.isNumber(cat) ? cat : csvSafe(cat.split(columnDelimiter).join(\"\"));\n    };\n    const getFormattedValue = (value) => {\n      return typeof w2.config.chart.toolbar.export.csv.valueFormatter === \"function\" ? w2.config.chart.toolbar.export.csv.valueFormatter(value) : csvSafe(value);\n    };\n    const seriesMaxDataLength = Math.max(\n      ...series.map((s2) => {\n        return s2.data ? s2.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 = (i2) => {\n      let cat = \"\";\n      if (!w2.globals.axisCharts) {\n        cat = w2.config.labels[i2];\n      } else {\n        if (w2.config.xaxis.type === \"category\" || w2.config.xaxis.convertedCatToNumeric) {\n          if (w2.globals.isBarHorizontal) {\n            const lbFormatter = w2.formatters.yLabelFormatters[0];\n            const sr = new Series(this.ctx.w);\n            const activeSeries = sr.getActiveConfigSeriesIndex();\n            cat = lbFormatter(w2.labelData.labels[i2], {\n              seriesIndex: activeSeries,\n              dataPointIndex: i2,\n              w: w2\n            });\n          } else {\n            cat = axesUtils.getLabel(\n              w2.labelData.labels,\n              w2.labelData.timescaleLabels,\n              0,\n              i2\n            ).text;\n          }\n        }\n        if (w2.config.xaxis.type === \"datetime\") {\n          if (w2.config.xaxis.categories.length) {\n            cat = w2.config.xaxis.categories[i2];\n          } else if (w2.config.labels.length) {\n            cat = w2.config.labels[i2];\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 = (s2, sI) => {\n      var _a, _b, _c, _d, _e, _f;\n      if (columns.length && sI === 0) {\n        rows.push(columns.join(columnDelimiter));\n      }\n      if (s2.data) {\n        const rowData = s2.data.length ? s2.data : getEmptyDataForCsvColumn();\n        for (let i2 = 0; i2 < rowData.length; i2++) {\n          columns = [];\n          let cat = getCat(i2);\n          if (cat === \"nullvalue\") continue;\n          if (!cat) {\n            if (dataFormat.isFormatXY()) {\n              cat = series[sI].data[i2].x;\n            } else if (dataFormat.isFormat2DArray()) {\n              cat = series[sI].data[i2] ? series[sI].data[i2][0] : \"\";\n            }\n          }\n          if (sI === 0) {\n            columns.push(getFormattedCategory(cat));\n            for (let ci = 0; ci < w2.seriesData.series.length; ci++) {\n              const value = dataFormat.isFormatXY() ? (_a = series[ci].data[i2]) == null ? void 0 : _a.y : gSeries[ci][i2];\n              columns.push(getFormattedValue(value));\n            }\n          }\n          if (w2.config.chart.type === \"candlestick\" || s2.type && s2.type === \"candlestick\") {\n            columns.pop();\n            columns.push(w2.candleData.seriesCandleO[sI][i2]);\n            columns.push(w2.candleData.seriesCandleH[sI][i2]);\n            columns.push(w2.candleData.seriesCandleL[sI][i2]);\n            columns.push(w2.candleData.seriesCandleC[sI][i2]);\n          }\n          if (w2.config.chart.type === \"boxPlot\" || s2.type && s2.type === \"boxPlot\") {\n            columns.pop();\n            columns.push(w2.candleData.seriesCandleO[sI][i2]);\n            columns.push(w2.candleData.seriesCandleH[sI][i2]);\n            columns.push(w2.candleData.seriesCandleM[sI][i2]);\n            columns.push(w2.candleData.seriesCandleL[sI][i2]);\n            columns.push(w2.candleData.seriesCandleC[sI][i2]);\n          }\n          if (w2.config.chart.type === \"rangeBar\") {\n            columns.pop();\n            columns.push(w2.rangeData.seriesRangeStart[sI][i2]);\n            columns.push(w2.rangeData.seriesRangeEnd[sI][i2]);\n          }\n          if (w2.config.chart.type === \"violin\" || s2.type && s2.type === \"violin\") {\n            columns.pop();\n            columns.push((_b = w2.violinData.seriesViolinMin[sI]) == null ? void 0 : _b[i2]);\n            columns.push((_c = w2.violinData.seriesViolinMax[sI]) == null ? void 0 : _c[i2]);\n            columns.push((_f = (_e = (_d = w2.violinData.seriesViolinPoints[sI]) == null ? void 0 : _d[i2]) == 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((s2, sI) => {\n        s2 == null ? void 0 : s2.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        const values = (\n          /** @type {Record<string,any>} */\n          data[cat]\n        );\n        rows.push([getFormattedCategory(cat), ...values].join(columnDelimiter));\n      });\n    };\n    columns.push(w2.config.chart.toolbar.export.csv.headerCategory);\n    if (w2.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 (w2.config.chart.type === \"candlestick\") {\n      columns.push(\"open\");\n      columns.push(\"high\");\n      columns.push(\"low\");\n      columns.push(\"close\");\n    } else if (w2.config.chart.type === \"rangeBar\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n    } else if (w2.config.chart.type === \"violin\") {\n      columns.push(\"minimum\");\n      columns.push(\"maximum\");\n      columns.push(\"observations\");\n    } else {\n      series.map((s2, sI) => {\n        const sname = (s2.name ? s2.name : `series-${sI}`) + \"\";\n        if (w2.globals.axisCharts) {\n          columns.push(\n            sname.split(columnDelimiter).join(\"\") ? sname.split(columnDelimiter).join(\"\") : `series-${sI}`\n          );\n        }\n      });\n    }\n    if (!w2.globals.axisCharts) {\n      columns.push(w2.config.chart.toolbar.export.csv.headerValue);\n      rows.push(columns.join(columnDelimiter));\n    }\n    if (!w2.globals.allSeriesHasEqualX && w2.globals.axisCharts && !w2.config.xaxis.categories.length && !w2.config.labels.length) {\n      handleUnequalXValues();\n    } else {\n      series.map((s2, sI) => {\n        if (w2.globals.axisCharts) {\n          handleAxisRowsColumns(s2, sI);\n        } else {\n          columns = [];\n          columns.push(getFormattedCategory(w2.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 : w2.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 });\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} \";\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 w2 = this.w;\n    const currLegendsWrap = w2.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, _c;\n    const w2 = this.w;\n    if (w2.globals.axisCharts || w2.config.chart.type === \"radialBar\") {\n      w2.globals.resized = true;\n      let seriesEl = null;\n      let realIndex = null;\n      w2.globals.risingSeries = [];\n      if (w2.globals.axisCharts) {\n        seriesEl = (_a = Array.prototype.find.call(\n          w2.dom.baseEl.querySelectorAll(\".apexcharts-series\"),\n          (el) => el.getAttribute(\"data:realIndex\") === String(seriesCnt)\n        )) != null ? _a : null;\n        if (!seriesEl) return;\n        realIndex = parseInt((_b = seriesEl.getAttribute(\"data:realIndex\")) != null ? _b : \"\", 10);\n      } else {\n        seriesEl = w2.dom.baseEl.querySelector(\n          `.apexcharts-series[rel='${seriesCnt + 1}']`\n        );\n        if (!seriesEl) return;\n        realIndex = parseInt((_c = seriesEl.getAttribute(\"rel\")) != null ? _c : \"\", 10) - 1;\n      }\n      if (isHidden) {\n        const seriesToMakeVisible = [\n          {\n            cs: w2.globals.collapsedSeries,\n            csi: w2.globals.collapsedSeriesIndices\n          },\n          {\n            cs: w2.globals.ancillaryCollapsedSeries,\n            csi: w2.globals.ancillaryCollapsedSeriesIndices\n          }\n        ];\n        seriesToMakeVisible.forEach((r2) => {\n          const cs = (\n            /** @type {any} */\n            r2.cs\n          );\n          const csi = (\n            /** @type {any} */\n            r2.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 (w2.config.chart.accessibility.enabled) {\n        const legendItem = w2.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w2.globals.collapsedSeriesIndices.includes(realIndex) || w2.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 : w2.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      w2.globals.resized = true;\n      w2.globals.risingSeries = [];\n      if (isHidden) {\n        this.riseCollapsedSeries(\n          w2.globals.collapsedSeries,\n          w2.globals.collapsedSeriesIndices,\n          seriesCnt\n        );\n      } else {\n        const series = this.getSeriesAfterCollapsing({ realIndex: seriesCnt });\n        this.lgCtx.updateSeries(\n          series,\n          w2.config.chart.animations.dynamicAnimation.enabled\n        );\n      }\n      if (w2.config.chart.accessibility.enabled) {\n        const legendItem = w2.dom.baseEl.querySelector(\n          `.apexcharts-legend-series[rel=\"${seriesCnt + 1}\"]`\n        );\n        if (legendItem) {\n          const isCollapsed = w2.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 : w2.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  /**\n   * Non-axis \"slice\" container. A pie/donut/polarArea slice is normally a\n   * top-level series element (numeric form: `series = [n, n, n]`), but object\n   * form (`series = [{ data: [{ x, y, drilldown }, ...] }]`, which pie/donut\n   * drilldown requires) packs every slice as a data point inside a single\n   * series. Return the array that actually holds the slice values so a\n   * slice/legend index addresses the right thing. Scoped to the pie family so\n   * unit charts (which share this non-axis path) are untouched.\n   * @param {any[]} series\n   * @returns {any[]}\n   */\n  _nonAxisSliceContainer(series) {\n    const type = this.w.config.chart.type;\n    if ((type === \"pie\" || type === \"donut\" || type === \"polarArea\" || type === \"sunburst\") && series.length === 1 && series[0] && typeof series[0] === \"object\" && Array.isArray(series[0].data)) {\n      return series[0].data;\n    }\n    return series;\n  }\n  /**\n   * Read a non-axis slice value (handles `{ x, y }` data points and plain\n   * numbers).\n   * @param {any} sliceEntry\n   * @returns {number}\n   */\n  _readSliceValue(sliceEntry) {\n    if (this.w.config.chart.type === \"unit\" && sliceEntry && Array.isArray(sliceEntry.data)) {\n      return sliceEntry.data;\n    }\n    return sliceEntry && typeof sliceEntry === \"object\" ? sliceEntry.y : sliceEntry;\n  }\n  /**\n   * Write a non-axis slice value in place, preserving `{ x, drilldown, ... }`\n   * on object data points.\n   * @param {any[]} container\n   * @param {number} i\n   * @param {number} value\n   */\n  _writeSliceValue(container, i2, value) {\n    const entry = container[i2];\n    if (this.w.config.chart.type === \"unit\" && entry && Array.isArray(entry.data)) {\n      entry.data = Array.isArray(value) ? value : [];\n      return;\n    }\n    if (entry && typeof entry === \"object\") {\n      entry.y = value;\n    } else {\n      container[i2] = value;\n    }\n  }\n  /** @param {{realIndex: any}} opts */\n  getSeriesAfterCollapsing({ realIndex }) {\n    var _a, _b;\n    const w2 = this.w;\n    const gl = w2.globals;\n    const series = Utils$1.clone(w2.config.series);\n    if (gl.axisCharts) {\n      const yaxis = w2.config.yaxis[gl.seriesYAxisReverseMap[realIndex]];\n      const collapseData = {\n        index: realIndex,\n        data: series[realIndex].data.slice(),\n        type: series[realIndex].type || w2.config.chart.type,\n        // The category name pins the hide across a data update that reorders or\n        // regroups categories (e.g. a storyboard beat): the collapse is\n        // reconciled by name, not index. See Series.reconcileCollapsedByName.\n        name: (gl.seriesNames || [])[realIndex]\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      if (gl.collapsedSeriesIndices.indexOf(realIndex) < 0) {\n        const container = this._nonAxisSliceContainer(series);\n        gl.collapsedSeries.push({\n          index: realIndex,\n          // Store the original slice VALUE so it can be restored on rise. In\n          // object form this is a data point's `y`, not the whole series entry.\n          data: this._readSliceValue(container[realIndex]),\n          type: (\n            /** @type {any} */\n            (_b = (_a = w2.config.series[realIndex]) == null ? void 0 : _a.type) != null ? _b : \"line\"\n          ),\n          // Pin the hide by category name so it survives a regroup (see above).\n          name: (gl.seriesNames || [])[realIndex]\n        });\n        gl.collapsedSeriesIndices.push(realIndex);\n      }\n    }\n    const seriesCount = gl.axisCharts ? w2.config.series.length : this._nonAxisSliceContainer(series).length;\n    gl.allSeriesCollapsed = gl.collapsedSeries.length + gl.ancillaryCollapsedSeries.length === seriesCount;\n    return this._getSeriesBasedOnCollapsedState(series);\n  }\n  /** @param {{seriesEl: any, realIndex: any}} opts */\n  hideSeries({ seriesEl, realIndex }) {\n    const w2 = 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      w2.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 w2 = this.w;\n    let series = Utils$1.clone(w2.config.series);\n    if (collapsedSeries.length > 0) {\n      for (let c2 = 0; c2 < collapsedSeries.length; c2++) {\n        if (collapsedSeries[c2].index === realIndex) {\n          if (w2.globals.axisCharts) {\n            series[realIndex].data = collapsedSeries[c2].data.slice();\n            series[realIndex].hidden = false;\n          } else {\n            const container = this._nonAxisSliceContainer(series);\n            this._writeSliceValue(container, realIndex, collapsedSeries[c2].data);\n          }\n          collapsedSeries.splice(c2, 1);\n          seriesIndices.splice(c2, 1);\n          w2.globals.risingSeries.push(realIndex);\n          c2--;\n        }\n      }\n      series = this._getSeriesBasedOnCollapsedState(series);\n      this.lgCtx.updateSeries(\n        series,\n        w2.config.chart.animations.dynamicAnimation.enabled\n      );\n    }\n  }\n  /**\n   * @param {any[]} series\n   */\n  _getSeriesBasedOnCollapsedState(series) {\n    const w2 = this.w;\n    let collapsed = 0;\n    if (w2.globals.axisCharts) {\n      series.forEach((s2, sI) => {\n        if (!(w2.globals.collapsedSeriesIndices.indexOf(sI) < 0 && w2.globals.ancillaryCollapsedSeriesIndices.indexOf(sI) < 0)) {\n          series[sI].data = [];\n          collapsed++;\n        }\n      });\n    } else {\n      const container = this._nonAxisSliceContainer(series);\n      container.forEach((s2, sI) => {\n        if (!(w2.globals.collapsedSeriesIndices.indexOf(sI) < 0)) {\n          this._writeSliceValue(container, sI, 0);\n          collapsed++;\n        }\n      });\n    }\n    const seriesCount = w2.globals.axisCharts ? series.length : this._nonAxisSliceContainer(series).length;\n    w2.globals.allSeriesCollapsed = collapsed === seriesCount;\n    return series;\n  }\n};\nconst DEFAULT_DIVERGING = [\"#cf4d3f\", \"#8f9499\", \"#26a75b\"];\nconst lerp$1 = (a2, b2, t2) => a2 + (b2 - a2) * t2;\nfunction toHexPair(n2) {\n  const v2 = Math.max(0, Math.min(255, Math.round(n2)));\n  return v2.toString(16).padStart(2, \"0\");\n}\nfunction mixColors(c1, c2, t2) {\n  const a2 = Utils$1.parseHex(normalizeHex(c1));\n  const b2 = Utils$1.parseHex(normalizeHex(c2));\n  if (!a2 || !b2) return c1;\n  return \"#\" + toHexPair(lerp$1(a2[0], b2[0], t2)) + toHexPair(lerp$1(a2[1], b2[1], t2)) + toHexPair(lerp$1(a2[2], b2[2], t2));\n}\nfunction normalizeHex(c2) {\n  if (typeof c2 !== \"string\") return \"#000000\";\n  if (Utils$1.isColorHex(c2)) return c2;\n  const asHex = Utils$1.rgb2hex(c2);\n  return asHex || \"#000000\";\n}\nfunction colorValueOf(w2, i2, j) {\n  const series = (\n    /** @type {any} */\n    w2.config.series[i2]\n  );\n  const datum = series && Array.isArray(series.data) ? series.data[j] : null;\n  return colorValueOfDatum(w2, datum, i2, j);\n}\nfunction colorValueOfDatum(w2, datum, i2, j) {\n  var _a, _b, _c;\n  if (!datum || typeof datum !== \"object\") return null;\n  const accessor = (_c = (_b = (_a = w2.config.plotOptions) == null ? void 0 : _a.treemap) == null ? void 0 : _b.colorScale) == null ? void 0 : _c.colorValue;\n  let raw;\n  if (typeof accessor === \"function\") {\n    raw = accessor(datum, { seriesIndex: i2, dataPointIndex: j, w: w2 });\n  } else if (typeof accessor === \"string\") {\n    raw = datum[accessor];\n  } else {\n    raw = datum.colorValue;\n  }\n  if (raw == null) return null;\n  const n2 = Number(raw);\n  return Number.isFinite(n2) ? n2 : null;\n}\nfunction resolveStops(cfg, min, max, midpoint) {\n  if (Array.isArray(cfg.stops) && cfg.stops.length >= 2) {\n    return cfg.stops.filter((s2) => s2 && Number.isFinite(Number(s2.value))).map((s2) => ({\n      value: Number(s2.value),\n      color: normalizeHex(s2.color)\n    })).sort(\n      (a2, b2) => a2.value - b2.value\n    );\n  }\n  const colors = (Array.isArray(cfg.colors) && cfg.colors.length >= 2 ? cfg.colors : DEFAULT_DIVERGING).map(normalizeHex);\n  const n2 = colors.length;\n  if (midpoint != null && n2 >= 3) {\n    const mid = Math.floor((n2 - 1) / 2);\n    const out = [];\n    for (let k = 0; k <= mid; k++) {\n      out.push({ value: lerp$1(min, midpoint, k / mid), color: colors[k] });\n    }\n    for (let k = mid + 1; k < n2; k++) {\n      out.push({\n        value: lerp$1(midpoint, max, (k - mid) / (n2 - 1 - mid)),\n        color: colors[k]\n      });\n    }\n    return out;\n  }\n  return colors.map((c2, k) => ({\n    value: lerp$1(min, max, k / (n2 - 1)),\n    color: c2\n  }));\n}\nfunction buildContinuousScale(w2) {\n  var _a, _b, _c;\n  const cs = (_c = (_b = (_a = w2.config) == null ? void 0 : _a.plotOptions) == null ? void 0 : _b.treemap) == null ? void 0 : _c.colorScale;\n  const cfg = cs && cs.gradient;\n  if (!cfg) return null;\n  if (cfg.enabled === false) return null;\n  const series = (\n    /** @type {any} */\n    w2.config.series || []\n  );\n  let dataMin = Infinity;\n  let dataMax = -Infinity;\n  let found = false;\n  for (let i2 = 0; i2 < series.length; i2++) {\n    const data = series[i2] && series[i2].data;\n    if (!Array.isArray(data)) continue;\n    for (let j = 0; j < data.length; j++) {\n      const v2 = colorValueOfDatum(w2, data[j], i2, j);\n      if (v2 == null) continue;\n      found = true;\n      if (v2 < dataMin) dataMin = v2;\n      if (v2 > dataMax) dataMax = v2;\n    }\n  }\n  if (!found && cfg.enabled !== true) return null;\n  if (!Number.isFinite(dataMin)) {\n    dataMin = 0;\n    dataMax = 0;\n  }\n  let min = Number.isFinite(Number(cfg.min)) ? Number(cfg.min) : dataMin;\n  let max = Number.isFinite(Number(cfg.max)) ? Number(cfg.max) : dataMax;\n  let midpoint = null;\n  if (cfg.midpoint === null) {\n    midpoint = null;\n  } else if (Number.isFinite(Number(cfg.midpoint))) {\n    midpoint = Number(cfg.midpoint);\n  } else if (min < 0 && max > 0) {\n    midpoint = 0;\n  }\n  if (midpoint != null && cfg.symmetric !== false && !Number.isFinite(Number(cfg.min)) && !Number.isFinite(Number(cfg.max))) {\n    const reach = Math.max(Math.abs(min - midpoint), Math.abs(max - midpoint));\n    min = midpoint - reach;\n    max = midpoint + reach;\n  }\n  if (max === min) {\n    min -= 0.5;\n    max += 0.5;\n  }\n  const stops = resolveStops(cfg, min, max, midpoint);\n  if (stops.length < 2) return null;\n  const at = (v2) => {\n    if (!Number.isFinite(v2)) return stops[Math.floor(stops.length / 2)].color;\n    if (v2 <= stops[0].value) return stops[0].color;\n    const last = stops[stops.length - 1];\n    if (v2 >= last.value) return last.color;\n    for (let k = 1; k < stops.length; k++) {\n      const hi = stops[k];\n      if (v2 <= hi.value) {\n        const lo = stops[k - 1];\n        const span2 = hi.value - lo.value;\n        const t2 = span2 === 0 ? 0 : (v2 - lo.value) / span2;\n        return mixColors(lo.color, hi.color, t2);\n      }\n    }\n    return last.color;\n  };\n  const span = max - min;\n  const legendStops = stops.map((s2) => ({\n    percent: span === 0 ? 0 : (s2.value - min) / span,\n    color: s2.color\n  }));\n  return { min, max, midpoint, stops, at, legendStops };\n}\nfunction readableOn(bg) {\n  const hex = normalizeHex(bg);\n  return Utils$1.getContrastRatio(hex, \"#ffffff\") >= Utils$1.getContrastRatio(hex, \"#000000\") ? \"#ffffff\" : \"#000000\";\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(w2, ctx) {\n    this.w = w2;\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._cfg();\n    if (typeof cfg.formatter === \"function\") return cfg.formatter;\n    return (v2) => {\n      if (!Number.isFinite(v2)) return String(v2);\n      const abs = Math.abs(v2);\n      if (abs >= 1e3) return v2.toFixed(0);\n      if (abs >= 10) return v2.toFixed(1);\n      return v2.toFixed(2);\n    };\n  }\n  /**\n   * The colorScale of whichever chart type is being drawn. Every chart type\n   * that encodes a value as colour carries the same `colorScale` shape, so one\n   * strip serves them all rather than a near-copy per type.\n   * @param {any} w\n   */\n  static colorScaleOf(w2) {\n    var _a, _b, _c, _d, _e;\n    const type = (_b = (_a = w2 == null ? void 0 : w2.config) == null ? void 0 : _a.chart) == null ? void 0 : _b.type;\n    if (!type) return null;\n    return ((_e = (_d = (_c = w2 == null ? void 0 : w2.config) == null ? void 0 : _c.plotOptions) == null ? void 0 : _d[type]) == null ? void 0 : _e.colorScale) || null;\n  }\n  /**\n   * @param {any} w\n   */\n  static configFor(w2) {\n    const cs = HeatmapGradientLegend.colorScaleOf(w2);\n    return cs && cs.gradientLegend || null;\n  }\n  /** This instance's gradient-legend config. */\n  _cfg() {\n    return HeatmapGradientLegend.configFor(this.w) || {};\n  }\n  /**\n   * True when the user has opted into the gradient legend variant.\n   * @param {any} w\n   */\n  static isEnabled(w2) {\n    if (!HeatmapGradientLegend.supports(w2)) return false;\n    const cfg = HeatmapGradientLegend.configFor(w2);\n    return !!(cfg && cfg.enabled);\n  }\n  /**\n   * Chart types this legend can serve: those that encode a value as colour\n   * through a `colorScale`. Everything else gets the categorical legend.\n   * @param {any} w\n   */\n  static supports(w2) {\n    var _a, _b;\n    const type = (_b = (_a = w2 == null ? void 0 : w2.config) == null ? void 0 : _a.chart) == null ? void 0 : _b.type;\n    return type === \"heatmap\" || type === \"treemap\";\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 w2 = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w2.dom.elLegendWrap\n    );\n    if (!elLegendWrap) return;\n    const cfg = this._cfg();\n    const position = w2.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(\n      \"class\",\n      \"apexcharts-heatmap-gradient-legend apexcharts-gradient-legend\"\n    );\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-${w2.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((s2) => {\n      const stopEl = BrowserAPIs.createElementNS(SVG_NS, \"stop\");\n      stopEl.setAttribute(\"offset\", `${(s2.percent * 100).toFixed(2)}%`);\n      stopEl.setAttribute(\"stop-color\", s2.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(w2.config.legend.labels.colors) ? w2.config.legend.labels.colors[0] : w2.config.legend.labels.colors) || w2.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) || w2.config.chart.fontFamily;\n      const fmt = this._getFormatter();\n      const makeLabel = (text, x, y, anchor) => {\n        const t2 = BrowserAPIs.createElementNS(SVG_NS, \"text\");\n        t2.setAttribute(\"x\", String(x));\n        t2.setAttribute(\"y\", String(y));\n        t2.setAttribute(\"text-anchor\", anchor);\n        t2.setAttribute(\"dominant-baseline\", \"middle\");\n        t2.setAttribute(\"fill\", labelColor);\n        t2.setAttribute(\"font-size\", labelFontSize);\n        if (labelFontFamily) t2.setAttribute(\"font-family\", labelFontFamily);\n        t2.textContent = String(text);\n        return t2;\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) || w2.config.chart.foreColor;\n    const arrow = this._buildArrow(arrowSize, arrowColor, position);\n    svg.appendChild(arrow);\n    this.arrowEl = arrow;\n    this._bandHitEls = [];\n    if (w2.config.legend.onItemHover.highlightDataSeries && bands.length > 0) {\n      bands.forEach((b2) => {\n        const hit = BrowserAPIs.createElementNS(SVG_NS, \"rect\");\n        if (isVertical) {\n          const yTop = stripY + stripLength - b2.p2 * stripLength;\n          const yBot = stripY + stripLength - b2.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 + b2.p1 * stripLength));\n          hit.setAttribute(\"y\", String(stripY));\n          hit.setAttribute(\n            \"width\",\n            String(Math.max(0, (b2.p2 - b2.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(b2.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) || w2.config.chart.fontFamily || \"\";\n      tt.style.color = w2.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 w2 = this.w;\n    const basis = isVertical ? w2.globals.svgHeight || w2.config.chart.height || 300 : w2.globals.svgWidth || w2.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 n2 = parseFloat(trimmed);\n      return Number.isFinite(n2) ? n2 : 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 w2 = this.w;\n    const cfg = this._cfg();\n    const align = cfg.align || \"center\";\n    const edgePad = 12;\n    const chartWidth = w2.globals.svgWidth || w2.config.chart.width || 600;\n    const chartHeight = w2.globals.svgHeight || w2.config.chart.height || 300;\n    const userOffsetX = w2.config.legend.offsetX || 0;\n    const userOffsetY = w2.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 w2 = this.w;\n    const g2 = w2.globals;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w2.dom.elLegendWrap\n    );\n    if (!wrap || !this._geom) return;\n    if (!Number.isFinite(g2.gridWidth) || !Number.isFinite(g2.gridHeight)) return;\n    const { isVertical, position, svgWidth, svgHeight, stripX, stripY, stripThickness } = this._geom;\n    const align = this._cfg().align || \"center\";\n    const ox = w2.config.legend.offsetX || 0;\n    const oy = w2.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 = w2.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 = g2.translateY + alongOffset(g2.gridHeight, svgHeight) + oy + \"px\";\n      const bandStart = position === \"left\" ? 0 : g2.translateX + g2.gridWidth;\n      const bandEnd = position === \"left\" ? g2.translateX : g2.svgWidth;\n      const stripCenter = (bandStart + bandEnd) / 2;\n      wrap.style.left = stripCenter - stripX - stripThickness / 2 + ox + \"px\";\n    } else {\n      wrap.style.left = g2.translateX + alongOffset(g2.gridWidth, svgWidth) + ox + \"px\";\n      const bandStart = position === \"top\" ? titleArea : g2.translateY + g2.gridHeight + xAxisArea;\n      const bandEnd = position === \"top\" ? g2.translateY : g2.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 w2 = this.w;\n    const wrap = (\n      /** @type {HTMLElement} */\n      w2.dom.elLegendWrap\n    );\n    const strip = this.svgEl && this.svgEl.querySelector(\"rect\");\n    const grid = w2.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!wrap || !strip || !grid || !this._geom) return;\n    const s2 = strip.getBoundingClientRect();\n    const gr = grid.getBoundingClientRect();\n    if (!s2.width || !s2.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 - s2.right : s2.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 - s2.bottom : s2.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 i2 = 0; i2 < this._bandHitEls.length; i2++) {\n      const el = this._bandHitEls[i2];\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 i2 = 0; i2 < this._bandHitEls.length; i2++) {\n      const el = this._bandHitEls[i2];\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(e2) {\n    var _a, _b, _c, _d;\n    const w2 = this.w;\n    const target = (\n      /** @type {Element} */\n      e2.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, w2]);\n    new Series(w2).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, _c;\n    const w2 = this.w;\n    if (!this.arrowEl) return;\n    const opts = args[args.length - 1];\n    if (!opts || typeof opts !== \"object\") return;\n    const i2 = opts.seriesIndex;\n    const j = opts.dataPointIndex;\n    if (typeof i2 !== \"number\" || typeof j !== \"number\") return;\n    if (!HeatmapGradientLegend.supports(w2)) return;\n    let val;\n    if (this._continuous) {\n      val = colorValueOf(w2, i2, j);\n    } else {\n      val = (_c = (_b = (_a = w2.seriesData) == null ? void 0 : _a.series) == null ? void 0 : _b[i2]) == null ? void 0 : _c[j];\n    }\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 w2 = this.w;\n    const cs = HeatmapGradientLegend.colorScaleOf(w2) || {};\n    const cfg = this._cfg();\n    const continuous = buildContinuousScale(w2);\n    if (continuous) {\n      this._continuous = true;\n      return {\n        min: continuous.min,\n        max: continuous.max,\n        stops: continuous.legendStops,\n        bands: []\n      };\n    }\n    this._continuous = false;\n    let dataMin = Infinity;\n    let dataMax = -Infinity;\n    const rows = ((_a = w2.seriesData) == null ? void 0 : _a.series) || [];\n    for (let i2 = 0; i2 < rows.length; i2++) {\n      const row = rows[i2];\n      if (!row) continue;\n      for (let j = 0; j < row.length; j++) {\n        const v2 = row[j];\n        if (v2 == null || Number.isNaN(v2)) continue;\n        if (v2 < dataMin) dataMin = v2;\n        if (v2 > dataMax) dataMax = v2;\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((r2, originalIndex) => __spreadProps(__spreadValues({}, r2), {\n        _originalIndex: originalIndex\n      })).sort((a2, b2) => a2.from - b2.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((r2) => {\n        const p1 = (r2.from - lo) / span;\n        const p2 = (r2.to - lo) / span;\n        stops.push({ percent: (p1 + p2) / 2, color: r2.color });\n        bands.push({ index: r2._originalIndex, p1, p2 });\n      });\n    } else {\n      const baseColor = w2.globals.colors[0] || \"#008FFB\";\n      const utils = new Utils$1();\n      const plot = w2.config.plotOptions[w2.config.chart.type] || {};\n      const shadeIntensity = (_b = plot.shadeIntensity) != null ? _b : 0.5;\n      const hasNegs = (\n        /** @type {any} */\n        w2.globals.hasNegs\n      );\n      const n2 = Math.max(2, cfg.stops || 16);\n      for (let s2 = 0; s2 < n2; s2++) {\n        const t2 = s2 / (n2 - 1);\n        const v2 = min + t2 * (max - min);\n        const total = Math.abs(max) + Math.abs(min);\n        const percent_v = total === 0 ? 0 : 100 * v2 / total;\n        let colorShadePercent;\n        if (hasNegs) {\n          if (plot.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 = plot.enableShades ? utils.shadeColor(\n          w2.config.theme.mode === \"dark\" ? colorShadePercent * -1 : colorShadePercent,\n          baseColor\n        ) : baseColor;\n        stops.push({ percent: t2, 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(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.updateSeries = (...a2) => ctx.updateHelpers._updateSeries(...a2);\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 w2 = this.w;\n    const gl = w2.globals;\n    const cnf = w2.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\" || // Same for a treemap once it has a gradient strip: a nested treemap is\n    // usually one series, and the strip describes the colour metric rather\n    // than the series.\n    HeatmapGradientLegend.isEnabled(w2) || 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        w2.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 (HeatmapGradientLegend.isEnabled(w2)) {\n        this.heatmapGradientLegend = new HeatmapGradientLegend(w2, 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: i2, fillcolor }) {\n    const w2 = this.w;\n    const elMarker = BrowserAPIs.createElement(\"span\");\n    elMarker.classList.add(\"apexcharts-legend-marker\");\n    const mShape = w2.config.legend.markers.shape || w2.config.markers.shape;\n    let shape = mShape;\n    if (Array.isArray(mShape)) {\n      shape = mShape[i2];\n    }\n    const mSize = Array.isArray(w2.config.legend.markers.size) ? parseFloat(w2.config.legend.markers.size[i2]) : parseFloat(w2.config.legend.markers.size);\n    const mOffsetX = Array.isArray(w2.config.legend.markers.offsetX) ? parseFloat(w2.config.legend.markers.offsetX[i2]) : parseFloat(w2.config.legend.markers.offsetX);\n    const mOffsetY = Array.isArray(w2.config.legend.markers.offsetY) ? parseFloat(w2.config.legend.markers.offsetY[i2]) : parseFloat(w2.config.legend.markers.offsetY);\n    const mBorderWidth = Array.isArray(w2.config.legend.markers.strokeWidth) ? parseFloat(w2.config.legend.markers.strokeWidth[i2]) : parseFloat(w2.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 (w2.config.legend.markers.customHTML) {\n      mStyle.background = \"transparent\";\n      mStyle.color = fillcolor[i2];\n      if (Array.isArray(w2.config.legend.markers.customHTML)) {\n        if (w2.config.legend.markers.customHTML[i2]) {\n          elMarker.innerHTML = w2.config.legend.markers.customHTML[i2]();\n        }\n      } else {\n        elMarker.innerHTML = w2.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: i2,\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[i2] : markerConfig.pointFillColor,\n        shape\n      }));\n      const shapesEls = w2.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 w2 = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w2.dom.elLegendWrap\n    );\n    const fontFamily = w2.config.legend.fontFamily;\n    let legendNames = w2.seriesData.seriesNames;\n    let fillcolor = w2.config.legend.markers.fillColors ? w2.config.legend.markers.fillColors.slice() : w2.globals.colors.slice();\n    if (w2.config.chart.type === \"heatmap\") {\n      const ranges = w2.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 = w2.labelData.labels.slice();\n    }\n    if (w2.config.legend.customLegendItems.length) {\n      legendNames = w2.config.legend.customLegendItems;\n    }\n    const legendFormatter = w2.formatters.legendFormatter;\n    const isLegendInversed = w2.config.legend.inverseOrder;\n    const legendGroups = [];\n    if (w2.labelData.seriesGroups.length > 1 && w2.config.legend.clusterGroupedSeries) {\n      w2.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 (w2.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 i2 = isLegendInversed ? legendNames.length - 1 : 0; isLegendInversed ? i2 >= 0 : i2 <= legendNames.length - 1; isLegendInversed ? i2-- : i2++) {\n      const text = legendFormatter(legendNames[i2], { seriesIndex: i2, w: w2 });\n      let collapsedSeries = false;\n      let ancillaryCollapsedSeries = false;\n      if (w2.globals.collapsedSeries.length > 0) {\n        for (let c2 = 0; c2 < w2.globals.collapsedSeries.length; c2++) {\n          if (w2.globals.collapsedSeries[c2].index === i2) {\n            collapsedSeries = true;\n          }\n        }\n      }\n      if (w2.globals.ancillaryCollapsedSeriesIndices.length > 0) {\n        for (let c2 = 0; c2 < w2.globals.ancillaryCollapsedSeriesIndices.length; c2++) {\n          if (w2.globals.ancillaryCollapsedSeriesIndices[c2] === i2) {\n            ancillaryCollapsedSeries = true;\n          }\n        }\n      }\n      const elMarker = this.createLegendMarker({ i: i2, fillcolor });\n      Graphics.setAttrs(elMarker, {\n        rel: i2 + 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 (w2.config.chart.accessibility.enabled && w2.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 = w2.config.legend.labels.useSeriesColors ? w2.globals.colors[i2] : Array.isArray(w2.config.legend.labels.colors) ? (_a = w2.config.legend.labels.colors) == null ? void 0 : _a[i2] : w2.config.legend.labels.colors;\n      if (!textColor) {\n        textColor = w2.config.chart.foreColor;\n      }\n      elLegendText.style.color = textColor;\n      elLegendText.style.fontSize = w2.config.legend.fontSize;\n      elLegendText.style.fontWeight = w2.config.legend.fontWeight;\n      elLegendText.style.fontFamily = fontFamily || w2.config.chart.fontFamily;\n      Graphics.setAttrs(elLegendText, {\n        rel: i2 + 1,\n        i: i2,\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 (!w2.config.legend.showForZeroSeries) {\n        const total = coreUtils.getSeriesTotalByIndex(i2);\n        if (total === 0 && coreUtils.seriesHaveSameValues(i2) && !coreUtils.isSeriesNull(i2) && w2.globals.collapsedSeriesIndices.indexOf(i2) === -1 && w2.globals.ancillaryCollapsedSeriesIndices.indexOf(i2) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-zero-series\");\n        }\n      }\n      if (!w2.config.legend.showForNullSeries) {\n        if (coreUtils.isSeriesNull(i2) && w2.globals.collapsedSeriesIndices.indexOf(i2) === -1 && w2.globals.ancillaryCollapsedSeriesIndices.indexOf(i2) === -1) {\n          elLegend.classList.add(\"apexcharts-hidden-null-series\");\n        }\n      }\n      if (legendGroups.length) {\n        w2.labelData.seriesGroups.forEach((group, gi) => {\n          var _a2, _b;\n          if (group.includes(\n            /** @type {Record<string,any>} */\n            (_b = (_a2 = w2.config.series[i2]) == 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-${w2.config.legend.horizontalAlign}`\n      );\n      elLegendWrap.classList.add(\n        \"apx-legend-position-\" + w2.config.legend.position\n      );\n      elLegend.classList.add(\"apexcharts-legend-series\");\n      elLegend.style.margin = `${w2.config.legend.itemMargin.vertical}px ${w2.config.legend.itemMargin.horizontal}px`;\n      elLegendWrap.style.width = w2.config.legend.width ? w2.config.legend.width + \"px\" : \"\";\n      elLegendWrap.style.height = w2.config.legend.height ? w2.config.legend.height + \"px\" : \"\";\n      Graphics.setAttrs(elLegend, {\n        rel: i2 + 1,\n        seriesName: Utils$1.escapeString(legendNames[i2]),\n        \"data:collapsed\": collapsedSeries || ancillaryCollapsedSeries\n      });\n      if (collapsedSeries || ancillaryCollapsedSeries) {\n        elLegend.classList.add(\"apexcharts-inactive-legend\");\n      }\n      if (!w2.config.legend.onItemClick.toggleDataSeries) {\n        elLegend.classList.add(\"apexcharts-no-click\");\n      }\n    }\n    w2.dom.elWrap.addEventListener(\"click\", me.onLegendClick, true);\n    if (w2.config.legend.onItemHover.highlightDataSeries && w2.config.legend.customLegendItems.length === 0) {\n      w2.dom.elWrap.addEventListener(\"mousemove\", me.onLegendHovered, true);\n      w2.dom.elWrap.addEventListener(\"mouseout\", me.onLegendHovered, true);\n    }\n    if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.keyboard.enabled) {\n      w2.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 w2 = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w2.dom.elLegendWrap\n    );\n    const legendHeight = elLegendWrap.clientHeight;\n    let x = 0;\n    let y = 0;\n    if (w2.config.legend.position === \"bottom\") {\n      y = w2.globals.svgHeight - Math.min(legendHeight, w2.globals.svgHeight / 2) - 5;\n    } else if (w2.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 + w2.config.legend.offsetX;\n    y = y + offsetY + w2.config.legend.offsetY;\n    elLegendWrap.style.left = x + \"px\";\n    elLegendWrap.style.top = y + \"px\";\n    if (w2.config.legend.position === \"right\") {\n      elLegendWrap.style.left = \"auto\";\n      elLegendWrap.style.right = 25 + w2.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(w2.config.legend[hw]), 10) + \"px\";\n      }\n    });\n  }\n  legendAlignHorizontal() {\n    const w2 = this.w;\n    const elLegendWrap = (\n      /** @type {HTMLElement} */\n      w2.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 (w2.config.legend.position === \"top\") {\n      offsetY = titleRect.height + subtitleRect.height + w2.config.title.margin + w2.config.subtitle.margin - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  legendAlignVertical() {\n    const w2 = this.w;\n    const lRect = this.legendHelpers.getLegendDimensions();\n    const offsetY = 20;\n    let offsetX = 0;\n    if (w2.config.legend.position === \"left\") {\n      offsetX = 20;\n    }\n    if (w2.config.legend.position === \"right\") {\n      offsetX = w2.globals.svgWidth - lRect.clww - 10;\n    }\n    this.setLegendWrapXY(offsetX, offsetY);\n  }\n  /**\n   * @param {MouseEvent} e\n   */\n  onLegendHovered(e2) {\n    var _a;\n    const w2 = this.w;\n    const target = (\n      /** @type {Element} */\n      e2.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 (w2.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(e2, 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 (e2.type === \"mousemove\") {\n          series.highlightRangeInSeries(seriesCnt, \"highlight\");\n        } else if (e2.type === \"mouseout\") {\n          series.highlightRangeInSeries(seriesCnt, \"reset\");\n        }\n      }\n    }\n  }\n  /**\n   * @param {KeyboardEvent} e\n   */\n  onLegendKeyDown(e2) {\n    const me = this;\n    const w2 = this.w;\n    const target = (\n      /** @type {Element} */\n      e2.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 (e2.key === \"Enter\" || e2.key === \" \") {\n      e2.preventDefault();\n      const rel = target.getAttribute(\"rel\");\n      me.onLegendClick(e2);\n      if (rel !== null && w2.config.legend.onItemClick.toggleDataSeries) {\n        requestAnimationFrame(() => {\n          const restored = w2.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(e2) {\n    var _a;\n    const w2 = this.w;\n    const target = (\n      /** @type {Element} */\n      e2.target\n    );\n    if (w2.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 = w2.config.chart.type !== \"treemap\" && w2.config.chart.type !== \"heatmap\" && !this.isBarsDistributed;\n      if (clickAllowed && w2.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 icoMeasure = '<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=\"M21.3 15.3a2.4 2.4 0 0 1 0 3.4l-2.6 2.6a2.4 2.4 0 0 1-3.4 0L2.7 8.7a2.4 2.4 0 0 1 0-3.4l2.6-2.6a2.4 2.4 0 0 1 3.4 0Z\"/>\\n    <path d=\"m14.5 12.5 2-2\"/>\\n    <path d=\"m11.5 9.5 2-2\"/>\\n    <path d=\"m8.5 6.5 2-2\"/>\\n    <path d=\"m17.5 15.5 2-2\"/>\\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(w2, ctx) {\n    this.w = w2;\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 = w2.globals.minX;\n    this.maxX = w2.globals.maxX;\n    this.elZoom = null;\n    this.elZoomIn = null;\n    this.elZoomOut = null;\n    this.elPan = null;\n    this.elSelection = null;\n    this.elMeasure = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n    this.elMenu = null;\n    this.elMenuItems = [];\n    this.t = null;\n  }\n  createToolbar() {\n    var _a, _b;\n    const w2 = 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 = w2.config.chart.toolbar.offsetY + \"px\";\n    elToolbarWrap.style.right = -w2.config.chart.toolbar.offsetX + 3 + \"px\";\n    w2.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.elMeasure = createBtn();\n    this.elZoomReset = createBtn();\n    this.elMenuIcon = createBtn();\n    this.elMenu = createDiv();\n    this.elCustomIcons = [];\n    this.t = w2.config.chart.toolbar.tools;\n    if (Array.isArray(this.t.customIcons)) {\n      for (let i2 = 0; i2 < this.t.customIcons.length; i2++) {\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] && w2.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] && w2.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 && w2.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    if (this.t.measure && w2.config.chart.measure && w2.config.chart.measure.enabled) {\n      toolbarControls.push({\n        el: this.elMeasure,\n        icon: typeof this.t.measure === \"string\" ? this.t.measure : icoMeasure,\n        title: (\n          /** @type {any} */\n          this.localeValues.measure || \"Measure\"\n        ),\n        class: \"apexcharts-measure-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 i2 = 0; i2 < this.elCustomIcons.length; i2++) {\n      toolbarControls.push({\n        el: this.elCustomIcons[i2],\n        icon: this.t.customIcons[i2].icon,\n        title: this.t.customIcons[i2].title,\n        index: this.t.customIcons[i2].index,\n        class: \"apexcharts-toolbar-custom-icon \" + this.t.customIcons[i2].class\n      });\n    }\n    toolbarControls.forEach((t2, index) => {\n      if (t2.index) {\n        Utils$1.moveIndexInArray(toolbarControls, index, t2.index);\n      }\n    });\n    for (let i2 = 0; i2 < toolbarControls.length; i2++) {\n      Graphics.setAttrs(toolbarControls[i2].el, {\n        class: toolbarControls[i2].class,\n        title: toolbarControls[i2].title,\n        \"aria-label\": toolbarControls[i2].title\n      });\n      toolbarControls[i2].el.innerHTML = toolbarControls[i2].icon;\n      elToolbarWrap.appendChild(toolbarControls[i2].el);\n    }\n    if (this.elZoom.parentNode) {\n      this.elZoom.setAttribute(\"aria-pressed\", String(!!w2.interact.zoomEnabled));\n    }\n    if (this.elSelection.parentNode) {\n      this.elSelection.setAttribute(\n        \"aria-pressed\",\n        String(!!w2.interact.selectionEnabled)\n      );\n    }\n    if (this.elPan.parentNode) {\n      this.elPan.setAttribute(\"aria-pressed\", String(!!w2.interact.panEnabled));\n    }\n    if (this.elMeasure.parentNode) {\n      this.elMeasure.setAttribute(\n        \"aria-pressed\",\n        String(!!w2.interact.measureEnabled)\n      );\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 (w2.interact.zoomEnabled) {\n      this.elZoom.classList.add(this.selectedClass);\n    } else if (w2.interact.panEnabled) {\n      this.elPan.classList.add(this.selectedClass);\n    } else if (w2.interact.selectionEnabled) {\n      this.elSelection.classList.add(this.selectedClass);\n    } else if (w2.interact.measureEnabled && this.elMeasure) {\n      this.elMeasure.classList.add(this.selectedClass);\n      (_b = (_a = this.ctx.measure) == null ? void 0 : _a.startMeasure) == null ? void 0 : _b.call(_a);\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 i2 = 0; i2 < menuItems.length; i2++) {\n      this.elMenuItems.push(\n        BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\")\n      );\n      this.elMenuItems[i2].innerHTML = menuItems[i2].title;\n      Graphics.setAttrs(this.elMenuItems[i2], {\n        class: `apexcharts-menu-item ${menuItems[i2].name}`,\n        title: menuItems[i2].title,\n        role: \"menuitem\",\n        tabindex: \"-1\"\n      });\n      this.elMenu.appendChild(this.elMenuItems[i2]);\n    }\n  }\n  addToolbarEventListeners() {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _i;\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.elMeasure) == null ? void 0 : _g.addEventListener(\"click\", this.toggleMeasure.bind(this));\n    (_h = this.elMenuIcon) == null ? void 0 : _h.addEventListener(\"click\", this.toggleMenu.bind(this));\n    this.elMenuItems.forEach((m2) => {\n      if (m2.classList.contains(\"exportSVG\")) {\n        m2.addEventListener(\"click\", this.handleDownload.bind(this, \"svg\"));\n      } else if (m2.classList.contains(\"exportPNG\")) {\n        m2.addEventListener(\"click\", this.handleDownload.bind(this, \"png\"));\n      } else if (m2.classList.contains(\"exportCSV\")) {\n        m2.addEventListener(\"click\", this.handleDownload.bind(this, \"csv\"));\n      }\n    });\n    for (let i2 = 0; i2 < this.t.customIcons.length; i2++) {\n      this.elCustomIcons[i2].addEventListener(\n        \"click\",\n        this.t.customIcons[i2].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.elMeasure,\n      this.elMenuIcon,\n      ...this.elCustomIcons\n    ];\n    toolbarButtons.forEach((btn) => {\n      btn.addEventListener(\"keydown\", (e2) => {\n        if (e2.key === \"Enter\" || e2.key === \" \") {\n          e2.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((c2) => c2.startsWith(\"apexcharts-\"));\n            if (!apexClass) return;\n            const restored = baseEl.querySelector(`.${apexClass}`);\n            if (restored) restored.focus();\n          });\n        }\n      });\n    });\n    (_i = this.elMenuIcon) == null ? void 0 : _i.addEventListener(\n      \"keydown\",\n      (e2) => {\n        var _a2;\n        if (e2.key === \"ArrowDown\" || e2.key === \"ArrowUp\") {\n          e2.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 = e2.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((m2, idx) => {\n      m2.addEventListener(\"keydown\", (e2) => {\n        var _a2;\n        if (e2.key === \"ArrowDown\") {\n          e2.preventDefault();\n          const next = this.elMenuItems[idx + 1] || this.elMenuItems[0];\n          next.focus();\n        } else if (e2.key === \"ArrowUp\") {\n          e2.preventDefault();\n          const prev = this.elMenuItems[idx - 1] || this.elMenuItems[this.elMenuItems.length - 1];\n          prev.focus();\n        } else if (e2.key === \"Escape\" || e2.key === \"Tab\") {\n          this._closeMenu();\n          (_a2 = this.elMenuIcon) == null ? void 0 : _a2.focus();\n          if (e2.key === \"Tab\") ;\n          else {\n            e2.preventDefault();\n          }\n        } else if (e2.key === \"Enter\" || e2.key === \" \") {\n          e2.preventDefault();\n          m2.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      const tb = ch.ctx.toolbar;\n      const enabledType = type === \"selection\" ? \"selectionEnabled\" : \"zoomEnabled\";\n      const wasEnabled = !!ch.w.globals[enabledType];\n      tb.toggleOtherControls();\n      const el = type === \"selection\" ? tb.elSelection : tb.elZoom;\n      if (!wasEnabled) {\n        ch.w.globals[enabledType] = true;\n        el.classList.add(tb.selectedClass);\n      }\n      el.setAttribute(\"aria-pressed\", String(!!ch.w.globals[enabledType]));\n    });\n  }\n  /**\n   * Toggle the measure ruler tool. Mutually exclusive with zoom/pan/selection\n   * (toggleOtherControls deselects those and disarms any active measure), so a\n   * fresh enable arms the ruler via the Measure module's sticky mode.\n   */\n  toggleMeasure() {\n    var _a, _b, _c, _d;\n    const w2 = this.w;\n    const enabling = !w2.interact.measureEnabled;\n    this.toggleOtherControls();\n    if (enabling) {\n      w2.interact.measureEnabled = true;\n      (_a = this.elMeasure) == null ? void 0 : _a.classList.add(this.selectedClass);\n      (_c = (_b = this.ctx.measure) == null ? void 0 : _b.startMeasure) == null ? void 0 : _c.call(_b);\n    }\n    (_d = this.elMeasure) == null ? void 0 : _d.setAttribute(\n      \"aria-pressed\",\n      String(w2.interact.measureEnabled)\n    );\n  }\n  getToolbarIconsReference() {\n    const w2 = this.w;\n    if (!this.elZoom) {\n      this.elZoom = w2.dom.baseEl.querySelector(\".apexcharts-zoom-icon\");\n    }\n    if (!this.elPan) {\n      this.elPan = w2.dom.baseEl.querySelector(\".apexcharts-pan-icon\");\n    }\n    if (!this.elSelection) {\n      this.elSelection = w2.dom.baseEl.querySelector(\n        \".apexcharts-selection-icon\"\n      );\n    }\n    if (!this.elMeasure) {\n      this.elMeasure = w2.dom.baseEl.querySelector(\".apexcharts-measure-icon\");\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      const tb = ch.ctx.toolbar;\n      const wasEnabled = !!ch.w.interact.panEnabled;\n      tb.toggleOtherControls();\n      if (!wasEnabled) {\n        ch.w.interact.panEnabled = true;\n        tb.elPan.classList.add(tb.selectedClass);\n      }\n      tb.elPan.setAttribute(\"aria-pressed\", String(!!ch.w.interact.panEnabled));\n    });\n  }\n  toggleOtherControls() {\n    var _a, _b, _c;\n    const w2 = this.w;\n    w2.interact.panEnabled = false;\n    w2.interact.zoomEnabled = false;\n    w2.interact.selectionEnabled = false;\n    if (w2.interact.measureEnabled) {\n      w2.interact.measureEnabled = false;\n      (_b = (_a = this.ctx.measure) == null ? void 0 : _a.stopMeasure) == null ? void 0 : _b.call(_a);\n      (_c = this.elMeasure) == null ? void 0 : _c.setAttribute(\"aria-pressed\", \"false\");\n    }\n    this.getToolbarIconsReference();\n    const toggleEls = [this.elPan, this.elSelection, this.elZoom, this.elMeasure];\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 w2 = this.w;\n    if (w2.axisFlags.isRangeBar) {\n      return { minX: w2.globals.minY, maxX: w2.globals.maxY };\n    }\n    return { minX: w2.globals.minX, maxX: w2.globals.maxX };\n  }\n  handleZoomIn() {\n    const w2 = 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 (!w2.interact.disableZoomIn) {\n      this.zoomUpdateOptions(newMinXMaxX.minX, newMinXMaxX.maxX);\n    }\n  }\n  handleZoomOut() {\n    const w2 = this.w;\n    const { minX, maxX } = this._currentXRange();\n    this.minX = minX;\n    this.maxX = maxX;\n    if (w2.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 (!w2.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 w2 = this.w;\n    if (newMinX === void 0 && newMaxX === void 0) {\n      this.handleZoomReset();\n      return;\n    }\n    if (w2.config.xaxis.convertedCatToNumeric) {\n      if (newMinX < 1) {\n        newMinX = 1;\n        newMaxX = w2.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 (!w2.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w2.globals.initialConfig.yaxis);\n    if (!w2.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 w2 = 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: w2.config.series,\n          columnDelimiter: w2.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 w2 = ch.w;\n      if (!w2.interact.zoomed) return;\n      w2.globals.lastXAxis.min = w2.globals.initialConfig.xaxis.min;\n      w2.globals.lastXAxis.max = w2.globals.initialConfig.xaxis.max;\n      ch.updateHelpers.revertDefaultAxisMinMax();\n      if (typeof w2.config.chart.events.beforeResetZoom === \"function\") {\n        const resetZoomRange = w2.config.chart.events.beforeResetZoom(ch, w2);\n        if (resetZoomRange) {\n          ch.updateHelpers.revertDefaultAxisMinMax(resetZoomRange);\n        }\n      }\n      if (typeof w2.config.chart.events.zoomed === \"function\") {\n        ch.ctx.toolbar.zoomCallback({\n          min: w2.config.xaxis.min,\n          max: w2.config.xaxis.max\n        });\n      }\n      const series = ch.ctx.series.emptyCollapsedSeries(\n        Utils$1.clone(w2.globals.initialSeries)\n      );\n      ch.updateHelpers._updateSeries(\n        series,\n        w2.config.chart.animations.dynamicAnimation.enabled\n      );\n      w2.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.elMeasure = null;\n    this.elZoomReset = null;\n    this.elMenuIcon = null;\n  }\n}\nconst WHEEL_ZOOM_PIXELS_PER_2X = 240;\nconst INERTIA_MIN_RELEASE_VELOCITY = 0.05;\nconst INERTIA_DEFAULT_FRICTION = 0.92;\nconst INERTIA_STOP_VELOCITY = 0.02;\nconst FRAME_MS_60FPS = 16.6667;\nconst PAN_NUDGE_DIVISOR = 15;\nclass ZoomPanSelection extends Toolbar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    super(w2, ctx);\n    this.w = w2;\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    ];\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  }\n  /** @param {{xyRatios: any}} opts */\n  init({ xyRatios }) {\n    const w2 = 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.constraints = new Box(0, 0, w2.layout.gridWidth, w2.layout.gridHeight);\n    this.zoomRect.node.classList.add(\"apexcharts-zoom-rect\");\n    this.selectionRect.node.classList.add(\"apexcharts-selection-rect\");\n    w2.dom.Paper.add(this.zoomRect);\n    w2.dom.Paper.add(this.selectionRect);\n    if (w2.config.chart.selection.type === \"x\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        minY: 0,\n        maxX: w2.layout.gridWidth,\n        maxY: w2.layout.gridHeight\n      }).on(\"dragmove.namespace\", this.selectionDragging.bind(this, \"dragging\"));\n    } else if (w2.config.chart.selection.type === \"y\") {\n      this.slDraggableRect = this.selectionRect.draggable({\n        minX: 0,\n        maxX: w2.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    w2.dom.baseEl.querySelector(`${w2.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 (this._wheelZoomEnabled()) {\n      this.hoverArea.addEventListener(\"wheel\", me.mouseWheelEvent.bind(me), {\n        capture: false,\n        passive: false\n      });\n    }\n    if (this._momentumEnabled()) {\n      [\"touchstart\", \"touchmove\", \"touchend\", \"touchcancel\"].forEach(\n        (event) => {\n          var _a;\n          (_a = this.hoverArea) == null ? void 0 : _a.addEventListener(event, me.momentumTouch.bind(me), {\n            capture: false,\n            passive: false\n          });\n        }\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  }\n  /**\n   * @param {import('../types/internal').XYRatios} xyRatios\n   * @param {any} e\n   */\n  svgMouseEvents(xyRatios, e2) {\n    const w2 = this.w;\n    const toolbar = this.ctx.toolbar;\n    if (w2.interact.momentum && w2.interact.momentum.busy) return;\n    if (this._momentumEnabled() && e2.touches && e2.touches.length > 1) {\n      return;\n    }\n    const zoomtype = w2.interact.zoomEnabled ? w2.config.chart.zoom.type : w2.config.chart.selection.type;\n    const autoSelected = w2.config.chart.toolbar.autoSelected;\n    if (autoSelected !== \"measure\") {\n      if (e2.shiftKey) {\n        w2.interact.shiftWasPressed = true;\n        toolbar.enableZoomPanFromToolbar(autoSelected === \"pan\" ? \"zoom\" : \"pan\");\n      } else {\n        if (w2.interact.shiftWasPressed) {\n          toolbar.enableZoomPanFromToolbar(autoSelected);\n          w2.interact.shiftWasPressed = false;\n        }\n      }\n    }\n    if (!e2.target) return;\n    const tc = e2.target.classList;\n    let pc;\n    if (e2.target.parentNode && e2.target.parentNode !== null) {\n      pc = e2.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 = e2.type === \"touchmove\" || e2.type === \"touchstart\" ? e2.touches[0].clientX : e2.type === \"touchend\" ? e2.changedTouches[0].clientX : e2.clientX;\n    this.clientY = e2.type === \"touchmove\" || e2.type === \"touchstart\" ? e2.touches[0].clientY : e2.type === \"touchend\" ? e2.changedTouches[0].clientY : e2.clientY;\n    if (e2.type === \"mousedown\" && e2.which === 1 || e2.type === \"touchstart\") {\n      const gridRectDim = this._gridRect();\n      if (!gridRectDim) return;\n      this.startX = this._screenXToPlotPx(this.clientX);\n      this.startY = this.clientY - gridRectDim.top;\n      this.dragged = false;\n      this.w.interact.mousedown = true;\n    }\n    if (e2.type === \"mousemove\" && e2.which === 1 || e2.type === \"touchmove\") {\n      this.dragged = true;\n      if (w2.interact.panEnabled) {\n        w2.interact.selection = null;\n        if (this.w.interact.mousedown) {\n          this.panDragging({\n            context: this,\n            zoomtype,\n            xyRatios: this.xyRatios\n          });\n        }\n      } else {\n        if (this.w.interact.mousedown && w2.interact.zoomEnabled || this.w.interact.mousedown && w2.interact.selectionEnabled) {\n          this.selection = this.selectionDrawing({\n            context: this,\n            zoomtype\n          });\n        }\n      }\n    }\n    if (e2.type === \"mouseup\" || e2.type === \"touchend\" || e2.type === \"mouseleave\") {\n      this.handleMouseUp({ zoomtype });\n    }\n    this.makeSelectionRectDraggable();\n  }\n  /** @param {{ zoomtype?: any, isResized?: any }} opts */\n  handleMouseUp({ zoomtype, isResized }) {\n    const w2 = this.w;\n    const gridRectDim = this._gridRect();\n    if (gridRectDim && (this.w.interact.mousedown || isResized)) {\n      this.endX = this._screenXToPlotPx(this.clientX);\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 (w2.interact.zoomEnabled || w2.interact.selectionEnabled) {\n        this.selectionDrawn({\n          context: this,\n          zoomtype\n        });\n      }\n    }\n    if (w2.interact.zoomEnabled) {\n      this.hideSelectionRect(this.selectionRect);\n    }\n    this.dragged = false;\n    this.w.interact.mousedown = false;\n  }\n  // ---------------------------------------------------------------------------\n  // Wheel zoom: continuous, cursor-anchored zoom on mouse wheel / trackpad.\n  //\n  // Each wheel event multiplies a pending zoom factor scaled to its deltaY (so\n  // a trackpad's stream of tiny deltas and a discrete wheel's ±100 notches both\n  // feel proportional), and the accumulated factor is applied at most once per\n  // animation frame through the same immediate, animation-free fast path the\n  // touch pinch uses (_applyXRange). Deliberately instant, trading-chart style:\n  // no per-step morph and no easing between steps (an animated variant was\n  // tried and rejected). The original implementation instead ran a fixed\n  // 0.5x/1.5x animated update at most once per 400ms and dropped every wheel\n  // event in between, which read as lag on continuous scrolling.\n  //\n  // Like Momentum (see the comment above momentumTouch), applying a frame\n  // triggers _updateOptions, which destroys and recreates this instance\n  // mid-gesture, so all wheel-gesture state lives on w.interact.wheel rather\n  // than on the instance.\n  // ---------------------------------------------------------------------------\n  /**\n   * A wheel or pinch zoom is an incidental gesture: the viewer can land in a\n   * zoomed window without meaning to (a page scroll over the chart, a two-finger\n   * swipe), so it is only offered when there is a way back out of it. The only\n   * built-in way back is the toolbar's reset button, hence 'auto' (the default\n   * for both allowMouseWheelZoom and pinch) resolves against that button being\n   * present. A page that builds its own reset control sets the option to true\n   * and gets the gesture with no toolbar. Drag-to-zoom is deliberate, so it is\n   * not gated this way.\n   *\n   * @param {boolean|'auto'} setting\n   */\n  _incidentalZoomEnabled(setting) {\n    var _a, _b, _c;\n    const c2 = this.w.config.chart;\n    if (!c2.zoom || !c2.zoom.enabled) return false;\n    if (setting !== \"auto\") return !!setting;\n    return !!(((_a = c2.toolbar) == null ? void 0 : _a.show) && ((_c = (_b = c2.toolbar) == null ? void 0 : _b.tools) == null ? void 0 : _c.reset));\n  }\n  _wheelZoomEnabled() {\n    const { zoom } = this.w.config.chart;\n    return this._incidentalZoomEnabled(zoom && zoom.allowMouseWheelZoom);\n  }\n  /** Lazily-created, re-render-surviving wheel-gesture state. */\n  _wheel() {\n    const it = this.w.interact;\n    if (!it.wheel) {\n      it.wheel = {\n        factor: 1,\n        clientX: 0,\n        /** @type {number|null} */\n        rafId: null,\n        /** @type {any} */\n        endTimer: null\n      };\n    }\n    return it.wheel;\n  }\n  /**\n   * @param {any} e\n   */\n  mouseWheelEvent(e2) {\n    e2.preventDefault();\n    const st = this._wheel();\n    let dy = e2.deltaY;\n    if (e2.deltaMode === 1) dy *= 33;\n    else if (e2.deltaMode === 2) dy *= 330;\n    st.factor *= Math.pow(2, dy / WHEEL_ZOOM_PIXELS_PER_2X);\n    st.clientX = e2.clientX;\n    if (st.rafId == null) {\n      st.rafId = requestAnimationFrame(() => this._applyWheelZoom());\n    }\n    if (st.endTimer) clearTimeout(st.endTimer);\n    st.endTimer = setTimeout(() => this._endWheelZoom(), 150);\n  }\n  /**\n   * Apply the zoom factor accumulated since the last animation frame, keeping\n   * the data value under the cursor pinned (both zooming in and out).\n   */\n  _applyWheelZoom() {\n    const w2 = this.w;\n    const st = this._wheel();\n    st.rafId = null;\n    const scale = st.factor;\n    st.factor = 1;\n    if (scale === 1 || w2.globals.isDestroyed) return;\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim || !gridRectDim.width) return;\n    const { min, max } = this._currentXWindow();\n    const range = max - min;\n    const mouseX = Math.min(\n      Math.max((st.clientX - gridRectDim.left) / gridRectDim.width, 0),\n      1\n    );\n    let newRange = range * scale;\n    const bounds = this._clampBounds();\n    if (bounds) {\n      const minXDiff = w2.globals.minXDiff > 0 && isFinite(w2.globals.minXDiff) ? w2.globals.minXDiff : 0;\n      const minRange = Math.max(minXDiff * 2, (bounds.max - bounds.min) * 1e-6);\n      if (newRange < minRange) newRange = minRange;\n      if (newRange > bounds.max - bounds.min) newRange = bounds.max - bounds.min;\n    }\n    const anchor = min + mouseX * range;\n    let newMinX = anchor - mouseX * newRange;\n    let newMaxX = newMinX + newRange;\n    const eps = range * 1e-9;\n    if (Math.abs(newMinX - min) < eps && Math.abs(newMaxX - max) < eps) return;\n    if (isNaN(newMinX) || isNaN(newMaxX)) return;\n    const beforeZoomRange = this.getBeforeZoomRange(\n      { min: newMinX, max: newMaxX },\n      /** @type {any} */\n      void 0\n    );\n    if (beforeZoomRange && beforeZoomRange.xaxis) {\n      newMinX = beforeZoomRange.xaxis.min;\n      newMaxX = beforeZoomRange.xaxis.max;\n    }\n    this._applyXRange(newMinX, newMaxX, true);\n  }\n  /** Fire the zoomed callback once the wheel gesture settles (mirrors _endPinch). */\n  _endWheelZoom() {\n    const w2 = this.w;\n    const st = this._wheel();\n    st.endTimer = null;\n    if (w2.globals.isDestroyed || !w2.interact.zoomed) return;\n    const { min, max } = this._currentXWindow();\n    const yaxis = w2.globals.initialConfig ? Utils$1.clone(w2.globals.initialConfig.yaxis) : [];\n    const toolbar = this.ctx.toolbar;\n    if (toolbar) toolbar.zoomCallback({ min, max }, yaxis);\n  }\n  makeSelectionRectDraggable() {\n    const w2 = 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, p2, 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, p2) => {\n          return group.center(p2[0], p2[1]);\n        }\n      }).resize().on(\"resize\", () => {\n        var _a;\n        if (w2.interact.selectionEnabled) {\n          w2.interact.selection = {\n            x: parseFloat(this.selectionRect.node.getAttribute(\"x\")),\n            y: parseFloat(this.selectionRect.node.getAttribute(\"y\")),\n            width: parseFloat(this.selectionRect.node.getAttribute(\"width\")),\n            height: parseFloat(this.selectionRect.node.getAttribute(\"height\"))\n          };\n          clearTimeout((_a = this.w.globals.selectionResizeTimer) != null ? _a : void 0);\n          this.w.globals.selectionResizeTimer = window.setTimeout(() => {\n            this._emitSelectionFromRect();\n          }, 30);\n        } else {\n          const zoomtype = w2.interact.zoomEnabled ? w2.config.chart.zoom.type : w2.config.chart.selection.type;\n          this.handleMouseUp({ zoomtype, isResized: true });\n        }\n      });\n    }\n  }\n  preselectedSelection() {\n    const w2 = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w2.interact.zoomEnabled) {\n      if (typeof w2.interact.selection !== \"undefined\" && w2.interact.selection !== null) {\n        this.drawSelectionRect(__spreadProps(__spreadValues({}, w2.interact.selection), {\n          translateX: w2.layout.translateX,\n          translateY: w2.layout.translateY\n        }));\n      } else {\n        if (w2.config.chart.selection.xaxis.min !== void 0 && w2.config.chart.selection.xaxis.max !== void 0) {\n          let x = AxisMapping.dataXToPx(w2, w2.config.chart.selection.xaxis.min);\n          let width = AxisMapping.dataXToPx(w2, w2.config.chart.selection.xaxis.max) - x;\n          if (w2.axisFlags.isRangeBar) {\n            x = (w2.config.chart.selection.xaxis.min - w2.globals.yAxisScale[0].niceMin) / xyRatios.invertedYRatio;\n            width = (w2.config.chart.selection.xaxis.max - w2.config.chart.selection.xaxis.min) / xyRatios.invertedYRatio;\n          }\n          const selectionRect = {\n            x,\n            y: 0,\n            width,\n            height: w2.layout.gridHeight,\n            translateX: w2.layout.translateX,\n            translateY: w2.layout.translateY,\n            selectionEnabled: true\n          };\n          this.drawSelectionRect(selectionRect);\n          this.makeSelectionRectDraggable();\n          if (typeof w2.config.chart.events.selection === \"function\") {\n            w2.config.chart.events.selection(this.ctx, {\n              xaxis: {\n                min: w2.config.chart.selection.xaxis.min,\n                max: w2.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 w2 = this.w;\n    const zoomRect = this.zoomRect;\n    const selectionRect = this.selectionRect;\n    if (this.dragged || w2.interact.selection !== null) {\n      const scalingAttrs = {\n        transform: \"translate(\" + translateX + \", \" + translateY + \")\"\n      };\n      if (w2.interact.zoomEnabled && this.dragged) {\n        if (width < 0) width = 1;\n        zoomRect.attr({\n          x,\n          y,\n          width,\n          height,\n          fill: w2.config.chart.zoom.zoomedArea.fill.color,\n          \"fill-opacity\": w2.config.chart.zoom.zoomedArea.fill.opacity,\n          stroke: w2.config.chart.zoom.zoomedArea.stroke.color,\n          \"stroke-width\": w2.config.chart.zoom.zoomedArea.stroke.width,\n          \"stroke-opacity\": w2.config.chart.zoom.zoomedArea.stroke.opacity\n        });\n        Graphics.setAttrs(zoomRect.node, scalingAttrs);\n      }\n      if (w2.interact.selectionEnabled) {\n        selectionRect.attr({\n          x,\n          y,\n          width: width > 0 ? width : 0,\n          height: height > 0 ? height : 0,\n          fill: w2.config.chart.selection.fill.color,\n          \"fill-opacity\": w2.config.chart.selection.fill.opacity,\n          stroke: w2.config.chart.selection.stroke.color,\n          \"stroke-width\": w2.config.chart.selection.stroke.width,\n          \"stroke-dasharray\": w2.config.chart.selection.stroke.dashArray,\n          \"stroke-opacity\": w2.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    const w2 = this.w;\n    const me = context;\n    const gridRectDim = this._gridRect();\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 = this._screenXToPlotPx(me.clientX);\n    const top = me.clientY - gridRectDim.top;\n    let selectionWidth = left - startX;\n    let selectionHeight = top - startY;\n    let selectionRect = {\n      translateX: w2.layout.translateX,\n      translateY: w2.layout.translateY\n    };\n    if (Math.abs(selectionWidth + startX) > w2.layout.gridWidth) {\n      selectionWidth = w2.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: w2.layout.gridHeight\n      };\n    } else if (zoomtype === \"y\") {\n      selectionRect = {\n        x: 0,\n        y: inversedY ? startY - selectionHeight : startY,\n        width: w2.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: w2.layout.translateX,\n      translateY: w2.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, e2) {\n    var _a;\n    const w2 = this.w;\n    if (!e2) return;\n    e2.preventDefault();\n    const { handler, box } = e2.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 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    w2.interact.selection = draggedProps;\n    const link = w2.config.chart.link;\n    const linkActive = !!(link && (link.enabled || typeof link.dimension === \"function\"));\n    if ((typeof w2.config.chart.events.selection === \"function\" || linkActive) && w2.interact.selectionEnabled) {\n      clearTimeout((_a = this.w.globals.selectionResizeTimer) != null ? _a : void 0);\n      this.w.globals.selectionResizeTimer = window.setTimeout(() => {\n        this._emitSelectionFromRect();\n      }, timerInterval);\n    }\n  }\n  /**\n   * Recompute the reported x/y range from the CURRENT persistent selection rect\n   * (via the shared AxisMapping) and notify listeners: chart.events.selection,\n   * brushScrolled, and the crossfilter coordinator. Shared by the rect-body drag\n   * (selectionDragging) and the handle resize (makeSelectionRectDraggable) so\n   * every gesture re-reports through ONE mapping and the reported range always\n   * matches the rect the user sees. No dragged/threshold gate: reaching here\n   * already means the user moved or resized the persistent rect.\n   */\n  _emitSelectionFromRect() {\n    var _a;\n    const w2 = this.w;\n    if (!w2.interact.selectionEnabled) return;\n    const link = w2.config.chart.link;\n    const linkActive = !!(link && (link.enabled || typeof link.dimension === \"function\"));\n    if (typeof w2.config.chart.events.selection !== \"function\" && !linkActive) {\n      return;\n    }\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim) return;\n    const selectionRect = this.selectionRect.node.getBoundingClientRect();\n    const xyRatios = this.xyRatios;\n    let minX, maxX, minY, maxY;\n    const relLeft = this._screenXToPlotPx(selectionRect.left);\n    const relRight = this._screenXToPlotPx(selectionRect.right);\n    if (!w2.axisFlags.isRangeBar) {\n      if (!w2.globals.xAxisScale) return;\n      minX = AxisMapping.pxToDataX(w2, relLeft);\n      maxX = AxisMapping.pxToDataX(w2, relRight);\n      minY = w2.globals.yAxisScale[0].niceMin + (gridRectDim.bottom - selectionRect.bottom) * xyRatios.yRatio[0];\n      maxY = w2.globals.yAxisScale[0].niceMax - (selectionRect.top - gridRectDim.top) * xyRatios.yRatio[0];\n    } else {\n      minX = w2.globals.yAxisScale[0].niceMin + relLeft * xyRatios.invertedYRatio;\n      maxX = w2.globals.yAxisScale[0].niceMin + relRight * xyRatios.invertedYRatio;\n      minY = 0;\n      maxY = 1;\n    }\n    const xyAxis = {\n      xaxis: { min: minX, max: maxX },\n      yaxis: { min: minY, max: maxY }\n    };\n    if (typeof w2.config.chart.events.selection === \"function\") {\n      w2.config.chart.events.selection(this.ctx, xyAxis);\n    }\n    if (w2.config.chart.brush.enabled && w2.config.chart.events.brushScrolled !== void 0) {\n      w2.config.chart.events.brushScrolled(this.ctx, xyAxis);\n    }\n    (_a = this.ctx.linkedViews) == null ? void 0 : _a.onSourceSelection(xyAxis.xaxis);\n  }\n  /** @param {{context: any, zoomtype: any}} opts */\n  selectionDrawn({ context, zoomtype }) {\n    var _a;\n    const w2 = this.w;\n    const me = context;\n    const xyRatios = this.xyRatios;\n    const toolbar = this.ctx.toolbar;\n    const selRect = w2.interact.zoomEnabled ? me.zoomRect.node.getBoundingClientRect() : me.selectionRect.node.getBoundingClientRect();\n    const gridRectDim = me._gridRect();\n    if (!gridRectDim) return;\n    const localStartX = this._screenXToPlotPx(selRect.left);\n    const localEndX = this._screenXToPlotPx(selRect.right);\n    const localStartY = selRect.top - gridRectDim.top;\n    const localEndY = selRect.bottom - gridRectDim.top;\n    let xLowestValue, xHighestValue;\n    if (!w2.axisFlags.isRangeBar) {\n      xLowestValue = AxisMapping.pxToDataX(w2, localStartX);\n      xHighestValue = AxisMapping.pxToDataX(w2, localEndX);\n    } else {\n      xLowestValue = w2.globals.yAxisScale[0].niceMin + localStartX * xyRatios.invertedYRatio;\n      xHighestValue = w2.globals.yAxisScale[0].niceMin + localEndX * xyRatios.invertedYRatio;\n    }\n    const yHighestValue = [];\n    const yLowestValue = [];\n    w2.config.yaxis.forEach((yaxe, index) => {\n      const seriesIndex = w2.globals.seriesYAxisMap[index][0];\n      const highestVal = w2.globals.yAxisScale[index].niceMax - xyRatios.yRatio[seriesIndex] * localStartY;\n      const lowestVal = w2.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 (w2.interact.zoomEnabled) {\n        if (!w2.globals.initialConfig) return;\n        let yaxis = Utils$1.clone(w2.globals.initialConfig.yaxis);\n        let xaxis = Utils$1.clone(w2.globals.initialConfig.xaxis);\n        w2.interact.zoomed = true;\n        if (w2.config.xaxis.convertedCatToNumeric) {\n          xLowestValue = Math.floor(xLowestValue);\n          xHighestValue = Math.floor(xHighestValue);\n          if (xLowestValue < 1) {\n            xLowestValue = 1;\n            xHighestValue = w2.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 (!w2.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 w2.config.chart.events.zoomed === \"function\") {\n          toolbar.zoomCallback(xaxis, yaxis);\n        }\n      } else if (w2.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(w2.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        w2.interact.selection = me.selection;\n        if (typeof w2.config.chart.events.selection === \"function\") {\n          w2.config.chart.events.selection(me.ctx, {\n            xaxis,\n            yaxis\n          });\n        }\n        (_a = me.ctx.linkedViews) == null ? void 0 : _a.onSourceSelection(xaxis);\n      }\n    }\n  }\n  /** @param {{ context?: any, zoomtype?: any, xyRatios?: any }} opts */\n  panDragging({ context }) {\n    var _a;\n    const w2 = this.w;\n    const me = context;\n    if (typeof w2.interact.lastClientPosition.x !== \"undefined\") {\n      const deltaX = w2.interact.lastClientPosition.x - me.clientX;\n      const deltaY = ((_a = w2.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    w2.interact.lastClientPosition = {\n      x: me.clientX,\n      y: me.clientY\n    };\n    const xLowestValue = w2.axisFlags.isRangeBar ? w2.globals.minY : w2.globals.minX;\n    const xHighestValue = w2.axisFlags.isRangeBar ? w2.globals.maxY : w2.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 w2 = this.w;\n    const xyRatios = this.xyRatios;\n    if (!w2.globals.initialConfig) return;\n    const yaxis = Utils$1.clone(w2.globals.initialConfig.yaxis);\n    let xRatio = xyRatios.xRatio;\n    let minX = w2.globals.minX;\n    let maxX = w2.globals.maxX;\n    if (w2.axisFlags.isRangeBar) {\n      xRatio = xyRatios.invertedYRatio;\n      minX = w2.globals.minY;\n      maxX = w2.globals.maxY;\n    }\n    if (this.moveDirection === \"left\") {\n      xLowestValue = minX + w2.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n      xHighestValue = maxX + w2.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n    } else if (this.moveDirection === \"right\") {\n      xLowestValue = minX - w2.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n      xHighestValue = maxX - w2.layout.gridWidth / PAN_NUDGE_DIVISOR * xRatio;\n    }\n    if (!w2.axisFlags.isRangeBar) {\n      const clampMin = (_a = w2.globals.dataReducerRawMinX) != null ? _a : w2.globals.initialMinX;\n      const clampMax = (_b = w2.globals.dataReducerRawMaxX) != null ? _b : w2.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 (!w2.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 w2 = this.w;\n    this.ctx.updateHelpers._updateOptions(options2, false, false);\n    if (typeof w2.config.chart.events.scrolled === \"function\") {\n      const args = {\n        xaxis: {\n          min: xLowestValue,\n          max: xHighestValue\n        }\n      };\n      w2.config.chart.events.scrolled(this.ctx, args);\n      this.ctx.events.fireEvent(\"scrolled\", args);\n    }\n  }\n  // ---------------------------------------------------------------------------\n  // Momentum: multi-touch pinch-zoom, two-finger pan and kinetic inertia.\n  //\n  // Every _updateOptions destroys and recreates this instance, and applying a\n  // gesture frame IS an _updateOptions, so the gesture must not depend on the\n  // instance surviving. All runtime state lives on w.interact.momentum (the\n  // interaction slice that persists across re-renders, like the crude pan's\n  // lastClientPosition). The instance that received touchstart keeps driving\n  // the gesture off the persistent state; inertia is a self-contained rAF loop\n  // that stops on w.globals.isDestroyed (a real destroy) rather than being\n  // cancelled by the per-update destroy().\n  // ---------------------------------------------------------------------------\n  _momentumEnabled() {\n    return this._pinchEnabled() || this._panInertiaEnabled();\n  }\n  _pinchEnabled() {\n    return this._incidentalZoomEnabled(this.w.config.chart.zoom.pinch);\n  }\n  _panInertiaEnabled() {\n    const c2 = this.w.config.chart;\n    return !!(c2.pan && c2.pan.inertia);\n  }\n  /** Lazily-created, re-render-surviving gesture state on the interaction slice. */\n  _m() {\n    const it = this.w.interact;\n    if (!it.momentum) {\n      it.momentum = {\n        busy: false,\n        /** @type {any} */\n        pinch: null,\n        /** @type {any} */\n        panState: null,\n        /** @type {{x:number,t:number}[]} */\n        samples: [],\n        /** @type {number|null} */\n        inertiaRAF: null\n      };\n    }\n    return it.momentum;\n  }\n  /** Current x data-window (rangeBars carry the datetime domain on y). */\n  _currentXWindow() {\n    const w2 = this.w;\n    return w2.axisFlags.isRangeBar ? { min: w2.globals.minY, max: w2.globals.maxY } : { min: w2.globals.minX, max: w2.globals.maxX };\n  }\n  /** Live grid rect from the current DOM. Never cache the grid node on the\n   * instance: a full render replaces this whole instance, but the fast update\n   * path (fastUpdate/_fastAxisChromeRefresh) keeps the instance while swapping\n   * the grid node, and a cached node would go stale (detached nodes report an\n   * all-zero bounding rect, silently corrupting selection geometry). */\n  _gridRect() {\n    const baseEl = this.w.dom.baseEl;\n    const grid = baseEl && baseEl.querySelector(\".apexcharts-grid\");\n    return grid ? grid.getBoundingClientRect() : null;\n  }\n  /**\n   * Convert an absolute (client) x pixel to the plot-origin coordinate space\n   * that bar placement and the selection rect transform both use:\n   * `screenX - svgLeft - translateX`. This is the ONLY correct reference for the\n   * numeric/datetime x mapping (see AxisMapping): do NOT measure from the\n   * `.apexcharts-grid` box and subtract barPadForNumericAxis, because on a\n   * numeric bar chart that box extends barPad to the LEFT of the plot origin, so\n   * the two corrections are a fragile pair that only cancels while the grid box\n   * happens to extend exactly barPad. Anchoring on translateX (the same origin\n   * the bars use) is stable regardless of grid padding.\n   * @param {number} screenX\n   * @returns {number}\n   */\n  _screenXToPlotPx(screenX) {\n    return AxisMapping.screenXToPlotPx(this.w, screenX);\n  }\n  /**\n   * Raw data bounds to clamp against. When zoom-aware downsampling is active,\n   * the raw stash tracks the full domain; fall back to the initial window.\n   * Returns null for rangeBars (no raw-x clamp available).\n   * @returns {{min:number, max:number}|null}\n   */\n  _clampBounds() {\n    var _a, _b;\n    const w2 = this.w;\n    if (w2.axisFlags.isRangeBar) return null;\n    return {\n      min: (_a = w2.globals.dataReducerRawMinX) != null ? _a : w2.globals.initialMinX,\n      max: (_b = w2.globals.dataReducerRawMaxX) != null ? _b : w2.globals.initialMaxX\n    };\n  }\n  /**\n   * Apply an x-window immediately (no animation), mirroring panScrolled but\n   * pixel-accurate: clamp to the raw bounds (preserving window width so a pan\n   * stops flush at the edge rather than shrinking), floor for category axes,\n   * then route through the fast _updateOptions path.\n   * @param {number} newMinX @param {number} newMaxX @param {boolean} isZoom\n   * @returns {{minX:number, maxX:number}|false} applied window, or false if rejected\n   */\n  _applyXRange(newMinX, newMaxX, isZoom) {\n    const w2 = this.w;\n    if (!w2.globals.initialConfig) return false;\n    const cur = this._currentXWindow();\n    const zoomingOut = isZoom && newMaxX - newMinX > cur.max - cur.min;\n    const bounds = this._clampBounds();\n    if (bounds) {\n      const range = newMaxX - newMinX;\n      if (newMinX < bounds.min) {\n        newMinX = bounds.min;\n        newMaxX = newMinX + range;\n      }\n      if (newMaxX > bounds.max) {\n        newMaxX = bounds.max;\n        newMinX = newMaxX - range;\n      }\n      if (newMinX < bounds.min) newMinX = bounds.min;\n    }\n    if (w2.config.xaxis.convertedCatToNumeric) {\n      newMinX = Math.floor(newMinX);\n      newMaxX = zoomingOut ? Math.ceil(newMaxX) : Math.floor(newMaxX);\n      if (newMinX < 1) newMinX = 1;\n      if (bounds && newMaxX > bounds.max) newMaxX = Math.floor(bounds.max);\n      if (newMaxX - newMinX < 2) return false;\n    }\n    if (!(newMaxX > newMinX)) return false;\n    const options2 = { xaxis: { min: newMinX, max: newMaxX } };\n    if (!w2.config.chart.group) {\n      options2.yaxis = Utils$1.clone(w2.globals.initialConfig.yaxis);\n    }\n    if (isZoom) w2.interact.zoomed = true;\n    this.ctx.updateHelpers._updateOptions(options2, false, false);\n    return { minX: newMinX, maxX: newMaxX };\n  }\n  _cancelInertia() {\n    const m2 = this._m();\n    if (m2.inertiaRAF != null) {\n      cancelAnimationFrame(m2.inertiaRAF);\n      m2.inertiaRAF = null;\n    }\n  }\n  _fireScrolled() {\n    const w2 = this.w;\n    if (typeof w2.config.chart.events.scrolled !== \"function\") return;\n    const { min, max } = this._currentXWindow();\n    const args = { xaxis: { min, max } };\n    w2.config.chart.events.scrolled(this.ctx, args);\n    this.ctx.events.fireEvent(\"scrolled\", args);\n  }\n  /** @param {number} x @param {number} t */\n  _pushSample(x, t2) {\n    const s2 = this._m().samples;\n    s2.push({ x, t: t2 });\n    while (s2.length > 6) s2.shift();\n  }\n  /**\n   * Single passive:false handler for all touch phases. Two fingers => pinch /\n   * two-finger pan (zoom). One finger, in pan mode => kinetic pan with inertia.\n   * @param {any} e\n   */\n  momentumTouch(e2) {\n    const w2 = this.w;\n    const m2 = this._m();\n    const type = e2.type;\n    if (type === \"touchstart\") {\n      this._cancelInertia();\n      const gridRectDim = this._gridRect();\n      if (!gridRectDim) return;\n      if (e2.touches.length >= 2 && this._pinchEnabled()) {\n        e2.preventDefault();\n        m2.busy = true;\n        m2.panState = null;\n        this._beginPinch(e2, gridRectDim);\n      } else if (e2.touches.length === 1 && this._panInertiaEnabled() && w2.interact.panEnabled) {\n        m2.busy = true;\n        m2.pinch = null;\n        const t2 = e2.touches[0];\n        const win = this._currentXWindow();\n        const gw = w2.layout.gridWidth || 1;\n        m2.panState = {\n          startX: t2.clientX,\n          startY: t2.clientY,\n          axis: null,\n          // decided on first move (rails)\n          minX0: win.min,\n          maxX0: win.max,\n          ratio0: (win.max - win.min) / gw\n        };\n        m2.samples = [{ x: t2.clientX, t: e2.timeStamp }];\n      }\n      return;\n    }\n    if (type === \"touchmove\") {\n      if (m2.pinch && e2.touches.length >= 2) {\n        e2.preventDefault();\n        this._movePinch(e2);\n      } else if (m2.panState && e2.touches.length === 1) {\n        this._movePan(e2);\n      }\n      return;\n    }\n    if (m2.pinch) {\n      if (e2.touches.length < 2) this._endPinch();\n    } else if (m2.panState) {\n      if (e2.touches.length === 0) this._endPan();\n    }\n    if (e2.touches.length === 0) {\n      w2.interact.mousedown = false;\n      this.dragged = false;\n      if (m2.inertiaRAF == null && !m2.pinch && !m2.panState) {\n        m2.busy = false;\n      }\n    }\n  }\n  /** @param {any} e @param {DOMRect} gridRectDim */\n  _beginPinch(e2, gridRectDim) {\n    const w2 = this.w;\n    const t0 = e2.touches[0];\n    const t1 = e2.touches[1];\n    const dist = Math.hypot(t1.clientX - t0.clientX, t1.clientY - t0.clientY) || 1;\n    const cx = (t0.clientX + t1.clientX) / 2 - gridRectDim.left - w2.globals.barPadForNumericAxis;\n    const { min, max } = this._currentXWindow();\n    this._m().pinch = {\n      d0: dist,\n      cx0: cx,\n      minX0: min,\n      maxX0: max,\n      gridWidth: w2.layout.gridWidth || 1\n    };\n  }\n  /** @param {any} e */\n  _movePinch(e2) {\n    const w2 = this.w;\n    const p2 = this._m().pinch;\n    if (!p2) return;\n    const gridRectDim = this._gridRect();\n    if (!gridRectDim) return;\n    const t0 = e2.touches[0];\n    const t1 = e2.touches[1];\n    const dist = Math.hypot(t1.clientX - t0.clientX, t1.clientY - t0.clientY) || 1;\n    const cx = (t0.clientX + t1.clientX) / 2 - gridRectDim.left - w2.globals.barPadForNumericAxis;\n    const range0 = p2.maxX0 - p2.minX0;\n    const newRange = range0 * (p2.d0 / dist);\n    const anchorData = p2.minX0 + p2.cx0 / p2.gridWidth * range0;\n    let newMinX = anchorData - cx / p2.gridWidth * newRange;\n    let newMaxX = newMinX + newRange;\n    const bounds = this._clampBounds();\n    if (bounds) {\n      const minXDiff = w2.globals.minXDiff > 0 && isFinite(w2.globals.minXDiff) ? w2.globals.minXDiff : 0;\n      const minRange = Math.max(minXDiff * 2, (bounds.max - bounds.min) * 1e-6);\n      if (newMaxX - newMinX < minRange) {\n        const mid = (newMinX + newMaxX) / 2;\n        newMinX = mid - minRange / 2;\n        newMaxX = mid + minRange / 2;\n      }\n    }\n    this._applyXRange(newMinX, newMaxX, true);\n  }\n  _endPinch() {\n    const w2 = this.w;\n    const m2 = this._m();\n    m2.pinch = null;\n    const { min, max } = this._currentXWindow();\n    const xaxis = { min, max };\n    const yaxis = w2.globals.initialConfig ? Utils$1.clone(w2.globals.initialConfig.yaxis) : [];\n    const toolbar = this.ctx.toolbar;\n    if (toolbar) toolbar.zoomCallback(xaxis, yaxis);\n  }\n  /** @param {any} e */\n  _movePan(e2) {\n    const m2 = this._m();\n    const s2 = m2.panState;\n    const t2 = e2.touches[0];\n    if (!s2.axis) {\n      const dx = Math.abs(t2.clientX - s2.startX);\n      const dy = Math.abs(t2.clientY - s2.startY);\n      if (dx < 6 && dy < 6) {\n        this._pushSample(t2.clientX, e2.timeStamp);\n        return;\n      }\n      if (dy > dx) {\n        m2.busy = false;\n        m2.panState = null;\n        return;\n      }\n      s2.axis = \"x\";\n    }\n    if (s2.axis !== \"x\") return;\n    e2.preventDefault();\n    const totalDeltaPx = t2.clientX - s2.startX;\n    const deltaData = totalDeltaPx * s2.ratio0;\n    this._pushSample(t2.clientX, e2.timeStamp);\n    this._applyXRange(s2.minX0 - deltaData, s2.maxX0 - deltaData, false);\n  }\n  _endPan() {\n    const m2 = this._m();\n    const s2 = m2.panState;\n    m2.panState = null;\n    let vel = 0;\n    const samples = m2.samples;\n    if (samples.length >= 2) {\n      const a2 = samples[0];\n      const b2 = samples[samples.length - 1];\n      const dt = b2.t - a2.t;\n      if (dt > 0) vel = (b2.x - a2.x) / dt;\n    }\n    m2.samples = [];\n    if (s2 && s2.axis === \"x\" && this._panInertiaEnabled() && Math.abs(vel) > INERTIA_MIN_RELEASE_VELOCITY) {\n      this._startInertia(vel);\n    } else {\n      m2.busy = false;\n      this._fireScrolled();\n    }\n  }\n  /**\n   * Kinetic glide after a one-finger pan release: decay the velocity by\n   * `friction` each frame and shift the window, stopping at the data edge\n   * (clamp, not elastic overshoot). The loop is w-driven, so it keeps running\n   * across the re-renders each frame triggers and stops only on a real destroy.\n   * @param {number} vel0 px/ms, sign is the finger direction\n   */\n  _startInertia(vel0) {\n    const w2 = this.w;\n    const m2 = this._m();\n    const cfgFriction = w2.config.chart.pan && w2.config.chart.pan.friction;\n    const friction = typeof cfgFriction === \"number\" ? Math.min(Math.max(cfgFriction, 0.5), 0.999) : INERTIA_DEFAULT_FRICTION;\n    let vel = vel0;\n    let lastT = null;\n    m2.busy = true;\n    const step = (ts) => {\n      if (w2.globals.isDestroyed) {\n        m2.inertiaRAF = null;\n        m2.busy = false;\n        return;\n      }\n      if (lastT == null) {\n        lastT = ts;\n        m2.inertiaRAF = requestAnimationFrame(step);\n        return;\n      }\n      const dt = ts - lastT;\n      lastT = ts;\n      vel *= Math.pow(friction, dt / FRAME_MS_60FPS);\n      if (Math.abs(vel) < INERTIA_STOP_VELOCITY) {\n        m2.inertiaRAF = null;\n        m2.busy = false;\n        this._fireScrolled();\n        return;\n      }\n      const win = this._currentXWindow();\n      const gw = w2.layout.gridWidth || 1;\n      const ratio = (win.max - win.min) / gw;\n      const deltaData = vel * dt * ratio;\n      const applied = this._applyXRange(\n        win.min - deltaData,\n        win.max - deltaData,\n        false\n      );\n      const bounds = this._clampBounds();\n      const hitEdge = !applied || bounds && (deltaData > 0 && applied.minX <= bounds.min + (bounds.max - bounds.min) * 1e-6 || deltaData < 0 && applied.maxX >= bounds.max - (bounds.max - bounds.min) * 1e-6);\n      if (hitEdge) {\n        m2.inertiaRAF = null;\n        m2.busy = false;\n        this._fireScrolled();\n        return;\n      }\n      m2.inertiaRAF = requestAnimationFrame(step);\n    };\n    m2.inertiaRAF = requestAnimationFrame(step);\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 w2 = this.w;\n    if (anno.label.orientation === \"vertical\") {\n      const i2 = annoIndex !== null ? annoIndex : 0;\n      const xAnno = w2.dom.baseEl.querySelector(\n        `.apexcharts-xaxis-annotations .apexcharts-xaxis-annotation-label[rel='${i2}']`\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 w2 = this.w;\n    if (!annoEl || !anno.label.text || !String(anno.label.text).trim()) {\n      return null;\n    }\n    const gridEl = w2.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 gridLeft = elGridRect.left - gridBBox.x * zoom;\n    const gridTop = elGridRect.top - gridBBox.y * zoom;\n    const x1 = (coords.left - gridLeft) / zoom - pleft;\n    const y1 = (coords.top - gridTop) / zoom - ptop;\n    const elRect = this.annoCtx.graphics.drawRect(\n      x1,\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 w2 = this.w;\n    const add = (anno, i2, type) => {\n      const annoLabel = w2.dom.baseEl.querySelector(\n        `.apexcharts-${type}-annotations .apexcharts-${type}-annotation-label[rel='${i2}']`\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), w2);\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    w2.config.annotations.xaxis.forEach(\n      (anno, i2) => add(anno, i2, \"xaxis\")\n    );\n    w2.config.annotations.yaxis.forEach(\n      (anno, i2) => add(anno, i2, \"yaxis\")\n    );\n    w2.config.annotations.points.forEach(\n      (anno, i2) => add(anno, i2, \"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 w2 = 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 = w2.config.xaxis.convertedCatToNumeric ? w2.labelData.categoryLabels : w2.labelData.labels;\n      const catIndex = labels.indexOf(y);\n      const xLabel = w2.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\") : (w2.layout.gridHeight / labels.length - 1) * (catIndex + 1) - w2.globals.barHeight;\n      if (anno.seriesIndex !== void 0 && w2.globals.barHeight) {\n        yP -= w2.globals.barHeight / 2 * (w2.seriesData.series.length - 1) - w2.globals.barHeight * anno.seriesIndex;\n      }\n    } else {\n      const yAxisMap = w2.globals.seriesYAxisMap[anno.yAxisIndex];\n      if (!yAxisMap || yAxisMap[0] == null || !w2.config.yaxis[anno.yAxisIndex]) {\n        return { yP: 0, clipped: true };\n      }\n      const seriesIndex = yAxisMap[0];\n      const yPos = w2.config.yaxis[anno.yAxisIndex].logarithmic ? new CoreUtils(this.w).getLogVal(\n        w2.config.yaxis[anno.yAxisIndex].logBase,\n        y,\n        seriesIndex\n      ) / /** @type {any} */\n      w2.globals.yLogRatio[seriesIndex] : (y - w2.globals.minYArr[seriesIndex]) / (w2.globals.yRange[seriesIndex] / w2.layout.gridHeight);\n      yP = w2.layout.gridHeight - Math.min(Math.max(yPos, 0), w2.layout.gridHeight);\n      clipped = yPos > w2.layout.gridHeight || yPos < 0;\n      if (anno.marker && (anno.y === void 0 || anno.y === null)) {\n        yP = 0;\n      }\n      if ((_b = w2.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 w2 = this.w;\n    const x = type === \"x1\" ? anno.x : anno.x2;\n    const min = this.annoCtx.invertAxis ? w2.globals.minY : w2.globals.minX;\n    const max = this.annoCtx.invertAxis ? w2.globals.maxY : w2.globals.maxX;\n    const range = this.annoCtx.invertAxis ? w2.globals.yRange[0] : w2.globals.xRange;\n    let clipped = false;\n    let xP = this.annoCtx.inversedReversedAxis ? (max - x) / (range / w2.layout.gridWidth) : (x - min) / (range / w2.layout.gridWidth);\n    if ((w2.config.xaxis.type === \"category\" || w2.config.xaxis.convertedCatToNumeric) && !this.annoCtx.invertAxis && !w2.axisFlags.dataFormatXNumeric) {\n      if (!w2.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 = w2.layout.gridWidth;\n    }\n    if (anno.seriesIndex !== void 0 && w2.globals.barWidth && !this.annoCtx.invertAxis) {\n      xP -= w2.globals.barWidth / 2 * (w2.seriesData.series.length - 1) - w2.globals.barWidth * anno.seriesIndex;\n    }\n    if (typeof xP !== \"number\") {\n      xP = 0;\n      clipped = true;\n    }\n    if (parseFloat(xP.toFixed(10)) > parseFloat(w2.layout.gridWidth.toFixed(10))) {\n      xP = w2.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 w2 = this.w;\n    let rX = x;\n    if (w2.config.xaxis.convertedCatToNumeric && w2.labelData.categoryLabels.length) {\n      const strX = String(x);\n      x = w2.labelData.categoryLabels.findIndex(\n        (l2) => String(l2) === strX\n      ) + 1;\n    }\n    const catIndex = w2.labelData.labels.map(\n      (item) => Array.isArray(item) ? item.join(\" \") : item\n    ).indexOf(x);\n    const xLabel = w2.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 w2 = 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          w2.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, w2);\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        w2.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${w2.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, w2);\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\" ? w2.layout.gridHeight / 2 + (anno.label.orientation === \"vertical\" ? textRects.width / 2 : 0) : w2.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, w2);\n      this.annoCtx.helpers.setOrientations(anno, index);\n    }\n  }\n  drawXAxisAnnotations() {\n    const w2 = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-xaxis-annotations\"\n    });\n    w2.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 w2 = 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${w2.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\" ? w2.layout.gridWidth : anno.label.position === \"center\" ? w2.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 w2 = this.w;\n    let width = w2.layout.gridWidth;\n    if (anno.width.indexOf(\"%\") > -1) {\n      width = w2.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 w2 = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-yaxis-annotations\"\n    });\n    w2.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 w2 = this.w;\n    if (w2.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      const tooltipTargets = [point.node];\n      applyProgressiveReveal(point, x, w2);\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, w2);\n      if (anno.customSVG.SVG) {\n        const g2 = this.annoCtx.graphics.group({\n          class: \"apexcharts-point-annotations-custom-svg \" + anno.customSVG.cssClass\n        });\n        g2.attr({\n          transform: `translate(${x + anno.customSVG.offsetX}, ${y + anno.customSVG.offsetY})`\n        });\n        g2.node.innerHTML = anno.customSVG.SVG;\n        parent.appendChild(g2.node);\n        tooltipTargets.push(g2.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        tooltipTargets.push(point.node);\n      }\n      if (anno.tooltip && anno.tooltip.enabled) {\n        tooltipTargets.forEach((node) => {\n          node.addEventListener(\"mouseenter\", () => {\n            this.showPointTooltip(anno, node);\n          });\n          node.addEventListener(\"mouseleave\", () => {\n            this.hidePointTooltip();\n          });\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  /**\n   * Lazily create (once per chart) and return the shared HTML element used to\n   * render point-annotation tooltips. Reuses the `.apexcharts-tooltip` glass\n   * styling; the `.apexcharts-annotation-tooltip` modifier adds padding and\n   * text wrapping for free-form content.\n   * @returns {HTMLElement}\n   */\n  getPointTooltipEl() {\n    const w2 = this.w;\n    let el = (\n      /** @type {HTMLElement | null} */\n      w2.dom.elWrap.querySelector(\".apexcharts-annotation-tooltip\")\n    );\n    if (!el) {\n      el = /** @type {HTMLElement} */\n      BrowserAPIs.createElementNS(\"http://www.w3.org/1999/xhtml\", \"div\");\n      el.classList.add(\"apexcharts-tooltip\", \"apexcharts-annotation-tooltip\");\n      w2.dom.elWrap.appendChild(el);\n    }\n    return el;\n  }\n  /**\n   * Resolve the tooltip markup for a point annotation. Precedence:\n   * `tooltip.formatter` (fn) -> `tooltip.text` -> `label.text`. Arrays are\n   * joined with line breaks.\n   * @param {Record<string, any>} anno\n   * @returns {string}\n   */\n  getPointTooltipContent(anno) {\n    const w2 = this.w;\n    const tt = anno.tooltip || {};\n    if (typeof tt.formatter === \"function\") {\n      return tt.formatter({\n        annotation: anno,\n        seriesIndex: anno.seriesIndex,\n        id: anno.id,\n        w: w2\n      });\n    }\n    let content = tt.text != null ? tt.text : anno.label && anno.label.text;\n    if (Array.isArray(content)) {\n      content = content.join(\"<br/>\");\n    }\n    return content == null ? \"\" : String(content);\n  }\n  /**\n   * @param {Record<string, any>} anno\n   * @param {Element} targetNode the hovered marker / image / custom-SVG node\n   */\n  showPointTooltip(anno, targetNode) {\n    const w2 = this.w;\n    const content = this.getPointTooltipContent(anno);\n    if (!content) return;\n    const el = this.getPointTooltipEl();\n    el.innerHTML = content;\n    const theme = anno.tooltip.theme || w2.config.tooltip.theme || \"light\";\n    el.classList.remove(\"apexcharts-theme-light\", \"apexcharts-theme-dark\");\n    el.classList.add(`apexcharts-theme-${theme}`);\n    el.classList.add(\"apexcharts-active\");\n    const wrapRect = w2.dom.elWrap.getBoundingClientRect();\n    const markRect = targetNode.getBoundingClientRect();\n    const ttRect = el.getBoundingClientRect();\n    const offsetX = anno.tooltip.offsetX || 0;\n    const offsetY = anno.tooltip.offsetY || 0;\n    let left = markRect.left - wrapRect.left + markRect.width / 2 - ttRect.width / 2;\n    let top = markRect.top - wrapRect.top - ttRect.height - 10;\n    left = Math.max(0, Math.min(left, wrapRect.width - ttRect.width));\n    if (top < 0) {\n      top = markRect.top - wrapRect.top + markRect.height + 10;\n    }\n    el.style.left = left + offsetX + \"px\";\n    el.style.top = top + offsetY + \"px\";\n  }\n  hidePointTooltip() {\n    const el = (\n      /** @type {HTMLElement | null} */\n      this.w.dom.elWrap.querySelector(\".apexcharts-annotation-tooltip\")\n    );\n    if (el) {\n      el.classList.remove(\"apexcharts-active\");\n    }\n  }\n  drawPointAnnotations() {\n    const w2 = this.w;\n    const elg = this.annoCtx.graphics.group({\n      class: \"apexcharts-point-annotations\"\n    });\n    w2.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(w2, { theme = null, timeScale = null } = {}) {\n    this.w = w2;\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 w2 = this.w;\n    if (w2.globals.axisCharts && w2.globals.dataPoints) {\n      const yAnnotations = this.yAxisAnnotations.drawYAxisAnnotations();\n      const xAnnotations = this.xAxisAnnotations.drawXAxisAnnotations();\n      const pointAnnotations = this.pointsAnnotations.drawPointAnnotations();\n      const initialAnim = w2.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 = w2.config.chart.type === \"line\" || w2.config.chart.type === \"area\" || w2.config.chart.type === \"rangeArea\";\n      const skipGroupHide = [progressiveAnnos, false, progressiveAnnos];\n      for (let i2 = 0; i2 < 3; i2++) {\n        w2.dom.elGraphical.add(annoArray[i2]);\n        if (initialAnim && !w2.globals.resized && !w2.globals.dataChanged) {\n          if (w2.config.chart.type !== \"scatter\" && w2.config.chart.type !== \"bubble\" && w2.globals.dataPoints > 1 && !skipGroupHide[i2]) {\n            annoElArray[i2].classList.add(\"apexcharts-element-hidden\");\n          }\n        }\n        w2.globals.delayedElements.push({ el: annoElArray[i2], index: 0 });\n      }\n      this.helpers.annotationsBackground();\n    }\n  }\n  drawImageAnnos() {\n    const w2 = this.w;\n    w2.config.annotations.images.map((s2) => {\n      this.addImage(s2);\n    });\n  }\n  drawTextAnnos() {\n    const w2 = this.w;\n    w2.config.annotations.texts.map((t2) => {\n      this.addText(t2);\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 w2 = 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 || w2.config.chart.fontFamily,\n      foreColor: foreColor || w2.config.chart.foreColor,\n      cssClass: \"apexcharts-text \" + cssClass ? cssClass : \"\"\n    });\n    const parent = w2.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 w2 = 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 = w2.dom.Paper.image(path);\n    img.size(width, height).move(x, y);\n    const parent = w2.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 w2 = me.w;\n    const parent = w2.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 = w2.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      w2.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   * Remove the shared point-annotation hover tooltip node.\n   *\n   * `hidePointTooltip` is wired only to the marker's `mouseleave`; if the marker\n   * is torn down while hovered (clearAnnotations / removeAnnotation / a redraw),\n   * that never fires and the tooltip is left `.apexcharts-active`. A stale active\n   * annotation tooltip then permanently suppresses the series tooltip (see the\n   * guard in Tooltip.drawTooltip added by b1369f5ab). Removing the node clears\n   * both the ghost box and the stale state; it is recreated on the next hover.\n   * @param {any} w\n   */\n  _removeAnnotationTooltip(w2) {\n    const el = w2.dom.elWrap && w2.dom.elWrap.querySelector(\".apexcharts-annotation-tooltip\");\n    if (el && el.parentNode) {\n      el.parentNode.removeChild(el);\n    }\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  clearAnnotations(ctx) {\n    const w2 = ctx.w;\n    this._removeAnnotationTooltip(w2);\n    const annos = w2.dom.baseEl.querySelectorAll(\n      \".apexcharts-yaxis-annotations, .apexcharts-xaxis-annotations, .apexcharts-point-annotations\"\n    );\n    for (let i2 = w2.globals.memory.methodsToExec.length - 1; i2 >= 0; i2--) {\n      if (w2.globals.memory.methodsToExec[i2].label === \"addText\" || w2.globals.memory.methodsToExec[i2].label === \"addAnnotation\") {\n        w2.globals.memory.methodsToExec.splice(i2, 1);\n      }\n    }\n    Array.prototype.forEach.call(annos, (a2) => {\n      while (a2.firstChild) {\n        a2.removeChild(a2.firstChild);\n      }\n    });\n  }\n  /**\n   * @param {import('../../types/internal').ChartContext} ctx\n   * @param {string} id\n   */\n  removeAnnotation(ctx, id) {\n    const w2 = ctx.w;\n    this._removeAnnotationTooltip(w2);\n    const annos = w2.dom.baseEl.querySelectorAll(`.${id}`);\n    if (annos) {\n      w2.globals.memory.methodsToExec.map((m2, i2) => {\n        if (m2.id === id) {\n          w2.globals.memory.methodsToExec.splice(i2, 1);\n        }\n      });\n      Object.keys(w2.config.annotations).forEach((key) => {\n        const annotationArray = w2.config.annotations[key];\n        if (Array.isArray(annotationArray)) {\n          w2.config.annotations[key] = annotationArray.filter((m2) => m2.id !== id);\n        }\n      });\n      Array.prototype.forEach.call(annos, (a2) => {\n        a2.parentElement.removeChild(a2);\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(w2, ctx) {\n    this.w = w2;\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 w2 = this.w;\n    const svgEl = w2.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 w2 = this.w;\n    const svgEl = w2.dom.Paper && w2.dom.Paper.node;\n    this.ctx.events.removeEventListener(\"legendClick\", this._onLegendClick);\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  }\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(e2) {\n    var _a, _b, _c;\n    if (!this._isNavEnabled() || !this.active) return;\n    if (e2.shiftKey && (e2.key === \"ArrowRight\" || e2.key === \"ArrowLeft\") && this._canPan()) {\n      e2.preventDefault();\n      this._panBy(e2.key === \"ArrowRight\" ? 1 : -1);\n      return;\n    }\n    switch (e2.key) {\n      case \"ArrowRight\":\n        e2.preventDefault();\n        this._move(0, 1);\n        break;\n      case \"ArrowLeft\":\n        e2.preventDefault();\n        this._move(0, -1);\n        break;\n      case \"ArrowUp\":\n        e2.preventDefault();\n        this._move(-1, 0);\n        break;\n      case \"ArrowDown\":\n        e2.preventDefault();\n        this._move(1, 0);\n        break;\n      case \"Home\":\n        e2.preventDefault();\n        this.dataPointIndex = 0;\n        this._skipNullForward();\n        this._showCurrentPoint();\n        break;\n      case \"End\":\n        e2.preventDefault();\n        this.dataPointIndex = this._getDataPointCount(this.seriesIndex) - 1;\n        this._skipNullBackward();\n        this._showCurrentPoint();\n        break;\n      case \"Enter\":\n      case \" \":\n        e2.preventDefault();\n        this._fireClick();\n        break;\n      case \"+\":\n      case \"=\":\n        if (this._canZoom()) {\n          e2.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          e2.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          e2.preventDefault();\n          (_c = this.ctx.toolbar) == null ? void 0 : _c.handleZoomReset();\n          this._announce(\"Zoom reset\");\n        }\n        break;\n      case \"Escape\":\n        e2.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 w2 = this.w;\n    return Boolean(\n      w2.globals.axisCharts && w2.config.chart.zoom && w2.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 w2 = this.w;\n    const toolbar = this.ctx.toolbar;\n    if (!toolbar) return;\n    const minX = Number(w2.globals.minX);\n    const maxX = Number(w2.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 w2 = this.w;\n    const wrapAround = w2.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 (!w2.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 w2 = 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(w2.seriesData.series[si])) return;\n    while (attempts < dpCount && w2.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 w2 = 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(w2.seriesData.series[si])) return;\n    while (attempts < dpCount && w2.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: i2, dataPointIndex: j } = this;\n    const w2 = this.w;\n    const ttCtx = w2.globals.tooltip;\n    if (!ttCtx || !ttCtx.ttItems) return;\n    w2.interact.capturedSeriesIndex = i2;\n    w2.interact.capturedDataPointIndex = j;\n    this._applyFocusClass(i2, j);\n    this._showTooltip(\n      i2,\n      j,\n      /** @type {any} */\n      ttCtx\n    );\n  }\n  _hideFocus() {\n    const w2 = this.w;\n    const ttCtx = (\n      /** @type {any} */\n      w2.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 (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.announcements.enabled) {\n        tooltipEl.setAttribute(\"aria-hidden\", \"true\");\n      }\n    }\n    w2.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(i2, j, ttCtx) {\n    const w2 = this.w;\n    const type = w2.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(i2, j, ttCtx);\n    w2.dom.baseEl.classList.add(\"apexcharts-tooltip-active\");\n    tooltipEl.classList.add(\"apexcharts-active\");\n    if (w2.config.chart.accessibility.enabled && w2.config.chart.accessibility.announcements.enabled) {\n      tooltipEl.removeAttribute(\"aria-hidden\");\n    }\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      this._showTooltipNonAxis(i2, j, ttCtx, tooltipEl);\n    } else if (type === \"radialBar\") {\n      this._showTooltipRadialBar(i2, j, ttCtx, tooltipEl);\n    } else if (type === \"heatmap\" || type === \"treemap\") {\n      this._showTooltipHeatTree(i2, j, ttCtx, tooltipEl, type);\n    } else if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      this._showTooltipBar(i2, j, ttCtx);\n    } else {\n      this._showTooltipAxisLine(i2, 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(i2, j, ttCtx) {\n    const w2 = this.w;\n    const type = w2.config.chart.type;\n    let clientX = 0;\n    let clientY = 0;\n    const el = this._getFocusableElement(i2, 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 (w2.globals.pointsArray && w2.globals.pointsArray[i2] && w2.globals.pointsArray[i2][j]) {\n      const pt = w2.globals.pointsArray[i2][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 = w2.dom.Paper && w2.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 (w2.globals.pointsArray && w2.globals.pointsArray[i2] && w2.globals.pointsArray[i2][j]) {\n        const pt = w2.globals.pointsArray[i2][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(i2, j, ttCtx) {\n    var _a, _b, _c, _d;\n    const w2 = this.w;\n    const shared = ttCtx.tConfig.shared && (ttCtx.tooltipUtil.isXoverlap(j) || w2.globals.isBarHorizontal) && ttCtx.tooltipUtil.isInitialSeriesSameLen();\n    const rangeData = (\n      /** @type {any} */\n      (_d = (_c = (_b = (_a = w2.rangeData.seriesRange) == null ? void 0 : _a[i2]) == 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: i2,\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='${i2}']`;\n    const elPath = w2.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 (w2.globals.isBarHorizontal) {\n      const barDomEl = elPath && elPath.node;\n      if (barDomEl) {\n        const wrapRect = w2.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, i2);\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(i2, j, ttCtx) {\n    const w2 = this.w;\n    const type = w2.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: i2,\n      j,\n      shared\n    });\n    const isScatterLike = type === \"scatter\" || type === \"bubble\";\n    const hasVisibleMarkers = w2.globals.markers.largestSize > 0;\n    if (isScatterLike) {\n      this._showScatterBubblePoint(i2, j, ttCtx);\n    } else if (hasVisibleMarkers) {\n      if (shared) {\n        ttCtx.marker.enlargePoints(j);\n      } else {\n        ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i2);\n      }\n    } else if (shared) {\n      ttCtx.tooltipPosition.moveDynamicPointsOnHover(j);\n    } else {\n      ttCtx.tooltipPosition.moveDynamicPointOnHover(j, i2);\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(i2, 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='${i2}']`\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(i2, j, ttCtx, tooltipEl) {\n    const w2 = 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 = w2.dom.baseEl.querySelector(`.apexcharts-pie-area[j='${j}']`);\n    const anchor = ttCtx.getSliceAnchor(sliceEl);\n    if (anchor) {\n      tooltipEl.style.left = anchor.x - ttWidth / 2 + \"px\";\n      tooltipEl.style.top = anchor.y - ttHeight - 10 + \"px\";\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(i2, _j, ttCtx, tooltipEl) {\n    var _a;\n    const w2 = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i: i2,\n      shared: false\n    });\n    const { ttWidth = 0, ttHeight = 0 } = ttCtx.getCachedDimensions();\n    const arcEl = w2.dom.baseEl.querySelector(\n      `.apexcharts-radialbar-series[data\\\\:realIndex='${i2}'] path`\n    );\n    if (arcEl) {\n      const angle = parseFloat((_a = arcEl.getAttribute(\"data:angle\")) != null ? _a : \"\") || 0;\n      const initialAngle = w2.config.plotOptions.radialBar.startAngle || 0;\n      const midAngle = initialAngle + angle / 2;\n      const centerX = w2.layout.gridWidth / 2;\n      const centerY = w2.layout.gridHeight / 2;\n      const radialSize = w2.globals.radialSize || Math.min(w2.layout.gridWidth, w2.layout.gridHeight) / 2;\n      const seriesCount = w2.seriesData.series.length;\n      const trackSize = radialSize / Math.max(seriesCount, 1);\n      const outerRadius = radialSize - i2 * 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 + (w2.layout.translateX || 0);\n      const y = centroid.y + (w2.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(i2, j, ttCtx, tooltipEl, type) {\n    var _a, _b;\n    const w2 = this.w;\n    ttCtx.tooltipLabels.drawSeriesTexts({\n      ttItems: ttCtx.ttItems,\n      i: i2,\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 = w2.dom.baseEl.querySelector(`.${rectClass}[i='${i2}'][j='${j}']`);\n    if (cell) {\n      const wrapRect = w2.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 > w2.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(i2, j) {\n    this._removeFocusClass();\n    const el = this._getFocusableElement(i2, j);\n    if (el) {\n      el.classList.add(\"apexcharts-keyboard-focused\");\n      el.setAttribute(\"role\", \"img\");\n      const label = this._buildPointLabel(i2, 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(i2, j) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    const w2 = this.w;\n    const type = w2.config.chart.type;\n    const seriesNames = w2.seriesData.seriesNames || [];\n    const series = w2.seriesData.series || [];\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      const sliceLabel = (_b = ((_a = w2.labelData) == null ? void 0 : _a.labels) && w2.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[i2] || `Series ${i2 + 1}`;\n      const value = Array.isArray(series) ? series[i2] : \"\";\n      return `${seriesName2}: ${value}`;\n    }\n    const seriesName = seriesNames[i2] || `Series ${i2 + 1}`;\n    const row = Array.isArray(series[i2]) ? series[i2] : [];\n    const rawValue = row[j];\n    let formattedValue = rawValue == null ? \"\" : String(rawValue);\n    const yFormatter = (_d = (_c = w2.formatters) == null ? void 0 : _c.yLabelFormatters) == null ? void 0 : _d[i2];\n    if (typeof yFormatter === \"function\") {\n      try {\n        formattedValue = yFormatter(rawValue, {\n          seriesIndex: i2,\n          dataPointIndex: j,\n          w: w2\n        });\n      } catch (e2) {\n      }\n    }\n    let category = \"\";\n    const categoryLabels = (_e = w2.labelData) == null ? void 0 : _e.categoryLabels;\n    const seriesX = (_g = (_f = w2.seriesData) == null ? void 0 : _f.seriesX) == null ? void 0 : _g[i2];\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 = w2.formatters) == null ? void 0 : _h.xLabelFormatter;\n      if (typeof xFormatter === \"function\") {\n        try {\n          category = String(\n            xFormatter(seriesX[j], { seriesIndex: i2, dataPointIndex: j, w: w2 })\n          );\n        } catch (e2) {\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(i2, j) {\n    const w2 = this.w;\n    const type = w2.config.chart.type;\n    const baseEl = w2.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='${i2}'][j='${j}']`\n      );\n    }\n    if (type === \"treemap\") {\n      return baseEl.querySelector(\n        `.apexcharts-treemap-rect[i='${i2}'][j='${j}']`\n      );\n    }\n    if (type === \"radialBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-radialbar-series[data\\\\:realIndex='${i2}'] path`\n      );\n    }\n    if (type === \"bar\" || type === \"candlestick\" || type === \"boxPlot\" || type === \"violin\" || type === \"rangeBar\") {\n      return baseEl.querySelector(\n        `.apexcharts-series[data\\\\:realIndex='${i2}'] path[j='${j}']`\n      );\n    }\n    const marker = baseEl.querySelector(\n      `.apexcharts-series[data\\\\:realIndex='${i2}'] .apexcharts-marker[rel='${j}']`\n    );\n    return marker || null;\n  }\n  // ─── Click / Enter ────────────────────────────────────────────────────────\n  _fireClick() {\n    const w2 = this.w;\n    const ttCtx = w2.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 w2 = this.w;\n    const type = w2.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return 1;\n    }\n    return w2.seriesData.series.length;\n  }\n  /**\n   * @param {number} si\n   */\n  _getDataPointCount(si) {\n    const w2 = this.w;\n    const type = w2.config.chart.type;\n    if (type === \"pie\" || type === \"donut\" || type === \"polarArea\") {\n      return w2.seriesData.series.length;\n    }\n    const series = w2.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 w2 = this.w;\n    const gl = w2.globals;\n    const si = this.seriesIndex;\n    if (!w2.interact.zoomed) return;\n    const seriesX = w2.seriesData.seriesX && w2.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 w2 = this.w;\n    const gl = w2.globals;\n    const si = this.seriesIndex;\n    const seriesX = w2.seriesData.seriesX && w2.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 w2 = this.w;\n    const gl = w2.globals;\n    if (!w2.interact.zoomed) return true;\n    const seriesX = w2.seriesData.seriesX && w2.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 w2 = this.w;\n    if (!w2.config.chart.accessibility.announcements.enabled) return;\n    const baseEl = w2.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 });\nfunction gridDivideRect(bbox, count) {\n  if (!(count > 0)) return [];\n  if (count === 1) return [__spreadValues({}, bbox)];\n  const horizontal = bbox.width >= bbox.height;\n  const rowExtent = horizontal ? bbox.width : bbox.height;\n  const colExtent = horizontal ? bbox.height : bbox.width;\n  const ratio = colExtent > 0 ? rowExtent / colExtent : count;\n  let rows = Math.max(1, Math.ceil(Math.sqrt(ratio * count)));\n  if (rows > count) rows = count;\n  const baseCols = Math.floor(count / rows);\n  let remainder = count - baseCols * rows;\n  const cells = [];\n  const rowSize = rowExtent / rows;\n  let rowStart = 0;\n  for (let r2 = 0; r2 < rows; r2++) {\n    const cols = baseCols + (remainder > 0 ? 1 : 0);\n    if (remainder > 0) remainder--;\n    const colSize = cols > 0 ? colExtent / cols : 0;\n    for (let c2 = 0; c2 < cols; c2++) {\n      cells.push(\n        horizontal ? {\n          x: bbox.x + rowStart,\n          y: bbox.y + c2 * colSize,\n          width: rowSize,\n          height: colSize\n        } : {\n          x: bbox.x + c2 * colSize,\n          y: bbox.y + rowStart,\n          width: colSize,\n          height: rowSize\n        }\n      );\n    }\n    rowStart += rowSize;\n  }\n  return cells;\n}\nfunction gridDivideShape(bbox, count, intervalsAt) {\n  if (!(count > 0)) return [];\n  const horizontal = bbox.width >= bbox.height;\n  const rowExtent = horizontal ? bbox.width : bbox.height;\n  const colExtent = horizontal ? bbox.height : bbox.width;\n  const minorLo = horizontal ? bbox.y : bbox.x;\n  const minorHi = minorLo + colExtent;\n  const ratio = colExtent > 0 ? rowExtent / colExtent : count;\n  let rows = Math.max(\n    Math.ceil(Math.sqrt(ratio * count)),\n    Math.ceil(rowExtent / 16)\n  );\n  if (!(rows >= 1)) rows = 1;\n  if (rows > count) rows = count;\n  const baseCols = Math.floor(count / rows);\n  let remainder = count - baseCols * rows;\n  const cells = [];\n  const rowSize = rowExtent / rows;\n  let rowStart = horizontal ? bbox.x : bbox.y;\n  for (let r2 = 0; r2 < rows; r2++) {\n    const cols = baseCols + (remainder > 0 ? 1 : 0);\n    if (remainder > 0) remainder--;\n    const spans = [];\n    const raw = intervalsAt(rowStart, rowStart + rowSize, horizontal);\n    if (Array.isArray(raw)) {\n      for (let s2 = 0; s2 < raw.length; s2++) {\n        const iv = raw[s2];\n        if (!iv) continue;\n        const lo = Math.max(minorLo, Math.min(iv[0], iv[1]));\n        const hi = Math.min(minorHi, Math.max(iv[0], iv[1]));\n        if (hi > lo) spans.push([lo, hi]);\n      }\n    }\n    if (!spans.length) spans.push([minorLo, minorHi]);\n    const totalLen = spans.reduce((a2, s2) => a2 + (s2[1] - s2[0]), 0);\n    const exact = spans.map(\n      (s2) => totalLen > 0 ? (s2[1] - s2[0]) / totalLen * cols : cols / spans.length\n    );\n    const share = exact.map((v2) => Math.floor(v2));\n    let used = share.reduce((a2, b2) => a2 + b2, 0);\n    const byFrac = exact.map((v2, i2) => ({ i: i2, frac: v2 - Math.floor(v2) })).sort((a2, b2) => b2.frac - a2.frac);\n    for (let k = 0; used < cols; k++, used++) {\n      share[byFrac[k % byFrac.length].i]++;\n    }\n    for (let s2 = 0; s2 < spans.length; s2++) {\n      const n2 = share[s2];\n      if (n2 <= 0) continue;\n      const lo = spans[s2][0];\n      const colSize = (spans[s2][1] - lo) / n2;\n      for (let c2 = 0; c2 < n2; c2++) {\n        cells.push(\n          horizontal ? { x: rowStart, y: lo + c2 * colSize, width: rowSize, height: colSize } : { x: lo + c2 * colSize, y: rowStart, width: colSize, height: rowSize }\n        );\n      }\n    }\n    rowStart += rowSize;\n  }\n  return cells;\n}\nfunction hilbertIndex(x, y, minX, minY, maxX, maxY) {\n  let ix = maxX === minX ? 0 : Math.round(32767 * ((x - minX) / (maxX - minX)));\n  let iy = maxY === minY ? 0 : Math.round(32767 * ((y - minY) / (maxY - minY)));\n  let d = 0;\n  for (let s2 = 32768; s2 >= 1; s2 /= 2) {\n    const rx = (ix & s2) > 0 ? 1 : 0;\n    const ry = (iy & s2) > 0 ? 1 : 0;\n    d += s2 * s2 * (3 * rx ^ ry);\n    if (ry === 0) {\n      if (rx === 1) {\n        ix = s2 - 1 - ix;\n        iy = s2 - 1 - iy;\n      }\n      const t2 = ix;\n      ix = iy;\n      iy = t2;\n    }\n  }\n  return d;\n}\nfunction sortByHilbert(items, getXY) {\n  let minX = Infinity;\n  let minY = Infinity;\n  let maxX = -Infinity;\n  let maxY = -Infinity;\n  const pts = items.map((it) => {\n    const [x, y] = getXY(it);\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    return [x, y];\n  });\n  return items.map((item, k) => ({\n    item,\n    d: hilbertIndex(pts[k][0], pts[k][1], minX, minY, maxX, maxY)\n  })).sort((a2, b2) => a2.d - b2.d).map((e2) => e2.item);\n}\nfunction parseColor(str) {\n  if (!str || typeof str !== \"string\") return null;\n  const s2 = str.trim();\n  if (s2[0] === \"#\") {\n    const hex = s2.slice(1);\n    if (hex.length === 3) {\n      return [\n        parseInt(hex[0] + hex[0], 16),\n        parseInt(hex[1] + hex[1], 16),\n        parseInt(hex[2] + hex[2], 16),\n        1\n      ];\n    }\n    if (hex.length === 6 || hex.length === 8) {\n      return [\n        parseInt(hex.slice(0, 2), 16),\n        parseInt(hex.slice(2, 4), 16),\n        parseInt(hex.slice(4, 6), 16),\n        hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1\n      ];\n    }\n    return null;\n  }\n  const m2 = s2.match(/^rgba?\\(([^)]+)\\)$/i);\n  if (m2) {\n    const parts = m2[1].split(\",\").map((p2) => parseFloat(p2));\n    if (parts.length < 3 || parts.some((v2) => !isFinite(v2))) return null;\n    return [parts[0], parts[1], parts[2], parts.length > 3 ? parts[3] : 1];\n  }\n  return null;\n}\nfunction makeColorLerp(from, to) {\n  const a2 = parseColor(from);\n  const b2 = parseColor(to);\n  if (!a2 || !b2) return null;\n  return (t2) => {\n    const r2 = Math.round(a2[0] + (b2[0] - a2[0]) * t2);\n    const g2 = Math.round(a2[1] + (b2[1] - a2[1]) * t2);\n    const bl = Math.round(a2[2] + (b2[2] - a2[2]) * t2);\n    const al = a2[3] + (b2[3] - a2[3]) * t2;\n    return al >= 1 ? `rgb(${r2},${g2},${bl})` : `rgba(${r2},${g2},${bl},${al})`;\n  };\n}\nfunction easeInOutCubic$1(t2) {\n  return t2 < 0.5 ? 4 * t2 * t2 * t2 : 1 - Math.pow(-2 * t2 + 2, 3) / 2;\n}\nfunction runPieceTween({ pieces, duration, onPieceDone, onAllDone }) {\n  let cancelled = false;\n  const start = Date.now();\n  const dur = Math.max(1, duration);\n  const write = (p2, e2) => {\n    const f = p2.from;\n    const t2 = p2.to;\n    const el = p2.el;\n    el.setAttribute(\"x\", String(f.x + (t2.x - f.x) * e2));\n    el.setAttribute(\"y\", String(f.y + (t2.y - f.y) * e2));\n    el.setAttribute(\"width\", String(Math.max(0, f.width + (t2.width - f.width) * e2)));\n    el.setAttribute(\"height\", String(Math.max(0, f.height + (t2.height - f.height) * e2)));\n    el.setAttribute(\"rx\", String(Math.max(0, f.rx + (t2.rx - f.rx) * e2)));\n    if (p2.fill) el.setAttribute(\"fill\", p2.fill(e2));\n    else if (e2 >= 1 && p2.fillEnd) el.setAttribute(\"fill\", p2.fillEnd);\n  };\n  const frame = () => {\n    if (cancelled) return;\n    const elapsed = Date.now() - start;\n    let live = false;\n    for (let k = 0; k < pieces.length; k++) {\n      const p2 = pieces[k];\n      if (\n        /** @type {any} */\n        p2._done\n      ) continue;\n      const raw = (elapsed - p2.delay) / dur;\n      if (raw < 1) live = true;\n      if (raw <= 0) continue;\n      const t2 = Math.min(1, raw);\n      write(p2, easeInOutCubic$1(t2));\n      if (t2 >= 1) {\n        p2._done = true;\n        if (onPieceDone) onPieceDone(p2);\n      }\n    }\n    if (live) BrowserAPIs.requestAnimationFrame(frame);\n    else if (onAllDone) onAllDone();\n  };\n  BrowserAPIs.requestAnimationFrame(frame);\n  return () => {\n    cancelled = true;\n  };\n}\nconst BAR_FAMILY = /* @__PURE__ */ new Set([\"bar\", \"funnel\", \"pyramid\", \"histogram\"]);\nconst RADIAL_FAMILY = /* @__PURE__ */ new Set([\"pie\", \"donut\", \"polarArea\", \"radialBar\", \"gauge\"]);\nconst UNIT_FAMILY = /* @__PURE__ */ new Set([\"unit\", \"waffle\"]);\nconst PARTITION_FAMILY = /* @__PURE__ */ new Set([\"treemap\", \"sunburst\"]);\nconst SUMMARY_FAMILY = /* @__PURE__ */ new Set([\"boxPlot\", \"violin\"]);\nconst GHOST_FADE_FRACTION = 0.55;\nconst PIECE_BUDGET = 1500;\nconst PIECE_STAGGER_MAX = 300;\nfunction familyOf(type) {\n  if (BAR_FAMILY.has(type)) return \"bar\";\n  if (RADIAL_FAMILY.has(type)) return \"radial\";\n  if (UNIT_FAMILY.has(type)) return \"unit\";\n  if (PARTITION_FAMILY.has(type)) return \"partition\";\n  if (SUMMARY_FAMILY.has(type)) return \"summary\";\n  return null;\n}\nclass MorphTypeChange {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this._snapshot = null;\n    this._ghost = null;\n    this._pieceLayer = null;\n    this._pieceCancel = 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    if (ff === \"partition\" !== (tf === \"partition\")) {\n      return ff !== \"unit\" && tf !== \"unit\";\n    }\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 === \"unit\") {\n      if (newSeries.every((v2) => typeof v2 === \"number\")) return true;\n      return newSeries.every(\n        (s2) => s2 && typeof s2 === \"object\" && Array.isArray(s2.data)\n      );\n    }\n    if (tf === \"partition\") {\n      return true;\n    }\n    if (tf === \"radial\") {\n      if (newSeries.every((v2) => typeof v2 === \"number\")) return true;\n      return newSeries.length === 1 && newSeries[0] && typeof newSeries[0] === \"object\" && Array.isArray(newSeries[0].data);\n    }\n    if (tf === \"bar\" || tf === \"summary\") {\n      return newSeries.every(\n        (s2) => s2 && typeof s2 === \"object\" && Array.isArray(s2.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    this._removeGhost();\n    this._cancelPieces();\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 { marks, branches, unitDots } = this._captureFromDOM(fromType);\n    if (!marks.length) return false;\n    const mapping = this._buildMapping(\n      marks,\n      fromType,\n      toType,\n      newSeries,\n      branches\n    );\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    const ff = familyOf(fromType);\n    const tf = familyOf(toType);\n    const canShape = this._canProbePaths();\n    const pieceFamilies = ff === \"bar\" || ff === \"summary\" || ff === \"radial\" && canShape;\n    if (tf === \"unit\" && pieceFamilies) {\n      const total = this._countUnitSeries(newSeries);\n      this._snapshot.pieceOut = total > 0 && total <= PIECE_BUDGET;\n    } else if (ff === \"unit\" && (tf === \"bar\" || tf === \"summary\" || tf === \"radial\" && canShape)) {\n      let total = 0;\n      unitDots.forEach((list) => {\n        total += list.length;\n      });\n      if (total > 0 && total <= PIECE_BUDGET) {\n        this._snapshot.pieceIn = true;\n        this._snapshot.sourceDots = unitDots;\n        const keyOrder = [];\n        if (tf === \"radial\") {\n          (Array.isArray(newSeries) ? newSeries : []).forEach(\n            (_v, i2) => {\n              keyOrder.push(`${i2}:0`);\n            }\n          );\n        } else {\n          (Array.isArray(newSeries) ? newSeries : []).forEach(\n            (s2, seriesIdx) => {\n              const data = s2 && Array.isArray(s2.data) ? s2.data : [];\n              for (let j = 0; j < data.length; j++) {\n                keyOrder.push(`${seriesIdx}:${j}`);\n              }\n            }\n          );\n        }\n        this._snapshot.keyOrder = keyOrder;\n      }\n    }\n    if (this._needsGhost(fromType, toType) && !this._snapshot.pieceOut && !this._snapshot.pieceIn) {\n      this._captureGhost();\n    }\n    this.w.globals.previousPaths = [];\n    return true;\n  }\n  /**\n   * Whether the outgoing marks need an exit animation of their own.\n   *\n   * Most pairs do not. bar → pie hands every wedge the exact `d` of the bar it\n   * replaces, and treemap → sunburst does the same for its tiles: the outgoing\n   * mark IS the incoming mark's first frame, so it never needs to leave, and\n   * drawing a copy of it would only double the image at t=0.\n   *\n   * The unit pairs are the exception, in both directions, because the\n   * correspondence is not 1:1. Going in, one bar becomes N dots, so the bar has\n   * no successor to become. Coming out, N dots become one bar: the bar does\n   * grow from the cloud's footprint, but no individual dot has anywhere to go.\n   * Either way something on screen simply stops existing, which is exactly the\n   * hard cut that made these pairs read as \"the old chart vanished and the new\n   * one animated\" rather than as a morph.\n   *\n   * @param {string} fromType\n   * @param {string} toType\n   * @returns {boolean}\n   */\n  _needsGhost(fromType, toType) {\n    return familyOf(fromType) === \"unit\" || familyOf(toType) === \"unit\";\n  }\n  /**\n   * Take a detached copy of the outgoing chart's marks, to be mounted over the\n   * incoming chart once it exists (see `_mountGhost`).\n   *\n   * The whole `<svg>` is cloned and the chrome then removed from the copy,\n   * rather than lifting the series groups out on their own: every mark's\n   * position depends on the transforms of the groups above it, and cloning\n   * from the root is what keeps those intact without re-deriving any geometry.\n   *\n   * The chrome is dropped because `applyChromeFade` already fades the incoming\n   * axes, grid and legend in from zero. Keeping the outgoing set as well would\n   * put two sets of axis labels on screen at half opacity each.\n   */\n  _captureGhost() {\n    var _a, _b;\n    const paper = (_a = this.w.dom) == null ? void 0 : _a.Paper;\n    const node = paper && paper.node;\n    if (!node || typeof node.cloneNode !== \"function\") return;\n    const clone = node.cloneNode(true);\n    const drop = [\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      \".apexcharts-annotations\",\n      \".apexcharts-zoom-rect\",\n      \".apexcharts-selection-rect\",\n      \".apexcharts-xcrosshairs\",\n      \".apexcharts-ycrosshairs\"\n    ];\n    if (typeof clone.querySelectorAll === \"function\") {\n      drop.forEach((sel) => {\n        clone.querySelectorAll(sel).forEach((el) => {\n          if (el.parentNode) el.parentNode.removeChild(el);\n        });\n      });\n    }\n    if (typeof clone.querySelectorAll === \"function\") {\n      clone.querySelectorAll(\"[id]\").forEach((el) => {\n        el.removeAttribute(\"id\");\n      });\n    }\n    (_b = clone.removeAttribute) == null ? void 0 : _b.call(clone, \"id\");\n    this._ghost = clone;\n  }\n  /**\n   * Mount the captured copy over the newly-rendered chart and fade it out.\n   *\n   * It goes ON TOP of the live svg, which is what makes both directions read\n   * as one motion rather than as a swap. Going into a unit chart the bars\n   * dissolve and the dots are uncovered already in flight, having left from\n   * inside the bar that held them. Coming out of one, the dots are still there\n   * to fade while the bar grows underneath them; behind the incoming mark they\n   * would be hidden on the first frame, because that mark starts out exactly\n   * the size of the cloud it is replacing.\n   *\n   * The fade runs over a fraction of the morph so the outgoing marks are gone\n   * before the incoming ones settle. Holding them for the full duration leaves\n   * two charts overlapping right at the moment the eye is reading the final\n   * shape, which looks like a rendering fault rather than a transition.\n   */\n  _mountGhost() {\n    var _a, _b, _c;\n    const ghost = this._ghost;\n    if (!ghost || !Environment.isBrowser()) return;\n    const wrap = (_a = this.w.dom) == null ? void 0 : _a.elWrap;\n    if (!wrap || typeof wrap.appendChild !== \"function\") {\n      this._ghost = null;\n      return;\n    }\n    const style = ghost.style;\n    if (style) {\n      style.position = \"absolute\";\n      style.left = \"0\";\n      style.top = \"0\";\n      style.background = \"transparent\";\n      style.pointerEvents = \"none\";\n      style.opacity = \"1\";\n    }\n    (_b = ghost.setAttribute) == null ? void 0 : _b.call(ghost, \"aria-hidden\", \"true\");\n    (_c = ghost.setAttribute) == null ? void 0 : _c.call(ghost, \"class\", \"apexcharts-morph-ghost\");\n    wrap.appendChild(ghost);\n    const speed = this.getSpeed();\n    const fade = Math.max(120, Math.round(speed * GHOST_FADE_FRACTION));\n    BrowserAPIs.requestAnimationFrame(() => {\n      if (!style) return;\n      style.transition = `opacity ${fade}ms ease-in`;\n      style.opacity = \"0\";\n    });\n    setTimeout(() => this._removeGhost(), fade + 60);\n  }\n  /** Detach the ghost if one is mounted. Safe to call at any time. */\n  _removeGhost() {\n    const ghost = this._ghost;\n    this._ghost = null;\n    if (ghost && ghost.parentNode) ghost.parentNode.removeChild(ghost);\n  }\n  /* ------------------------------------------------------------------ *\n   * The piece layer (see MorphPieces for the geometry).\n   * ------------------------------------------------------------------ */\n  /**\n   * Object count of an incoming unit series: one datum per dot in the object\n   * form. The numeric form ([3, 5]) scales values by `plotOptions.unit\n   * .unitValue`, which is not resolvable pre-merge, so it counts as zero and\n   * keeps the burst-and-ghost behaviour.\n   *\n   * @param {any} newSeries\n   * @returns {number}\n   */\n  _countUnitSeries(newSeries) {\n    if (!Array.isArray(newSeries)) return 0;\n    let total = 0;\n    for (const s2 of newSeries) {\n      if (!s2 || typeof s2 !== \"object\" || !Array.isArray(s2.data)) return 0;\n      total += s2.data.length;\n    }\n    return total;\n  }\n  /**\n   * Whether the incoming unit chart should hold its dots for the piece layer:\n   * render them at their final slots, hidden, and let the pieces do the\n   * flying. The reveal happens per dot as its piece lands.\n   *\n   * Consulted by the unit renderer during its draw, which runs after\n   * `captureBeforeDestroy` and before `applyChromeFade`, so the decision was\n   * already made from the same series the renderer is now drawing.\n   *\n   * @returns {boolean}\n   */\n  usesPieceTakeover() {\n    return !!(this._snapshot && this._snapshot.pieceOut);\n  }\n  /**\n   * Whether the piece layer claims the incoming mark at (realIndex, j): a\n   * source cluster's dots will fly to it and tile it, so it must render\n   * hidden and reveal only when its mosaic is complete. Consulted by the bar\n   * renderer (boxPlot and violin render through it).\n   *\n   * @param {number|string} realIndex\n   * @param {number|string} j\n   * @returns {boolean}\n   */\n  claimsTargetMark(realIndex, j) {\n    return !!(this._snapshot && this._snapshot.pieceIn && this._snapshot.mapping.has(`${realIndex}:${j}`));\n  }\n  /**\n   * Create the overlay group the pieces are driven in. It lives INSIDE the\n   * new chart's elGraphical so every coordinate matches the marks' own local\n   * space, and it never takes a pointer event.\n   * @returns {any} the <g> node, or null\n   */\n  _makePieceLayer() {\n    var _a, _b;\n    const graph = (_a = this.w.dom) == null ? void 0 : _a.elGraphical;\n    const host = graph && graph.node;\n    if (!host || typeof host.appendChild !== \"function\") return null;\n    const g2 = BrowserAPIs.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n    if (!g2) return null;\n    g2.setAttribute(\"class\", \"apexcharts-morph-pieces\");\n    g2.setAttribute(\"pointer-events\", \"none\");\n    const cuid = (_b = this.w.globals) == null ? void 0 : _b.cuid;\n    if (cuid) g2.setAttribute(\"clip-path\", `url(#gridRectBarMask${cuid})`);\n    host.appendChild(g2);\n    this._pieceLayer = g2;\n    return g2;\n  }\n  /**\n   * Reveal everything a piece takeover hid, whether or not the pieces ran.\n   * The attribute is plain (no namespace colon) so it stays selectable\n   * everywhere.\n   */\n  _revealPieceHidden() {\n    var _a;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!baseEl || typeof baseEl.querySelectorAll !== \"function\") return;\n    baseEl.querySelectorAll(\"[data-piece-hidden]\").forEach(\n      (el) => {\n        el.removeAttribute(\"opacity\");\n        el.removeAttribute(\"data-piece-hidden\");\n      }\n    );\n  }\n  /** Stop the piece run, drop the overlay, and reveal anything still hidden. */\n  _cancelPieces() {\n    if (this._pieceCancel) {\n      this._pieceCancel();\n      this._pieceCancel = null;\n    }\n    const layer = this._pieceLayer;\n    this._pieceLayer = null;\n    if (layer && layer.parentNode) layer.parentNode.removeChild(layer);\n    this._revealPieceHidden();\n  }\n  /**\n   * Whether this environment can hit-test path geometry at all. Decided\n   * before the ghost clone is taken, because a family whose cells are only\n   * honest when probed (radial) must keep the fade rather than fall back to a\n   * rectangular grid it cannot justify. jsdom answers no.\n   * @returns {boolean}\n   */\n  _canProbePaths() {\n    if (!Environment.isBrowser()) return false;\n    const probe = BrowserAPIs.createElementNS(\n      \"http://www.w3.org/2000/svg\",\n      \"path\"\n    );\n    return !!probe && typeof /** @type {any} */\n    probe.isPointInFill === \"function\";\n  }\n  /**\n   * A per-band ink prober over a mark's path, for gridDivideShape: given a\n   * major-axis band it measures where the mark actually has ink across the\n   * minor axis, so a violin's cells follow its density outline, a boxPlot's\n   * whisker rows collapse to slivers, and a wedge's rows stop at the wedge\n   * instead of spanning the bounding box (which stamped a rectangle over the\n   * mark at frame one).\n   *\n   * The probe path is mounted (hidden) inside the piece layer so its user\n   * space is exactly the space the cells are laid out in. The stroke test\n   * catches zero-area subpaths (a boxPlot's whisker line has no fill to\n   * hit), and its width is what a whisker's slivers will measure.\n   *\n   * Returns null when the environment cannot hit-test path geometry (jsdom);\n   * the caller then keeps the plain grid.\n   *\n   * @param {string} d - path data, in piece-layer coordinates\n   * @param {{x:number,y:number,width:number,height:number}} bbox\n   * @param {any} layer - the mounted piece layer\n   * @returns {{ intervalsAt: (bandLo: number, bandHi: number, horizontal: boolean) => Array<[number, number]> | null, dispose: () => void } | null}\n   */\n  _makeExtentProber(d, bbox, layer) {\n    const doc = layer.ownerDocument;\n    const probe = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n    probe.setAttribute(\"d\", d);\n    probe.setAttribute(\"fill\", \"#000\");\n    probe.setAttribute(\"stroke\", \"#000\");\n    probe.setAttribute(\"stroke-width\", \"3\");\n    probe.setAttribute(\"visibility\", \"hidden\");\n    layer.appendChild(probe);\n    const svg = probe.ownerSVGElement;\n    if (typeof /** @type {any} */\n    probe.isPointInFill !== \"function\" || !svg || typeof svg.createSVGPoint !== \"function\") {\n      layer.removeChild(probe);\n      return null;\n    }\n    const pt = svg.createSVGPoint();\n    const hit = (x, y) => {\n      pt.x = x;\n      pt.y = y;\n      const p2 = (\n        /** @type {any} */\n        probe\n      );\n      return p2.isPointInFill(pt) || typeof p2.isPointInStroke === \"function\" && p2.isPointInStroke(pt);\n    };\n    const SCAN = 48;\n    const intervalsAt = (bandLo, bandHi, horizontal) => {\n      const lo = horizontal ? bbox.y : bbox.x;\n      const hi = lo + (horizontal ? bbox.height : bbox.width);\n      if (!(hi > lo)) return null;\n      const at = (v2, major) => horizontal ? hit(major, v2) : hit(v2, major);\n      const majors = [\n        bandLo + (bandHi - bandLo) * 0.1,\n        (bandLo + bandHi) / 2,\n        bandHi - (bandHi - bandLo) * 0.1\n      ];\n      const edge = (inside, outside, major) => {\n        let a2 = outside;\n        let b2 = inside;\n        for (let it = 0; it < 6; it++) {\n          const m2 = (a2 + b2) / 2;\n          if (at(m2, major)) b2 = m2;\n          else a2 = m2;\n        }\n        return (a2 + b2) / 2;\n      };\n      const step = (hi - lo) / SCAN;\n      const proof = new Array(SCAN + 1).fill(null);\n      let any = false;\n      for (const major of majors) {\n        for (let s2 = 0; s2 <= SCAN; s2++) {\n          if (proof[s2] !== null) continue;\n          if (at(lo + s2 * step, major)) {\n            proof[s2] = major;\n            any = true;\n          }\n        }\n      }\n      if (!any) return null;\n      const out = [];\n      let runStart = -1;\n      for (let s2 = 0; s2 <= SCAN + 1; s2++) {\n        const inside = s2 <= SCAN && proof[s2] !== null;\n        if (inside && runStart < 0) runStart = s2;\n        if (!inside && runStart >= 0) {\n          const last = s2 - 1;\n          const major = (\n            /** @type {number} */\n            proof[runStart]\n          );\n          const left = runStart === 0 ? lo : edge(lo + runStart * step, lo + (runStart - 1) * step, major);\n          const right = last === SCAN ? hi : edge(\n            lo + last * step,\n            lo + (last + 1) * step,\n            /** @type {number} */\n            proof[last]\n          );\n          if (right > left) out.push([left, right]);\n          runStart = -1;\n        }\n      }\n      return out.length ? out : null;\n    };\n    return {\n      intervalsAt,\n      dispose: () => {\n        if (probe.parentNode) probe.parentNode.removeChild(probe);\n      }\n    };\n  }\n  /**\n   * mark -> objects. Cut each captured mark into one cell per dot and fly\n   * every cell to its dot, corners rounding off and fill blending on the way.\n   * The real dots (rendered hidden by the unit chart, see usesPieceTakeover)\n   * are revealed one by one as their piece lands, so the handoff is\n   * geometrically exact and nothing ever fades.\n   */\n  _separatePieces() {\n    var _a;\n    const snap = this._snapshot;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!snap || !baseEl) return this._revealPieceHidden();\n    const byCluster = /* @__PURE__ */ new Map();\n    let total = 0;\n    baseEl.querySelectorAll(\".apexcharts-unit-area\").forEach((dot) => {\n      var _a2, _b, _c, _d, _e, _f, _g;\n      const i2 = parseInt((_a2 = dot.getAttribute(\"i\")) != null ? _a2 : \"\", 10);\n      if (isNaN(i2)) return;\n      const cxAttr = dot.getAttribute(\"cx\");\n      let x;\n      let y;\n      let r2 = 3;\n      if (cxAttr != null) {\n        x = parseFloat(cxAttr);\n        y = parseFloat((_b = dot.getAttribute(\"cy\")) != null ? _b : \"\");\n        r2 = parseFloat((_c = dot.getAttribute(\"r\")) != null ? _c : \"3\") || 3;\n      } else {\n        const wAttr = parseFloat((_d = dot.getAttribute(\"width\")) != null ? _d : \"0\") || 0;\n        const hAttr = parseFloat((_e = dot.getAttribute(\"height\")) != null ? _e : \"0\") || 0;\n        x = parseFloat((_f = dot.getAttribute(\"x\")) != null ? _f : \"\") + wAttr / 2;\n        y = parseFloat((_g = dot.getAttribute(\"y\")) != null ? _g : \"\") + hAttr / 2;\n        r2 = Math.max(wAttr, hAttr) / 2 || 3;\n      }\n      if (!isFinite(x) || !isFinite(y)) return;\n      let list = byCluster.get(i2);\n      if (!list) {\n        list = [];\n        byCluster.set(i2, list);\n      }\n      list.push({ el: dot, x, y, r: r2, fill: dot.getAttribute(\"fill\") });\n      total++;\n    });\n    if (total === 0 || total > PIECE_BUDGET) return this._revealPieceHidden();\n    const layer = this._makePieceLayer();\n    if (!layer) return this._revealPieceHidden();\n    const pieces = [];\n    const doc = layer.ownerDocument;\n    const sourceFam = familyOf(snap.fromType);\n    const shapedSource = sourceFam === \"summary\" || sourceFam === \"radial\";\n    Array.from(byCluster.keys()).sort((a2, b2) => a2 - b2).forEach((i2) => {\n      var _a2;\n      const dots = (\n        /** @type {any[]} */\n        byCluster.get(i2)\n      );\n      const box = this.getInitialBBoxFor(i2);\n      const entry = snap.mapping.get(`${i2}:0`);\n      if (!box || !entry) {\n        dots.forEach((d) => {\n          d.el.removeAttribute(\"opacity\");\n          d.el.removeAttribute(\"data-piece-hidden\");\n        });\n        return;\n      }\n      const markFill = entry.fill && entry.fill.indexOf(\"url(\") !== 0 ? entry.fill : ((_a2 = this.w.globals.colors) == null ? void 0 : _a2[i2]) || dots[0].fill;\n      let prober = null;\n      if (shapedSource) {\n        const shifted = this.getInitialPathFor(i2, 0);\n        if (shifted) prober = this._makeExtentProber(shifted, box, layer);\n      }\n      const divided = prober ? gridDivideShape(box, dots.length, prober.intervalsAt) : gridDivideRect(box, dots.length);\n      if (prober) prober.dispose();\n      const cells = sortByHilbert(divided, (c2) => [\n        c2.x + c2.width / 2,\n        c2.y + c2.height / 2\n      ]);\n      const ordered = sortByHilbert(dots, (d) => [d.x, d.y]);\n      for (let k = 0; k < ordered.length; k++) {\n        const cell = cells[k];\n        const dot = ordered[k];\n        const el = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        el.setAttribute(\"data-i\", String(i2));\n        el.setAttribute(\"x\", String(cell.x));\n        el.setAttribute(\"y\", String(cell.y));\n        el.setAttribute(\"width\", String(cell.width));\n        el.setAttribute(\"height\", String(cell.height));\n        el.setAttribute(\"rx\", \"0\");\n        el.setAttribute(\"fill\", String(markFill));\n        layer.appendChild(el);\n        pieces.push({\n          el,\n          from: { x: cell.x, y: cell.y, width: cell.width, height: cell.height, rx: 0 },\n          to: {\n            x: dot.x - dot.r,\n            y: dot.y - dot.r,\n            width: dot.r * 2,\n            height: dot.r * 2,\n            rx: dot.r\n          },\n          fill: makeColorLerp(markFill, dot.fill),\n          fillEnd: dot.fill,\n          delay: 0,\n          meta: { dotEl: dot.el }\n        });\n      }\n    });\n    if (!pieces.length) return this._cancelPieces();\n    this._runPieces(pieces, (piece) => {\n      const dotEl = piece.meta.dotEl;\n      dotEl.removeAttribute(\"opacity\");\n      dotEl.removeAttribute(\"data-piece-hidden\");\n      if (piece.el.parentNode) piece.el.parentNode.removeChild(piece.el);\n    });\n  }\n  /**\n   * objects -> mark. Each captured outgoing dot flies to one cell of the\n   * incoming mark, squaring off and blending towards the mark's fill; the\n   * mark itself (rendered hidden, see claimsTargetMark) is revealed the\n   * moment its last piece lands and the mosaic is complete, which is also the\n   * moment the seams disappear.\n   */\n  _combinePieces() {\n    var _a, _b;\n    const snap = this._snapshot;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    if (!snap || !snap.sourceDots || !snap.keyOrder || !baseEl) {\n      return this._revealPieceHidden();\n    }\n    const targets = this._collectTargetMarks(snap.toType);\n    if (!targets.size) return this._revealPieceHidden();\n    const dx = snap.oldLayout.translateX - (this.w.layout.translateX || 0);\n    const dy = snap.oldLayout.translateY - (this.w.layout.translateY || 0);\n    const clusterIdx = Array.from(snap.sourceDots.keys()).sort((a2, b2) => a2 - b2);\n    const layer = this._makePieceLayer();\n    if (!layer) return this._revealPieceHidden();\n    const doc = layer.ownerDocument;\n    const pieces = [];\n    const targetFam = familyOf(snap.toType);\n    const shapedTarget = targetFam === \"summary\" || targetFam === \"radial\";\n    for (let k = 0; k < clusterIdx.length; k++) {\n      const dots = (\n        /** @type {any[]} */\n        snap.sourceDots.get(clusterIdx[k])\n      );\n      const key = snap.keyOrder[k];\n      const target = key ? targets.get(key) : null;\n      if (!target || !dots || !dots.length) {\n        if (target) {\n          target.els.forEach((el) => {\n            el.removeAttribute(\"opacity\");\n            el.removeAttribute(\"data-piece-hidden\");\n          });\n        }\n        continue;\n      }\n      const markFill = target.fill && target.fill.indexOf(\"url(\") !== 0 ? target.fill : ((_b = this.w.globals.colors) == null ? void 0 : _b[target.realIndex]) || dots[0].fill;\n      let prober = null;\n      if (shapedTarget) {\n        const d = target.d || target.els.map(\n          (p2) => p2.getAttribute(\"pathTo\") || p2.getAttribute(\"d\")\n        ).filter(Boolean).join(\" \");\n        if (d) prober = this._makeExtentProber(d, target.bbox, layer);\n      }\n      const divided = prober ? gridDivideShape(target.bbox, dots.length, prober.intervalsAt) : gridDivideRect(target.bbox, dots.length);\n      if (prober) prober.dispose();\n      const cells = sortByHilbert(divided, (c2) => [\n        c2.x + c2.width / 2,\n        c2.y + c2.height / 2\n      ]);\n      const ordered = sortByHilbert(dots, (d) => [d.x, d.y]);\n      const markState = { remaining: ordered.length, els: target.els, tiles: (\n        /** @type {any[]} */\n        []\n      ) };\n      for (let m2 = 0; m2 < ordered.length; m2++) {\n        const dot = ordered[m2];\n        const cell = cells[m2];\n        const el = doc.createElementNS(\"http://www.w3.org/2000/svg\", \"rect\");\n        const fx = dot.x + dx - dot.r;\n        const fy = dot.y + dy - dot.r;\n        el.setAttribute(\"data-key\", key);\n        el.setAttribute(\"x\", String(fx));\n        el.setAttribute(\"y\", String(fy));\n        el.setAttribute(\"width\", String(dot.r * 2));\n        el.setAttribute(\"height\", String(dot.r * 2));\n        el.setAttribute(\"rx\", String(dot.r));\n        el.setAttribute(\"fill\", String(dot.fill || markFill));\n        layer.appendChild(el);\n        markState.tiles.push(el);\n        pieces.push({\n          el,\n          from: { x: fx, y: fy, width: dot.r * 2, height: dot.r * 2, rx: dot.r },\n          to: { x: cell.x, y: cell.y, width: cell.width, height: cell.height, rx: 0 },\n          fill: makeColorLerp(dot.fill, markFill),\n          fillEnd: String(markFill),\n          delay: 0,\n          meta: { markState }\n        });\n      }\n    }\n    if (!pieces.length) return this._cancelPieces();\n    this._runPieces(pieces, (piece) => {\n      const state = piece.meta.markState;\n      state.remaining--;\n      if (state.remaining === 0) {\n        state.els.forEach((el) => {\n          el.removeAttribute(\"opacity\");\n          el.removeAttribute(\"data-piece-hidden\");\n        });\n        state.tiles.forEach((t2) => {\n          if (t2.parentNode) t2.parentNode.removeChild(t2);\n        });\n      }\n    });\n  }\n  /**\n   * Stagger and start a piece run. Delays sweep the (already spatially\n   * sorted) list front to back, and the last piece still lands within the\n   * configured morph speed.\n   *\n   * @param {import('./MorphPieces').Piece[]} pieces\n   * @param {(piece: import('./MorphPieces').Piece) => void} onPieceDone\n   */\n  _runPieces(pieces, onPieceDone) {\n    const speed = this.getSpeed();\n    const stagger = Math.min(PIECE_STAGGER_MAX, speed * 0.35);\n    const flight = Math.max(180, speed - stagger);\n    for (let k = 0; k < pieces.length; k++) {\n      pieces[k].delay = pieces.length > 1 ? k / (pieces.length - 1) * stagger : 0;\n    }\n    this._pieceCancel = runPieceTween({\n      pieces,\n      duration: flight,\n      onPieceDone,\n      onAllDone: () => {\n        this._pieceCancel = null;\n        this._cancelPieces();\n      }\n    });\n  }\n  /**\n   * The incoming chart's marks, read live: every `path[pathTo]` grouped into\n   * one mark per (realIndex, j), with the union bbox of its final geometry.\n   * Bar marks are one path each; summary marks (boxPlot, violin) may be\n   * several, walked exactly like the capture branch walks the outgoing ones.\n   *\n   * @param {string} toType\n   * @returns {Map<string, { realIndex: number, j: number, bbox: {x:number,y:number,width:number,height:number}, fill: string|null, els: any[], d?: string }>}\n   */\n  _collectTargetMarks(toType) {\n    var _a;\n    const baseEl = (_a = this.w.globals.dom) == null ? void 0 : _a.baseEl;\n    const out = /* @__PURE__ */ new Map();\n    if (!baseEl) return out;\n    const fam = familyOf(toType);\n    if (fam === \"radial\") {\n      baseEl.querySelectorAll(\".apexcharts-pie-series .apexcharts-pie-area\").forEach((p2, i2) => {\n        const d = p2.getAttribute(\"data:pathFinal\") || p2.getAttribute(\"d\");\n        if (!d || !d.trim()) return;\n        const box = this._pathBBox(d);\n        if (!box) return;\n        out.set(`${i2}:0`, {\n          realIndex: i2,\n          j: 0,\n          d,\n          bbox: {\n            x: box.minX,\n            y: box.minY,\n            width: box.maxX - box.minX,\n            height: box.maxY - box.minY\n          },\n          fill: p2.getAttribute(\"fill\"),\n          els: [p2]\n        });\n      });\n      return out;\n    }\n    const wrapClass = fam === \"summary\" ? `.apexcharts-${toType}-series` : \".apexcharts-bar-series\";\n    baseEl.querySelectorAll(`${wrapClass} .apexcharts-series`).forEach((group) => {\n      var _a2;\n      const realIndex = parseInt((_a2 = group.getAttribute(\"data:realIndex\")) != null ? _a2 : \"0\", 10) || 0;\n      let order = 0;\n      group.querySelectorAll(\"path[pathTo]\").forEach((p2) => {\n        var _a3;\n        const d = p2.getAttribute(\"pathTo\") || p2.getAttribute(\"d\");\n        if (!d || !d.trim()) return;\n        const jAttr = parseInt((_a3 = p2.getAttribute(\"j\")) != null ? _a3 : \"\", 10);\n        const j = isNaN(jAttr) ? order++ : jAttr;\n        const box = this._pathBBox(d);\n        if (!box) return;\n        const key = `${realIndex}:${j}`;\n        const prev = out.get(key);\n        if (prev) {\n          prev.els.push(p2);\n          prev.bbox = {\n            x: Math.min(prev.bbox.x, box.minX),\n            y: Math.min(prev.bbox.y, box.minY),\n            width: Math.max(prev.bbox.x + prev.bbox.width, box.maxX) - Math.min(prev.bbox.x, box.minX),\n            height: Math.max(prev.bbox.y + prev.bbox.height, box.maxY) - Math.min(prev.bbox.y, box.minY)\n          };\n        } else {\n          out.set(key, {\n            realIndex,\n            j,\n            bbox: {\n              x: box.minX,\n              y: box.minY,\n              width: box.maxX - box.minX,\n              height: box.maxY - box.minY\n            },\n            fill: p2.getAttribute(\"fill\"),\n            els: [p2]\n          });\n        }\n      });\n    });\n    return out;\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 {{ marks: Array<{ realIndex: number, j: number, d: string, fill: string|null, key?: string|null }>, branches: Array<{ key: string, d: string, fill: string|null }>, unitDots: Map<number, Array<{x:number,y:number,r:number,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 { marks: [], branches: [], unitDots: /* @__PURE__ */ new Map() };\n    const captured = [];\n    const branches = [];\n    const unitDots = /* @__PURE__ */ new Map();\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((p2, j) => {\n          const d = p2.getAttribute(\"pathTo\") || p2.getAttribute(\"d\");\n          if (!d) return;\n          captured.push({\n            realIndex,\n            j,\n            d,\n            fill: p2.getAttribute(\"fill\")\n          });\n        });\n      });\n    } else if (fam === \"summary\") {\n      const byMark = /* @__PURE__ */ new Map();\n      baseEl.querySelectorAll(`.apexcharts-${fromType}-area`).forEach((p2) => {\n        var _a2, _b;\n        const j = parseInt((_a2 = p2.getAttribute(\"j\")) != null ? _a2 : \"\", 10);\n        if (isNaN(j)) return;\n        const d = p2.getAttribute(\"pathTo\") || p2.getAttribute(\"d\");\n        if (!d || !d.trim()) return;\n        const group = typeof p2.closest === \"function\" ? p2.closest(\".apexcharts-series\") : null;\n        const realIndex = parseInt((_b = group == null ? void 0 : group.getAttribute(\"data:realIndex\")) != null ? _b : \"0\", 10) || 0;\n        const key = `${realIndex}:${j}`;\n        const prev = byMark.get(key);\n        if (prev) prev.d += ` ${d}`;\n        else byMark.set(key, { realIndex, j, d, fill: p2.getAttribute(\"fill\") });\n      });\n      Array.from(byMark.values()).sort((a2, b2) => a2.realIndex - b2.realIndex || a2.j - b2.j).forEach((m2) => captured.push(m2));\n    } else if (fam === \"partition\") {\n      if (fromType === \"treemap\") {\n        const rectPath = (el) => {\n          var _a2, _b, _c, _d;\n          const x = parseFloat((_a2 = el.getAttribute(\"x\")) != null ? _a2 : \"\");\n          const y = parseFloat((_b = el.getAttribute(\"y\")) != null ? _b : \"\");\n          const width = parseFloat((_c = el.getAttribute(\"width\")) != null ? _c : \"\");\n          const height = parseFloat((_d = el.getAttribute(\"height\")) != null ? _d : \"\");\n          if (![x, y, width, height].every((v2) => isFinite(v2))) return null;\n          return `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${y + height} Z`;\n        };\n        const tiles = baseEl.querySelectorAll(\".apexcharts-treemap-rect\");\n        tiles.forEach((t2) => {\n          var _a2, _b;\n          const d = rectPath(t2);\n          if (!d) return;\n          captured.push({\n            realIndex: parseInt((_a2 = t2.getAttribute(\"i\")) != null ? _a2 : \"0\", 10) || 0,\n            j: parseInt((_b = t2.getAttribute(\"j\")) != null ? _b : \"0\", 10) || 0,\n            d,\n            fill: t2.getAttribute(\"fill\"),\n            key: t2.getAttribute(\"data:key\") || null\n          });\n        });\n        const containers = baseEl.querySelectorAll(\n          \".apexcharts-treemap-parent-rect\"\n        );\n        containers.forEach((c2) => {\n          const d = rectPath(c2);\n          const key = c2.getAttribute(\"data:key\");\n          if (!d || !key) return;\n          branches.push({ key, d, fill: c2.getAttribute(\"fill\") });\n        });\n      } else {\n        const arcs = baseEl.querySelectorAll(\".apexcharts-sunburst-arc\");\n        const leaves = [];\n        arcs.forEach((a2) => {\n          if (a2.getAttribute(\"data:leaf\") === \"true\") leaves.push(a2);\n        });\n        const source = leaves.length ? leaves : Array.from(arcs);\n        source.forEach((a2, i2) => {\n          const d = a2.getAttribute(\"d\");\n          if (!d || !d.trim()) return;\n          captured.push({\n            realIndex: i2,\n            j: 0,\n            d,\n            fill: a2.getAttribute(\"fill\"),\n            key: a2.getAttribute(\"data:key\") || null\n          });\n        });\n        arcs.forEach((a2) => {\n          if (a2.getAttribute(\"data:leaf\") === \"true\") return;\n          const d = a2.getAttribute(\"d\");\n          const key = a2.getAttribute(\"data:key\");\n          if (!d || !d.trim() || !key) return;\n          branches.push({ key, d, fill: a2.getAttribute(\"fill\") });\n        });\n      }\n    } else if (fam === \"unit\") {\n      const dots = baseEl.querySelectorAll(\".apexcharts-unit-area\");\n      const boxes = /* @__PURE__ */ new Map();\n      dots.forEach((dot) => {\n        var _a2, _b, _c, _d, _e, _f, _g;\n        const i2 = parseInt((_a2 = dot.getAttribute(\"i\")) != null ? _a2 : \"\", 10);\n        if (isNaN(i2)) return;\n        const cxAttr = dot.getAttribute(\"cx\");\n        let x;\n        let y;\n        let r2 = 3;\n        if (cxAttr != null) {\n          x = parseFloat(cxAttr);\n          y = parseFloat((_b = dot.getAttribute(\"cy\")) != null ? _b : \"\");\n          r2 = parseFloat((_c = dot.getAttribute(\"r\")) != null ? _c : \"3\") || 3;\n        } else {\n          const wAttr = parseFloat((_d = dot.getAttribute(\"width\")) != null ? _d : \"0\") || 0;\n          const hAttr = parseFloat((_e = dot.getAttribute(\"height\")) != null ? _e : \"0\") || 0;\n          x = parseFloat((_f = dot.getAttribute(\"x\")) != null ? _f : \"\") + wAttr / 2;\n          y = parseFloat((_g = dot.getAttribute(\"y\")) != null ? _g : \"\") + hAttr / 2;\n          r2 = Math.max(wAttr, hAttr) / 2 || 3;\n        }\n        if (!isFinite(x) || !isFinite(y)) return;\n        let list = unitDots.get(i2);\n        if (!list) {\n          list = [];\n          unitDots.set(i2, list);\n        }\n        list.push({ x, y, r: r2, fill: dot.getAttribute(\"fill\") });\n        const box = boxes.get(i2);\n        if (!box) {\n          boxes.set(i2, {\n            minX: x,\n            minY: y,\n            maxX: x,\n            maxY: y,\n            fill: dot.getAttribute(\"fill\")\n          });\n          return;\n        }\n        if (x < box.minX) box.minX = x;\n        if (x > box.maxX) box.maxX = x;\n        if (y < box.minY) box.minY = y;\n        if (y > box.maxY) box.maxY = y;\n      });\n      Array.from(boxes.keys()).sort((a2, b2) => a2 - b2).forEach((i2) => {\n        const b2 = (\n          /** @type {any} */\n          boxes.get(i2)\n        );\n        const pad = 2;\n        const x1 = b2.minX - pad;\n        const y1 = b2.minY - pad;\n        const x2 = b2.maxX + pad;\n        const y2 = b2.maxY + pad;\n        captured.push({\n          realIndex: i2,\n          j: 0,\n          d: `M ${x1} ${y1} L ${x2} ${y1} L ${x2} ${y2} L ${x1} ${y2} Z`,\n          fill: b2.fill\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((p2) => {\n          var _a2;\n          const parent = (\n            /** @type {Element|null} */\n            p2.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 = p2.getAttribute(\"d\");\n          if (!rawD) return;\n          const strokeWidth = parseFloat(p2.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: p2.getAttribute(\"stroke\")\n          });\n        });\n      } else {\n        const slices = baseEl.querySelectorAll(\n          \".apexcharts-pie-series .apexcharts-pie-area\"\n        );\n        slices.forEach(\n          (p2, i2) => {\n            const d = p2.getAttribute(\"d\");\n            if (!d) return;\n            captured.push({\n              realIndex: i2,\n              j: 0,\n              d,\n              fill: p2.getAttribute(\"fill\")\n            });\n          }\n        );\n      }\n    }\n    return { marks: captured, branches, unitDots };\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 m2 = 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 (!m2) return null;\n    const x1 = parseFloat(m2[1]);\n    const y1 = parseFloat(m2[2]);\n    const r2 = parseFloat(m2[3]);\n    const large = parseInt(m2[4], 10);\n    const sweep = parseInt(m2[5], 10);\n    const x2 = parseFloat(m2[6]);\n    const y2 = parseFloat(m2[7]);\n    if (!isFinite(r2) || r2 <= 0) return null;\n    const half = strokeWidth / 2;\n    const rOuter = r2 + half;\n    const rInner = Math.max(0, r2 - 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, key?: 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   * @param {Array<{ key: string, d: string, fill: string|null }>} [branches]\n   *   non-leaf marks, for the key-based partition pairing.\n   */\n  _buildMapping(captured, _fromType, toType, newSeries, branches) {\n    const map = /* @__PURE__ */ new Map();\n    const tf = familyOf(toType);\n    const flat = captured.slice().sort((a2, b2) => a2.realIndex - b2.realIndex || a2.j - b2.j);\n    if (tf === \"partition\" && branches && branches.length) {\n      const keyedMarks = flat.filter((c2) => c2.key);\n      if (keyedMarks.length === flat.length) {\n        keyedMarks.forEach((c2) => {\n          map.set(`key:${c2.key}`, { d: c2.d, fill: c2.fill });\n        });\n        branches.forEach((br) => {\n          map.set(`key:${br.key}`, { d: br.d, fill: br.fill });\n        });\n      }\n    }\n    if (tf === \"radial\" || tf === \"unit\" || tf === \"partition\") {\n      flat.forEach((c2, i2) => {\n        map.set(`${i2}:0`, { d: c2.d, fill: c2.fill });\n      });\n      return map;\n    }\n    if (tf === \"bar\" || tf === \"summary\") {\n      const positions = [];\n      const series = Array.isArray(newSeries) ? newSeries : [];\n      series.forEach((s2, seriesIdx) => {\n        const data = s2 && Array.isArray(s2.data) ? s2.data : [];\n        for (let j = 0; j < data.length; j++) {\n          positions.push({ realIndex: seriesIdx, j });\n        }\n      });\n      flat.forEach((c2, i2) => {\n        const pos = positions[i2];\n        if (pos) {\n          map.set(`${pos.realIndex}:${pos.j}`, { d: c2.d, fill: c2.fill });\n        }\n      });\n      return map;\n    }\n    return map;\n  }\n  isActive() {\n    return this._snapshot !== null;\n  }\n  /**\n   * @param {number|string} realIndex\n   * @param {number|string} 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      (c2) => {\n        const cmd = c2[0];\n        if (cmd === \"Z\") return \"Z\";\n        if (cmd === \"M\" || cmd === \"L\" || cmd === \"T\") {\n          return `${cmd} ${c2[1] + dx} ${c2[2] + dy}`;\n        }\n        if (cmd === \"H\") return `${cmd} ${c2[1] + dx}`;\n        if (cmd === \"V\") return `${cmd} ${c2[1] + dy}`;\n        if (cmd === \"C\") {\n          return `${cmd} ${c2[1] + dx} ${c2[2] + dy} ${c2[3] + dx} ${c2[4] + dy} ${c2[5] + dx} ${c2[6] + dy}`;\n        }\n        if (cmd === \"S\" || cmd === \"Q\") {\n          return `${cmd} ${c2[1] + dx} ${c2[2] + dy} ${c2[3] + dx} ${c2[4] + dy}`;\n        }\n        if (cmd === \"A\") {\n          return `${cmd} ${c2[1]} ${c2[2]} ${c2[3]} ${c2[4]} ${c2[5]} ${c2[6] + dx} ${c2[7] + dy}`;\n        }\n        return c2.join(\" \");\n      }\n    ).join(\" \");\n  }\n  /**\n   * The centre point (in the NEW chart's screen space) of the captured shape\n   * for cluster `i`. Kept for callers that only need a point; the unit renderer\n   * uses getInitialBBoxFor so its dots fill the shape rather than stack on a\n   * single point.\n   * @param {number} i\n   * @returns {{ x: number, y: number } | null}\n   */\n  getInitialCenterFor(i2) {\n    const box = this.getInitialBBoxFor(i2);\n    if (!box) return null;\n    return { x: box.x + box.width / 2, y: box.y + box.height / 2 };\n  }\n  /**\n   * The `k`-th captured path in draw order, already shifted into the NEW\n   * chart's coordinate space.\n   *\n   * For marks that pair up by position rather than by a (series, point) grid:\n   * a treemap's tiles and a sunburst's leaves are each one mark per row, laid\n   * out in the same reading order, so the k-th of one becomes the k-th of the\n   * other.\n   *\n   * @param {number} k\n   * @returns {string | null}\n   */\n  getInitialPathAt(k) {\n    return this.getInitialPathFor(k, 0);\n  }\n  /**\n   * The captured shape for a branch identity (charts/common/Hierarchy.morphKey),\n   * or null when the outgoing chart had no mark for that branch.\n   *\n   * This is what lets a partition morph pair at every level: a sector, an\n   * industry and a company each find the arc or tile that stood for the same\n   * branch, instead of leaves pairing by draw order while the containers pop.\n   *\n   * @param {string} key\n   * @returns {string | null}\n   */\n  getInitialPathForKey(key) {\n    if (!this._snapshot || !key) return null;\n    return this.getInitialPathFor(\"key\", key);\n  }\n  /** True when the active snapshot can pair by branch key. */\n  hasKeyedMarks() {\n    if (!this._snapshot) return false;\n    for (const k of this._snapshot.mapping.keys()) {\n      if (typeof k === \"string\" && k.startsWith(\"key:\")) return true;\n    }\n    return false;\n  }\n  /**\n   * Where the `j`-th of `n` objects in cluster `i` starts, INSIDE the shape it\n   * came out of.\n   *\n   * An aggregate mark stands for a quantity, and its extent is that quantity: a\n   * bar of height h representing n units gives its k-th unit the height\n   * fraction (k + 0.5)/n. So a bar does not spray its dots from a single point,\n   * it comes apart along its own length, bottom-up, and each dot leaves from\n   * the part of the bar that was standing for it. The reverse direction reads\n   * the same geometry, so explode and collapse are inverses.\n   *\n   * The distribution follows the captured shape's LONGER axis, which is what\n   * makes one function serve both marks: a bar's box is tall and thin, so the\n   * dots leave in a column; a wedge's box is squat, so they leave in a row\n   * across it.\n   *\n   * @param {number} i - cluster index\n   * @param {number} j - the object's rank within its cluster\n   * @param {number} n - objects in the cluster\n   * @returns {{ x: number, y: number } | null}\n   */\n  getInitialSlotFor(i2, j, n2) {\n    const box = this.getInitialBBoxFor(i2);\n    if (!box) return null;\n    const cx = box.x + box.width / 2;\n    const cy = box.y + box.height / 2;\n    if (!(n2 > 1) || !(j >= 0)) return { x: cx, y: cy };\n    const t2 = (Math.min(j, n2 - 1) + 0.5) / n2;\n    if (box.height >= box.width) {\n      return { x: cx, y: box.y + box.height * (1 - t2) };\n    }\n    return { x: box.x + box.width * t2, y: cy };\n  }\n  /**\n   * The bounding box (in the NEW chart's screen space) of the captured shape\n   * for cluster `i`. `getInitialSlotFor` distributes a cluster's objects across\n   * this box as their start positions, so a tall bar visibly breaks apart into\n   * a tall column of dots that then swarm into the cluster.\n   * @param {number} i\n   * @returns {{ x: number, y: number, width: number, height: number } | null}\n   */\n  getInitialBBoxFor(i2) {\n    if (!this._snapshot) return null;\n    const entry = this._snapshot.mapping.get(`${i2}:0`);\n    if (!entry) return null;\n    const box = this._pathBBox(entry.d);\n    if (!box) 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 {\n      x: box.minX + dx,\n      y: box.minY + dy,\n      width: box.maxX - box.minX,\n      height: box.maxY - box.minY\n    };\n  }\n  /**\n   * Bounding box of an absolute-command SVG path `d`. Good enough as the burst\n   * footprint (we only need where the shape sat, not exact geometry).\n   * @param {string} d\n   * @returns {{ minX:number, minY:number, maxX:number, maxY:number } | null}\n   */\n  _pathBBox(d) {\n    const commands = parsePath(d);\n    let minX = Infinity;\n    let minY = Infinity;\n    let maxX = -Infinity;\n    let maxY = -Infinity;\n    let seen = false;\n    commands.forEach(\n      /** @param {any[]} c */\n      (c2) => {\n        const cmd = c2[0];\n        if (cmd === \"Z\") return;\n        let pairs = [];\n        if (cmd === \"H\") pairs = [[c2[1], (minY + maxY) / 2 || c2[1]]];\n        else if (cmd === \"V\") pairs = [[(minX + maxX) / 2 || c2[1], c2[1]]];\n        else if (cmd === \"A\") pairs = [[c2[6], c2[7]]];\n        else {\n          for (let k = 1; k + 1 < c2.length; k += 2) pairs.push([c2[k], c2[k + 1]]);\n        }\n        pairs.forEach(([x, y]) => {\n          if (!isFinite(x) || !isFinite(y)) return;\n          seen = true;\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    if (!seen) return null;\n    return { minX, minY, maxX, maxY };\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    if (this._snapshot.pieceOut) this._separatePieces();\n    else if (this._snapshot.pieceIn) this._combinePieces();\n    else this._mountGhost();\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    this._removeGhost();\n    this._cancelPieces();\n  }\n}\nApexCharts.registerFeatures({ morphTypeChange: MorphTypeChange });\nconst XHTML$2 = \"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(w2, ctx, drilldown) {\n    this.w = w2;\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 w2 = this.w;\n    const elWrap = w2.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 = w2.config.drilldown && w2.config.drilldown.breadcrumb;\n    if (!cfg || cfg.show === false) return;\n    if (this.drilldown.depth === 0) return;\n    const nav = BrowserAPIs.createElementNS(XHTML$2, \"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, i2) => {\n      if (i2 > 0) {\n        const sep = BrowserAPIs.createElementNS(XHTML$2, \"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, i2);\n      const isCurrent = i2 === path.length - 1;\n      if (isCurrent) {\n        const cur = BrowserAPIs.createElementNS(XHTML$2, \"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$2, \"button\")\n        );\n        btn.setAttribute(\"type\", \"button\");\n        btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n        if (i2 === 0) {\n          const arrow = BrowserAPIs.createElementNS(XHTML$2, \"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$2, \"span\");\n        text.setAttribute(\"class\", \"apexcharts-breadcrumb-label\");\n        text.textContent = label;\n        btn.appendChild(text);\n        btn.addEventListener(\"click\", () => this.drilldown.drillToLevel(i2));\n        nav.appendChild(btn);\n      }\n    });\n    elWrap.appendChild(nav);\n    if (this.w.globals.axisCharts) {\n      placeInReservedBand(this.w, this.ctx, nav, cfg);\n    }\n    this._avoidChromeOverlap(nav);\n  }\n  /**\n   * The breadcrumb is an absolute overlay, so at its default top-left it can\n   * sit on top of a left-aligned title (or subtitle). After mounting, push it\n   * below any chart chrome it intersects. (Sunburst's self-contained\n   * breadcrumb applies the same rule.)\n   * @param {HTMLElement} nav\n   */\n  _avoidChromeOverlap(nav) {\n    const w2 = this.w;\n    const chrome = (\n      /** @type {Element[]} */\n      [\".apexcharts-title-text\", \".apexcharts-subtitle-text\"].map((s2) => w2.dom.baseEl.querySelector(s2)).filter((el) => el !== null)\n    );\n    if (!chrome.length) return;\n    const wrapTop = w2.dom.elWrap.getBoundingClientRect().top;\n    for (let pass = 0; pass < chrome.length + 1; pass++) {\n      const nr = nav.getBoundingClientRect();\n      const hit = chrome.find((el) => {\n        const r2 = el.getBoundingClientRect();\n        return nr.left < r2.right && nr.right > r2.left && nr.top < r2.bottom && nr.bottom > r2.top;\n      });\n      if (!hit) break;\n      nav.style.top = `${hit.getBoundingClientRect().bottom - wrapTop + 4}px`;\n    }\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        (s2) => s2 && s2.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 XHTML$1 = \"http://www.w3.org/1999/xhtml\";\nconst CLASS = \"apexcharts-drilldown-loading\";\nclass DrilldownLoading {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   */\n  constructor(w2) {\n    this.w = w2;\n    this.el = null;\n  }\n  /** @returns {any} the drilldown.loading config, normalised. */\n  _cfg() {\n    const d = this.w.config.drilldown;\n    const l2 = d && d.loading;\n    if (l2 === false) return { show: false };\n    return l2 || {};\n  }\n  /**\n   * Mount the overlay. No-op when disabled, outside a browser, or already up.\n   */\n  show() {\n    if (!Environment.isBrowser()) return;\n    const cfg = this._cfg();\n    if (cfg.show === false) return;\n    const elWrap = this.w.dom.elWrap;\n    if (!elWrap) return;\n    this.hide();\n    const box = BrowserAPIs.createElementNS(XHTML$1, \"div\");\n    box.setAttribute(\"class\", CLASS);\n    box.setAttribute(\"role\", \"status\");\n    box.setAttribute(\"aria-live\", \"polite\");\n    box.setAttribute(\"aria-label\", cfg.text || \"Loading\");\n    const spinner = BrowserAPIs.createElementNS(XHTML$1, \"div\");\n    spinner.setAttribute(\"class\", `${CLASS}-spinner`);\n    spinner.setAttribute(\"aria-hidden\", \"true\");\n    box.appendChild(spinner);\n    if (cfg.text) {\n      const label = BrowserAPIs.createElementNS(XHTML$1, \"span\");\n      label.setAttribute(\"class\", `${CLASS}-text`);\n      label.textContent = cfg.text;\n      box.appendChild(label);\n    }\n    elWrap.appendChild(box);\n    this.el = box;\n  }\n  /** Remove the overlay. Safe to call when it is not mounted. */\n  hide() {\n    const elWrap = this.w.dom.elWrap;\n    if (elWrap) {\n      const nodes = elWrap.querySelectorAll(`.${CLASS}`);\n      for (let i2 = 0; i2 < nodes.length; i2++) {\n        const n2 = nodes[i2];\n        if (n2.parentNode) n2.parentNode.removeChild(n2);\n      }\n    } else if (this.el && this.el.parentNode) {\n      this.el.parentNode.removeChild(this.el);\n    }\n    this.el = null;\n  }\n}\nconst MAX_DEPTH = 32;\nconst DRILL_MARKER = \"__apexDrilldownMarker\";\nclass Drilldown {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.stack = [];\n    this.rootSnapshot = null;\n    this._wired = false;\n    this._asyncCache = /* @__PURE__ */ new Map();\n    this._pending = null;\n    this._warnedUnreachable = false;\n    this._warnedNoSliceOffset = false;\n    this.breadcrumb = new Breadcrumb(w2, ctx, this);\n    this.loading = new DrilldownLoading(w2);\n    this._onPointSelect = this._onPointSelect.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    this._onPlotDown = this._onPlotDown.bind(this);\n    this._onPlotClick = this._onPlotClick.bind(this);\n    this._downAt = null;\n    this._plotClickWired = null;\n    this.init();\n  }\n  init() {\n    const w2 = this.w;\n    if (!w2.config.drilldown || !w2.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    if (w2.config.markers) {\n      w2.config.markers.discrete = this._drillMarkers(w2.config.series);\n    }\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((s2) => s2 && s2.id === id) || null;\n  }\n  /**\n   * @param {any} child\n   * @param {any} [triggerPoint]\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} [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   * Resolve a level through `onDrillDown` and drill into it.\n   *\n   * Failure never changes state: on a throw, a rejection, or a resolver that\n   * hands back something undrillable, the chart stays exactly where it was and\n   * `drillDownError` fires. That is what makes this usable against a real\n   * backend, where a fetch failing is ordinary rather than exceptional.\n   *\n   * @param {string|number|null} id\n   * @param {any} point\n   * @param {{ seriesIndex?: number, dataPointIndex?: number }} [meta]\n   * @returns {Promise<any>}\n   */\n  _drillDownAsync(id, point, meta) {\n    const cfg = this.w.config.drilldown;\n    const fn = cfg.onDrillDown;\n    const cached = this._cacheGet(id);\n    if (cached) return this._drillInto(cached, point, meta);\n    if (this._pending) return this._pending;\n    let result;\n    this.loading.show();\n    try {\n      result = fn({\n        // `id` was missing here, so a resolver could not tell WHICH level was\n        // asked for without re-deriving it from the point. It is the first\n        // thing a real implementation needs (`fetch('/levels/' + id)`).\n        id,\n        point,\n        seriesIndex: meta && meta.seriesIndex,\n        dataPointIndex: meta && meta.dataPointIndex\n      });\n    } catch (error) {\n      this.loading.hide();\n      this._fire(\"drillDownError\", { id, error });\n      return Promise.resolve(this.ctx);\n    }\n    const settle = () => {\n      this._pending = null;\n      this.loading.hide();\n    };\n    const p2 = Promise.resolve(result).then(\n      (child) => {\n        settle();\n        if (this._isDead()) return this.ctx;\n        if (!child || !child.data) {\n          this._fire(\"drillDownError\", {\n            id,\n            error: new Error(\n              `drilldown: onDrillDown resolved without a drillable level for id \"${id}\" (expected an object with a \\`data\\` array).`\n            )\n          });\n          return this.ctx;\n        }\n        const level = child.id != null ? child : __spreadProps(__spreadValues({}, child), { id });\n        this._cacheSet(id, level);\n        return this._drillInto(level, point, meta);\n      },\n      (error) => {\n        settle();\n        if (this._isDead()) return this.ctx;\n        this._fire(\"drillDownError\", { id, error });\n        return this.ctx;\n      }\n    );\n    this._pending = p2;\n    return p2;\n  }\n  /**\n   * Whether the chart was torn down while a resolver was in flight.\n   *\n   * Clicking to drill and then navigating away is ordinary, not exceptional: a\n   * component unmounts, `destroy()` runs, and the fetch settles afterwards.\n   * Without this the resolved level would be applied to a destroyed chart,\n   * which throws out of `updateOptions` and surfaces in the host app as an\n   * unhandled rejection from a click the user has already forgotten about.\n   *\n   * @returns {boolean}\n   */\n  _isDead() {\n    const w2 = this.w;\n    return !w2 || !w2.globals || w2.globals.isDestroyed === true;\n  }\n  /** @returns {boolean} whether resolved async levels are cached. */\n  _cacheEnabled() {\n    const cfg = this.w.config.drilldown;\n    return !!(cfg && cfg.cache !== false);\n  }\n  /**\n   * @param {string|number|null} id\n   * @returns {any|null}\n   */\n  _cacheGet(id) {\n    if (!this._cacheEnabled() || id == null) return null;\n    return this._asyncCache.get(id) || null;\n  }\n  /**\n   * @param {string|number|null} id\n   * @param {any} level\n   */\n  _cacheSet(id, level) {\n    if (!this._cacheEnabled() || id == null) return;\n    this._asyncCache.set(id, level);\n  }\n  /**\n   * Drop cached async levels, so the next drill re-runs `onDrillDown`. Call it\n   * when the underlying data changes behind a chart that has already drilled.\n   * @param {string|number} [id] a single level, or every level when omitted\n   * @returns {any} the chart, for chaining\n   */\n  clearCache(id) {\n    if (id == null) this._asyncCache.clear();\n    else this._asyncCache.delete(id);\n    return this.ctx;\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 c2 = this.w.config;\n    const fields = this._overrideFields();\n    const snap = { series: this._uncollapseSeries(Utils$1.clone(c2.series)) };\n    if (Array.isArray(c2.labels) && c2.labels.length) {\n      snap.labels = Utils$1.clone(c2.labels);\n    }\n    snap.chart = { type: c2.chart.type, stacked: c2.chart.stacked };\n    if (fields.has(\"xaxis\")) snap.xaxis = Utils$1.clone(c2.xaxis);\n    if (fields.has(\"yaxis\")) snap.yaxis = Utils$1.clone(c2.yaxis);\n    if (fields.has(\"colors\")) snap.colors = c2.colors ? Utils$1.clone(c2.colors) : void 0;\n    if (fields.has(\"plotOptions\")) snap.plotOptions = Utils$1.clone(c2.plotOptions);\n    if (fields.has(\"fill\")) snap.fill = Utils$1.clone(c2.fill);\n    if (fields.has(\"legend\")) snap.legend = Utils$1.clone(c2.legend);\n    return snap;\n  }\n  /**\n   * Restore any legend-collapsed slices/series to their original values in a\n   * cloned series array, so a drill snapshot captures the pre-collapse data.\n   * Mirrors legend Helpers' collapse addressing: object-form pie/donut packs\n   * every slice as a data point inside `series[0].data`; numeric pie stores a\n   * slice per top-level element; axis series carry a `data` array. No-op when\n   * nothing is collapsed.\n   * @param {any[]} series\n   * @returns {any[]}\n   */\n  _uncollapseSeries(series) {\n    const w2 = this.w;\n    const gl = w2.globals;\n    const entries = [\n      ...gl.collapsedSeries || [],\n      ...gl.ancillaryCollapsedSeries || []\n    ];\n    if (!entries.length) return series;\n    const type = w2.config.chart.type;\n    const objectFormPie = (type === \"pie\" || type === \"donut\" || type === \"polarArea\") && series.length === 1 && series[0] && typeof series[0] === \"object\" && Array.isArray(series[0].data);\n    const container = objectFormPie ? series[0].data : series;\n    for (const entry of entries) {\n      const i2 = entry.index;\n      if (gl.axisCharts) {\n        if (series[i2]) {\n          series[i2].data = Array.isArray(entry.data) ? entry.data.slice() : entry.data;\n        }\n      } else if (container[i2] && typeof container[i2] === \"object\") {\n        container[i2].y = entry.data;\n      } else if (container[i2] !== void 0) {\n        container[i2] = entry.data;\n      }\n    }\n    return series;\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 s2 of list) {\n      if (!s2) continue;\n      if (s2.xaxis) fields.add(\"xaxis\");\n      if (s2.yaxis) fields.add(\"yaxis\");\n      if (s2.colors) fields.add(\"colors\");\n      if (s2.plotOptions) fields.add(\"plotOptions\");\n      if (s2.fill) fields.add(\"fill\");\n      if (s2.legend) fields.add(\"legend\");\n    }\n    return fields;\n  }\n  /**\n   * Copy the optional view fields shared by a drilldown child level and a\n   * restore snapshot (`xaxis`, `yaxis`, `colors`, `plotOptions`, `fill`,\n   * `legend`) from `src` onto `view`, only when present.\n   * @param {Record<string, any>} view @param {Record<string, any>} src\n   */\n  _copyOptionalViewFields(view, src) {\n    if (src.xaxis) view.xaxis = src.xaxis;\n    if (src.yaxis) view.yaxis = src.yaxis;\n    if (src.colors) view.colors = src.colors;\n    if (src.plotOptions) view.plotOptions = src.plotOptions;\n    if (src.fill) view.fill = src.fill;\n    if (src.legend) view.legend = src.legend;\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    this._copyOptionalViewFields(view, child);\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    this._copyOptionalViewFields(view, snap);\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 w2 = this.w;\n    w2.interact.selectedDataPoints = [];\n    w2.globals.collapsedSeries = [];\n    w2.globals.collapsedSeriesIndices = [];\n    w2.globals.ancillaryCollapsedSeries = [];\n    w2.globals.ancillaryCollapsedSeriesIndices = [];\n    w2.globals.allSeriesCollapsed = false;\n    w2.globals.risingSeries = [];\n    view.markers = __spreadProps(__spreadValues({}, view.markers || {}), {\n      discrete: this._drillMarkers(view.series)\n    });\n    const animate = (!w2.config.drilldown.animation || w2.config.drilldown.animation.enabled !== false) && w2.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 a2 = this.w.config.drilldown && this.w.config.drilldown.animation;\n    return !!(a2 && a2.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 r2 = el.getBoundingClientRect();\n      return {\n        x: r2.left + r2.width / 2 - svgRect.left,\n        y: r2.top + r2.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 (e2) {\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 (e2) {\n        }\n        clear(inGroup);\n        inAnim.cancel();\n      }\n    });\n  }\n  /** @returns {number} per-phase zoom duration in ms. */\n  _zoomDuration() {\n    const a2 = this.w.config.drilldown && this.w.config.drilldown.animation;\n    const speed = a2 && typeof a2.speed === \"number\" ? a2.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 s2 = series[seriesIndex];\n    if (!s2 || !Array.isArray(s2.data)) return null;\n    return s2.data[dataPointIndex] != null ? s2.data[dataPointIndex] : null;\n  }\n  _afterRender() {\n    const w2 = this.w;\n    if (!w2.config.drilldown || !w2.config.drilldown.enabled) return;\n    this._markDrillableTargets();\n    this._wirePlotClick();\n    this.breadcrumb.render(this.path);\n    if (w2.config.markers) {\n      w2.config.markers.discrete = this._drillMarkers(w2.config.series);\n    }\n  }\n  /**\n   * Mark every point that carries a `drilldown` field as an openable target.\n   *\n   * Two things have to be true for a point to be drillable, and on line/area\n   * neither holds by default. It needs a mark to click (with `markers.size: 0`\n   * there is no element at all), and that mark has to accept the click: core\n   * gives line/area markers `no-pointer-events` so the shared tooltip can track\n   * the whole plot, which silently swallows it. `_drillMarkers()` supplies the\n   * missing dots; this re-enables pointer events on them.\n   *\n   * The cursor class only goes on marks that can actually take the click, so we\n   * never promise an interaction that cannot happen.\n   */\n  _markDrillableTargets() {\n    if (!Environment.isBrowser()) return;\n    const w2 = this.w;\n    const baseEl = w2.dom.baseEl;\n    const series = w2.config.series;\n    if (!baseEl || !Array.isArray(series)) return;\n    let unreachable = 0;\n    series.forEach((s2, i2) => {\n      const data = s2 && Array.isArray(s2.data) ? s2.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=\"${i2}\"][j=\"${j}\"]`);\n        if (!nodes.length) unreachable++;\n        nodes.forEach((node) => {\n          if (this._isClickThroughMark(node)) {\n            node.classList.remove(\"no-pointer-events\");\n          }\n          node.classList.add(\"apexcharts-drilldown-target\");\n        });\n      });\n    });\n    if (unreachable && !this._warnedUnreachable) {\n      this._warnedUnreachable = true;\n      console.warn(\n        `ApexCharts: ${unreachable} drillable point(s) have no clickable mark, so clicking them cannot do anything. Leave \\`drilldown.marker\\` on, or give the series markers of its own (\\`markers.size > 0\\`).`\n      );\n    }\n  }\n  /**\n   * Called by Pie when it declines to wire the slice pull-out because this\n   * chart drills. Warned once per chart (a drill re-renders, and the same\n   * notice on every navigation is just noise), and from here rather than from\n   * Pie because this module is the reason it is unavailable.\n   */\n  warnSliceOffsetDisabled() {\n    if (this._warnedNoSliceOffset) return;\n    this._warnedNoSliceOffset = true;\n    console.warn(\n      \"ApexCharts: `plotOptions.pie.expandOnClick` is not available in a drilldown pie/donut, so it was ignored. A slice click navigates, and a slice that slid out would be discarded by the drill it just triggered.\"\n    );\n  }\n  /**\n   * Make the whole band a drillable point owns clickable, not just its dot.\n   *\n   * A dot is ~6px across, so hitting it takes pixel-precise aim, it is far under\n   * the ~44px a finger needs, and the tooltip's arrow points AT the point by\n   * design, which puts a triangle over the very thing you are aiming at. Rather\n   * than move the tooltip, widen the target: a click anywhere in the plot drills\n   * whichever point the tooltip is currently reading. The hit area then matches\n   * the feedback already on screen, so \"the tooltip says 2024, I click, I get\n   * 2024\" holds, and the dot goes back to being an affordance rather than a\n   * target you have to chase.\n   *\n   * Only for the point-based types, since a bar, slice or tile is already a\n   * comfortably large mark and drilling one by clicking the background near it\n   * would be surprising.\n   */\n  _wirePlotClick() {\n    if (!Environment.isBrowser()) return;\n    const baseEl = this.w.dom.baseEl;\n    if (!baseEl || this._plotClickWired === baseEl) return;\n    if (this._plotClickWired) {\n      this._plotClickWired.removeEventListener(\"mousedown\", this._onPlotDown);\n      this._plotClickWired.removeEventListener(\"click\", this._onPlotClick);\n    }\n    baseEl.addEventListener(\"mousedown\", this._onPlotDown);\n    baseEl.addEventListener(\"click\", this._onPlotClick);\n    this._plotClickWired = baseEl;\n  }\n  /** @param {any} e */\n  _onPlotDown(e2) {\n    this._downAt = { x: e2.clientX, y: e2.clientY };\n  }\n  /**\n   * @param {any} e\n   * @returns {any}\n   */\n  _onPlotClick(e2) {\n    const w2 = this.w;\n    if (!w2.config.drilldown || !w2.config.drilldown.enabled) return void 0;\n    const down = this._downAt;\n    this._downAt = null;\n    if (down && Math.hypot(e2.clientX - down.x, e2.clientY - down.y) > 4) {\n      return void 0;\n    }\n    const target = (\n      /** @type {Element} */\n      e2.target\n    );\n    if (!target || typeof target.closest !== \"function\") return void 0;\n    if (target.closest(\".apexcharts-drilldown-target\")) return void 0;\n    if (target.closest(\n      \".apexcharts-legend, .apexcharts-toolbar, .apexcharts-breadcrumb, .apexcharts-menu, .apexcharts-tooltip\"\n    )) {\n      return void 0;\n    }\n    const i2 = w2.interact.capturedSeriesIndex;\n    const j = w2.interact.capturedDataPointIndex;\n    if (i2 == null || j == null || i2 < 0 || j < 0) return void 0;\n    if (!this._isPointBasedSeries(w2.config.series[i2])) return void 0;\n    const point = this._pointAt(i2, j);\n    if (!point || typeof point !== \"object\" || point.drilldown == null) {\n      return void 0;\n    }\n    return this.drillDown(point.drilldown, point, {\n      seriesIndex: i2,\n      dataPointIndex: j\n    });\n  }\n  /**\n   * A series mark that is deliberately click-through. Restricted to markers\n   * inside the plot: the tooltip draws its own `no-pointer-events` marker, and\n   * that one must stay click-through or it would sit under the cursor and eat\n   * the hover it exists to follow.\n   * @param {Element} node\n   * @returns {boolean}\n   */\n  _isClickThroughMark(node) {\n    if (!node.classList || !node.classList.contains(\"no-pointer-events\")) {\n      return false;\n    }\n    if (!node.classList.contains(\"apexcharts-marker\")) return false;\n    return !(typeof node.closest === \"function\" && node.closest(\".apexcharts-tooltip\"));\n  }\n  /**\n   * Discrete-marker entries that give each drillable point a visible dot.\n   *\n   * Only series drawn WITHOUT markers get them, so an author who already shows\n   * markers keeps their styling untouched, and only drillable points get one, so\n   * the dots read as \"these are the ones you can open\" rather than turning every\n   * point into a dot. Core renders discrete markers even when `markers.size` is\n   * 0, which is what makes the affordance possible without a core change.\n   *\n   * Entries are tagged so a resync replaces ours and leaves the author's alone.\n   * @param {any[]} series - the series being rendered (a drill applies its\n   *   level's series, which are not yet on `w.config` when this runs)\n   * @returns {any[]}\n   */\n  _drillMarkers(series) {\n    const w2 = this.w;\n    const cfg = w2.config.drilldown;\n    const authored = Array.isArray(w2.config.markers && w2.config.markers.discrete) ? w2.config.markers.discrete.filter(\n      (d) => !d || !d[DRILL_MARKER]\n    ) : [];\n    const mk = cfg && cfg.marker || {};\n    if (mk.show === false || !Array.isArray(series)) return authored;\n    const own = [];\n    series.forEach((s2, i2) => {\n      if (!this._seriesNeedsDrillMarker(i2, s2)) return;\n      const data = s2 && Array.isArray(s2.data) ? s2.data : null;\n      if (!data) return;\n      data.forEach((point, j) => {\n        if (!point || typeof point !== \"object\" || point.drilldown == null) return;\n        const entry = { seriesIndex: i2, dataPointIndex: j, [DRILL_MARKER]: true };\n        if (mk.size !== void 0) entry.size = mk.size;\n        if (mk.shape !== void 0) entry.shape = mk.shape;\n        if (mk.fillColor !== void 0) entry.fillColor = mk.fillColor;\n        if (mk.strokeColor !== void 0) entry.strokeColor = mk.strokeColor;\n        own.push(entry);\n      });\n    });\n    return authored.concat(own);\n  }\n  /**\n   * Whether a series needs drill dots supplied for it: a point-based type whose\n   * marks are the markers, drawn with markers off. Bar, pie, treemap and heatmap\n   * marks are already real clickable elements, and a series that already shows\n   * markers already has its affordance.\n   * @param {number} i @param {any} s\n   * @returns {boolean}\n   */\n  _seriesNeedsDrillMarker(i2, s2) {\n    if (!this._isPointBasedSeries(s2)) return false;\n    const size = this.w.config.markers && this.w.config.markers.size;\n    const effective = Array.isArray(size) ? size[i2] : size;\n    return !(Number(effective) > 0);\n  }\n  /**\n   * A series whose marks are markers (a point), rather than a shape big enough\n   * to aim at on its own.\n   * @param {any} s\n   * @returns {boolean}\n   */\n  _isPointBasedSeries(s2) {\n    const type = s2 && s2.type || this.w.config.chart.type;\n    return type === \"line\" || type === \"area\";\n  }\n}\nApexCharts.registerFeatures({ drilldown: Drilldown });\nconst VIEWSTATE_VERSION = 1;\nfunction axisWindow(min, max) {\n  const hasMin = min !== void 0 && min !== null;\n  const hasMax = max !== void 0 && max !== null;\n  if (!hasMin && !hasMax) return null;\n  return { min: hasMin ? min : null, max: hasMax ? max : null };\n}\nfunction cloneSelection(sel) {\n  if (!Array.isArray(sel)) return [];\n  return sel.map((a2) => Array.isArray(a2) ? a2.slice() : a2);\n}\nfunction annotationKind(method, ctx) {\n  if (typeof method !== \"function\" || !ctx) return null;\n  if (method === ctx.addXaxisAnnotation) return \"xaxis\";\n  if (method === ctx.addYaxisAnnotation) return \"yaxis\";\n  if (method === ctx.addPointAnnotation) return \"point\";\n  return null;\n}\nfunction addMethodName(kind) {\n  switch (kind) {\n    case \"xaxis\":\n      return \"addXaxisAnnotation\";\n    case \"yaxis\":\n      return \"addYaxisAnnotation\";\n    case \"point\":\n      return \"addPointAnnotation\";\n    default:\n      return null;\n  }\n}\nfunction captureAnnotations(w2, ctx) {\n  const staticAnno = w2.config.annotations ? Utils$1.clone(w2.config.annotations) : null;\n  const dynamic = [];\n  const mem = w2.globals.memory && w2.globals.memory.methodsToExec || [];\n  for (const entry of mem) {\n    if (!entry || entry.label !== \"addAnnotation\") continue;\n    const kind = annotationKind(entry.method, ctx);\n    if (!kind) continue;\n    dynamic.push({ kind, params: Utils$1.clone(entry.params) });\n  }\n  return { static: staticAnno, dynamic };\n}\nfunction captureMeasure(ctx) {\n  const m2 = ctx && ctx.measure;\n  if (!m2 || typeof m2.getPins !== \"function\") return null;\n  const pins = m2.getPins();\n  return Array.isArray(pins) && pins.length ? { pins } : null;\n}\nfunction captureViewState(w2, ctx) {\n  var _a, _b;\n  const cfgX = w2.config.xaxis || {};\n  const cfgYArr = Array.isArray(w2.config.yaxis) ? w2.config.yaxis : w2.config.yaxis ? [w2.config.yaxis] : [];\n  const yWindows = cfgYArr.map(\n    (y) => axisWindow(y && y.min, y && y.max)\n  );\n  const anyY = yWindows.some((yw) => yw !== null);\n  const theme = w2.config.theme;\n  const drilldown = ctx && ctx.drilldown;\n  return {\n    v: VIEWSTATE_VERSION,\n    window: {\n      xaxis: axisWindow(cfgX.min, cfgX.max),\n      yaxis: anyY ? yWindows : null\n    },\n    zoomed: !!w2.interact.zoomed,\n    collapsed: (w2.globals.collapsedSeriesIndices || []).slice(),\n    ancillaryCollapsed: (w2.globals.ancillaryCollapsedSeriesIndices || []).slice(),\n    selectedDataPoints: cloneSelection(w2.interact.selectedDataPoints),\n    theme: theme ? { mode: (_a = theme.mode) != null ? _a : null, palette: (_b = theme.palette) != null ? _b : null } : null,\n    locale: w2.config.chart && w2.config.chart.defaultLocale || null,\n    annotations: captureAnnotations(w2, ctx),\n    drill: drilldown && drilldown.depth > 0 ? { path: drilldown.path.slice() } : null,\n    measure: captureMeasure(ctx)\n  };\n}\nfunction applyCollapsedSet(ctx, targetCollapsed, targetAncillary) {\n  const w2 = ctx.w;\n  if (targetCollapsed == null && targetAncillary == null) return;\n  const names = w2.globals.seriesNames || [];\n  const target = /* @__PURE__ */ new Set([\n    ...targetCollapsed || [],\n    ...targetAncillary || []\n  ]);\n  const current = /* @__PURE__ */ new Set([\n    ...w2.globals.collapsedSeriesIndices || [],\n    ...w2.globals.ancillaryCollapsedSeriesIndices || []\n  ]);\n  for (let realIndex = 0; realIndex < names.length; realIndex++) {\n    const name2 = names[realIndex];\n    if (name2 == null) continue;\n    const shouldCollapse = target.has(realIndex);\n    const isCollapsed = current.has(realIndex);\n    if (shouldCollapse && !isCollapsed) {\n      ctx.hideSeries(name2);\n    } else if (!shouldCollapse && isCollapsed) {\n      ctx.showSeries(name2);\n    }\n  }\n}\nfunction restoreSelection(ctx, selectedDataPoints) {\n  if (!Array.isArray(selectedDataPoints)) return;\n  ctx.w.interact.selectedDataPoints = cloneSelection(selectedDataPoints);\n}\nfunction applyViewState(ctx, view, { animate = true, mergeOptions } = {}) {\n  var _a, _b;\n  if (!ctx || !view) return;\n  if (typeof view.v === \"number\" && view.v > VIEWSTATE_VERSION) {\n    console.warn(\n      `[apexcharts] ViewState v${view.v} is newer than this build understands (v${VIEWSTATE_VERSION}); applying best-effort.`\n    );\n  }\n  ctx.clearAnnotations();\n  const options2 = mergeOptions ? Utils$1.clone(mergeOptions) : {};\n  const xw = view.window && view.window.xaxis;\n  options2.xaxis = Object.assign(\n    {},\n    options2.xaxis,\n    xw ? { min: (_a = xw.min) != null ? _a : void 0, max: (_b = xw.max) != null ? _b : void 0 } : { min: void 0, max: void 0 }\n  );\n  const yw = view.window && view.window.yaxis;\n  if (Array.isArray(yw)) {\n    options2.yaxis = yw.map(\n      (y) => {\n        var _a2, _b2;\n        return y ? { min: (_a2 = y.min) != null ? _a2 : void 0, max: (_b2 = y.max) != null ? _b2 : void 0 } : {};\n      }\n    );\n  }\n  if (view.theme) {\n    const theme = {};\n    if (view.theme.mode != null) theme.mode = view.theme.mode;\n    if (view.theme.palette != null) theme.palette = view.theme.palette;\n    if (Object.keys(theme).length) {\n      options2.theme = Object.assign({}, options2.theme, theme);\n    }\n  }\n  if (view.annotations && view.annotations.static) {\n    options2.annotations = Utils$1.clone(view.annotations.static);\n  }\n  ctx.updateOptions(\n    options2,\n    false,\n    animate,\n    false,\n    false\n  );\n  applyViewInteraction(ctx, view);\n}\nfunction applyViewInteraction(ctx, view) {\n  if (!ctx || !view) return;\n  const w2 = ctx.w;\n  w2.interact.zoomed = !!view.zoomed;\n  applyCollapsedSet(ctx, view.collapsed, view.ancillaryCollapsed);\n  if (view.annotations && Array.isArray(view.annotations.dynamic)) {\n    view.annotations.dynamic.forEach((a2) => {\n      const method = addMethodName(a2.kind);\n      if (method && typeof ctx[method] === \"function\") {\n        ctx[method](a2.params, true);\n      }\n    });\n  }\n  restoreSelection(ctx, view.selectedDataPoints);\n  if (view.locale && view.locale !== w2.config.chart.defaultLocale) {\n    ctx.setLocale(view.locale);\n  }\n  if (ctx.measure && typeof ctx.measure.setPins === \"function\") {\n    ctx.measure.setPins(view.measure && view.measure.pins || []);\n  }\n}\nconst PERSPECTIVE_VERSION = 1;\nconst HASH_KEY = \"apex\";\nfunction toBase64(str) {\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(str, \"utf-8\").toString(\"base64\");\n  }\n  const bytes = new TextEncoder().encode(str);\n  let bin = \"\";\n  for (let i2 = 0; i2 < bytes.length; i2++) bin += String.fromCharCode(bytes[i2]);\n  return btoa(bin);\n}\nfunction fromBase64(b64) {\n  if (typeof Buffer !== \"undefined\") {\n    return Buffer.from(b64, \"base64\").toString(\"utf-8\");\n  }\n  const bin = atob(b64);\n  const bytes = new Uint8Array(bin.length);\n  for (let i2 = 0; i2 < bin.length; i2++) bytes[i2] = bin.charCodeAt(i2);\n  return new TextDecoder().decode(bytes);\n}\nfunction base64urlEncode(str) {\n  return toBase64(str).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/, \"\");\n}\nfunction base64urlDecode(b64url) {\n  let b64 = b64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  while (b64.length % 4) b64 += \"=\";\n  return fromBase64(b64);\n}\nfunction stripFunctions(obj) {\n  try {\n    return JSON.parse(JSON.stringify(obj));\n  } catch (e2) {\n    return void 0;\n  }\n}\nclass Perspectives {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this._saved = [];\n    this._counter = 0;\n    this._used = false;\n  }\n  /**\n   * Capture the current chart view as a Perspective token.\n   * @returns {{ v: number, view: object, options?: Record<string, any> }}\n   */\n  capture() {\n    const view = captureViewState(this.w, this.ctx);\n    const token = (\n      /** @type {any} */\n      { v: PERSPECTIVE_VERSION, view }\n    );\n    const options2 = this._serializableDelta();\n    if (options2 && Object.keys(options2).length) token.options = options2;\n    return token;\n  }\n  /**\n   * Build the whitelisted, function-free option override recorded in the token.\n   * @returns {Record<string, any>}\n   * @private\n   */\n  _serializableDelta() {\n    const cfg = this.w.config;\n    const whitelist = cfg.chart && cfg.chart.perspectives && cfg.chart.perspectives.serializeOptions || [\"theme\", \"xaxis\", \"yaxis\", \"title\", \"subtitle\"];\n    const delta = {};\n    whitelist.forEach((path) => {\n      if (cfg[path] !== void 0) {\n        const stripped = stripFunctions(cfg[path]);\n        if (stripped !== void 0) delta[path] = stripped;\n      }\n    });\n    return delta;\n  }\n  /**\n   * Encode a token (or the current capture) to a compact base64url string.\n   * JSON.stringify drops any functions embedded in annotation params / option\n   * overrides by construction: a shared link carries data; the opening page\n   * supplies its own functions from config.\n   * @param {any} [token]\n   * @returns {string}\n   */\n  encode(token) {\n    const t2 = token || this.capture();\n    return base64urlEncode(JSON.stringify(t2));\n  }\n  /**\n   * Decode a base64url token string. Never throws: returns null on any error\n   * or version mismatch (with a console warning).\n   * @param {string} str\n   * @returns {any | null}\n   */\n  decode(str) {\n    return Perspectives.decode(str);\n  }\n  /**\n   * Encode the current capture into a `#apex=<token>` URL hash fragment on the\n   * current location. Browser-only; returns '' under SSR.\n   * @returns {string}\n   */\n  toURL() {\n    if (!Environment.isBrowser()) return \"\";\n    const encoded = this.encode(this.capture());\n    const url = new URL(window.location.href);\n    url.hash = `${HASH_KEY}=${encoded}`;\n    return url.toString();\n  }\n  /**\n   * Restore a perspective. Accepts a token object or an encoded string. When\n   * the chart is grouped, applies to every synced chart.\n   *\n   * The token's option overrides and `opts.mergeOptions` are folded into the\n   * view restore's ONE updateOptions call (mergeOptions wins over\n   * token.options; the view's own fields win over both). A single render is\n   * deliberate: a second immediate updateOptions would kill the first one's\n   * animation mid-flight, and a chart.type change applied this way morphs\n   * (morph feature) inside the same re-render instead of being re-rendered\n   * over. Consumed by Storyboard for per-beat option payloads.\n   *\n   * @param {any} tokenOrString\n   * @param {{ animate?: boolean, mergeOptions?: Record<string, any> }} [opts]\n   */\n  apply(tokenOrString, opts = {}) {\n    const token = typeof tokenOrString === \"string\" ? Perspectives.decode(tokenOrString) : tokenOrString;\n    if (!token || !token.view) return;\n    this._used = true;\n    enforceLicense(this.w, this.ctx);\n    const animate = opts.animate !== void 0 ? opts.animate : true;\n    const combined = Utils$1.extend(\n      token.options ? Utils$1.clone(token.options) : {},\n      opts.mergeOptions || {}\n    );\n    const mergeOptions = Object.keys(combined).length ? combined : void 0;\n    const targets = this.w.config.chart.group ? this.ctx.getSyncedCharts() : [this.ctx];\n    targets.forEach((chart) => {\n      applyViewState(chart, token.view, { animate, mergeOptions });\n    });\n  }\n  /**\n   * Save the current view under a name in the in-memory registry.\n   * @param {string} name\n   * @returns {string} generated id\n   */\n  save(name2) {\n    const id = `perspective-${++this._counter}`;\n    this._saved.push({ id, name: name2 || id, token: this.capture() });\n    this._used = true;\n    enforceLicense(this.w, this.ctx);\n    return id;\n  }\n  /**\n   * List saved perspectives.\n   * @returns {{ id: string, name: string, token: any }[]}\n   */\n  list() {\n    return this._saved.map((s2) => ({ id: s2.id, name: s2.name, token: s2.token }));\n  }\n  /**\n   * Delete a saved perspective by id.\n   * @param {string} id\n   */\n  delete(id) {\n    const i2 = this._saved.findIndex((s2) => s2.id === id);\n    if (i2 > -1) this._saved.splice(i2, 1);\n  }\n  /** Drop the saved-views registry (called on full destroy). */\n  teardown() {\n    this._saved = [];\n    this._counter = 0;\n  }\n  // ── static, pure helpers (available once the feature is imported) ─────────\n  /**\n   * @param {string} str base64url token\n   * @returns {any | null}\n   */\n  static decode(str) {\n    if (typeof str !== \"string\" || !str) return null;\n    try {\n      const token = JSON.parse(base64urlDecode(str));\n      if (!token || typeof token !== \"object\") return null;\n      if (token.v !== PERSPECTIVE_VERSION) {\n        console.warn(\n          `apexcharts: unsupported perspective version ${token.v} (expected ${PERSPECTIVE_VERSION}).`\n        );\n        return null;\n      }\n      return token;\n    } catch (e2) {\n      console.warn(\"apexcharts: failed to decode perspective token.\", e2);\n      return null;\n    }\n  }\n  /**\n   * Parse a `#apex=<token>` fragment out of an href (or the current location in\n   * a browser). Pure and Node-safe when given an explicit href.\n   * @param {string} [href]\n   * @returns {any | null}\n   */\n  static fromURL(href) {\n    try {\n      const target = href || (Environment.isBrowser() ? window.location.href : \"\");\n      if (!target) return null;\n      const url = new URL(target);\n      const hash = url.hash.replace(/^#/, \"\");\n      if (!hash) return null;\n      const pair = hash.split(\"&\").map((p2) => p2.split(\"=\")).find((p2) => p2[0] === HASH_KEY);\n      if (!pair || pair[1] == null) return null;\n      return Perspectives.decode(decodeURIComponent(pair[1]));\n    } catch (e2) {\n      return null;\n    }\n  }\n}\nApexCharts.registerFeatures({ perspectives: Perspectives });\nApexCharts.perspectives = {\n  /** @param {string} str */\n  decode: (str) => {\n    markPerspectivesTokenDecoded();\n    return Perspectives.decode(str);\n  },\n  /** @param {string} [href] */\n  fromURL: (href) => {\n    markPerspectivesTokenDecoded();\n    return Perspectives.fromURL(href);\n  }\n};\nclass Storyboard {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this._beats = [];\n    this._observer = null;\n    this._activeIndex = -1;\n    this._animate = true;\n    this._warnedNoPerspectives = false;\n    this._used = false;\n  }\n  /**\n   * Bind beats to scroll position. Rebinding replaces the previous binding.\n   * @param {{\n   *   beats?: Array<{ el?: Element, selector?: string, key?: string, view?: any, announce?: string, onEnter?: (chart: any, info: StoryboardBeatInfo) => void }>,\n   *   scroller?: Element | string,\n   *   offset?: number,\n   *   animate?: boolean,\n   * }} [opts]\n   * @returns {number} the number of beats bound\n   */\n  bind(opts = {}) {\n    var _a;\n    this.unbind();\n    if (!Environment.isBrowser()) return 0;\n    const doc = this.ctx.el && this.ctx.el.ownerDocument;\n    if (!doc || typeof IntersectionObserver === \"undefined\") return 0;\n    let root = null;\n    if (opts.scroller) {\n      root = typeof opts.scroller === \"string\" ? doc.querySelector(opts.scroller) : opts.scroller;\n    }\n    this._beats = this._resolveBeats(doc, root, opts.beats);\n    if (!this._beats.length) return 0;\n    this._animate = opts.animate !== false;\n    const offset = Math.min(Math.max((_a = opts.offset) != null ? _a : 0.5, 0), 1);\n    const top = +(offset * 100).toFixed(3);\n    const bottom = +(100 - offset * 100).toFixed(3);\n    this._observer = new IntersectionObserver(\n      (entries) => this._onIntersect(entries),\n      { root, rootMargin: `-${top}% 0px -${bottom}%`, threshold: 0 }\n    );\n    this._beats.forEach((b2) => {\n      var _a2;\n      return (_a2 = this._observer) == null ? void 0 : _a2.observe(b2.el);\n    });\n    this._used = true;\n    enforceLicense(this.w, this.ctx);\n    return this._beats.length;\n  }\n  /**\n   * Normalize the beats option, or auto-discover [data-apex-beat] elements in\n   * document order when no explicit list is given.\n   * @param {Document} doc\n   * @param {Element | null} root\n   * @param {Array<any>} [beatsOpt]\n   * @returns {StoryboardBeat[]}\n   * @private\n   */\n  _resolveBeats(doc, root, beatsOpt) {\n    const beats = [];\n    if (Array.isArray(beatsOpt)) {\n      beatsOpt.forEach((b2, i2) => {\n        var _a, _b;\n        if (!b2) return;\n        const el = b2.el && typeof b2.el === \"object\" ? b2.el : b2.selector ? doc.querySelector(b2.selector) : null;\n        if (!el) {\n          console.warn(\n            `apexcharts: storyboard beat ${i2} has no resolvable element; skipped.`\n          );\n          return;\n        }\n        beats.push({\n          el,\n          key: (_b = (_a = b2.key) != null ? _a : el.getAttribute(\"data-apex-beat\")) != null ? _b : String(i2),\n          view: b2.view,\n          options: b2.options,\n          announce: b2.announce,\n          onEnter: typeof b2.onEnter === \"function\" ? b2.onEnter : void 0\n        });\n      });\n      return beats;\n    }\n    const scope = root || doc;\n    scope.querySelectorAll(\"[data-apex-beat]\").forEach((el, i2) => {\n      beats.push({\n        el,\n        key: el.getAttribute(\"data-apex-beat\") || String(i2),\n        view: el.getAttribute(\"data-apex-view\") || void 0,\n        options: void 0,\n        announce: el.getAttribute(\"data-apex-announce\") || void 0,\n        onEnter: void 0\n      });\n    });\n    return beats;\n  }\n  /**\n   * @param {IntersectionObserverEntry[]} entries\n   * @private\n   */\n  _onIntersect(entries) {\n    entries.forEach((entry) => {\n      const idx = this._beats.findIndex((b2) => b2.el === entry.target);\n      if (idx < 0) return;\n      if (entry.isIntersecting) {\n        this._activate(idx);\n      } else if (idx === this._activeIndex && entry.rootBounds) {\n        if (entry.boundingClientRect.top >= entry.rootBounds.bottom && idx > 0) {\n          this._activate(idx - 1);\n        }\n      }\n    });\n  }\n  /**\n   * Activate a beat: apply its view token, run its callback, announce it and\n   * fire `beatChange`. Idempotent per beat (re-activating the current beat is\n   * a no-op), so IO chatter never re-applies a view.\n   * @param {number} idx\n   * @param {{ animate?: boolean }} [opts]\n   * @private\n   */\n  _activate(idx, opts = {}) {\n    var _a, _b;\n    if (idx === this._activeIndex) return;\n    const beat = this._beats[idx];\n    if (!beat) return;\n    const direction = idx > this._activeIndex ? \"down\" : \"up\";\n    this._activeIndex = idx;\n    const animate = (opts.animate !== void 0 ? opts.animate : this._animate) && !prefersReducedMotion();\n    if (beat.view != null || beat.options) {\n      if (this.ctx.perspectives) {\n        const v2 = (_a = beat.view) != null ? _a : {};\n        const token = typeof v2 === \"string\" || v2.view ? v2 : { view: this._normalizeView(v2) };\n        this.ctx.perspectives.apply(token, {\n          animate,\n          mergeOptions: beat.options\n        });\n      } else if (!this._warnedNoPerspectives) {\n        this._warnedNoPerspectives = true;\n        console.warn(\n          'apexcharts: storyboard beats carry views but the perspectives feature is not bundled. import \"apexcharts/features/storyboard\" (which includes it) or drive beats via onEnter.'\n        );\n      }\n    }\n    const info = { index: idx, key: beat.key, el: beat.el, direction };\n    if (beat.onEnter) beat.onEnter(this.ctx, info);\n    if (beat.announce) this._announce(beat.announce);\n    if (typeof this.w.config.chart.events.beatChange === \"function\") {\n      this.w.config.chart.events.beatChange(this.ctx, info);\n    }\n    (_b = this.ctx.events) == null ? void 0 : _b.fireEvent(\"beatChange\", [this.ctx, info]);\n  }\n  /**\n   * Fill in the parts of a hand-authored (bare) ViewState that would\n   * otherwise LEAK between beats. updateOptions merges objects, so a beat\n   * listing only xaxis annotations would keep a previous beat's point\n   * annotations; padding every annotation kind with an empty array makes\n   * each beat fully describe its own state, which is what allows scrubbing\n   * in both directions. Full tokens (from capture()/encode()) already carry\n   * the complete set and never pass through here.\n   * @param {any} view\n   * @returns {any}\n   * @private\n   */\n  _normalizeView(view) {\n    const provided = view.annotations && view.annotations.static || {};\n    return __spreadProps(__spreadValues({}, view), {\n      annotations: {\n        static: __spreadValues({\n          points: [],\n          xaxis: [],\n          yaxis: [],\n          texts: [],\n          images: []\n        }, provided),\n        dynamic: view.annotations && view.annotations.dynamic || []\n      }\n    });\n  }\n  /**\n   * Programmatically jump to a beat by index or author key (also usable\n   * without scrolling, e.g. from next/prev buttons).\n   * @param {number | string} indexOrKey\n   * @param {{ animate?: boolean }} [opts]\n   */\n  goTo(indexOrKey, opts = {}) {\n    const idx = typeof indexOrKey === \"number\" ? indexOrKey : this._beats.findIndex((b2) => b2.key === indexOrKey);\n    if (idx >= 0 && idx < this._beats.length) this._activate(idx, opts);\n  }\n  /**\n   * @returns {{ index: number, key: string | null } | null} the active beat\n   */\n  current() {\n    if (this._activeIndex < 0) return null;\n    const beat = this._beats[this._activeIndex];\n    return { index: this._activeIndex, key: beat ? beat.key : null };\n  }\n  /** Disconnect the observer and drop the beat list. */\n  unbind() {\n    if (this._observer) {\n      this._observer.disconnect();\n      this._observer = null;\n    }\n    this._beats = [];\n    this._activeIndex = -1;\n    this._used = false;\n    enforceLicense(this.w, this.ctx);\n  }\n  /** Full-destroy cleanup (called from Destroy). */\n  teardown() {\n    this.unbind();\n  }\n  /**\n   * Push a beat's announcement to the chart's visually-hidden aria-live\n   * status region so screen-reader users follow the story too. No-op when\n   * announcements are disabled or the region is absent.\n   * @param {string} message\n   * @private\n   */\n  _announce(message) {\n    const w2 = this.w;\n    if (!w2.config.chart.accessibility.announcements.enabled) return;\n    const baseEl = w2.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({ storyboard: Storyboard });\nfunction isEditableTarget(node) {\n  if (!node) return false;\n  const tag = node.tagName;\n  return tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\" || node.isContentEditable === true;\n}\nclass History {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.stack = [];\n    this.pointer = -1;\n    this.applying = false;\n    this._batching = false;\n    this._counter = 0;\n    this._coalesceTimer = null;\n    this._settleTimer = null;\n    this._pendingLabel = void 0;\n    this._keydownTarget = null;\n    this._pointerTarget = null;\n    this._engaged = false;\n    this._wired = false;\n    this._readConfig();\n    this._onMounted = this._onMounted.bind(this);\n    this._onUpdated = this._onUpdated.bind(this);\n    this._onSelection = this._onSelection.bind(this);\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onPointerDown = this._onPointerDown.bind(this);\n    this.init();\n  }\n  /**\n   * (Re)read chart.history config. Called at construction and again on every\n   * mounted/updated event so `updateOptions({ chart: { history: {...} } })`\n   * takes effect at runtime: enabling wires the keyboard + starts capturing,\n   * disabling stops capturing (the stack is kept for a later re-enable).\n   */\n  _readConfig() {\n    const w2 = this.w;\n    const cfg = w2.config.chart && w2.config.chart.history || {};\n    this.enabled = !!cfg.enabled;\n    this.maxDepth = cfg.maxDepth > 0 ? cfg.maxDepth : 100;\n    this.coalesceMs = cfg.coalesceMs != null ? cfg.coalesceMs : 250;\n    this.keyboard = cfg.keyboard !== false;\n  }\n  /** Re-sync config, then wire/unwire the keyboard to match. */\n  _syncConfig() {\n    this._readConfig();\n    if (this.enabled && this.keyboard) this._wireKeyboard();\n    else this._unwireKeyboard();\n  }\n  init() {\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"mounted\", this._onMounted);\n    this.ctx.addEventListener(\"updated\", this._onUpdated);\n    this.ctx.addEventListener(\"scrolled\", this._onUpdated);\n    this.ctx.addEventListener(\"dataPointSelection\", this._onSelection);\n    if (this.enabled && this.keyboard) this._wireKeyboard();\n  }\n  /**\n   * Keyboard: Cmd/Ctrl+Z = undo, Shift+Cmd/Ctrl+Z or Ctrl+Y = redo. Bound on\n   * the document (not the chart element) because pointer gestures that create\n   * an undo step (annotation drag, zoom, pan) call preventDefault and so never\n   * move focus into the chart, leaving an el-scoped listener unreachable. To\n   * stay non-intrusive it acts only when this chart is \"engaged\" (see\n   * _onKeyDown): a capture-phase pointerdown marks engagement so the shortcut\n   * follows the chart the user last touched, and defers to text editing.\n   */\n  _wireKeyboard() {\n    if (this._keydownTarget) return;\n    const el = (\n      /** @type {any} */\n      this.ctx.el\n    );\n    const doc = el && el.ownerDocument;\n    if (!Environment.isBrowser() || !doc) return;\n    doc.addEventListener(\"keydown\", this._onKeyDown);\n    doc.addEventListener(\"pointerdown\", this._onPointerDown, true);\n    doc.addEventListener(\"mousedown\", this._onPointerDown, true);\n    this._keydownTarget = doc;\n    this._pointerTarget = doc;\n  }\n  _unwireKeyboard() {\n    if (this._keydownTarget) {\n      this._keydownTarget.removeEventListener(\"keydown\", this._onKeyDown);\n      this._keydownTarget = null;\n    }\n    if (this._pointerTarget) {\n      this._pointerTarget.removeEventListener(\"pointerdown\", this._onPointerDown, true);\n      this._pointerTarget.removeEventListener(\"mousedown\", this._onPointerDown, true);\n      this._pointerTarget = null;\n    }\n    this._engaged = false;\n  }\n  // ─── Event handlers ─────────────────────────────────────────────────────\n  _onMounted() {\n    this._syncConfig();\n    if (!this.enabled) return;\n    if (this.stack.length === 0) this._commit(\"initial\", true);\n  }\n  _onUpdated() {\n    this._syncConfig();\n    if (!this.enabled) return;\n    if (this.applying) {\n      this._refreshSettle();\n      return;\n    }\n    this._schedule(\"update\");\n  }\n  _onSelection() {\n    if (!this.enabled || this.applying) return;\n    this._schedule(\"selection\");\n  }\n  /**\n   * Mark whether the chart is engaged: a capture-phase pointerdown inside `el`\n   * engages it (runs before feature handlers stopPropagation), one elsewhere\n   * releases it. Capture phase so an annotation/zoom gesture that stops\n   * propagation still registers.\n   * @param {any} e\n   */\n  _onPointerDown(e2) {\n    const el = (\n      /** @type {any} */\n      this.ctx.el\n    );\n    this._engaged = !!(el && e2.target && el.contains(e2.target));\n  }\n  /**\n   * @param {KeyboardEvent} e\n   */\n  _onKeyDown(e2) {\n    if (!(e2.metaKey || e2.ctrlKey)) return;\n    const key = (e2.key || \"\").toLowerCase();\n    if (key !== \"z\" && key !== \"y\") return;\n    const el = (\n      /** @type {any} */\n      this.ctx.el\n    );\n    if (!el) return;\n    const doc = el.ownerDocument;\n    const active = doc && doc.activeElement;\n    if (isEditableTarget(active)) return;\n    if (!(el.contains(active) || this._engaged)) return;\n    const redo = key === \"y\" || e2.shiftKey;\n    e2.preventDefault();\n    if (redo) this.redo();\n    else this.undo();\n  }\n  // ─── Capture (coalesced) ────────────────────────────────────────────────\n  /**\n   * @param {string} label\n   */\n  _schedule(label) {\n    if (this.applying || this._batching || !this.enabled) return;\n    this._pendingLabel = label;\n    if (this.coalesceMs > 0 && Environment.isBrowser()) {\n      clearTimeout(this._coalesceTimer);\n      this._coalesceTimer = setTimeout(\n        () => this._commit(this._pendingLabel),\n        this.coalesceMs\n      );\n    } else {\n      this._commit(label);\n    }\n  }\n  /**\n   * @param {string} [label]\n   * @param {boolean} [force] bypass the applying/batching guard (baseline / transaction)\n   */\n  _commit(label, force) {\n    clearTimeout(this._coalesceTimer);\n    this._coalesceTimer = null;\n    if (!force && (this.applying || this._batching)) return;\n    const cp = this._capture(label);\n    const current = this.stack[this.pointer];\n    if (current && current.sig === cp.sig) return;\n    if (this.pointer < this.stack.length - 1) {\n      this.stack.splice(this.pointer + 1);\n    }\n    this.stack.push(cp);\n    this.pointer = this.stack.length - 1;\n    while (this.stack.length > this.maxDepth) {\n      this.stack.shift();\n      this.pointer--;\n    }\n    this._emitChange();\n  }\n  /**\n   * @param {string} [label]\n   */\n  _capture(label) {\n    const view = captureViewState(this.w, this.ctx);\n    const { config, seriesSig } = this._cloneConfigCOW();\n    return {\n      id: `hist-${++this._counter}`,\n      view,\n      config,\n      seriesSig,\n      label: label || \"change\",\n      at: Environment.isBrowser() ? Date.now() : 0,\n      origin: \"local\",\n      // reserved for per-user scoping (Live Rooms)\n      sig: this._signature(view, config)\n    };\n  }\n  /**\n   * Clone w.config, sharing the previous checkpoint's cloned series when the\n   * live series CONTENT is unchanged (copy-on-write). Sharing is decided by a\n   * value signature, not reference identity: callers commonly mutate a kept\n   * series array in place and pass the same reference back to updateSeries, and\n   * an identity check would share a stale clone for exactly that case. The\n   * stringify is not extra cost: _signature already serialises the series as\n   * part of dedup.\n   * @returns {{ config: any, seriesSig: string|null }}\n   */\n  _cloneConfigCOW() {\n    const w2 = this.w;\n    const prev = this.stack[this.pointer];\n    let seriesSig = null;\n    try {\n      seriesSig = JSON.stringify(w2.config.series);\n    } catch (e2) {\n      seriesSig = null;\n    }\n    let cloned;\n    if (prev && seriesSig !== null && prev.seriesSig === seriesSig) {\n      const _a = w2.config, { series: _series } = _a, rest = __objRest(_a, [\"series\"]);\n      cloned = Utils$1.clone(rest);\n      cloned.series = prev.config.series;\n    } else {\n      cloned = Utils$1.clone(w2.config);\n    }\n    return { config: cloned, seriesSig };\n  }\n  /**\n   * Data-level signature for dedup. Functions are dropped by JSON (fine: a\n   * checkpoint whose only change is a function reference is not a meaningful\n   * undo step). Runs once per committed checkpoint, not per raw event.\n   * @param {any} view\n   * @param {any} config\n   * @returns {string}\n   */\n  _signature(view, config) {\n    try {\n      return JSON.stringify(view) + \"|\" + JSON.stringify(config);\n    } catch (e2) {\n      return `nosig-${this._counter}`;\n    }\n  }\n  // ─── Restore ────────────────────────────────────────────────────────────\n  /**\n   * @param {any} cp\n   * @param {boolean} animate\n   */\n  _restore(cp, animate) {\n    if (!cp) return;\n    this.applying = true;\n    let p2;\n    try {\n      this.ctx.clearAnnotations();\n      p2 = this.ctx.updateOptions(Utils$1.clone(cp.config), false, animate, false, false);\n    } catch (e2) {\n      this.applying = false;\n      throw e2;\n    }\n    Promise.resolve(p2).then(() => {\n      if (this.w.globals.isDestroyed) {\n        this.applying = false;\n        return;\n      }\n      applyViewInteraction(this.ctx, cp.view);\n      this._refreshSettle();\n      this._emitChange();\n    }).catch(() => {\n      this.applying = false;\n    });\n  }\n  /**\n   * Hold `applying` true until the restore's burst of async 'updated' events\n   * has drained (one macrotask after the last one). Refreshed by _onUpdated.\n   */\n  _refreshSettle() {\n    if (!Environment.isBrowser()) {\n      this.applying = false;\n      return;\n    }\n    clearTimeout(this._settleTimer);\n    this._settleTimer = setTimeout(() => {\n      this.applying = false;\n    }, 0);\n  }\n  // ─── Public API ─────────────────────────────────────────────────────────\n  /**\n   * Commit a checkpoint of the current state now (a discrete undo step). Used by\n   * callers that mutate `w.config` without going through a full re-render (e.g.\n   * Ink Layer's targeted annotation redraws, which fire no 'updated' event).\n   * No-op when disabled or while a restore is applying.\n   * @param {string} [label]\n   */\n  snapshot(label) {\n    if (!this.enabled || this.applying) return;\n    this._commit(label || \"change\");\n  }\n  /**\n   * @param {boolean} [animate]\n   */\n  undo(animate = true) {\n    if (!this.canUndo()) return;\n    this.pointer--;\n    this._restore(this.stack[this.pointer], animate);\n  }\n  /**\n   * @param {boolean} [animate]\n   */\n  redo(animate = true) {\n    if (!this.canRedo()) return;\n    this.pointer++;\n    this._restore(this.stack[this.pointer], animate);\n  }\n  canUndo() {\n    return this.pointer > 0;\n  }\n  canRedo() {\n    return this.pointer > -1 && this.pointer < this.stack.length - 1;\n  }\n  /**\n   * @param {string} id\n   * @param {boolean} [animate]\n   */\n  jump(id, animate = true) {\n    const idx = this.stack.findIndex((c2) => c2.id === id);\n    if (idx === -1 || idx === this.pointer) return;\n    this.pointer = idx;\n    this._restore(this.stack[idx], animate);\n  }\n  /** Clear the history, keeping the current state as the new baseline. */\n  clear() {\n    clearTimeout(this._coalesceTimer);\n    this._coalesceTimer = null;\n    const current = this.stack[this.pointer];\n    this.stack = current ? [current] : [];\n    this.pointer = this.stack.length - 1;\n    this._emitChange();\n  }\n  /**\n   * Group multiple edits into a single undo step. `fn` may be async; await your\n   * updateOptions/updateSeries calls inside it so the intermediate 'updated'\n   * events are suppressed and only one checkpoint is committed afterwards.\n   * @param {() => (void | Promise<any>)} fn\n   * @param {{ label?: string }} [opts]\n   * @returns {Promise<void>}\n   */\n  transaction(fn, opts = {}) {\n    if (typeof fn !== \"function\") return Promise.resolve();\n    const wasBatching = this._batching;\n    this._batching = true;\n    return Promise.resolve().then(() => fn()).finally(() => {\n      this._batching = wasBatching;\n      if (!wasBatching) this._commit(opts.label || \"transaction\", true);\n    });\n  }\n  /**\n   * @returns {{ id: string, label: string, at: number }[]}\n   */\n  entries() {\n    return this.stack.map((c2) => ({ id: c2.id, label: c2.label, at: c2.at }));\n  }\n  /** Lightweight state for the historyChange event / a history-rail UI. */\n  state() {\n    return {\n      canUndo: this.canUndo(),\n      canRedo: this.canRedo(),\n      index: this.pointer,\n      length: this.stack.length\n    };\n  }\n  _emitChange() {\n    this.ctx.events.fireEvent(\"historyChange\", [this.ctx, this.state()]);\n  }\n  /** Drop the stack + detach listeners (called on full destroy). */\n  teardown() {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    clearTimeout(this._coalesceTimer);\n    clearTimeout(this._settleTimer);\n    this._coalesceTimer = null;\n    this._settleTimer = null;\n    this._unwireKeyboard();\n    if (this._wired) {\n      (_b = (_a = this.ctx).removeEventListener) == null ? void 0 : _b.call(_a, \"mounted\", this._onMounted);\n      (_d = (_c = this.ctx).removeEventListener) == null ? void 0 : _d.call(_c, \"updated\", this._onUpdated);\n      (_f = (_e = this.ctx).removeEventListener) == null ? void 0 : _f.call(_e, \"scrolled\", this._onUpdated);\n      (_h = (_g = this.ctx).removeEventListener) == null ? void 0 : _h.call(_g, \"dataPointSelection\", this._onSelection);\n    }\n    this.stack = [];\n    this.pointer = -1;\n    this._wired = false;\n  }\n}\nApexCharts.registerFeatures({ history: History });\nconst WEAVE_API_VERSION = 1;\nconst PLUGIN_CHART_METHODS = [\n  \"updateOptions\",\n  \"updateSeries\",\n  \"appendData\",\n  \"appendSeries\",\n  \"toggleSeries\",\n  \"showSeries\",\n  \"hideSeries\",\n  \"highlightSeries\",\n  \"isSeriesHidden\",\n  \"zoomX\",\n  \"addXaxisAnnotation\",\n  \"addYaxisAnnotation\",\n  \"addPointAnnotation\",\n  \"clearAnnotations\",\n  \"removeAnnotation\",\n  \"dataURI\",\n  \"exportToCSV\"\n];\nfunction buildBoundPublicMethods(ctx) {\n  const out = {};\n  PLUGIN_CHART_METHODS.forEach((m2) => {\n    if (typeof ctx[m2] === \"function\") out[m2] = ctx[m2].bind(ctx);\n  });\n  return Object.freeze(out);\n}\nfunction makeLayerHandle(g2, graphics) {\n  const add = (el) => {\n    if (el) g2.add(el);\n    return el;\n  };\n  const handle = {\n    get node() {\n      return g2.node;\n    },\n    /** @param {any} opts */\n    path(opts = {}) {\n      const {\n        d = \"\",\n        stroke = \"#000\",\n        width = 1,\n        fill = \"none\",\n        opacity = 1,\n        dash = 0,\n        className = \"\"\n      } = opts;\n      return add(\n        graphics.drawPath({\n          d,\n          stroke,\n          strokeWidth: width,\n          fill,\n          fillOpacity: fill === \"none\" ? 0 : opacity,\n          strokeOpacity: opacity,\n          strokeDashArray: dash,\n          classes: className\n        })\n      );\n    },\n    /** @param {any} opts */\n    line(opts = {}) {\n      const { x1, y1, x2, y2, stroke = \"#000\", width = 1, dash = 0 } = opts;\n      return add(graphics.drawLine(x1, y1, x2, y2, stroke, dash, width));\n    },\n    /** @param {any} opts */\n    rect(opts = {}) {\n      const {\n        x = 0,\n        y = 0,\n        w: w2 = 0,\n        h: h2 = 0,\n        r: r2 = 0,\n        fill = \"#000\",\n        stroke = null,\n        opacity = 1\n      } = opts;\n      return add(\n        graphics.drawRect(\n          x,\n          y,\n          w2,\n          h2,\n          r2,\n          fill,\n          opacity,\n          stroke != null ? 1 : null,\n          stroke\n        )\n      );\n    },\n    /** @param {any} opts */\n    circle(opts = {}) {\n      const { cx = 0, cy = 0, r: r2 = 0, fill = \"#000\", stroke = null } = opts;\n      return add(\n        graphics.drawCircle(r2, { cx, cy, fill, stroke: stroke || \"none\" })\n      );\n    },\n    /** @param {any} opts */\n    text(opts = {}) {\n      const {\n        x = 0,\n        y = 0,\n        text = \"\",\n        color,\n        size,\n        anchor = \"start\",\n        weight\n      } = opts;\n      return add(\n        graphics.drawText({\n          x,\n          y,\n          text,\n          textAnchor: anchor,\n          fontSize: size,\n          foreColor: color,\n          fontWeight: weight\n        })\n      );\n    },\n    clear() {\n      const node = g2.node;\n      while (node.firstChild) node.removeChild(node.firstChild);\n      return handle;\n    }\n  };\n  return handle;\n}\nfunction buildPluginAPI(host, record) {\n  const ctx = host.ctx;\n  const w2 = host.w;\n  const api = {\n    name: record.def.name,\n    version: WEAVE_API_VERSION,\n    // Live: reconcile refreshes record.options when the chart's plugins config\n    // changes, so updateOptions({ plugins: [{ name, options }] }) reconfigures\n    // an active plugin in place. The returned object is frozen.\n    get options() {\n      return record.options;\n    },\n    // ── lifecycle subscription ──\n    /**\n     * @param {string} hook\n     * @param {Function} fn\n     */\n    on(hook, fn) {\n      const m2 = record.handlers;\n      if (!m2.has(hook)) m2.set(hook, []);\n      m2.get(hook).push(fn);\n      return api;\n    },\n    /**\n     * @param {string} hook\n     * @param {Function} fn\n     */\n    off(hook, fn) {\n      const a2 = record.handlers.get(hook);\n      if (a2) {\n        const i2 = a2.indexOf(fn);\n        if (i2 > -1) a2.splice(i2, 1);\n      }\n      return api;\n    },\n    // ── per-plugin, per-chart scratch state (survives updates, dropped on\n    //    destroy). The api object is frozen, but this object is mutable. ──\n    store: {},\n    // ── drawing (renderer-agnostic) ──\n    // Call this INSIDE each draw handler: the host wipes plugin layers at the\n    // start of every draw pass, so a handle cached across draws points at a\n    // detached node and its writes vanish silently.\n    /** @param {any} [opts] */\n    layer(opts) {\n      return host._layer(record.def.name, opts || {});\n    },\n    // ── reads ──\n    get scales() {\n      return host._currentScales;\n    },\n    // Served from the per-dispatch snapshot when one exists (invalidated at\n    // every dispatch), so reading api.data in a loop does not rebuild the\n    // point arrays on each property access.\n    get data() {\n      return host._lastData || (host._lastData = host._dataSnapshot());\n    },\n    theme: Object.freeze({\n      get mode() {\n        return w2.config.theme.mode;\n      },\n      get foreColor() {\n        return w2.config.chart.foreColor;\n      },\n      /** @param {number} i */\n      seriesColor(i2) {\n        return w2.globals.colors[i2];\n      },\n      /** @param {string} name */\n      token(name2) {\n        return host._token(name2);\n      }\n    }),\n    // ── curated actions (bound public methods only; NEVER raw w) ──\n    chart: buildBoundPublicMethods(ctx),\n    // ── custom events out to the host app ──\n    /**\n     * Fires as `plugin:<pluginName>:<name>` on the chart's event bus. The\n     * namespace is not optional: the bus also carries the internal lifecycle\n     * events ('updated', 'mounted', ...), and an un-namespaced emit could\n     * trigger every internal subscriber (history capture, re-render hooks).\n     * Listen with chart.addEventListener('plugin:myplugin:myevent', fn).\n     * @param {string} name\n     * @param {any} [detail]\n     */\n    emit(name2, detail) {\n      ctx.events.fireEvent(`plugin:${record.def.name}:${name2}`, [ctx, detail]);\n    },\n    // ── host element (read; lazy: baseEl is not set until render) ──\n    get el() {\n      return w2.dom.baseEl;\n    }\n  };\n  return Object.freeze(api);\n}\nclass WeaveHost {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.active = [];\n    this._layers = /* @__PURE__ */ new Map();\n    this._currentScales = null;\n    this._lastPluginsRef = null;\n    this._lastData = null;\n    this._updatedWired = false;\n    this._onUpdated = this._onUpdated.bind(this);\n    this._init();\n  }\n  _init() {\n    const list = this.w.config.plugins || [];\n    list.map((entry, i2) => ({\n      entry,\n      order: entry.order != null ? entry.order : i2\n    })).sort((a2, b2) => a2.order - b2.order).forEach((o2) => this._activate(o2.entry));\n    this._lastPluginsRef = this.w.config.plugins;\n    this._wireUpdated();\n  }\n  _wireUpdated() {\n    if (this._updatedWired) return;\n    this.ctx.addEventListener(\"updated\", this._onUpdated);\n    this._updatedWired = true;\n  }\n  _onUpdated() {\n    this.dispatch(\"afterUpdate\", { pass: \"update\" });\n  }\n  /**\n   * @param {any} entry { name, options?, order? }\n   */\n  _activate(entry) {\n    const def = getPlugin(entry.name);\n    if (!def) {\n      console.error(`[apexcharts] plugin \"${entry.name}\" is not registered.`);\n      return;\n    }\n    const v2 = def.apiVersion != null ? def.apiVersion : 1;\n    if (Math.trunc(v2) !== WEAVE_API_VERSION) {\n      console.error(\n        `[apexcharts] plugin \"${def.name}\" targets Weave API v${v2}, host is v${WEAVE_API_VERSION}; skipped.`\n      );\n      return;\n    }\n    const record = {\n      def,\n      options: Object.freeze(__spreadValues({}, entry.options || {})),\n      handlers: /* @__PURE__ */ new Map(),\n      disabled: false,\n      failures: 0,\n      api: null\n    };\n    record.api = buildPluginAPI(this, record);\n    this.active.push(record);\n    this._guard(record, \"setup\", () => def.setup(record.api));\n  }\n  /**\n   * @param {string} hook\n   * @param {{ pass?: string, xyRatios?: any }} [extra]\n   */\n  dispatch(hook, extra) {\n    if (hook === \"draw\") {\n      this._reconcile();\n      this._resetLayers();\n    }\n    this._lastData = null;\n    if (!this.active.length) return;\n    if (hook === \"afterParse\") {\n      this._currentScales = null;\n    } else if (extra && \"xyRatios\" in extra) {\n      this._setScales(extra.xyRatios);\n    }\n    const pass = extra && extra.pass || \"full\";\n    let data = null;\n    for (const record of this.active) {\n      if (record.disabled) continue;\n      const fns = record.handlers.get(hook);\n      if (!fns || !fns.length) continue;\n      if (data === null) {\n        data = this._dataSnapshot();\n        this._lastData = data;\n      }\n      const payload = {\n        api: record.api,\n        scales: this._currentScales,\n        data,\n        pass,\n        hook\n      };\n      for (const fn of fns.slice()) {\n        this._guard(record, hook, () => fn(payload));\n      }\n    }\n  }\n  /**\n   * @param {any} record\n   * @param {string} where\n   * @param {Function} fn\n   */\n  _guard(record, where, fn) {\n    if (record.disabled) return;\n    try {\n      fn();\n    } catch (e2) {\n      console.error(\n        `[apexcharts] plugin \"${record.def.name}\" threw in \"${where}\":`,\n        e2\n      );\n      record.failures = (record.failures || 0) + 1;\n      if (record.failures >= 3) {\n        record.disabled = true;\n        console.error(\n          `[apexcharts] plugin \"${record.def.name}\" disabled after repeated errors.`\n        );\n      }\n    }\n  }\n  // ─── Scales facade ──────────────────────────────────────────────────────\n  /**\n   * Build api.scales from the SAME xyRatios the series were drawn with, so\n   * plugin pixels align with series pixels by construction.\n   * @param {any} xyRatios\n   */\n  _setScales(xyRatios) {\n    const w2 = this.w;\n    const gl = w2.globals;\n    const L2 = w2.layout;\n    if (!xyRatios || !gl.axisCharts) {\n      this._currentScales = null;\n      return;\n    }\n    const xRatio = xyRatios.xRatio;\n    const yRatio = xyRatios.yRatio || [];\n    const yr = (axis) => yRatio[axis] != null ? yRatio[axis] : yRatio[0];\n    const maxY = (axis) => gl.maxYArr[axis] != null ? gl.maxYArr[axis] : gl.maxY;\n    const minY = (axis) => gl.minYArr[axis] != null ? gl.minYArr[axis] : gl.minY;\n    this._currentScales = {\n      /** @param {number} v */\n      x: (v2) => L2.translateX + (v2 - gl.minX) / xRatio,\n      /**\n       * @param {number} v\n       * @param {number} [axis]\n       */\n      y: (v2, axis = 0) => L2.translateY + (maxY(axis) - v2) / yr(axis),\n      domainX: [gl.minX, gl.maxX],\n      /** @param {number} [axis] */\n      domainY: (axis = 0) => [minY(axis), maxY(axis)],\n      gridWidth: L2.gridWidth,\n      gridHeight: L2.gridHeight,\n      ratios: xyRatios\n    };\n  }\n  // ─── Read-only data snapshot ────────────────────────────────────────────\n  /**\n   * @returns {any[]} defensive per-series snapshot (never the live slice)\n   */\n  _dataSnapshot() {\n    const w2 = this.w;\n    const gl = w2.globals;\n    const series = w2.seriesData.series || [];\n    const seriesX = w2.seriesData.seriesX || [];\n    return series.map((sData, i2) => {\n      const xs = seriesX[i2] || [];\n      const points = (sData || []).map((y, j) => ({\n        x: xs[j] != null ? xs[j] : j,\n        y\n      }));\n      return {\n        name: gl.seriesNames ? gl.seriesNames[i2] : void 0,\n        hidden: (gl.collapsedSeriesIndices || []).includes(i2),\n        color: gl.colors ? gl.colors[i2] : void 0,\n        points\n      };\n    });\n  }\n  // ─── Theme tokens ───────────────────────────────────────────────────────\n  /**\n   * @param {string} name\n   * @returns {any}\n   */\n  _token(name2) {\n    const w2 = this.w;\n    const gl = w2.globals;\n    switch (name2) {\n      case \"foreColor\":\n        return w2.config.chart.foreColor;\n      case \"background\":\n        return w2.config.chart.background;\n      case \"accent\":\n      case \"primary\":\n        return gl.colors ? gl.colors[0] : void 0;\n      default:\n        if (/^series-\\d+$/.test(name2)) {\n          return gl.colors ? gl.colors[Number(name2.split(\"-\")[1])] : void 0;\n        }\n        return void 0;\n    }\n  }\n  // ─── Layers ─────────────────────────────────────────────────────────────\n  /**\n   * @param {string} name\n   * @param {{ z?: 'front'|'behind', className?: string }} opts\n   */\n  _layer(name2, { z = \"front\", className = \"\" } = {}) {\n    let g2 = this._layers.get(name2);\n    if (!g2) {\n      g2 = this.ctx.graphics.group({\n        class: `apexcharts-plugin-${name2} ${className}`.trim()\n      });\n      const parent = this.w.dom.elGraphical.node;\n      if (z === \"behind\") parent.insertBefore(g2.node, parent.firstChild);\n      else parent.appendChild(g2.node);\n      g2.node.setAttribute(\"aria-hidden\", \"true\");\n      this._layers.set(name2, g2);\n    }\n    return makeLayerHandle(g2, this.ctx.graphics);\n  }\n  /**\n   * Remove all plugin layers. Run at the start of every `draw` because\n   * fastUpdate only removes series/data-label groups (not arbitrary plugin\n   * groups), so without this, fast-path redraws would duplicate plugin output.\n   */\n  _resetLayers() {\n    const el = this.w.dom.elGraphical;\n    const parent = el && el.node;\n    if (parent) {\n      const groups = parent.querySelectorAll('g[class*=\"apexcharts-plugin-\"]');\n      Array.prototype.forEach.call(groups, (n2) => n2.remove());\n    }\n    this._layers.clear();\n  }\n  // ─── Config-change reconciliation ───────────────────────────────────────\n  /**\n   * Diff w.config.plugins by name: teardown removed, activate added; unchanged\n   * plugins keep their instance + store, but their `options` are refreshed from\n   * the new entry (api.options is a live getter), so\n   * updateOptions({ plugins: [{ name, options }] }) reconfigures in place.\n   * Skipped when the plugins array reference is unchanged (fast redraws), so it\n   * costs nothing on hover.\n   */\n  _reconcile() {\n    const plugins = this.w.config.plugins || [];\n    if (plugins === this._lastPluginsRef) return;\n    this._lastPluginsRef = plugins;\n    const desired = new Map(\n      plugins.map((e2, i2) => [\n        e2.name,\n        { entry: e2, order: e2.order != null ? e2.order : i2 }\n      ])\n    );\n    for (let i2 = this.active.length - 1; i2 >= 0; i2--) {\n      const r2 = this.active[i2];\n      const want = desired.get(r2.def.name);\n      if (!want) {\n        this._guard(r2, \"destroy\", () => r2.def.destroy && r2.def.destroy(r2.api));\n        this.active.splice(i2, 1);\n      } else {\n        r2.options = Object.freeze(__spreadValues({}, want.entry.options || {}));\n      }\n    }\n    const activeNames = new Set(this.active.map((r2) => r2.def.name));\n    const toAdd = [];\n    desired.forEach((v2, name2) => {\n      if (!activeNames.has(name2)) toAdd.push(v2);\n    });\n    toAdd.sort((a2, b2) => a2.order - b2.order).forEach((v2) => this._activate(v2.entry));\n  }\n  /**\n   * @param {boolean} [isUpdating]\n   */\n  teardown(isUpdating) {\n    if (!isUpdating) {\n      this.dispatch(\"destroy\");\n      for (const record of this.active) {\n        this._guard(record, \"destroy\", () => record.def.destroy && record.def.destroy(record.api));\n      }\n      this.active = [];\n      if (this._updatedWired) {\n        this.ctx.removeEventListener && this.ctx.removeEventListener(\"updated\", this._onUpdated);\n        this._updatedWired = false;\n      }\n    }\n    this._layers.clear();\n  }\n}\nApexCharts.registerFeatures({ weave: WeaveHost });\nconst STYLE_KEYS = {\n  fill: \"fill\",\n  stroke: \"stroke\",\n  \"stroke-width\": \"strokeWidth\",\n  \"stroke-dasharray\": \"strokeDash\",\n  \"stroke-linecap\": \"lineCap\",\n  \"fill-opacity\": \"fillOpacity\",\n  \"stroke-opacity\": \"strokeOpacity\",\n  \"fill-rule\": \"fillRule\"\n};\nconst NEVER = Symbol(\"never\");\nconst SHAPE_ID = {\n  circle: 0,\n  square: 1,\n  rect: 1,\n  triangle: 2,\n  diamond: 3,\n  star: 4,\n  sparkle: 5,\n  cross: 6,\n  plus: 7,\n  line: 8\n};\nconst SHAPE_NAME = [\n  \"circle\",\n  \"square\",\n  \"triangle\",\n  \"diamond\",\n  \"star\",\n  \"sparkle\",\n  \"cross\",\n  \"plus\",\n  \"line\"\n];\nconst NOOP_RUNNER = {\n  /** @returns {any} */\n  attr() {\n    return NOOP_RUNNER;\n  },\n  plot() {\n    return NOOP_RUNNER;\n  },\n  during() {\n    return NOOP_RUNNER;\n  },\n  after(fn) {\n    if (typeof fn === \"function\") fn();\n    return NOOP_RUNNER;\n  },\n  animate() {\n    return NOOP_RUNNER;\n  },\n  delay() {\n    return NOOP_RUNNER;\n  },\n  loop() {\n    return NOOP_RUNNER;\n  },\n  finish() {\n    return NOOP_RUNNER;\n  },\n  stop() {\n    return NOOP_RUNNER;\n  }\n};\nconst SHARED_MARKER_NODE = {\n  nodeName: \"path\",\n  style: {},\n  classList: { add() {\n  }, remove() {\n  }, toggle() {\n  }, contains: () => false },\n  setAttribute() {\n  },\n  getAttribute: () => null,\n  removeAttribute() {\n  },\n  hasAttribute: () => false,\n  addEventListener() {\n  },\n  removeEventListener() {\n  },\n  appendChild() {\n  },\n  getBBox: () => ({ x: 0, y: 0, width: 0, height: 0 })\n};\nconst SHARED_GROUP = {\n  __isCanvasMark: true,\n  node: {\n    nodeName: \"g\",\n    instance: null,\n    style: {},\n    classList: { add() {\n    }, remove() {\n    }, toggle() {\n    }, contains: () => false },\n    setAttribute() {\n    },\n    getAttribute: () => null,\n    removeAttribute() {\n    },\n    addEventListener() {\n    },\n    removeEventListener() {\n    },\n    appendChild() {\n    },\n    getBBox: () => ({ x: 0, y: 0, width: 0, height: 0 })\n  },\n  /** @returns {any} */\n  attr() {\n    return SHARED_GROUP;\n  },\n  add() {\n    return SHARED_GROUP;\n  },\n  addTo() {\n    return SHARED_GROUP;\n  },\n  remove() {\n    return SHARED_GROUP;\n  },\n  clear() {\n    return SHARED_GROUP;\n  },\n  css() {\n    return SHARED_GROUP;\n  },\n  hide() {\n    return SHARED_GROUP;\n  },\n  show() {\n    return SHARED_GROUP;\n  },\n  removeClass() {\n    return SHARED_GROUP;\n  },\n  animate() {\n    return NOOP_RUNNER;\n  }\n};\nclass CanvasMarkerRef {\n  /**\n   * @param {CanvasGraphics} g\n   * @param {number} i\n   */\n  constructor(g2, i2) {\n    this.__isCanvasMark = true;\n    this._g = g2;\n    this._i = i2;\n  }\n  get node() {\n    return SHARED_MARKER_NODE;\n  }\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   * @returns {any}\n   */\n  attr(a2, v2) {\n    if (typeof a2 === \"string\") {\n      if (a2 === \"fill\" && v2 !== void 0) this._g._setMarkerFill(this._i, v2);\n      return v2 === void 0 ? null : this;\n    }\n    if (a2 && a2.fill !== void 0) this._g._setMarkerFill(this._i, a2.fill);\n    return this;\n  }\n  /** @param {any} _c */\n  add(_c) {\n    return this;\n  }\n  /** @param {any} _p */\n  addTo(_p) {\n    return this;\n  }\n  remove() {\n    return this;\n  }\n  /** @param {any} _s */\n  css(_s) {\n    return this;\n  }\n  /** @param {any} _v */\n  fill(_v) {\n    if (_v !== void 0) this._g._setMarkerFill(this._i, _v);\n    return this;\n  }\n  /** @param {any} _v */\n  stroke(_v) {\n    return this;\n  }\n  hide() {\n    return this;\n  }\n  show() {\n    return this;\n  }\n  /** @param {string} _c */\n  removeClass(_c) {\n    return this;\n  }\n  animate() {\n    return NOOP_RUNNER;\n  }\n}\nconst SHARED_RECT_REF = {\n  __isCanvasMark: true,\n  node: SHARED_MARKER_NODE,\n  /** @returns {any} */\n  attr() {\n    return SHARED_RECT_REF;\n  },\n  add() {\n    return SHARED_RECT_REF;\n  },\n  addTo() {\n    return SHARED_RECT_REF;\n  },\n  remove() {\n    return SHARED_RECT_REF;\n  },\n  /** @returns {any} */\n  css() {\n    return SHARED_RECT_REF;\n  },\n  animate() {\n    return NOOP_RUNNER;\n  }\n};\nclass CanvasMark {\n  /** @param {any} cmd */\n  constructor(cmd) {\n    this.__isCanvasMark = true;\n    this._cmd = cmd;\n    const self = this;\n    this.node = {\n      nodeName: cmd ? cmd.tag : \"g\",\n      instance: this,\n      style: {},\n      classList: { add() {\n      }, remove() {\n      }, toggle() {\n      }, contains: () => false },\n      /** @param {string} k @param {any} v */\n      setAttribute(k, v2) {\n        self._applyAttr(k, v2);\n      },\n      getAttribute: () => null,\n      removeAttribute() {\n      },\n      hasAttribute: () => false,\n      addEventListener() {\n      },\n      removeEventListener() {\n      },\n      appendChild() {\n      },\n      getBBox: () => ({ x: 0, y: 0, width: 0, height: 0 })\n    };\n  }\n  /**\n   * @param {string} k\n   * @param {any} v\n   */\n  _applyAttr(k, v2) {\n    const cmd = this._cmd;\n    if (!cmd) return;\n    const sk = STYLE_KEYS[k];\n    if (sk !== void 0) cmd[sk] = v2;\n  }\n  /**\n   * @param {any} a\n   * @param {any} [v]\n   * @returns {any}\n   */\n  attr(a2, v2) {\n    if (typeof a2 === \"string\") {\n      if (v2 === void 0) return null;\n      this._applyAttr(a2, v2);\n      return this;\n    }\n    for (const k in a2) {\n      if (a2[k] !== void 0) this._applyAttr(k, a2[k]);\n    }\n    return this;\n  }\n  /** @param {any} _c */\n  add(_c) {\n    return this;\n  }\n  /** @param {any} _p */\n  addTo(_p) {\n    return this;\n  }\n  remove() {\n    return this;\n  }\n  clear() {\n    return this;\n  }\n  /** @param {any} _s */\n  css(_s) {\n    return this;\n  }\n  /** @param {any} v */\n  fill(v2) {\n    if (typeof v2 === \"object\") return this.attr(v2);\n    return this.attr(\"fill\", v2);\n  }\n  /** @param {any} v */\n  stroke(v2) {\n    if (typeof v2 === \"object\") {\n      if (v2.color !== void 0) this.attr(\"stroke\", v2.color);\n      if (v2.width !== void 0) this.attr(\"stroke-width\", v2.width);\n      return this;\n    }\n    return this.attr(\"stroke\", v2);\n  }\n  /** @param {string} d */\n  plot(d) {\n    if (typeof d === \"string\" && this._cmd && this._cmd.tag === \"path\") {\n      this._cmd.d = d;\n    }\n    return this;\n  }\n  hide() {\n    return this;\n  }\n  show() {\n    return this;\n  }\n  /** @param {string} _c */\n  removeClass(_c) {\n    return this;\n  }\n  bbox() {\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n  animate() {\n    return NOOP_RUNNER;\n  }\n}\nclass CanvasGraphics {\n  /** @param {any} w */\n  constructor(w2) {\n    this.w = w2;\n    this._g = new Graphics(w2);\n    this._list = [];\n    this._mx = new Float64Array(16);\n    this._my = new Float64Array(16);\n    this._msize = new Float64Array(16);\n    this._mshape = new Int16Array(16);\n    this._mstyle = new Int32Array(16);\n    this._msi = new Int32Array(16);\n    this._mn = 0;\n    this._mcap = 16;\n    this._crx = new Float64Array(16);\n    this._cry = new Float64Array(16);\n    this._crw = new Float64Array(16);\n    this._crh = new Float64Array(16);\n    this._crstyle = new Int32Array(16);\n    this._crsi = new Int32Array(16);\n    this._crdi = new Int32Array(16);\n    this._crn = 0;\n    this._crcap = 16;\n    this._cellRadius = 0;\n    this._styles = [];\n    this._styleMap = /* @__PURE__ */ new Map();\n    this._lf = NEVER;\n    this._ls = NEVER;\n    this._lsw = NEVER;\n    this._ld = NEVER;\n    this._lfo = NEVER;\n    this._lso = NEVER;\n    this._lid = -1;\n    this._lofFill = NEVER;\n    this._lofBase = -1;\n    this._lofId = -1;\n    this._rlf = NEVER;\n    this._rls = NEVER;\n    this._rlsw = NEVER;\n    this._rlfo = NEVER;\n    this._rlso = NEVER;\n    this._rlid = -1;\n  }\n  _resetStyleCache() {\n    this._lf = NEVER;\n    this._ls = NEVER;\n    this._lsw = NEVER;\n    this._ld = NEVER;\n    this._lfo = NEVER;\n    this._lso = NEVER;\n    this._lid = -1;\n    this._lofFill = NEVER;\n    this._lofBase = -1;\n    this._lofId = -1;\n    this._rlf = NEVER;\n    this._rls = NEVER;\n    this._rlsw = NEVER;\n    this._rlfo = NEVER;\n    this._rlso = NEVER;\n    this._rlid = -1;\n  }\n  /** Start a fresh scene (columnar marker store + object-command list). */\n  reset() {\n    this._list = [];\n    this._mn = 0;\n    this._styles = [];\n    this._styleMap = /* @__PURE__ */ new Map();\n    this._resetStyleCache();\n    const series = this.w.config.series || [];\n    let cap = 16;\n    for (let i2 = 0; i2 < series.length; i2++) {\n      const d = series[i2] && series[i2].data;\n      if (Array.isArray(d)) cap += d.length;\n    }\n    cap = Math.ceil(cap * 1.15) + 16;\n    if (cap > this._mcap) this._allocMarkers(cap);\n    this._crn = 0;\n    this._cellRadius = 0;\n    if (cap > this._crcap) this._allocRects(cap);\n  }\n  /** @param {number} cap */\n  _allocRects(cap) {\n    this._crcap = cap;\n    this._crx = new Float64Array(cap);\n    this._cry = new Float64Array(cap);\n    this._crw = new Float64Array(cap);\n    this._crh = new Float64Array(cap);\n    this._crstyle = new Int32Array(cap);\n    this._crsi = new Int32Array(cap);\n    this._crdi = new Int32Array(cap);\n  }\n  /** Grow the rect columns (rare: capacity estimate was low). */\n  _growRects() {\n    const cap = this._crcap * 2;\n    const nx = new Float64Array(cap);\n    nx.set(this._crx);\n    this._crx = nx;\n    const ny = new Float64Array(cap);\n    ny.set(this._cry);\n    this._cry = ny;\n    const nw = new Float64Array(cap);\n    nw.set(this._crw);\n    this._crw = nw;\n    const nh = new Float64Array(cap);\n    nh.set(this._crh);\n    this._crh = nh;\n    const nst = new Int32Array(cap);\n    nst.set(this._crstyle);\n    this._crstyle = nst;\n    const nsi = new Int32Array(cap);\n    nsi.set(this._crsi);\n    this._crsi = nsi;\n    const ndi = new Int32Array(cap);\n    ndi.set(this._crdi);\n    this._crdi = ndi;\n    this._crcap = cap;\n  }\n  /** @param {number} cap */\n  _allocMarkers(cap) {\n    this._mcap = cap;\n    this._mx = new Float64Array(cap);\n    this._my = new Float64Array(cap);\n    this._msize = new Float64Array(cap);\n    this._mshape = new Int16Array(cap);\n    this._mstyle = new Int32Array(cap);\n    this._msi = new Int32Array(cap);\n  }\n  /** Grow the marker columns (rare: capacity estimate was low). */\n  _growMarkers() {\n    const cap = this._mcap * 2;\n    const nx = new Float64Array(cap);\n    nx.set(this._mx);\n    this._mx = nx;\n    const ny = new Float64Array(cap);\n    ny.set(this._my);\n    this._my = ny;\n    const ns = new Float64Array(cap);\n    ns.set(this._msize);\n    this._msize = ns;\n    const nsh = new Int16Array(cap);\n    nsh.set(this._mshape);\n    this._mshape = nsh;\n    const nst = new Int32Array(cap);\n    nst.set(this._mstyle);\n    this._mstyle = nst;\n    const nsi = new Int32Array(cap);\n    nsi.set(this._msi);\n    this._msi = nsi;\n    this._mcap = cap;\n  }\n  displayList() {\n    return this._list;\n  }\n  markerCount() {\n    return this._mn;\n  }\n  /**\n   * Intern a marker style; returns its palette id. Keeps the per-point columns\n   * numeric (no retained per-point object).\n   * @param {any} fill @param {any} stroke @param {any} sw @param {any} dash\n   * @param {any} fo @param {any} so\n   * @returns {number}\n   */\n  _internStyle(fill, stroke, sw, dash, fo, so) {\n    const key = `${fill}|${stroke}|${sw}|${dash}|${fo}|${so}`;\n    const cached = this._styleMap.get(key);\n    if (cached !== void 0) return cached;\n    const id = this._styles.length;\n    this._styles.push({\n      fill,\n      stroke,\n      strokeWidth: sw,\n      strokeDash: dash,\n      fillOpacity: fo,\n      strokeOpacity: so\n    });\n    this._styleMap.set(key, id);\n    return id;\n  }\n  /**\n   * Override a recorded marker's fill (scatter sets a per-point fill via `attr`\n   * right after drawMarker). Like the draw path, the string-key intern is cached\n   * on (base style, fill) so the Map/string work stays OFF the per-point path\n   * (it otherwise mixes with the `_mstyle[i]` typed-array write → the ~80× slow\n   * path). For a scatter series the base + fill are uniform, so it interns once.\n   * @param {number} i @param {any} fill\n   */\n  _setMarkerFill(i2, fill) {\n    const base = this._mstyle[i2];\n    if (fill === this._lofFill && base === this._lofBase) {\n      this._mstyle[i2] = this._lofId;\n      return;\n    }\n    const s2 = this._styles[base];\n    if (!s2 || s2.fill === fill) {\n      this._lofFill = fill;\n      this._lofBase = base;\n      this._lofId = base;\n      return;\n    }\n    const id = this._internStyle(\n      fill,\n      s2.stroke,\n      s2.strokeWidth,\n      s2.strokeDash,\n      s2.fillOpacity,\n      s2.strokeOpacity\n    );\n    this._mstyle[i2] = id;\n    this._lofFill = fill;\n    this._lofBase = base;\n    this._lofId = id;\n  }\n  /** @param {number} i @returns {any} the style object for a marker index */\n  markerStyle(i2) {\n    return this._styles[this._mstyle[i2]];\n  }\n  /** @param {number} i @returns {number} series (realIndex) of a marker, -1 if none */\n  markerSeries(i2) {\n    return this._msi[i2];\n  }\n  /** @param {number} id @returns {string} */\n  shapeName(id) {\n    return SHAPE_NAME[id] || \"circle\";\n  }\n  // ── columnar rect cell (heatmap): parallel unboxed arrays, no per-cell object ──\n  /**\n   * Record a heatmap-style cell (a filled, optionally stroked rect). Geometry\n   * and style are captured up front into the columns; the returned handle is a\n   * shared no-op (the emit site sets nothing back on it in canvas mode).\n   * @param {number} x @param {number} y @param {number} w @param {number} h\n   * @param {any} opts {fill, fillOpacity, stroke, strokeWidth, radius, seriesIndex, dataPointIndex}\n   * @returns {any}\n   */\n  drawRectCell(x, y, w2, h2, opts = {}) {\n    const styleId = this._rectStyleId(opts);\n    if (this._crn >= this._crcap) this._growRects();\n    const i2 = this._crn++;\n    this._crx[i2] = x || 0;\n    this._cry[i2] = y || 0;\n    this._crw[i2] = w2 > 0 ? w2 : 0;\n    this._crh[i2] = h2 > 0 ? h2 : 0;\n    this._crstyle[i2] = styleId;\n    this._crsi[i2] = opts.seriesIndex == null ? -1 : opts.seriesIndex;\n    this._crdi[i2] = opts.dataPointIndex == null ? -1 : opts.dataPointIndex;\n    if (opts.radius) this._cellRadius = opts.radius;\n    return SHARED_RECT_REF;\n  }\n  /**\n   * Resolve (and dedupe) a rect-cell style → shared-palette id. A last-style\n   * cache keeps the Map/string work off the path for runs of same-style cells.\n   * @param {any} opts\n   * @returns {number}\n   */\n  _rectStyleId(opts) {\n    const fill = opts.fill;\n    const stroke = opts.stroke;\n    const sw = opts.strokeWidth;\n    const fo = opts.fillOpacity;\n    const so = opts.strokeOpacity;\n    if (fill === this._rlf && stroke === this._rls && sw === this._rlsw && fo === this._rlfo && so === this._rlso) {\n      return this._rlid;\n    }\n    const id = this._internStyle(fill, stroke, sw, 0, fo, so);\n    this._rlf = fill;\n    this._rls = stroke;\n    this._rlsw = sw;\n    this._rlfo = fo;\n    this._rlso = so;\n    this._rlid = id;\n    return id;\n  }\n  /** @returns {number} number of recorded rect cells */\n  rectCount() {\n    return this._crn;\n  }\n  /** @param {number} i @returns {any} the style object for a rect cell */\n  rectStyle(i2) {\n    return this._styles[this._crstyle[i2]];\n  }\n  /** @param {number} i @returns {number} series (realIndex) of a cell, -1 if none */\n  rectSeries(i2) {\n    return this._crsi[i2];\n  }\n  /**\n   * @param {string} tag\n   * @param {number} z\n   * @returns {any}\n   */\n  _cmd(tag, z) {\n    const cmd = {\n      tag,\n      z: z || 0,\n      fill: void 0,\n      stroke: void 0,\n      strokeWidth: void 0,\n      strokeDash: void 0,\n      lineCap: void 0,\n      fillOpacity: void 0,\n      strokeOpacity: void 0,\n      fillRule: void 0\n    };\n    this._list.push(cmd);\n    return cmd;\n  }\n  // ── organizational (groups don't paint or record) ──\n  // Series draw() creates a wrap group PER POINT (scatter.draw / plotChartMarkers\n  // run per point), so allocating a handle per group is ~50k heavy allocations\n  // at scale: enough transient churn to tip V8 into a GC blow-up. Groups carry\n  // no paint state in canvas mode (attr/add are no-ops), so every group shares\n  // one singleton: zero per-point allocation.\n  /** @param {any} _attrs */\n  group(_attrs) {\n    return SHARED_GROUP;\n  }\n  // ── per-point marker (line/area markers, scatter, bubble): COLUMNAR ──\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} opts\n   */\n  drawMarker(x, y, opts = {}) {\n    var _a;\n    const styleId = this._markerStyleId(opts);\n    if (this._mn >= this._mcap) this._growMarkers();\n    const i2 = this._mn++;\n    this._mx[i2] = x || 0;\n    this._my[i2] = typeof y === \"number\" ? y : NaN;\n    this._msize[i2] = opts.pSize || 0;\n    this._mshape[i2] = (_a = SHAPE_ID[opts.shape || \"circle\"]) != null ? _a : 0;\n    this._mstyle[i2] = styleId;\n    this._msi[i2] = opts.seriesIndex == null ? -1 : opts.seriesIndex;\n    return new CanvasMarkerRef(this, i2);\n  }\n  /**\n   * Resolve (and dedupe) a marker style → palette id. A last-style cache keeps\n   * the Map/string work off the path when consecutive markers share a style\n   * (the common case), so intern runs once per style run.\n   * @param {any} opts\n   * @returns {number}\n   */\n  _markerStyleId(opts) {\n    const shape = opts.shape || \"circle\";\n    const strokeTinted = shape === \"line\" || shape === \"plus\" || shape === \"cross\";\n    const fill = strokeTinted ? \"none\" : opts.pointFillColor;\n    const stroke = strokeTinted ? opts.pointFillColor : opts.pointStrokeColor;\n    const sw = opts.pointStrokeWidth;\n    const dash = opts.pointStrokeDashArray;\n    const fo = opts.pointFillOpacity;\n    const so = strokeTinted ? opts.pointFillOpacity : opts.pointStrokeOpacity;\n    if (fill === this._lf && stroke === this._ls && sw === this._lsw && dash === this._ld && fo === this._lfo && so === this._lso) {\n      return this._lid;\n    }\n    const id = this._internStyle(fill, stroke, sw, dash, fo, so);\n    this._lf = fill;\n    this._ls = stroke;\n    this._lsw = sw;\n    this._ld = dash;\n    this._lfo = fo;\n    this._lso = so;\n    this._lid = id;\n    return id;\n  }\n  // ── series body path (line/area/bar): object command ──\n  /** @param {any} opts */\n  renderPaths(opts) {\n    const cmd = this._cmd(\"path\", opts.realIndex);\n    cmd.d = opts.pathTo;\n    if (opts.pathToNumeric) {\n      cmd.nxs = opts.pathToNumeric.xs;\n      cmd.nys = opts.pathToNumeric.ys;\n      cmd.ncloseY = opts.pathToNumeric.closeY;\n    }\n    cmd.stroke = opts.stroke;\n    cmd.strokeWidth = opts.strokeWidth;\n    cmd.fill = opts.fill;\n    cmd.lineCap = opts.strokeLinecap;\n    cmd.si = opts.realIndex;\n    this.w.globals.animationEnded = true;\n    return new CanvasMark(cmd);\n  }\n  /** @param {any} opts */\n  drawPath(opts) {\n    const cmd = this._cmd(\"path\", 0);\n    cmd.d = opts.d;\n    cmd.stroke = opts.stroke;\n    cmd.strokeWidth = opts.strokeWidth;\n    cmd.fill = opts.fill;\n    cmd.fillOpacity = opts.fillOpacity;\n    cmd.strokeOpacity = opts.strokeOpacity;\n    cmd.lineCap = opts.strokeLinecap;\n    cmd.strokeDash = opts.strokeDashArray;\n    return new CanvasMark(cmd);\n  }\n  // ── remaining primitives (contract completeness / Marks #11 forward-compat) ──\n  /**\n   * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2\n   * @param {string} lineColor @param {any} dashArray @param {number} strokeWidth\n   */\n  drawLine(x1, y1, x2, y2, lineColor = \"#a8a8a8\", dashArray = 0, strokeWidth = 1) {\n    const cmd = this._cmd(\"line\", 0);\n    cmd.lx1 = x1;\n    cmd.ly1 = y1;\n    cmd.lx2 = x2;\n    cmd.ly2 = y2;\n    cmd.stroke = lineColor;\n    cmd.strokeDash = dashArray;\n    cmd.strokeWidth = strokeWidth;\n    return new CanvasMark(cmd);\n  }\n  /**\n   * Mirrors Graphics.drawRect's full signature (including stroke), so callers\n   * that stroke rects (Marks api.rect, chart code) paint the same on canvas.\n   * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2\n   * @param {number} radius @param {string} color @param {number} opacity\n   * @param {number|null} [strokeWidth] @param {string|null} [strokeColor]\n   * @param {any} [strokeDashArray]\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 cmd = this._cmd(\"rect\", 0);\n    cmd.x1 = x1;\n    cmd.y1 = y1;\n    cmd.rw = x2 > 0 ? x2 : 0;\n    cmd.rh = y2 > 0 ? y2 : 0;\n    cmd.radius = radius;\n    cmd.fill = color;\n    cmd.fillOpacity = opacity;\n    if (strokeColor != null) {\n      cmd.stroke = strokeColor;\n      cmd.strokeWidth = strokeWidth == null ? 1 : strokeWidth;\n      cmd.strokeDash = strokeDashArray;\n    }\n    return new CanvasMark(cmd);\n  }\n  /**\n   * @param {number} radius\n   * @param {any} attrs\n   */\n  drawCircle(radius, attrs = null) {\n    const cmd = this._cmd(\"circle\", 0);\n    cmd.r = radius < 0 ? 0 : radius;\n    if (attrs) {\n      cmd.cx = attrs.cx;\n      cmd.cy = attrs.cy;\n      if (attrs.fill !== void 0) cmd.fill = attrs.fill;\n      if (attrs.stroke !== void 0) cmd.stroke = attrs.stroke;\n    }\n    return new CanvasMark(cmd);\n  }\n  /** @param {any} opts */\n  drawText(opts) {\n    const cmd = this._cmd(\"text\", 0);\n    cmd.text = Array.isArray(opts.text) ? opts.text.join(\" \") : opts.text;\n    cmd.tx = opts.x;\n    cmd.ty = opts.y;\n    cmd.textAnchor = opts.textAnchor || \"start\";\n    cmd.fontSize = opts.fontSize;\n    cmd.fontFamily = opts.fontFamily;\n    cmd.fill = opts.foreColor;\n    return new CanvasMark(cmd);\n  }\n  /**\n   * Resolve a marker's SVG path `d` (non-circle shapes) lazily at paint time.\n   * @param {number} x @param {number} y @param {number} shapeId @param {number} size\n   * @returns {string}\n   */\n  markerPath(x, y, shapeId, size) {\n    return this._g.getMarkerPath(x, y, SHAPE_NAME[shapeId] || \"circle\", size);\n  }\n}\nconst TWO_PI = Math.PI * 2;\nconst DPR_CAP = 2;\nclass CanvasCompositor {\n  /** @param {any} w */\n  constructor(w2) {\n    this.w = w2;\n    this._host = null;\n    this._canvas = null;\n    this._c2d = null;\n    this._margin = 0;\n    this._dpr = 1;\n    this._dim = null;\n    this._alpha = 1;\n    this._unitPaths = /* @__PURE__ */ new Map();\n    this._markerBatches = 0;\n  }\n  /** Marker style-batches applied during the last paint() (dev/test hook). */\n  markerBatchCount() {\n    return this._markerBatches;\n  }\n  /**\n   * Opacity multiplier for a series index under the active dim spec: 1 for the\n   * highlighted series (or when not dimming, or for unidentified marks), else\n   * the inactive opacity.\n   * @param {number} si\n   * @returns {number}\n   */\n  _seriesAlpha(si) {\n    const d = this._dim;\n    if (!d || d.active == null || d.active < 0 || si == null || si < 0) return 1;\n    return si === d.active ? 1 : d.opacity == null ? 0.2 : d.opacity;\n  }\n  _plotDims() {\n    var _a;\n    const gw = Math.max(0, Math.ceil(this.w.layout.gridWidth || 0));\n    const gh = Math.max(0, Math.ceil(this.w.layout.gridHeight || 0));\n    const largest = ((_a = this.w.globals.markers) == null ? void 0 : _a.largestSize) || 0;\n    const margin = Math.ceil(largest + 8);\n    return { gw, gh, margin };\n  }\n  /**\n   * Create (or recreate) the foreignObject + canvas sized to the plot rect and\n   * return the SVGElement host that `plotChartType` inserts into the tree.\n   * @returns {any}\n   */\n  createHost() {\n    const win = BrowserAPIs.getWindow();\n    this._dpr = Math.min(DPR_CAP, win && win.devicePixelRatio || 1);\n    const { gw, gh, margin } = this._plotDims();\n    this._margin = margin;\n    const w2 = gw + margin * 2;\n    const h2 = gh + margin * 2;\n    const fo = BrowserAPIs.createElementNS(SVGNS$2, \"foreignObject\");\n    fo.setAttribute(\"x\", String(-margin));\n    fo.setAttribute(\"y\", String(-margin));\n    fo.setAttribute(\"width\", String(w2));\n    fo.setAttribute(\"height\", String(h2));\n    fo.setAttribute(\"class\", \"apexcharts-canvas-series\");\n    fo.style.overflow = \"visible\";\n    const canvas = (\n      /** @type {any} */\n      BrowserAPIs.createElement(\"canvas\")\n    );\n    canvas.setAttribute(\"class\", \"apexcharts-series-canvas\");\n    canvas.width = Math.max(1, Math.round(w2 * this._dpr));\n    canvas.height = Math.max(1, Math.round(h2 * this._dpr));\n    canvas.style.width = w2 + \"px\";\n    canvas.style.height = h2 + \"px\";\n    canvas.style.pointerEvents = \"none\";\n    fo.appendChild(canvas);\n    this._canvas = canvas;\n    this._c2d = canvas.getContext(\"2d\");\n    this._host = new SVGElement(fo);\n    return this._host;\n  }\n  getHost() {\n    return this._host;\n  }\n  clear() {\n    if (!this._c2d || !this._canvas) return;\n    this._c2d.setTransform(1, 0, 0, 1, 0, 0);\n    this._c2d.clearRect(0, 0, this._canvas.width, this._canvas.height);\n  }\n  /**\n   * Re-check devicePixelRatio before painting: a restyle() repaint after the\n   * window moved between monitors would otherwise keep the stale backing-store\n   * scale (blurry or over-sized) until the next full render rebuilds the host.\n   * The canvas CSS size is unchanged; only the backing store is resized.\n   */\n  _syncDpr() {\n    if (!this._canvas) return;\n    const win = BrowserAPIs.getWindow();\n    const dpr = Math.min(DPR_CAP, win && win.devicePixelRatio || 1);\n    if (dpr === this._dpr) return;\n    this._dpr = dpr;\n    const wCss = parseFloat(this._canvas.style.width) || 0;\n    const hCss = parseFloat(this._canvas.style.height) || 0;\n    this._canvas.width = Math.max(1, Math.round(wCss * dpr));\n    this._canvas.height = Math.max(1, Math.round(hCss * dpr));\n  }\n  /**\n   * Paint the recorded scene: object commands (series bodies / rects / lines /\n   * text) first, then the columnar markers on top (matching SVG z-order where\n   * markers sit above the series path). `shim` supplies the columnar marker\n   * arrays + lazy non-circle marker geometry.\n   * @param {any[]} list\n   * @param {any} shim\n   * @param {{active:number, opacity:number}|null} [dim] per-series dim spec\n   *   (hover / legend restyle); null repaints at full opacity.\n   */\n  paint(list, shim2, dim = null) {\n    const ctx = this._c2d;\n    if (!ctx) return;\n    this._dim = dim || null;\n    this._syncDpr();\n    this.clear();\n    const dpr = this._dpr;\n    const m2 = this._margin;\n    ctx.setTransform(dpr, 0, 0, dpr, m2 * dpr, m2 * dpr);\n    if (list.length) {\n      const ordered = list.length > 1 ? list.map((c2, i2) => [c2, i2]).sort(\n        (a2, b2) => a2[0].z === b2[0].z ? a2[1] - b2[1] : a2[0].z - b2[0].z\n      ).map((pair) => pair[0]) : list;\n      for (let i2 = 0; i2 < ordered.length; i2++) {\n        const c2 = ordered[i2];\n        this._alpha = this._dim ? this._seriesAlpha(c2.si) : 1;\n        this._paintOne(ctx, c2);\n      }\n    }\n    this._paintRects(ctx, shim2);\n    this._paintMarkers(ctx, shim2);\n    this._alpha = 1;\n  }\n  /**\n   * Paint the columnar rect cells (heatmap) as STYLE BATCHES: one fill/stroke\n   * state application per run of consecutive same-style cells, then a fast\n   * fillRect (or a roundRect path when the shared corner radius is non-zero)\n   * per cell. Clipped to the plot rect so cells never bleed into the canvas\n   * margin (mirrors the SVG gridRectMask). Per-cell globalAlpha carries the\n   * hover/legend dim multiplier when a dim spec is active.\n   * @param {any} ctx\n   * @param {any} shim\n   */\n  _paintRects(ctx, shim2) {\n    const n2 = shim2.rectCount ? shim2.rectCount() : 0;\n    if (!n2) return;\n    const rx = shim2._crx;\n    const ry = shim2._cry;\n    const rw = shim2._crw;\n    const rh = shim2._crh;\n    const rstyle = shim2._crstyle;\n    const radius = shim2._cellRadius || 0;\n    const cx = (\n      /** @type {any} */\n      ctx\n    );\n    const useRound = radius > 0 && typeof cx.roundRect === \"function\";\n    const dimming = !!this._dim;\n    const gw = Math.max(0, this.w.layout.gridWidth || 0);\n    const gh = Math.max(0, this.w.layout.gridHeight || 0);\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(0, 0, gw, gh);\n    ctx.clip();\n    let i2 = 0;\n    while (i2 < n2) {\n      const styleId = rstyle[i2];\n      const style = shim2.rectStyle(i2);\n      if (!style) {\n        i2++;\n        continue;\n      }\n      const fill = style.fill;\n      const doFill = fill && fill !== \"none\" && !(typeof fill === \"string\" && fill.indexOf(\"url(\") === 0);\n      const stroke = style.stroke;\n      const sw = style.strokeWidth == null ? 0 : Number(style.strokeWidth);\n      const doStroke = stroke && stroke !== \"none\" && sw > 0 && !(typeof stroke === \"string\" && stroke.indexOf(\"url(\") === 0);\n      if (doFill) ctx.fillStyle = fill;\n      if (doStroke) {\n        ctx.strokeStyle = stroke;\n        ctx.lineWidth = sw;\n        ctx.setLineDash([]);\n      }\n      const baseFillA = style.fillOpacity == null ? 1 : Number(style.fillOpacity);\n      const baseStrokeA = style.strokeOpacity == null ? 1 : Number(style.strokeOpacity);\n      let j = i2;\n      while (j < n2 && rstyle[j] === styleId) {\n        const w2 = rw[j];\n        const h2 = rh[j];\n        if (w2 > 0 && h2 > 0) {\n          const f = dimming ? this._seriesAlpha(shim2.rectSeries(j)) : 1;\n          if (useRound) {\n            ctx.beginPath();\n            cx.roundRect(rx[j], ry[j], w2, h2, radius);\n            if (doFill) {\n              ctx.globalAlpha = baseFillA * f;\n              ctx.fill();\n            }\n            if (doStroke) {\n              ctx.globalAlpha = baseStrokeA * f;\n              ctx.stroke();\n            }\n          } else {\n            if (doFill) {\n              ctx.globalAlpha = baseFillA * f;\n              ctx.fillRect(rx[j], ry[j], w2, h2);\n            }\n            if (doStroke) {\n              ctx.globalAlpha = baseStrokeA * f;\n              ctx.strokeRect(rx[j], ry[j], w2, h2);\n            }\n          }\n        }\n        j++;\n      }\n      i2 = j;\n    }\n    ctx.globalAlpha = 1;\n    ctx.restore();\n  }\n  /**\n   * Reusable unit Path2D for a (shape, size): the shape's geometry built at the\n   * origin once, then translated per marker via setTransform. Returns null when\n   * the geometry string cannot be parsed.\n   * @param {any} shim\n   * @param {number} shapeId\n   * @param {number} size\n   * @returns {any}\n   */\n  _unitPath(shim2, shapeId, size) {\n    const key = shapeId + \"|\" + size;\n    let p2 = this._unitPaths.get(key);\n    if (p2 === void 0) {\n      try {\n        p2 = new Path2D(shim2.markerPath(0, 0, shapeId, size));\n      } catch (e2) {\n        p2 = null;\n      }\n      this._unitPaths.set(key, p2);\n    }\n    return p2;\n  }\n  /**\n   * Markers paint as STYLE BATCHES: one fill/stroke state application per run\n   * of consecutive same-style markers (a uniform single-series scatter is\n   * exactly one batch), then per-marker geometry inside the run. Per-marker\n   * geometry stays painter's-ordered (fill+stroke per marker) so overlapping\n   * semi-transparent markers composite exactly as SVG does.\n   * @param {any} ctx\n   * @param {any} shim\n   */\n  _paintMarkers(ctx, shim2) {\n    this._markerBatches = 0;\n    const n2 = shim2.markerCount();\n    if (!n2) return;\n    const mx = shim2._mx;\n    const my = shim2._my;\n    const msize = shim2._msize;\n    const mshape = shim2._mshape;\n    const mstyle = shim2._mstyle;\n    const dimming = !!this._dim;\n    if (!dimming) this._alpha = 1;\n    let i2 = 0;\n    while (i2 < n2) {\n      const styleId = mstyle[i2];\n      const shapeId = mshape[i2];\n      const style = shim2.markerStyle(i2);\n      if (!style) {\n        i2++;\n        continue;\n      }\n      const doFill = this._applyFill(ctx, style);\n      const doStroke = this._applyStroke(ctx, style);\n      this._markerBatches++;\n      const baseFillA = style.fillOpacity == null ? 1 : Number(style.fillOpacity);\n      const baseStrokeA = style.strokeOpacity == null ? 1 : Number(style.strokeOpacity);\n      if (shapeId === 0) {\n        let j = i2;\n        while (j < n2 && mshape[j] === 0 && mstyle[j] === styleId) {\n          const r2 = msize[j] || 0;\n          const y = my[j];\n          if (r2 > 0 && y === y) {\n            ctx.beginPath();\n            ctx.arc(mx[j], y, r2, 0, TWO_PI);\n            if (dimming) {\n              const f = this._seriesAlpha(shim2.markerSeries(j));\n              if (doFill) {\n                ctx.globalAlpha = baseFillA * f;\n                ctx.fill();\n              }\n              if (doStroke) {\n                ctx.globalAlpha = baseStrokeA * f;\n                ctx.stroke();\n              }\n            } else {\n              if (doFill) ctx.fill();\n              if (doStroke) ctx.stroke();\n            }\n          }\n          j++;\n        }\n        ctx.globalAlpha = 1;\n        i2 = j;\n      } else {\n        const dpr = this._dpr;\n        const m2 = this._margin;\n        let j = i2;\n        while (j < n2 && mshape[j] === shapeId && mstyle[j] === styleId) {\n          const y = my[j];\n          const size = msize[j];\n          if (y === y && size > 0) {\n            const p2 = this._unitPath(shim2, shapeId, size);\n            if (p2) {\n              ctx.setTransform(dpr, 0, 0, dpr, (m2 + mx[j]) * dpr, (m2 + y) * dpr);\n              const f = dimming ? this._seriesAlpha(shim2.markerSeries(j)) : 1;\n              if (doFill) {\n                ctx.globalAlpha = baseFillA * f;\n                ctx.fill(p2);\n              }\n              if (doStroke) {\n                ctx.globalAlpha = baseStrokeA * f;\n                ctx.stroke(p2);\n              }\n            }\n          }\n          j++;\n        }\n        ctx.setTransform(dpr, 0, 0, dpr, m2 * dpr, m2 * dpr);\n        ctx.globalAlpha = 1;\n        i2 = j;\n      }\n    }\n  }\n  /**\n   * Paint a series path from its numeric fast-path coords: a direct\n   * moveTo/lineTo loop over the typed arrays, no Path2D and no d-string\n   * parse. `ncloseY` (areas) closes the polygon down to the baseline exactly\n   * like the string form's `L xLast bottom L x0 bottom z` tail.\n   * @param {any} ctx\n   * @param {any} cmd\n   */\n  _paintNumericPath(ctx, cmd) {\n    const xs = cmd.nxs;\n    const ys = cmd.nys;\n    const n2 = xs.length;\n    if (!n2) return;\n    ctx.beginPath();\n    ctx.moveTo(xs[0], ys[0]);\n    for (let k = 1; k < n2; k++) {\n      ctx.lineTo(xs[k], ys[k]);\n    }\n    if (cmd.ncloseY != null) {\n      ctx.lineTo(xs[n2 - 1], cmd.ncloseY);\n      ctx.lineTo(xs[0], cmd.ncloseY);\n      ctx.closePath();\n    }\n    if (this._applyFill(ctx, cmd)) {\n      ctx.fill(cmd.fillRule === \"evenodd\" ? \"evenodd\" : \"nonzero\");\n    }\n    if (this._applyStroke(ctx, cmd)) {\n      ctx.stroke();\n    }\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} cmd style-bearing flat command\n   */\n  _paintOne(ctx, cmd) {\n    switch (cmd.tag) {\n      case \"path\": {\n        if (cmd.nxs) {\n          this._paintNumericPath(ctx, cmd);\n          break;\n        }\n        if (!cmd.d) return;\n        if (!cmd.path2d) {\n          try {\n            cmd.path2d = new Path2D(cmd.d);\n          } catch (e2) {\n            return;\n          }\n        }\n        this._fillStrokePath(ctx, cmd, cmd.path2d);\n        break;\n      }\n      case \"rect\": {\n        const p2 = new Path2D();\n        if (cmd.radius && typeof /** @type {any} */\n        p2.roundRect === \"function\") {\n          p2.roundRect(cmd.x1, cmd.y1, cmd.rw, cmd.rh, cmd.radius);\n        } else {\n          p2.rect(cmd.x1, cmd.y1, cmd.rw, cmd.rh);\n        }\n        this._fillStrokePath(ctx, cmd, p2);\n        break;\n      }\n      case \"circle\": {\n        if (!(cmd.r > 0)) return;\n        ctx.beginPath();\n        ctx.arc(cmd.cx, cmd.cy, cmd.r, 0, TWO_PI);\n        this._fillStroke(ctx, cmd);\n        break;\n      }\n      case \"line\": {\n        ctx.beginPath();\n        ctx.moveTo(cmd.lx1, cmd.ly1);\n        ctx.lineTo(cmd.lx2, cmd.ly2);\n        this._strokeOnly(ctx, cmd);\n        break;\n      }\n      case \"text\": {\n        if (cmd.text == null) return;\n        ctx.save();\n        ctx.globalAlpha = this._alpha;\n        ctx.fillStyle = cmd.fill || \"#000\";\n        const size = cmd.fontSize || \"11px\";\n        ctx.font = `${typeof size === \"number\" ? size + \"px\" : size} ${cmd.fontFamily || \"Helvetica, Arial, sans-serif\"}`;\n        ctx.textAlign = cmd.textAnchor === \"middle\" ? \"center\" : cmd.textAnchor === \"end\" ? \"right\" : \"left\";\n        ctx.fillText(String(cmd.text), cmd.tx, cmd.ty);\n        ctx.restore();\n        break;\n      }\n    }\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} style\n   * @param {any} path2d\n   */\n  _fillStrokePath(ctx, style, path2d) {\n    if (this._applyFill(ctx, style)) {\n      ctx.fill(path2d, style.fillRule === \"evenodd\" ? \"evenodd\" : \"nonzero\");\n    }\n    if (this._applyStroke(ctx, style)) {\n      ctx.stroke(path2d);\n    }\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _fillStroke(ctx, style) {\n    if (this._applyFill(ctx, style)) ctx.fill();\n    if (this._applyStroke(ctx, style)) ctx.stroke();\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _strokeOnly(ctx, style) {\n    if (this._applyStroke(ctx, style)) ctx.stroke();\n    ctx.globalAlpha = 1;\n  }\n  /**\n   * Set fill state. Returns false when there's nothing to fill.\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _applyFill(ctx, style) {\n    const fill = style.fill;\n    if (!fill || fill === \"none\") return false;\n    if (typeof fill === \"string\" && fill.indexOf(\"url(\") === 0) return false;\n    ctx.globalAlpha = (style.fillOpacity == null ? 1 : Number(style.fillOpacity)) * this._alpha;\n    ctx.fillStyle = fill;\n    return true;\n  }\n  /**\n   * Set stroke state. Returns false when there's nothing to stroke.\n   * @param {any} ctx\n   * @param {any} style\n   */\n  _applyStroke(ctx, style) {\n    const stroke = style.stroke;\n    const sw = style.strokeWidth == null ? 1 : Number(style.strokeWidth);\n    if (!stroke || stroke === \"none\" || !(sw > 0)) return false;\n    if (typeof stroke === \"string\" && stroke.indexOf(\"url(\") === 0) return false;\n    ctx.globalAlpha = (style.strokeOpacity == null ? 1 : Number(style.strokeOpacity)) * this._alpha;\n    ctx.strokeStyle = stroke;\n    ctx.lineWidth = sw;\n    ctx.lineCap = style.lineCap || \"butt\";\n    const dash = style.strokeDash;\n    if (dash && dash !== 0) {\n      ctx.setLineDash(Array.isArray(dash) ? dash : [Number(dash)]);\n    } else {\n      ctx.setLineDash([]);\n    }\n    return true;\n  }\n  /** Series bitmap for the export composite bridge (P4). @returns {string|null} */\n  toDataURL() {\n    return this._canvas ? this._canvas.toDataURL() : null;\n  }\n  destroy() {\n    this._host = null;\n    this._canvas = null;\n    this._c2d = null;\n    this._unitPaths.clear();\n  }\n}\nclass CanvasRenderer {\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.kind = \"canvas\";\n    this._g = new CanvasGraphics(w2);\n    this._compositor = new CanvasCompositor(w2);\n  }\n  // ── lifecycle ──\n  /** Start a fresh series display list for this render pass. */\n  beginSeries() {\n    this._g.reset();\n  }\n  /**\n   * Finalize the pass: paint the recorded display list and return the SVG host\n   * (a `<foreignObject><canvas>`) for `plotChartType` to composite into the tree.\n   * @returns {any}\n   */\n  present() {\n    const host = this._compositor.createHost();\n    this._compositor.paint(this._g.displayList(), this._g);\n    return host;\n  }\n  /** Fast-path wipe of the series layer. */\n  clear() {\n    this._compositor.clear();\n  }\n  /**\n   * Whether the existing <canvas> host can be repainted in place (it exists\n   * and is still mounted). Used by the data-only fast update path to skip\n   * recreating the foreignObject + backing store on every tick.\n   * @returns {boolean}\n   */\n  canRepaintInPlace() {\n    const host = this._compositor.getHost();\n    return !!(host && host.node && host.node.isConnected);\n  }\n  /** Repaint the freshly recorded display list into the EXISTING canvas. */\n  repaintInPlace() {\n    this._compositor.paint(this._g.displayList(), this._g);\n  }\n  // ── emit primitives (delegate to the display-list shim) ──\n  /** @param {any} attrs */\n  group(attrs) {\n    return this._g.group(attrs);\n  }\n  /** @param {any} opts */\n  drawPath(opts) {\n    return this._g.drawPath(opts);\n  }\n  /** @param {any[]} args */\n  drawLine(...args) {\n    return (\n      /** @type {any} */\n      this._g.drawLine(...args)\n    );\n  }\n  /** @param {any[]} args */\n  drawRect(...args) {\n    return (\n      /** @type {any} */\n      this._g.drawRect(...args)\n    );\n  }\n  /**\n   * Columnar heatmap-cell rect (dense same-shape rects): recorded into typed\n   * arrays, painted as style batches. Distinct from drawRect (object command)\n   * so 100k cells don't allocate 100k retained commands.\n   * @param {number} x @param {number} y @param {number} w @param {number} h\n   * @param {any} opts\n   */\n  drawRectCell(x, y, w2, h2, opts) {\n    return this._g.drawRectCell(x, y, w2, h2, opts);\n  }\n  /**\n   * @param {number} r\n   * @param {any} attrs\n   */\n  drawCircle(r2, attrs) {\n    return this._g.drawCircle(r2, attrs);\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {any} opts\n   */\n  drawMarker(x, y, opts) {\n    return this._g.drawMarker(x, y, opts);\n  }\n  /** @param {any} opts */\n  renderPaths(opts) {\n    return this._g.renderPaths(opts);\n  }\n  /** @param {any} opts */\n  drawText(opts) {\n    return this._g.drawText(opts);\n  }\n  // ── capabilities ──\n  /** @param {string} feature */\n  supports(feature) {\n    return feature === \"solidFill\" || feature === \"dashArray\";\n  }\n  // ── interaction ──\n  // Line/area/bar/scatter tooltips resolve via coordinate lookup (pointsArray),\n  // so those need no per-mark query. Heatmap cells, however, are hovered by\n  // point (the SVG path hit-tests the <rect> under the cursor); with cells on\n  // canvas there is no node, so hitTest resolves the columnar rect store.\n  /**\n   * Find the cell under a plot-local point (0,0 = plot origin, the same space\n   * as the recorded cell geometry). Reverse scan so a later-painted cell wins\n   * when cells overlap (continuous-x edges). A linear scan stays well under a\n   * frame even at 100k cells (~100k integer compares). Returns the cell's\n   * series/dataPoint index plus its geometry for tooltip positioning, or null\n   * when the point is off every cell.\n   * @param {number} px\n   * @param {number} py\n   * @returns {({seriesIndex:number,dataPointIndex:number,x:number,y:number,width:number,height:number})|null}\n   */\n  hitTest(px, py) {\n    const g2 = this._g;\n    const n2 = g2.rectCount ? g2.rectCount() : 0;\n    if (!n2) return null;\n    const rx = g2._crx;\n    const ry = g2._cry;\n    const rw = g2._crw;\n    const rh = g2._crh;\n    for (let k = n2 - 1; k >= 0; k--) {\n      const w2 = rw[k];\n      const h2 = rh[k];\n      if (w2 <= 0 || h2 <= 0) continue;\n      if (px >= rx[k] && px < rx[k] + w2 && py >= ry[k] && py < ry[k] + h2) {\n        return {\n          seriesIndex: g2._crsi[k],\n          dataPointIndex: g2._crdi[k],\n          x: rx[k],\n          y: ry[k],\n          width: w2,\n          height: h2\n        };\n      }\n    }\n    return null;\n  }\n  /**\n   * Repaint the retained series scene with a per-series dim spec (hover /\n   * legend restyle). No geometry recompute: reuses the display list + marker\n   * columns recorded at render time. Pass null to repaint at full opacity.\n   * @param {{active:number, opacity:number}|null} [dim]\n   */\n  restyle(dim) {\n    this._compositor.paint(this._g.displayList(), this._g, dim || null);\n  }\n  // ── export ── toBitmap() and the compositor's toDataURL() back\n  //    Exports.inlineCanvasLayers, which inlines the series bitmap as an SVG\n  //    <image> so PNG/SVG export includes the canvas layer in correct z-order.\n  /** @returns {{dataURL:string,x:number,y:number,w:number,h:number}|null} */\n  toBitmap() {\n    const url = this._compositor.toDataURL();\n    if (!url) return null;\n    const gl = this.w.globals;\n    const cfg = this.w.config.chart;\n    const margin = this._compositor._margin;\n    return {\n      dataURL: url,\n      x: (gl.translateX || 0) + (cfg.offsetX || 0) - margin,\n      y: (gl.translateY || 0) + (cfg.offsetY || 0) - margin,\n      w: (this.w.layout.gridWidth || 0) + margin * 2,\n      h: (this.w.layout.gridHeight || 0) + margin * 2\n    };\n  }\n  destroy() {\n    this._compositor.destroy();\n  }\n}\nApexCharts.registerRenderer(\n  \"canvas\",\n  /**\n   * @param {any} w\n   * @param {any} ctx\n   */\n  (w2, ctx) => new CanvasRenderer(w2, ctx)\n);\nfunction makeCustomSeriesClass(name2, def) {\n  const cls = class CustomSeries {\n    /**\n     * @param {any} w @param {any} ctx @param {any} xyRatios\n     */\n    constructor(w2, ctx, xyRatios) {\n      this.w = w2;\n      this.ctx = ctx;\n      this.xyRatios = xyRatios;\n      this._warned = false;\n    }\n    /**\n     * @param {any[]} series parsed y-arrays (one per drawn series)\n     * @param {string} [_ctype]\n     * @param {number[]} [seriesIndices] realIndex per entry (combo dispatch)\n     * @returns {any} the wrap group\n     */\n    draw(series, _ctype, seriesIndices) {\n      var _a, _b;\n      const w2 = this.w;\n      const graphics = new Graphics(w2, this.ctx);\n      const emit = seriesEmitter(this.ctx, graphics);\n      const ret = graphics.group({ class: \"apexcharts-marks-series\" });\n      series.forEach((_s, idx) => {\n        var _a2;\n        const realIndex = Array.isArray(seriesIndices) ? seriesIndices[idx] : idx;\n        const elSeries = graphics.group({\n          class: \"apexcharts-series\",\n          rel: realIndex + 1,\n          seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[realIndex]),\n          \"data:realIndex\": realIndex\n        });\n        const scales = this._scales(\n          realIndex,\n          (w2.seriesData.series[realIndex] || []).length\n        );\n        const color = w2.globals.colors[realIndex];\n        const rawData = (\n          /** @type {any} */\n          ((_a2 = w2.config.series[realIndex]) == null ? void 0 : _a2.data) || []\n        );\n        const xvals = w2.seriesData.seriesX[realIndex] || [];\n        const yvals = w2.seriesData.series[realIndex] || [];\n        w2.globals.seriesXvalues[realIndex] = [];\n        w2.globals.seriesYvalues[realIndex] = [];\n        if (typeof w2.globals.pointsArray[realIndex] === \"undefined\") {\n          w2.globals.pointsArray[realIndex] = [];\n        }\n        for (let j = 0; j < yvals.length; j++) {\n          const yVal = yvals[j];\n          if (yVal === null || typeof yVal === \"undefined\") continue;\n          const xVal = xvals[j];\n          const xPx = scales.xAt(j, xVal);\n          const yPx = scales.y(yVal);\n          const api = this._api(emit, elSeries, realIndex, j);\n          try {\n            def.renderItem({\n              datum: rawData[j],\n              x: xPx,\n              y: yPx,\n              scales,\n              api,\n              seriesIndex: realIndex,\n              dataPointIndex: j,\n              color\n            });\n          } catch (e2) {\n            if (!this._warned) {\n              console.warn(\n                `[apexcharts] renderItem for series type \"${name2}\" threw; skipping datum:`,\n                e2\n              );\n              this._warned = true;\n            }\n          }\n          w2.globals.seriesXvalues[realIndex][j] = xPx;\n          w2.globals.seriesYvalues[realIndex][j] = yPx;\n          w2.globals.pointsArray[realIndex][j] = [xPx, yPx];\n        }\n        graphics.setupEventDelegation(elSeries, \".apexcharts-marks-mark\");\n        ret.add(elSeries);\n      });\n      (_b = (_a = this.ctx.animations) == null ? void 0 : _a.animationCompleted) == null ? void 0 : _b.call(_a, ret);\n      return ret;\n    }\n    /**\n     * Series-space (elGraphical-local, translate-free) scales, matching how the\n     * built-ins compute pixels, so custom marks align with axes and gridlines\n     * and paint correctly on the elGraphical-local canvas.\n     * @param {number} realIndex\n     * @param {number} [nPts] number of data points (for categorical band sizing)\n     */\n    _scales(realIndex, nPts) {\n      var _a, _b, _c, _d;\n      const gl = this.w.globals;\n      const cnf = this.w.config;\n      const xRatio = this.xyRatios.xRatio;\n      const yRatioArr = this.xyRatios.yRatio;\n      const axis = (_b = (_a = gl.seriesYAxisReverseMap) == null ? void 0 : _a[realIndex]) != null ? _b : 0;\n      const yr = Array.isArray(yRatioArr) ? (_c = yRatioArr[axis]) != null ? _c : yRatioArr[0] : yRatioArr;\n      const maxYArr = (\n        /** @type {any} */\n        gl.maxYArr\n      );\n      const maxY = Array.isArray(maxYArr) && maxYArr.length ? (_d = maxYArr[axis]) != null ? _d : gl.maxY : gl.maxY;\n      const gridWidth = gl.gridWidth;\n      const gridHeight = gl.gridHeight;\n      const catMode = !gl.isXNumeric;\n      const n2 = nPts || gl.dataPoints || 1;\n      const bandW = n2 > 0 ? gridWidth / n2 : gridWidth;\n      const tickOn = cnf.xaxis.tickPlacement === \"on\";\n      const x = (v2) => xRatio ? (v2 - gl.minX) / xRatio : gridWidth / 2;\n      const y = (v2) => (maxY - v2) / yr;\n      const xAt = (index, v2) => {\n        if (!catMode) return x(v2);\n        if (tickOn && n2 > 1) return index / (n2 - 1) * gridWidth;\n        return (index + 0.5) * bandW;\n      };\n      const step = gl.minXDiff || 1;\n      const band = catMode ? bandW : xRatio ? step / xRatio : gridWidth;\n      return {\n        x,\n        xAt,\n        y,\n        gridWidth,\n        gridHeight,\n        band\n      };\n    }\n    /**\n     * Per-datum primitive API. Each call emits immediately (canvas-aware via\n     * `emit`), tags the node with the datum's identity, and adds it to the\n     * series group; on canvas the tag/add are inert (marks live on the canvas,\n     * events are coordinate-based).\n     * @param {any} emit @param {any} elSeries @param {number} realIndex @param {number} j\n     */\n    _api(emit, elSeries, realIndex, j) {\n      const tag = (el) => {\n        if (el) {\n          try {\n            el.node.setAttribute(\"index\", String(realIndex));\n            el.node.setAttribute(\"j\", String(j));\n            el.node.classList.add(\"apexcharts-marks-mark\");\n          } catch (e2) {\n          }\n          elSeries.add(el);\n        }\n        return el;\n      };\n      return {\n        /** @param {any} o */\n        path: (o2 = {}) => {\n          var _a, _b, _c, _d, _e, _f, _g, _h, _i;\n          return tag(\n            emit.drawPath({\n              d: o2.d || \"\",\n              stroke: (_a = o2.stroke) != null ? _a : \"#000\",\n              strokeWidth: (_c = (_b = o2.width) != null ? _b : o2.strokeWidth) != null ? _c : 1,\n              fill: (_d = o2.fill) != null ? _d : \"none\",\n              fillOpacity: (_f = o2.fillOpacity) != null ? _f : o2.fill && o2.fill !== \"none\" ? (_e = o2.opacity) != null ? _e : 1 : 0,\n              strokeOpacity: (_h = (_g = o2.strokeOpacity) != null ? _g : o2.opacity) != null ? _h : 1,\n              strokeDashArray: (_i = o2.dash) != null ? _i : 0,\n              strokeLinecap: o2.lineCap\n            })\n          );\n        },\n        /** @param {any} o */\n        line: (o2 = {}) => {\n          var _a, _b, _c, _d;\n          return tag(\n            emit.drawLine(\n              o2.x1,\n              o2.y1,\n              o2.x2,\n              o2.y2,\n              (_a = o2.stroke) != null ? _a : \"#000\",\n              (_b = o2.dash) != null ? _b : 0,\n              (_d = (_c = o2.width) != null ? _c : o2.strokeWidth) != null ? _d : 1\n            )\n          );\n        },\n        /** @param {any} o */\n        rect: (o2 = {}) => {\n          var _a, _b, _c, _d, _e, _f, _g, _h;\n          return tag(\n            emit.drawRect(\n              (_a = o2.x) != null ? _a : 0,\n              (_b = o2.y) != null ? _b : 0,\n              (_c = o2.w) != null ? _c : 0,\n              (_d = o2.h) != null ? _d : 0,\n              (_e = o2.r) != null ? _e : 0,\n              (_f = o2.fill) != null ? _f : \"#000\",\n              (_g = o2.opacity) != null ? _g : 1,\n              o2.stroke != null ? (_h = o2.strokeWidth) != null ? _h : 1 : null,\n              o2.stroke\n            )\n          );\n        },\n        /** @param {any} o */\n        circle: (o2 = {}) => {\n          var _a, _b, _c, _d, _e;\n          return tag(\n            emit.drawCircle((_a = o2.r) != null ? _a : 0, {\n              cx: (_b = o2.cx) != null ? _b : 0,\n              cy: (_c = o2.cy) != null ? _c : 0,\n              fill: (_d = o2.fill) != null ? _d : \"#000\",\n              stroke: o2.stroke || \"none\",\n              \"stroke-width\": (_e = o2.strokeWidth) != null ? _e : o2.stroke ? 1 : 0\n            })\n          );\n        },\n        /** @param {any} o */\n        text: (o2 = {}) => {\n          var _a, _b, _c, _d;\n          return tag(\n            emit.drawText({\n              x: (_a = o2.x) != null ? _a : 0,\n              y: (_b = o2.y) != null ? _b : 0,\n              text: (_c = o2.text) != null ? _c : \"\",\n              textAnchor: (_d = o2.anchor) != null ? _d : \"start\",\n              fontSize: o2.size,\n              foreColor: o2.color,\n              fontWeight: o2.weight\n            })\n          );\n        }\n      };\n    }\n  };\n  cls.dataType = def.dataType || \"xy\";\n  cls.yExtent = typeof def.yExtent === \"function\" ? def.yExtent : null;\n  return cls;\n}\nApexCharts._customSeriesFactory = makeCustomSeriesClass;\nconst DARK_QUERY = \"(prefers-color-scheme: dark)\";\nconst CONTRAST_QUERY = \"(prefers-contrast: more)\";\nclass OSThemeWatcher {\n  /**\n   * @param {any} w @param {any} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    if (w2.config.theme.follow !== \"os\" || !Environment.isBrowser()) return;\n    const media = this._ensureMedia();\n    if (!media) return;\n    this._applyToConfig(media);\n    this._ensureListeners(media);\n  }\n  /**\n   * Create (once per instance) the MediaQueryLists and stash them on `ctx` so\n   * they persist across the re-render that `updateOptions` triggers.\n   * @returns {{dark: MediaQueryList|null, contrast: MediaQueryList|null, handler: null|(()=>void)}|null}\n   */\n  _ensureMedia() {\n    if (!this.ctx._osThemeMedia) {\n      const dark = BrowserAPIs.matchMedia(DARK_QUERY);\n      const contrast = BrowserAPIs.matchMedia(CONTRAST_QUERY);\n      if (!dark && !contrast) return null;\n      this.ctx._osThemeMedia = { dark, contrast, handler: null };\n    }\n    return this.ctx._osThemeMedia;\n  }\n  /**\n   * Write the OS-resolved mode / high-contrast onto the live `w.config.theme`.\n   * @param {{dark: MediaQueryList|null, contrast: MediaQueryList|null}} media\n   */\n  _applyToConfig(media) {\n    const theme = this.w.config.theme;\n    if (media.dark) {\n      theme.mode = media.dark.matches ? \"dark\" : \"light\";\n    }\n    if (media.contrast && media.contrast.matches) {\n      theme.accessibility = theme.accessibility || {};\n      theme.accessibility.colorBlindMode = \"highContrast\";\n    }\n  }\n  /**\n   * Attach the `change` listener once. The handler closes over `ctx` + `media`\n   * (both stable across re-renders), NOT over `this` (a fresh watcher is built\n   * each create), so it never goes stale.\n   * @param {{dark: MediaQueryList|null, contrast: MediaQueryList|null, handler: null|(()=>void)}} media\n   */\n  _ensureListeners(media) {\n    if (media.handler) return;\n    const ctx = this.ctx;\n    const handler = () => {\n      const m2 = ctx._osThemeMedia;\n      if (!m2) return;\n      const themeOpt = { mode: m2.dark && m2.dark.matches ? \"dark\" : \"light\" };\n      if (m2.contrast && m2.contrast.matches) {\n        themeOpt.accessibility = { colorBlindMode: \"highContrast\" };\n      } else {\n        themeOpt.accessibility = { colorBlindMode: \"\" };\n      }\n      ctx.updateOptions({ theme: themeOpt }, false, true, false);\n    };\n    OSThemeWatcher._add(media.dark, handler);\n    OSThemeWatcher._add(media.contrast, handler);\n    media.handler = handler;\n  }\n  /** Remove the listeners and drop the stashed media. Called on full destroy. */\n  teardown() {\n    const media = this.ctx._osThemeMedia;\n    if (!media) return;\n    if (media.handler) {\n      OSThemeWatcher._remove(media.dark, media.handler);\n      OSThemeWatcher._remove(media.contrast, media.handler);\n    }\n    this.ctx._osThemeMedia = null;\n  }\n  /**\n   * @param {MediaQueryList|null} mql @param {()=>void} handler\n   */\n  static _add(mql, handler) {\n    if (!mql) return;\n    if (typeof mql.addEventListener === \"function\") {\n      mql.addEventListener(\"change\", handler);\n    } else if (typeof /** @type {any} */\n    mql.addListener === \"function\") {\n      mql.addListener(handler);\n    }\n  }\n  /**\n   * @param {MediaQueryList|null} mql @param {()=>void} handler\n   */\n  static _remove(mql, handler) {\n    if (!mql) return;\n    if (typeof mql.removeEventListener === \"function\") {\n      mql.removeEventListener(\"change\", handler);\n    } else if (typeof /** @type {any} */\n    mql.removeListener === \"function\") {\n      mql.removeListener(handler);\n    }\n  }\n}\nApexCharts.registerFeatures({ osThemeWatcher: OSThemeWatcher });\nconst MARK_SELECTOR = [\n  \".apexcharts-bar-area\",\n  \".apexcharts-candlestick-area\",\n  \".apexcharts-boxPlot-area\",\n  \".apexcharts-rangebar-area\",\n  \".apexcharts-marker\"\n].join(\", \");\nconst FILTER_MARK_SELECTOR = [\n  \".apexcharts-pie-area\",\n  \".apexcharts-bar-area\"\n].join(\", \");\nconst DIMMED_CLASS = \"apexcharts-crossfilter-dimmed\";\nconst PIE_TYPES = [\"pie\", \"donut\", \"polarArea\", \"radialBar\"];\nclass LinkedViews {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this._dimmed = false;\n    this._wired = false;\n    this._pending = false;\n    this._lastValues = null;\n    this._onPointSelect = this._onPointSelect.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    this._onChange = this._onChange.bind(this);\n    if (this._mode() === \"filter\") this._initEngine();\n  }\n  /** @returns {'highlight'|'filter'|'off'} */\n  _mode() {\n    const link = this.w.config.chart.link;\n    if (link && typeof link.dimension === \"function\") return \"filter\";\n    if (link && link.enabled) return \"highlight\";\n    return \"off\";\n  }\n  _enabled() {\n    const link = this.w.config.chart.link;\n    return !!(link && link.enabled);\n  }\n  /**\n   * The source chart's rectangle brush produced a data-x range. In FILTER mode\n   * this becomes a `[min,max]` range filter on the chart's dimension (the other\n   * charts re-aggregate). In HIGHLIGHT mode (P1) it dims out-of-range marks\n   * across the group. Called (null-safe) from ZoomPanSelection selectionDrawn /\n   * selectionDragging.\n   * @param {{min:number, max:number}} xaxis\n   */\n  onSourceSelection(xaxis) {\n    var _a;\n    const mode = this._mode();\n    if (mode === \"off\") return;\n    if (!xaxis || xaxis.min == null || xaxis.max == null) return;\n    let min = Math.min(xaxis.min, xaxis.max);\n    let max = Math.max(xaxis.min, xaxis.max);\n    const gMinX = this.w.globals.minX;\n    const gMaxX = this.w.globals.maxX;\n    if (isFinite(gMinX) && isFinite(gMaxX) && gMaxX > gMinX) {\n      const tol = (gMaxX - gMinX) * 1e-6;\n      if (min - gMinX <= tol) min = gMinX;\n      if (gMaxX - max <= tol) max = gMaxX;\n    }\n    if (mode === \"filter\") {\n      const cf = this._cf();\n      if (!cf) return;\n      cf.filter(this._chartId(), [min, max]);\n      this._fireFilterChange(cf, [min, max]);\n      return;\n    }\n    this._group().forEach((ch) => {\n      var _a2;\n      (_a2 = ch == null ? void 0 : ch.linkedViews) == null ? void 0 : _a2.applyDim(min, max);\n    });\n    const args = { xaxis: { min, max }, sourceChartID: this.w.globals.chartID };\n    if (typeof this.w.config.chart.events.crossFilter === \"function\") {\n      this.w.config.chart.events.crossFilter(this.ctx, args);\n    }\n    (_a = this.ctx.events) == null ? void 0 : _a.fireEvent(\"crossFilter\", [this.ctx, args]);\n  }\n  /** self + grouped siblings (dedup-safe; getGroupedCharts excludes self). */\n  _group() {\n    const siblings = typeof this.ctx.getGroupedCharts === \"function\" ? this.ctx.getGroupedCharts() : [];\n    return [this.ctx, ...siblings];\n  }\n  /**\n   * Dim this chart's marks whose x is outside [min,max]; un-dim those inside.\n   * No re-render, so mark identities are preserved.\n   * @param {number} min @param {number} max\n   */\n  applyDim(min, max) {\n    if (!this._enabled()) return;\n    const w2 = this.w;\n    const baseEl = w2.dom.baseEl;\n    if (!baseEl) return;\n    const dimOpacity = w2.config.chart.link.dimOpacity;\n    if (w2.dom.elWrap && typeof dimOpacity === \"number\") {\n      w2.dom.elWrap.style.setProperty(\"--apx-cf-dim\", String(dimOpacity));\n    }\n    const seriesX = w2.globals.seriesX || [];\n    const marks = baseEl.querySelectorAll(MARK_SELECTOR);\n    marks.forEach((node) => {\n      const jAttr = node.getAttribute(\"j\");\n      if (jAttr === null) return;\n      const j = parseInt(jAttr, 10);\n      const iAttr = node.getAttribute(\"index\");\n      const i2 = iAttr === null ? 0 : parseInt(iAttr, 10);\n      const row = seriesX[i2] || seriesX[0];\n      if (!row) return;\n      const x = row[j];\n      if (x == null) return;\n      node.classList.toggle(DIMMED_CLASS, x < min || x > max);\n    });\n    this._dimmed = true;\n  }\n  /** Remove dimming from this chart only. */\n  clear() {\n    const baseEl = this.w.dom.baseEl;\n    if (!baseEl) return;\n    baseEl.querySelectorAll(\".\" + DIMMED_CLASS).forEach((n2) => n2.classList.remove(DIMMED_CLASS));\n    this._dimmed = false;\n  }\n  /** Clear dimming across the whole group (backs chart.clearCrossfilter). */\n  clearGroup() {\n    if (this._mode() === \"filter\") {\n      const cf = this._cf();\n      if (cf) cf.reset();\n      return;\n    }\n    this._group().forEach((ch) => {\n      var _a;\n      return (_a = ch == null ? void 0 : ch.linkedViews) == null ? void 0 : _a.clear();\n    });\n  }\n  // ─── FILTER mode (crossfilter engine glue) ───────────────────────────────\n  /**\n   * The chart's stable internal id (keys its dimension in the coordinator).\n   * Always set by the ApexCharts constructor (falls back to a cuid).\n   * @returns {string}\n   */\n  _chartId() {\n    return (\n      /** @type {string} */\n      this.w.globals.chartID\n    );\n  }\n  /** @returns {import('./Crossfilter').default|null} the coordinator, or null */\n  _cf() {\n    const link = this.w.config.chart.link;\n    const id = link && (link.id || this.w.config.chart.group);\n    return id ? se.get(id) : null;\n  }\n  _isPie() {\n    return PIE_TYPES.indexOf(this.w.config.chart.type) !== -1;\n  }\n  _isHeatmap() {\n    return this.w.config.chart.type === \"heatmap\";\n  }\n  /**\n   * Before the first render: resolve the coordinator, register this chart's\n   * dimension, inject the initial aggregated series into w.config (so the first\n   * paint is already aggregated, no empty flash), and wire the listeners.\n   */\n  _initEngine() {\n    const cf = this._cf();\n    const link = this.w.config.chart.link;\n    if (!cf) {\n      const id = link && link.id || this.w.config.chart.group;\n      console.warn(\n        `[apexcharts] chart.link.dimension is set but no crossfilter coordinator \"${id}\" exists. Call ApexCharts.crossfilter({ id, records }) before creating the chart.`\n      );\n      return;\n    }\n    const chartId = this._chartId();\n    if (!cf.hasDimension(chartId)) {\n      cf.registerDimension(chartId, {\n        dimension: link.dimension,\n        reduce: link.reduce,\n        // heatmap => 2D matrix dimension (accessor returns [xKey, yKey]).\n        type: link.type || (this._isHeatmap() ? \"matrix\" : void 0),\n        bins: link.bins,\n        order: link.order\n      });\n    }\n    this._injectSeries(cf.aggregateFor(chartId));\n    this._wire(cf);\n  }\n  /**\n   * Build the chart's series value from an aggregation, shaped by chart type:\n   *   matrix (heatmap) -> [{ name:yKey, data:[{x:xKey, y:value}] }]\n   *   pie/donut  -> number[]\n   *   axis + category -> [{ name, data:number[] }] (categories set separately)\n   *   axis + range    -> [{ name, data:[x,value][] }] on a numeric/time x-axis\n   * @param {any} agg\n   */\n  _seriesFromAgg(agg) {\n    if (agg.type === \"matrix\") {\n      return agg.yLabels.map((yl, yi) => ({\n        name: String(yl),\n        data: agg.xLabels.map((xl, xi) => ({\n          x: String(xl),\n          y: agg.matrix[yi][xi]\n        }))\n      }));\n    }\n    if (this._isPie()) return agg.values.slice();\n    const name2 = this.w.config.chart.link.seriesName || \"Count\";\n    if (agg.type === \"range\") {\n      return [{ name: name2, data: agg.labels.map((x, i2) => [x, agg.values[i2]]) }];\n    }\n    return [{ name: name2, data: agg.values.slice() }];\n  }\n  /**\n   * Value signature used to skip a reflow when only dimming changed.\n   * @param {any} agg\n   */\n  _sigOf(agg) {\n    return JSON.stringify(agg.matrix || agg.values);\n  }\n  /**\n   * Write the aggregation into w.config as the chart's series/labels. Runs once\n   * before the first paint; later updates go through updateSeries.\n   * @param {any} agg\n   */\n  _injectSeries(agg) {\n    const w2 = this.w;\n    this._lastValues = this._sigOf(agg);\n    w2.config.series = this._seriesFromAgg(agg);\n    if (agg.type === \"matrix\") return;\n    if (this._isPie()) {\n      w2.config.labels = agg.labels.map(String);\n    } else if (agg.type === \"category\") {\n      if (!w2.config.xaxis) w2.config.xaxis = {};\n      w2.config.xaxis.categories = agg.labels.map(String);\n    } else if (agg.type === \"range\") {\n      this._pinRangeDomain(agg.edges);\n    }\n  }\n  /**\n   * Pin the numeric/datetime x-axis to the outer bin edges of a range-binned\n   * dimension (unless the user set xaxis.min/max explicitly). See _injectSeries.\n   * @param {number[]|null|undefined} edges\n   */\n  _pinRangeDomain(edges) {\n    if (!Array.isArray(edges) || edges.length < 2) return;\n    const w2 = this.w;\n    if (!w2.config.xaxis) w2.config.xaxis = /** @type {any} */\n    {};\n    if (w2.config.xaxis.min == null) w2.config.xaxis.min = edges[0];\n    if (w2.config.xaxis.max == null) w2.config.xaxis.max = edges[edges.length - 1];\n  }\n  /** @param {import('./Crossfilter').default} cf */\n  _wire(cf) {\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    cf.on(\"change\", this._onChange);\n  }\n  /**\n   * A pie slice / bar was clicked: toggle its bucket key on the coordinator.\n   * @param {any} _e @param {any} _ctx @param {{dataPointIndex?:number}} opts\n   */\n  _onPointSelect(_e, _ctx, opts) {\n    if (this._mode() !== \"filter\" || !opts || opts.dataPointIndex == null) return;\n    const cf = this._cf();\n    if (!cf) return;\n    const chartId = this._chartId();\n    const agg = cf.aggregateFor(chartId);\n    if (agg.type === \"matrix\") return;\n    const key = agg.keys[opts.dataPointIndex];\n    if (key == null) return;\n    cf.toggleKey(chartId, key);\n    this._fireFilterChange(cf, key);\n  }\n  /** Coordinator filter changed: re-aggregate this chart on a microtask so the\n   *  triggering click handler unwinds before we destroy/redraw the DOM. */\n  _onChange() {\n    if (this._mode() !== \"filter\" || this._pending) return;\n    this._pending = true;\n    Promise.resolve().then(() => {\n      this._pending = false;\n      if (this.w.globals.isDestroyed) return;\n      this._applyAggregation();\n    });\n  }\n  /**\n   * Pull this chart's crossfilter aggregation and push it through updateSeries\n   * (animated). When the values are unchanged (e.g. only this chart's own\n   * filter moved, which it ignores for itself), skip the reflow and just\n   * refresh the self-dim.\n   */\n  _applyAggregation() {\n    if (this._mode() !== \"filter\") return;\n    const cf = this._cf();\n    if (!cf) return;\n    const agg = cf.aggregateFor(this._chartId());\n    const sig = this._sigOf(agg);\n    if (sig === this._lastValues) {\n      this._applySelfDim();\n      return;\n    }\n    this._lastValues = sig;\n    this.ctx.updateSeries(this._seriesFromAgg(agg), true);\n  }\n  _afterRender() {\n    if (this._mode() !== \"filter\") return;\n    const series = this.w.config.series;\n    if (!series || series.length === 0) {\n      this._reassertSeries();\n      return;\n    }\n    this._applySelfDim();\n  }\n  /** Restore the aggregated series after an external updateSeries emptied it.\n   *  Deferred a microtask so the triggering update fully unwinds first. */\n  _reassertSeries() {\n    if (this._pending) return;\n    this._pending = true;\n    Promise.resolve().then(() => {\n      this._pending = false;\n      if (this.w.globals.isDestroyed) return;\n      const cf = this._cf();\n      if (!cf) return;\n      const agg = cf.aggregateFor(this._chartId());\n      const series = this._seriesFromAgg(agg);\n      if (!series.length) return;\n      this._lastValues = this._sigOf(agg);\n      this.ctx.updateSeries(series, true);\n    });\n  }\n  /**\n   * Dim this chart's own buckets that are not in its own filter (no filter ->\n   * none dimmed). Categorical: dim buckets whose key is not in the selected Set.\n   * Range: dim bins lying fully outside the selected `[min,max]`. Keyed by each\n   * mark's `j` (dataPointIndex) -> the aggregation key.\n   */\n  _applySelfDim() {\n    const cf = this._cf();\n    if (!cf) return;\n    const w2 = this.w;\n    const baseEl = w2.dom.baseEl;\n    if (!baseEl) return;\n    const chartId = this._chartId();\n    const filter = cf.filterOf(chartId);\n    const dimOpacity = w2.config.chart.link.dimOpacity;\n    if (w2.dom.elWrap && typeof dimOpacity === \"number\") {\n      w2.dom.elWrap.style.setProperty(\"--apx-cf-dim\", String(dimOpacity));\n    }\n    const isCategory = filter instanceof Set;\n    const isRange = Array.isArray(filter);\n    const agg = cf.aggregateFor(chartId);\n    if (agg.type === \"matrix\") return;\n    const keys = agg.keys;\n    baseEl.querySelectorAll(FILTER_MARK_SELECTOR).forEach((node) => {\n      const jAttr = node.getAttribute(\"j\");\n      if (jAttr === null) return;\n      const key = keys[parseInt(jAttr, 10)];\n      let dim = false;\n      if (isCategory) {\n        dim = !/** @type {Set<any>} */\n        filter.has(key);\n      } else if (isRange && Array.isArray(key)) {\n        dim = key[1] <= filter[0] || key[0] >= filter[1];\n      }\n      node.classList.toggle(DIMMED_CLASS, dim);\n    });\n    this._dimmed = !!filter;\n  }\n  /**\n   * Fire the `filterChange` event on this (source) chart.\n   * @param {import('./Crossfilter').default} cf @param {any} key\n   */\n  _fireFilterChange(cf, key) {\n    var _a;\n    const args = __spreadProps(__spreadValues({}, cf.state()), {\n      sourceChartID: this._chartId(),\n      key\n    });\n    const events = this.w.config.chart.events;\n    if (typeof events.filterChange === \"function\") {\n      events.filterChange(this.ctx, args);\n    }\n    (_a = this.ctx.events) == null ? void 0 : _a.fireEvent(\"filterChange\", [this.ctx, args]);\n  }\n  teardown() {\n    var _a, _b, _c, _d, _e, _f;\n    this.clear();\n    if (this._wired) {\n      (_b = (_a = this.ctx).removeEventListener) == null ? void 0 : _b.call(_a, \"dataPointSelection\", this._onPointSelect);\n      (_d = (_c = this.ctx).removeEventListener) == null ? void 0 : _d.call(_c, \"mounted\", this._afterRender);\n      (_f = (_e = this.ctx).removeEventListener) == null ? void 0 : _f.call(_e, \"updated\", this._afterRender);\n      const cf = this._cf();\n      if (cf) {\n        cf.off(\"change\", this._onChange);\n        cf.removeDimension(this._chartId());\n      }\n      this._wired = false;\n    }\n  }\n}\nApexCharts.registerFeatures({ linkedViews: LinkedViews });\nconst AC = (\n  /** @type {any} */\n  ApexCharts\n);\nAC._crossfilterFactory = (opts) => se.getOrCreate(opts);\nAC._crossfilterGet = (id) => se.get(id);\nconst DRAG_CLASS = \"apexcharts-ink-draggable\";\nconst TYPES = [\"point\", \"xaxis\", \"yaxis\"];\nconst EDGE_PX = 8;\nconst CLICK_SLOP_PX = 2;\nconst FONT_STEPS = [10, 11, 12, 14, 17, 20];\nconst MARKER_SHAPES = [\"circle\", \"square\", \"diamond\", \"triangle\"];\nconst SHAPE_GLYPHS = {\n  circle: \"●\",\n  square: \"■\",\n  diamond: \"◆\",\n  triangle: \"▲\"\n};\nconst NOTE_COLORS = [\n  \"#ffffff\",\n  \"#334155\",\n  \"#2563eb\",\n  \"#16a34a\",\n  \"#d97706\",\n  \"#dc2626\"\n];\nconst TRASH_ICON = '<svg viewBox=\"0 0 24 24\" width=\"13\" height=\"13\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M3 6h18M8 6V4a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v2m3 0v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"/></svg>';\nclass InkLayer {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this._wired = false;\n    this._drag = null;\n    this._editor = null;\n    this._creating = false;\n    this._createSeq = 0;\n    this._attach = this._attach.bind(this);\n    this._onRerender = this._onRerender.bind(this);\n    this._onMove = this._onMove.bind(this);\n    this._onUp = this._onUp.bind(this);\n    this._onCreateClick = this._onCreateClick.bind(this);\n    this._onDocDownEditor = this._onDocDownEditor.bind(this);\n    if (this._enabledGlobally() || this._hasDraggable() || this._paletteEnabled()) {\n      this._wire();\n    }\n  }\n  _enabledGlobally() {\n    const ink = this.w.config.chart.ink;\n    return !!(ink && ink.enabled);\n  }\n  _paletteEnabled() {\n    const ink = this.w.config.chart.ink;\n    return !!(ink && ink.palette);\n  }\n  _snapEnabled() {\n    const ink = this.w.config.chart.ink;\n    return !!(ink && ink.snap);\n  }\n  // ─── P5: snap to gridlines ────────────────────────────────────────────────\n  /** @param {number} v @param {number[]} ticks @returns {number} nearest tick */\n  _nearest(v2, ticks) {\n    let best = v2;\n    let bd = Infinity;\n    for (let i2 = 0; i2 < ticks.length; i2++) {\n      const d = Math.abs(ticks[i2] - v2);\n      if (d < bd) {\n        bd = d;\n        best = ticks[i2];\n      }\n    }\n    return best;\n  }\n  /**\n   * Snap an x value to the nearest x gridline (numeric axes only).\n   * @param {number} x\n   */\n  _snapX(x) {\n    if (!this._snapEnabled() || typeof x !== \"number\") return x;\n    const s2 = this.w.globals.xAxisScale;\n    return s2 && Array.isArray(s2.result) && s2.result.length ? this._nearest(x, s2.result) : x;\n  }\n  /**\n   * Snap a y value to the nearest y gridline.\n   * @param {number} y @param {number} si\n   */\n  _snapY(y, si) {\n    if (!this._snapEnabled() || typeof y !== \"number\") return y;\n    const scales = this.w.globals.yAxisScale;\n    const s2 = scales && scales[si];\n    return s2 && Array.isArray(s2.result) && s2.result.length ? this._nearest(y, s2.result) : y;\n  }\n  /** @param {string} type @returns {any[]} the config annotations of a type */\n  _annoList(type) {\n    const a2 = this.w.config.annotations;\n    if (!a2) return [];\n    const key = type === \"point\" ? \"points\" : type;\n    return Array.isArray(a2[key]) ? a2[key] : [];\n  }\n  /** @param {any} anno */\n  _isDraggable(anno) {\n    if (!anno) return false;\n    if (anno.draggable === true) return true;\n    if (anno.draggable === false) return false;\n    return this._enabledGlobally();\n  }\n  _hasDraggable() {\n    return TYPES.some((t2) => this._annoList(t2).some((p2) => this._isDraggable(p2)));\n  }\n  _wire() {\n    if (this._wired) return;\n    this._wired = true;\n    this.ctx.addEventListener(\"mounted\", this._onRerender);\n    this.ctx.addEventListener(\"updated\", this._onRerender);\n  }\n  /**\n   * A full (re)render rebuilds the SVG and may swap the annotations config\n   * (updateOptions, undo restore), so an open editor card points at stale\n   * state: drop it (without committing) before rebinding handlers. Targeted\n   * redraws call _attach() directly and keep the card open.\n   */\n  _onRerender() {\n    this._closeEditor(false);\n    this._attach();\n    if (this._creating) {\n      const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n      if (svg) {\n        svg.style.cursor = \"crosshair\";\n        svg.addEventListener(\"click\", this._onCreateClick, true);\n      }\n    }\n  }\n  /**\n   * After each (re)render, bind drag + edit handlers to every draggable\n   * annotation's elements. Idempotent via a per-node flag so a targeted redraw\n   * re-runs this without double-binding the untouched annotations.\n   */\n  _attach() {\n    const w2 = this.w;\n    const baseEl = w2.dom.baseEl;\n    if (!baseEl) return;\n    TYPES.forEach((type) => {\n      this._annoList(type).forEach((anno, index) => {\n        if (!this._isDraggable(anno)) return;\n        if (!anno.id) {\n          anno.id = \"apexcharts-ink-\" + type + \"-\" + index + \"-\" + w2.globals.chartID;\n        }\n        baseEl.querySelectorAll(\".\" + anno.id).forEach((el) => {\n          if (el.__inkBound) return;\n          el.__inkBound = true;\n          el.style.cursor = \"move\";\n          el.classList.add(DRAG_CLASS);\n          el.addEventListener(\n            \"mousedown\",\n            (e2) => this._onDown(e2, type, index)\n          );\n          el.addEventListener(\n            \"touchstart\",\n            (e2) => this._onDown(e2, type, index)\n          );\n          el.addEventListener(\"dblclick\", (e2) => {\n            e2.preventDefault();\n            e2.stopPropagation();\n            this._startEdit(type, index, { select: true });\n          });\n        });\n      });\n    });\n    if (this._paletteEnabled()) this._renderPalette();\n  }\n  // ─── drag / resize ────────────────────────────────────────────────────────\n  /**\n   * @param {any} e @param {string} type @param {number} index\n   */\n  _onDown(e2, type, index) {\n    if (e2.button && e2.button !== 0) return;\n    const w2 = this.w;\n    const doc = w2.dom.baseEl && w2.dom.baseEl.ownerDocument;\n    if (!doc) return;\n    e2.stopPropagation();\n    if (e2.cancelable) e2.preventDefault();\n    const isTouch = e2.type === \"touchstart\";\n    const ev = isTouch ? e2.touches[0] : e2;\n    const svgRoot = w2.dom.Paper && w2.dom.Paper.node;\n    const ctm = svgRoot && svgRoot.getScreenCTM ? svgRoot.getScreenCTM() : null;\n    const anno = this._annoList(type)[index];\n    let mode = \"move\";\n    let rect = null;\n    let origX = 0;\n    let origW = 0;\n    if (type === \"xaxis\" && anno.x2 != null) {\n      rect = w2.dom.baseEl.querySelector(\".apexcharts-annotation-rect.\" + anno.id);\n      if (rect) {\n        const r2 = rect.getBoundingClientRect();\n        if (Math.abs(ev.clientX - r2.left) <= EDGE_PX) mode = \"resize-x1\";\n        else if (Math.abs(ev.clientX - r2.right) <= EDGE_PX) mode = \"resize-x2\";\n        origX = parseFloat(rect.getAttribute(\"x\")) || 0;\n        origW = parseFloat(rect.getAttribute(\"width\")) || 0;\n      }\n    }\n    this._drag = {\n      type,\n      index,\n      anno,\n      els: Array.from(w2.dom.baseEl.querySelectorAll(\".\" + anno.id)),\n      mode,\n      rect,\n      origX,\n      origW,\n      startX: ev.clientX,\n      startY: ev.clientY,\n      scaleX: ctm && ctm.a ? ctm.a : 1,\n      scaleY: ctm && ctm.d ? ctm.d : 1,\n      dxPixel: 0,\n      dyPixel: 0,\n      moved: false\n    };\n    doc.addEventListener(\"mousemove\", this._onMove);\n    doc.addEventListener(\"touchmove\", this._onMove, { passive: false });\n    doc.addEventListener(\"mouseup\", this._onUp);\n    doc.addEventListener(\"touchend\", this._onUp);\n  }\n  /** @param {any} me */\n  _onMove(me) {\n    const d = this._drag;\n    if (!d) return;\n    if (me.cancelable) me.preventDefault();\n    const mev = me.type === \"touchmove\" ? me.touches[0] : me;\n    d.dxPixel = (mev.clientX - d.startX) / d.scaleX;\n    d.dyPixel = (mev.clientY - d.startY) / d.scaleY;\n    if (Math.abs(d.dxPixel) > CLICK_SLOP_PX || Math.abs(d.dyPixel) > CLICK_SLOP_PX) {\n      d.moved = true;\n    }\n    if (d.mode === \"move\") {\n      const t2 = `translate(${d.dxPixel} ${d.dyPixel})`;\n      d.els.forEach((el) => el.setAttribute(\"transform\", t2));\n    } else if (d.rect) {\n      if (d.mode === \"resize-x1\") {\n        d.rect.setAttribute(\"x\", d.origX + d.dxPixel);\n        d.rect.setAttribute(\"width\", Math.max(1, d.origW - d.dxPixel));\n      } else if (d.mode === \"resize-x2\") {\n        d.rect.setAttribute(\"width\", Math.max(1, d.origW + d.dxPixel));\n      }\n    }\n  }\n  _onUp() {\n    const d = this._drag;\n    this._drag = null;\n    this._teardownDocListeners();\n    if (!d || !d.moved) {\n      if (d) {\n        d.els.forEach((el) => el.removeAttribute(\"transform\"));\n        this._startEdit(d.type, d.index);\n      }\n      return;\n    }\n    const anno = this._annoList(d.type)[d.index];\n    if (!anno) return;\n    this._applyDelta(d, anno);\n    d.els.forEach((el) => el.removeAttribute(\"transform\"));\n    this._redrawAnno(d.type, anno, d.index);\n    this._checkpoint(\"ink:drag\");\n    this._fireDragged(d.type, anno, d.index);\n  }\n  /**\n   * Record a Rewind (undo) checkpoint for an ink edit. Targeted redraws fire no\n   * 'updated' event, so History would otherwise miss them. No-op when the\n   * history feature is absent or disabled.\n   * @param {string} label\n   */\n  _checkpoint(label) {\n    var _a, _b;\n    (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, label);\n  }\n  /**\n   * Mutate the annotation's config from the pixel drag delta (type + mode aware).\n   * @param {any} d @param {any} anno\n   */\n  _applyDelta(d, anno) {\n    const w2 = this.w;\n    const dxData = w2.layout.gridWidth ? d.dxPixel * (w2.globals.xRange / w2.layout.gridWidth) : 0;\n    if (d.type === \"point\") {\n      const { newX, newY } = this._invertPoint(anno, d.dxPixel, d.dyPixel);\n      anno.x = this._snapX(newX);\n      if (newY != null) {\n        const yi = anno.yAxisIndex || 0;\n        const map = w2.globals.seriesYAxisMap;\n        anno.y = this._snapY(newY, map && map[yi] ? map[yi][0] : 0);\n      }\n      return;\n    }\n    if (d.type === \"xaxis\") {\n      if (typeof anno.x !== \"number\") return;\n      if (d.mode === \"move\") {\n        if (typeof anno.x2 === \"number\") {\n          anno.x += dxData;\n          anno.x2 += dxData;\n        } else {\n          anno.x = this._snapX(anno.x + dxData);\n        }\n      } else if (d.mode === \"resize-x1\" || d.mode === \"resize-x2\") {\n        const xIsLeft = anno.x2 == null || anno.x <= anno.x2;\n        const grow = d.mode === \"resize-x2\" ? !xIsLeft : xIsLeft;\n        if (grow) anno.x = this._snapX(anno.x + dxData);\n        else if (typeof anno.x2 === \"number\") anno.x2 = this._snapX(anno.x2 + dxData);\n      }\n      return;\n    }\n    if (d.type === \"yaxis\") {\n      const yi = anno.yAxisIndex || 0;\n      const map = w2.globals.seriesYAxisMap;\n      const si = map && map[yi] ? map[yi][0] : 0;\n      const yRange = w2.globals.yRange ? w2.globals.yRange[si] : null;\n      if (yRange == null || !w2.layout.gridHeight) return;\n      const dyData = -d.dyPixel * (yRange / w2.layout.gridHeight);\n      if (typeof anno.y2 === \"number\") {\n        if (typeof anno.y === \"number\") anno.y += dyData;\n        anno.y2 += dyData;\n      } else if (typeof anno.y === \"number\") {\n        anno.y = this._snapY(anno.y + dyData, si);\n      }\n    }\n  }\n  /**\n   * Invert a pixel drag delta to a point annotation's data x/y.\n   * @param {any} anno @param {number} dxPixel @param {number} dyPixel\n   * @returns {{newX:any, newY:any}}\n   */\n  _invertPoint(anno, dxPixel, dyPixel) {\n    const w2 = this.w;\n    const categoryX = (w2.config.xaxis.type === \"category\" || w2.config.xaxis.convertedCatToNumeric) && !w2.axisFlags.dataFormatXNumeric;\n    let newX = anno.x;\n    if (!categoryX && typeof anno.x === \"number\" && w2.layout.gridWidth) {\n      newX = anno.x + dxPixel * (w2.globals.xRange / w2.layout.gridWidth);\n    }\n    let newY = anno.y;\n    const yi = anno.yAxisIndex || 0;\n    const map = w2.globals.seriesYAxisMap;\n    const si = map && map[yi] ? map[yi][0] : 0;\n    const yRange = w2.globals.yRange ? w2.globals.yRange[si] : null;\n    const logY = w2.config.yaxis[yi] && w2.config.yaxis[yi].logarithmic;\n    if (typeof anno.y === \"number\" && yRange != null && !logY && w2.layout.gridHeight) {\n      newY = anno.y - dyPixel * (yRange / w2.layout.gridHeight);\n    }\n    return { newX, newY };\n  }\n  /**\n   * Targeted redraw of one annotation: drop its elements and re-add the shape +\n   * label + label background at the current config coordinates (no full chart\n   * re-render, and repeat-safe unlike updateOptions({})).\n   * @param {string} type @param {any} anno @param {number} index\n   */\n  _redrawAnno(type, anno, index) {\n    const w2 = this.w;\n    const baseEl = w2.dom.baseEl;\n    const annotations = this.ctx.annotations;\n    if (!baseEl || !annotations) return;\n    baseEl.querySelectorAll(\".\" + anno.id).forEach((el) => el.remove());\n    const group = baseEl.querySelector(\".apexcharts-\" + type + \"-annotations\");\n    if (!group) return;\n    if (type === \"point\" && annotations.pointsAnnotations) {\n      annotations.pointsAnnotations.addPointAnnotation(anno, group, index);\n    } else if (type === \"xaxis\" && annotations.xAxisAnnotations) {\n      annotations.xAxisAnnotations.addXaxisAnnotation(anno, group, index);\n    } else if (type === \"yaxis\" && annotations.yAxisAnnotations) {\n      annotations.yAxisAnnotations.addYaxisAnnotation(anno, group, index);\n    }\n    const labelEl = baseEl.querySelector(\n      \".apexcharts-\" + type + \"-annotation-label.\" + anno.id\n    );\n    if (labelEl && annotations.helpers && anno.label && anno.label.text) {\n      const elRect = annotations.helpers.addBackgroundToAnno(labelEl, anno);\n      if (elRect && labelEl.parentNode) {\n        labelEl.parentNode.insertBefore(elRect.node, labelEl);\n      }\n    }\n    this._attach();\n  }\n  /**\n   * Dispatch an ink annotation lifecycle event both to the user callback\n   * (`chart.events[name]`) and the internal event bus, in that order.\n   * @param {string} name @param {any} args\n   */\n  _fireAnnotationEvent(name2, args) {\n    var _a;\n    const events = this.w.config.chart.events;\n    if (typeof events[name2] === \"function\") {\n      events[name2](this.ctx, args);\n    }\n    (_a = this.ctx.events) == null ? void 0 : _a.fireEvent(name2, [this.ctx, args]);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireDragged(type, anno, index) {\n    const args = { type, id: anno.id, index, x: anno.x, y: anno.y };\n    if (anno.x2 != null) args.x2 = anno.x2;\n    if (anno.y2 != null) args.y2 = anno.y2;\n    this._fireAnnotationEvent(\"annotationDragged\", args);\n  }\n  // ─── P3: click-to-create ─────────────────────────────────────────────────\n  /**\n   * Enter create mode: the next click on the plot area drops a new draggable\n   * point annotation there and opens its label editor.\n   */\n  startCreate() {\n    if (this._creating) return;\n    const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n    if (!svg) return;\n    this._creating = true;\n    svg.style.cursor = \"crosshair\";\n    svg.addEventListener(\"click\", this._onCreateClick, true);\n    this._syncPalette();\n  }\n  /** Leave create mode. */\n  stopCreate() {\n    if (!this._creating) return;\n    this._creating = false;\n    const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n    if (svg) {\n      svg.style.cursor = \"\";\n      svg.removeEventListener(\"click\", this._onCreateClick, true);\n    }\n    this._syncPalette();\n  }\n  /** @param {any} e */\n  _onCreateClick(e2) {\n    if (!this._creating) return;\n    e2.preventDefault();\n    e2.stopPropagation();\n    const pos = this._pixelToData(e2.clientX, e2.clientY);\n    this.stopCreate();\n    if (!pos) return;\n    this.createAt(pos.x, pos.y);\n  }\n  /**\n   * Create a draggable note at data coordinates and open its editor card.\n   * Public: the context menu's \"Add note here\" routes here so its notes are\n   * config-backed too, and thus draggable, editable, persistable and undoable.\n   * @param {any} x @param {any} y @param {{text?: string}} [opts]\n   * @returns {any} the created annotation config\n   */\n  createAt(x, y, opts = {}) {\n    const w2 = this.w;\n    this._wire();\n    this._createSeq += 1;\n    const id = \"apexcharts-ink-new-\" + this._createSeq + \"-\" + w2.globals.chartID;\n    const anno = Utils$1.extend(new Options().pointAnnotation, {\n      x,\n      y,\n      id,\n      draggable: true,\n      label: { text: opts.text || \"Note\" }\n    });\n    if (!w2.config.annotations) w2.config.annotations = {};\n    if (!Array.isArray(w2.config.annotations.points)) w2.config.annotations.points = [];\n    w2.config.annotations.points.push(anno);\n    const index = w2.config.annotations.points.length - 1;\n    this._redrawAnno(\"point\", anno, index);\n    this._checkpoint(\"ink:create\");\n    this._fireCreated(\"point\", anno, index);\n    this._startEdit(\"point\", index, { select: true });\n    return anno;\n  }\n  /**\n   * Create a draggable dashed LINE annotation at a data value and open its\n   * editor card: axis 'x' drops a vertical line at a data x, axis 'y' a\n   * horizontal line at a data y. Public: the context menu's \"Annotate here\"\n   * routes here so its lines are config-backed too, and thus draggable,\n   * editable, persistable and undoable. Lines only: x2/y2 are never set, so\n   * this can never produce a range rectangle.\n   * @param {'x'|'y'} axis @param {any} val\n   * @param {{text?: string, strokeDashArray?: number, color?: string, select?: boolean}} [opts]\n   * @returns {any} the created annotation config\n   */\n  createLineAt(axis, val, opts = {}) {\n    const w2 = this.w;\n    this._wire();\n    this._createSeq += 1;\n    const id = \"apexcharts-ink-new-\" + this._createSeq + \"-\" + w2.globals.chartID;\n    const type = axis === \"y\" ? \"yaxis\" : \"xaxis\";\n    const defaults = type === \"yaxis\" ? new Options().yAxisAnnotation : new Options().xAxisAnnotation;\n    const over = {\n      id,\n      draggable: true,\n      strokeDashArray: opts.strokeDashArray != null ? opts.strokeDashArray : 4,\n      label: { text: opts.text || \"\" }\n    };\n    if (opts.color) {\n      over.borderColor = opts.color;\n      over.label.borderColor = opts.color;\n    }\n    if (type === \"yaxis\") over.y = val;\n    else over.x = val;\n    const anno = Utils$1.extend(defaults, over);\n    if (!w2.config.annotations) w2.config.annotations = {};\n    if (!Array.isArray(w2.config.annotations[type])) w2.config.annotations[type] = [];\n    w2.config.annotations[type].push(anno);\n    const index = w2.config.annotations[type].length - 1;\n    this._redrawAnno(type, anno, index);\n    this._checkpoint(\"ink:create\");\n    this._fireCreated(type, anno, index);\n    if (opts.select !== false) this._startEdit(type, index, { select: true });\n    return anno;\n  }\n  /**\n   * Convert a client-space point to data coordinates (absolute, for create).\n   * @param {number} clientX @param {number} clientY\n   * @returns {{x:any, y:any}|null}\n   */\n  _pixelToData(clientX, clientY) {\n    const w2 = this.w;\n    const gridEl = w2.dom.baseEl && w2.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!gridEl) return null;\n    const g2 = gridEl.getBoundingClientRect();\n    if (!g2.width || !g2.height) return null;\n    const fx = (clientX - g2.left) / g2.width;\n    const fy = (clientY - g2.top) / g2.height;\n    const minX = w2.globals.minX;\n    const xRange = w2.globals.xRange;\n    const minY = w2.globals.minYArr && w2.globals.minYArr[0] != null ? w2.globals.minYArr[0] : w2.globals.minY;\n    const yRange = w2.globals.yRange && w2.globals.yRange[0] != null ? w2.globals.yRange[0] : w2.globals.maxY - w2.globals.minY;\n    let x = minX + fx * xRange;\n    const y = minY + (1 - fy) * yRange;\n    const categoryX = (w2.config.xaxis.type === \"category\" || w2.config.xaxis.convertedCatToNumeric) && !w2.axisFlags.dataFormatXNumeric;\n    if (categoryX) x = Math.round(x);\n    return { x, y };\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireCreated(type, anno, index) {\n    const args = { type, id: anno.id, index };\n    if (typeof anno.x !== \"undefined\") args.x = anno.x;\n    if (typeof anno.y !== \"undefined\") args.y = anno.y;\n    this._fireAnnotationEvent(\"annotationCreated\", args);\n  }\n  // ─── P3: tool palette ────────────────────────────────────────────────────\n  /** Render a minimal \"add note\" toggle into the chart wrap (once per render). */\n  _renderPalette() {\n    const w2 = this.w;\n    const elWrap = w2.dom.elWrap;\n    if (!elWrap || elWrap.querySelector(\".apexcharts-ink-palette\")) return;\n    const doc = elWrap.ownerDocument;\n    const bar = doc.createElement(\"div\");\n    bar.className = \"apexcharts-ink-palette\";\n    const s2 = bar.style;\n    s2.position = \"absolute\";\n    s2.top = \"6px\";\n    s2.left = \"6px\";\n    s2.zIndex = \"15\";\n    const btn = doc.createElement(\"button\");\n    btn.type = \"button\";\n    btn.className = \"apexcharts-ink-add\";\n    btn.textContent = \"+ Note\";\n    const bs = btn.style;\n    bs.cursor = \"pointer\";\n    bs.font = \"12px sans-serif\";\n    bs.padding = \"4px 9px\";\n    bs.borderRadius = \"5px\";\n    bs.border = \"1px solid #6366f1\";\n    bs.color = \"#4338ca\";\n    bs.background = \"#fff\";\n    btn.addEventListener(\"click\", (e2) => {\n      e2.stopPropagation();\n      if (this._creating) this.stopCreate();\n      else this.startCreate();\n    });\n    bar.appendChild(btn);\n    elWrap.appendChild(bar);\n    this._syncPalette();\n  }\n  /** Reflect create-mode state on the palette button. */\n  _syncPalette() {\n    const elWrap = this.w.dom.elWrap;\n    const btn = (\n      /** @type {any} */\n      elWrap && elWrap.querySelector(\".apexcharts-ink-add\")\n    );\n    if (!btn) return;\n    if (this._creating) {\n      btn.style.background = \"#6366f1\";\n      btn.style.color = \"#fff\";\n      btn.textContent = \"Click chart...\";\n    } else {\n      btn.style.background = \"#fff\";\n      btn.style.color = \"#4338ca\";\n      btn.textContent = \"+ Note\";\n    }\n  }\n  // ─── P2 + P6: the floating note editor card ──────────────────────────────\n  // Click (or double-click) an ink-managed annotation to open a small card\n  // anchored to it: rename inline, recolor via accent swatches, toggle bold,\n  // step the font size, size/reshape the marker (points), or delete the note.\n  /** @returns {string[]} the accent swatches offered by the editor */\n  _noteColors() {\n    const ink = this.w.config.chart.ink;\n    return ink && Array.isArray(ink.noteColors) && ink.noteColors.length ? ink.noteColors : NOTE_COLORS;\n  }\n  /**\n   * Perceived-luminance check so text/border contrast follows the accent.\n   * @param {string} hex\n   */\n  static _isLight(hex) {\n    const h2 = String(hex || \"\").replace(\"#\", \"\");\n    const full = h2.length === 3 ? h2.split(\"\").map((c2) => c2 + c2).join(\"\") : h2;\n    const n2 = parseInt(full, 16);\n    if (isNaN(n2) || full.length !== 6) return false;\n    const r2 = n2 >> 16 & 255;\n    const g2 = n2 >> 8 & 255;\n    const b2 = n2 & 255;\n    return (0.299 * r2 + 0.587 * g2 + 0.114 * b2) / 255 > 0.72;\n  }\n  /** @param {any} style */\n  static _isBold(style) {\n    const fw = style && style.fontWeight;\n    return fw === \"bold\" || parseInt(String(fw), 10) >= 600;\n  }\n  /**\n   * Small icon/text button for the editor card. mousedown is prevented so the\n   * text input keeps focus while formatting.\n   * @param {any} doc @param {string} content @param {string} title\n   * @param {Function} onClick @param {string} [extraClass] @param {boolean} [isSvg]\n   */\n  _cardBtn(doc, content, title, onClick, extraClass, isSvg) {\n    const b2 = doc.createElement(\"button\");\n    b2.type = \"button\";\n    b2.className = \"apexcharts-ink-btn\" + (extraClass ? \" \" + extraClass : \"\");\n    b2.title = title;\n    b2.setAttribute(\"aria-label\", title);\n    if (isSvg) b2.innerHTML = content;\n    else b2.textContent = content;\n    b2.addEventListener(\"mousedown\", (e2) => e2.preventDefault());\n    b2.addEventListener(\"click\", (e2) => {\n      e2.stopPropagation();\n      onClick();\n    });\n    return b2;\n  }\n  /**\n   * Uppercase row caption (\"Label\" / \"Line\" / \"Marker\") for the editor card.\n   * @param {any} doc @param {string} text\n   */\n  _cardLabel(doc, text) {\n    const lab = doc.createElement(\"span\");\n    lab.className = \"apexcharts-ink-cardlabel\";\n    lab.textContent = text;\n    return lab;\n  }\n  /**\n   * Color swatch button for the editor card. mousedown is prevented so the\n   * text input keeps focus while restyling.\n   * @param {any} doc @param {string} c\n   * @param {(c: string) => void} pick @param {string} [extraClass]\n   */\n  _mkSwatch(doc, c2, pick, extraClass) {\n    const sw = doc.createElement(\"button\");\n    sw.type = \"button\";\n    sw.className = \"apexcharts-ink-swatch\" + (extraClass ? \" \" + extraClass : \"\");\n    sw.title = c2;\n    sw.setAttribute(\"aria-label\", \"Color \" + c2);\n    sw.dataset.color = c2;\n    sw.style.background = c2;\n    sw.addEventListener(\"mousedown\", (e2) => e2.preventDefault());\n    sw.addEventListener(\"click\", (e2) => {\n      e2.stopPropagation();\n      pick(c2);\n    });\n    return sw;\n  }\n  /**\n   * Open the floating editor card for an annotation.\n   * @param {string} type @param {number} index\n   * @param {{select?: boolean}} [opts] select: preselect the text (create / dblclick)\n   */\n  _startEdit(type, index, opts = {}) {\n    const w2 = this.w;\n    const anno = this._annoList(type)[index];\n    const baseEl = w2.dom.baseEl;\n    const elWrap = w2.dom.elWrap;\n    if (!anno || !anno.id || !baseEl || !elWrap) return;\n    this._closeEditor(false);\n    const doc = baseEl.ownerDocument;\n    const card = doc.createElement(\"div\");\n    card.className = \"apexcharts-ink-card\";\n    card.setAttribute(\"role\", \"dialog\");\n    card.setAttribute(\"aria-label\", \"Edit note\");\n    card.style.visibility = \"hidden\";\n    const rowText = doc.createElement(\"div\");\n    rowText.className = \"apexcharts-ink-card-row\";\n    const input = doc.createElement(\"input\");\n    input.type = \"text\";\n    input.className = \"apexcharts-ink-editor\";\n    input.placeholder = \"Note text\";\n    input.value = anno.label && anno.label.text || \"\";\n    rowText.appendChild(input);\n    rowText.appendChild(\n      this._cardBtn(\n        doc,\n        TRASH_ICON,\n        \"Delete note\",\n        () => this._deleteAnno(),\n        \"apexcharts-ink-btn--delete\",\n        true\n      )\n    );\n    card.appendChild(rowText);\n    const rowStyle = doc.createElement(\"div\");\n    rowStyle.className = \"apexcharts-ink-card-row\";\n    if (type !== \"point\") {\n      rowStyle.appendChild(this._cardLabel(doc, \"Label\"));\n    }\n    this._noteColors().forEach((c2) => {\n      rowStyle.appendChild(this._mkSwatch(doc, c2, (col) => this._applyColor(col)));\n    });\n    const sep = doc.createElement(\"span\");\n    sep.className = \"apexcharts-ink-sep\";\n    rowStyle.appendChild(sep);\n    rowStyle.appendChild(\n      this._cardBtn(doc, \"B\", \"Bold\", () => this._toggleBold(), \"apexcharts-ink-btn--bold\")\n    );\n    rowStyle.appendChild(this._cardBtn(doc, \"A-\", \"Smaller text\", () => this._stepFont(-1)));\n    rowStyle.appendChild(this._cardBtn(doc, \"A+\", \"Larger text\", () => this._stepFont(1)));\n    card.appendChild(rowStyle);\n    if (type !== \"point\") {\n      const rowLine = doc.createElement(\"div\");\n      rowLine.className = \"apexcharts-ink-card-row\";\n      rowLine.appendChild(this._cardLabel(doc, \"Line\"));\n      this._noteColors().forEach((c2) => {\n        rowLine.appendChild(\n          this._mkSwatch(\n            doc,\n            c2,\n            (col) => this._applyLineColor(col),\n            \"apexcharts-ink-swatch--line\"\n          )\n        );\n      });\n      card.appendChild(rowLine);\n    }\n    if (type === \"point\") {\n      const rowMarker = doc.createElement(\"div\");\n      rowMarker.className = \"apexcharts-ink-card-row\";\n      rowMarker.appendChild(this._cardLabel(doc, \"Marker\"));\n      rowMarker.appendChild(\n        this._cardBtn(doc, \"-\", \"Smaller marker\", () => this._stepMarker(-1))\n      );\n      const sizeOut = doc.createElement(\"span\");\n      sizeOut.className = \"apexcharts-ink-marker-size\";\n      rowMarker.appendChild(sizeOut);\n      rowMarker.appendChild(\n        this._cardBtn(doc, \"+\", \"Larger marker\", () => this._stepMarker(1))\n      );\n      rowMarker.appendChild(\n        this._cardBtn(\n          doc,\n          SHAPE_GLYPHS.circle,\n          \"Marker shape\",\n          () => this._cycleShape(),\n          \"apexcharts-ink-btn--shape\"\n        )\n      );\n      card.appendChild(rowMarker);\n    }\n    elWrap.appendChild(card);\n    this._editor = { card, input, type, index };\n    this._positionCard();\n    this._syncCard();\n    card.style.visibility = \"\";\n    input.focus();\n    if (opts.select) input.select();\n    card.addEventListener(\"keydown\", (e2) => {\n      if (e2.key === \"Escape\") {\n        e2.preventDefault();\n        e2.stopPropagation();\n        this._closeEditor(false);\n      } else if (e2.key === \"Enter\" && e2.target === input) {\n        e2.preventDefault();\n        this._closeEditor(true);\n      }\n    });\n    doc.addEventListener(\"mousedown\", this._onDocDownEditor, true);\n    doc.addEventListener(\"touchstart\", this._onDocDownEditor, true);\n  }\n  /**\n   * Commit + close on any press outside the card.\n   * @param {any} e\n   */\n  _onDocDownEditor(e2) {\n    const ed = this._editor;\n    if (!ed || ed.card.contains(e2.target)) return;\n    this._closeEditor(true);\n  }\n  /**\n   * Anchor the card to the annotation's label (below it, or above when there\n   * is no room), clamped inside the chart wrap. Re-run after each restyle\n   * since the label rect changes.\n   */\n  _positionCard() {\n    const ed = this._editor;\n    if (!ed) return;\n    const w2 = this.w;\n    const baseEl = w2.dom.baseEl;\n    const elWrap = w2.dom.elWrap;\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!baseEl || !elWrap || !anno) return;\n    const anchor = baseEl.querySelector(\n      \".apexcharts-\" + ed.type + \"-annotation-label.\" + anno.id\n    ) || baseEl.querySelector(\".\" + anno.id);\n    if (!anchor) return;\n    const wrapRect = elWrap.getBoundingClientRect();\n    const aRect = anchor.getBoundingClientRect();\n    const cw = ed.card.offsetWidth;\n    const ch = ed.card.offsetHeight;\n    let left = Math.round(aRect.left - wrapRect.left);\n    let top = Math.round(aRect.bottom - wrapRect.top) + 8;\n    if (top + ch > elWrap.clientHeight - 4) {\n      top = Math.round(aRect.top - wrapRect.top) - ch - 8;\n    }\n    if (left + cw > elWrap.clientWidth - 4) left = elWrap.clientWidth - cw - 4;\n    ed.card.style.left = Math.max(4, left) + \"px\";\n    ed.card.style.top = Math.max(4, top) + \"px\";\n  }\n  /** Reflect the annotation's current style on the card controls. */\n  _syncCard() {\n    const ed = this._editor;\n    if (!ed) return;\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!anno) return;\n    const style = anno.label && anno.label.style || {};\n    const bg = String(style.background || \"\").toLowerCase();\n    ed.card.querySelectorAll(\".apexcharts-ink-swatch:not(.apexcharts-ink-swatch--line)\").forEach((sw) => {\n      sw.classList.toggle(\n        \"apexcharts-ink-swatch--active\",\n        (sw.dataset.color || \"\").toLowerCase() === bg\n      );\n    });\n    const stroke = String(anno.borderColor || \"\").toLowerCase();\n    ed.card.querySelectorAll(\".apexcharts-ink-swatch--line\").forEach((sw) => {\n      sw.classList.toggle(\n        \"apexcharts-ink-swatch--active\",\n        (sw.dataset.color || \"\").toLowerCase() === stroke\n      );\n    });\n    const boldBtn = ed.card.querySelector(\".apexcharts-ink-btn--bold\");\n    if (boldBtn) {\n      boldBtn.classList.toggle(\"apexcharts-ink-btn--active\", InkLayer._isBold(style));\n    }\n    const m2 = anno.marker || {};\n    const sizeOut = ed.card.querySelector(\".apexcharts-ink-marker-size\");\n    if (sizeOut) {\n      sizeOut.textContent = String(typeof m2.size === \"number\" ? m2.size : 4);\n    }\n    const shapeBtn = ed.card.querySelector(\".apexcharts-ink-btn--shape\");\n    if (shapeBtn) {\n      shapeBtn.textContent = SHAPE_GLYPHS[m2.shape] || SHAPE_GLYPHS.circle;\n    }\n  }\n  /**\n   * Commit the input's text into the annotation (the card stays open). Also\n   * runs before any style apply so typed-but-unconfirmed text survives the\n   * redraw.\n   * @param {any} ed\n   */\n  _commitTextOf(ed) {\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!anno) return;\n    const text = ed.input.value;\n    if (!anno.label) anno.label = {};\n    if (anno.label.text === text) return;\n    anno.label.text = text;\n    this._redrawAnno(ed.type, anno, ed.index);\n    this._checkpoint(\"ink:edit\");\n    this._fireEdited(ed.type, anno, ed.index);\n  }\n  /**\n   * Close the editor card. commit=true also commits the pending text. Style\n   * edits apply immediately and are not rolled back by Escape; use undo.\n   * @param {boolean} commit\n   */\n  _closeEditor(commit) {\n    const ed = this._editor;\n    if (!ed) return;\n    this._editor = null;\n    const doc = this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n    if (doc) {\n      doc.removeEventListener(\"mousedown\", this._onDocDownEditor, true);\n      doc.removeEventListener(\"touchstart\", this._onDocDownEditor, true);\n    }\n    if (ed.card.parentNode) ed.card.parentNode.removeChild(ed.card);\n    if (commit) this._commitTextOf(ed);\n  }\n  /**\n   * Apply a config mutation from a card control: commit pending text, mutate,\n   * redraw, checkpoint for undo, then refresh + re-anchor the card.\n   * @param {string} label @param {(anno: any) => void} mutate\n   */\n  _applyStyle(label, mutate) {\n    const ed = this._editor;\n    if (!ed) return;\n    const anno = this._annoList(ed.type)[ed.index];\n    if (!anno) return;\n    this._commitTextOf(ed);\n    if (!anno.label) anno.label = {};\n    if (!anno.label.style) anno.label.style = {};\n    mutate(anno);\n    this._redrawAnno(ed.type, anno, ed.index);\n    this._checkpoint(label);\n    this._fireStyled(ed.type, anno, ed.index);\n    this._syncCard();\n    this._positionCard();\n  }\n  /**\n   * Apply an accent color: label chip + marker (points) or line/range fill\n   * (axis annotations), with text/border contrast following the luminance.\n   * @param {string} c\n   */\n  _applyColor(c2) {\n    const ed = this._editor;\n    if (!ed) return;\n    const light = InkLayer._isLight(c2);\n    this._applyStyle(\"ink:style\", (anno) => {\n      anno.label.style.background = c2;\n      anno.label.style.color = light ? \"#334155\" : \"#ffffff\";\n      anno.label.borderColor = light ? \"#cbd5e1\" : c2;\n      if (ed.type === \"point\") {\n        if (!anno.marker) anno.marker = {};\n        anno.marker.strokeColor = light ? \"#334155\" : c2;\n        anno.marker.fillColor = light ? \"#ffffff\" : c2;\n      }\n    });\n  }\n  /**\n   * Line-stroke color for axis annotations, separate from the label chip.\n   * @param {string} c\n   */\n  _applyLineColor(c2) {\n    const ed = this._editor;\n    if (!ed || ed.type === \"point\") return;\n    this._applyStyle(\"ink:style\", (anno) => {\n      anno.borderColor = c2;\n      if (anno.x2 != null || anno.y2 != null) anno.fillColor = c2;\n    });\n  }\n  /**\n   * Step the label font size through the preset scale.\n   * @param {number} dir\n   */\n  _stepFont(dir) {\n    this._applyStyle(\"ink:style\", (anno) => {\n      const cur = parseFloat(anno.label.style.fontSize) || 11;\n      let i2 = 0;\n      for (let k = 1; k < FONT_STEPS.length; k++) {\n        if (Math.abs(FONT_STEPS[k] - cur) < Math.abs(FONT_STEPS[i2] - cur)) i2 = k;\n      }\n      i2 = Math.min(FONT_STEPS.length - 1, Math.max(0, i2 + dir));\n      anno.label.style.fontSize = FONT_STEPS[i2] + \"px\";\n    });\n  }\n  _toggleBold() {\n    this._applyStyle(\"ink:style\", (anno) => {\n      anno.label.style.fontWeight = InkLayer._isBold(anno.label.style) ? 400 : 700;\n    });\n  }\n  /**\n   * Grow/shrink the point marker.\n   * @param {number} dir\n   */\n  _stepMarker(dir) {\n    this._applyStyle(\"ink:style\", (anno) => {\n      if (!anno.marker) anno.marker = {};\n      const cur = typeof anno.marker.size === \"number\" ? anno.marker.size : 4;\n      anno.marker.size = Math.min(14, Math.max(2, cur + dir));\n    });\n  }\n  /** Cycle the point marker shape (circle, square, diamond, triangle). */\n  _cycleShape() {\n    this._applyStyle(\"ink:style\", (anno) => {\n      if (!anno.marker) anno.marker = {};\n      const i2 = MARKER_SHAPES.indexOf(anno.marker.shape);\n      anno.marker.shape = MARKER_SHAPES[(i2 + 1) % MARKER_SHAPES.length];\n    });\n  }\n  /** Delete the annotation the editor is open on (undoable via Rewind). */\n  _deleteAnno() {\n    const ed = this._editor;\n    if (!ed) return;\n    const list = this._annoList(ed.type);\n    const anno = list[ed.index];\n    this._closeEditor(false);\n    if (!anno) return;\n    const baseEl = this.w.dom.baseEl;\n    if (baseEl && anno.id) {\n      baseEl.querySelectorAll(\".\" + anno.id).forEach((el) => el.remove());\n    }\n    list.splice(ed.index, 1);\n    for (let i2 = ed.index; i2 < list.length; i2++) {\n      this._redrawAnno(ed.type, list[i2], i2);\n    }\n    this._checkpoint(\"ink:delete\");\n    this._fireDeleted(ed.type, anno, ed.index);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireEdited(type, anno, index) {\n    const args = { type, id: anno.id, index, text: anno.label ? anno.label.text : \"\" };\n    this._fireAnnotationEvent(\"annotationEdited\", args);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireStyled(type, anno, index) {\n    const args = { type, id: anno.id, index, label: anno.label, marker: anno.marker };\n    this._fireAnnotationEvent(\"annotationStyled\", args);\n  }\n  /** @param {string} type @param {any} anno @param {number} index */\n  _fireDeleted(type, anno, index) {\n    const args = { type, id: anno.id, index };\n    this._fireAnnotationEvent(\"annotationDeleted\", args);\n  }\n  // ─── lifecycle ────────────────────────────────────────────────────────────\n  _teardownDocListeners() {\n    const doc = this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n    if (!doc) return;\n    doc.removeEventListener(\"mousemove\", this._onMove);\n    doc.removeEventListener(\"touchmove\", this._onMove);\n    doc.removeEventListener(\"mouseup\", this._onUp);\n    doc.removeEventListener(\"touchend\", this._onUp);\n  }\n  teardown() {\n    var _a, _b, _c, _d;\n    this._teardownDocListeners();\n    this._closeEditor(false);\n    this.stopCreate();\n    this._drag = null;\n    if (this._wired) {\n      (_b = (_a = this.ctx).removeEventListener) == null ? void 0 : _b.call(_a, \"mounted\", this._onRerender);\n      (_d = (_c = this.ctx).removeEventListener) == null ? void 0 : _d.call(_c, \"updated\", this._onRerender);\n      this._wired = false;\n    }\n  }\n}\nApexCharts.registerFeatures({ ink: InkLayer });\nclass Measure {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.graphics = new Graphics(w2);\n    this.pins = [];\n    this.drag = null;\n    this.armed = false;\n    this.persistent = false;\n    this.pane = null;\n    this._seedActive = false;\n    this._onKeyDown = this._onKeyDown.bind(this);\n    this._onKeyUp = this._onKeyUp.bind(this);\n    this._onDown = this._onDown.bind(this);\n    this._onMove = this._onMove.bind(this);\n    this._onUp = this._onUp.bind(this);\n    this._onSeedDown = this._onSeedDown.bind(this);\n    this._onSeedKey = this._onSeedKey.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    ctx.addEventListener(\"mounted\", this._afterRender);\n    ctx.addEventListener(\"updated\", this._afterRender);\n    this._bindKeys();\n  }\n  _cfg() {\n    return this.w.config.chart.measure || {};\n  }\n  _enabled() {\n    return this.w.globals.axisCharts && this._cfg().enabled === true;\n  }\n  _mode() {\n    return this._cfg().mode === \"free\" ? \"free\" : \"span\";\n  }\n  /**\n   * Nearest first-series data point to a data x (used to snap span endpoints\n   * onto the series line).\n   * @param {number} dataX\n   * @returns {{x:number,y:number}|null}\n   */\n  _snapToSeries(dataX) {\n    const s0 = (\n      /** @type {any} */\n      (this.w.config.series || [])[0]\n    );\n    if (!s0) return null;\n    const pts = this._points(s0.data || []);\n    if (!pts.length) return null;\n    let best = pts[0];\n    let bd = Math.abs(pts[0].x - dataX);\n    for (let i2 = 1; i2 < pts.length; i2++) {\n      const d = Math.abs(pts[i2].x - dataX);\n      if (d < bd) {\n        bd = d;\n        best = pts[i2];\n      }\n    }\n    return best;\n  }\n  /**\n   * Resolve a raw projected point to the endpoint that is actually drawn: span\n   * mode snaps x to the nearest first-series data point (y follows the line);\n   * free mode keeps the raw point.\n   * @param {{x:number,y:number,gx:number,gy:number}} raw\n   */\n  _resolve(raw) {\n    if (this._mode() === \"free\") return raw;\n    const snapped = this._snapToSeries(raw.x);\n    if (!snapped) return raw;\n    const g2 = this._dataToGrid(snapped.x, snapped.y);\n    return { x: snapped.x, y: snapped.y, gx: g2.gx, gy: g2.gy };\n  }\n  _doc() {\n    return this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n  }\n  /** Bind the measure-key listeners once on the owner document. */\n  _bindKeys() {\n    if (this._keysBound) return;\n    const doc = this._doc();\n    if (!doc) return;\n    doc.addEventListener(\"keydown\", this._onKeyDown);\n    doc.addEventListener(\"keyup\", this._onKeyUp);\n    this._keysBound = true;\n  }\n  /** @param {any} e */\n  _onKeyDown(e2) {\n    if (!this._enabled() || this.persistent) return;\n    const key = this._cfg().key || \"m\";\n    if (e2.key && e2.key.toLowerCase() === String(key).toLowerCase()) {\n      this._arm();\n    } else if (e2.key === \"Escape\") {\n      this._cancelDrag();\n    }\n  }\n  /** @param {any} e */\n  _onKeyUp(e2) {\n    if (this.persistent) return;\n    const key = this._cfg().key || \"m\";\n    if (e2.key && e2.key.toLowerCase() === String(key).toLowerCase()) {\n      if (!this.drag) this._disarm();\n    }\n  }\n  /** Public: arm a sticky measure mode (survives key release) until stopped. */\n  startMeasure() {\n    if (!this._enabled()) return;\n    this.persistent = true;\n    this._arm();\n  }\n  /** Public: leave measure mode. */\n  stopMeasure() {\n    this.persistent = false;\n    this._cancelDrag();\n    this._disarm();\n  }\n  /**\n   * Public: begin a measurement anchored at a client-space point (used by the\n   * context menu's \"Measure from here\"). Endpoint A is fixed at (cx,cy), the\n   * ruler follows the cursor, and the next pointer press sets B and pins it.\n   * Escape cancels. No-op unless the measure tool is enabled.\n   * @param {number} cx @param {number} cy\n   */\n  seedFromClient(cx, cy) {\n    if (!this._enabled()) return;\n    this._cancelDrag();\n    this._endSeed(false);\n    const a2 = this._project(cx, cy);\n    this.drag = { a: a2, b: a2 };\n    this._seedActive = true;\n    const doc = this._doc();\n    if (doc) {\n      doc.addEventListener(\"mousemove\", this._onMove);\n      doc.addEventListener(\"touchmove\", this._onMove, { passive: false });\n      doc.addEventListener(\"mousedown\", this._onSeedDown, true);\n      doc.addEventListener(\"touchstart\", this._onSeedDown, true);\n      doc.addEventListener(\"keydown\", this._onSeedKey, true);\n    }\n    this._renderLive();\n  }\n  /** @param {any} e */\n  _onSeedDown(e2) {\n    if (!this._seedActive || !this.drag) return;\n    e2.preventDefault();\n    e2.stopPropagation();\n    const { cx, cy } = this._clientXY(e2);\n    this.drag.b = this._project(cx, cy);\n    this._endSeed(true);\n  }\n  /** @param {any} e */\n  _onSeedKey(e2) {\n    if (e2.key === \"Escape\") this._endSeed(false);\n  }\n  /**\n   * Finish (commit) or cancel a \"measure from here\" seed and detach listeners.\n   * @param {boolean} commit\n   */\n  _endSeed(commit) {\n    var _a, _b;\n    if (!this._seedActive) return;\n    this._seedActive = false;\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousemove\", this._onMove);\n      doc.removeEventListener(\"touchmove\", this._onMove);\n      doc.removeEventListener(\"mousedown\", this._onSeedDown, true);\n      doc.removeEventListener(\"touchstart\", this._onSeedDown, true);\n      doc.removeEventListener(\"keydown\", this._onSeedKey, true);\n    }\n    const d = this.drag;\n    this.drag = null;\n    this._clearLive();\n    if (!commit || !d) return;\n    const a2 = this._resolve(d.a);\n    const b2 = this._resolve(d.b);\n    if (Math.abs(a2.gx - b2.gx) < 2 && Math.abs(a2.gy - b2.gy) < 2) return;\n    const mode = this._mode();\n    if (this._cfg().pinOnRelease !== false) {\n      this.pins.push({ xa: a2.x, ya: a2.y, xb: b2.x, yb: b2.y, mode });\n      this._renderPins();\n      (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, \"measure\");\n    }\n    this._fireMeasured(a2, b2);\n  }\n  /** Public: remove all pinned rulers. */\n  clearMeasures() {\n    var _a, _b;\n    this.pins = [];\n    this._renderPins();\n    (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, \"clear measures\");\n  }\n  /**\n   * Snapshot of the pinned rulers as JSON-safe plain data. This is the piece of\n   * state ViewState / Perspectives (shareable URL) / Rewind (undo) persist:\n   * pins already live in data space, so they round-trip and re-project.\n   * Returns a deep copy so callers cannot mutate ours.\n   * @returns {Array<{xa:number,ya:number,xb:number,yb:number,mode:string}>}\n   */\n  getPins() {\n    return this.pins.map((p2) => ({\n      xa: p2.xa,\n      ya: p2.ya,\n      xb: p2.xb,\n      yb: p2.yb,\n      mode: p2.mode === \"free\" ? \"free\" : \"span\"\n    }));\n  }\n  /**\n   * Replace the pinned rulers with a restored set and redraw. Accepts the shape\n   * getPins() returns; a nullish / non-array value (or an old token without\n   * measure state) clears all pins. Non-finite entries are dropped. Does NOT\n   * record a Rewind step (the restore itself is the caller's undo boundary).\n   * @param {any} pins\n   */\n  setPins(pins) {\n    this.pins = Array.isArray(pins) ? pins.filter(\n      (p2) => p2 && isFinite(p2.xa) && isFinite(p2.ya) && isFinite(p2.xb) && isFinite(p2.yb)\n    ).map((p2) => ({\n      xa: +p2.xa,\n      ya: +p2.ya,\n      xb: +p2.xb,\n      yb: +p2.yb,\n      mode: p2.mode === \"free\" ? \"free\" : \"span\"\n    })) : [];\n    this._renderPins();\n  }\n  /**\n   * Normalize a series `data` array into {x,y} points (numeric/datetime x or\n   * category index). Non-finite / non-scalar (range/candle) points drop out.\n   * @param {any[]} data\n   * @returns {Array<{x:number,y:number}>}\n   */\n  _points(data) {\n    const out = [];\n    for (let i2 = 0; i2 < data.length; i2++) {\n      const p2 = data[i2];\n      let x;\n      let y;\n      if (Array.isArray(p2)) {\n        x = +p2[0];\n        y = +p2[1];\n      } else if (p2 && typeof p2 === \"object\") {\n        x = +p2.x;\n        y = +p2.y;\n      } else {\n        x = i2;\n        y = +p2;\n      }\n      if (isFinite(x) && isFinite(y)) out.push({ x, y });\n    }\n    return out;\n  }\n  /** Lay the transparent capture pane over the plot so our pointer handlers own\n   *  the drag (ZoomPanSelection never sees it). */\n  _arm() {\n    if (this.armed || !this._enabled()) return;\n    const w2 = this.w;\n    const parent = w2.dom.elGraphical;\n    if (!parent) return;\n    this.armed = true;\n    const pane = this.graphics.drawRect(0, 0, w2.layout.gridWidth, w2.layout.gridHeight);\n    pane.node.setAttribute(\"class\", \"apexcharts-measure-capture\");\n    pane.node.setAttribute(\"fill\", \"transparent\");\n    pane.node.style.cursor = \"crosshair\";\n    pane.node.style.pointerEvents = \"all\";\n    pane.node.addEventListener(\"mousedown\", this._onDown);\n    pane.node.addEventListener(\"touchstart\", this._onDown, { passive: false });\n    parent.add(pane);\n    this.pane = pane;\n  }\n  _disarm() {\n    this.armed = false;\n    if (this.pane) {\n      this.pane.node.removeEventListener(\"mousedown\", this._onDown);\n      this.pane.node.removeEventListener(\"touchstart\", this._onDown);\n      const p2 = this.pane.node;\n      if (p2.parentNode) p2.parentNode.removeChild(p2);\n      this.pane = null;\n    }\n  }\n  /** @param {any} e @returns {{cx:number,cy:number}} */\n  _clientXY(e2) {\n    const t2 = e2.touches && e2.touches[0] ? e2.touches[0] : e2;\n    return { cx: t2.clientX, cy: t2.clientY };\n  }\n  _gridRect() {\n    const g2 = this.w.dom.baseEl.querySelector(\".apexcharts-grid\");\n    return g2 ? g2.getBoundingClientRect() : null;\n  }\n  /** [min,max] for the primary y-axis, preferring the rendered nice scale. */\n  _yRange() {\n    const g2 = this.w.globals;\n    const s2 = g2.yAxisScale && g2.yAxisScale[0];\n    if (s2 && isFinite(s2.niceMin) && isFinite(s2.niceMax) && s2.niceMax !== s2.niceMin) {\n      return [s2.niceMin, s2.niceMax];\n    }\n    return [g2.minY, g2.maxY];\n  }\n  /**\n   * Client pixel -> { x, y (data), gx, gy (grid-local SVG units) }.\n   * @param {number} cx @param {number} cy\n   */\n  _project(cx, cy) {\n    const w2 = this.w;\n    const rect = this._gridRect();\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const clamp = (v2) => v2 < 0 ? 0 : v2 > 1 ? 1 : v2;\n    const fx = rect ? clamp((cx - rect.left) / rect.width) : 0;\n    const fy = rect ? clamp((cy - rect.top) / rect.height) : 0;\n    const [ymin, ymax] = this._yRange();\n    const x = w2.globals.minX + fx * (w2.globals.maxX - w2.globals.minX);\n    const y = ymax - fy * (ymax - ymin);\n    return { x, y, gx: fx * gw, gy: fy * gh };\n  }\n  /**\n   * Data (x,y) -> grid-local SVG coords, for redrawing pinned rulers.\n   * @param {number} x @param {number} y\n   */\n  _dataToGrid(x, y) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const xr = w2.globals.maxX - w2.globals.minX || 1;\n    const [ymin, ymax] = this._yRange();\n    const yr = ymax - ymin || 1;\n    return {\n      gx: (x - w2.globals.minX) / xr * gw,\n      gy: gh - (y - ymin) / yr * gh\n    };\n  }\n  /** @param {any} e */\n  _onDown(e2) {\n    if (!this.armed) return;\n    e2.preventDefault();\n    e2.stopPropagation();\n    const { cx, cy } = this._clientXY(e2);\n    const a2 = this._project(cx, cy);\n    this.drag = { a: a2, b: a2 };\n    const doc = this._doc();\n    if (doc) {\n      doc.addEventListener(\"mousemove\", this._onMove);\n      doc.addEventListener(\"mouseup\", this._onUp);\n      doc.addEventListener(\"touchmove\", this._onMove, { passive: false });\n      doc.addEventListener(\"touchend\", this._onUp);\n    }\n    this._renderLive();\n  }\n  /** @param {any} e */\n  _onMove(e2) {\n    if (!this.drag) return;\n    if (e2.cancelable) e2.preventDefault();\n    const { cx, cy } = this._clientXY(e2);\n    this.drag.b = this._project(cx, cy);\n    this._renderLive();\n  }\n  /** @param {any} _e */\n  _onUp(_e) {\n    var _a, _b;\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousemove\", this._onMove);\n      doc.removeEventListener(\"mouseup\", this._onUp);\n      doc.removeEventListener(\"touchmove\", this._onMove);\n      doc.removeEventListener(\"touchend\", this._onUp);\n    }\n    if (!this.drag) return;\n    const rawA = this.drag.a;\n    const rawB = this.drag.b;\n    this.drag = null;\n    this._clearLive();\n    if (Math.abs(rawA.gx - rawB.gx) < 2 && Math.abs(rawA.gy - rawB.gy) < 2) {\n      if (!this.persistent) this._disarm();\n      return;\n    }\n    const mode = this._mode();\n    const a2 = this._resolve(rawA);\n    const b2 = this._resolve(rawB);\n    if (this._cfg().pinOnRelease !== false) {\n      this.pins.push({ xa: a2.x, ya: a2.y, xb: b2.x, yb: b2.y, mode });\n      this._renderPins();\n      (_b = (_a = this.ctx.history) == null ? void 0 : _a.snapshot) == null ? void 0 : _b.call(_a, \"measure\");\n    }\n    this._fireMeasured(a2, b2);\n    if (!this.persistent) this._disarm();\n  }\n  _cancelDrag() {\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousemove\", this._onMove);\n      doc.removeEventListener(\"mouseup\", this._onUp);\n      doc.removeEventListener(\"touchmove\", this._onMove);\n      doc.removeEventListener(\"touchend\", this._onUp);\n    }\n    this.drag = null;\n    this._clearLive();\n  }\n  /**\n   * @param {{x:number,y:number}} a @param {{x:number,y:number}} b\n   * @returns {{dx:number,dy:number,pct:number,slope:number}}\n   */\n  _stats(a2, b2) {\n    const dx = b2.x - a2.x;\n    const dy = b2.y - a2.y;\n    return {\n      dx,\n      dy,\n      pct: a2.y !== 0 ? dy / Math.abs(a2.y) * 100 : NaN,\n      slope: dx !== 0 ? dy / dx : NaN\n    };\n  }\n  /** @param {number} v */\n  _fmt(v2) {\n    if (!isFinite(v2)) return \"n/a\";\n    const a2 = Math.abs(v2);\n    if (a2 !== 0 && (a2 < 0.01 || a2 >= 1e6)) return v2.toExponential(2);\n    return String(Math.round(v2 * 100) / 100);\n  }\n  /** getComputedStyle of the graphical layer (browser only), for CSS vars. */\n  _computedStyle() {\n    if (!Environment.isBrowser()) return null;\n    const node = this.w.dom.elGraphical && this.w.dom.elGraphical.node;\n    if (!node || typeof getComputedStyle !== \"function\") return null;\n    try {\n      return getComputedStyle(node);\n    } catch (e2) {\n      return null;\n    }\n  }\n  /**\n   * Resolve a color: explicit config value, else a `--apx-measure-*` CSS custom\n   * property, else the built-in default.\n   * @param {any} cfgVal @param {string} varName @param {string} fallback\n   * @param {CSSStyleDeclaration|null} [cs]\n   */\n  _resolveColor(cfgVal, varName, fallback, cs) {\n    if (cfgVal) return cfgVal;\n    const style = cs !== void 0 ? cs : this._computedStyle();\n    const v2 = style ? style.getPropertyValue(varName).trim() : \"\";\n    return v2 || fallback;\n  }\n  /** Resolved semantic colors (config -> CSS var -> built-in default). */\n  _colors() {\n    const c2 = this._cfg().colors || {};\n    const cs = this._computedStyle();\n    return {\n      up: this._resolveColor(c2.up, \"--apx-measure-up\", \"#16a34a\", cs),\n      down: this._resolveColor(c2.down, \"--apx-measure-down\", \"#dc2626\", cs),\n      neutral: this._resolveColor(c2.neutral, \"--apx-measure-neutral\", \"#64748b\", cs),\n      guide: this._resolveColor(c2.guide, \"--apx-measure-guide\", \"#94a3b8\", cs)\n    };\n  }\n  /** @param {number} dy */\n  _dirColor(dy) {\n    const c2 = this._colors();\n    return dy === 0 ? c2.neutral : dy > 0 ? c2.up : c2.down;\n  }\n  /** @param {number} dy */\n  _dirClass(dy) {\n    return dy === 0 ? \"apexcharts-measure-flat\" : dy > 0 ? \"apexcharts-measure-up\" : \"apexcharts-measure-down\";\n  }\n  /**\n   * Format a percentage, via `measure.format.percent` when set.\n   * @param {number} p\n   */\n  _fmtPct(p2) {\n    if (!isFinite(p2)) return \"n/a\";\n    const f = this._cfg().format && this._cfg().format.percent;\n    if (typeof f === \"function\") {\n      try {\n        const s2 = f(p2);\n        if (s2 != null) return String(s2);\n      } catch (e2) {\n      }\n    }\n    return (p2 >= 0 ? \"+\" : \"\") + this._fmt(p2) + \"%\";\n  }\n  /**\n   * The readout lines for a ruler: `measure.label` override, else the default\n   * per-mode text.\n   * @param {{x:number,y:number}} a @param {{x:number,y:number}} b\n   * @param {{dx:number,dy:number,pct:number,slope:number}} st @param {string} mode\n   * @returns {string[]}\n   */\n  _label(a2, b2, st, mode) {\n    const fn = this._cfg().label;\n    if (typeof fn === \"function\") {\n      const out = fn({\n        from: { x: a2.x, y: a2.y },\n        to: { x: b2.x, y: b2.y },\n        dx: st.dx,\n        dy: st.dy,\n        percentChange: st.pct,\n        slope: st.slope,\n        mode\n      });\n      return Array.isArray(out) ? out.map(String) : [String(out)];\n    }\n    if (mode === \"span\") {\n      const arrow = st.dy === 0 ? \"\" : st.dy > 0 ? \" ↑\" : \" ↓\";\n      const pct = isFinite(st.pct) ? \"(\" + this._fmtPct(st.pct) + \")\" : \"\";\n      return [this._fmtY(st.dy) + \"  \" + pct + arrow, this._fmtX(a2.x) + \"  to  \" + this._fmtX(b2.x)];\n    }\n    return [\"Δx \" + this._fmtDx(st.dx), \"Δy \" + this._fmtY(st.dy), this._fmtPct(st.pct)];\n  }\n  /**\n   * Format an x delta, treating datetime x as a day count.\n   * @param {number} dx\n   */\n  _fmtDx(dx) {\n    if (this.w.config.xaxis.type === \"datetime\") {\n      const days = dx / 864e5;\n      return Math.round(days * 10) / 10 + \"d\";\n    }\n    return this._fmt(dx);\n  }\n  /**\n   * Format a y value (a delta) via the y-axis label formatter when present.\n   * @param {number} v\n   */\n  _fmtY(v2) {\n    const cf = this._cfg().format && this._cfg().format.y;\n    if (typeof cf === \"function\") {\n      try {\n        const s2 = cf(v2);\n        if (s2 != null) return String(s2);\n      } catch (e2) {\n      }\n    }\n    const f = this.w.globals.yLabelFormatters && this.w.globals.yLabelFormatters[0];\n    if (typeof f === \"function\") {\n      try {\n        const s2 = f(v2, { seriesIndex: 0, dataPointIndex: -1, w: this.w });\n        if (s2 != null && s2 !== \"\") return String(s2);\n      } catch (e2) {\n      }\n    }\n    return this._fmt(v2);\n  }\n  /**\n   * Format an x value: a short date for datetime x, else the x-label formatter\n   * or a plain number.\n   * @param {number} x\n   */\n  _fmtX(x) {\n    const w2 = this.w;\n    const cf = this._cfg().format && this._cfg().format.x;\n    if (typeof cf === \"function\") {\n      try {\n        const s2 = cf(x);\n        if (s2 != null) return String(s2);\n      } catch (e2) {\n      }\n    }\n    if (w2.config.xaxis.type === \"datetime\") {\n      const d = new Date(x);\n      return d.toLocaleDateString(void 0, {\n        day: \"numeric\",\n        month: \"short\",\n        year: \"numeric\"\n      });\n    }\n    const f = w2.globals.xLabelFormatter;\n    if (typeof f === \"function\") {\n      try {\n        const s2 = f(x, { w: w2 });\n        if (s2 != null && s2 !== \"\") return String(s2);\n      } catch (e2) {\n      }\n    }\n    return this._fmt(x);\n  }\n  /** The live overlay group, created lazily inside elGraphical. */\n  _liveGroup() {\n    const w2 = this.w;\n    if (this._live && this._live.node && this._live.node.parentNode) {\n      return this._live;\n    }\n    const g2 = this.graphics.group({ class: \"apexcharts-measure-live\" });\n    g2.node.style.pointerEvents = \"none\";\n    if (w2.dom.elGraphical) w2.dom.elGraphical.add(g2);\n    this._live = g2;\n    return g2;\n  }\n  _clearLive() {\n    if (this._live && this._live.node) {\n      const n2 = this._live.node;\n      if (n2.parentNode) n2.parentNode.removeChild(n2);\n    }\n    this._live = null;\n  }\n  _renderLive() {\n    if (!this.drag) return;\n    const g2 = this._liveGroup();\n    while (g2.node.firstChild) g2.node.removeChild(g2.node.firstChild);\n    const a2 = this._resolve(this.drag.a);\n    const b2 = this._resolve(this.drag.b);\n    this._drawRuler(g2, a2, b2, false, this._mode());\n  }\n  /** Redraw all pinned rulers into a fresh group (called after each render). */\n  _renderPins() {\n    const w2 = this.w;\n    const old = w2.dom.baseEl && w2.dom.baseEl.querySelector(\".apexcharts-measure-pins\");\n    if (old && old.parentNode) old.parentNode.removeChild(old);\n    if (!this.pins.length || !w2.dom.elGraphical) return;\n    const g2 = this.graphics.group({ class: \"apexcharts-measure-pins\" });\n    g2.node.style.pointerEvents = \"none\";\n    w2.dom.elGraphical.add(g2);\n    this.pins.forEach((p2) => {\n      const a2 = __spreadProps(__spreadValues({}, this._dataToGrid(p2.xa, p2.ya)), { x: p2.xa, y: p2.ya });\n      const b2 = __spreadProps(__spreadValues({}, this._dataToGrid(p2.xb, p2.yb)), { x: p2.xb, y: p2.yb });\n      this._drawRuler(g2, a2, b2, true, p2.mode || \"span\");\n    });\n  }\n  /**\n   * Draw one ruler into `g`, dispatching on style.\n   * @param {any} g\n   * @param {{gx:number,gy:number,x:number,y:number}} a\n   * @param {{gx:number,gy:number,x:number,y:number}} b\n   * @param {boolean} [pinned]\n   * @param {string} [mode] 'span' (finance-style band, default) | 'free'\n   */\n  _drawRuler(g2, a2, b2, pinned, mode) {\n    const st = this._stats(a2, b2);\n    const rg = this.graphics.group({\n      class: \"apexcharts-measure-ruler \" + this._dirClass(st.dy) + (pinned ? \" apexcharts-measure-pinned\" : \"\")\n    });\n    if ((mode || this._mode()) === \"free\") this._drawFree(rg, a2, b2, st);\n    else this._drawSpan(rg, a2, b2, st);\n    g2.add(rg);\n  }\n  /** Endpoint dots on the series line (skipped when markers:false).\n   * @param {any} g @param {{gx:number,gy:number}} p @param {string} color */\n  _dot(g2, p2, color) {\n    if (this._cfg().markers === false) return;\n    const dot = this.graphics.drawMarker(p2.gx, p2.gy, {\n      pSize: 4,\n      shape: \"circle\",\n      pointFillColor: color,\n      pointFillOpacity: 1,\n      pointStrokeColor: \"#fff\",\n      pointStrokeWidth: 2,\n      pointStrokeOpacity: 1\n    });\n    g2.add(dot);\n  }\n  /** Draw the readout label box + text into `g` at (bx,by).\n   * @param {any} g @param {string[]} lines @param {number} bx @param {number} by\n   * @param {number} boxW @param {number} boxH @param {string} color */\n  _readout(g2, lines, bx, by, boxW, boxH, color) {\n    const box = this.graphics.drawRect(bx, by, boxW, boxH, 4);\n    box.node.setAttribute(\"class\", \"apexcharts-measure-label-bg\");\n    box.attr({ fill: \"#ffffff\", \"fill-opacity\": 0.95, stroke: color, \"stroke-width\": 1 });\n    g2.add(box);\n    const label = this.graphics.drawText({\n      x: bx + 9,\n      y: by + 15,\n      text: lines,\n      textAnchor: \"start\",\n      fontSize: \"11px\",\n      foreColor: \"#1e293b\",\n      cssClass: \"apexcharts-measure-label\"\n    });\n    g2.add(label);\n  }\n  /**\n   * Finance-style ruler: vertical guides + shaded band + endpoints on the\n   * series line + a top readout. Guides/band/markers are individually\n   * toggleable via config.\n   * @param {any} g\n   * @param {{gx:number,gy:number,x:number,y:number}} a\n   * @param {{gx:number,gy:number,x:number,y:number}} b\n   * @param {{dx:number,dy:number,pct:number,slope:number}} st\n   */\n  _drawSpan(g2, a2, b2, st) {\n    const w2 = this.w;\n    const cfg = this._cfg();\n    const gh = w2.layout.gridHeight;\n    const color = this._dirColor(st.dy);\n    const lx = Math.min(a2.gx, b2.gx);\n    const rx = Math.max(a2.gx, b2.gx);\n    if (cfg.band !== false) {\n      const band = this.graphics.drawRect(lx, 0, Math.max(0, rx - lx), gh, 0);\n      band.node.setAttribute(\"class\", \"apexcharts-measure-band\");\n      band.attr({ fill: color, \"fill-opacity\": 0.09, stroke: \"none\" });\n      g2.add(band);\n    }\n    if (cfg.guides !== false) {\n      [a2, b2].forEach((p2) => {\n        const vline = this.graphics.drawLine(p2.gx, 0, p2.gx, gh, this._colors().guide, 4, 1);\n        vline.node.setAttribute(\"class\", \"apexcharts-measure-vline\");\n        g2.add(vline);\n      });\n    }\n    [a2, b2].forEach((p2) => this._dot(g2, p2, color));\n    const lines = this._label(a2, b2, st, \"span\");\n    const longest = lines.reduce((m2, s2) => Math.max(m2, s2.length), 0);\n    const boxW = Math.max(148, longest * 6.4);\n    const boxH = 20 + lines.length * 15;\n    let bx = (lx + rx) / 2 - boxW / 2;\n    bx = Math.max(2, Math.min(bx, w2.layout.gridWidth - boxW - 2));\n    this._readout(g2, lines, bx, 4, boxW, boxH, color);\n  }\n  /**\n   * Free 2D ruler: a diagonal line between two arbitrary points + a readout.\n   * @param {any} g\n   * @param {{gx:number,gy:number,x:number,y:number}} a\n   * @param {{gx:number,gy:number,x:number,y:number}} b\n   * @param {{dx:number,dy:number,pct:number,slope:number}} st\n   */\n  _drawFree(g2, a2, b2, st) {\n    const color = this._dirColor(st.dy);\n    const line = this.graphics.drawLine(a2.gx, a2.gy, b2.gx, b2.gy, color, 0, 2);\n    line.node.setAttribute(\"class\", \"apexcharts-measure-line\");\n    g2.add(line);\n    [a2, b2].forEach((p2) => this._dot(g2, p2, color));\n    const lines = this._label(a2, b2, st, \"free\");\n    const longest = lines.reduce((m2, s2) => Math.max(m2, s2.length), 0);\n    const boxW = Math.max(72, longest * 6.2);\n    const boxH = 16 + lines.length * 15;\n    let bx = (a2.gx + b2.gx) / 2 + 8;\n    let by = (a2.gy + b2.gy) / 2 - boxH / 2;\n    bx = Math.max(2, Math.min(bx, this.w.layout.gridWidth - boxW - 2));\n    by = Math.max(2, Math.min(by, this.w.layout.gridHeight - boxH - 2));\n    this._readout(g2, lines, bx, by, boxW, boxH, color);\n  }\n  /**\n   * @param {{x:number,y:number}} a @param {{x:number,y:number}} b\n   */\n  _fireMeasured(a2, b2) {\n    const st = this._stats(a2, b2);\n    const payload = {\n      from: { x: a2.x, y: a2.y },\n      to: { x: b2.x, y: b2.y },\n      dx: st.dx,\n      dy: st.dy,\n      percentChange: st.pct,\n      slope: st.slope\n    };\n    const fn = this.w.config.chart.events.measured;\n    if (typeof fn === \"function\") fn(this.ctx, payload);\n    this.ctx.events.fireEvent(\"measured\", [this.ctx, payload]);\n  }\n  /** Re-project the measure pins after each render. */\n  _afterRender() {\n    if (!this._enabled()) return;\n    if (this.w.interact.measureEnabled && !this.persistent) {\n      this.persistent = true;\n    }\n    if (this.pins.length) this._renderPins();\n    if (this.persistent && !this.drag) {\n      this._disarm();\n      this._arm();\n    }\n  }\n  teardown() {\n    this._cancelDrag();\n    this._endSeed(false);\n    this._disarm();\n    const doc = this._doc();\n    if (doc && this._keysBound) {\n      doc.removeEventListener(\"keydown\", this._onKeyDown);\n      doc.removeEventListener(\"keyup\", this._onKeyUp);\n    }\n    this._keysBound = false;\n    this.pins = [];\n  }\n}\nApexCharts.registerFeatures({ measure: Measure });\nclass ContextMenu {\n  /**\n   * @param {import('../../types/internal').ChartStateW} w\n   * @param {import('../../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.w = w2;\n    this.ctx = ctx;\n    this.menu = null;\n    this._items = [];\n    this._focusIndex = -1;\n    this._trigger = null;\n    this._onContext = this._onContext.bind(this);\n    this._onDocDown = this._onDocDown.bind(this);\n    this._onKey = this._onKey.bind(this);\n    this._afterRender = this._afterRender.bind(this);\n    ctx.addEventListener(\"mounted\", this._afterRender);\n    ctx.addEventListener(\"updated\", this._afterRender);\n  }\n  _cfg() {\n    return this.w.config.chart.contextMenu || {};\n  }\n  _enabled() {\n    return this._cfg().enabled === true;\n  }\n  _doc() {\n    return this.w.dom.baseEl && this.w.dom.baseEl.ownerDocument;\n  }\n  /** (Re)attach the contextmenu trigger to the freshly (re)built SVG. */\n  _afterRender() {\n    this._detachTrigger();\n    this.close();\n    if (!this._enabled() || !Environment.isBrowser()) return;\n    const svg = this.w.dom.Paper && this.w.dom.Paper.node;\n    if (!svg) return;\n    svg.addEventListener(\"contextmenu\", this._onContext);\n    this._trigger = svg;\n  }\n  _detachTrigger() {\n    if (this._trigger) {\n      this._trigger.removeEventListener(\"contextmenu\", this._onContext);\n      this._trigger = null;\n    }\n  }\n  /** @param {any} e */\n  _onContext(e2) {\n    if (!this._enabled()) return;\n    e2.preventDefault();\n    this.open(e2.clientX, e2.clientY);\n  }\n  /**\n   * Client pixel -> data {x,y} via the grid client-rect fraction (scale\n   * independent). Null when the grid is not measurable.\n   * @param {number} cx @param {number} cy\n   * @returns {{x:number,y:number}|null}\n   */\n  _clientToData(cx, cy) {\n    const w2 = this.w;\n    const grid = w2.dom.baseEl && w2.dom.baseEl.querySelector(\".apexcharts-grid\");\n    if (!grid) return null;\n    const r2 = grid.getBoundingClientRect();\n    if (!r2.width || !r2.height) return null;\n    const clamp = (v2) => v2 < 0 ? 0 : v2 > 1 ? 1 : v2;\n    const fx = clamp((cx - r2.left) / r2.width);\n    const fy = clamp((cy - r2.top) / r2.height);\n    const x = w2.globals.minX + fx * (w2.globals.maxX - w2.globals.minX);\n    const s2 = w2.globals.yAxisScale && w2.globals.yAxisScale[0];\n    const ymin = s2 && isFinite(s2.niceMin) ? s2.niceMin : w2.globals.minY;\n    const ymax = s2 && isFinite(s2.niceMax) ? s2.niceMax : w2.globals.maxY;\n    const y = ymax - fy * (ymax - ymin);\n    return { x, y };\n  }\n  /**\n   * Resolve the configured items into runnable entries, dropping built-ins\n   * whose dependency is absent (e.g. measure not enabled).\n   * @param {any} context\n   * @returns {Array<{id:string,label:string,run:Function}>}\n   */\n  _resolveItems(context) {\n    const cfg = this._cfg();\n    const raw = Array.isArray(cfg.items) && cfg.items.length ? cfg.items : [\"annotate\", \"xline\", \"yline\", \"measure\"];\n    const labels = cfg.labels || {};\n    const out = [];\n    raw.forEach((it) => {\n      if (typeof it === \"string\") {\n        if (it === \"annotate\") {\n          out.push({\n            id: \"annotate\",\n            label: labels.annotate || \"Add note here\",\n            run: () => this._annotate(context)\n          });\n        } else if (it === \"xline\") {\n          out.push({\n            id: \"xline\",\n            label: labels.xline || \"Annotate here\",\n            run: () => this._line(context, \"x\")\n          });\n        } else if (it === \"yline\") {\n          out.push({\n            id: \"yline\",\n            label: labels.yline || \"Mark this level\",\n            run: () => this._line(context, \"y\")\n          });\n        } else if (it === \"measure\") {\n          const m2 = this.ctx.measure;\n          const on = m2 && this.w.config.chart.measure && this.w.config.chart.measure.enabled;\n          if (on) {\n            out.push({\n              id: \"measure\",\n              label: labels.measure || \"Measure from here\",\n              run: () => m2.seedFromClient(context.clientX, context.clientY)\n            });\n          }\n        }\n      } else if (it && typeof it === \"object\" && typeof it.onClick === \"function\") {\n        out.push({\n          id: it.id || \"custom\",\n          label: it.label || \"Action\",\n          run: () => it.onClick(this.ctx, context)\n        });\n      }\n    });\n    return out;\n  }\n  /** @param {any} context */\n  _annotate(context) {\n    if (context.x == null || context.y == null) return;\n    const cfg = this._cfg();\n    const ink = this.ctx.ink;\n    if (ink && typeof ink.createAt === \"function\") {\n      ink.createAt(context.x, context.y, { text: cfg.noteText || \"Note\" });\n      return;\n    }\n    this.ctx.addPointAnnotation(\n      {\n        x: context.x,\n        y: context.y,\n        marker: { size: 5 },\n        label: {\n          text: cfg.noteText || \"Note\",\n          style: { background: \"#fff\", color: \"#334155\" }\n        }\n      },\n      true\n    );\n  }\n  /**\n   * The 'xline' / 'yline' items: drop a dashed line annotation at the clicked\n   * data point ('x' = vertical line at the clicked x, 'y' = horizontal line\n   * at the clicked y). Lines only: no x2/y2 is ever set, so this never\n   * creates a range rectangle. Both items share chart.contextMenu.line\n   * ({ text, strokeDashArray, color }) for styling.\n   * @param {any} context @param {'x'|'y'} axis\n   */\n  _line(context, axis) {\n    const lc = this._cfg().line || {};\n    const val = axis === \"x\" ? context.x : context.y;\n    if (val == null) return;\n    const ink = this.ctx.ink;\n    if (ink && typeof ink.createLineAt === \"function\") {\n      ink.createLineAt(axis, val, {\n        text: lc.text,\n        strokeDashArray: lc.strokeDashArray,\n        color: lc.color\n      });\n      return;\n    }\n    const anno = {\n      strokeDashArray: lc.strokeDashArray != null ? lc.strokeDashArray : 4\n    };\n    if (lc.text) anno.label = { text: lc.text };\n    if (lc.color) {\n      anno.borderColor = lc.color;\n      anno.label = Utils$1.extend(anno.label || {}, { borderColor: lc.color });\n    }\n    if (axis === \"x\") {\n      this.ctx.addXaxisAnnotation(Utils$1.extend(anno, { x: val }), true);\n    } else {\n      this.ctx.addYaxisAnnotation(Utils$1.extend(anno, { y: val }), true);\n    }\n  }\n  /**\n   * Open the menu at a client-space point.\n   * @param {number} clientX @param {number} clientY\n   */\n  open(clientX, clientY) {\n    this.close();\n    const w2 = this.w;\n    const elWrap = w2.dom.elWrap;\n    const doc = this._doc();\n    if (!elWrap || !doc) return;\n    const data = this._clientToData(clientX, clientY);\n    const g2 = w2.globals;\n    const context = {\n      x: data ? data.x : null,\n      y: data ? data.y : null,\n      seriesIndex: g2.capturedSeriesIndex >= 0 ? g2.capturedSeriesIndex : null,\n      dataPointIndex: g2.capturedDataPointIndex >= 0 ? g2.capturedDataPointIndex : null,\n      clientX,\n      clientY\n    };\n    const items = this._resolveItems(context);\n    if (!items.length) return;\n    this._items = items;\n    const menu = doc.createElement(\"div\");\n    menu.className = \"apexcharts-context-menu\";\n    menu.setAttribute(\"role\", \"menu\");\n    menu.style.position = \"absolute\";\n    menu.style.visibility = \"hidden\";\n    items.forEach((it, i2) => {\n      const btn = doc.createElement(\"button\");\n      btn.type = \"button\";\n      btn.className = \"apexcharts-context-menu-item\";\n      btn.setAttribute(\"role\", \"menuitem\");\n      btn.tabIndex = -1;\n      btn.textContent = it.label;\n      btn.addEventListener(\"click\", (ev) => {\n        ev.stopPropagation();\n        this._activate(i2);\n      });\n      btn.addEventListener(\"mouseenter\", () => this._focus(i2));\n      menu.appendChild(btn);\n    });\n    elWrap.appendChild(menu);\n    this.menu = menu;\n    const wrapRect = elWrap.getBoundingClientRect();\n    let left = clientX - wrapRect.left;\n    let top = clientY - wrapRect.top;\n    const mw = menu.offsetWidth;\n    const mh = menu.offsetHeight;\n    const maxLeft = Math.max(0, elWrap.clientWidth - mw);\n    const maxTop = Math.max(0, elWrap.clientHeight - mh);\n    if (left > maxLeft) left = maxLeft;\n    if (top > maxTop) top = maxTop;\n    menu.style.left = Math.max(0, left) + \"px\";\n    menu.style.top = Math.max(0, top) + \"px\";\n    menu.style.visibility = \"visible\";\n    doc.addEventListener(\"mousedown\", this._onDocDown, true);\n    doc.addEventListener(\"keydown\", this._onKey, true);\n    this._focus(0);\n  }\n  /** @param {number} i */\n  _focus(i2) {\n    if (!this.menu) return;\n    const btns = this.menu.querySelectorAll(\".apexcharts-context-menu-item\");\n    if (this._focusIndex >= 0 && btns[this._focusIndex]) {\n      btns[this._focusIndex].classList.remove(\"apexcharts-context-menu-item--active\");\n    }\n    this._focusIndex = i2;\n    if (btns[i2]) {\n      btns[i2].classList.add(\"apexcharts-context-menu-item--active\");\n      if (typeof btns[i2].focus === \"function\") btns[i2].focus();\n    }\n  }\n  /** @param {number} i */\n  _activate(i2) {\n    const it = this._items[i2];\n    this.close();\n    if (it) it.run();\n  }\n  /** @param {any} e */\n  _onDocDown(e2) {\n    if (this.menu && this.menu.contains(e2.target)) return;\n    this.close();\n  }\n  /** @param {any} e */\n  _onKey(e2) {\n    if (!this.menu || !this._items.length) return;\n    if (e2.key === \"Escape\") {\n      e2.preventDefault();\n      this.close();\n    } else if (e2.key === \"ArrowDown\") {\n      e2.preventDefault();\n      this._focus((this._focusIndex + 1) % this._items.length);\n    } else if (e2.key === \"ArrowUp\") {\n      e2.preventDefault();\n      this._focus((this._focusIndex - 1 + this._items.length) % this._items.length);\n    } else if (e2.key === \"Enter\" || e2.key === \" \") {\n      e2.preventDefault();\n      this._activate(this._focusIndex < 0 ? 0 : this._focusIndex);\n    }\n  }\n  close() {\n    const doc = this._doc();\n    if (doc) {\n      doc.removeEventListener(\"mousedown\", this._onDocDown, true);\n      doc.removeEventListener(\"keydown\", this._onKey, true);\n    }\n    if (this.menu && this.menu.parentNode) {\n      this.menu.parentNode.removeChild(this.menu);\n    }\n    this.menu = null;\n    this._items = [];\n    this._focusIndex = -1;\n  }\n  teardown() {\n    this.close();\n    this._detachTrigger();\n  }\n}\nApexCharts.registerFeatures({ contextMenu: ContextMenu });\nconst MAX_BINS = 1e3;\nfunction quantileSorted(sorted, q) {\n  const n2 = sorted.length;\n  if (n2 === 0) return NaN;\n  if (n2 === 1) return sorted[0];\n  const pos = (n2 - 1) * q;\n  const lo = Math.floor(pos);\n  const hi = Math.ceil(pos);\n  if (lo === hi) return sorted[lo];\n  return sorted[lo] + (sorted[hi] - sorted[lo]) * (pos - lo);\n}\nfunction stdDev(values) {\n  const n2 = values.length;\n  if (n2 < 2) return 0;\n  let sum = 0;\n  for (let i2 = 0; i2 < n2; i2++) sum += values[i2];\n  const mean = sum / n2;\n  let acc = 0;\n  for (let i2 = 0; i2 < n2; i2++) {\n    const d = values[i2] - mean;\n    acc += d * d;\n  }\n  return Math.sqrt(acc / n2);\n}\nfunction widthForRule(sorted, span, rule) {\n  const n2 = sorted.length;\n  const byCount = (count) => span / Math.max(1, Math.ceil(count));\n  switch (rule) {\n    case \"sqrt\":\n      return { width: byCount(Math.sqrt(n2)), rule: \"sqrt\" };\n    case \"rice\":\n      return { width: byCount(2 * Math.cbrt(n2)), rule: \"rice\" };\n    case \"scott\": {\n      const sd = stdDev(sorted);\n      if (sd > 0) return { width: 3.49 * sd * Math.pow(n2, -1 / 3), rule: \"scott\" };\n      return { width: byCount(Math.log2(n2) + 1), rule: \"sturges\" };\n    }\n    case \"fd\": {\n      const iqr = quantileSorted(sorted, 0.75) - quantileSorted(sorted, 0.25);\n      if (iqr > 0) return { width: 2 * iqr * Math.pow(n2, -1 / 3), rule: \"fd\" };\n      return { width: byCount(Math.log2(n2) + 1), rule: \"sturges\" };\n    }\n    case \"auto\": {\n      const sturges = byCount(Math.log2(n2) + 1);\n      const iqr = quantileSorted(sorted, 0.75) - quantileSorted(sorted, 0.25);\n      if (iqr <= 0) return { width: sturges, rule: \"sturges\" };\n      const fd = 2 * iqr * Math.pow(n2, -1 / 3);\n      return fd < sturges ? { width: fd, rule: \"fd\" } : { width: sturges, rule: \"sturges\" };\n    }\n    case \"sturges\":\n    default:\n      return { width: byCount(Math.log2(n2) + 1), rule: \"sturges\" };\n  }\n}\nfunction computeBinning(values, opts = {}) {\n  if (!Array.isArray(values) || values.length === 0) return null;\n  const sorted = values.slice().sort((a2, b2) => a2 - b2);\n  let lo = sorted[0];\n  let hi = sorted[sorted.length - 1];\n  const range = opts.range;\n  if (Array.isArray(range) && range.length === 2) {\n    const rLo = Number(range[0]);\n    const rHi = Number(range[1]);\n    if (isFinite(rLo) && isFinite(rHi) && rHi > rLo) {\n      lo = rLo;\n      hi = rHi;\n    }\n  }\n  if (!(hi > lo)) {\n    const pad = Math.abs(lo) > 0 ? Math.abs(lo) * 0.05 : 0.5;\n    return {\n      edges: [lo - pad, lo + pad],\n      binWidth: pad * 2,\n      rule: \"single\",\n      capped: false\n    };\n  }\n  const span = hi - lo;\n  let width;\n  let rule;\n  if (typeof opts.binWidth === \"number\" && opts.binWidth > 0) {\n    width = opts.binWidth;\n    rule = \"binWidth\";\n  } else if (typeof opts.bins === \"number\" && opts.bins >= 1) {\n    width = span / Math.floor(opts.bins);\n    rule = \"count\";\n  } else {\n    const chosen = widthForRule(\n      sorted,\n      span,\n      typeof opts.bins === \"string\" ? opts.bins : \"auto\"\n    );\n    width = chosen.width;\n    rule = chosen.rule;\n  }\n  if (!isFinite(width) || width <= 0) width = span;\n  let count = Math.ceil(span / width);\n  if (!isFinite(count) || count < 1) count = 1;\n  let capped = false;\n  if (count > MAX_BINS) {\n    count = MAX_BINS;\n    width = span / count;\n    capped = true;\n  }\n  width = span / count;\n  const edges = new Array(count + 1);\n  for (let k = 0; k <= count; k++) edges[k] = lo + k * width;\n  edges[count] = Math.max(edges[count], hi);\n  return { edges, binWidth: width, rule, capped };\n}\nfunction binIndexOf(v2, edges) {\n  const last = edges.length - 1;\n  if (!(v2 >= edges[0]) || v2 > edges[last]) return -1;\n  if (v2 === edges[last]) return last - 1;\n  const width = (edges[last] - edges[0]) / last;\n  if (width > 0) {\n    let k = Math.floor((v2 - edges[0]) / width);\n    if (k < 0) k = 0;\n    if (k > last - 1) k = last - 1;\n    if (v2 < edges[k]) k--;\n    else if (v2 >= edges[k + 1]) k++;\n    if (k < 0 || k > last - 1) return -1;\n    return k;\n  }\n  let lo = 0;\n  let hi = last - 1;\n  while (lo <= hi) {\n    const mid = lo + hi >> 1;\n    if (v2 < edges[mid]) hi = mid - 1;\n    else if (v2 >= edges[mid + 1]) lo = mid + 1;\n    else return mid;\n  }\n  return -1;\n}\nfunction binCounts(values, edges) {\n  const counts = new Array(Math.max(0, edges.length - 1)).fill(0);\n  for (let i2 = 0; i2 < values.length; i2++) {\n    const k = binIndexOf(values[i2], edges);\n    if (k >= 0) counts[k]++;\n  }\n  return counts;\n}\nfunction rowsByBin(values, edges) {\n  const n2 = Math.max(0, edges.length - 1);\n  const buckets = new Array(n2);\n  for (let k = 0; k < n2; k++) buckets[k] = [];\n  for (let i2 = 0; i2 < values.length; i2++) {\n    const k = binIndexOf(values[i2], edges);\n    if (k >= 0) buckets[k].push(values[i2]);\n  }\n  return buckets;\n}\nfunction fiveNumberSummary(values, opts = {}) {\n  if (!Array.isArray(values) || values.length === 0) return null;\n  const sorted = values.slice().sort((a2, b2) => a2 - b2);\n  const q1 = quantileSorted(sorted, 0.25);\n  const median = quantileSorted(sorted, 0.5);\n  const q3 = quantileSorted(sorted, 0.75);\n  const iqr = q3 - q1;\n  let lo = sorted[0];\n  let hi = sorted[sorted.length - 1];\n  let outliers = [];\n  if (opts.whiskers === \"tukey\" && iqr > 0) {\n    const loFence = q1 - 1.5 * iqr;\n    const hiFence = q3 + 1.5 * iqr;\n    let i2 = 0;\n    while (i2 < sorted.length && sorted[i2] < loFence) i2++;\n    let j = sorted.length - 1;\n    while (j >= 0 && sorted[j] > hiFence) j--;\n    if (i2 <= j) {\n      lo = sorted[i2];\n      hi = sorted[j];\n      outliers = sorted.slice(0, i2).concat(sorted.slice(j + 1));\n    }\n  }\n  return { summary: [lo, q1, median, q3, hi], outliers, iqr };\n}\nfunction kernelDensity(values, opts = {}) {\n  if (!Array.isArray(values) || values.length === 0) return null;\n  const sorted = values.slice().sort((a2, b2) => a2 - b2);\n  const n2 = sorted.length;\n  let h2 = opts.bandwidth;\n  if (!(typeof h2 === \"number\" && h2 > 0)) {\n    const sd = stdDev(sorted);\n    const iqr = quantileSorted(sorted, 0.75) - quantileSorted(sorted, 0.25);\n    const spread = iqr > 0 ? Math.min(sd, iqr / 1.349) : sd;\n    h2 = 0.9 * spread * Math.pow(n2, -1 / 5);\n  }\n  if (!isFinite(h2) || h2 <= 0) {\n    const v2 = sorted[0];\n    const eps = Math.abs(v2) > 0 ? Math.abs(v2) * 1e-3 : 1e-3;\n    return {\n      density: [\n        [v2 - eps, 0],\n        [v2, 1],\n        [v2 + eps, 0]\n      ],\n      bandwidth: eps\n    };\n  }\n  const steps = Math.max(8, Math.floor(opts.resolution || 64));\n  const lo = sorted[0] - 2 * h2;\n  const hi = sorted[n2 - 1] + 2 * h2;\n  const step = (hi - lo) / (steps - 1);\n  const norm = 1 / (n2 * h2 * Math.sqrt(2 * Math.PI));\n  const density = [];\n  for (let g2 = 0; g2 < steps; g2++) {\n    const x = lo + g2 * step;\n    let sum = 0;\n    for (let i2 = 0; i2 < n2; i2++) {\n      const z = (x - sorted[i2]) / h2;\n      sum += Math.exp(-0.5 * z * z);\n    }\n    density.push([x, sum * norm]);\n  }\n  return { density, bandwidth: h2 };\n}\nfunction normalizeCounts(counts, opts = {}) {\n  let out = counts.slice();\n  if (opts.cumulative) {\n    let acc = 0;\n    out = out.map((c2) => acc += c2);\n  }\n  const total = counts.reduce((a2, b2) => a2 + b2, 0);\n  if (total <= 0) return out;\n  if (opts.normalize === \"relative\") {\n    return out.map((c2) => c2 / total * 100);\n  }\n  if (opts.normalize === \"density\") {\n    const w2 = opts.binWidth;\n    if (typeof w2 === \"number\" && w2 > 0) return out.map((c2) => c2 / (total * w2));\n  }\n  return out;\n}\nfunction histogramValues(data) {\n  const out = [];\n  if (!Array.isArray(data)) return out;\n  for (let i2 = 0; i2 < data.length; i2++) {\n    const d = data[i2];\n    let raw = d;\n    if (Array.isArray(d)) raw = d.length === 1 ? d[0] : d[1];\n    else if (d && typeof d === \"object\") raw = d.y !== void 0 ? d.y : d.x;\n    const v2 = Utils$1.parseNumber(raw);\n    if (v2 !== null && isFinite(v2)) out.push(v2);\n  }\n  return out;\n}\nfunction histogramTransform(ser, w2) {\n  var _a;\n  const cnf = w2.config;\n  const gl = w2.globals;\n  if (!Array.isArray(ser)) return ser;\n  if (!gl.histogramRawSeries) {\n    gl.histogramRawSeries = ser.map((s2) => __spreadProps(__spreadValues({}, s2), {\n      data: Array.isArray(s2 == null ? void 0 : s2.data) ? s2.data.slice() : s2 == null ? void 0 : s2.data\n    }));\n  }\n  const raw = gl.histogramRawSeries;\n  const hcfg = ((_a = cnf.plotOptions) == null ? void 0 : _a.histogram) || {};\n  const perSeries = raw.map((s2) => histogramValues(s2 == null ? void 0 : s2.data));\n  let all = [];\n  if (perSeries.length === 1) {\n    all = perSeries[0];\n  } else {\n    for (const vals of perSeries) all = all.concat(vals);\n  }\n  const binning = computeBinning(all, {\n    bins: hcfg.bins,\n    binWidth: hcfg.binWidth,\n    range: hcfg.range\n  });\n  if (!binning) {\n    w2.histogramData = {\n      edges: [],\n      binWidth: 0,\n      counts: [],\n      rule: \"\",\n      capped: false\n    };\n    return raw;\n  }\n  const { edges, binWidth } = binning;\n  const counts = perSeries.map(\n    (vals) => binCounts(vals, edges)\n  );\n  w2.histogramData = {\n    edges,\n    binWidth,\n    counts,\n    rule: binning.rule,\n    capped: binning.capped\n  };\n  const collapsed = gl.collapsedSeriesIndices || [];\n  return raw.map((s2, i2) => {\n    if (collapsed.indexOf(i2) !== -1) return __spreadProps(__spreadValues({}, s2), { data: [] });\n    const ys = normalizeCounts(counts[i2], {\n      normalize: hcfg.normalize,\n      cumulative: hcfg.cumulative,\n      binWidth\n    });\n    const data = [];\n    for (let k = 0; k < ys.length; k++) {\n      data.push({ x: (edges[k] + edges[k + 1]) / 2, y: ys[k] });\n    }\n    return __spreadProps(__spreadValues({}, s2), { data });\n  });\n}\nconst derivedData = /* @__PURE__ */ new WeakSet();\nfunction observationsOf(d, allowFlatY) {\n  var _a;\n  if (!d || typeof d !== \"object\" || Array.isArray(d)) return null;\n  let raw = null;\n  if (Array.isArray(d.points)) raw = d.points;\n  else if (Array.isArray((_a = d.y) == null ? void 0 : _a.points)) raw = d.y.points;\n  else if (allowFlatY && Array.isArray(d.y) && typeof d.y[0] === \"number\") {\n    raw = d.y;\n  }\n  if (!raw) return null;\n  const out = [];\n  for (let i2 = 0; i2 < raw.length; i2++) {\n    const v2 = Utils$1.parseNumber(raw[i2]);\n    if (v2 !== null && isFinite(v2)) out.push(v2);\n  }\n  return out.length ? out : null;\n}\nfunction boxPlotTransform(ser, w2) {\n  var _a, _b;\n  if (!Array.isArray(ser)) return ser;\n  const whiskers = ((_b = (_a = w2.config.plotOptions) == null ? void 0 : _a.boxPlot) == null ? void 0 : _b.whiskers) || \"minmax\";\n  return ser.map((s2) => {\n    if (!Array.isArray(s2 == null ? void 0 : s2.data)) return s2;\n    let touched = false;\n    const data = s2.data.map((d) => {\n      if (Array.isArray(d == null ? void 0 : d.y) && d.y.length === 5 && !derivedData.has(d)) {\n        return d;\n      }\n      const values = observationsOf(d, false);\n      if (!values) return d;\n      const summary = fiveNumberSummary(values, { whiskers });\n      if (!summary) return d;\n      touched = true;\n      const next = __spreadProps(__spreadValues({}, d), { y: summary.summary, points: values });\n      derivedData.add(next);\n      return next;\n    });\n    return touched ? __spreadProps(__spreadValues({}, s2), { data }) : s2;\n  });\n}\nfunction violinTransform(ser, w2) {\n  var _a, _b;\n  if (!Array.isArray(ser)) return ser;\n  const kde = ((_b = (_a = w2.config.plotOptions) == null ? void 0 : _a.violin) == null ? void 0 : _b.kde) || {};\n  return ser.map((s2) => {\n    if (!Array.isArray(s2 == null ? void 0 : s2.data)) return s2;\n    let touched = false;\n    const data = s2.data.map((d) => {\n      var _a2;\n      if (Array.isArray((_a2 = d == null ? void 0 : d.y) == null ? void 0 : _a2.density) && d.y.density.length && !derivedData.has(d)) {\n        return d;\n      }\n      const values = observationsOf(d, true);\n      if (!values) return d;\n      const est = kernelDensity(values, {\n        bandwidth: kde.bandwidth,\n        resolution: kde.resolution\n      });\n      if (!est) return d;\n      touched = true;\n      const next = __spreadProps(__spreadValues({}, d), { y: { density: est.density, points: values } });\n      derivedData.add(next);\n      return next;\n    });\n    return touched ? __spreadProps(__spreadValues({}, s2), { data }) : s2;\n  });\n}\nconst DEFAULT_MAX_ROWS = 3e3;\nfunction thinClusters(clusters, maxRows) {\n  let total = 0;\n  let widest = 0;\n  for (const c2 of clusters) {\n    total += c2.length;\n    if (c2.length > widest) widest = c2.length;\n  }\n  if (total <= maxRows) return { clusters, stride: 1, total, kept: total };\n  const keptAt = (s2) => {\n    let n2 = 0;\n    for (const c2 of clusters) n2 += Math.ceil(c2.length / s2);\n    return n2;\n  };\n  let stride = Math.max(2, Math.ceil(total / maxRows));\n  while (stride < widest && keptAt(stride) > maxRows) stride++;\n  let kept = 0;\n  const out = clusters.map((rows) => {\n    const keepList = [];\n    for (let i2 = 0; i2 < rows.length; i2 += stride) keepList.push(rows[i2]);\n    kept += keepList.length;\n    return keepList;\n  });\n  return { clusters: out, stride, total, kept };\n}\nfunction toUnitSeries(w2, clusters, opts) {\n  const maxRows = opts && opts.maxRows != null ? opts.maxRows : DEFAULT_MAX_ROWS;\n  const thinned = thinClusters(\n    clusters.map((c2) => c2.rows),\n    maxRows\n  );\n  if (thinned.stride > 1) {\n    console.warn(\n      `ApexCharts: rowSeries() thinned ${thinned.total} rows to ${thinned.kept} (every ${thinned.stride}${thinned.stride === 2 ? \"nd\" : thinned.stride === 3 ? \"rd\" : \"th\"} row) to stay under maxRows=${maxRows}. Raise maxRows to draw more.`\n    );\n  }\n  const colors = w2.globals && w2.globals.colors || [];\n  return clusters.map((c2, i2) => {\n    const fillColor = colors[c2.realIndex] || colors[0];\n    return {\n      name: c2.name,\n      data: thinned.clusters[i2].map((v2, q) => __spreadValues({\n        id: `${c2.realIndex}:${i2}:${q}`,\n        x: c2.name,\n        y: v2\n      }, fillColor ? { fillColor } : {}))\n    };\n  });\n}\nfunction histogramRows(w2, opts) {\n  const gl = w2.globals;\n  const hd = w2.histogramData;\n  const raw = gl && gl.histogramRawSeries;\n  if (!hd || !Array.isArray(hd.edges) || hd.edges.length < 2) return null;\n  if (!Array.isArray(raw) || !raw.length) return null;\n  const collapsed = gl && gl.collapsedSeriesIndices || [];\n  const edges = hd.edges;\n  const clusters = [];\n  raw.forEach((s2, i2) => {\n    var _a;\n    if (collapsed.indexOf(i2) !== -1) return;\n    const buckets = rowsByBin(histogramValues(s2 && s2.data), edges);\n    const seriesName = w2.seriesData && ((_a = w2.seriesData.seriesNames) == null ? void 0 : _a[i2]) || (s2 == null ? void 0 : s2.name);\n    buckets.forEach((rows, k) => {\n      const range = `${formatEdge(edges[k])}-${formatEdge(edges[k + 1])}`;\n      clusters.push({\n        // Only qualify by series when there is more than one to tell apart.\n        name: raw.length > 1 && seriesName ? `${seriesName} ${range}` : range,\n        realIndex: i2,\n        rows\n      });\n    });\n  });\n  return clusters.length ? toUnitSeries(w2, clusters, opts) : null;\n}\nfunction formatEdge(v2) {\n  if (!isFinite(v2)) return String(v2);\n  const r2 = Math.round(v2);\n  return Math.abs(v2 - r2) < 1e-6 ? String(r2) : String(Number(v2.toFixed(2)));\n}\nfunction pointsRowSource(pick) {\n  return (w2, opts) => {\n    var _a;\n    const perSeries = pick(w2);\n    if (!Array.isArray(perSeries) || !perSeries.length) return null;\n    const collapsed = w2.globals && w2.globals.collapsedSeriesIndices || [];\n    const labels = w2.globals && (((_a = w2.globals.categoryLabels) == null ? void 0 : _a.length) ? w2.globals.categoryLabels : w2.globals.labels) || [];\n    const clusters = [];\n    perSeries.forEach((byCat, i2) => {\n      var _a2;\n      if (collapsed.indexOf(i2) !== -1) return;\n      if (!Array.isArray(byCat)) return;\n      const seriesName = w2.seriesData && ((_a2 = w2.seriesData.seriesNames) == null ? void 0 : _a2[i2]);\n      byCat.forEach((pts, j) => {\n        const label = labels[j] != null ? String(labels[j]) : `#${j + 1}`;\n        clusters.push({\n          name: perSeries.length > 1 && seriesName ? `${seriesName} ${label}` : label,\n          realIndex: i2,\n          rows: Array.isArray(pts) ? pts.slice() : []\n        });\n      });\n    });\n    return clusters.length ? toUnitSeries(w2, clusters, opts) : null;\n  };\n}\nconst boxPlotRows = pointsRowSource((w2) => {\n  var _a;\n  return (_a = w2.candleData) == null ? void 0 : _a.seriesBoxPoints;\n});\nconst violinRows = pointsRowSource((w2) => {\n  var _a;\n  return (_a = w2.violinData) == null ? void 0 : _a.seriesViolinPoints;\n});\nregisterSeriesTransform(\"histogram\", histogramTransform);\nregisterSeriesTransform(\"boxPlot\", boxPlotTransform);\nregisterSeriesTransform(\"violin\", violinTransform);\nregisterRowSource(\"histogram\", histogramRows);\nregisterRowSource(\"boxPlot\", boxPlotRows);\nregisterRowSource(\"violin\", violinRows);\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: i2,\n      j,\n      realIndex,\n      columnGroupIndex,\n      series,\n      barHeight,\n      barWidth,\n      barXPosition,\n      barYPosition,\n      visibleSeries\n    } = opts;\n    const w2 = 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 (w2.axisFlags.isXNumeric && !w2.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 = w2.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 = resolveDataLabelOffset(\n      dataLabelsConfig.offsetX,\n      w2,\n      realIndex,\n      j\n    );\n    const offY = resolveDataLabelOffset(\n      dataLabelsConfig.offsetY,\n      w2,\n      realIndex,\n      j\n    );\n    let textRects = {\n      width: 0,\n      height: 0\n    };\n    if (w2.config.dataLabels.enabled) {\n      const yLabel = w2.seriesData.series[realIndex][j];\n      textRects = graphics.getTextRects(\n        w2.config.dataLabels.formatter ? w2.config.dataLabels.formatter(yLabel, __spreadProps(__spreadValues({}, w2), {\n          seriesIndex: realIndex,\n          dataPointIndex: j,\n          w: w2\n        })) : w2.formatters.yLabelFormatters[0](yLabel),\n        parseFloat(dataLabelsConfig.style.fontSize).toString()\n      );\n    }\n    const params = {\n      x,\n      y,\n      i: i2,\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] : w2.config.chart.stackType === \"100%\" ? series[realIndex][j] : w2.seriesData.series[realIndex][j],\n      i: realIndex,\n      j,\n      barWidth,\n      barHeight,\n      textRects,\n      dataLabelsConfig\n    });\n    if (w2.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  /**\n   * True when this chart stacks in more than one group, so totals have to be\n   * resolved per group rather than across the whole data point. A single-group\n   * chart keeps every old code path exactly as it was. See #4173.\n   */\n  hasMultipleSeriesGroups() {\n    return this.w.labelData.seriesGroups.length > 1;\n  }\n  /**\n   * The series group `realIndex` belongs to, and that group's own stacking\n   * state, or null when totals are chart-wide (the single-group case).\n   * @param {number} realIndex\n   * @returns {{groupIndex: number, group: string[]} | null}\n   */\n  getTotalGroupContext(realIndex) {\n    if (!this.hasMultipleSeriesGroups()) return null;\n    const groupIndex = this.barCtx.barHelpers.getSeriesGroupIndex(realIndex);\n    if (groupIndex < 0) return null;\n    return { groupIndex, group: this.w.labelData.seriesGroups[groupIndex] };\n  }\n  /**\n   * Whether `realIndex` is the series that should draw the stacked total.\n   *\n   * That is the series capping the stack. With grouped stacks each group has\n   * its own cap, so gating on the chart-wide `lastActiveBarSerieIndex` drew a\n   * single total for the last group only. See #4173.\n   * @param {number} realIndex\n   */\n  drawsStackedTotal(realIndex) {\n    const byGroup = this.barCtx.lastActiveBarSerieIndexByGroup;\n    const ctx = this.getTotalGroupContext(realIndex);\n    if (ctx && byGroup && byGroup.length > ctx.groupIndex) {\n      return byGroup[ctx.groupIndex] === realIndex;\n    }\n    return this.barCtx.lastActiveBarSerieIndex === realIndex;\n  }\n  /** @param {{realIndex: any, j: any}} opts */\n  getStackedTotalDataLabel({ realIndex, j }) {\n    const w2 = this.w;\n    const ctx = this.getTotalGroupContext(realIndex);\n    const byGroups = w2.seriesData.stackedSeriesTotalsByGroups;\n    let val = ctx && byGroups && byGroups[ctx.groupIndex] ? byGroups[ctx.groupIndex][j] : this.barCtx.stackedSeriesTotals[j];\n    if (this.totalFormatter) {\n      val = this.totalFormatter(val, __spreadProps(__spreadValues({}, w2), {\n        seriesIndex: realIndex,\n        dataPointIndex: j,\n        w: w2\n      }));\n    }\n    return val;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  calculateColumnsDataLabelsPosition(opts) {\n    const w2 = this.w;\n    let {\n      i: i2,\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 = w2.config.plotOptions.bar.dataLabels.orientation === \"vertical\";\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i: i2,\n      j\n    });\n    bcx = bcx - strokeWidth / 2;\n    const dataPointsDividedWidth = w2.layout.gridWidth / w2.globals.dataPoints;\n    if (this.barCtx.isVerticalGroupedRangeBar) {\n      dataLabelsX += barWidth / 2;\n    } else {\n      if (w2.axisFlags.isXNumeric) {\n        dataLabelsX = bcx - barWidth / 2 + offX;\n      } else {\n        dataLabelsX = bcx - dataPointsDividedWidth + barWidth / 2 + offX;\n      }\n      if (!w2.config.chart.stacked && zeroEncounters > 0 && w2.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 = w2.seriesData.series[i2][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    const totalGroupCtx = this.getTotalGroupContext(realIndex);\n    const prevYGroups = totalGroupCtx ? [totalGroupCtx.group] : w2.labelData.seriesGroups;\n    prevYGroups.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.drawsStackedTotal(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 + (w2.axisFlags.isXNumeric ? -barWidth / 2 : barWidth / 2 - xDivision) + barTotalDataLabelsConfig.offsetX;\n    }\n    if (!w2.config.chart.stacked) {\n      if (dataLabelsY < 0) {\n        dataLabelsY = 0 + strokeWidth;\n      } else if (dataLabelsY + textRects.height / 3 > w2.layout.gridHeight) {\n        dataLabelsY = w2.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 w2 = this.w;\n    let {\n      x,\n      i: i2,\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 = w2.layout.gridHeight / w2.globals.dataPoints;\n    const { zeroEncounters } = this.barCtx.barHelpers.getZeroValueEncounters({\n      i: i2,\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 (!w2.config.chart.stacked && zeroEncounters > 0 && w2.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n      dataLabelsY -= barHeight * zeroEncounters;\n    }\n    let totalDataLabelsX;\n    let totalDataLabelsY;\n    let totalDataLabelsAnchor = \"start\";\n    const valIsNegative = w2.seriesData.series[i2][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 = w2.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    const totalGroupCtx = this.getTotalGroupContext(realIndex);\n    const prevXGroups = totalGroupCtx ? [totalGroupCtx.group] : w2.labelData.seriesGroups;\n    prevXGroups.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.drawsStackedTotal(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 (w2.globals.barGroups.length > 1 && !totalGroupCtx) {\n        totalDataLabelsY = totalDataLabelsY - w2.globals.barGroups.length / 2 * (barHeight / 2);\n      }\n    }\n    if (!w2.config.chart.stacked) {\n      if (dataLabelsConfig.textAnchor === \"start\") {\n        if (dataLabelsX - textRects.width < 0) {\n          dataLabelsX = valIsNegative ? textRects.width + strokeWidth - offX : strokeWidth + offX;\n        } else if (dataLabelsX + textRects.width > w2.layout.gridWidth) {\n          dataLabelsX = valIsNegative ? w2.layout.gridWidth - strokeWidth : w2.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 > w2.layout.gridWidth) {\n          dataLabelsX = w2.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 > w2.layout.gridWidth) {\n          dataLabelsX = w2.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: i2,\n    // = realIndex\n    j,\n    textRects,\n    barHeight,\n    barWidth,\n    dataLabelsConfig\n  }) {\n    var _a, _b;\n    const w2 = this.w;\n    let rotate = \"rotate(0)\";\n    if (w2.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 = w2.globals.collapsedSeriesIndices.indexOf(i2) > -1;\n    if (dataLabelsConfig.enabled && !isSeriesNotCollapsed) {\n      elDataLabelsWrap = graphics.group({\n        class: \"apexcharts-data-labels\",\n        transform: rotate\n      });\n      const dlCfg = w2.config.dataLabels;\n      if (((_a = dlCfg.animate) == null ? void 0 : _a.enabled) || ((_b = dlCfg.countUp) == null ? void 0 : _b.enabled)) {\n        elDataLabelsWrap.node.setAttribute(\n          \"data:dlKey\",\n          `${i2}::${datumKey(w2, i2, j)}`\n        );\n        elDataLabelsWrap.node.setAttribute(\"data:dlJ\", String(j));\n        if (typeof val === \"number\" && isFinite(val)) {\n          elDataLabelsWrap.node.setAttribute(\"data:dlVal\", String(val));\n        }\n      }\n      let text = \"\";\n      if (typeof val !== \"undefined\") {\n        text = formatter(val, __spreadProps(__spreadValues({}, w2), {\n          seriesIndex: i2,\n          dataPointIndex: j,\n          w: w2\n        }));\n      }\n      if (!val && w2.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        text = \"\";\n      }\n      const valIsNegative = w2.seriesData.series[i2][j] < 0;\n      const position = w2.config.plotOptions.bar.dataLabels.position;\n      if (w2.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 (w2.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: i2,\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.drawsStackedTotal(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}\nfunction isHistogramOverlay(w2) {\n  var _a, _b, _c, _d, _e, _f, _g;\n  if (((_b = (_a = w2 == null ? void 0 : w2.config) == null ? void 0 : _a.chart) == null ? void 0 : _b.requestedType) !== \"histogram\") return false;\n  if (((_d = (_c = w2.config.plotOptions) == null ? void 0 : _c.histogram) == null ? void 0 : _d.overlap) === false) return false;\n  return ((_g = (_f = (_e = w2.seriesData) == null ? void 0 : _e.series) == null ? void 0 : _f.length) != null ? _g : 0) > 1;\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 w2 = 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 (w2.axisFlags.isXNumeric) {\n        for (let j = 0; j < series[sl].length; j++) {\n          if (w2.seriesData.seriesX[sl][j] > w2.globals.minX && w2.seriesData.seriesX[sl][j] < w2.globals.maxX) {\n            this.barCtx.visibleItems++;\n          }\n        }\n      } else {\n        this.barCtx.visibleItems = w2.globals.dataPoints;\n      }\n    }\n    this.arrBorderRadius = this.createBorderRadiusArr(w2.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  }\n  /**\n   * @param {number} realIndex\n   */\n  initialPositions(realIndex) {\n    const w2 = this.w;\n    let x, y, yDivision, xDivision, barHeight, barWidth, zeroH, zeroW;\n    let dataPoints = w2.globals.dataPoints;\n    if (this.barCtx.isRangeBar) {\n      dataPoints = w2.labelData.labels.length;\n    }\n    let seriesLen = this.barCtx.seriesLen;\n    if (w2.config.plotOptions.bar.rangeBarGroupRows || isHistogramOverlay(w2)) {\n      seriesLen = 1;\n    }\n    if (this.barCtx.isHorizontal) {\n      yDivision = w2.layout.gridHeight / dataPoints;\n      barHeight = yDivision / seriesLen;\n      if (w2.axisFlags.isXNumeric) {\n        yDivision = w2.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 + w2.globals.padHorizontal + (this.barCtx.isReversed ? w2.layout.gridWidth : 0) - (this.barCtx.isReversed ? this.barCtx.baseLineInvertedY * 2 : 0);\n      if (this.barCtx.isFunnel) {\n        zeroW = w2.layout.gridWidth / 2;\n      }\n      y = (yDivision - barHeight * this.barCtx.seriesLen) / 2;\n    } else {\n      xDivision = w2.layout.gridWidth / this.barCtx.visibleItems;\n      if (w2.config.xaxis.convertedCatToNumeric) {\n        xDivision = w2.layout.gridWidth / w2.globals.dataPoints;\n      }\n      barWidth = xDivision / seriesLen * parseInt(this.barCtx.barOptions.columnWidth, 10) / 100;\n      if (w2.axisFlags.isXNumeric) {\n        const xRatio = this.barCtx.xRatio;\n        if (w2.globals.minXDiff && w2.globals.minXDiff !== 0.5 && w2.globals.minXDiff / xRatio > 0) {\n          xDivision = w2.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 = w2.layout.gridHeight - this.barCtx.baseLineY[this.barCtx.translationsIndex] - (this.barCtx.isReversed ? w2.layout.gridHeight : 0) + (this.barCtx.isReversed ? this.barCtx.baseLineY[this.barCtx.translationsIndex] * 2 : 0);\n      if (w2.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 = w2.globals.padHorizontal + Utils$1.noExponents(xDivision - barWidth * this.barCtx.seriesLen) / 2;\n      }\n    }\n    w2.globals.barHeight = barHeight;\n    w2.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 w2 = ctx.w;\n    w2.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 w2 = ctx.w;\n    w2.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, i2, j, realIndex) {\n    var _a, _b, _c, _d;\n    const w2 = this.w;\n    const fill = new Fill(this.barCtx.w);\n    let fillColor = null;\n    const seriesNumber = this.barCtx.barOptions.distributed ? j : i2;\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[i2][j] >= range.from && series[i2][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[i2][j],\n      fillConfig: (_a = w2.config.series[i2].data[j]) == null ? void 0 : _a.fill,\n      fillType: ((_c = (_b = w2.config.series[i2].data[j]) == null ? void 0 : _b.fill) == null ? void 0 : _c.type) ? (_d = w2.config.series[i2].data[j]) == null ? void 0 : _d.fill.type : Array.isArray(w2.config.fill.type) ? w2.config.fill.type[realIndex] : w2.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(i2, j, realIndex) {\n    let strokeWidth = 0;\n    const w2 = this.w;\n    if (typeof this.barCtx.series[i2][j] === \"undefined\" || this.barCtx.series[i2][j] === null || w2.config.chart.type === \"bar\" && !this.barCtx.series[i2][j]) {\n      this.barCtx.isNullValue = true;\n    } else {\n      this.barCtx.isNullValue = false;\n    }\n    if (w2.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 w2 = this.w;\n    const alwaysApplyRadius = !this.w.config.chart.stacked || w2.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 i2 = 0; i2 < numSeries; i2++) {\n        const value = series[i2][j];\n        if (value > 0) {\n          positiveIndices.push(i2);\n          nonZeroCount++;\n        } else if (value < 0) {\n          negativeIndices.push(i2);\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 i2 of positiveIndices) {\n            if (i2 === firstPositiveIndex) {\n              output[i2][j] = chartType === \"bar\" && numColumns === 1 ? \"top\" : \"bottom\";\n            } else if (i2 === lastPositiveIndex) {\n              output[i2][j] = \"top\";\n            } else {\n              output[i2][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 i2 of negativeIndices) {\n            if (i2 === highestNegativeIndex) {\n              output[i2][j] = \"bottom\";\n            } else if (i2 === lowestNegativeIndex) {\n              output[i2][j] = \"top\";\n            } else {\n              output[i2][j] = \"none\";\n            }\n          }\n        }\n      } else if (positiveIndices.length > 0 && negativeIndices.length > 0) {\n        const lastPositiveIndex = positiveIndices[positiveIndices.length - 1];\n        for (const i2 of positiveIndices) {\n          if (i2 === lastPositiveIndex) {\n            output[i2][j] = \"top\";\n          } else {\n            output[i2][j] = \"none\";\n          }\n        }\n        const highestNegativeIndex = Math.max(...negativeIndices);\n        for (const i2 of negativeIndices) {\n          if (i2 === highestNegativeIndex) {\n            output[i2][j] = \"bottom\";\n          } else {\n            output[i2][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: i2, x1, x2, y1, y2, elSeries }) {\n    const w2 = 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 === i2) {\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 : w2.layout.gridWidth,\n        typeof y2 !== \"undefined\" ? y2 : w2.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: i2,\n    j,\n    w: w2\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 = w2.config.series[realIndex].data[j]) == null ? void 0 : _a.columnWidthOffset) {\n      bXP = barXPosition - w2.config.series[realIndex].data[j].columnWidthOffset / 2;\n      bW = barWidth + w2.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[i2][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 = w2.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        w2.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom = null;\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 (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(x1, y1) + graphics.line(x1, y1) + sl + sl + sl + sl + sl + graphics.line(x1, y1) + closing;\n    }\n    if (w2.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[i2][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: i2,\n    j,\n    realIndex,\n    strokeWidth,\n    w: w2\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w2.layout.gridWidth / 2;\n    const halfWidthFor = (v2) => Math.abs(v2 / this.barCtx.invertedYRatio) / 2;\n    const topHalf = halfWidthFor(series[i2][j]);\n    const lastIdx = series[i2].length - 1;\n    const isLast = j === lastIdx;\n    const lastShape = w2.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[i2][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 = null;\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 (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\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 w2 = this.w;\n    const gridHeight = w2.layout.gridHeight;\n    const gridWidth = w2.layout.gridWidth;\n    const values = seriesData.map(\n      /** @param {any} v */\n      (v2) => Math.abs(Number(v2) || 0)\n    );\n    const total = values.reduce(\n      /** @param {number} a @param {number} b */\n      (a2, b2) => a2 + b2,\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: w2\n  }) {\n    var _a, _b;\n    const graphics = new Graphics(this.barCtx.w);\n    const center = w2.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 = null;\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 (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\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: i2,\n    j,\n    w: w2\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 = w2.config.series[realIndex].data[j]) == null ? void 0 : _a.barHeightOffset) {\n      bYP = barYPosition - w2.config.series[realIndex].data[j].barHeightOffset / 2;\n      bH = barHeight + w2.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[i2][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 = w2.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        w2.config.plotOptions.bar.borderRadius\n      );\n    }\n    let pathFrom = null;\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 (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.barCtx.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\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 (w2.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[i2][j]);\n    }\n    return {\n      pathTo,\n      pathFrom\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, i2, j, translationsIndex) {\n    const w2 = 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 (w2.seriesData.seriesGoals[i2] && w2.seriesData.seriesGoals[i2][j] && Array.isArray(w2.seriesData.seriesGoals[i2][j])) {\n      w2.seriesData.seriesGoals[i2][j].forEach((goal) => {\n        pushGoal(goal.value, goal);\n      });\n    }\n    if (this.barCtx.barOptions.isDumbbell && w2.rangeData.seriesRange.length) {\n      const colors = this.barCtx.barOptions.dumbbellColors ? this.barCtx.barOptions.dumbbellColors : w2.globals.colors;\n      const commonAttrs = {\n        strokeHeight: type === \"x\" ? 0 : w2.globals.markers.size[i2],\n        strokeWidth: type === \"x\" ? w2.globals.markers.size[i2] : 0,\n        strokeDashArray: 0,\n        strokeLineCap: \"round\",\n        strokeColor: Array.isArray(colors[i2]) ? colors[i2][0] : colors[i2]\n      };\n      pushGoal(w2.rangeData.seriesRangeStart[i2][j], commonAttrs);\n      pushGoal(w2.rangeData.seriesRangeEnd[i2][j], __spreadProps(__spreadValues({}, commonAttrs), {\n        strokeColor: Array.isArray(colors[i2]) ? colors[i2][1] : colors[i2]\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 hasGoals = Array.isArray(goalX) && goalX.length > 0 || Array.isArray(goalY) && goalY.length > 0;\n    if (!hasGoals) {\n      return null;\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 w2 = 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) + (w2.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: i2, j }) {\n    var _a;\n    const w2 = this.w;\n    let nonZeroColumns = 0;\n    let zeroEncounters = 0;\n    const seriesIndices = w2.config.plotOptions.bar.horizontal ? w2.seriesData.series.map((_, _i) => _i) : ((_a = w2.globals.columnSeries) == null ? void 0 : _a.i.map((_i) => _i)) || [];\n    seriesIndices.forEach((_si) => {\n      const val = w2.globals.seriesPercent[_si][j];\n      if (val) {\n        nonZeroColumns++;\n      }\n      if (_si < i2 && val === 0) {\n        zeroEncounters++;\n      }\n    });\n    return {\n      nonZeroColumns,\n      zeroEncounters\n    };\n  }\n  /**\n   * Index of the series group `seriesIndex` belongs to within\n   * `w.labelData.seriesGroups`, or -1 when the chart has no groups.\n   *\n   * Unlike `getGroupIndex` this is a pure lookup: it never appends to\n   * `columnGroupIndices`, so it is safe to call from positioning/label code\n   * that must not perturb the draw order bookkeeping.\n   * @param {number} seriesIndex\n   * @returns {number}\n   */\n  getSeriesGroupIndex(seriesIndex) {\n    const w2 = this.w;\n    return w2.labelData.seriesGroups.findIndex(\n      (group) => group.indexOf(w2.seriesData.seriesNames[seriesIndex]) > -1\n    );\n  }\n  /**\n   * @param {number} seriesIndex\n   */\n  getGroupIndex(seriesIndex) {\n    const w2 = this.w;\n    const groupIndex = w2.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(w2.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(w2, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w2;\n    this.barOptions = w2.config.plotOptions.bar;\n    this.isHorizontal = this.barOptions.horizontal;\n    this.strokeWidth = w2.config.stroke.width;\n    this.isNullValue = false;\n    this.isRangeBar = w2.rangeData.seriesRange.length && this.isHorizontal;\n    this.isVerticalGroupedRangeBar = !w2.globals.isBarHorizontal && w2.rangeData.seriesRange.length && w2.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._prevKeyed = null;\n    this._ltCache = null;\n    this._layoutShiftCache = null;\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.lastActiveBarSerieIndexByGroup = ser.getActiveConfigSeriesIndexByGroup([\"bar\", \"column\"]);\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((s2, i2) => {\n        return barSeriesIndices.indexOf(i2) === -1 ? i2 : -1;\n      }).filter((s2) => {\n        return s2 !== -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, _c;\n    const w2 = 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 (w2.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 i2 = 0, bc = 0; i2 < series.length; i2++, bc++) {\n      let x, y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i2]\n      ) : i2;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        rel: i2 + 1,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[realIndex]),\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i2].length > 0) {\n        this.visibleI = this.visibleI + 1;\n      }\n      if (this.yRatio.length > 1) {\n        this.yaxisIndex = w2.globals.seriesYAxisReverseMap[realIndex];\n        this.translationsIndex = realIndex;\n      }\n      const translationsIndex = this.translationsIndex;\n      this.isReversed = w2.config.yaxis[this.yaxisIndex] && w2.config.yaxis[this.yaxisIndex].reversed;\n      if (this.isPyramid) {\n        this.pyramidLayout = this.barHelpers.computePyramidLayout(series[i2]);\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      w2.globals.delayedElements.push({\n        el: elDataLabelsWrap.node,\n        // On a layout-changing update the labels must stay hidden through the\n        // reflow morph (the updateOptions flow otherwise reveals them at\n        // frame 0, where they float over sliding bars). When dataLabels.animate\n        // is on the labels instead RIDE the morph (see DataLabelTransition), so\n        // keep them visible: holding would hide the very motion we want to show.\n        holdUntilComplete: !((_a = w2.config.dataLabels.animate) == null ? void 0 : _a.enabled) && this.isLengthTransition(realIndex)\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      w2.globals.delayedElements.push({\n        el: elBarShadows.node\n      });\n      elBarShadows.node.classList.add(\"apexcharts-element-hidden\");\n      for (let j = 0; j < series[i2].length; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i2, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i: i2,\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[i2][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawColumnPaths(__spreadProps(__spreadValues({}, pathsParams), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i2][j] / this.yRatio[translationsIndex];\n        }\n        const pathFill = this.barHelpers.getPathFillColor(\n          series,\n          i2,\n          j,\n          realIndex\n        );\n        if (this.isFunnel && !this.isPyramid && this.barOptions.isFunnel3d && ((_b = w2.config.plotOptions.funnel) == null ? void 0 : _b.shape) !== \"trapezoid\" && this.pathArr.length && j > 0) {\n          const barShadow = this.barHelpers.drawBarShadow({\n            color: typeof pathFill.color === \"string\" && ((_c = pathFill.color) == null ? void 0 : _c.indexOf(\"url\")) === -1 ? pathFill.color : Utils$1.hexToRgba(w2.globals.colors[i2]),\n            prevPaths: this.pathArr[this.pathArr.length - 1],\n            currPaths: paths,\n            realIndex,\n            j\n          });\n          elBarShadows.add(barShadow);\n          if (w2.config.chart.dropShadow.enabled) {\n            const filters = new Filters(this.w);\n            filters.dropShadow(barShadow, w2.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: i2,\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      w2.globals.seriesXvalues[realIndex] = xArrj;\n      w2.globals.seriesYvalues[realIndex] = yArrj;\n      if (w2.globals.previousPaths.length > 0) {\n        const newKeys = [];\n        for (let j = 0; j < series[i2].length; j++) {\n          newKeys.push(datumKey(w2, realIndex, j));\n        }\n        renderBarExitGhosts({\n          w: w2,\n          elSeries,\n          record: this._prevRecord(realIndex),\n          newKeys,\n          isHorizontal: this.isHorizontal,\n          speed: w2.config.chart.animations.dynamicAnimation.speed\n        });\n      }\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: i2,\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 w2 = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const emit = seriesEmitter(this.ctx, graphics);\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(i3) {\n        const exp = w2.config.stroke.colors;\n        let c2;\n        if (Array.isArray(exp) && exp.length > 0) {\n          c2 = exp[i3];\n          if (!c2) c2 = \"\";\n          if (typeof c2 === \"function\") {\n            return c2({\n              value: w2.seriesData.series[i3][j],\n              dataPointIndex: j,\n              w: w2\n            });\n          }\n        }\n        return c2;\n      };\n      const checkAvailableColor = typeof w2.globals.stroke.colors[realIndex] === \"function\" ? fetchColor(realIndex) : w2.globals.stroke.colors[realIndex];\n      lineFill = this.barOptions.distributed ? w2.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: i2,\n        j,\n        series,\n        realIndex,\n        columnGroupIndex,\n        barHeight,\n        barWidth,\n        barXPosition,\n        barYPosition,\n        visibleSeries\n      })\n    );\n    if (!w2.globals.isBarHorizontal) {\n      if (dataLabelsObj.dataLabelsPos.dataLabelsX + Math.max(barWidth, w2.globals.barPadForNumericAxis) < 0 || dataLabelsObj.dataLabelsPos.dataLabelsX - Math.max(barWidth, w2.globals.barPadForNumericAxis) > w2.layout.gridWidth) {\n        skipDrawing = true;\n      }\n    }\n    if (\n      /** @type {Record<string,any>} */\n      w2.config.series[i2].data[j] && /** @type {Record<string,any>} */\n      w2.config.series[i2].data[j].strokeColor\n    ) {\n      lineFill = /** @type {Record<string,any>} */\n      w2.config.series[i2].data[j].strokeColor;\n    }\n    if (this.isNullValue) {\n      pathFill = \"none\";\n    }\n    const animCfg = w2.config.chart.animations;\n    const gradCfg = animCfg.animateGradually;\n    const staggerEnabled = gradCfg && gradCfg.enabled !== false && !(w2.globals.dataChanged && this.isLayoutShift(realIndex));\n    let delay = 0;\n    if (staggerEnabled) {\n      const totalBars = w2.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 (w2.config.chart.stacked) {\n        delayMs += i2 * 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() : w2.config.chart.animations.dynamicAnimation.speed;\n      const pieceClaimed = morphActive && this.ctx.morphTypeChange.claimsTargetMark(realIndex, j);\n      if (pieceClaimed) {\n        pathFrom = pathTo;\n        delay = 0;\n      }\n      const renderedPath = (\n        /** @type {any} */\n        emit.renderPaths({\n          i: i2,\n          j,\n          realIndex,\n          pathFrom,\n          pathTo,\n          stroke: lineFill,\n          strokeWidth,\n          strokeLineCap: w2.config.stroke.lineCap,\n          fill: pathFill,\n          animationDelay: delay,\n          initialSpeed: w2.config.chart.animations.speed,\n          dataChangeSpeed,\n          // `classes` is optional: boxPlot, violin and candlestick call\n          // renderSeries without it, and interpolating it unguarded stamped a\n          // literal \"undefined\" into every one of their marks' class lists.\n          className: `apexcharts-${type}-area${classes ? ` ${classes}` : \"\"}`,\n          chartType: type,\n          bindEventsOnPaths: false\n        })\n      );\n      renderedPath.attr(\"clip-path\", `url(#gridRectBarMask${w2.globals.cuid})`);\n      if (pieceClaimed) {\n        renderedPath.node.setAttribute(\"opacity\", \"0\");\n        renderedPath.node.setAttribute(\"data-piece-hidden\", \"1\");\n      }\n      const forecast = w2.config.forecastDataPoints;\n      if (forecast.count > 0) {\n        if (j >= w2.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: w2.seriesData.series[i2][j],\n        barHeight,\n        barWidth,\n        // Datum identity for the next update's keyed join (see\n        // LengthTransition): survivors match by key, not array position.\n        \"data:pathKey\": datumKey(w2, realIndex, j)\n      });\n      if (emit.kind === \"canvas\") {\n        if (!w2.globals.barCanvasCoords) w2.globals.barCanvasCoords = {};\n        if (!w2.globals.barCanvasCoords[realIndex]) {\n          w2.globals.barCanvasCoords[realIndex] = {};\n        }\n        w2.globals.barCanvasCoords[realIndex][j] = {\n          cx: dataLabelsObj.dataLabelsPos.bcx,\n          cy: dataLabelsObj.dataLabelsPos.bcy,\n          barWidth\n        };\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 w2 = this.w;\n    const i2 = indexes.i;\n    const j = indexes.j;\n    let barYPosition;\n    if (w2.axisFlags.isXNumeric) {\n      y = (w2.seriesData.seriesX[i2][j] - w2.globals.minX) / this.invertedXRatio - barHeight;\n      barYPosition = y + barHeight * this.visibleI;\n    } else {\n      if (w2.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i: i2, 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 && w2.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[i2][j],\n        _zeroW\n      ) - _zeroW) / 2;\n    }\n    x = this.barHelpers.getXForValue(\n      /** @type {any} */\n      this.series[i2][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: w2\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: i2,\n        j,\n        realIndex: indexes.realIndex,\n        strokeWidth,\n        w: w2\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: i2,\n        j,\n        w: w2\n      });\n    }\n    if (useTrapezoid || usePyramid) {\n      zeroW = paths.x1;\n      x = paths.x;\n    }\n    if (!w2.axisFlags.isXNumeric && !usePyramid) {\n      y = y + yDivision;\n    }\n    if (usePyramid) {\n      y = barYPosition;\n    }\n    this.barHelpers.barBackground({\n      j,\n      i: i2,\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        indexes.realIndex,\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 w2 = this.w;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    const i2 = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    let barXPosition;\n    if (w2.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 (w2.config.plotOptions.bar.hideZeroBarsWhenGrouped) {\n        const { nonZeroColumns, zeroEncounters } = this.barHelpers.getZeroValueEncounters({ i: i2, 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[i2][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: i2,\n        j,\n        w: w2\n      })\n    );\n    if (!w2.axisFlags.isXNumeric) {\n      x = x + xDivision;\n    }\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i: i2,\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        realIndex,\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 w2 = this.w;\n    let sxI = realIndex;\n    if (!w2.seriesData.seriesX[realIndex].length) {\n      sxI = w2.globals.maxValsInArrayIndex;\n    }\n    if (Utils$1.isNumber(w2.seriesData.seriesX[sxI][j])) {\n      x = AxisMapping.dataXToPx(w2, w2.seriesData.seriesX[sxI][j]) - barWidth * this.seriesLen / 2;\n    }\n    return {\n      barXPosition: x + (isHistogramOverlay(w2) ? 0 : barWidth * this.visibleI),\n      x\n    };\n  }\n  /**\n   * The captured previous-render record for a series (last match wins, same\n   * as the historical scan order).\n   *\n   * @param {number} realIndex\n   * @returns {any | null}\n   */\n  _prevRecord(realIndex) {\n    const w2 = this.w;\n    let record = null;\n    for (let pp = 0; pp < w2.globals.previousPaths.length; pp++) {\n      const gpp = w2.globals.previousPaths[pp];\n      if (gpp.paths && gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        record = gpp;\n      }\n    }\n    return record;\n  }\n  /**\n   * Previous paths of a series re-keyed by datum key (stamped as\n   * `data:pathKey` on each bar path and captured by Series.getPreviousPaths).\n   * Returns null when the previous render carries no keys (so the caller\n   * falls back to positional matching).\n   *\n   * @param {number} realIndex\n   * @returns {Map<string, {d: string}> | null}\n   */\n  _prevKeyedPaths(realIndex) {\n    if (!this._prevKeyed) this._prevKeyed = {};\n    if (this._prevKeyed[realIndex] !== void 0) {\n      return this._prevKeyed[realIndex];\n    }\n    const record = this._prevRecord(realIndex);\n    let map = null;\n    if (record && record.paths.every((p2) => p2.key != null)) {\n      const keyed = /* @__PURE__ */ new Map();\n      record.paths.forEach((p2) => {\n        keyed.set(p2.key, p2);\n      });\n      map = keyed;\n    }\n    this._prevKeyed[realIndex] = map;\n    return map;\n  }\n  /**\n   * Whether this series' update changes its datum layout (points entered,\n   * exited, or changed identity). Layout-changing updates run all survivors\n   * on one shared clock (no per-bar stagger) so the reflow reads as a single\n   * coordinated motion; pure value updates keep the stagger.\n   *\n   * @param {number} realIndex\n   * @returns {boolean}\n   */\n  isLengthTransition(realIndex) {\n    var _a, _b;\n    if (!this._ltCache) this._ltCache = {};\n    if (this._ltCache[realIndex] !== void 0) return this._ltCache[realIndex];\n    const w2 = this.w;\n    let result = false;\n    if (lengthTransitionEnabled(w2) && w2.globals.previousPaths.length > 0) {\n      const record = this._prevRecord(realIndex);\n      const dataLen = (_b = (_a = w2.seriesData.series[realIndex]) == null ? void 0 : _a.length) != null ? _b : 0;\n      if (!record) {\n        result = dataLen > 0;\n      } else if (record.paths.length !== dataLen) {\n        result = true;\n      } else {\n        const keyed = this._prevKeyedPaths(realIndex);\n        if (keyed) {\n          for (let j = 0; j < dataLen; j++) {\n            if (!keyed.has(datumKey(w2, realIndex, j))) {\n              result = true;\n              break;\n            }\n          }\n        }\n      }\n    }\n    this._ltCache[realIndex] = result;\n    return result;\n  }\n  /**\n   * Whether this update moves survivors to new slots: a length change\n   * (enter/exit, via isLengthTransition) OR a pure reorder (a \"bar chart race\"\n   * swap, same datum set in a new order). Used to drop the per-bar stagger so\n   * all bars slide on one shared clock, staying locked to the axis/data labels.\n   * Broader than isLengthTransition, which is deliberately enter/exit-only\n   * (exit ghosts / baseline enters must not fire on a plain reorder).\n   * @param {number} realIndex\n   */\n  isLayoutShift(realIndex) {\n    if (this.isLengthTransition(realIndex)) return true;\n    if (!this._layoutShiftCache) this._layoutShiftCache = {};\n    if (this._layoutShiftCache[realIndex] !== void 0) {\n      return this._layoutShiftCache[realIndex];\n    }\n    const sj = seriesJoin(this.w, realIndex, true, true);\n    const result = !!(sj && sj.join.changed);\n    this._layoutShiftCache[realIndex] = result;\n    return result;\n  }\n  /**\n   * Resolve `pathFrom` for a bar on data update, joining old and new datums\n   * by KEY (category label / x value) so survivors keep their identity across\n   * inserts, prepends, and removals. Three outcomes:\n   *\n   *  - survivor with stable shape → the previous `d` (smooth reflow morph);\n   *  - survivor whose command count changed (corner state flipped, e.g. bar\n   *    became new top-of-stack) → `pathTo` (pathFrom === pathTo, a snap);\n   *  - genuinely new datum (key absent from the previous render, or the whole\n   *    series is new) → null, telling the path builder to use its\n   *    grow-from-baseline enter path.\n   *\n   * Falls back to positional (index j) matching when the previous render\n   * carries no datum keys.\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 | null}\n   **/\n  getPreviousPath(realIndex, j, pathTo) {\n    const w2 = this.w;\n    const record = this._prevRecord(realIndex);\n    if (!record) {\n      return lengthTransitionEnabled(w2) ? null : pathTo;\n    }\n    let oldD = null;\n    let isNewDatum = false;\n    const keyed = this._prevKeyedPaths(realIndex);\n    if (keyed) {\n      const prev = keyed.get(datumKey(w2, realIndex, j));\n      if (prev) {\n        oldD = prev.d;\n      } else {\n        isNewDatum = true;\n      }\n    } else if (typeof record.paths[j] !== \"undefined\") {\n      oldD = record.paths[j].d;\n    } else {\n      isNewDatum = true;\n    }\n    if (oldD && Bar.pathCommandCount(oldD) === Bar.pathCommandCount(pathTo)) {\n      return oldD;\n    }\n    if (isNewDatum && lengthTransitionEnabled(w2)) {\n      return null;\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 w2 = 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 (w2.config.chart.stackType === \"100%\") {\n      series = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex.map(\n          (_) => w2.globals.seriesPercent[_]\n        )\n      ) : w2.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 i2 = 0, bc = 0; i2 < series.length; i2++, bc++) {\n      const realIndex = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i2]\n      ) : i2;\n      const { groupIndex, columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      this.groupCtx = /** @type {any} */\n      this[\n        /** @type {any} */\n        w2.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        w2.globals.seriesYAxisReverseMap[realIndex][0];\n        translationsIndex = realIndex;\n      }\n      this.isReversed = w2.config.yaxis[this.yaxisIndex] && w2.config.yaxis[this.yaxisIndex].reversed;\n      let elSeries = this.graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[realIndex]),\n        rel: i2 + 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      w2.globals.barHeight = barHeight;\n      w2.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 < w2.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i2, j, realIndex);\n        const commonPathOpts = {\n          indexes: { i: i2, j, realIndex, translationsIndex, bc },\n          strokeWidth,\n          x,\n          y,\n          elSeries,\n          columnGroupIndex,\n          seriesGroup: w2.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[i2][j] / this.invertedYRatio;\n        } else {\n          paths = this.drawStackedColumnPaths(__spreadProps(__spreadValues({}, commonPathOpts), {\n            xDivision,\n            barWidth,\n            zeroH\n          }));\n          barHeight = this.series[i2][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          i2,\n          j,\n          realIndex\n        );\n        let classes = \"\";\n        const flipClass = w2.globals.isBarHorizontal ? \"apexcharts-flip-x\" : \"apexcharts-flip-y\";\n        if (this.barHelpers.arrBorderRadius[realIndex][j] === \"bottom\" && w2.seriesData.series[realIndex][j] > 0 || this.barHelpers.arrBorderRadius[realIndex][j] === \"top\" && w2.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: i2,\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      w2.globals.seriesXvalues[realIndex] = xArrValues;\n      w2.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 w2 = this.w;\n    let barHeight, barWidth;\n    if (this.isHorizontal) {\n      yDivision = w2.layout.gridHeight / w2.globals.dataPoints;\n      const userBarHeight = w2.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 = w2.globals.padHorizontal + (this.isReversed ? w2.layout.gridWidth - this.baseLineInvertedY : this.baseLineInvertedY);\n      y = (yDivision - barHeight) / 2;\n    } else {\n      xDivision = w2.layout.gridWidth / w2.globals.dataPoints;\n      barWidth = xDivision;\n      const userColumnWidth = w2.config.plotOptions.bar.columnWidth;\n      if (w2.axisFlags.isXNumeric && w2.globals.dataPoints > 1) {\n        xDivision = w2.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 = w2.layout.gridHeight - this.baseLineY[translationsIndex];\n      }\n      x = w2.globals.padHorizontal + (xDivision - barWidth) / 2;\n    }\n    const subDivisions = w2.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 w2 = this.w;\n    const barYPosition = y + columnGroupIndex * barHeight;\n    let barXPosition;\n    const i2 = 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 = i2;\n    if (\n      /** @type {Record<string,any>} */\n      w2.config.series[realIndex].name\n    ) {\n      gsi = seriesGroup.indexOf(\n        /** @type {Record<string,any>} */\n        w2.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[i2]) == 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[i2]) == 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[i2]) == null ? void 0 : _c[j]) === null\n    ) {\n      x = barXPosition;\n    } else {\n      x = barXPosition + /** @type {any} */\n      ((_d = this.series[i2]) == null ? void 0 : _d[j]) / this.invertedYRatio - (this.isReversed ? (\n        /** @type {any} */\n        ((_e = this.series[i2]) == 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: i2,\n      j,\n      w: w2\n    });\n    this.barHelpers.barBackground({\n      j,\n      i: i2,\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        realIndex,\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 w2 = this.w;\n    const i2 = indexes.i;\n    const j = indexes.j;\n    const bc = indexes.bc;\n    const realIndex = indexes.realIndex;\n    const translationsIndex = indexes.translationsIndex;\n    if (w2.axisFlags.isXNumeric) {\n      let seriesVal = w2.seriesData.seriesX[realIndex][j];\n      if (!seriesVal) seriesVal = 0;\n      x = (seriesVal - w2.globals.minX) / this.xRatio - barWidth / 2 * w2.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 = i2;\n    if (seriesGroup) {\n      gsi = seriesGroup.indexOf(w2.seriesData.seriesNames[realIndex]);\n    }\n    if (gsi > 0 && !w2.axisFlags.isXNumeric || gsi > 0 && w2.axisFlags.isXNumeric && w2.seriesData.seriesX[realIndex - 1][j] === w2.seriesData.seriesX[realIndex][j]) {\n      let bYP;\n      let prevYValue;\n      const p2 = 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 < p2; 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 < p2; ii++) {\n        if (((_b = this.groupCtx.prevYVal[gsi - ii]) == null ? void 0 : _b[j]) < 0) {\n          bYP = /** @type {any} */\n          ((_c = this.series[i2]) == 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[i2]) == null ? void 0 : _e[j]) >= 0 ? prevYValue : prevYValue + prevBarH - (this.isReversed ? prevBarH : 0) * 2;\n          break;\n        }\n      }\n      if (typeof bYP === \"undefined\") bYP = w2.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[i2]) == null ? void 0 : _g[j]\n    ) {\n      y = barYPosition - /** @type {any} */\n      ((_h = this.series[i2]) == null ? void 0 : _h[j]) / this.yRatio[translationsIndex] + (this.isReversed ? (\n        /** @type {any} */\n        ((_i = this.series[i2]) == 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: i2,\n      j,\n      w: w2\n    });\n    this.barHelpers.barBackground({\n      bc,\n      j,\n      i: i2,\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        realIndex,\n        j,\n        0\n      ),\n      barXPosition,\n      x: w2.axisFlags.isXNumeric ? x : x + xDivision,\n      y\n    };\n  }\n}\nfunction buildJitterGroups({\n  w: w2,\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 r2 = 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 : w2.globals.minY;\n  const sMax = useScale && scale.max != null ? scale.max : w2.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 v2 = points[k];\n    const a2 = alongFn(v2);\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(v2)\n      );\n      if (off > cap) off = cap;\n      if (off < -cap) off = -cap;\n    }\n    const px = isHorizontal ? a2 : center + off;\n    const py = isHorizontal ? center + off : a2;\n    const sub = isSquare ? squareSubPath(px, py, r2) : circleSubPath(px, py, r2);\n    if (useScale) {\n      let t2 = (v2 - sMin) / span;\n      if (t2 < 0) t2 = 0;\n      if (t2 > 1) t2 = 1;\n      buckets[Math.round(t2 * (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 b2 = 0; b2 < steps; b2++) {\n    if (!buckets[b2]) continue;\n    groups.push({\n      fill: rampColorAt(scale.colors, b2 / (steps - 1)),\n      d: buckets[b2]\n    });\n  }\n  return groups;\n}\nfunction renderJitter({\n  graphics,\n  w: w2,\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 = w2.config.chart.animations.enabled && !w2.globals.resized && !w2.globals.dataChanged;\n  const elPointsWrap = graphics.group({\n    class: willAnimateIn ? `${wrapClass} apexcharts-element-hidden` : wrapClass\n  });\n  if (willAnimateIn) {\n    w2.globals.delayedElements.push({ el: elPointsWrap.node });\n  }\n  pointsByCat.forEach(({ groups, j }) => {\n    const catColor = distributed ? w2.globals.colors[j] : w2.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((g2) => {\n      const elPoints = graphics.drawPath({\n        d: g2.d,\n        fill: g2.fill != null ? g2.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${w2.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, t2) {\n  if (!colors.length) return \"#000\";\n  if (colors.length === 1) return colors[0];\n  const x = Math.max(0, Math.min(1, t2)) * (colors.length - 1);\n  const i2 = Math.floor(x);\n  const frac = x - i2;\n  const c0 = Utils$1.parseHex(colors[i2]) || [0, 0, 0];\n  const c1 = Utils$1.parseHex(colors[Math.min(i2 + 1, colors.length - 1)]) || c0;\n  const mix = (a2, b2) => Math.round(a2 + (b2 - a2) * frac);\n  return `rgb(${mix(c0[0], c1[0])},${mix(c0[1], c1[1])},${mix(c0[2], c1[2])})`;\n}\nfunction hash01(n2) {\n  let h2 = (n2 ^ 2654435769) >>> 0;\n  h2 = Math.imul(h2 ^ h2 >>> 16, 73244475);\n  h2 = Math.imul(h2 ^ h2 >>> 16, 73244475);\n  return ((h2 ^ h2 >>> 16) >>> 0) / 4294967296;\n}\nfunction circleSubPath(px, py, r2) {\n  return `M ${px - r2} ${py} a ${r2} ${r2} 0 1 0 ${2 * r2} 0 a ${r2} ${r2} 0 1 0 ${-2 * r2} 0 `;\n}\nfunction squareSubPath(px, py, r2) {\n  return `M ${px - r2} ${py - r2} h ${2 * r2} v ${2 * r2} h ${-2 * r2} 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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w2.globals.comboCharts ? ctype : w2.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 = w2.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 i2 = 0; i2 < series.length; i2++) {\n      this.isBoxPlot = w2.config.chart.type === \"boxPlot\" || /** @type {Record<string,any>} */\n      w2.config.series[i2].type === \"boxPlot\";\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i2]\n      ) : i2;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[realIndex]),\n        rel: i2 + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i2].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        w2.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 = w2.layout.gridWidth;\n      const cullBuffer = barWidth != null ? barWidth : 0;\n      for (let j = 0; j < w2.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i2, j, realIndex);\n        let paths = (\n          /** @type {any} */\n          null\n        );\n        const pathsParams = {\n          indexes: {\n            i: i2,\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] : w2.globals.stroke.colors[i2];\n            const pathFill = fill.fillPath({\n              seriesNumber: realIndex,\n              dataPointIndex: j,\n              color: paths.color[pi],\n              value: series[i2][j]\n            });\n            this.renderSeries({\n              realIndex,\n              pathFill,\n              lineFill,\n              j,\n              i: i2,\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: w2.config.chart.type\n            });\n          }\n        );\n        if (boxPointsOpts && boxPointsOpts.show !== false) {\n          const pts = (_a = w2.candleData.seriesBoxPoints[realIndex]) == null ? void 0 : _a[j];\n          if (pts && pts.length) {\n            const logVal = (v2) => (\n              /** @type {any} */\n              this.coreUtils.getLogValAtSeriesIndex(\n                v2,\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 = (v2) => z + logVal(v2) / 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 = (v2) => z - logVal(v2) / yRatio;\n            }\n            const groups = buildJitterGroups({\n              w: w2,\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: w2,\n          elSeries,\n          pointsByCat,\n          options: boxPointsOpts,\n          distributed: w2.config.plotOptions.bar.distributed,\n          realIndex,\n          wrapClass: \"apexcharts-boxPlot-points-wrap\",\n          pointClass: \"apexcharts-boxPlot-points\"\n        });\n      }\n      w2.globals.seriesXvalues[realIndex] = xArrj;\n      w2.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, _c, _d;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const i2 = indexes.i;\n    const j = indexes.j;\n    const { colors: candleColors } = w2.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 m2 = ohlc.m;\n    if (w2.axisFlags.isXNumeric) {\n      x = (w2.seriesData.seriesX[realIndex][j] - w2.globals.minX) / this.xRatio - barWidth / 2;\n    }\n    const barXPosition = x + barWidth * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i2]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i2]) == 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      m2 = 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: w2.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, m2) + graphics.line(barXPosition, m2) + graphics.line(barXPosition, y1 + strokeWidth / 2),\n        graphics.move(barXPosition, m2) + graphics.line(barXPosition + barWidth, m2) + 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, m2) + \"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 = null;\n    const morphFrom = (_d = (_c = this.ctx) == null ? void 0 : _c.morphTypeChange) == null ? void 0 : _d.getInitialPathFor(realIndex, j);\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(barXPosition + barWidth / 2, y1) + graphics.move(barXPosition, y1);\n    }\n    if (!w2.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        realIndex,\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, _c, _d;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const i2 = indexes.i;\n    const j = indexes.j;\n    const realIndex = indexes.realIndex;\n    const { colors: candleColors } = w2.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 m2 = ohlc.m;\n    if (w2.axisFlags.isXNumeric) {\n      y = (w2.seriesData.seriesX[realIndex][j] - w2.globals.minX) / this.invertedXRatio - barHeight / 2;\n    }\n    const barYPosition = y + barHeight * this.visibleI;\n    if (typeof /** @type {any} */\n    ((_a = this.series[i2]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i2]) == 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      m2 = 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(m2, barYPosition + barHeight) + graphics.line(m2, barYPosition) + graphics.line(x1 + strokeWidth / 2, barYPosition),\n      graphics.move(m2, barYPosition) + graphics.line(m2, 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(m2, barYPosition) + \"z\"\n    ];\n    let pathFrom = null;\n    const morphFrom = (_d = (_c = this.ctx) == null ? void 0 : _c.morphTypeChange) == null ? void 0 : _d.getInitialPathFor(realIndex, j);\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo[0]);\n    }\n    if (pathFrom == null) {\n      pathFrom = graphics.move(x1, barYPosition + barHeight / 2) + graphics.move(x1, barYPosition);\n    }\n    if (!w2.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        realIndex,\n        j,\n        0\n      ),\n      barYPosition,\n      color\n    };\n  }\n  /**\n   * @param {number} i\n   * @param {number} j\n   */\n  getOHLCValue(i2, j) {\n    const w2 = this.w;\n    const coreUtils = this.coreUtils;\n    const getCandleVal = (arr) => arr[i2] && arr[i2][j] != null ? (\n      /** @type {any} */\n      coreUtils.getLogValAtSeriesIndex(arr[i2][j], i2)\n    ) : 0;\n    const h2 = getCandleVal(w2.candleData.seriesCandleH);\n    const o2 = getCandleVal(w2.candleData.seriesCandleO);\n    const m2 = getCandleVal(w2.candleData.seriesCandleM);\n    const c2 = getCandleVal(w2.candleData.seriesCandleC);\n    const l2 = getCandleVal(w2.candleData.seriesCandleL);\n    return {\n      o: this.isBoxPlot ? h2 : o2,\n      h: this.isBoxPlot ? o2 : h2,\n      m: m2,\n      l: this.isBoxPlot ? c2 : l2,\n      c: this.isBoxPlot ? l2 : c2\n    };\n  }\n}\nconst tangents = (points) => {\n  const m2 = finiteDifferences(points);\n  const n2 = points.length - 1;\n  const ε = 1e-6;\n  const tgts = [];\n  let a2, b2, d, s2;\n  for (let i2 = 0; i2 < n2; i2++) {\n    d = slope(points[i2], points[i2 + 1]);\n    if (Math.abs(d) < ε) {\n      m2[i2] = m2[i2 + 1] = 0;\n    } else {\n      a2 = m2[i2] / d;\n      b2 = m2[i2 + 1] / d;\n      s2 = a2 * a2 + b2 * b2;\n      if (s2 > 9) {\n        s2 = d * 3 / Math.sqrt(s2);\n        m2[i2] = s2 * a2;\n        m2[i2 + 1] = s2 * b2;\n      }\n    }\n  }\n  for (let i2 = 0; i2 <= n2; i2++) {\n    s2 = (points[Math.min(n2, i2 + 1)][0] - points[Math.max(0, i2 - 1)][0]) / (6 * (1 + m2[i2] * m2[i2]));\n    tgts.push([s2 || 0, m2[i2] * s2 || 0]);\n  }\n  return tgts;\n};\nconst svgPath = (points) => {\n  let p2 = \"\";\n  for (let i2 = 0; i2 < points.length; i2++) {\n    const point = points[i2];\n    const n2 = point.length;\n    if (n2 > 4) {\n      p2 += `C${point[0]}, ${point[1]}`;\n      p2 += `, ${point[2]}, ${point[3]}`;\n      p2 += `, ${point[4]}, ${point[5]}`;\n    } else if (n2 > 2) {\n      p2 += `S${point[0]}, ${point[1]}`;\n      p2 += `, ${point[2]}, ${point[3]}`;\n    }\n  }\n  return p2;\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 p2 = points[1];\n    const p0 = points[0];\n    const pts = [];\n    const t2 = tgts[1];\n    const t0 = tgts[0];\n    pts.push(p0, [\n      p0[0] + t0[0],\n      p0[1] + t0[1],\n      p2[0] - t2[0],\n      p2[1] - t2[1],\n      p2[0],\n      p2[1]\n    ]);\n    for (let i2 = 2, n2 = tgts.length; i2 < n2; i2++) {\n      const p3 = points[i2];\n      const t3 = tgts[i2];\n      pts.push([p3[0] - t3[0], p3[1] - t3[1], p3[0], p3[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 n2 = pts[0].length;\n        pts[1] = [\n          pts[0][n2 - 2] * 2 - pts[0][n2 - 4],\n          pts[0][n2 - 1] * 2 - pts[0][n2 - 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 m2 = [];\n  let p0 = points[0];\n  let p1 = points[1];\n  let d = m2[0] = slope(p0, p1);\n  let i2 = 1;\n  for (let n2 = points.length - 1; i2 < n2; i2++) {\n    p0 = p1;\n    p1 = points[i2 + 1];\n    m2[i2] = (d + (d = slope(p0, p1))) * 0.5;\n  }\n  m2[i2] = d;\n  return m2;\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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const fill = new Fill(this.w);\n    this.violinOptions = w2.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 = w2.config.plotOptions.bar.distributed;\n    this.isHorizontal = w2.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 i2 = 0; i2 < series.length; i2++) {\n      let x;\n      let y;\n      const yArrj = [];\n      const xArrj = [];\n      const realIndex = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i2]\n      ) : i2;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: \"apexcharts-series\",\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[realIndex]),\n        rel: i2 + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i2].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        w2.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 = w2.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 < w2.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i2, j, realIndex);\n        const paths = this.isHorizontal ? this.drawHorizontalViolin({\n          indexes: { i: i2, j, realIndex, translationsIndex },\n          y,\n          yDivision,\n          barHeight,\n          zeroW\n        }) : this.drawVerticalViolin({\n          indexes: { i: i2, 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 ? w2.globals.colors[j] : void 0,\n          value: series[i2][j]\n        });\n        this.renderSeries({\n          realIndex,\n          pathFill,\n          lineFill: w2.globals.stroke.colors[realIndex],\n          j,\n          i: i2,\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: w2,\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      w2.globals.seriesXvalues[realIndex] = xArrj;\n      w2.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, _b, _c;\n    const w2 = this.w;\n    const { realIndex, j, translationsIndex } = indexes;\n    const yRatio = this.yRatio[translationsIndex];\n    if (w2.axisFlags.isXNumeric) {\n      x = (w2.seriesData.seriesX[realIndex][j] - w2.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 = (v2) => zeroH - this.logVal(v2, 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 = null;\n    const morphFrom = (_b = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(realIndex, j);\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\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 (!w2.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((_c = this.series[indexes.i][j]) != null ? _c : 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, _b, _c;\n    const w2 = this.w;\n    const { realIndex, j } = indexes;\n    const yRatio = this.invertedYRatio;\n    if (w2.axisFlags.isXNumeric) {\n      y = (w2.seriesData.seriesX[realIndex][j] - w2.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 = (v2) => zeroW + this.logVal(v2, 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 = null;\n    const morphFrom = (_b = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange) == null ? void 0 : _b.getInitialPathFor(realIndex, j);\n    if (morphFrom) {\n      pathFrom = morphFrom;\n    } else if (w2.globals.previousPaths.length > 0) {\n      pathFrom = this.getPreviousPath(realIndex, j, pathTo);\n    }\n    if (pathFrom == null) {\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 (!w2.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((_c = this.series[indexes.i][j]) != null ? _c : 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 w2 = this.w;\n    const d = (_a = w2.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      (a2, b2) => d.values[a2] - d.values[b2]\n    );\n    const nodes = [];\n    let prevV = null;\n    for (const k of order) {\n      const v2 = d.values[k];\n      if (prevV !== null && v2 === prevV) continue;\n      nodes.push({ v: v2, w: d.weights[k] });\n      prevV = v2;\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 a2 = alongFn(0);\n      return vertical ? graphics.move(center, a2) + graphics.line(center, a2) : graphics.move(a2, center) + graphics.line(a2, 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 a2 = alongFn(nodes[k].v);\n      const wp = wpxOf(nodes[k].w);\n      if (vertical) {\n        rightPts.push([center + wp, a2]);\n        leftPts.push([center - wp, a2]);\n      } else {\n        rightPts.push([a2, center + wp]);\n        leftPts.push([a2, 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: (v2) => this.halfWidthAtValue(v2, 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 a2 = nodes[k - 1];\n        const b2 = nodes[k];\n        const t2 = b2.v === a2.v ? 0 : (value - a2.v) / (b2.v - a2.v);\n        return toPx(a2.w + (b2.w - a2.w) * t2);\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(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\n  }\n  checkColorRange() {\n    const w2 = this.w;\n    let negRange = false;\n    const chartOpts = w2.config.plotOptions[w2.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, i2, j, negRange) {\n    const w2 = this.w;\n    let colorShadePercent = 1;\n    const shadeIntensity = w2.config.plotOptions[chartType].shadeIntensity;\n    const colorProps = this.determineColor(chartType, i2, j);\n    if (\n      /** @type {any} */\n      w2.globals.hasNegs || negRange\n    ) {\n      if (w2.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 (w2.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          w2.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          w2.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, i2, j) {\n    const w2 = this.w;\n    const val = w2.seriesData.series[i2][j];\n    const chartOpts = w2.config.plotOptions[chartType];\n    let seriesNumber = chartOpts.colorScale.inverse ? j : i2;\n    if (chartOpts.distributed && w2.config.chart.type === \"treemap\") {\n      seriesNumber = j;\n    }\n    let color = w2.globals.colors[seriesNumber];\n    let foreColor = null;\n    let min;\n    let max;\n    if (!chartOpts.distributed && chartType === \"heatmap\") {\n      min = w2.globals.minY;\n      max = w2.globals.maxY;\n    } else {\n      const row = w2.seriesData.series[i2];\n      min = row.length ? row[0] : 0;\n      max = min;\n      for (let k = 1; k < row.length; k++) {\n        if (row[k] < min) min = row[k];\n        if (row[k] > max) max = row[k];\n      }\n    }\n    if (typeof chartOpts.colorScale.min !== \"undefined\") {\n      min = chartOpts.colorScale.min < w2.globals.minY ? chartOpts.colorScale.min : w2.globals.minY;\n      max = chartOpts.colorScale.max > w2.globals.maxY ? chartOpts.colorScale.max : w2.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: i2, j, colorProps, fontSize }) {\n    const w2 = this.w;\n    const dataLabelsConfig = w2.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 = resolveDataLabelOffset(dataLabelsConfig.offsetX, w2, i2, j);\n      const offY = resolveDataLabelOffset(dataLabelsConfig.offsetY, w2, i2, j);\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: i2,\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(w2, ctx, xyRatios) {\n    this.ctx = ctx;\n    this.w = w2;\n    this.xRatio = xyRatios.xRatio;\n    this.yRatio = xyRatios.yRatio;\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.helpers = new TreemapHelpers(w2, 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    var _a, _b;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const emit = seriesEmitter(this.ctx, graphics);\n    const useCanvas = emit !== graphics && typeof emit.drawRectCell === \"function\";\n    const ret = graphics.group({\n      class: \"apexcharts-heatmap\"\n    });\n    ret.attr(\"clip-path\", `url(#gridRectMask${w2.globals.cuid})`);\n    const xDivision = w2.layout.gridWidth / w2.globals.dataPoints;\n    const yDivision = w2.layout.gridHeight / w2.seriesData.series.length;\n    const isContinuousX = (w2.config.xaxis.type === \"numeric\" || w2.config.xaxis.type === \"datetime\") && w2.axisFlags.isXNumeric && this.xRatio > 0;\n    let binPx = xDivision;\n    if (isContinuousX) {\n      const diff = w2.globals.minXDiff;\n      binPx = Number.isFinite(diff) && diff > 0 ? diff / this.xRatio : xDivision;\n    }\n    const cellFillOpacity = Array.isArray(w2.config.fill.opacity) ? (_a = w2.config.fill.opacity[0]) != null ? _a : 1 : (_b = w2.config.fill.opacity) != null ? _b : 1;\n    let y1 = 0;\n    let rev = false;\n    this.negRange = this.helpers.checkColorRange();\n    const heatSeries = series.slice();\n    if (w2.config.yaxis[0].reversed) {\n      rev = true;\n      heatSeries.reverse();\n    }\n    for (let i2 = rev ? 0 : heatSeries.length - 1; rev ? i2 < heatSeries.length : i2 >= 0; rev ? i2++ : i2--) {\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-heatmap-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[i2]),\n        rel: i2 + 1,\n        \"data:realIndex\": i2\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, i2);\n      if (!useCanvas) {\n        graphics.setupEventDelegation(elSeries, \".apexcharts-heatmap-rect\");\n      }\n      if (w2.config.chart.dropShadow.enabled) {\n        const shadow = w2.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(elSeries, shadow, i2);\n      }\n      let x1 = 0;\n      const shadeIntensity = w2.config.plotOptions.heatmap.shadeIntensity;\n      let j = 0;\n      for (let dIndex = 0; dIndex < w2.globals.dataPoints; dIndex++) {\n        if (!isContinuousX && w2.seriesData.seriesX.length && !w2.globals.allSeriesHasEqualX) {\n          if (w2.globals.minX + w2.globals.minXDiff * dIndex < w2.seriesData.seriesX[i2][j]) {\n            x1 = x1 + xDivision;\n            continue;\n          }\n        }\n        if (j >= heatSeries[i2].length) break;\n        const cellW = isContinuousX ? binPx : xDivision;\n        if (isContinuousX) {\n          const xVal = w2.seriesData.seriesX[i2] ? w2.seriesData.seriesX[i2][j] : null;\n          if (xVal == null || xVal !== xVal) {\n            j++;\n            continue;\n          }\n          x1 = (xVal - w2.globals.minX) / this.xRatio - binPx / 2;\n        }\n        const heatColor = this.helpers.getShadeColor(\n          w2.config.chart.type,\n          i2,\n          j,\n          this.negRange\n        );\n        let color = heatColor.color;\n        const heatColorProps = heatColor.colorProps;\n        if (w2.config.fill.type === \"image\") {\n          const fill = new Fill(this.w);\n          color = fill.fillPath({\n            seriesNumber: i2,\n            dataPointIndex: j,\n            opacity: (\n              /** @type {any} */\n              w2.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: w2.config.fill.image.width ? w2.config.fill.image.width : cellW,\n            height: w2.config.fill.image.height ? w2.config.fill.image.height : yDivision\n          });\n        }\n        const radius = this.rectRadius;\n        const stroke = w2.config.plotOptions.heatmap.useFillColorAsStroke ? color : w2.globals.stroke.colors[0];\n        if (useCanvas) {\n          emit.drawRectCell(x1, y1, cellW, yDivision, {\n            fill: color,\n            fillOpacity: cellFillOpacity,\n            stroke,\n            strokeWidth: this.strokeWidth,\n            radius,\n            seriesIndex: i2,\n            dataPointIndex: j\n          });\n        } else {\n          const rect = graphics.drawRect(x1, y1, cellW, 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: i2,\n            index: i2,\n            j,\n            val: series[i2][j],\n            \"stroke-width\": this.strokeWidth,\n            stroke,\n            color\n          });\n          if (w2.config.chart.animations.enabled && !w2.globals.dataChanged) {\n            let speed = 1;\n            if (!w2.globals.resized) {\n              speed = w2.config.chart.animations.speed;\n            }\n            this.animateHeatMap(rect, x1, y1, cellW, yDivision, speed, i2, j);\n          }\n          if (w2.globals.dataChanged) {\n            let speed = 1;\n            if (this.dynamicAnim.enabled && w2.globals.shouldAnimate) {\n              speed = this.dynamicAnim.speed;\n              let colorFrom = w2.globals.previousPaths[i2] && w2.globals.previousPaths[i2][j] && w2.globals.previousPaths[i2][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        }\n        const formatter = w2.config.dataLabels.formatter;\n        const formattedText = formatter(w2.seriesData.series[i2][j], {\n          value: w2.seriesData.series[i2][j],\n          seriesIndex: i2,\n          dataPointIndex: j,\n          w: w2\n        });\n        const dataLabels = this.helpers.calculateDataLabels({\n          text: formattedText,\n          x: x1 + cellW / 2,\n          y: y1 + yDivision / 2,\n          i: i2,\n          j,\n          colorProps: heatColorProps,\n          series: heatSeries\n        });\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n        if (!isContinuousX) x1 = x1 + xDivision;\n        j++;\n      }\n      y1 = y1 + yDivision;\n      ret.add(elSeries);\n    }\n    const yAxisScale = (\n      /** @type {any[]} */\n      w2.globals.yAxisScale[0].result.slice()\n    );\n    if (w2.config.yaxis[0].reversed) {\n      yAxisScale.unshift(\"\");\n    } else {\n      yAxisScale.push(\"\");\n    }\n    w2.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 w2 = this.w;\n    const animations = new Animations(this.w);\n    const animCfg = w2.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 = (w2.seriesData.series || []).length || 1;\n      const pointsCount = w2.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(i2, series) {\n    const w2 = this.w;\n    if (w2.config.fill.type === \"gradient\" || w2.config.fill.type[i2] === \"gradient\") {\n      const coreUtils = new CoreUtils(this.lineCtx.w);\n      if (coreUtils.seriesHaveSameValues(i2)) {\n        const gSeries = series[i2].slice();\n        gSeries[gSeries.length - 1] = gSeries[gSeries.length - 1] + 1e-6;\n        series[i2] = 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: i2, j, prevY }) {\n    const w2 = this.w;\n    const ptX = [];\n    const ptY = [];\n    let xPT1st = this.lineCtx.categoryAxisCorrection + w2.config.markers.offsetX;\n    if (w2.axisFlags.isXNumeric) {\n      xPT1st = (w2.seriesData.seriesX[realIndex][0] - w2.globals.minX) / this.lineCtx.xRatio + w2.config.markers.offsetX;\n    }\n    if (j === 0) {\n      ptX.push(xPT1st);\n      ptY.push(\n        Utils$1.isNumber(series[i2][0]) ? prevY + w2.config.markers.offsetY : null\n      );\n    }\n    ptX.push(x + w2.config.markers.offsetX);\n    ptY.push(\n      Utils$1.isNumber(series[i2][j + 1]) ? y + w2.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 w2 = this.w;\n    for (let pp = 0; pp < w2.globals.previousPaths.length; pp++) {\n      const gpp = w2.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 = w2.globals.previousPaths[pp].paths[0].d;\n        } else if (gpp.type === \"area\") {\n          this.lineCtx.appendPathFrom = false;\n          pathFromArea = w2.globals.previousPaths[pp].paths[0].d;\n          if (w2.config.stroke.show && w2.globals.previousPaths[pp].paths[1]) {\n            pathFromLine = w2.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: i2,\n    realIndex,\n    series,\n    prevY,\n    lineYPosition,\n    translationsIndex\n  }) {\n    var _a, _b, _c;\n    const w2 = this.w;\n    const stackSeries = w2.config.chart.stacked && !w2.globals.comboCharts || w2.config.chart.stacked && w2.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[i2]) == null ? void 0 : _c[0]) !== \"undefined\") {\n      if (stackSeries) {\n        if (i2 > 0) {\n          lineYPosition = this.lineCtx.prevSeriesY[i2 - 1][0];\n        } else {\n          lineYPosition = this.lineCtx.zeroY;\n        }\n      } else {\n        lineYPosition = this.lineCtx.zeroY;\n      }\n      prevY = lineYPosition - series[i2][0] / this.lineCtx.yRatio[translationsIndex] + (this.lineCtx.isReversed ? series[i2][0] / this.lineCtx.yRatio[translationsIndex] : 0) * 2;\n    } else {\n      if (stackSeries && i2 > 0 && typeof series[i2][0] === \"undefined\") {\n        for (let s2 = i2 - 1; s2 >= 0; s2--) {\n          if (series[s2][0] !== null && typeof series[s2][0] !== \"undefined\") {\n            lineYPosition = this.lineCtx.prevSeriesY[s2][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(w2, ctx, xyRatios, isPointsChart) {\n    this.ctx = ctx;\n    this.w = w2;\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    this._elLastPointsWrap = 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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const type = w2.globals.comboCharts ? ctype : w2.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 i2 = 0; i2 < series.length; i2++) {\n      series = this.lineHelpers.sameValueSeriesFix(i2, series);\n      const realIndex = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i2]\n      ) : i2;\n      const translationsIndex = this.yRatio.length > 1 ? realIndex : 0;\n      this._initSerieVariables(series, i2, realIndex);\n      const yArrj = [];\n      const y2Arrj = [];\n      const xArrj = [];\n      let x = w2.globals.padHorizontal + this.categoryAxisCorrection;\n      const y = 1;\n      const linePaths = [];\n      const areaPaths = [];\n      Series.addCollapsedClassToSeries(this.w, this.elSeries, realIndex);\n      if (w2.axisFlags.isXNumeric && w2.seriesData.seriesX.length > 0) {\n        x = (w2.seriesData.seriesX[realIndex][0] - w2.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: i2,\n        realIndex,\n        series,\n        prevY,\n        lineYPosition,\n        translationsIndex\n      });\n      prevY = firstPrevY.prevY;\n      if (w2.config.stroke.curve === \"monotoneCubic\" && series[i2][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: i2,\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: i2,\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: i2,\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[i2].length - 1 : void 0,\n        isRangeStart: true\n      }));\n      if (type === \"rangeArea\") {\n        const pathsFrom2 = this._calculatePathsFrom({\n          series: seriesRangeEnd,\n          i: i2,\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[i2].length - 1,\n          isRangeStart: false\n        }));\n        const segments = paths.linePaths.length / 2;\n        for (let s2 = 0; s2 < segments; s2++) {\n          paths.linePaths[s2] = rangePaths.linePaths[s2 + segments] + paths.linePaths[s2];\n        }\n        paths.linePaths.splice(segments);\n        paths.pathFromLine = rangePaths.pathFromLine + paths.pathFromLine;\n      } else if (!/z\\s*$/i.test(paths.pathFromArea)) {\n        paths.pathFromArea += \"z\";\n      }\n      this._handlePaths({ type, realIndex, i: i2, 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 = w2.config.series[0]) == null ? void 0 : _a.zIndex) !== \"undefined\") {\n      allSeries.sort(\n        (a2, b2) => Number(a2.node.getAttribute(\"zIndex\")) - Number(b2.node.getAttribute(\"zIndex\"))\n      );\n    }\n    if (w2.config.chart.stacked) {\n      for (let s2 = allSeries.length - 1; s2 >= 0; s2--) {\n        ret.add(allSeries[s2]);\n      }\n    } else {\n      for (let s2 = 0; s2 < allSeries.length; s2++) {\n        ret.add(allSeries[s2]);\n      }\n    }\n    return ret;\n  }\n  /**\n   * @param {any[]} series\n   * @param {number} i\n   * @param {number} realIndex\n   */\n  _initSerieVariables(series, i2, realIndex) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    this.xDivision = w2.layout.gridWidth / (w2.globals.dataPoints - (w2.config.xaxis.tickPlacement === \"on\" ? 1 : 0));\n    this.strokeWidth = Array.isArray(w2.config.stroke.width) ? w2.config.stroke.width[realIndex] : w2.config.stroke.width;\n    let translationsIndex = 0;\n    if (this.yRatio.length > 1) {\n      this.yaxisIndex = w2.globals.seriesYAxisReverseMap[realIndex];\n      translationsIndex = realIndex;\n    }\n    this.isReversed = w2.config.yaxis[this.yaxisIndex] && w2.config.yaxis[this.yaxisIndex].reversed;\n    this.zeroY = w2.layout.gridHeight - this.baseLineY[translationsIndex] - (this.isReversed ? w2.layout.gridHeight : 0) + (this.isReversed ? this.baseLineY[translationsIndex] * 2 : 0);\n    this.areaBottomY = this.zeroY;\n    if (this.zeroY > w2.layout.gridHeight || w2.config.plotOptions.area.fillTo === \"end\") {\n      this.areaBottomY = w2.layout.gridHeight;\n    }\n    this.categoryAxisCorrection = this.xDivision / 2;\n    const seriesItem = (\n      /** @type {Record<string,any>} */\n      w2.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(w2.seriesData.seriesNames[realIndex])\n    });\n    this.elPointsMain = graphics.group({\n      class: \"apexcharts-series-markers-wrap\",\n      \"data:realIndex\": realIndex\n    });\n    this.markers.resetSeriesWrapCache();\n    this._elLastPointsWrap = null;\n    if (w2.globals.hasNullValues) {\n      const firstPoint = this.markers.plotChartMarkers({\n        pointsPos: {\n          x: [0],\n          y: [w2.layout.gridHeight + w2.globals.markers.largestSize]\n        },\n        seriesIndex: i2,\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[i2].length === w2.globals.dataPoints;\n    this.elSeries.attr({\n      \"data:longestSeries\": longestSeries,\n      rel: i2 + 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: i2,\n    realIndex,\n    translationsIndex,\n    prevX,\n    prevY,\n    prevY2\n  }) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    let linePath, areaPath, pathFromLine, pathFromArea;\n    if (series[i2][0] === null) {\n      for (let s2 = 0; s2 < series[i2].length; s2++) {\n        if (series[i2][s2] !== null) {\n          prevX = this.xDivision * s2;\n          prevY = this.zeroY - series[i2][s2] / 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 (w2.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: i2, paths }) {\n    var _a, _b, _c, _d, _e, _f, _g;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const emit = seriesEmitter(this.ctx, graphics);\n    const fill = new Fill(this.w);\n    this.prevSeriesY.push(paths.yArrj);\n    let streamScroll = null;\n    if ((type === \"line\" || type === \"area\") && w2.globals.dataChanged) {\n      streamScroll = detectStreamScroll(w2, realIndex, paths.xArrj, paths.yArrj);\n    }\n    let reconcile = null;\n    if (!streamScroll && (type === \"line\" || type === \"area\")) {\n      reconcile = reconcileSeriesPaths(w2, {\n        type,\n        realIndex,\n        pathFromLine: paths.pathFromLine,\n        pathFromArea: paths.pathFromArea,\n        linePaths: paths.linePaths,\n        areaPaths: paths.areaPaths\n      });\n    }\n    w2.globals.seriesXvalues[realIndex] = paths.xArrj;\n    w2.globals.seriesYvalues[realIndex] = paths.yArrj;\n    const forecast = w2.config.forecastDataPoints;\n    if (forecast.count > 0 && type !== \"rangeArea\") {\n      const forecastCutoff = w2.globals.seriesXvalues[realIndex][w2.globals.seriesXvalues[realIndex].length - forecast.count - 1];\n      const elForecastMask = graphics.drawRect(\n        forecastCutoff,\n        0,\n        w2.layout.gridWidth,\n        w2.layout.gridHeight,\n        0\n      );\n      w2.dom.elForecastMask.appendChild(elForecastMask.node);\n      const elNonForecastMask = graphics.drawRect(\n        0,\n        0,\n        forecastCutoff,\n        w2.layout.gridHeight,\n        0\n      );\n      w2.dom.elNonForecastMask.appendChild(elNonForecastMask.node);\n    }\n    if (!this.pointsChart) {\n      w2.globals.delayedElements.push({\n        el: this.elPointsMain.node,\n        index: realIndex\n      });\n      tweenSeriesMarkers(w2, {\n        elPointsMain: this.elPointsMain,\n        realIndex,\n        speed: w2.config.chart.animations.dynamicAnimation.speed\n      });\n      if (seriesJoin(w2, realIndex) && ((_a = this.elDataLabelsWrap) == null ? void 0 : _a.node)) {\n        this.elDataLabelsWrap.node.classList.add(\"apexcharts-element-hidden\");\n        w2.globals.delayedElements.push({\n          el: this.elDataLabelsWrap.node,\n          holdUntilComplete: true\n        });\n      }\n    } else {\n      tweenSeriesMarkers(w2, {\n        elPointsMain: this.elPointsMain,\n        realIndex,\n        speed: w2.config.chart.animations.dynamicAnimation.speed\n      });\n    }\n    const defaultRenderedPathOptions = {\n      i: i2,\n      realIndex,\n      animationDelay: i2,\n      initialSpeed: w2.config.chart.animations.speed,\n      dataChangeSpeed: w2.config.chart.animations.dynamicAnimation.speed,\n      className: `apexcharts-${type}`\n    };\n    const numericXY = paths.numericXY;\n    if (type === \"area\") {\n      const pathFill = fill.fillPath({\n        seriesNumber: realIndex\n      });\n      for (let p2 = 0; p2 < paths.areaPaths.length; p2++) {\n        const renderedPath = emit.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: streamScroll ? projectPathToPrevFrame(paths.areaPaths[p2], streamScroll) : (_c = (_b = reconcile == null ? void 0 : reconcile.area) == null ? void 0 : _b.from) != null ? _c : paths.pathFromArea,\n          pathTo: paths.areaPaths[p2],\n          pathToNumeric: numericXY ? {\n            xs: numericXY.xs,\n            ys: numericXY.ys,\n            closeY: numericXY.areaCloseY\n          } : void 0,\n          pathToInterp: (_d = reconcile == null ? void 0 : reconcile.area) == null ? void 0 : _d.toInterp,\n          scrollMorph: !!streamScroll,\n          stroke: \"none\",\n          strokeWidth: 0,\n          strokeLineCap: null,\n          fill: pathFill\n        }));\n        this.elSeries.add(renderedPath);\n      }\n    }\n    if (w2.config.stroke.show && !this.pointsChart) {\n      let lineFill = null;\n      if (type === \"line\") {\n        lineFill = fill.fillPath({\n          seriesNumber: realIndex,\n          i: i2\n        });\n      } else {\n        if (w2.config.stroke.fill.type === \"solid\") {\n          lineFill = w2.globals.stroke.colors[realIndex];\n        } else {\n          const prevFill = w2.config.fill;\n          w2.config.fill = w2.config.stroke.fill;\n          lineFill = fill.fillPath({\n            seriesNumber: realIndex,\n            i: i2\n          });\n          w2.config.fill = prevFill;\n        }\n      }\n      for (let p2 = 0; p2 < paths.linePaths.length; p2++) {\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: streamScroll ? projectPathToPrevFrame(paths.linePaths[p2], streamScroll) : (_f = (_e = reconcile == null ? void 0 : reconcile.line) == null ? void 0 : _e.from) != null ? _f : paths.pathFromLine,\n          pathTo: paths.linePaths[p2],\n          pathToNumeric: numericXY ? { xs: numericXY.xs, ys: numericXY.ys } : void 0,\n          pathToInterp: (_g = reconcile == null ? void 0 : reconcile.line) == null ? void 0 : _g.toInterp,\n          scrollMorph: !!streamScroll,\n          stroke: lineFill,\n          strokeWidth: this.strokeWidth,\n          strokeLineCap: w2.config.stroke.lineCap,\n          fill: type === \"rangeArea\" ? pathFill : \"none\"\n        });\n        const renderedPath = emit.renderPaths(linePathCommonOpts);\n        this.elSeries.add(renderedPath);\n        renderedPath.attr(\"fill-rule\", `evenodd`);\n        if (forecast.count > 0 && type !== \"rangeArea\") {\n          const renderedForecastPath = emit.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${w2.globals.cuid})`\n          );\n          renderedPath.attr(\n            \"clip-path\",\n            `url(#nonForecastMask${w2.globals.cuid})`\n          );\n        }\n      }\n    }\n  }\n  _iterateOverDataPoints({\n    type,\n    series,\n    iterations,\n    realIndex,\n    translationsIndex,\n    i: i2,\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 w2 = 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(w2.globals.minYArr[realIndex]) ? w2.globals.minYArr[realIndex] : w2.globals.minY;\n    if (!iterations) {\n      iterations = w2.globals.dataPoints > 1 ? w2.globals.dataPoints - 1 : w2.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 = w2.config.chart.stacked && !w2.globals.comboCharts || w2.config.chart.stacked && w2.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 = w2.config.stroke.curve;\n    if (Array.isArray(curve)) {\n      if (Array.isArray(seriesIndex)) {\n        curve = curve[seriesIndex[i2]];\n      } else {\n        curve = curve[i2];\n      }\n    }\n    let pathState = 0;\n    let segmentStartX;\n    const jitterPx = this.pointsChart ? this._scatterJitterPx(realIndex) : null;\n    if (curve === \"straight\" && !this.pointsChart) {\n      const fast = this._fastStraightPath({\n        type,\n        series,\n        i: i2,\n        realIndex,\n        translationsIndex,\n        iterations,\n        x,\n        y,\n        pX,\n        pY,\n        pathsFrom,\n        linePaths,\n        areaPaths,\n        xArrj,\n        yArrj,\n        y2Arrj,\n        stackSeries\n      });\n      if (fast) return fast;\n    }\n    for (let j = 0; j < iterations; j++) {\n      if (series[i2].length === 0) break;\n      const isNull = typeof series[i2][j + 1] === \"undefined\" || series[i2][j + 1] === null;\n      if (w2.axisFlags.isXNumeric) {\n        let sX = w2.seriesData.seriesX[realIndex][j + 1];\n        if (typeof w2.seriesData.seriesX[realIndex][j + 1] === \"undefined\") {\n          sX = w2.seriesData.seriesX[realIndex][iterations - 1];\n        }\n        x = (sX - w2.globals.minX) / this.xRatio;\n      } else {\n        x = x + this.xDivision;\n      }\n      if (stackSeries) {\n        if (i2 > 0 && w2.globals.collapsedSeries.length < w2.config.series.length - 1) {\n          const prevIndex = (pi) => {\n            var _a2;\n            for (let pii = pi; pii >= 0; pii--) {\n              const ri = (_a2 = seriesIndex == null ? void 0 : seriesIndex[pii]) != null ? _a2 : pii;\n              if (w2.globals.collapsedSeriesIndices.indexOf(ri) === -1 && w2.globals.ancillaryCollapsedSeriesIndices.indexOf(ri) === -1) {\n                return pii;\n              }\n            }\n            return -1;\n          };\n          const pIdx = prevIndex(i2 - 1);\n          lineYPosition = pIdx < 0 ? this.zeroY : this.prevSeriesY[pIdx][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[i2][j + 1], lineYPosition);\n        if (type === \"rangeArea\") {\n          y2 = getY(seriesRangeEnd[i2][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[i2][j + 1] === null ? null : xj);\n      if (isNull && (w2.config.stroke.curve === \"smooth\" || w2.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: i2,\n        j,\n        prevY\n      });\n      const calculatedPaths = this._createPaths({\n        type,\n        series,\n        i: i2,\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 && !w2.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, i2, j, realIndex);\n      this._handleMarkersAndLabels({\n        type,\n        pointsPos,\n        i: i2,\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: i2, j, realIndex }) {\n    const w2 = this.w;\n    const dataLabels = new DataLabels(this.w, this.ctx);\n    if (!this.pointsChart) {\n      const useProgressive = !w2.globals.dataChanged && !w2.globals.resized;\n      if (!useProgressive && w2.seriesData.series[i2].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 && elPointsWrap !== this._elLastPointsWrap) {\n        this.elPointsMain.add(elPointsWrap);\n        this._elLastPointsWrap = 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 w2 = this.w;\n    const jt = (_a = w2.config.plotOptions.scatter) == null ? void 0 : _a.jitter;\n    if (!jt || !jt.enabled || !jt.x && !jt.y) return null;\n    const xUnitPx = w2.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  /**\n   * Numeric geometry fast path for plain straight line/area series (the\n   * render-2026 perf work). Eligibility is strict: everything the per-point\n   * slow loop can do beyond plain geometry (null gaps, markers, data labels,\n   * discrete markers, stacking, combos, range areas) bails to the state\n   * machine. When eligible it produces the SAME outputs as the slow loop\n   * (byte-identical d strings via join, the same xArrj/yArrj/y2Arrj\n   * pushes, and the same pointsArray tooltip cache) in one tight loop.\n   * In canvas mode it additionally emits typed-array coordinates so the\n   * renderer can paint via moveTo/lineTo without a Path2D d-string parse.\n   *\n   * @param {{type: any, series: any, i: number, realIndex: number,\n   *   translationsIndex: number, iterations: number, x: number, y: number,\n   *   pX: number, pY: number, pathsFrom: any, linePaths: any[],\n   *   areaPaths: any[], xArrj: any[], yArrj: any[], y2Arrj: any[],\n   *   stackSeries: boolean}} opts\n   * @returns {any} the _iterateOverDataPoints result, or null when ineligible\n   */\n  _fastStraightPath({\n    type,\n    series,\n    i: i2,\n    realIndex,\n    translationsIndex,\n    iterations,\n    x,\n    y,\n    pX,\n    pY,\n    pathsFrom,\n    linePaths,\n    areaPaths,\n    xArrj,\n    yArrj,\n    y2Arrj,\n    stackSeries\n  }) {\n    const w2 = this.w;\n    if (type !== \"line\" && type !== \"area\") return null;\n    if (w2.globals.comboCharts || stackSeries) return null;\n    if (w2.config.dataLabels.enabled) return null;\n    if (w2.config.markers.discrete.length) return null;\n    if (w2.globals.markers.size[realIndex] > 0) return null;\n    const s2 = series[i2];\n    const n2 = s2.length;\n    if (!iterations || n2 < 2 || n2 - 1 !== iterations) return null;\n    for (let k = 0; k <= iterations; k++) {\n      const v2 = s2[k];\n      if (v2 === null || typeof v2 === \"undefined\") return null;\n    }\n    const isXNumeric = w2.axisFlags.isXNumeric;\n    const sx = isXNumeric ? w2.seriesData.seriesX[realIndex] : null;\n    if (isXNumeric && (!sx || sx.length < n2)) return null;\n    const yR = this.yRatio[translationsIndex];\n    const isReversed = this.isReversed;\n    const zeroY = this.zeroY;\n    const bottomY = this.areaBottomY;\n    const xRatio = this.xRatio;\n    const minX = w2.globals.minX;\n    const xDivision = this.xDivision;\n    const offX = w2.config.markers.offsetX;\n    const offY = w2.config.markers.offsetY;\n    const appendFrom = this.appendPathFrom && !w2.globals.hasNullValues;\n    let { pathFromLine, pathFromArea } = pathsFrom;\n    const r2 = this.ctx && this.ctx.renderer;\n    const canvasMode = !!(r2 && r2.kind && r2.kind !== \"svg\");\n    const buildStrings = !canvasMode || w2.globals.dataChanged && !!w2.globals.prevStreamFrame;\n    const nxs = canvasMode ? new Float64Array(n2) : null;\n    const nys = canvasMode ? new Float64Array(n2) : null;\n    if (nxs && nys) {\n      nxs[0] = pX;\n      nys[0] = pY;\n    }\n    if (typeof w2.globals.pointsArray[realIndex] === \"undefined\") {\n      w2.globals.pointsArray[realIndex] = [];\n    }\n    const pts = w2.globals.pointsArray[realIndex];\n    const xPT1st = sx ? (sx[0] - minX) / xRatio + offX : this.categoryAxisCorrection + offX;\n    pts.push([xPT1st, pathsFrom.prevY + offY]);\n    const parts = buildStrings ? new Array(iterations + 1) : [];\n    if (buildStrings) parts[0] = \"M \" + pX + \" \" + pY;\n    const fromParts = buildStrings && appendFrom ? new Array(iterations) : null;\n    let xv = x;\n    let xj = pX;\n    let yj = pY;\n    for (let j = 0; j < iterations; j++) {\n      if (sx) {\n        xj = (sx[j + 1] - minX) / xRatio;\n      } else {\n        xv = xv + xDivision;\n        xj = xv;\n      }\n      const v2 = s2[j + 1];\n      yj = zeroY - v2 / yR + (isReversed ? v2 / yR : 0) * 2;\n      xArrj.push(xj);\n      yArrj.push(yj);\n      y2Arrj.push(y);\n      pts.push([xj + offX, yj + offY]);\n      if (buildStrings) {\n        parts[j + 1] = \" L \" + xj + \" \" + yj;\n        if (fromParts) fromParts[j] = \" L \" + xj + \" \" + bottomY;\n      }\n      if (nxs && nys) {\n        nxs[j + 1] = xj;\n        nys[j + 1] = yj;\n      }\n    }\n    let linePath = \"\";\n    let areaPath = \"\";\n    if (buildStrings) {\n      linePath = parts.join(\"\");\n      areaPath = linePath + \" L \" + xj + \" \" + bottomY + \" L \" + pX + \" \" + bottomY + \"z\";\n    }\n    if (fromParts) {\n      const fromAppend = fromParts.join(\"\");\n      pathFromLine += fromAppend;\n      pathFromArea += fromAppend;\n    } else if (!buildStrings && appendFrom) {\n      pathFromLine += \" L \" + xj + \" \" + bottomY;\n      pathFromArea += \" L \" + xj + \" \" + bottomY;\n    }\n    linePaths.push(linePath);\n    areaPaths.push(areaPath);\n    return {\n      yArrj,\n      xArrj,\n      pathFromArea,\n      areaPaths,\n      pathFromLine,\n      linePaths,\n      linePath,\n      areaPath,\n      numericXY: nxs ? { xs: nxs, ys: nys, areaCloseY: bottomY } : void 0\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: i2,\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((_, i3) => {\n            return [_, yArr[i3]];\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 i3 = 0, len = 0; i3 < segLens.length; len += segLens[i3++]) {\n            segments[i3] = spline.slice(points, len, len + segLens[i3]);\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[i2].length : j === series[i2].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[i2][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[i2][j + 1] === null || typeof series[i2][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i2].length - 2) {\n                const p2 = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p2;\n                areaPath += p2;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i2][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 p2 = graphics.curve(pX + length, pY, x - length, y, x, y);\n                linePath += p2;\n                areaPath += p2;\n                if (j >= series[i2].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[i2][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[i2][j + 1] === null || typeof series[i2][j + 1] === \"undefined\") {\n                linePaths.push(linePath);\n                areaPaths.push(areaPath);\n                break;\n              }\n              pathState = 1;\n              if (j < series[i2].length - 2) {\n                const p2 = pathToPoint(curve, x, y);\n                linePath += p2;\n                areaPath += p2;\n                break;\n              }\n            // falls through\n            case 1:\n              if (series[i2][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 p2 = pathToPoint(curve, x, y);\n                linePath += p2;\n                areaPath += p2;\n                if (j >= series[i2].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, i2, j, realIndex) {\n    const w2 = this.w;\n    if (series[i2][j] === null && w2.config.markers.showNullDataPoints || series[i2].length === 1) {\n      let pSize = this.strokeWidth - w2.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(w2) {\n    this.w = w2;\n  }\n  /**\n   * @param {number} x\n   * @param {number} y\n   * @param {number} i\n   * @param {string | number} text\n   */\n  drawYAxisTexts(x, y, i2, text) {\n    const w2 = this.w;\n    const yaxisConfig = w2.config.yaxis[0];\n    const formatter = w2.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, i2),\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[i2] : 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 n2 = lines.length;\n    const startY = labelY - (n2 - 1) * lineHeight / 2;\n    const elText = graphics.drawText({\n      x: textX,\n      y: startY,\n      text: n2 === 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 (n2 > 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}\nconst D2R$1 = Math.PI / 180;\nconst R2D$1 = 180 / Math.PI;\nfunction arcPoint(cx, cy, radius, deg) {\n  return {\n    x: cx + radius * Math.cos((deg - 90) * D2R$1),\n    y: cy + radius * Math.sin((deg - 90) * D2R$1)\n  };\n}\nconst xy = (p2) => `${p2.x} ${p2.y}`;\nfunction roundedDonutSegmentPath({ cx, cy, rIn, rOut, a0, a1, r: r2, spanDeg }) {\n  const ptAt = (radius, deg) => arcPoint(cx, cy, radius, deg);\n  const degOut = r2 / rOut * R2D$1;\n  const degIn = r2 / rIn * R2D$1;\n  const oStart = ptAt(rOut, a0 + degOut);\n  const oEnd = ptAt(rOut, a1 - degOut);\n  const largeOut = spanDeg - 2 * degOut > 180 ? 1 : 0;\n  const ocEnd = ptAt(rOut, a1);\n  const rEndOut = ptAt(rOut - r2, a1);\n  const ocStart = ptAt(rOut, a0);\n  const rStartOut = ptAt(rOut - r2, a0);\n  const iEnd = ptAt(rIn, a1 - degIn);\n  const iStart = ptAt(rIn, a0 + degIn);\n  const largeIn = spanDeg - 2 * degIn > 180 ? 1 : 0;\n  const icEnd = ptAt(rIn, a1);\n  const rEndIn = ptAt(rIn + r2, a1);\n  const icStart = ptAt(rIn, a0);\n  const rStartIn = ptAt(rIn + r2, a0);\n  return [\n    \"M\",\n    xy(oStart),\n    \"A\",\n    rOut,\n    rOut,\n    0,\n    largeOut,\n    1,\n    xy(oEnd),\n    \"Q\",\n    xy(ocEnd),\n    xy(rEndOut),\n    \"L\",\n    xy(rEndIn),\n    \"Q\",\n    xy(icEnd),\n    xy(iEnd),\n    \"A\",\n    rIn,\n    rIn,\n    0,\n    largeIn,\n    0,\n    xy(iStart),\n    \"Q\",\n    xy(icStart),\n    xy(rStartIn),\n    \"L\",\n    xy(rStartOut),\n    \"Q\",\n    xy(ocStart),\n    xy(oStart),\n    \"Z\"\n  ].join(\" \");\n}\nfunction roundedPieSegmentPath({ cx, cy, rOut, a0, a1, r: r2, spanDeg }) {\n  const ptAt = (radius, deg) => arcPoint(cx, cy, radius, deg);\n  const degOut = r2 / rOut * R2D$1;\n  const oStart = ptAt(rOut, a0 + degOut);\n  const oEnd = ptAt(rOut, a1 - degOut);\n  const largeOut = spanDeg - 2 * degOut > 180 ? 1 : 0;\n  const ocEnd = ptAt(rOut, a1);\n  const rEndOut = ptAt(rOut - r2, a1);\n  const ocStart = ptAt(rOut, a0);\n  const rStartOut = ptAt(rOut - r2, a0);\n  return [\n    \"M\",\n    xy(oStart),\n    \"A\",\n    rOut,\n    rOut,\n    0,\n    largeOut,\n    1,\n    xy(oEnd),\n    \"Q\",\n    xy(ocEnd),\n    xy(rEndOut),\n    \"L\",\n    `${cx} ${cy}`,\n    \"L\",\n    xy(rStartOut),\n    \"Q\",\n    xy(ocStart),\n    xy(oStart),\n    \"Z\"\n  ].join(\" \");\n}\nfunction sharpDonutSegmentPath({ cx, cy, rIn, rOut, a0, a1, spanDeg }) {\n  const ptAt = (radius, deg) => arcPoint(cx, cy, radius, deg);\n  const largeArc = spanDeg > 180 ? 1 : 0;\n  const A = ptAt(rOut, a0);\n  const B = ptAt(rOut, a1);\n  const C = ptAt(rIn, a1);\n  const Din = ptAt(rIn, a0);\n  return [\n    \"M\",\n    xy(A),\n    \"A\",\n    rOut,\n    rOut,\n    0,\n    largeArc,\n    1,\n    xy(B),\n    \"L\",\n    xy(C),\n    \"A\",\n    rIn,\n    rIn,\n    0,\n    largeArc,\n    0,\n    xy(Din),\n    \"Z\"\n  ].join(\" \");\n}\nconst SLICE_OFFSET_TRANSITION = \"transform 320ms cubic-bezier(0.25, 0.8, 0.3, 1)\";\nconst HOVER_OUTLINE_TRANSITION = \"opacity 180ms ease-out\";\nclass Pie {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\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 = w2.globals.stroke.colors !== void 0 ? w2.globals.stroke.colors : w2.globals.colors;\n    this.defaultSize = Math.min(w2.layout.gridWidth, w2.layout.gridHeight);\n    this.centerY = this.defaultSize / 2;\n    this.centerX = w2.layout.gridWidth / 2;\n    if (w2.config.chart.type === \"radialBar\") {\n      this.fullAngle = 360;\n    } else {\n      this.fullAngle = Math.abs(\n        w2.config.plotOptions.pie.endAngle - w2.config.plotOptions.pie.startAngle\n      );\n    }\n    this.initialAngle = w2.config.plotOptions.pie.startAngle % this.fullAngle;\n    w2.globals.radialSize = this.defaultSize / 2.05 - w2.config.stroke.width - (!w2.config.chart.sparkline.enabled ? w2.config.chart.dropShadow.blur : 0);\n    this.externalCfg = w2.config.plotOptions.pie.dataLabels.external;\n    const dlStyle = w2.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    w2.globals.pieExternalLabelMarginY = 0;\n    this.showExternalLabels = this.externalCfg.show && this.chartType !== \"polarArea\";\n    if (this.showExternalLabels && !w2.globals.noData) {\n      this.reserveExternalLabelSpace();\n    }\n    this.donutSize = w2.globals.radialSize * parseInt(w2.config.plotOptions.pie.donut.size, 10) / 100;\n    const scaleSize = w2.config.plotOptions.pie.customScale;\n    const halfW = w2.layout.gridWidth / 2;\n    const halfH = w2.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.prevSliceSizes = [];\n    this.sliceLabelGroups = {};\n    this.externalLabelGroups = {};\n    this.elHoverOutline = null;\n    this.elHoverOutlinePath = null;\n    this.hoverOutlineIndex = -1;\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(i2) {\n    var _a, _b, _c;\n    const w2 = this.w;\n    const name2 = w2.seriesData.seriesNames[i2];\n    const fn = this.externalCfg.formatter;\n    if (typeof fn === \"function\") {\n      return fn(name2, {\n        seriesIndex: i2,\n        percent: (_b = (_a = w2.globals.seriesPercent) == null ? void 0 : _a[i2]) == null ? void 0 : _b[0],\n        value: (_c = w2.globals.seriesTotals) == null ? void 0 : _c[i2],\n        w: w2\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(i2) {\n    const raw = this.getExternalLabelText(i2);\n    const arr = Array.isArray(raw) ? raw : `${raw == null ? \"\" : raw}`.split(\"\\n\");\n    return arr.map((l2) => l2 == null ? \"\" : `${l2}`);\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 w2 = this.w;\n    const helpers = new CircularChartsHelpers(w2);\n    const lineSets = (w2.seriesData.seriesNames || []).map(\n      (_, i2) => this.getExternalLabelLines(i2)\n    );\n    const maxLabelWidth = helpers.getMaxLabelWidth(lineSets.flat(), {\n      fontSize: this.externalLabelStyle.fontSize,\n      fontFamily: this.externalLabelStyle.fontFamily\n    });\n    this.externalLabelMaxLines = lineSets.reduce((m2, s2) => Math.max(m2, s2.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      w2.globals.radialSize,\n      w2.layout.gridWidth / 2 - mh,\n      w2.layout.gridHeight / 2 - mv\n    );\n    w2.globals.radialSize = Math.max(fitted, this.defaultSize * 0.15);\n    w2.globals.pieExternalLabelMarginY = mv;\n    const heightStr = w2.config.chart.height ? String(w2.config.chart.height) : \"\";\n    const userSetFixedHeight = heightStr !== \"\" && heightStr !== \"auto\";\n    this.centerY = userSetFixedHeight ? w2.layout.gridHeight / 2 : w2.globals.radialSize + mv;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const self = this;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const elPie = graphics.group({\n      class: \"apexcharts-pie\"\n    });\n    if (w2.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((m2) => {\n      this.maxY = Math.max(this.maxY, m2);\n    });\n    if (w2.config.yaxis[0].max) {\n      this.maxY = w2.config.yaxis[0].max;\n    }\n    if (w2.config.grid.position === \"back\" && this.chartType === \"polarArea\") {\n      this.drawPolarElements(elPie);\n    }\n    const collapsedIdx = w2.globals.collapsedSeriesIndices || [];\n    let polarVisible = 1;\n    if (this.chartType === \"polarArea\") {\n      let visible = 0;\n      for (let k = 0; k < series.length; k++) {\n        if (collapsedIdx.indexOf(k) === -1) visible++;\n      }\n      polarVisible = Math.max(1, visible);\n    }\n    for (let i2 = 0; i2 < series.length; i2++) {\n      const angle = this.fullAngle * Utils$1.negToZero(series[i2]) / total;\n      sectorAngleArr.push(angle);\n      if (this.chartType === \"polarArea\") {\n        sectorAngleArr[i2] = collapsedIdx.indexOf(i2) > -1 ? 0 : this.fullAngle / polarVisible;\n        this.sliceSizes.push(\n          w2.globals.radialSize * series[i2] / (this.maxY || 1)\n        );\n      } else {\n        this.sliceSizes.push(w2.globals.radialSize);\n      }\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    if (w2.globals.dataChanged && !morphActive) {\n      if (this.chartType === \"polarArea\") {\n        const prevValues = w2.globals.previousPaths;\n        const stash = w2.globals.prevPolarAngles;\n        if (Array.isArray(stash) && stash.length === prevValues.length) {\n          this.prevSectorAngleArr = stash.slice();\n        } else {\n          for (let i2 = 0; i2 < prevValues.length; i2++) {\n            this.prevSectorAngleArr.push(\n              this.fullAngle / Math.max(1, prevValues.length)\n            );\n          }\n        }\n        let prevMaxY = 0;\n        for (let k = 0; k < prevValues.length; k++) {\n          prevMaxY = Math.max(prevMaxY, Utils$1.negToZero(prevValues[k]));\n        }\n        if (w2.config.yaxis[0].max) {\n          prevMaxY = w2.config.yaxis[0].max;\n        }\n        this.prevSliceSizes = prevValues.map(\n          (v2) => w2.globals.radialSize * Utils$1.negToZero(v2) / (prevMaxY || 1)\n        );\n      } else {\n        let prevTotal = 0;\n        for (let k = 0; k < w2.globals.previousPaths.length; k++) {\n          prevTotal += Utils$1.negToZero(w2.globals.previousPaths[k]);\n        }\n        let previousAngle;\n        for (let i2 = 0; i2 < w2.globals.previousPaths.length; i2++) {\n          previousAngle = this.fullAngle * Utils$1.negToZero(w2.globals.previousPaths[i2]) / prevTotal;\n          this.prevSectorAngleArr.push(previousAngle);\n        }\n      }\n    }\n    if (this.chartType === \"polarArea\") {\n      w2.globals.prevPolarAngles = sectorAngleArr.slice();\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: w2.config.plotOptions.pie.donut.background ? w2.config.plotOptions.pie.donut.background : \"transparent\"\n      });\n      elSeries.add(circle);\n    }\n    const elG = self.drawArcs(sectorAngleArr, series);\n    this.sliceLabels.forEach((s2) => {\n      elG.add(s2);\n    });\n    elSeries.attr({\n      transform: `translate(${this.translateX}, ${this.translateY}) scale(${w2.config.plotOptions.pie.customScale})`\n    });\n    elSeries.add(elG);\n    elPie.add(elSeries);\n    if (this.donutDataLabels.show) {\n      const shouldFadeInLabels = this.initialAnim && !w2.globals.resized && !w2.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 (w2.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, _c, _d, _e;\n    const w2 = 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 g2 = graphics.group({\n      class: \"apexcharts-slices\"\n    });\n    this.elHoverOutline = graphics.group({\n      class: \"apexcharts-pie-hover-outline\"\n    });\n    this.elHoverOutline.node.style.pointerEvents = \"none\";\n    this.elHoverOutline.node.style.opacity = \"0\";\n    if (w2.config.chart.animations.enabled) {\n      this.elHoverOutline.node.style.transition = HOVER_OUTLINE_TRANSITION;\n    }\n    g2.add(this.elHoverOutline);\n    let startAngle = this.initialAngle;\n    let prevStartAngle = this.initialAngle;\n    let endAngle = this.initialAngle;\n    let prevEndAngle = this.initialAngle;\n    this.strokeWidth = w2.config.stroke.show ? w2.config.stroke.width : 0;\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i2 = 0; i2 < sectorAngleArr.length; i2++) {\n      const elPieArc = graphics.group({\n        class: `apexcharts-series apexcharts-pie-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[i2]),\n        rel: i2 + 1,\n        \"data:realIndex\": i2\n      });\n      g2.add(elPieArc);\n      startAngle = endAngle;\n      prevStartAngle = prevEndAngle;\n      endAngle = startAngle + sectorAngleArr[i2];\n      prevEndAngle = prevStartAngle + this.prevSectorAngleArr[i2];\n      const angle = endAngle < startAngle ? this.fullAngle + endAngle - startAngle : endAngle - startAngle;\n      const pathFill = fill.fillPath({\n        seriesNumber: i2,\n        size: this.sliceSizes[i2],\n        value: series[i2]\n      });\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i2, 0) : null;\n      const prevSize = this.chartType === \"polarArea\" && w2.globals.dataChanged && !morphActive ? this.prevSliceSizes[i2] || 0 : void 0;\n      const path = morphFrom || this.getChangedPath(prevStartAngle, prevEndAngle, prevSize);\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[i2]) != null ? _b : this.lineColorArr[i2 % this.lineColorArr.length] : this.lineColorArr,\n        strokeWidth: 0,\n        fill: pathFill,\n        fillOpacity: w2.config.fill.opacity,\n        classes: `apexcharts-pie-area apexcharts-${this.chartType.toLowerCase()}-slice-${i2}`\n      });\n      elPath.attr({\n        index: 0,\n        j: i2\n      });\n      filters.setSelectionFilter(elPath, 0, i2);\n      if (w2.config.chart.dropShadow.enabled) {\n        const shadow = w2.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i2);\n      }\n      this.addListeners(elPath, this.donutDataLabels, i2);\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          w2.globals.radialSize / 1.25 + w2.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w2.globals.radialSize / 2,\n          midAngle\n        );\n      } else if (this.chartType === \"donut\") {\n        labelPosition = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w2.globals.radialSize + this.donutSize) / 2 + w2.config.plotOptions.pie.dataLabels.offset,\n          midAngle\n        );\n        arcCenter = Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          (w2.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[i2],\n        \"data:cx\": arcCenter.x,\n        \"data:cy\": arcCenter.y\n      });\n      elPieArc.add(elPath);\n      let pieceClaimed = false;\n      if (morphActive) {\n        const finalD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: this.sliceSizes[i2]\n        });\n        elPath.node.setAttribute(\"data:pathFinal\", finalD);\n        pieceClaimed = ((_d = (_c = this.ctx.morphTypeChange).claimsTargetMark) == null ? void 0 : _d.call(_c, i2, 0)) === true;\n        if (pieceClaimed) {\n          elPath.attr({ d: finalD });\n          elPath.node.setAttribute(\"data:pathOrig\", finalD);\n          elPath.node.setAttribute(\"opacity\", \"0\");\n          elPath.node.setAttribute(\"data-piece-hidden\", \"1\");\n        }\n      }\n      let dur = 0;\n      if (this.initialAnim && !w2.globals.resized && !w2.globals.dataChanged) {\n        dur = angle / this.fullAngle * w2.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 (pieceClaimed) ;\n      else if (morphActive && morphFrom) {\n        const targetD = this.getPiePath({\n          me: this,\n          startAngle,\n          angle,\n          size: this.sliceSizes[i2]\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 && w2.globals.dataChanged) {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i2],\n          prevSize,\n          endAngle,\n          startAngle,\n          prevStartAngle,\n          prevEndAngle,\n          animateStartingPos: true,\n          i: i2,\n          animBeginArr: this.animBeginArr,\n          shouldSetPrevPaths: true,\n          dur: w2.config.chart.animations.dynamicAnimation.speed\n        });\n      } else {\n        this.animatePaths(elPath, {\n          size: this.sliceSizes[i2],\n          endAngle,\n          startAngle,\n          i: i2,\n          totalItems: sectorAngleArr.length - 1,\n          animBeginArr: this.animBeginArr,\n          dur\n        });\n      }\n      if (this.getExpandOffset() > 0) {\n        elPath.node.addEventListener(\"mouseup\", this.pieClicked.bind(this, i2));\n      } else if (i2 === 0 && Filters.drilldownBlocksSliceOffset(w2)) {\n        (_e = this.ctx.drilldown) == null ? void 0 : _e.warnSliceOffsetDisabled();\n      }\n      if (typeof w2.interact.selectedDataPoints[0] !== \"undefined\" && w2.interact.selectedDataPoints[0].indexOf(i2) > -1) {\n        if (this.initialAnim && !w2.globals.resized && !w2.globals.dataChanged && this.animDur > 0) {\n          const _this = this;\n          const _i = i2;\n          setTimeout(() => _this.pieClicked(_i, { animate: false }), this.animDur);\n        } else {\n          this.pieClicked(i2, { animate: false });\n        }\n      }\n      if (w2.config.dataLabels.enabled) {\n        const xPos = labelPosition.x;\n        const yPos = labelPosition.y;\n        let text = 100 * angle / this.fullAngle + \"%\";\n        if (angle !== 0 && w2.config.plotOptions.pie.dataLabels.minAngleToShowLabel < sectorAngleArr[i2]) {\n          const formatter = w2.config.dataLabels.formatter;\n          if (formatter !== void 0) {\n            text = formatter(w2.globals.seriesPercent[i2][0], {\n              seriesIndex: i2,\n              w: w2\n            });\n          }\n          const foreColor = w2.globals.dataLabels.style.colors[i2];\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: w2.config.dataLabels.style.fontSize,\n            fontFamily: w2.config.dataLabels.style.fontFamily,\n            fontWeight: w2.config.dataLabels.style.fontWeight,\n            foreColor\n          });\n          elPieLabelWrap.add(elPieLabel);\n          if (w2.config.dataLabels.dropShadow.enabled) {\n            const textShadow = w2.config.dataLabels.dropShadow;\n            filters.dropShadow(elPieLabel, textShadow);\n          }\n          elPieLabel.node.classList.add(\"apexcharts-pie-label\");\n          if (w2.config.chart.animations.animate && w2.globals.resized === false) {\n            elPieLabel.node.classList.add(\"apexcharts-pie-label-delay\");\n            elPieLabel.node.style.animationDelay = w2.config.chart.animations.speed / 940 + \"s\";\n          }\n          this.sliceLabels.push(elPieLabelWrap);\n          this.sliceLabelGroups[i2] = elPieLabelWrap.node;\n        }\n      }\n      if (this.showExternalLabels && angle !== 0) {\n        const lines = this.getExternalLabelLines(i2);\n        if (lines.some((l2) => l2 !== \"\")) {\n          const anchor = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w2.globals.radialSize,\n            midAngle\n          );\n          const elbow = Utils$1.polarToCartesian(\n            this.centerX,\n            this.centerY,\n            w2.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            i: i2,\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 || w2.globals.colors[i2],\n            foreColor: this.externalCfg.color || w2.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 && w2.globals.dataChanged || this.initialAnim && !w2.globals.resized && !w2.globals.dataChanged);\n      this.externalLabels.forEach((lbl) => {\n        const group = new CircularChartsHelpers(w2).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          w2.globals.delayedElements.push({ el: group.node });\n        }\n        this.externalLabelGroups[lbl.i] = group.node;\n        g2.add(group);\n      });\n    }\n    return g2;\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 w2 = this.w;\n    const lineHeight = this.externalLabelMaxLines * this.externalLabelLineH + 2;\n    const maxY = this.centerY + w2.globals.radialSize + w2.globals.pieExternalLabelMarginY;\n    [\"left\", \"right\"].forEach((side) => {\n      const items = this.externalLabels.filter((l2) => l2.side === side).sort((a2, b2) => a2.idealY - b2.idealY);\n      items.forEach((l2) => {\n        l2.labelY = l2.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   * @param {number} [i] slice index, for the hover outline band\n   */\n  addListeners(elPath, dataLabels, i2) {\n    const graphics = new Graphics(this.w, this.ctx);\n    elPath.node.addEventListener(\n      \"mouseenter\",\n      graphics.pathMouseEnter.bind(graphics, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      graphics.pathMouseLeave.bind(graphics, elPath)\n    );\n    elPath.node.addEventListener(\n      \"mouseleave\",\n      this.revertDataLabelsInner.bind(this)\n    );\n    if (typeof i2 === \"number\") {\n      elPath.node.addEventListener(\n        \"mouseenter\",\n        this.showHoverOutline.bind(this, i2)\n      );\n      elPath.node.addEventListener(\n        \"mouseleave\",\n        this.hideHoverOutline.bind(this)\n      );\n    }\n    elPath.node.addEventListener(\n      \"mousedown\",\n      graphics.pathMouseDown.bind(graphics, 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 w2 = 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 === w2.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 w2 = 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    const hasPrevSize = typeof opts.prevSize === \"number\";\n    if (w2.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: hasPrevSize ? opts.prevSize : 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              w2.config.chart.animations.dynamicAnimation.speed\n            ).attr({\n              \"stroke-width\": me.strokeWidth\n            });\n          }\n          if (opts.i === w2.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: hasPrevSize ? opts.prevSize + (size - opts.prevSize) * pos : 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        w2.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   * Toggle slice `i` in or out of the pie. Only one slice sits outside at a\n   * time. Bound to `mouseup` on each slice, and also reached from the\n   * `toggleDataPointSelection` API and from the pre-selected-slice pass in\n   * drawArcs (which passes `animate: false` so the slice is already parked by\n   * the time the first frame is painted).\n   * @param {number} i\n   * @param {{animate?: boolean}} [opts] a MouseEvent when called as a listener,\n   *   which carries no `animate`, so real clicks animate\n   */\n  pieClicked(i2, opts) {\n    const w2 = this.w;\n    const me = this;\n    const animate = !(opts && opts.animate === false);\n    const elPath = w2.dom.Paper.findOne(\n      `.apexcharts-${me.chartType.toLowerCase()}-slice-${i2}`\n    );\n    if (!elPath) return;\n    if (elPath.attr(\"data:pieClicked\") === \"true\") {\n      elPath.attr({\n        \"data:pieClicked\": \"false\"\n      });\n      this.revertDataLabelsInner();\n      this.offsetSlice(i2, 0, animate);\n      return;\n    }\n    const allEls = w2.dom.baseEl.getElementsByClassName(\"apexcharts-pie-area\");\n    Array.prototype.forEach.call(allEls, (pieSlice) => {\n      const wasOut = pieSlice.getAttribute(\"data:pieClicked\") === \"true\";\n      pieSlice.setAttribute(\"data:pieClicked\", \"false\");\n      if (wasOut) {\n        this.offsetSlice(parseInt(pieSlice.getAttribute(\"j\"), 10), 0, animate);\n      }\n    });\n    w2.interact.capturedDataPointIndex = i2;\n    elPath.attr(\"data:pieClicked\", \"true\");\n    this.offsetSlice(i2, this.getExpandOffset(), animate);\n  }\n  /**\n   * How far a clicked slice slides out, in px. 0 when the pull-out is off, when\n   * drilldown owns the click, and always for polarArea: there the radius\n   * encodes the value, so moving a slice outward would read as a bigger number.\n   * @returns {number}\n   */\n  getExpandOffset() {\n    const pie = this.w.config.plotOptions.pie;\n    if (!pie.expandOnClick || this.chartType === \"polarArea\") return 0;\n    if (Filters.drilldownBlocksSliceOffset(this.w)) return 0;\n    const offset = Number(pie.expandOffset);\n    return Number.isFinite(offset) && offset > 0 ? offset : 0;\n  }\n  /**\n   * Every node that has to travel with slice `i`: the slice path itself plus\n   * its labels, which live in sibling groups so they paint above all slices.\n   * @param {number} i\n   * @returns {SVGElement[]}\n   */\n  getSliceMovers(i2) {\n    const elPath = this.w.dom.Paper.findOne(\n      `.apexcharts-${this.chartType.toLowerCase()}-slice-${i2}`\n    );\n    return [\n      elPath ? elPath.node : null,\n      this.sliceLabelGroups[i2],\n      this.externalLabelGroups[i2],\n      // The hover band, when it is this slice's: clicking a slice you are\n      // hovering has to take its outline along, or the band is left behind\n      // sitting in the gap the slice just opened.\n      this.hoverOutlineIndex === i2 && this.elHoverOutlinePath ? this.elHoverOutlinePath.node : null\n    ].filter(Boolean);\n  }\n  /**\n   * Slide slice `i` `dist` px out of the pie along its own mid-angle, or back\n   * to its resting place when `dist` is 0.\n   *\n   * The slice is *translated*, never re-drawn: the arc keeps the exact radius\n   * and span it had, so the pulled-out slice still encodes the same quantity\n   * (growing the radius, as this used to, quietly inflates it) and a clean gap\n   * opens between it and the rest of the pie.\n   * @param {number} i\n   * @param {number} dist\n   * @param {boolean} [animate] false to park it instantly, with no transition\n   */\n  offsetSlice(i2, dist, animate = true) {\n    const w2 = this.w;\n    const elPath = w2.dom.Paper.findOne(\n      `.apexcharts-${this.chartType.toLowerCase()}-slice-${i2}`\n    );\n    if (!elPath) return;\n    const { dx, dy } = this.getSliceOffsetVector(i2, dist);\n    const transform = `translate(${dx} ${dy})`;\n    const transition = animate && w2.config.chart.animations.enabled ? SLICE_OFFSET_TRANSITION : \"\";\n    this.getSliceMovers(i2).forEach((node) => {\n      node.style.transition = transition;\n      node.setAttribute(\"transform\", transform);\n    });\n  }\n  /**\n   * The px vector `dist` along slice `i`'s mid-angle. Zero for a slice that\n   * fills the pie: there is no \"outside\" for it to move to, and sliding it\n   * would just shift the whole chart sideways.\n   * @param {number} i\n   * @param {number} dist\n   * @returns {{dx: number, dy: number}}\n   */\n  getSliceOffsetVector(i2, dist) {\n    const elPath = this.w.dom.Paper.findOne(\n      `.apexcharts-${this.chartType.toLowerCase()}-slice-${i2}`\n    );\n    const angle = elPath ? parseFloat(elPath.attr(\"data:angle\")) : NaN;\n    if (!dist || !Number.isFinite(angle) || angle >= this.fullAngle) {\n      return { dx: 0, dy: 0 };\n    }\n    const startAngle = parseFloat(elPath.attr(\"data:startAngle\"));\n    const midRad = Math.PI * (startAngle + angle / 2 - 90) / 180;\n    return { dx: dist * Math.cos(midRad), dy: dist * Math.sin(midRad) };\n  }\n  /**\n   * Fade in the hover outline: a translucent band traced just outside the rim\n   * of slice `i`, in the slice's own colour. It replaces lightening the slice\n   * (see Filters.hoverOutlineOwnsHoverState) so a hovered slice keeps the\n   * colour the legend and the data labels claim it has.\n   * @param {number} i\n   */\n  showHoverOutline(i2) {\n    const w2 = this.w;\n    if (!Filters.hoverOutlineOwnsHoverState(w2)) return;\n    if (!this.elHoverOutline) return;\n    const path = this.getHoverOutlinePath(i2);\n    if (!path) return;\n    const cfg = w2.config.plotOptions.pie.hoverOutline;\n    const fill = cfg.color || w2.globals.colors[i2];\n    if (!this.elHoverOutlinePath) {\n      const graphics = new Graphics(w2);\n      this.elHoverOutlinePath = graphics.drawPath({\n        d: path,\n        fill,\n        strokeWidth: 0,\n        classes: \"apexcharts-pie-hover-outline-band\"\n      });\n      this.elHoverOutline.add(this.elHoverOutlinePath);\n    }\n    this.elHoverOutlinePath.attr({\n      d: path,\n      fill,\n      \"fill-opacity\": cfg.opacity\n    });\n    const { dx, dy } = this.getSliceOffsetVector(\n      i2,\n      this.isSliceOut(i2) ? this.getExpandOffset() : 0\n    );\n    this.elHoverOutlinePath.node.style.transition = \"\";\n    this.elHoverOutlinePath.node.setAttribute(\"transform\", `translate(${dx} ${dy})`);\n    this.hoverOutlineIndex = i2;\n    this.elHoverOutline.node.style.opacity = \"1\";\n  }\n  /** Fade the hover outline back out, leaving the band node in place. */\n  hideHoverOutline() {\n    if (this.elHoverOutline) {\n      this.elHoverOutline.node.style.opacity = \"0\";\n    }\n  }\n  /** @param {number} i @returns {boolean} */\n  isSliceOut(i2) {\n    const elPath = this.w.dom.Paper.findOne(\n      `.apexcharts-${this.chartType.toLowerCase()}-slice-${i2}`\n    );\n    return !!elPath && elPath.attr(\"data:pieClicked\") === \"true\";\n  }\n  /**\n   * Band geometry for the hover outline of slice `i`: an annulus from the\n   * slice rim (plus the stroke and the configured clearance) outward, over the\n   * same angular extent the slice is actually drawn over, so it lines up with\n   * both slice edges even with `spacing` insetting them. Rounded into a pill\n   * when the band is thick enough for the fillets to fit.\n   * @param {number} i\n   * @returns {string | null}\n   */\n  getHoverOutlinePath(i2) {\n    const w2 = this.w;\n    const cfg = w2.config.plotOptions.pie.hoverOutline;\n    const elPath = w2.dom.Paper.findOne(\n      `.apexcharts-${this.chartType.toLowerCase()}-slice-${i2}`\n    );\n    if (!elPath) return null;\n    const angle = parseFloat(elPath.attr(\"data:angle\"));\n    if (!Number.isFinite(angle) || angle <= 0) return null;\n    const size = this.sliceSizes[i2];\n    const thickness = Number(cfg.size);\n    if (!Number.isFinite(size) || !Number.isFinite(thickness) || thickness <= 0) {\n      return null;\n    }\n    const { startDeg, spanDeg } = this.getSliceExtent({\n      me: this,\n      startAngle: parseFloat(elPath.attr(\"data:startAngle\")),\n      angle,\n      size\n    });\n    if (!(spanDeg > 0)) return null;\n    const rIn = size + (this.strokeWidth || 0) / 2 + (Number(cfg.gap) || 0);\n    const rOut = rIn + thickness;\n    const geo = {\n      cx: this.centerX,\n      cy: this.centerY,\n      rIn,\n      rOut,\n      a0: startDeg,\n      a1: startDeg + spanDeg,\n      spanDeg\n    };\n    const r2 = Math.min(thickness / 2, spanDeg * Math.PI / 180 / 2 * rIn);\n    return r2 > 0.5 ? roundedDonutSegmentPath(__spreadProps(__spreadValues({}, geo), { r: r2 })) : sharpDonutSegmentPath(geo);\n  }\n  /**\n   * @param {number} prevStartAngle\n   * @param {number} prevEndAngle\n   */\n  /**\n   * @param {number} prevStartAngle\n   * @param {number} prevEndAngle\n   * @param {number} [prevSize] - polarArea passes its previous slice radius,\n   *   so the pre-animation frame sits at the previous VALUE too, not just the\n   *   previous angles.\n   */\n  getChangedPath(prevStartAngle, prevEndAngle, prevSize) {\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: typeof prevSize === \"number\" ? prevSize : this.size\n      });\n    }\n    return path;\n  }\n  /**\n   * The angular extent a slice is actually drawn over: the raw start / span\n   * clamped so a full circle never overlaps itself, then inset by\n   * `plotOptions.pie.spacing`. Shared by getPiePath and the hover outline, so\n   * the band lines up with the slice edges instead of with the un-inset angles\n   * cached on the path node.\n   * @param {{me: any, startAngle: number, angle: number, size: number}} opts\n   * @returns {{startDeg: number, spanDeg: number, endDeg: number}}\n   */\n  getSliceExtent({ me, startAngle, angle, size }) {\n    const w2 = this.w;\n    let startDeg = startAngle;\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    let spanDeg = endDeg - startDeg;\n    const isSliceType = me.chartType === \"pie\" || me.chartType === \"donut\" || me.chartType === \"polarArea\";\n    const spacing = w2.config.plotOptions.pie.spacing;\n    if (isSliceType && spacing > 0 && spanDeg > 0) {\n      const rRef = me.chartType === \"donut\" ? (size + me.donutSize) / 2 : size;\n      const gapDeg = rRef > 0 ? spacing / rRef * (180 / Math.PI) : 0;\n      const inset = Math.min(gapDeg / 2, Math.max(0, spanDeg / 2 - 0.5));\n      startDeg += inset;\n      spanDeg -= 2 * inset;\n    }\n    endDeg = startDeg + spanDeg;\n    if (Math.ceil(endDeg) > this.fullAngle) endDeg -= this.fullAngle;\n    return { startDeg, spanDeg, endDeg };\n  }\n  /** @param {{me: any, startAngle: any, angle: any, size: any}} opts */\n  getPiePath({ me, startAngle, angle, size }) {\n    let path;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const { startDeg, spanDeg, endDeg } = this.getSliceExtent({\n      me,\n      startAngle,\n      angle,\n      size\n    });\n    const isSliceType = me.chartType === \"pie\" || me.chartType === \"donut\" || me.chartType === \"polarArea\";\n    const startRadians = Math.PI * (startDeg - 90) / 180;\n    const borderRadius = w2.config.plotOptions.pie.borderRadius;\n    if (borderRadius > 0 && isSliceType) {\n      const roundedPath = this.getRoundedSlicePath({\n        me,\n        startDeg,\n        spanDeg,\n        size,\n        borderRadius\n      });\n      if (roundedPath) return roundedPath;\n    }\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 = spanDeg > 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   * Build a slice path with rounded corners (plotOptions.pie.borderRadius).\n   *\n   * The generic roundPathCorners() only rounds line->line joins, but a slice\n   * corner is an arc<->line join, so we construct the fillets explicitly here:\n   * every corner is inset by the (clamped) radius along both the arc and the\n   * radial edge, and a quadratic Bezier with its control point at the original\n   * sharp corner bridges the two inset points. Donut slices round all four\n   * corners; pie / polarArea slices round the two outer corners and keep the\n   * center apex sharp.\n   *\n   * Returns null when the slice is too small to round meaningfully, so the\n   * caller can fall back to a sharp-corner path.\n   *\n   * @param {{me: any, startDeg: number, spanDeg: number, size: number, borderRadius: number}} opts\n   * @returns {string | null}\n   */\n  getRoundedSlicePath({ me, startDeg, spanDeg, size, borderRadius }) {\n    if (!(spanDeg > 0)) return null;\n    const D2R2 = Math.PI / 180;\n    const cx = me.centerX;\n    const cy = me.centerY;\n    const isDonut = me.chartType === \"donut\";\n    const rOut = size;\n    const rIn = isDonut ? me.donutSize : 0;\n    const spanRad = spanDeg * D2R2;\n    let r2 = borderRadius;\n    r2 = Math.min(r2, spanRad * rOut / 2);\n    if (isDonut) {\n      r2 = Math.min(r2, spanRad * rIn / 2);\n      r2 = Math.min(r2, (rOut - rIn) / 2);\n    } else {\n      r2 = Math.min(r2, rOut / 2);\n    }\n    if (!(r2 > 0.5)) return null;\n    const a0 = startDeg;\n    const a1 = startDeg + spanDeg;\n    if (isDonut) {\n      return roundedDonutSegmentPath({ cx, cy, rIn, rOut, a0, a1, r: r2, spanDeg });\n    }\n    return roundedPieSegmentPath({ cx, cy, rOut, a0, a1, r: r2, spanDeg });\n  }\n  /**\n   * @param {any} parent\n   */\n  drawPolarElements(parent) {\n    const w2 = 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 = w2.globals.radialSize;\n    const diff = circleSize / (len - 1);\n    for (let i2 = 0; i2 < len - 1; i2++) {\n      const circle = graphics.drawCircle(circleSize);\n      circle.attr({\n        cx: this.centerX,\n        cy: this.centerY,\n        fill: \"none\",\n        \"stroke-width\": w2.config.plotOptions.polarArea.rings.strokeWidth,\n        stroke: w2.config.plotOptions.polarArea.rings.strokeColor\n      });\n      if (w2.config.yaxis[0].show) {\n        const yLabel = helpers.drawYAxisTexts(\n          this.centerX,\n          this.centerY - circleSize + parseInt(w2.config.yaxis[0].labels.style.fontSize, 10) / 2,\n          i2,\n          yTexts[i2]\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 w2 = 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 = w2.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 = w2.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(w2);\n    } else {\n      if (w2.seriesData.series.length === 1) {\n        val = lbFormatter(w2.seriesData.series[0], w2);\n        name2 = w2.seriesData.seriesNames[0];\n      }\n    }\n    if (name2) {\n      name2 = dataLabelsConfig.name.formatter(\n        name2,\n        dataLabelsConfig.total.show,\n        w2\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 w2 = this.w;\n    let labelColor;\n    if (el) {\n      if (labelsConfig.name.color === void 0) {\n        labelColor = w2.globals.colors[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n      } else {\n        labelColor = labelsConfig.name.color;\n      }\n    } else {\n      if (w2.seriesData.series.length > 1 && labelsConfig.total.show) {\n        labelColor = labelsConfig.total.color;\n      }\n    }\n    const elLabel = w2.dom.baseEl.querySelector(\".apexcharts-datalabel-label\");\n    const elValue = w2.dom.baseEl.querySelector(\".apexcharts-datalabel-value\");\n    const lbFormatter = labelsConfig.value.formatter;\n    val = lbFormatter(val, w2);\n    if (!el && typeof labelsConfig.total.formatter === \"function\") {\n      val = labelsConfig.total.formatter(w2);\n    }\n    const isTotal = name2 === labelsConfig.total.label;\n    name2 = !this.donutDataLabels.total.label ? \"\" : labelsConfig.name.formatter(name2, isTotal, w2);\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 w2 = this.w;\n    const val = el.getAttribute(\"data:value\");\n    const name2 = w2.seriesData.seriesNames[parseInt(el.parentNode.getAttribute(\"rel\"), 10) - 1];\n    if (w2.seriesData.series.length > 1) {\n      this.printInnerLabels(dataLabelsConfig, name2, val, el);\n    }\n    const dataLabelsGroup = w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const spokeConfig = w2.config.plotOptions.polarArea.spokes;\n    if (spokeConfig.strokeWidth === 0) return;\n    const spokes = [];\n    const angleDivision = 360 / w2.seriesData.series.length;\n    for (let i2 = 0; i2 < w2.seriesData.series.length; i2++) {\n      spokes.push(\n        Utils$1.polarToCartesian(\n          this.centerX,\n          this.centerY,\n          w2.globals.radialSize,\n          w2.config.plotOptions.pie.startAngle + angleDivision * i2\n        )\n      );\n    }\n    spokes.forEach((p2, i2) => {\n      const line = graphics.drawLine(\n        p2.x,\n        p2.y,\n        this.centerX,\n        this.centerY,\n        Array.isArray(spokeConfig.connectorColors) ? spokeConfig.connectorColors[i2] : spokeConfig.connectorColors\n      );\n      parent.add(line);\n    });\n  }\n  revertDataLabelsInner() {\n    const w2 = this.w;\n    if (this.donutDataLabels.show) {\n      const dataLabelsGroup = w2.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 = w2.dom.Paper.findOne(\n        \".apexcharts-radialbar, .apexcharts-pie\"\n      );\n      elPie.add(dataLabels);\n    }\n  }\n}\nconst RADAR_HIT_AREA_SIZE = 5;\nclass Radar {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\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 = w2.globals.stroke.colors !== void 0 ? w2.globals.stroke.colors : w2.globals.colors;\n    this.defaultSize = w2.globals.svgHeight < w2.globals.svgWidth ? w2.layout.gridHeight : w2.layout.gridWidth;\n    this.isLog = w2.config.yaxis[0].logarithmic;\n    this.logBase = w2.config.yaxis[0].logBase;\n    this.coreUtils = new CoreUtils(this.w);\n    this.maxValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, w2.globals.maxY, 0) : w2.globals.maxY;\n    this.minValue = this.isLog ? this.coreUtils.getLogVal(this.logBase, this.w.globals.minY, 0) : w2.globals.minY;\n    this.polygons = w2.config.plotOptions.radar.polygons;\n    this.strokeWidth = w2.config.stroke.show ? w2.config.stroke.width : 0;\n    this.size = this.defaultSize / 2.1 - this.strokeWidth - w2.config.chart.dropShadow.blur;\n    if (w2.config.xaxis.labels.show) {\n      this.size = this.size - w2.layout.xAxisLabelsWidth / 1.75;\n    }\n    if (w2.config.plotOptions.radar.size !== void 0) {\n      this.size = w2.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 w2 = 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[w2.globals.maxValsInArrayIndex].length;\n    }\n    this.disAngle = Math.PI * 2 / this.dataPointsLen;\n    const halfW = w2.layout.gridWidth / 2;\n    const halfH = w2.layout.gridHeight / 2;\n    const translateX = halfW + w2.config.plotOptions.radar.offsetX;\n    const translateY = halfH + w2.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((s2, i2) => {\n      const longestSeries = s2.length === w2.globals.dataPoints;\n      const elSeries = this.graphics.group().attr({\n        class: `apexcharts-series`,\n        \"data:longestSeries\": longestSeries,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[i2]),\n        rel: i2 + 1,\n        \"data:realIndex\": i2\n      });\n      this.dataRadiusOfPercent[i2] = [];\n      this.dataRadius[i2] = [];\n      this.angleArr[i2] = [];\n      s2.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[i2][j] = dv / range;\n        this.dataRadius[i2][j] = this.dataRadiusOfPercent[i2][j] * this.size;\n        this.angleArr[i2][j] = j * this.disAngle;\n      });\n      dataPointsPos = this.getDataPointsPos(\n        this.dataRadius[i2],\n        this.angleArr[i2]\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\": i2\n      });\n      w2.globals.delayedElements.push({\n        el: elPointsMain.node,\n        index: i2\n      });\n      const defaultRenderedPathOptions = {\n        i: i2,\n        realIndex: i2,\n        animationDelay: i2,\n        initialSpeed: w2.config.chart.animations.speed,\n        dataChangeSpeed: w2.config.chart.animations.dynamicAnimation.speed,\n        className: `apexcharts-radar`,\n        shouldClipToGrid: false,\n        bindEventsOnPaths: false,\n        stroke: w2.globals.stroke.colors[i2],\n        strokeLineCap: w2.config.stroke.lineCap\n      };\n      let pathFrom = null;\n      if (w2.globals.previousPaths.length > 0) {\n        pathFrom = this.getPreviousPath(i2);\n      }\n      for (let p2 = 0; p2 < paths.linePathsTo.length; p2++) {\n        const renderedLinePath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.linePathsFrom[p2] : pathFrom,\n          pathTo: paths.linePathsTo[p2],\n          strokeWidth: Array.isArray(this.strokeWidth) ? this.strokeWidth[i2] : this.strokeWidth,\n          fill: \"none\",\n          drawShadow: false\n        }));\n        elSeries.add(renderedLinePath);\n        const pathFill = fill.fillPath({\n          seriesNumber: i2\n        });\n        const renderedAreaPath = this.graphics.renderPaths(__spreadProps(__spreadValues({}, defaultRenderedPathOptions), {\n          pathFrom: pathFrom === null ? paths.areaPathsFrom[p2] : pathFrom,\n          pathTo: paths.areaPathsTo[p2],\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 (w2.config.chart.dropShadow.enabled) {\n          const filters = new Filters(this.w);\n          const shadow = w2.config.chart.dropShadow;\n          filters.dropShadow(\n            renderedAreaPath,\n            Object.assign({}, shadow, { noUserSpaceOnUse: true }),\n            i2\n          );\n        }\n        elSeries.add(renderedAreaPath);\n      }\n      s2.forEach((sj, j) => {\n        const markers = new Markers(this.w, this.ctx);\n        const opts = markers.getMarkerConfig({\n          cssClass: \"apexcharts-marker\",\n          seriesIndex: i2,\n          dataPointIndex: j\n        });\n        if (!opts.pSize) {\n          opts.pSize = RADAR_HIT_AREA_SIZE;\n          opts.pointFillColor = \"transparent\";\n          opts.pointStrokeColor = \"transparent\";\n          opts.pointStrokeWidth = 0;\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\", i2);\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 = w2.config.dataLabels;\n        if (dataLabelsConfig.enabled) {\n          const text = dataLabelsConfig.formatter(w2.seriesData.series[i2][j], {\n            seriesIndex: i2,\n            dataPointIndex: j,\n            w: w2\n          });\n          dataLabels.plotDataLabelsText({\n            x: dataPointsPos[j].x,\n            y: dataPointsPos[j].y,\n            text,\n            textAnchor: \"middle\",\n            i: i2,\n            j: i2,\n            // `j` above is the series index (kept for the color lookup), so\n            // pass the real data point index for per-point offsets\n            seriesIndex: i2,\n            dataPointIndex: j,\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 (w2.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 w2 = this.w;\n    const { parent } = opts;\n    const helpers = new CircularChartsHelpers(this.w);\n    const yaxisTexts = w2.globals.yAxisScale[0].result.reverse();\n    const layers = yaxisTexts.length;\n    const radiusSizes = [];\n    const layerDis = this.size / (layers - 1);\n    for (let i2 = 0; i2 < layers; i2++) {\n      radiusSizes[i2] = layerDis * i2;\n    }\n    radiusSizes.reverse();\n    const polygonStrings = [];\n    const lines = [];\n    radiusSizes.forEach((radiusSize, r2) => {\n      const polygon = Utils$1.getPolygonPos(radiusSize, this.dataPointsLen);\n      let string = \"\";\n      polygon.forEach((p2, i2) => {\n        if (r2 === 0) {\n          const line = this.graphics.drawLine(\n            p2.x,\n            p2.y,\n            0,\n            0,\n            Array.isArray(this.polygons.connectorColors) ? this.polygons.connectorColors[i2] : this.polygons.connectorColors\n          );\n          lines.push(line);\n        }\n        if (i2 === 0) {\n          this.yaxisLabelsTextsPos.push({\n            x: p2.x,\n            y: p2.y\n          });\n        }\n        string += p2.x + \",\" + p2.y + \" \";\n      });\n      polygonStrings.push(string);\n    });\n    polygonStrings.forEach((p2, i2) => {\n      const strokeColors = this.polygons.strokeColors;\n      const strokeWidth = this.polygons.strokeWidth;\n      const polygon = this.graphics.drawPolygon(\n        p2,\n        Array.isArray(strokeColors) ? strokeColors[i2] : strokeColors,\n        Array.isArray(strokeWidth) ? strokeWidth[i2] : strokeWidth,\n        w2.globals.radarPolygons.fill.colors[i2]\n      );\n      parent.add(polygon);\n    });\n    lines.forEach((l2) => {\n      parent.add(l2);\n    });\n    if (w2.config.yaxis[0].show) {\n      this.yaxisLabelsTextsPos.forEach(\n        (p2, i2) => {\n          const yText = helpers.drawYAxisTexts(p2.x, p2.y, i2, yaxisTexts[i2]);\n          this.yaxisLabels.add(yText);\n        }\n      );\n    }\n  }\n  drawXAxisTexts() {\n    const w2 = this.w;\n    const xaxisLabelsConfig = w2.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    w2.labelData.labels.forEach((label, i2) => {\n      const formatter = w2.config.xaxis.labels.formatter;\n      const dataLabels = new DataLabels(this.w, this.ctx);\n      if (polygonPos[i2]) {\n        const textPos = this.getTextPos(polygonPos[i2], this.size);\n        const text = formatter(label, {\n          seriesIndex: -1,\n          dataPointIndex: i2,\n          w: w2\n        });\n        const dataLabelText = dataLabels.plotDataLabelsText({\n          x: textPos.newX,\n          y: textPos.newY,\n          text,\n          textAnchor: textPos.textAnchor,\n          i: i2,\n          j: i2,\n          parent: elXAxisWrap,\n          className: \"apexcharts-xaxis-label\",\n          color: Array.isArray(xaxisLabelsConfig.style.colors) && xaxisLabelsConfig.style.colors[i2] ? xaxisLabelsConfig.style.colors[i2] : \"#a8a8a8\",\n          dataLabelsConfig: __spreadValues({\n            textAnchor: textPos.textAnchor,\n            dropShadow: { enabled: false }\n          }, xaxisLabelsConfig),\n          offsetCorrection: false\n        });\n        dataLabelText.on(\"click\", (e2) => {\n          if (typeof w2.config.chart.events.xAxisLabelClick === \"function\") {\n            const opts = Object.assign({}, w2, {\n              labelIndex: i2\n            });\n            w2.config.chart.events.xAxisLabelClick(e2, 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((p2, i2) => {\n        linePathTo += this.graphics.line(p2.x, p2.y);\n        areaPathTo += this.graphics.line(p2.x, p2.y);\n        if (i2 === 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 w2 = this.w;\n    let pathFrom = null;\n    for (let pp = 0; pp < w2.globals.previousPaths.length; pp++) {\n      const gpp = w2.globals.previousPaths[pp];\n      if (gpp.paths.length > 0 && parseInt(gpp.realIndex, 10) === parseInt(String(realIndex), 10)) {\n        if (typeof w2.globals.previousPaths[pp].paths[0] !== \"undefined\") {\n          pathFrom = w2.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(w2, ctx) {\n    super(w2, ctx);\n    this.ctx = ctx;\n    this.w = w2;\n    this.animBeginArr = [0];\n    this.animDur = 0;\n    this.startAngle = w2.config.plotOptions.radialBar.startAngle;\n    this.endAngle = w2.config.plotOptions.radialBar.endAngle;\n    this.totalAngle = Math.abs(\n      w2.config.plotOptions.radialBar.endAngle - w2.config.plotOptions.radialBar.startAngle\n    );\n    this.trackStartAngle = w2.config.plotOptions.radialBar.track.startAngle;\n    this.trackEndAngle = w2.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(w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const ret = graphics.group({\n      class: \"apexcharts-radialbar\"\n    });\n    if (w2.globals.noData) return ret;\n    const elSeries = graphics.group();\n    const centerY = this.defaultSize / 2;\n    const centerX = w2.layout.gridWidth / 2;\n    let size = this.defaultSize / 2.05;\n    if (!w2.config.chart.sparkline.enabled) {\n      size = size - w2.config.stroke.width - w2.config.chart.dropShadow.blur;\n    }\n    const colorArr = w2.globals.fill.colors;\n    const rb = w2.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 && !w2.globals.dataChanged && !w2.globals.resized;\n      if (isInitialMount && Environment.isBrowser() && w2.globals.shouldAnimate) {\n        const ticksNode = elTicks.node;\n        ticksNode.style.opacity = \"0\";\n        ticksNode.style.transition = \"opacity 280ms ease-out\";\n        const sweepDur = w2.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 (w2.config.plotOptions.radialBar.startAngle < 0) {\n      totalAngle = this.totalAngle;\n    }\n    const angleRatio = (360 - totalAngle) / 360;\n    w2.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      w2.globals.radialSize += offset * angleRatio;\n    }\n    elSeries.add(elG.g);\n    if (w2.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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const g2 = 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 i2 = 0; i2 < opts.series.length; i2++) {\n      const elRadialBarTrack = graphics.group({\n        class: \"apexcharts-radialbar-track apexcharts-track\"\n      });\n      g2.add(elRadialBarTrack);\n      elRadialBarTrack.attr({\n        rel: i2 + 1\n      });\n      opts.size = opts.size - strokeWidth - this.margin;\n      const trackConfig = w2.config.plotOptions.radialBar.track;\n      const pathFill = fill.fillPath({\n        seriesNumber: 0,\n        size: opts.size,\n        fillColors: Array.isArray(trackConfig.background) ? trackConfig.background[i2] : 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-\" + i2);\n      this.animatePaths(elPath, {\n        centerX: opts.centerX,\n        centerY: opts.centerY,\n        endAngle,\n        startAngle,\n        size: opts.size,\n        i: i2,\n        totalItems: 2,\n        animBeginArr: 0,\n        dur: 0,\n        isTrack: true\n      });\n    }\n    return g2;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  drawArcs(opts) {\n    var _a;\n    const w2 = 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 g2 = graphics.group();\n    const strokeWidth = this.getStrokeWidth(opts);\n    opts.size = opts.size - strokeWidth / 2;\n    let hollowFillID = w2.config.plotOptions.radialBar.hollow.background;\n    const hollowSize = opts.size - strokeWidth * opts.series.length - this.margin * opts.series.length - strokeWidth * parseInt(w2.config.plotOptions.radialBar.track.strokeWidth, 10) / 100 / 2;\n    const hollowRadius = hollowSize - w2.config.plotOptions.radialBar.hollow.margin;\n    if (w2.config.plotOptions.radialBar.hollow.image !== void 0) {\n      hollowFillID = this.drawHollowImage(opts, g2, 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 (w2.config.plotOptions.radialBar.hollow.dropShadow.enabled) {\n      const shadow = w2.config.plotOptions.radialBar.hollow.dropShadow;\n      filters.dropShadow(elHollow, shadow);\n    }\n    let shown = 1;\n    if (!this.radialDataLabels.total.show && w2.seriesData.series.length > 1) {\n      shown = 0;\n    }\n    let dataLabels = null;\n    if (this.radialDataLabels.show) {\n      const dataLabelsGroup = w2.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 (w2.config.plotOptions.radialBar.hollow.position === \"back\") {\n      g2.add(elHollow);\n      if (dataLabels) {\n        g2.add(dataLabels);\n      }\n    }\n    let reverseLoop = false;\n    if (w2.config.plotOptions.radialBar.inverseOrder) {\n      reverseLoop = true;\n    }\n    const morphActive = ((_a = this.ctx.morphTypeChange) == null ? void 0 : _a.isActive()) === true;\n    for (let i2 = reverseLoop ? opts.series.length - 1 : 0; reverseLoop ? i2 >= 0 : i2 < opts.series.length; reverseLoop ? i2-- : i2++) {\n      const elRadialBarArc = graphics.group({\n        class: `apexcharts-series apexcharts-radial-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[i2])\n      });\n      g2.add(elRadialBarArc);\n      elRadialBarArc.attr({\n        rel: i2 + 1,\n        \"data:realIndex\": i2\n      });\n      Series.addCollapsedClassToSeries(this.w, elRadialBarArc, i2);\n      opts.size = opts.size - strokeWidth - this.margin;\n      const pathFill = fill.fillPath({\n        seriesNumber: i2,\n        size: opts.size,\n        value: opts.series[i2]\n      });\n      const startAngle = this.startAngle;\n      let prevStartAngle;\n      const rb = w2.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 = (v2) => {\n        const clamped = Math.min(Math.max(v2, domainMin), domainMax);\n        return Math.max(0, (clamped - domainMin) / domainSpan);\n      };\n      const dataValue = valueToFraction(Utils$1.negToZero(opts.series[i2]));\n      let endAngle = Math.round(this.totalAngle * dataValue) + this.startAngle;\n      let prevEndAngle;\n      if (w2.globals.dataChanged) {\n        prevStartAngle = this.startAngle;\n        prevEndAngle = Math.round(\n          this.totalAngle * valueToFraction(Utils$1.negToZero(w2.globals.previousPaths[i2]))\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(w2.config.stroke.dashArray) ? w2.config.stroke.dashArray[i2] : w2.config.stroke.dashArray;\n      const morphFrom = morphActive ? this.ctx.morphTypeChange.getInitialPathFor(i2, 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: w2.config.fill.opacity,\n        classes: \"apexcharts-radialbar-area apexcharts-radialbar-slice-\" + i2,\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[i2],\n        \"data:cx\": radialArcCenter.x,\n        \"data:cy\": radialArcCenter.y\n      });\n      if (w2.config.chart.dropShadow.enabled) {\n        const shadow = w2.config.chart.dropShadow;\n        filters.dropShadow(elPath, shadow, i2);\n      }\n      filters.setSelectionFilter(elPath, 0, i2);\n      this.addListeners(elPath, this.radialDataLabels);\n      elRadialBarArc.add(elPath);\n      elPath.attr({\n        index: 0,\n        j: i2\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(w2.seriesData.seriesNames[i2], {\n          seriesIndex: i2,\n          w: w2\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 ? w2.globals.colors[i2] : w2.config.chart.foreColor;\n        if (!textColor) {\n          textColor = w2.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: i2 + 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 && !w2.globals.resized && !w2.globals.dataChanged) {\n        dur = w2.config.chart.animations.speed;\n      }\n      if (w2.globals.dataChanged) {\n        dur = w2.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: i2,\n          totalItems: 2,\n          animBeginArr: this.animBeginArr,\n          dur,\n          shouldSetPrevPaths: true\n        });\n      }\n    }\n    return {\n      g: g2,\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 t2 = (clamped - min) / (safeMax - min);\n    return this.startAngle + t2 * (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, r2, startAngle, endAngle) {\n    const start = Utils$1.polarToCartesian(cx, cy, r2, endAngle);\n    const end = Utils$1.polarToCartesian(cx, cy, r2, startAngle);\n    const sweep = endAngle - startAngle;\n    const largeArc = Math.abs(sweep) > 180 ? 1 : 0;\n    return `M ${start.x} ${start.y} A ${r2} ${r2} 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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w2.config.plotOptions.radialBar;\n    const bands = rb.bands || [];\n    const g2 = 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 b2 = 0; b2 < bands.length; b2++) {\n      const band = bands[b2];\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(b2));\n      g2.add(elBand);\n    }\n    return g2;\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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w2.config.plotOptions.radialBar;\n    const ticks = rb.ticks;\n    const g2 = 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      g2.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        g2.add(elText);\n      }\n    };\n    for (let m2 = 0; m2 < majorCount; m2++) {\n      const t2 = m2 / (majorCount - 1);\n      const value = min + t2 * (max - min);\n      drawTickAt(value, ticks.major || {}, true);\n      if (m2 < majorCount - 1 && minorCount > 0) {\n        for (let n2 = 1; n2 <= minorCount; n2++) {\n          const tMinor = (m2 + n2 / (minorCount + 1)) / (majorCount - 1);\n          const minorValue = min + tMinor * (max - min);\n          drawTickAt(minorValue, ticks.minor || {}, false);\n        }\n      }\n    }\n    return g2;\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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    const rb = w2.config.plotOptions.radialBar;\n    const cfg = rb.needle || {};\n    const g2 = graphics.group({ class: \"apexcharts-gauge-needle\" });\n    if (!opts.series || opts.series.length === 0) return g2;\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    g2.add(elNeedle);\n    const value = Number(opts.series[0]);\n    const targetAngle = this._angleAtValue(value);\n    const isInitialMount = this.initialAnim && !w2.globals.dataChanged && !w2.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() && w2.globals.shouldAnimate && (isInitialMount || w2.globals.dataChanged);\n    if (shouldAnimate && fromAngle !== targetAngle) {\n      const node = g2.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 = w2.config.chart.animations.dynamicAnimation) == null ? void 0 : _e.speed) || w2.config.chart.animations.speed || 800;\n      const c1 = 1.70158;\n      const c3 = c1 + 1;\n      const easeOutBack2 = (t2) => 1 + c3 * Math.pow(t2 - 1, 3) + c1 * Math.pow(t2 - 1, 2);\n      const easeOutCubic2 = (t2) => 1 - Math.pow(1 - t2, 3);\n      const ease = isInitialMount ? easeOutBack2 : easeOutCubic2;\n      if (w2.globals.radialNeedleRAF != null) {\n        BrowserAPIs.cancelAnimationFrame(w2.globals.radialNeedleRAF);\n        w2.globals.radialNeedleRAF = null;\n      }\n      const startAt = performance.now();\n      const step = (now) => {\n        if (this.w.globals.isDestroyed) {\n          w2.globals.radialNeedleRAF = null;\n          return;\n        }\n        const t2 = Math.max(0, Math.min(1, (now - startAt) / speed));\n        const angle = fromAngle + (targetAngle - fromAngle) * ease(t2);\n        node.setAttribute(\"transform\", `rotate(${angle})`);\n        if (t2 < 1) {\n          w2.globals.radialNeedleRAF = BrowserAPIs.requestAnimationFrame(step);\n        } else {\n          w2.globals.radialNeedleRAF = null;\n        }\n      };\n      w2.globals.radialNeedleRAF = BrowserAPIs.requestAnimationFrame(step);\n    } else {\n      g2.attr({\n        \"transform-origin\": `${cx} ${cy}`,\n        transform: `rotate(${targetAngle})`\n      });\n    }\n    return g2;\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, g2, hollowSize, hollowFillID) {\n    const w2 = this.w;\n    const fill = new Fill(this.w);\n    const randID = Utils$1.randomId();\n    const hollowFillImg = w2.config.plotOptions.radialBar.hollow.image;\n    if (w2.config.plotOptions.radialBar.hollow.imageClipped) {\n      fill.clippedImgArea({\n        width: hollowSize,\n        height: hollowSize,\n        image: hollowFillImg,\n        patternID: `pattern${w2.globals.cuid}${randID}`\n      });\n      hollowFillID = `url(#pattern${w2.globals.cuid}${randID})`;\n    } else {\n      const imgWidth = w2.config.plotOptions.radialBar.hollow.imageWidth;\n      const imgHeight = w2.config.plotOptions.radialBar.hollow.imageHeight;\n      if (imgWidth === void 0 && imgHeight === void 0) {\n        const image = w2.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function(loader) {\n            this.move(\n              opts.centerX - loader.width / 2 + w2.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - loader.height / 2 + w2.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n          }\n        );\n        g2.add(image);\n      } else {\n        const image = w2.dom.Paper.image(\n          hollowFillImg,\n          /** @this {any} */\n          function() {\n            this.move(\n              opts.centerX - imgWidth / 2 + w2.config.plotOptions.radialBar.hollow.imageOffsetX,\n              opts.centerY - imgHeight / 2 + w2.config.plotOptions.radialBar.hollow.imageOffsetY\n            );\n            this.size(imgWidth, imgHeight);\n          }\n        );\n        g2.add(image);\n      }\n    }\n    return hollowFillID;\n  }\n  /**\n   * @param {Record<string, any>} opts\n   */\n  getStrokeWidth(opts) {\n    const w2 = this.w;\n    return opts.size * (100 - parseInt(w2.config.plotOptions.radialBar.hollow.size, 10)) / 100 / (opts.series.length + 1) - this.margin;\n  }\n  /**\n   * @param {Event} e\n   */\n  onBarLabelClick(e2) {\n    var _a;\n    const target = (\n      /** @type {Element} */\n      e2.target\n    );\n    const seriesIndex = parseInt((_a = target.getAttribute(\"rel\")) != null ? _a : \"\", 10) - 1;\n    const legendClick = this.barLabels.onClick;\n    const w2 = this.w;\n    if (legendClick) {\n      legendClick(w2.seriesData.seriesNames[seriesIndex], { w: w2, 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 w2 = this.w;\n    const graphics = new Graphics(this.w);\n    this.rangeBarOptions = this.w.config.plotOptions.rangeBar;\n    this.series = series;\n    this.seriesRangeStart = w2.rangeData.seriesRangeStart;\n    this.seriesRangeEnd = w2.rangeData.seriesRangeEnd;\n    this.barHelpers.initVariables(series);\n    const ret = graphics.group({\n      class: \"apexcharts-rangebar-series apexcharts-plot-series\"\n    });\n    for (let i2 = 0; i2 < series.length; i2++) {\n      let x, y;\n      const realIndex = w2.globals.comboCharts ? (\n        /** @type {any} */\n        seriesIndex[i2]\n      ) : i2;\n      const { columnGroupIndex } = this.barHelpers.getGroupIndex(realIndex);\n      const elSeries = graphics.group({\n        class: `apexcharts-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[realIndex]),\n        rel: i2 + 1,\n        \"data:realIndex\": realIndex\n      });\n      Series.addCollapsedClassToSeries(this.w, elSeries, realIndex);\n      if (series[i2].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        w2.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 < w2.globals.dataPoints; j++) {\n        const strokeWidth = this.barHelpers.getStrokeWidth(i2, j, realIndex);\n        const y1 = this.seriesRangeStart[i2][j];\n        const y2 = this.seriesRangeEnd[i2][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 (w2.config.plotOptions.bar.rangeBarGroupRows) {\n          seriesLen = 1;\n        }\n        if (typeof /** @type {Record<string,any>} */\n        ((_e = w2.config.series[i2].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 = w2.config.series[i2].data) == null ? void 0 : _f[j]) == null ? void 0 : _g.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i: i2,\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: i2, j, realIndex },\n            barHeight,\n            barYPosition,\n            zeroW,\n            yDivision,\n            y1,\n            y2\n          }, params));\n          barWidth = paths.barWidth;\n        } else {\n          if (w2.axisFlags.isXNumeric) {\n            x = (w2.seriesData.seriesX[i2][j] - w2.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 = w2.config.series[i2].data) == null ? void 0 : _h[j]) == null ? void 0 : _i.x\n          ) {\n            const positions = this.detectOverlappingBars({\n              i: i2,\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: i2, 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          i2,\n          j,\n          realIndex\n        );\n        this.renderSeries({\n          realIndex,\n          pathFill: pathFill.color,\n          lineFill: pathFill.useRangeColor ? pathFill.color : w2.globals.stroke.colors[realIndex],\n          j,\n          i: i2,\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: i2,\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 w2 = this.w;\n    let overlaps = [];\n    const rangeName = (_b = (_a = w2.globals.seriesRangeName) == null ? void 0 : _a[i2]) == null ? void 0 : _b[j];\n    const x = (\n      /** @type {Record<string,any>} */\n      (_d = (_c = w2.config.series[i2].data) == null ? void 0 : _c[j]) == null ? void 0 : _d.x\n    );\n    const labelX = Array.isArray(x) ? x.join(\" \") : x;\n    const rowIndex = w2.labelData.labels.map((_) => Array.isArray(_) ? _.join(\" \") : _).indexOf(labelX);\n    const overlappedIndex = w2.rangeData.seriesRange[i2].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 (w2.config.plotOptions.bar.rangeBarGroupRows) {\n        barYPosition = srty + yDivision * rowIndex;\n      } else {\n        barYPosition = srty + barHeight * this.visibleI + yDivision * rowIndex;\n      }\n      if (overlappedIndex > -1 && !w2.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w2.rangeData.seriesRange[i2][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 && !w2.labelData.timescaleLabels.length) {\n        if (w2.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 && !w2.config.plotOptions.bar.rangeBarOverlap) {\n        overlaps = Array.from(\n          /** @type {any} */\n          w2.rangeData.seriesRange[i2][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 w2 = this.w;\n    const { i: i2, 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[i2]) == null ? void 0 : _a[j]) === \"undefined\" || /** @type {any} */\n    ((_b = this.series[i2]) == 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: w2\n    });\n    if (!w2.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        realIndex,\n        j,\n        translationsIndex\n      ),\n      barXPosition\n    };\n  }\n  /**\n   * @param {number} val\n   */\n  preventBarOverflow(val) {\n    const w2 = this.w;\n    if (val < 0) {\n      val = 0;\n    }\n    if (val > w2.layout.gridWidth) {\n      val = w2.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 w2 = 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: w2\n    });\n    if (!w2.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(i2, j) {\n    const w2 = this.w;\n    return {\n      start: w2.rangeData.seriesRangeStart[i2][j],\n      end: w2.rangeData.seriesRangeEnd[i2][j]\n    };\n  }\n}\nfunction normalize(data, area) {\n  let sum = 0;\n  for (let i2 = 0; i2 < data.length; i2++) {\n    sum += data[i2];\n  }\n  const multiplier = area / sum;\n  const result = new Array(data.length);\n  for (let i2 = 0; i2 < data.length; i2++) {\n    result[i2] = data[i2] * 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 i2 = 0; i2 < rowLen; i2++) {\n      const h2 = row[i2] / areaWidth;\n      coords.push([xoffset, subY, xoffset + areaWidth, subY + h2]);\n      subY += h2;\n    }\n  } else {\n    const areaHeight = rowSum / width;\n    let subX = xoffset;\n    for (let i2 = 0; i2 < rowLen; i2++) {\n      const w2 = row[i2] / areaHeight;\n      coords.push([subX, yoffset, subX + w2, yoffset + areaHeight]);\n      subX += w2;\n    }\n  }\n}\nfunction squarify(data, xoffset, yoffset, width, height) {\n  const coords = [];\n  const n2 = data.length;\n  if (n2 === 0) return coords;\n  const row = new Array(n2);\n  let rowLen = 0;\n  let rowSum = 0;\n  let rowMin = Infinity;\n  let rowMax = -Infinity;\n  let i2 = 0;\n  while (i2 < n2) {\n    const length = Math.min(width, height);\n    const val = data[i2];\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      i2++;\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 n2 = data.length;\n  const sums = new Array(n2);\n  for (let i2 = 0; i2 < n2; i2++) {\n    let s2 = 0;\n    const series = data[i2];\n    for (let j = 0; j < series.length; j++) {\n      s2 += series[j];\n    }\n    sums[i2] = s2;\n  }\n  const seriesRects = squarify(\n    normalize(sums, width * height),\n    0,\n    0,\n    width,\n    height\n  );\n  const results = new Array(n2);\n  for (let i2 = 0; i2 < n2; i2++) {\n    const rect = seriesRects[i2];\n    const rx = rect[0];\n    const ry = rect[1];\n    const rw = rect[2] - rx;\n    const rh = rect[3] - ry;\n    results[i2] = squarify(\n      normalize(data[i2], rw * rh),\n      rx,\n      ry,\n      rw,\n      rh\n    );\n  }\n  return results;\n}\nfunction computeArea(node) {\n  const kids = node.children;\n  if (kids && kids.length) {\n    let s2 = 0;\n    for (let i2 = 0; i2 < kids.length; i2++) {\n      s2 += computeArea(kids[i2]);\n    }\n    node._area = s2;\n    return s2;\n  }\n  const v2 = Number(node.value);\n  const a2 = isNaN(v2) ? 0 : Math.abs(v2);\n  node._area = a2;\n  return a2;\n}\nfunction layoutLevel(nodes, xoffset, yoffset, width, height, depth, padding, header) {\n  const n2 = nodes.length;\n  if (n2 === 0 || width <= 0 || height <= 0) return;\n  const areas = new Array(n2);\n  let total = 0;\n  for (let i2 = 0; i2 < n2; i2++) {\n    areas[i2] = nodes[i2]._area;\n    total += areas[i2];\n  }\n  if (total <= 0) return;\n  const rects = squarify(\n    normalize(areas, width * height),\n    xoffset,\n    yoffset,\n    width,\n    height\n  );\n  for (let i2 = 0; i2 < n2; i2++) {\n    const node = nodes[i2];\n    const r2 = rects[i2];\n    if (!r2) continue;\n    node.rect = r2;\n    node.depth = depth;\n    const kids = node.children;\n    if (!kids || !kids.length) continue;\n    const rw = r2[2] - r2[0];\n    const rh = r2[3] - r2[1];\n    let pad = Math.max(0, padding(node, depth, rw, rh) || 0);\n    if (pad * 2 >= rw || pad * 2 >= rh) pad = 0;\n    let head = Math.max(0, header(node, depth, rw, rh) || 0);\n    if (head > 0 && rh - pad * 2 - head < head) head = 0;\n    node.headerHeight = head;\n    layoutLevel(\n      kids,\n      r2[0] + pad,\n      r2[1] + head + pad,\n      rw - pad * 2,\n      rh - head - pad * 2,\n      depth + 1,\n      padding,\n      header\n    );\n  }\n}\nfunction generateNested(nodes, width, height, opts = {}) {\n  if (!Array.isArray(nodes) || nodes.length === 0) return nodes || [];\n  const padding = opts.padding || (() => 0);\n  const header = opts.header || (() => 0);\n  for (let i2 = 0; i2 < nodes.length; i2++) computeArea(nodes[i2]);\n  layoutLevel(nodes, 0, 0, width, height, 0, padding, header);\n  return nodes;\n}\nconst TreemapSquared = { generate, generateNested };\nconst areaOf = (r2) => (r2[2] - r2[0]) * (r2[3] - r2[1]);\nclass TreemapChart {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\n    this.strokeWidth = this.w.config.stroke.width;\n    this.helpers = new TreemapHelpers(w2, ctx);\n    this.dynamicAnim = this.w.config.chart.animations.dynamicAnimation;\n    this.labels = [];\n    this.roots = [];\n    this.drawn = [];\n    this.nested = false;\n    this.showParents = false;\n    this.scale = null;\n    this._levelCache = null;\n    this._total = null;\n    this._avgLabelSize = null;\n    this._tooltipEl = null;\n    this._tipOwned = false;\n    this._morphLeafIndex = 0;\n  }\n  /**\n   * @param {any[]} series\n   */\n  draw(series) {\n    var _a;\n    const w2 = 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 (w2.globals.noData) return ret;\n    series.forEach((s2) => {\n      s2.map((v2) => {\n        return Math.abs(v2);\n      });\n    });\n    this.negRange = this.helpers.checkColorRange();\n    w2.config.series.forEach((s2, i2) => {\n      s2.data.forEach((l2) => {\n        if (!Array.isArray(this.labels[i2])) this.labels[i2] = [];\n        this.labels[i2].push(l2.x);\n      });\n    });\n    const tree = getTreemapRoots(w2);\n    this.nested = tree.nested;\n    this.roots = tree.roots;\n    this.scale = buildContinuousScale(w2);\n    const drawn = tree.roots.length === 1 ? tree.roots[0].children || [] : tree.roots;\n    this.drawn = drawn;\n    const parentsCfg = w2.config.plotOptions.treemap.parents;\n    this.showParents = parentsCfg.show === true || parentsCfg.show !== false && this.nested;\n    const focus = this._resolveFocus(drawn);\n    const layoutRoots = focus ? [focus] : drawn;\n    TreemapSquared.generateNested(\n      layoutRoots,\n      w2.layout.gridWidth,\n      w2.layout.gridHeight,\n      {\n        padding: (node, depth, rw, rh) => this.showParents ? this._levelPadding(depth, rw, rh) : 0,\n        header: (node, depth, rw, rh) => this.showParents ? this._levelHeader(node, depth, rw, rh) : 0\n      }\n    );\n    const morphSrc = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange;\n    const morphActive = !!morphSrc && typeof morphSrc.isActive === \"function\" && morphSrc.isActive() && typeof morphSrc.getInitialPathAt === \"function\";\n    this._morphLeafIndex = 0;\n    const leavesBySeries = this._leavesBySeries(layoutRoots, w2.config.series.length);\n    const parentsBySeries = this.showParents ? this._parentsBySeries(layoutRoots, w2.config.series.length) : [];\n    leavesBySeries.forEach((node, i2) => {\n      var _a2;\n      const elSeries = graphics.group({\n        class: `apexcharts-series apexcharts-treemap-series`,\n        seriesName: Utils$1.escapeString(w2.seriesData.seriesNames[i2]),\n        rel: i2 + 1,\n        \"data:realIndex\": i2\n      });\n      graphics.setupEventDelegation(elSeries, \".apexcharts-treemap-rect\");\n      if (w2.config.chart.dropShadow.enabled) {\n        const shadow = w2.config.chart.dropShadow;\n        const filters = new Filters(this.w);\n        filters.dropShadow(ret, shadow, i2);\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      if (this.showParents) {\n        (parentsBySeries[i2] || []).forEach((p2) => {\n          this._drawParent(elSeries, p2, i2);\n        });\n      }\n      const animCfg = w2.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 {any} leaf @param {number} k */\n          (leaf, k) => ({ j: k, area: leaf.rect ? areaOf(leaf.rect) : 0 })\n        ).sort(\n          /** @param {{j: number, area: number}} a @param {{j: number, area: number}} b */\n          (a2, b2) => b2.area - a2.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((leaf, k) => {\n        const r2 = leaf.rect;\n        if (!r2) return;\n        const j = leaf._di;\n        const x1 = r2[0];\n        const y1 = r2[1];\n        const x2 = r2[2];\n        const y2 = r2[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._leafColor(i2, j);\n        const color = colorProps.color;\n        const pathFill = fill.fillPath({\n          color,\n          seriesNumber: i2,\n          dataPointIndex: j\n        });\n        const morphFrom = morphActive ? this._morphSourceForLeaf(leaf) : null;\n        const elRect = morphFrom ? graphics.drawPath({\n          d: this._tilePath(x1, y1, x2, y2),\n          fill: \"#fff\",\n          stroke: w2.config.plotOptions.treemap.useFillColorAsStroke ? color : w2.globals.stroke.colors[i2],\n          strokeWidth: this.strokeWidth,\n          fillOpacity: 1\n        }) : graphics.drawRect(\n          x1,\n          y1,\n          x2 - x1,\n          y2 - y1,\n          w2.config.plotOptions.treemap.borderRadius,\n          \"#fff\",\n          1,\n          this.strokeWidth,\n          w2.config.plotOptions.treemap.useFillColorAsStroke ? color : w2.globals.stroke.colors[i2]\n        );\n        elRect.attr({\n          cx: x1,\n          cy: y1,\n          index: i2,\n          i: i2,\n          j,\n          width: x2 - x1,\n          height: y2 - y1,\n          fill: pathFill\n        });\n        elRect.node.classList.add(\"apexcharts-treemap-rect\");\n        elRect.node.setAttribute(\"data:key\", morphKey(leaf._key));\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 (morphFrom) {\n          this._morphTile(\n            elRect,\n            morphFrom,\n            this._tilePath(x1, y1, x2, y2),\n            this.ctx.morphTypeChange.getSpeed(),\n            i2,\n            j\n          );\n        } else if (w2.config.chart.animations.enabled && !w2.globals.dataChanged) {\n          let speed = 1;\n          if (!w2.globals.resized) {\n            speed = w2.config.chart.animations.speed;\n          }\n          this.animateTreemap(\n            elRect,\n            fromRect,\n            toRect,\n            speed,\n            // Ranked by draw order, not by data index — the cascade is about\n            // what is on screen.\n            cascadeDelays[k] || 0\n          );\n        }\n        if (w2.globals.dataChanged) {\n          let speed = 1;\n          if (this.dynamicAnim.enabled && w2.globals.shouldAnimate) {\n            speed = this.dynamicAnim.speed;\n            if (w2.globals.previousPaths[i2] && /** @type {Record<string,any>} */\n            w2.globals.previousPaths[i2][j] && /** @type {Record<string,any>} */\n            w2.globals.previousPaths[i2][j].rect) {\n              fromRect = /** @type {Record<string,any>} */\n              w2.globals.previousPaths[i2][j].rect;\n            }\n            this.animateTreemap(elRect, fromRect, toRect, speed);\n          }\n        }\n        let fontSize = this.getFontSize(r2);\n        if (w2.config.plotOptions.treemap.dataLabels.format === \"truncate\") {\n          fontSize = parseInt(String(w2.config.dataLabels.style.fontSize), 10);\n        }\n        let dataLabels = null;\n        if (w2.config.dataLabels.enabled && this._labelCanShow(fontSize, x2 - x1, y2 - y1)) {\n          let formattedText = w2.config.dataLabels.formatter(this.labels[i2][j], {\n            value: w2.seriesData.series[i2][j],\n            seriesIndex: i2,\n            dataPointIndex: j,\n            w: w2\n          });\n          if (w2.config.plotOptions.treemap.dataLabels.format === \"truncate\") {\n            formattedText = this.truncateLabels(\n              String(formattedText),\n              fontSize,\n              x1,\n              y1,\n              x2,\n              y2\n            );\n          }\n          if (w2.seriesData.series[i2][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: i2,\n              j,\n              colorProps,\n              fontSize,\n              series\n            });\n          }\n          if (w2.config.dataLabels.enabled && dataLabels) {\n            this.rotateToFitLabel(\n              dataLabels,\n              fontSize,\n              formattedText,\n              x1,\n              y1,\n              x2,\n              y2\n            );\n          }\n        }\n        elSeries.add(elRect);\n        if (dataLabels !== null) {\n          elSeries.add(dataLabels);\n        }\n      });\n      const seriesTitle = w2.config.plotOptions.treemap.seriesTitle;\n      if (!this.showParents && w2.config.series.length > 1 && seriesTitle && seriesTitle.show) {\n        const sName = (\n          /** @type {Record<string,any>} */\n          w2.config.series[i2].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 || w2.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 + ((_a2 = textSize == null ? void 0 : textSize.height) != null ? _a2 : 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    this._renderBreadcrumb();\n    return ret;\n  }\n  // ----------------------------------------------------------------- levels\n  /**\n   * Per-level config: `plotOptions.treemap.parents` is the base, and\n   * `plotOptions.treemap.levels[depth]` overrides it. Depth 0 is the outermost\n   * group actually drawn (the series, unless a single series was unwrapped).\n   * @param {number} depth\n   * @returns {any}\n   */\n  _levelCfg(depth) {\n    if (!this._levelCache) this._levelCache = [];\n    if (this._levelCache[depth]) return this._levelCache[depth];\n    const tm = this.w.config.plotOptions.treemap;\n    const base = tm.parents || {};\n    const lvl = (tm.levels || [])[depth] || {};\n    const merged = __spreadProps(__spreadValues(__spreadValues({}, base), lvl), {\n      header: __spreadProps(__spreadValues(__spreadValues({}, base.header || {}), lvl.header || {}), {\n        style: __spreadValues(__spreadValues({}, (base.header || {}).style || {}), (lvl.header || {}).style || {})\n      }),\n      hover: __spreadValues(__spreadValues({}, base.hover || {}), lvl.hover || {})\n    });\n    this._levelCache[depth] = merged;\n    return merged;\n  }\n  /**\n   * The inset between a parent's edge and its children, at this depth.\n   * @param {number} depth\n   * @param {number} _rw\n   * @param {number} _rh\n   * @returns {number}\n   */\n  _levelPadding(depth, _rw, _rh) {\n    const cfg = this._levelCfg(depth);\n    return Number(cfg.padding) || 0;\n  }\n  /**\n   * The header strip height at this depth, or 0 when the tile is too small to\n   * carry one. The geometry library clamps against its own box; this is the\n   * legibility rule, which needs the font size and so lives here.\n   * @param {any} node\n   * @param {number} depth\n   * @param {number} rw\n   * @param {number} rh\n   * @returns {number}\n   */\n  _levelHeader(node, depth, rw, rh) {\n    const cfg = this._levelCfg(depth);\n    const header = cfg.header || {};\n    if (header.show === false) return 0;\n    const h2 = Number(header.height);\n    if (!Number.isFinite(h2) || h2 <= 0) return 0;\n    const minWidth = Number(header.minWidth) || 40;\n    if (rw < minWidth) return 0;\n    if (rh < h2 * 2) return 0;\n    return h2;\n  }\n  // ------------------------------------------------------------------ nodes\n  /**\n   * Leaves of the drawn tree, bucketed by the series they came from and kept in\n   * depth-first order.\n   * @param {any[]} roots\n   * @param {number} seriesCount\n   * @returns {any[][]}\n   */\n  _leavesBySeries(roots, seriesCount) {\n    const out = new Array(Math.max(1, seriesCount));\n    for (let i2 = 0; i2 < out.length; i2++) out[i2] = [];\n    const walk = (node) => {\n      if (node.children && node.children.length) {\n        node.children.forEach(walk);\n      } else {\n        const si = node._si || 0;\n        if (out[si]) out[si].push(node);\n      }\n    };\n    roots.forEach(walk);\n    return out;\n  }\n  /**\n   * Non-leaf nodes of the drawn tree, bucketed by series, shallowest first so a\n   * container is painted before anything nested inside it.\n   * @param {any[]} roots\n   * @param {number} seriesCount\n   * @returns {any[][]}\n   */\n  _parentsBySeries(roots, seriesCount) {\n    const out = new Array(Math.max(1, seriesCount));\n    for (let i2 = 0; i2 < out.length; i2++) out[i2] = [];\n    const walk = (node) => {\n      if (!node.children || !node.children.length) return;\n      const si = node._si || 0;\n      if (out[si]) out[si].push(node);\n      node.children.forEach(walk);\n    };\n    roots.forEach(walk);\n    out.forEach(\n      (list) => list.sort(\n        (a2, b2) => (a2.depth || 0) - (b2.depth || 0)\n      )\n    );\n    return out;\n  }\n  // ---------------------------------------------------------------- colours\n  /**\n   * A leaf's fill.\n   *\n   * Continuous colour (a datum carrying a second metric) takes over when it is\n   * configured, because shading a tile by its own area value is precisely what\n   * that mode replaces. Everything else - `colorScale.ranges`, `enableShades`,\n   * `distributed`, negative handling - is the path it always was.\n   *\n   * The shape of the return value matches `Helpers.getShadeColor` so the\n   * caller cannot tell the two apart.\n   *\n   * @param {number} i\n   * @param {number} j\n   * @returns {any}\n   */\n  _leafColor(i2, j) {\n    const w2 = this.w;\n    if (this.scale) {\n      const cv = colorValueOf(w2, i2, j);\n      if (cv != null) {\n        const color = this.scale.at(cv);\n        return {\n          color,\n          // The discrete path has never supplied a label colour, so only the\n          // continuous path sets one: a diverging ramp runs right through the\n          // middle of the luminance range and a fixed light-or-dark label\n          // would be unreadable at one end or the other.\n          foreColor: readableOn(color),\n          colorProps: { color, foreColor: readableOn(color), percent: 0 }\n        };\n      }\n    }\n    return this.helpers.getShadeColor(\n      w2.config.chart.type,\n      i2,\n      j,\n      this.negRange\n    );\n  }\n  // ---------------------------------------------------------------- parents\n  /**\n   * Resolved container/header colours for a level. Parent marks are chrome, not\n   * data, so they default to a neutral tint of the background rather than to a\n   * series colour: with continuous colour on the leaves, a coloured container\n   * would read as another data value.\n   * @param {number} depth\n   * @returns {any}\n   */\n  _parentChrome(depth) {\n    const w2 = this.w;\n    const cfg = this._levelCfg(depth);\n    const dark = w2.config.theme.mode === \"dark\";\n    const header = cfg.header || {};\n    const hstyle = header.style || {};\n    const step = Math.min(depth, 3);\n    const base = dark ? 255 : 0;\n    const rgb = `${base},${base},${base}`;\n    return {\n      fill: cfg.fill || `rgba(${rgb},${(dark ? 0.04 : 0.03) + step * 0.02})`,\n      fillOpacity: cfg.fillOpacity == null ? 1 : cfg.fillOpacity,\n      borderColor: cfg.borderColor || `rgba(${rgb},${dark ? 0.18 : 0.14})`,\n      borderWidth: cfg.borderWidth == null ? 1 : cfg.borderWidth,\n      borderRadius: cfg.borderRadius == null ? w2.config.plotOptions.treemap.borderRadius : cfg.borderRadius,\n      headerBg: hstyle.background || `rgba(${rgb},${dark ? 0.1 : 0.07})`,\n      headerColor: hstyle.color || (dark ? \"#e8e8e8\" : w2.config.chart.foreColor),\n      headerFontSize: hstyle.fontSize || \"12px\",\n      headerFontFamily: hstyle.fontFamily || w2.config.chart.fontFamily,\n      headerFontWeight: hstyle.fontWeight == null ? 600 : hstyle.fontWeight,\n      hoverColor: cfg.hover && cfg.hover.color || (dark ? \"rgba(255,255,255,0.85)\" : \"rgba(0,0,0,0.7)\"),\n      hoverWidth: cfg.hover && cfg.hover.width || 2,\n      hoverShow: !(cfg.hover && cfg.hover.show === false)\n    };\n  }\n  /**\n   * Draw one parent as a real mark: a container rect, and the header strip the\n   * layout already reserved room for.\n   *\n   * The container is `pointer-events: none` over its interior so the tiles\n   * inside it keep receiving hover; only the padding gutter and the header\n   * strip belong to the parent.\n   *\n   * @param {any} elSeries\n   * @param {any} node\n   * @param {number} i seriesIndex\n   */\n  _drawParent(elSeries, node, i2) {\n    var _a;\n    const r2 = node.rect;\n    if (!r2) return;\n    const w2 = this.w;\n    const graphics = new Graphics(this.w, this.ctx);\n    const depth = node.depth || 0;\n    const cfg = this._levelCfg(depth);\n    const chrome = this._parentChrome(depth);\n    const x1 = r2[0];\n    const y1 = r2[1];\n    const width = r2[2] - r2[0];\n    const height = r2[3] - r2[1];\n    if (width <= 0 || height <= 0) return;\n    const elGroup = graphics.group({\n      class: \"apexcharts-treemap-parent\",\n      \"data:depth\": depth,\n      \"data:name\": Utils$1.escapeString(node.name)\n    });\n    const key = morphKey(node._key);\n    const morphFrom = this._morphKeyed() ? this.ctx.morphTypeChange.getInitialPathForKey(key) : null;\n    const elRect = morphFrom ? graphics.drawPath({\n      d: this._tilePath(x1, y1, x1 + width, y1 + height),\n      fill: chrome.fill,\n      stroke: chrome.borderColor,\n      strokeWidth: chrome.borderWidth,\n      fillOpacity: chrome.fillOpacity\n    }) : graphics.drawRect(\n      x1,\n      y1,\n      width,\n      height,\n      chrome.borderRadius,\n      chrome.fill,\n      chrome.fillOpacity,\n      chrome.borderWidth,\n      chrome.borderColor\n    );\n    elRect.node.classList.add(\"apexcharts-treemap-parent-rect\");\n    elRect.node.setAttribute(\"data:key\", key);\n    elRect.node.setAttribute(\"data:depth\", String(depth));\n    if (morphFrom) {\n      this._morphTile(\n        elRect,\n        morphFrom,\n        this._tilePath(x1, y1, x1 + width, y1 + height),\n        this.ctx.morphTypeChange.getSpeed(),\n        i2,\n        depth\n      );\n    }\n    elGroup.add(elRect);\n    const headerHeight = node.headerHeight || 0;\n    let headerText = \"\";\n    if (headerHeight > 0) {\n      const header = cfg.header || {};\n      const elHeaderRect = graphics.drawRect(\n        x1,\n        y1,\n        width,\n        headerHeight,\n        0,\n        chrome.headerBg,\n        1,\n        0,\n        \"transparent\"\n      );\n      elHeaderRect.node.classList.add(\"apexcharts-treemap-parent-header\");\n      elGroup.add(elHeaderRect);\n      let text = String((_a = node.name) != null ? _a : \"\");\n      if (typeof header.formatter === \"function\") {\n        text = String(\n          header.formatter(node.name, {\n            value: node.value,\n            depth,\n            seriesIndex: i2,\n            node,\n            w: w2\n          })\n        );\n      } else if (header.showValue) {\n        text = `${text}  ${this._formatValue(node.value)}`;\n      }\n      headerText = text;\n      const offsetX = Number(header.offsetX) || 0;\n      const align = header.align || \"left\";\n      const pad = 6;\n      const maxWidth = Math.max(0, width - pad * 2 - Math.abs(offsetX));\n      const fontSize = parseFloat(String(chrome.headerFontSize)) || 12;\n      const clipped = graphics.getTextBasedOnMaxWidth({\n        text,\n        maxWidth,\n        fontSize\n      });\n      if (clipped) {\n        let tx = x1 + pad + offsetX;\n        let anchor = \"start\";\n        if (align === \"center\") {\n          tx = x1 + width / 2 + offsetX;\n          anchor = \"middle\";\n        } else if (align === \"right\") {\n          tx = x1 + width - pad + offsetX;\n          anchor = \"end\";\n        }\n        const elText = graphics.drawText({\n          x: tx,\n          y: y1 + headerHeight / 2 + fontSize / 3 + (Number(header.offsetY) || 0),\n          text: clipped,\n          textAnchor: anchor,\n          fontSize: chrome.headerFontSize,\n          fontFamily: chrome.headerFontFamily,\n          fontWeight: chrome.headerFontWeight,\n          foreColor: chrome.headerColor,\n          cssClass: `apexcharts-treemap-parent-label ${header.style && header.style.cssClass || \"\"}`\n        });\n        elText.node.setAttribute(\"pointer-events\", \"none\");\n        elGroup.add(elText);\n      }\n      this._attachParentEvents(elHeaderRect.node, node, chrome, elRect);\n      this._makeParentAccessible(\n        elHeaderRect.node,\n        node,\n        chrome,\n        elRect,\n        headerText\n      );\n    }\n    this._attachParentEvents(elRect.node, node, chrome, elRect);\n    elGroup.node.setAttribute(\"role\", \"group\");\n    elGroup.node.setAttribute(\"aria-label\", this._parentLabel(node, headerText));\n    elSeries.add(elGroup);\n  }\n  /**\n   * The spoken description of a branch: what it is, how big, and how much of\n   * the chart it accounts for.\n   *\n   * Starts from the header's own rendered text when there is one (before\n   * clipping), so the accessible name contains the visible label rather than a\n   * differently-formatted number - a formatter that renders \"$3.25T\" must not\n   * be announced as \"3246\".\n   *\n   * @param {any} node\n   * @param {string} [visibleText] the header text, formatter applied, unclipped\n   * @returns {string}\n   */\n  _parentLabel(node, visibleText) {\n    const total = this._drawnTotal();\n    const pct = total > 0 ? (node._area / total * 100).toFixed(1) : \"0\";\n    const n2 = this._countLeaves(node);\n    const lead = visibleText && String(visibleText).trim() ? String(visibleText).replace(/\\s+/g, \" \").trim() : `${node.name}, ${this._formatValue(node._area)}`;\n    return `${lead}, ${n2} ${n2 === 1 ? \"item\" : \"items\"}, ${pct}% of total`;\n  }\n  /**\n   * Make a branch reachable and operable from the keyboard.\n   *\n   * Only the header strip takes focus, and only while click-to-zoom is live: a\n   * treemap can hold hundreds of tiles, and making every mark a tab stop would\n   * bury the chart's own controls behind a few hundred presses. Tabbing the\n   * groups and pressing Enter is the same path the mouse takes, and the\n   * breadcrumb is already real buttons, so the way back is reachable too.\n   *\n   * @param {any} el\n   * @param {any} node\n   * @param {any} chrome\n   * @param {any} elRect\n   * @param {string} [visibleText] the header's rendered text, unclipped\n   */\n  _makeParentAccessible(el, node, chrome, elRect, visibleText) {\n    if (!el || !el.setAttribute) return;\n    if (!this._zoomEnabled()) return;\n    el.setAttribute(\"role\", \"button\");\n    el.setAttribute(\"tabindex\", \"0\");\n    el.setAttribute(\n      \"aria-label\",\n      `${this._parentLabel(node, visibleText)}. Zoom in`\n    );\n    el.setAttribute(\"aria-expanded\", \"false\");\n    if (!Environment.isBrowser() || !el.addEventListener) return;\n    el.addEventListener(\"focus\", () => {\n      elRect.node.setAttribute(\"stroke\", chrome.hoverColor);\n      elRect.node.setAttribute(\"stroke-width\", String(chrome.hoverWidth + 1));\n    });\n    el.addEventListener(\"blur\", () => {\n      elRect.node.setAttribute(\"stroke\", chrome.borderColor);\n      elRect.node.setAttribute(\"stroke-width\", String(chrome.borderWidth));\n    });\n    el.addEventListener(\"keydown\", (e2) => {\n      if (e2.key !== \"Enter\" && e2.key !== \" \" && e2.key !== \"Spacebar\") return;\n      e2.preventDefault();\n      this._zoomTo(node, true);\n    });\n  }\n  /**\n   * Hover outline, aggregate tooltip and click-to-zoom for a parent mark.\n   * @param {any} el the element receiving the pointer\n   * @param {any} node\n   * @param {any} chrome\n   * @param {any} elRect the container rect to outline\n   */\n  _attachParentEvents(el, node, chrome, elRect) {\n    if (!Environment.isBrowser() || !el || !el.addEventListener) return;\n    const w2 = this.w;\n    if (chrome.hoverShow) {\n      el.addEventListener(\"mouseenter\", () => {\n        elRect.node.setAttribute(\"stroke\", chrome.hoverColor);\n        elRect.node.setAttribute(\"stroke-width\", String(chrome.hoverWidth));\n      });\n      el.addEventListener(\"mouseleave\", () => {\n        elRect.node.setAttribute(\"stroke\", chrome.borderColor);\n        elRect.node.setAttribute(\"stroke-width\", String(chrome.borderWidth));\n      });\n    }\n    if (w2.config.tooltip.enabled) {\n      el.addEventListener(\n        \"mouseenter\",\n        (e2) => this._showParentTooltip(e2, node)\n      );\n      el.addEventListener(\n        \"mousemove\",\n        (e2) => this._positionTooltip(e2)\n      );\n      el.addEventListener(\"mouseleave\", () => this._hideParentTooltip());\n    }\n    if (this._zoomEnabled()) {\n      el.style.cursor = \"pointer\";\n      el.addEventListener(\"click\", () => this._zoomTo(node));\n    }\n  }\n  // ------------------------------------------------------------------- zoom\n  /**\n   * Click-to-zoom is live only when nothing else already owns the click.\n   *\n   * The drilldown feature is the other way into a hierarchy on a treemap, and\n   * the two are different models of the same gesture: drilldown replaces the\n   * view one level at a time, zoom reframes a tree that stays whole. Running\n   * both would fight over the same click and over the one breadcrumb slot in\n   * the wrap, so drilldown wins where it is active and this stands down.\n   * @returns {boolean}\n   */\n  _zoomEnabled() {\n    const w2 = this.w;\n    const z = w2.config.plotOptions.treemap.zoom;\n    if (!z || !z.enabled || !this.showParents) return false;\n    const dd = w2.config.drilldown;\n    if (dd && dd.enabled && Array.isArray(dd.series) && dd.series.length) {\n      if (!this._warnedZoomConflict) {\n        this._warnedZoomConflict = true;\n        console.warn(\n          \"ApexCharts treemap: `plotOptions.treemap.zoom` and the drilldown feature both navigate the hierarchy, so zoom is ignored here. Drop `drilldown.series` to zoom a nested treemap instead.\"\n        );\n      }\n      return false;\n    }\n    return true;\n  }\n  /**\n   * The focused branch for this render, looked up by the key stashed on the\n   * last click. Keys are rebuilt identically from the same data, so the focus\n   * survives a re-render; a key that no longer resolves (the data changed under\n   * it) simply falls back to the whole tree.\n   * @param {any[]} drawn\n   * @returns {any}\n   */\n  _resolveFocus(drawn) {\n    const key = this.w.globals.treemapFocusKey;\n    if (!key || !this._zoomEnabled()) return null;\n    let found = null;\n    const walk = (node) => {\n      if (found) return;\n      if (node._key === key) {\n        found = node;\n        return;\n      }\n      if (node.children) node.children.forEach(walk);\n    };\n    drawn.forEach(walk);\n    return found && found.children && found.children.length ? found : null;\n  }\n  /**\n   * @param {any} node\n   * @param {boolean} [restoreFocus] move focus into the new view once it is\n   *   drawn. A zoom re-renders the chart, which destroys the element the\n   *   keyboard user was standing on; without this they would be returned to the\n   *   top of the document.\n   */\n  _zoomTo(node, restoreFocus = false) {\n    const w2 = this.w;\n    if (!node || !node.children || !node.children.length) return;\n    const next = w2.globals.treemapFocusKey === node._key ? null : node._key;\n    w2.globals.treemapFocusKey = next;\n    this._hideParentTooltip();\n    const done = this.ctx.update();\n    if (!restoreFocus || !done || typeof done.then !== \"function\") return;\n    done.then(() => {\n      if (!Environment.isBrowser()) return;\n      const crumb = (\n        /** @type {any} */\n        w2.dom.baseEl.querySelector(\n          \".apexcharts-breadcrumb .apexcharts-breadcrumb-item\"\n        )\n      );\n      if (crumb && crumb.focus) {\n        crumb.focus();\n        return;\n      }\n      const header = (\n        /** @type {any} */\n        w2.dom.baseEl.querySelector(\n          \".apexcharts-treemap-parent-header[tabindex]\"\n        )\n      );\n      if (header && header.focus) header.focus();\n    });\n  }\n  /**\n   * Outermost drawn group -> focus chain, for the breadcrumb.\n   *\n   * Stops at a drawn root rather than walking all the way to `_parent === null`:\n   * when a single series was unwrapped, the series node is still every level-0\n   * node's parent, and it is not a level the reader ever sees.\n   */\n  _focusChain() {\n    const chain = [];\n    const drawnRoots = new Set(this.drawn || []);\n    let n2 = this._resolveFocus(this.drawn || []);\n    while (n2) {\n      chain.unshift(n2);\n      if (drawnRoots.has(n2)) break;\n      n2 = n2._parent;\n    }\n    return chain;\n  }\n  /** The breadcrumb config: a treemap-local override on the shared block. */\n  _breadcrumbCfg() {\n    const z = this.w.config.plotOptions.treemap.zoom;\n    return breadcrumbConfig(this.w, z && z.breadcrumb);\n  }\n  /**\n   * Breadcrumb back out of a zoom. Markup, config and accessible semantics are\n   * the shared ones, so a zoomed treemap and a drilled-in chart present the\n   * same affordance.\n   */\n  _renderBreadcrumb() {\n    if (!Environment.isBrowser()) return;\n    const w2 = this.w;\n    if (!w2.dom.elWrap) return;\n    clearBreadcrumb(w2);\n    if (!this._zoomEnabled()) return;\n    const chain = this._focusChain();\n    if (!chain.length) return;\n    const nav = renderBreadcrumb(w2, {\n      ariaLabel: \"Treemap breadcrumb\",\n      config: this._breadcrumbCfg(),\n      compact: true,\n      crumbs: [{ label: \"All\", data: null }].concat(\n        chain.map((n2) => ({ label: n2.name, data: n2 }))\n      ),\n      onNavigate: (_i, crumb) => {\n        w2.globals.treemapFocusKey = crumb.data ? crumb.data._key : null;\n        this._hideParentTooltip();\n        this.ctx.update();\n      }\n    });\n    if (!nav) return;\n    this._placeBreadcrumb(nav);\n    avoidChromeOverlap(w2, nav);\n  }\n  /**\n   * Sit the breadcrumb in the band the layout reserved for it\n   * (Dimensions.gridPadForBreadcrumb), just above the grid.\n   *\n   * The fallback below should never fire: the reserve is unconditional once\n   * zoom is enabled. It stays for the cases the reserve cannot cover - a\n   * responsive override that turns zoom on after layout, or a host stylesheet\n   * that grows the font - where a readable chip over the tiles beats a\n   * breadcrumb clipped by the plot.\n   *\n   * @param {any} nav\n   */\n  _placeBreadcrumb(nav) {\n    var _a, _b;\n    const w2 = this.w;\n    const gridTop = w2.layout.translateY || 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 navH = nav.getBoundingClientRect().height || BREADCRUMB_HEIGHT;\n    if (gridTop - titleArea >= navH + 1) {\n      nav.style.top = `${gridTop - navH - 1}px`;\n      return;\n    }\n    nav.style.top = `${titleArea}px`;\n    const dark = w2.config.theme.mode === \"dark\";\n    nav.style.background = dark ? \"rgba(20,24,30,0.82)\" : \"rgba(255,255,255,0.86)\";\n    nav.style.borderRadius = \"4px\";\n  }\n  // ---------------------------------------------------------------- tooltip\n  /**\n   * A parent is not a row in the series matrix, so the shared tooltip - which\n   * addresses everything by (seriesIndex, dataPointIndex) - has nothing to look\n   * up. It writes into the same tooltip element instead, so the aggregate looks\n   * like every other tooltip in the chart.\n   * @param {MouseEvent} e\n   * @param {any} node\n   */\n  _showParentTooltip(e2, node) {\n    const w2 = this.w;\n    const t2 = this._tip();\n    if (!t2) return;\n    const total = this._drawnTotal();\n    const parentVal = node._parent ? node._parent._area : total;\n    const pctTotal = total > 0 ? (node._area / total * 100).toFixed(1) : \"0.0\";\n    const pctParent = parentVal > 0 ? (node._area / parentVal * 100).toFixed(1) : pctTotal;\n    const cfg = this.w.config.plotOptions.treemap.parents;\n    const custom = cfg && cfg.tooltip && cfg.tooltip.formatter;\n    const leafCount = this._countLeaves(node);\n    let html;\n    if (typeof custom === \"function\") {\n      html = custom({\n        name: node.name,\n        value: node._area,\n        depth: node.depth || 0,\n        leafCount,\n        percentOfParent: Number(pctParent),\n        percentOfTotal: Number(pctTotal),\n        node,\n        w: w2\n      });\n    } else {\n      const marker = this._parentChrome(node.depth || 0).headerBg;\n      const groupBg = w2.config.tooltip.fillSeriesColor ? `background-color:${marker};` : \"\";\n      html = `<div class=\"apexcharts-tooltip-series-group apexcharts-active\" style=\"display:flex;${groupBg}\"><div class=\"apexcharts-tooltip-text\"><div class=\"apexcharts-tooltip-y-group\"><span class=\"apexcharts-tooltip-text-y-label\">${Utils$1.escapeString(\n        node.name\n      )}: </span><span class=\"apexcharts-tooltip-text-y-value\">${this._formatValue(\n        node._area\n      )}</span></div><div class=\"apexcharts-tooltip-y-group\"><span class=\"apexcharts-tooltip-text-y-label\">${leafCount} items, </span><span class=\"apexcharts-tooltip-text-y-value\">${pctParent}% of parent, ${pctTotal}% of total</span></div></div></div>`;\n    }\n    t2.innerHTML = html;\n    t2.classList.add(\"apexcharts-active\");\n    t2.style.opacity = \"1\";\n    this._tipOwned = true;\n    this._positionTooltip(e2);\n  }\n  /** @returns {any} */\n  _tip() {\n    if (!this._tooltipEl) {\n      this._tooltipEl = this.w.dom.baseEl.querySelector(\".apexcharts-tooltip\");\n    }\n    return this._tooltipEl;\n  }\n  /**\n   * Position beside the cursor, flipping to the opposite side when the box\n   * would overflow the chart wrap, and clamping inside it either way.\n   * @param {MouseEvent} e\n   */\n  _positionTooltip(e2) {\n    const t2 = this._tip();\n    if (!t2 || !this._tipOwned) return;\n    const rect = this.w.dom.elWrap.getBoundingClientRect();\n    const tw = t2.offsetWidth;\n    const th = t2.offsetHeight;\n    const pad = 12;\n    let x = e2.clientX - rect.left + pad;\n    if (x + tw > rect.width) x = e2.clientX - rect.left - tw - pad;\n    x = Math.max(0, Math.min(x, rect.width - tw));\n    let y = e2.clientY - rect.top + pad;\n    if (y + th > rect.height) y = e2.clientY - rect.top - th - pad;\n    y = Math.max(0, Math.min(y, rect.height - th));\n    t2.style.left = x + \"px\";\n    t2.style.top = y + \"px\";\n  }\n  _hideParentTooltip() {\n    const t2 = this._tip();\n    if (!t2 || !this._tipOwned) return;\n    this._tipOwned = false;\n    t2.classList.remove(\"apexcharts-active\");\n    t2.style.opacity = \"0\";\n  }\n  /**\n   * The whole tree's area, zoomed in or not: \"% of total\" has to mean the same\n   * thing at every zoom level, otherwise the branch you just zoomed into\n   * reports 100%.\n   * @returns {number}\n   */\n  _drawnTotal() {\n    if (this._total == null) {\n      this._total = (this.drawn || []).reduce(\n        (s2, r2) => s2 + this._subtreeArea(r2),\n        0\n      );\n    }\n    return this._total || 0;\n  }\n  /**\n   * A node's area, computed the same way the layout does it. Zooming lays out\n   * only the focused branch, so every other branch reaches here without the\n   * `_area` the layout would otherwise have left on it.\n   * @param {any} node\n   * @returns {number}\n   */\n  _subtreeArea(node) {\n    if (node._area != null) return node._area;\n    const kids = node.children;\n    if (kids && kids.length) {\n      let s2 = 0;\n      for (let i2 = 0; i2 < kids.length; i2++) s2 += this._subtreeArea(kids[i2]);\n      return s2;\n    }\n    const v2 = Number(node.value);\n    return isNaN(v2) ? 0 : Math.abs(v2);\n  }\n  /**\n   * @param {any} node\n   * @returns {number}\n   */\n  _countLeaves(node) {\n    if (!node.children || !node.children.length) return 1;\n    return node.children.reduce(\n      (s2, c2) => s2 + this._countLeaves(c2),\n      0\n    );\n  }\n  /**\n   * Format an aggregate the way the chart formats its own y values, so a\n   * parent's total reads like the tiles it contains.\n   * @param {number} v\n   * @returns {string}\n   */\n  _formatValue(v2) {\n    var _a, _b, _c, _d, _e;\n    const w2 = this.w;\n    const fmt = ((_b = (_a = w2.config.tooltip) == null ? void 0 : _a.y) == null ? void 0 : _b.formatter) || ((_e = (_d = (_c = w2.config.yaxis) == null ? void 0 : _c[0]) == null ? void 0 : _d.labels) == null ? void 0 : _e.formatter);\n    if (typeof fmt === \"function\") {\n      try {\n        return String(fmt(v2, { seriesIndex: 0, dataPointIndex: 0, w: w2 }));\n      } catch (_) {\n      }\n    }\n    return String(v2);\n  }\n  /**\n   * Whether a tile could show a label at all, decided from geometry alone so\n   * nothing has to be measured to find out.\n   *\n   * Two rules, both about legibility rather than about saving work:\n   *   - a tile that cannot hold one character in EITHER orientation has no\n   *     label to draw, rotated or not\n   *   - below `dataLabels.minFontSize` the text is decoration, not information\n   *\n   * Together these keep a dense treemap from spending its whole render\n   * measuring text nobody can read.\n   *\n   * @param {number} fontSize\n   * @param {number} tileWidth\n   * @param {number} tileHeight\n   * @returns {boolean}\n   */\n  _labelCanShow(fontSize, tileWidth, tileHeight) {\n    if (!Number.isFinite(fontSize) || fontSize <= 0) return false;\n    const cfg = this.w.config.plotOptions.treemap.dataLabels;\n    const min = cfg && cfg.minFontSize != null ? Number(cfg.minFontSize) : 0;\n    if (fontSize < min) return false;\n    return Math.max(tileWidth, tileHeight) >= fontSize;\n  }\n  /**\n   * Mean label length across the whole chart.\n   *\n   * It scales every tile's font size, and it is the same number for all of\n   * them, so it is computed once per draw. It used to be recomputed inside\n   * `getFontSize`, which runs per tile: two full walks of every label, per\n   * label, which is quadratic and was the entire cost of a large treemap (a\n   * 10k-tile chart spent ~9s here).\n   *\n   * @returns {number}\n   */\n  _averageLabelSize() {\n    if (this._avgLabelSize != null) return this._avgLabelSize;\n    function totalLabelLength(arr) {\n      let i2, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i2 = 0; i2 < arr.length; i2++) {\n          total += totalLabelLength(arr[i2]);\n        }\n      } else {\n        for (i2 = 0; i2 < arr.length; i2++) {\n          total += arr[i2].length;\n        }\n      }\n      return total;\n    }\n    function countLabels(arr) {\n      let i2, total = 0;\n      if (Array.isArray(arr[0])) {\n        for (i2 = 0; i2 < arr.length; i2++) {\n          total += countLabels(arr[i2]);\n        }\n      } else {\n        for (i2 = 0; i2 < arr.length; i2++) {\n          total += 1;\n        }\n      }\n      return total;\n    }\n    this._avgLabelSize = totalLabelLength(this.labels) / countLabels(this.labels);\n    return this._avgLabelSize;\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 w2 = this.w;\n    const averagelabelsize = this._averageLabelSize();\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(w2.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   * True when the active cross-type morph can pair marks by branch identity\n   * rather than by draw order.\n   * @returns {boolean}\n   */\n  _morphKeyed() {\n    var _a;\n    const m2 = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange;\n    return !!(m2 && typeof m2.hasKeyedMarks === \"function\" && m2.hasKeyedMarks() && typeof m2.getInitialPathForKey === \"function\");\n  }\n  /**\n   * The captured shape a LEAF tile unrolls from, or null when the outgoing\n   * chart had nothing to give it.\n   *\n   * Branch identity first, so a tile unrolls from the arc that stood for the\n   * same row rather than the k-th one. That key can find nothing even when\n   * both sides carry keys, and a FLAT treemap taking from a nested sunburst is\n   * exactly that case: its tiles are keyed at depth one ('/0:Tops') while the\n   * arcs are keyed at the depth they actually sit ('/0:Apparel/0:Tops'), so no\n   * key ever matches. Draw order is the fallback, the same one the mirror\n   * direction has always had (Sunburst._morphSourceFor), and without it\n   * treemap -> sunburst read as a morph while the return trip grew from\n   * nothing.\n   *\n   * Leaves only. A container taking a leaf's path by position would unroll\n   * from a different branch entirely, so `_morphParent` stays key-or-nothing.\n   *\n   * @param {any} leaf\n   * @returns {string | null}\n   */\n  _morphSourceForLeaf(leaf) {\n    var _a;\n    const morph = (_a = this.ctx) == null ? void 0 : _a.morphTypeChange;\n    if (!morph || typeof morph.getInitialPathAt !== \"function\") return null;\n    if (this._morphKeyed()) {\n      const keyed = morph.getInitialPathForKey(morphKey(leaf._key));\n      if (keyed) return keyed;\n    }\n    return morph.getInitialPathAt(this._morphLeafIndex++);\n  }\n  /**\n   * A tile as closed path data, for the cross-type morph (a <rect> cannot hold\n   * an arc, so a morphing tile is drawn as a <path>).\n   * @param {number} x1 @param {number} y1 @param {number} x2 @param {number} y2\n   * @returns {string}\n   */\n  _tilePath(x1, y1, x2, y2) {\n    return `M ${x1} ${y1} L ${x2} ${y1} L ${x2} ${y2} L ${x1} ${y2} Z`;\n  }\n  /**\n   * Tween a tile's path data from a captured shape (a sunburst arc) into its\n   * rectangle.\n   *\n   * Routed through Animations.morphSVG, the same call every other morphing\n   * renderer makes: it already selects the polygon-resample algorithm while a\n   * cross-type morph is active, which is what tweens between shapes as\n   * different as an arc and a rectangle. Reaching for the interpolator directly\n   * would also add a name to a module the split bundles share, which breaks\n   * them.\n   *\n   * @param {any} el\n   * @param {string} fromD\n   * @param {string} toD\n   * @param {number} speed\n   * @param {number} i\n   * @param {number} j\n   */\n  _morphTile(el, fromD, toD, speed, i2, j) {\n    const animations = new Animations(this.w, this.ctx);\n    animations.morphSVG(el, i2, j, \"none\", fromD, toD, speed, 0);\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}\nconst GOLDEN_ANGLE = Math.PI * (3 - Math.sqrt(5));\nfunction easeOutCubic(t2) {\n  return 1 - Math.pow(1 - t2, 3);\n}\nfunction easeOutBack(s2) {\n  return (t2) => 1 + (s2 + 1) * Math.pow(t2 - 1, 3) + s2 * Math.pow(t2 - 1, 2);\n}\nfunction easeInOutCubic(t2) {\n  return t2 < 0.5 ? 4 * t2 * t2 * t2 : 1 - Math.pow(-2 * t2 + 2, 3) / 2;\n}\nconst SPRING_REFERENCE_SPEED = 800;\nconst MAX_FRAME_STEP = 0.25;\nfunction springParams(preset, speed) {\n  const [stiffness, damping] = L(\n    /** @type {import('apex-commons').SpringPreset|undefined} */\n    preset\n  );\n  const scale = SPRING_REFERENCE_SPEED / Math.max(1, speed);\n  return [stiffness * scale * scale, damping * scale];\n}\nclass Unit {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\n    this._lastDotR = 1;\n    this._gridTrack = null;\n    this._gridDenom = 1;\n    this._scatterAxis = null;\n  }\n  /**\n   * @param {any[]} series - flat count array (non-axis / pie-shaped data)\n   * @returns {any} the chart's root group element\n   */\n  draw(series) {\n    const w2 = this.w;\n    const graphics = new Graphics(w2, this.ctx);\n    const ret = graphics.group({ class: \"apexcharts-unit\" });\n    if (w2.globals.noData || !Array.isArray(series) || series.length === 0) {\n      return ret;\n    }\n    const opts = w2.config.plotOptions.unit;\n    const layout = opts.layout === \"packed\" ? \"packed\" : opts.layout === \"columns\" ? \"columns\" : opts.layout === \"grid\" ? \"grid\" : opts.layout === \"scatter\" ? \"scatter\" : opts.layout === \"arc\" ? \"arc\" : opts.layout === \"custom\" ? \"custom\" : \"grouped\";\n    const transition = opts.transition;\n    const flow = transition === \"flow\";\n    const identity = transition === \"identity\";\n    const unitValue = opts.unitValue > 0 ? opts.unitValue : 1;\n    let counts = series.map((v2) => {\n      const n2 = Math.abs(Utils$1.parseNumber(v2)) / unitValue;\n      return n2 > 0 ? Math.max(1, Math.round(n2)) : 0;\n    });\n    counts = this._applyMaxUnits(counts, opts.maxUnits);\n    const total = counts.reduce((a2, b2) => a2 + b2, 0);\n    const clusters = layout === \"packed\" ? this._layoutPacked(counts, opts) : layout === \"columns\" ? this._layoutColumns(counts, opts) : layout === \"grid\" ? this._layoutGrid(counts, opts) : layout === \"scatter\" ? this._layoutScatter(opts) : layout === \"arc\" ? this._layoutArc(counts, opts) : layout === \"custom\" ? this._layoutCustom(counts, opts) : this._layoutGrouped(counts, opts);\n    const gridSplit = layout === \"grid\" && !!(opts.grid && opts.grid.split);\n    if (gridSplit) this._drawGridTrack(ret, graphics, opts);\n    if (layout === \"scatter\") this._drawScatterAxes(ret, graphics);\n    const dotR = this._lastDotR;\n    const animate = this._shouldAnimate();\n    const morph = this.ctx && this.ctx.morphTypeChange;\n    const morphActive = animate && !!morph && typeof morph.isActive === \"function\" && morph.isActive() && typeof morph.getInitialCenterFor === \"function\";\n    const perRowBurst = morphActive && typeof morph.getInitialSlotFor === \"function\";\n    const pieceTakeover = morphActive && typeof morph.usesPieceTakeover === \"function\" && morph.usesPieceTakeover();\n    const prev = animate && !morphActive && this.ctx ? this.ctx._unitPrevDots : null;\n    const nextPrev = /* @__PURE__ */ new Map();\n    const animDots = [];\n    const unitData = w2.seriesData.unitData || [];\n    const sizeStats = this._bubbleStats(unitData, opts, dotR);\n    let gIndex = 0;\n    clusters.forEach((cluster) => {\n      const color = w2.globals.colors[cluster.i] || w2.globals.colors[0] || \"#008FFB\";\n      const elSeries = graphics.group({\n        class: \"apexcharts-series\",\n        seriesName: Utils$1.escapeString(\n          w2.seriesData.seriesNames[cluster.i] || `series-${cluster.i + 1}`\n        ),\n        rel: cluster.i + 1,\n        \"data:realIndex\": cluster.i\n      });\n      const burst = morphActive && !perRowBurst ? morph.getInitialCenterFor(cluster.i) : null;\n      const burstCount = cluster.dots.length;\n      const catData = unitData[cluster.i];\n      cluster.dots.forEach((d, j) => {\n        const datum = catData ? catData[j] : void 0;\n        const dotFill = datum && typeof datum === \"object\" && datum.fillColor ? datum.fillColor : color;\n        const rj = d.r != null ? d.r : sizeStats ? this._radiusForValue(this._unitValueOf(datum), sizeStats) : dotR;\n        const el = this._drawDot(graphics, opts, rj, dotFill, cluster.i, j);\n        elSeries.add(el);\n        let key;\n        if (identity) {\n          const id = datum && typeof datum === \"object\" ? datum.id != null ? datum.id : datum.name : void 0;\n          key = id != null ? `id:${id}` : `g:${gIndex}`;\n        } else if (flow) {\n          key = String(gIndex);\n        } else if (d.slot != null) {\n          key = `slot:${d.slot}`;\n        } else {\n          key = `${cluster.i}:${j}`;\n        }\n        gIndex++;\n        nextPrev.set(key, { x: d.x, y: d.y, fill: dotFill, r: rj });\n        if (pieceTakeover) {\n          this._placeDot(el.node, opts, d.x, d.y);\n          el.node.setAttribute(\"opacity\", \"0\");\n          el.node.setAttribute(\"data-piece-hidden\", \"1\");\n        } else if (animate) {\n          const from = prev && prev.get(key);\n          const anchor = from || (perRowBurst ? morph.getInitialSlotFor(cluster.i, j, burstCount) : burst);\n          const enter = opts.gather && opts.gather.enter || \"burst\";\n          const inPlace = gridSplit || enter === \"fade\" || enter === \"rise\";\n          const cx0 = anchor ? anchor.x : inPlace ? d.x : cluster.cx;\n          const cy0 = anchor ? anchor.y : enter === \"rise\" && !gridSplit ? d.y + 14 : inPlace ? d.y : cluster.cy;\n          el.node.style.opacity = anchor ? \"1\" : \"0\";\n          this._placeDot(el.node, opts, cx0, cy0);\n          animDots.push({\n            node: el.node,\n            x: d.x,\n            y: d.y,\n            cx0,\n            cy0,\n            // Carries live spring state (position AND velocity) forward when\n            // this render interrupted one still in flight.\n            key,\n            // Radius tween: an identity-kept dot grows/shrinks from its previous\n            // size to its new one (e.g. bubble sizing turning on) instead of\n            // snapping. Enters/uniform updates keep r0 === r1 (no-op).\n            r0: from && from.r != null ? from.r : rj,\n            r1: rj,\n            // Colour tween: a dot that flows into a differently coloured group\n            // recolours as it travels rather than snapping at the first frame.\n            fill0: from ? from.fill : dotFill,\n            fill1: dotFill,\n            delay: 0,\n            // assigned below (staggered by global order)\n            isEnter: !anchor\n          });\n        } else {\n          this._placeDot(el.node, opts, d.x, d.y);\n        }\n      });\n      if ((layout === \"grouped\" || layout === \"columns\" || gridSplit) && opts.clusterLabels && opts.clusterLabels.show && counts[cluster.i] > 0) {\n        const labelTotal = gridSplit ? this._gridDenom : total;\n        this._drawClusterLabel(elSeries, cluster, counts[cluster.i], labelTotal, opts, color);\n      }\n      ret.add(elSeries);\n    });\n    if (prev) {\n      const exits = this._collectExits(prev, nextPrev, opts);\n      if (exits.length) {\n        const exitGroup = graphics.group({ class: \"apexcharts-unit-exits\" });\n        ret.add(exitGroup);\n        this._runExits(exitGroup, exits, opts);\n      }\n    }\n    if (this.ctx) this.ctx._unitPrevDots = nextPrev;\n    if (this.ctx && (!animate || morphActive)) this.ctx._unitSprings = null;\n    if (animate && animDots.length) {\n      this._runGather(animDots);\n    }\n    return ret;\n  }\n  /**\n   * Cap total dots to `maxUnits`, scaling every category down proportionally\n   * (a non-zero category keeps at least one dot). Warns once when it clips.\n   * @param {number[]} counts\n   * @param {number} maxUnits\n   * @returns {number[]}\n   */\n  _applyMaxUnits(counts, maxUnits) {\n    const total = counts.reduce((a2, b2) => a2 + b2, 0);\n    if (!maxUnits || maxUnits <= 0 || total <= maxUnits) return counts;\n    const scale = maxUnits / total;\n    console.warn(\n      `[ApexCharts] unit chart: ${total} dots exceeds maxUnits (${maxUnits}); counts were scaled down proportionally. Raise plotOptions.unit.maxUnits or use plotOptions.unit.unitValue to represent more units per dot.`\n    );\n    return counts.map((c2) => c2 > 0 ? Math.max(1, Math.round(c2 * scale)) : 0);\n  }\n  /**\n   * `layout: 'custom'`. Positions come from a caller-supplied provider rather\n   * than from a generator in this file.\n   *\n   * The provider is the whole extension point: `(objects, rect) => [{id, x, y,\n   * r?}]`. Everything downstream is unchanged, which is the point - the engine\n   * already tweens position, radius and colour, and already keeps a mark's\n   * identity across a relayout, so an arbitrary new arrangement needs no new\n   * transition code. A silhouette, a hex grid, a timeline, or a projection\n   * handed over by ApexMaps are all just this function.\n   *\n   * Marks the provider omits are dropped, so they animate out through the\n   * existing exit path. Ids matching no mark are ignored.\n   *\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutCustom(counts, opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const total = counts.reduce((a2, b2) => a2 + b2, 0);\n    const provider = this._resolveLayoutProvider(opts);\n    if (!provider) {\n      console.warn(\n        `[ApexCharts] unit chart: layout 'custom' needs plotOptions.unit.positions (a function, or the name of a layout registered with ApexCharts.registerUnitLayout). Falling back to 'grouped'.`\n      );\n      return this._layoutGrouped(counts, opts);\n    }\n    const availR = Math.sqrt(gw * gh / Math.PI);\n    const step = this._resolveStep(opts, availR, total);\n    this._lastDotR = this._dotRadiusFromStep(step, opts);\n    const dotR = this._lastDotR;\n    const objects = this._layoutObjects(counts, dotR);\n    const rect = { x: 0, y: 0, width: gw, height: gh };\n    let placed;\n    try {\n      placed = provider(objects, rect);\n    } catch (e2) {\n      console.warn(\n        \"[ApexCharts] unit chart: the layout provider threw; falling back to 'grouped'.\",\n        e2\n      );\n      return this._layoutGrouped(counts, opts);\n    }\n    if (!Array.isArray(placed)) {\n      console.warn(\n        \"[ApexCharts] unit chart: the layout provider must return an array of {id, x, y}; falling back to 'grouped'.\"\n      );\n      return this._layoutGrouped(counts, opts);\n    }\n    const byId = /* @__PURE__ */ new Map();\n    placed.forEach((p2) => {\n      if (!p2 || !isFinite(p2.x) || !isFinite(p2.y)) return;\n      byId.set(String(p2.id), {\n        x: p2.x,\n        y: p2.y,\n        r: typeof p2.r === \"number\" && p2.r > 0 ? p2.r : void 0\n      });\n    });\n    const clusters = counts.map((_, i2) => ({\n      i: i2,\n      cx: gw / 2,\n      cy: gh / 2,\n      outerR: dotR,\n      dots: []\n    }));\n    objects.forEach((o2) => {\n      const hit = byId.get(o2.id);\n      if (!hit) return;\n      clusters[o2.seriesIndex].dots.push({ x: hit.x, y: hit.y, r: hit.r });\n    });\n    clusters.forEach((c2) => {\n      if (!c2.dots.length) return;\n      let sx = 0;\n      let sy = 0;\n      c2.dots.forEach((d) => {\n        sx += d.x;\n        sy += d.y;\n      });\n      c2.cx = sx / c2.dots.length;\n      c2.cy = sy / c2.dots.length;\n      let far = 0;\n      c2.dots.forEach((d) => {\n        far = Math.max(far, Math.hypot(d.x - c2.cx, d.y - c2.cy));\n      });\n      c2.outerR = far + dotR;\n    });\n    return clusters;\n  }\n  /**\n   * One entry per mark, in global draw order, for a layout provider.\n   *\n   * `id` is the datum's own id/name where the per-unit object form supplies\n   * one, so a provider can address a specific unit (\"Texas\", \"employee 41\")\n   * rather than a positional slot. It falls back to `\"<category>:<index>\"`.\n   *\n   * @param {number[]} counts\n   * @param {number} dotR the radius the engine would use, so a provider that\n   *   packs by size does not have to rediscover it\n   * @returns {{id:string,index:number,seriesIndex:number,dataPointIndex:number,label:string,value:number|undefined,datum:any,r:number}[]}\n   */\n  _layoutObjects(counts, dotR) {\n    const w2 = this.w;\n    const unitData = w2.seriesData.unitData || [];\n    const names = w2.seriesData.seriesNames || [];\n    const objects = [];\n    let index = 0;\n    counts.forEach((n2, i2) => {\n      var _a;\n      const catData = unitData[i2];\n      for (let j = 0; j < n2; j++) {\n        const datum = catData ? catData[j] : void 0;\n        const id = datum && typeof datum === \"object\" && (datum.id != null || datum.name != null) ? String(datum.id != null ? datum.id : datum.name) : `${i2}:${j}`;\n        objects.push({\n          id,\n          index,\n          seriesIndex: i2,\n          dataPointIndex: j,\n          label: names[i2],\n          // Normalised at the boundary: internally \"no value\" is null, but the\n          // public object shape uses an absent property.\n          value: (_a = this._unitValueOf(datum)) != null ? _a : void 0,\n          datum,\n          r: dotR\n        });\n        index++;\n      }\n    });\n    return objects;\n  }\n  /**\n   * Resolve `plotOptions.unit.positions` to a provider function: either the\n   * function itself, or the name of one registered through\n   * `ApexCharts.registerUnitLayout`.\n   * @param {any} opts\n   * @returns {Function|null}\n   */\n  _resolveLayoutProvider(opts) {\n    const positions = opts.positions;\n    if (typeof positions === \"function\") return positions;\n    if (typeof positions === \"string\" && positions) {\n      const found = getUnitLayout(positions);\n      if (found) return found;\n      console.warn(\n        `[ApexCharts] unit chart: no layout named \"${positions}\" is registered. Register one with ApexCharts.registerUnitLayout(\"${positions}\", fn).`\n      );\n    }\n    return null;\n  }\n  /**\n   * Lay out each category as its own cluster in a horizontal row. All clusters\n   * share one dot radius (so dot size is comparable across clusters); the blob\n   * radius encodes the count.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutGrouped(counts, opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const labelSpace = opts.clusterLabels && opts.clusterLabels.show ? 30 : 6;\n    const visible = counts.map((_, i2) => i2).filter((i2) => counts[i2] > 0);\n    const Kv = Math.max(1, visible.length);\n    const slotOf = new Array(counts.length).fill(-1);\n    visible.forEach((i2, s2) => slotOf[i2] = s2);\n    const cellW = gw / Kv;\n    const availH = gh - labelSpace;\n    const maxCount = Math.max(1, ...counts);\n    const pad = Math.min(cellW, availH) * 0.08;\n    const availR = Math.max(4, Math.min(cellW, availH) / 2 - pad);\n    const step = this._resolveStep(opts, availR, maxCount);\n    this._lastDotR = this._dotRadiusFromStep(step, opts);\n    const dotR = this._lastDotR;\n    const cy = labelSpace + availH / 2;\n    const outerRs = counts.map((n2) => step * Math.sqrt(Math.max(1, n2)) + dotR);\n    const cellCentre = (i2) => slotOf[i2] >= 0 ? cellW * (slotOf[i2] + 0.5) : gw / 2;\n    let centers = counts.map((_, i2) => cellCentre(i2));\n    const visOuter = visible.map((i2) => outerRs[i2]);\n    let overlap = false;\n    for (let s2 = 1; s2 < Kv; s2++) {\n      if (centers[visible[s2]] - centers[visible[s2 - 1]] < visOuter[s2] + visOuter[s2 - 1]) {\n        overlap = true;\n        break;\n      }\n    }\n    if (overlap) {\n      const gap = Math.max(2 * dotR, 8);\n      const totalW = visOuter.reduce((a2, r2) => a2 + 2 * r2, 0) + gap * (Kv - 1);\n      let visCenters;\n      if (totalW <= gw) {\n        let x = (gw - totalW) / 2;\n        visCenters = visOuter.map((r2) => {\n          const c2 = x + r2;\n          x += 2 * r2 + gap;\n          return c2;\n        });\n      } else if (Kv === 1) {\n        visCenters = [gw / 2];\n      } else {\n        const lo = visOuter[0];\n        const hi = gw - visOuter[Kv - 1];\n        visCenters = visOuter.map((_, s2) => lo + (hi - lo) * s2 / (Kv - 1));\n      }\n      centers = counts.map(\n        (_, i2) => slotOf[i2] >= 0 ? visCenters[slotOf[i2]] : gw / 2\n      );\n    }\n    return counts.map((n2, i2) => ({\n      i: i2,\n      cx: centers[i2],\n      cy,\n      outerR: outerRs[i2],\n      dots: this._spiral(centers[i2], cy, n2, step, 0)\n    }));\n  }\n  /**\n   * Lay out all categories into ONE packed blob. Dots are assigned spiral\n   * indices in category order (smallest-first when sortByGroup), so the\n   * minority group nests in the centre.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutPacked(counts, opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const labelSpace = 6;\n    const total = Math.max(1, counts.reduce((a2, b2) => a2 + b2, 0));\n    const availR = Math.max(\n      4,\n      Math.min(gw, gh - labelSpace) / 2 - Math.min(gw, gh) * 0.06\n    );\n    const step = this._resolveStep(opts, availR, total);\n    this._lastDotR = this._dotRadiusFromStep(step, opts);\n    const cx = gw / 2;\n    const cy = labelSpace + (gh - labelSpace) / 2;\n    const order = counts.map((_, i2) => i2);\n    if (opts.sortByGroup !== false) {\n      order.sort((a2, b2) => counts[a2] - counts[b2]);\n    }\n    const clusters = counts.map((_, i2) => ({\n      i: i2,\n      cx,\n      cy,\n      outerR: step * Math.sqrt(total) + this._lastDotR,\n      /** @type {{x:number,y:number,slot?:number}[]} */\n      dots: []\n    }));\n    let gi = 0;\n    order.forEach((catI) => {\n      for (let j = 0; j < counts[catI]; j++) {\n        const r2 = step * Math.sqrt(gi + 0.5);\n        const theta = gi * GOLDEN_ANGLE;\n        clusters[catI].dots.push({\n          x: cx + r2 * Math.cos(theta),\n          y: cy + r2 * Math.sin(theta),\n          slot: gi\n        });\n        gi++;\n      }\n    });\n    return clusters;\n  }\n  /**\n   * Lay out all marks as a PARLIAMENT / hemicycle: seats in concentric arced\n   * rows across an annulus, filled in category (party) order so each category\n   * forms a contiguous angular wedge (the classic seating chart). `arc` controls\n   * the sweep (`startAngle`/`endAngle`, radialBar convention: 0 = top, clockwise;\n   * default a top semicircle), the donut hole (`innerRadiusRatio`) and the row\n   * count (`rows`, or 'auto'). Like `packed` this is ONE shared shape coloured by\n   * category, so seats key by physical slot: a seat-count change recolours the\n   * party boundary in place and only the rim adds / removes seats.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutArc(counts, opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const total = Math.max(1, counts.reduce((a2, b3) => a2 + b3, 0));\n    const acfg = opts.arc || {};\n    const startDeg = typeof acfg.startAngle === \"number\" ? acfg.startAngle : -90;\n    const endDeg = typeof acfg.endAngle === \"number\" ? acfg.endAngle : 90;\n    const a0 = startDeg * Math.PI / 180;\n    const a1 = endDeg * Math.PI / 180;\n    const span = a1 - a0 || Math.PI;\n    const innerRatio = Math.max(\n      0,\n      Math.min(0.95, typeof acfg.innerRadiusRatio === \"number\" ? acfg.innerRadiusRatio : 0.4)\n    );\n    const ux = (a2) => Math.sin(a2);\n    const uy = (a2) => -Math.cos(a2);\n    const b2 = this._arcBounds(a0, a1);\n    const pad = Math.min(gw, gh) * 0.04;\n    const boxW = Math.max(1e-6, b2.maxX - b2.minX);\n    const boxH = Math.max(1e-6, b2.maxY - b2.minY);\n    const r1 = Math.max(4, Math.min((gw - 2 * pad) / boxW, (gh - 2 * pad) / boxH));\n    const r0 = r1 * innerRatio;\n    const cx = gw / 2 - (b2.minX + b2.maxX) / 2 * r1;\n    const cy = gh / 2 - (b2.minY + b2.maxY) / 2 * r1;\n    const alloc = this._arcAllocate(total, r0, r1, span, opts);\n    this._lastDotR = alloc.dotR;\n    const seats = [];\n    for (let r2 = 0; r2 < alloc.R; r2++) {\n      const rho = alloc.radii[r2];\n      const n2 = alloc.seatsPerRow[r2];\n      for (let k = 0; k < n2; k++) {\n        const a2 = n2 === 1 ? (a0 + a1) / 2 : a0 + span * (k + 0.5) / n2;\n        seats.push({ a: a2, x: cx + rho * ux(a2), y: cy + rho * uy(a2) });\n      }\n    }\n    seats.sort((s1, s2) => s1.a - s2.a);\n    const clusters = counts.map((_, i2) => ({\n      i: i2,\n      cx,\n      cy,\n      outerR: r1,\n      /** @type {{x:number,y:number,slot?:number}[]} */\n      dots: []\n    }));\n    let ci = 0;\n    let used = 0;\n    seats.forEach((s2, slot) => {\n      while (ci < counts.length && used >= counts[ci]) {\n        ci++;\n        used = 0;\n      }\n      if (ci >= counts.length) return;\n      clusters[ci].dots.push({ x: s2.x, y: s2.y, slot });\n      used++;\n    });\n    return clusters;\n  }\n  /**\n   * Bounding box of the outer arc (radius 1) over [a0, a1], including the centre\n   * and every cardinal angle (multiple of 90deg) inside the range, so a\n   * semicircle / full circle / arbitrary sweep is all bounded correctly.\n   * @param {number} a0 @param {number} a1\n   * @returns {{minX:number,maxX:number,minY:number,maxY:number}}\n   */\n  _arcBounds(a0, a1) {\n    const ux = (a2) => Math.sin(a2);\n    const uy = (a2) => -Math.cos(a2);\n    const lo = Math.min(a0, a1);\n    const hi = Math.max(a0, a1);\n    const xs = [0, ux(a0), ux(a1)];\n    const ys = [0, uy(a0), uy(a1)];\n    const q = Math.PI / 2;\n    for (let k = Math.ceil(lo / q); k * q <= hi; k++) {\n      xs.push(ux(k * q));\n      ys.push(uy(k * q));\n    }\n    return {\n      minX: Math.min(...xs),\n      maxX: Math.max(...xs),\n      minY: Math.min(...ys),\n      maxY: Math.max(...ys)\n    };\n  }\n  /**\n   * Allocate `total` seats across concentric rows of the annulus [r0, r1] sweeping\n   * `span` radians: seats per row are proportional to the row radius (a longer arc\n   * holds more), summed EXACTLY to total by largest remainder. Row count is\n   * `arc.rows` if given, else derived from a fixed dot size, else auto-searched to\n   * maximise the dot radius (the largest dots that still pack without overlap,\n   * mirroring `size:'auto'` elsewhere).\n   * @param {number} total @param {number} r0 @param {number} r1 @param {number} span @param {any} opts\n   * @returns {{R:number, radii:number[], seatsPerRow:number[], dotR:number}}\n   */\n  _arcAllocate(total, r0, r1, span, opts) {\n    const spacing = opts.spacing > 0 ? opts.spacing : 1.05;\n    const absSpan = Math.abs(span) || Math.PI;\n    const fixed = this._fixedRadius(opts);\n    const evalR = (R) => {\n      R = Math.max(1, Math.round(R));\n      const radii = [];\n      for (let r2 = 0; r2 < R; r2++) {\n        radii.push(R === 1 ? (r0 + r1) / 2 : r0 + (r1 - r0) * (r2 / (R - 1)));\n      }\n      const weightSum = radii.reduce((a2, x) => a2 + x, 0) || 1;\n      const raw = radii.map((rho) => total * rho / weightSum);\n      const seatsPerRow = raw.map((x) => Math.floor(x));\n      let left = total - seatsPerRow.reduce((a2, x) => a2 + x, 0);\n      raw.map((x, idx) => ({ idx, frac: x - Math.floor(x) })).sort((p2, qq) => qq.frac - p2.frac).forEach((o2) => {\n        if (left > 0) {\n          seatsPerRow[o2.idx]++;\n          left--;\n        }\n      });\n      while (left > 0) {\n        seatsPerRow[R - 1]++;\n        left--;\n      }\n      const radialPitch = R === 1 ? r1 - r0 || r1 : (r1 - r0) / (R - 1);\n      let minArcPitch = Infinity;\n      for (let r2 = 0; r2 < R; r2++) {\n        const n2 = seatsPerRow[r2];\n        if (n2 <= 0) continue;\n        const arcPitch = radii[r2] * absSpan / n2;\n        if (arcPitch < minArcPitch) minArcPitch = arcPitch;\n      }\n      const pitch = Math.min(radialPitch, minArcPitch);\n      return { R, radii, seatsPerRow, dotR: Math.max(1, pitch / (2 * spacing)) };\n    };\n    const arcRows = opts.arc && opts.arc.rows;\n    let res;\n    if (typeof arcRows === \"number\" && arcRows >= 1) {\n      res = evalR(arcRows);\n    } else if (fixed) {\n      const pitch = 2 * fixed * spacing;\n      res = evalR((r1 - r0) / pitch + 1);\n    } else {\n      const maxR = Math.max(1, Math.min(40, Math.ceil(Math.sqrt(total)) + 6));\n      res = evalR(1);\n      for (let R = 2; R <= maxR; R++) {\n        const cand = evalR(R);\n        if (cand.dotR > res.dotR) res = cand;\n      }\n    }\n    if (fixed) res.dotR = fixed;\n    return res;\n  }\n  /**\n   * Lay out each category as a vertical BAR built from stacked dots (a unit /\n   * waffle column). Every bar shares one dot size and one width (the same\n   * number of dot columns); the bar's HEIGHT encodes its count. Dots fill each\n   * bar bottom-up, row by row. This is the \"dot bar\" state the circle layouts\n   * morph into: with `transition:'flow'` the dots glide straight from their\n   * circle slots into these bar slots (see the storyboard sample).\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutColumns(counts, opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const labelsOn = !!(opts.clusterLabels && opts.clusterLabels.show);\n    const labelsBelow = labelsOn && opts.clusterLabels.position === \"bottom\";\n    const topPad = labelsOn && !labelsBelow ? 30 : 6;\n    const visible = counts.map((_, i2) => i2).filter((i2) => counts[i2] > 0);\n    const Kv = Math.max(1, visible.length);\n    const slotOf = new Array(counts.length).fill(-1);\n    visible.forEach((i2, s2) => slotOf[i2] = s2);\n    const cellW = gw / Kv;\n    const barW = cellW * 0.62;\n    const bottomPad = Math.max(8, gh * 0.04) + (labelsBelow ? 30 : 0);\n    const availH = Math.max(4, gh - topPad - bottomPad);\n    const maxCount = Math.max(1, ...counts);\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const colSize = opts.columns ? opts.columns.size : void 0;\n    let fixed;\n    if (opts.shape !== \"image\" && colSize === \"auto\") {\n      fixed = null;\n    } else if (opts.shape !== \"image\" && typeof colSize === \"number\" && colSize > 0) {\n      fixed = colSize;\n    } else {\n      fixed = this._fixedRadius(opts);\n    }\n    let cols = 1;\n    let pitch = 0;\n    if (fixed) {\n      pitch = 2 * fixed * spacing;\n      this._lastDotR = fixed;\n      const rowsCap = Math.max(1, Math.floor(availH / pitch));\n      const maxColsByWidth = Math.max(1, Math.floor(barW / pitch));\n      cols = Math.max(1, Math.min(maxColsByWidth, Math.ceil(maxCount / rowsCap)));\n    } else {\n      let best = 0;\n      const maxCols = Math.max(1, Math.min(40, Math.round(barW / 4)));\n      for (let c2 = 1; c2 <= maxCols; c2++) {\n        const rows = Math.ceil(maxCount / c2);\n        const d = Math.min(barW / c2, availH / rows);\n        if (d > best) {\n          best = d;\n          cols = c2;\n        }\n      }\n      pitch = best;\n      this._lastDotR = Math.max(1, pitch / (2 * spacing));\n    }\n    const r2 = this._lastDotR;\n    const maxRows = Math.ceil(maxCount / cols);\n    const tallestBarH = Math.min(availH, maxRows * pitch);\n    const bottom = topPad + (availH + tallestBarH) / 2;\n    return counts.map((n2, i2) => {\n      const cx = slotOf[i2] >= 0 ? cellW * (slotOf[i2] + 0.5) : gw / 2;\n      const rows = Math.ceil(Math.max(1, n2) / cols);\n      const barH = rows * pitch;\n      const left = cx - cols * pitch / 2 + pitch / 2;\n      const dots = [];\n      for (let j = 0; j < n2; j++) {\n        const rowIdx = Math.floor(j / cols);\n        const colIdx = j % cols;\n        dots.push({\n          x: left + colIdx * pitch,\n          y: bottom - r2 - rowIdx * pitch\n        });\n      }\n      return {\n        i: i2,\n        cx,\n        cy: bottom - barH / 2,\n        outerR: barH / 2,\n        // Flag read by _drawClusterLabel: a bar takes a straight label (above\n        // or below per clusterLabels.position), never a curved arc.\n        flat: true,\n        dots\n      };\n    });\n  }\n  /**\n   * Lay out ALL categories into ONE regular lattice - a waffle / grid. Dots take\n   * sequential slots in DECLARED category order and fill row-major, `columns`\n   * wide, so each category owns a contiguous band of cells: a part-to-whole\n   * square \"pie\". `grid.total` (optional) re-allocates the cells to a fixed\n   * budget (e.g. 100) by largest remainder, so the grid reads as exact\n   * percentages regardless of the raw totals; without it there is one cell per\n   * unit (respecting unitValue / maxUnits). `grid.fillFrom` picks the first row.\n   * The category bands follow the legend order (no smallest-first sort), and\n   * each physical slot is keyed so a proportion change recolours boundary cells\n   * in place rather than reshuffling the whole grid.\n   * @param {number[]} counts\n   * @param {any} opts\n   */\n  _layoutGrid(counts, opts) {\n    if (opts.grid && opts.grid.split) return this._layoutGridSplit(counts, opts);\n    this._gridTrack = null;\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const gcfg = opts.grid || {};\n    const cols = Math.max(1, Math.round(gcfg.columns > 0 ? gcfg.columns : 10));\n    const fillFrom = gcfg.fillFrom === \"top\" ? \"top\" : \"bottom\";\n    const cells = gcfg.total > 0 ? this._largestRemainder(counts, Math.round(gcfg.total)) : counts.slice();\n    const totalCells = cells.reduce((a2, b2) => a2 + b2, 0);\n    const rows = Math.max(1, Math.ceil(Math.max(1, totalCells) / cols));\n    const labelSpace = 6;\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const availW = Math.max(4, gw);\n    const availH = Math.max(4, gh - labelSpace);\n    const fixed = this._fixedRadius(opts);\n    let pitch = 0;\n    if (fixed) {\n      pitch = 2 * fixed * spacing;\n      this._lastDotR = fixed;\n    } else {\n      pitch = Math.min(availW / cols, availH / rows);\n      this._lastDotR = Math.max(1, pitch / (2 * spacing));\n    }\n    const blockW = cols * pitch;\n    const blockH = rows * pitch;\n    const originX = (gw - blockW) / 2 + pitch / 2;\n    const topY = labelSpace + (availH - blockH) / 2;\n    const rowY = (rowIdx) => fillFrom === \"bottom\" ? topY + blockH - pitch / 2 - rowIdx * pitch : topY + pitch / 2 + rowIdx * pitch;\n    const clusters = counts.map((_, i2) => ({\n      i: i2,\n      cx: gw / 2,\n      cy: labelSpace + availH / 2,\n      outerR: Math.max(blockW, blockH) / 2,\n      /** @type {{x:number,y:number,slot?:number}[]} */\n      dots: []\n    }));\n    let k = 0;\n    for (let ci = 0; ci < cells.length; ci++) {\n      for (let j = 0; j < cells[ci]; j++) {\n        const col = k % cols;\n        const rowIdx = Math.floor(k / cols);\n        clusters[ci].dots.push({\n          x: originX + col * pitch,\n          y: rowY(rowIdx),\n          slot: k\n        });\n        k++;\n      }\n    }\n    return clusters;\n  }\n  /**\n   * Small-multiple (\"trellis\") waffles: ONE mini-waffle per category, laid out\n   * in a near-square grid of tiles. Each tile has `grid.total` cells (default\n   * 100 -> a 10x10 tile) and fills a fraction of them equal to the category's\n   * value over a denominator (`grid.max`, else the largest count so the leader\n   * fills its tile and every other tile stays proportionally full - no empty\n   * tiles for arbitrary data). The unfilled cells are drawn as a faint TRACK\n   * backdrop (see _drawGridTrack) so each tile reads as a part-to-whole \"of N\".\n   * Only VISIBLE (non-zero) categories claim a tile, so a legend hide drops the\n   * tile and the rest re-flow. Each filled cell is keyed by a physical\n   * `tile*cells + localCell` slot, so a value change grows/shrinks a tile's fill\n   * in place instead of reshuffling.\n   * @param {number[]} counts @param {any} opts\n   */\n  _layoutGridSplit(counts, opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const gcfg = opts.grid || {};\n    const cols = Math.max(1, Math.round(gcfg.columns > 0 ? gcfg.columns : 10));\n    const fillFrom = gcfg.fillFrom === \"top\" ? \"top\" : \"bottom\";\n    const cellsPerTile = Math.max(1, Math.round(gcfg.total > 0 ? gcfg.total : 100));\n    const rowsPerTile = Math.max(1, Math.ceil(cellsPerTile / cols));\n    const visible = counts.map((_, i2) => i2).filter((i2) => counts[i2] > 0);\n    const K = Math.max(1, visible.length);\n    const denom = gcfg.max > 0 ? gcfg.max : Math.max(1, ...counts);\n    const tileCols = Math.max(\n      1,\n      Math.round(gcfg.tileColumns > 0 ? gcfg.tileColumns : Math.ceil(Math.sqrt(K)))\n    );\n    const tileRows = Math.max(1, Math.ceil(K / tileCols));\n    const labelsOn = !(opts.clusterLabels && opts.clusterLabels.show === false);\n    const labelsBelow = labelsOn && opts.clusterLabels && opts.clusterLabels.position === \"bottom\";\n    const topBand = labelsOn && !labelsBelow ? 22 : 4;\n    const botBand = labelsOn && labelsBelow ? 22 : 4;\n    const tileW = gw / tileCols;\n    const tileH = gh / tileRows;\n    const availTileW = Math.max(4, tileW * 0.86);\n    const availTileH = Math.max(4, tileH - topBand - botBand);\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const fixed = this._fixedRadius(opts);\n    let pitch = 0;\n    if (fixed) {\n      pitch = 2 * fixed * spacing;\n      this._lastDotR = fixed;\n    } else {\n      pitch = Math.min(availTileW / cols, availTileH / rowsPerTile);\n      this._lastDotR = Math.max(1, pitch / (2 * spacing));\n    }\n    const blockW = cols * pitch;\n    const blockH = rowsPerTile * pitch;\n    const rowY = (topY, rowIdx) => fillFrom === \"bottom\" ? topY + blockH - pitch / 2 - rowIdx * pitch : topY + pitch / 2 + rowIdx * pitch;\n    const track = [];\n    const clusters = [];\n    visible.forEach((ci, t2) => {\n      const tc = t2 % tileCols;\n      const tr = Math.floor(t2 / tileCols);\n      const tileX = tc * tileW;\n      const tileYtop = tr * tileH;\n      const originX = tileX + (tileW - blockW) / 2 + pitch / 2;\n      const topY = tileYtop + topBand + (availTileH - blockH) / 2;\n      const cellXY = (k) => ({\n        x: originX + k % cols * pitch,\n        y: rowY(topY, Math.floor(k / cols))\n      });\n      for (let k = 0; k < cellsPerTile; k++) track.push(cellXY(k));\n      const filled = Math.max(\n        0,\n        Math.min(cellsPerTile, Math.round(counts[ci] / denom * cellsPerTile))\n      );\n      const dots = [];\n      for (let k = 0; k < filled; k++) {\n        const p2 = cellXY(k);\n        dots.push({ x: p2.x, y: p2.y, slot: t2 * cellsPerTile + k });\n      }\n      clusters.push({\n        i: ci,\n        cx: tileX + tileW / 2,\n        cy: topY + blockH / 2,\n        outerR: blockH / 2,\n        // Straight per-tile label (never a curved arc), placed by position.\n        flat: true,\n        split: true,\n        dots\n      });\n    });\n    this._gridDenom = denom;\n    this._gridTrack = { cells: track };\n    return clusters;\n  }\n  /**\n   * Draw the faint \"track\" backdrop for the small-multiple grid: every cell of\n   * every tile's full lattice, so the filled (coloured) cells drawn on top read\n   * as a fraction of the whole. Static (redrawn each render, never animated);\n   * painted BEHIND the series groups. `grid.trackColor` overrides the default\n   * theme-neutral grey.\n   * @param {any} ret @param {Graphics} graphics @param {any} opts\n   */\n  _drawGridTrack(ret, graphics, opts) {\n    const track = this._gridTrack;\n    if (!track || !track.cells || !track.cells.length) return;\n    const r2 = this._lastDotR;\n    const gcfg = opts.grid || {};\n    const trackColor = gcfg.trackColor || \"rgba(128,128,128,0.14)\";\n    const g2 = graphics.group({ class: \"apexcharts-unit-track\" });\n    track.cells.forEach((c2) => {\n      let el;\n      if (opts.shape === \"square\") {\n        const side = r2 * 2;\n        el = graphics.drawRect(0, 0, side, side, opts.borderRadius || 0, trackColor, 1, 0, \"none\");\n        el.node.setAttribute(\"fill\", trackColor);\n        el.node.setAttribute(\"x\", String(c2.x - r2));\n        el.node.setAttribute(\"y\", String(c2.y - r2));\n      } else {\n        el = graphics.drawCircle(r2, { fill: trackColor, \"stroke-width\": 0, stroke: \"none\" });\n        el.node.setAttribute(\"fill\", trackColor);\n        el.node.setAttribute(\"cx\", String(c2.x));\n        el.node.setAttribute(\"cy\", String(c2.y));\n      }\n      el.node.classList.add(\"apexcharts-unit-track-cell\");\n      g2.add(el);\n    });\n    ret.add(g2);\n  }\n  /**\n   * Scatter / beeswarm layout: position every unit on a real numeric X value\n   * axis by its own value (`_unitValueOf`), laned by category on Y. Within a\n   * lane an anti-overlap \"swarm\" pack (or a random jitter) spreads the dots off\n   * the centre line so equal / close values do not stack on top of each other.\n   * This is the unit chart's answer to \"put these on axes\": one dot per datum,\n   * placed by data, with a drawn value axis + category lanes (see\n   * _drawScatterAxes). Needs the per-unit object form (each datum a numeric\n   * `value`/`y`); flat counts have no per-unit value, so their lanes stay empty.\n   * @param {any} opts\n   */\n  _layoutScatter(opts) {\n    const w2 = this.w;\n    const scfg = opts.scatter || {};\n    if (scfg.y === \"value\") return this._layoutScatter2D(opts);\n    if (scfg.orientation === \"vertical\") return this._layoutScatterVertical(opts);\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const unitData = w2.seriesData.unitData || [];\n    const names = w2.seriesData.seriesNames || [];\n    const valueOf = (d) => this._unitValueOf(d);\n    const sizeStats = this._scatterSizeStats(scfg, unitData);\n    const catVals = unitData.map(\n      (cat) => Array.isArray(cat) ? cat.map(valueOf) : []\n    );\n    const isNum = (v2) => v2 != null && isFinite(v2);\n    const visible = catVals.map((_, i2) => i2).filter((i2) => catVals[i2].some(isNum));\n    const Kv = Math.max(1, visible.length);\n    let vmin = Infinity;\n    let vmax = -Infinity;\n    catVals.forEach(\n      (vs) => vs.forEach((v2) => {\n        if (v2 != null && isFinite(v2)) {\n          if (v2 < vmin) vmin = v2;\n          if (v2 > vmax) vmax = v2;\n        }\n      })\n    );\n    if (vmin === Infinity) {\n      vmin = 0;\n      vmax = 1;\n    }\n    const tickAmount = Math.max(2, Math.round(scfg.tickAmount > 0 ? scfg.tickAmount : 5));\n    const domain = this._scatterValueDomain(scfg, vmin, vmax, tickAmount);\n    const xMin = domain.min;\n    const xMax = domain.max;\n    const xSpan = xMax - xMin || 1;\n    const laneW = scfg.laneLabelWidth != null ? Math.max(0, scfg.laneLabelWidth) : Kv > 1 ? 92 : 8;\n    const bottomGutter = 30 + (scfg.xTitle ? 20 : 0);\n    const plotL = laneW;\n    const plotR = gw - 8;\n    const plotT = 10;\n    const plotB = gh - bottomGutter;\n    const plotW = Math.max(4, plotR - plotL);\n    const plotH = Math.max(4, plotB - plotT);\n    const plotX = (v2) => plotL + (v2 - xMin) / xSpan * plotW;\n    const laneH = plotH / Kv;\n    const laneCy = (slot) => plotT + laneH * (slot + 0.5);\n    let r2 = 0;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) {\n      r2 = fixed;\n    } else {\n      const maxLane = Math.max(\n        1,\n        ...visible.map((i2) => catVals[i2].filter(isNum).length)\n      );\n      r2 = Math.max(\n        2,\n        Math.min(6, laneH * 0.12, plotW / (2.5 * Math.sqrt(maxLane)))\n      );\n    }\n    this._lastDotR = r2;\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const step = Math.max(0.5, r2 * spacing);\n    const jitter = scfg.spread === \"jitter\";\n    const clusters = [];\n    const lanes = [];\n    const maxR = sizeStats ? sizeStats.rMax : r2;\n    visible.forEach((ci, slot) => {\n      const cy = laneCy(slot);\n      lanes.push({ i: ci, cy, name: names[ci] || `series-${ci + 1}` });\n      const cat = unitData[ci] || [];\n      const pts = cat.map((d, j) => {\n        const v2 = valueOf(d);\n        const p2 = { j, px: plotX(isNum(v2) ? v2 : xMin), y: cy };\n        if (sizeStats) p2.r = this._scatterRadius(d, sizeStats, r2);\n        return p2;\n      });\n      if (jitter) {\n        const halfLane = Math.max(maxR, laneH / 2 - maxR);\n        pts.forEach((p2, k) => {\n          const t2 = (k * 9301 + 49297) % 233280 / 233280;\n          p2.y = cy + (t2 * 2 - 1) * halfLane;\n        });\n      } else {\n        this._beeswarm(pts, cy, r2, step, maxR);\n      }\n      clusters.push({\n        i: ci,\n        cx: (plotL + plotR) / 2,\n        cy,\n        outerR: laneH / 2,\n        dots: pts.map((p2) => ({ x: p2.px, y: p2.y, r: p2.r }))\n      });\n    });\n    const ticks = domain.ticks;\n    this._scatterAxis = {\n      mode: \"1d\",\n      plotL,\n      plotR,\n      plotT,\n      plotB,\n      xMin,\n      xMax,\n      plotX,\n      ticks,\n      lanes,\n      xTitle: scfg.xTitle,\n      formatter: typeof scfg.xFormatter === \"function\" ? scfg.xFormatter : null,\n      gridlines: scfg.gridlines !== false\n    };\n    return clusters;\n  }\n  /**\n   * Vertical beeswarm: the transpose of _layoutScatter. The value runs UP the Y\n   * axis and each category is a column (lane) across X; the swarm pack spreads\n   * dots horizontally off each column's centre line. The value-axis config keys\n   * (`xMin`/`xMax`/`xTitle`/`xFormatter`/`tickAmount`) still describe the value\n   * axis (now Y), so flipping `orientation` keeps the same value settings.\n   * @param {any} opts\n   */\n  _layoutScatterVertical(opts) {\n    const w2 = this.w;\n    const scfg = opts.scatter || {};\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const unitData = w2.seriesData.unitData || [];\n    const names = w2.seriesData.seriesNames || [];\n    const valueOf = (d) => this._unitValueOf(d);\n    const sizeStats = this._scatterSizeStats(scfg, unitData);\n    const catVals = unitData.map(\n      (cat) => Array.isArray(cat) ? cat.map(valueOf) : []\n    );\n    const isNum = (v2) => v2 != null && isFinite(v2);\n    const visible = catVals.map((_, i2) => i2).filter((i2) => catVals[i2].some(isNum));\n    const Kv = Math.max(1, visible.length);\n    let vmin = Infinity;\n    let vmax = -Infinity;\n    catVals.forEach(\n      (vs) => vs.forEach((v2) => {\n        if (v2 != null && isFinite(v2)) {\n          if (v2 < vmin) vmin = v2;\n          if (v2 > vmax) vmax = v2;\n        }\n      })\n    );\n    if (vmin === Infinity) {\n      vmin = 0;\n      vmax = 1;\n    }\n    const tickAmount = Math.max(2, Math.round(scfg.tickAmount > 0 ? scfg.tickAmount : 5));\n    const domain = this._scatterValueDomain(scfg, vmin, vmax, tickAmount);\n    const vMin = domain.min;\n    const vMax = domain.max;\n    const vSpan = vMax - vMin || 1;\n    const leftGutter = 46 + (scfg.xTitle ? 18 : 0);\n    const bottomGutter = Kv > 1 ? 26 : 10;\n    const plotL = leftGutter;\n    const plotR = gw - 10;\n    const plotT = 10;\n    const plotB = gh - bottomGutter;\n    const plotW = Math.max(4, plotR - plotL);\n    const plotH = Math.max(4, plotB - plotT);\n    const plotY = (v2) => plotB - (v2 - vMin) / vSpan * plotH;\n    const laneW = plotW / Kv;\n    const laneCx = (slot) => plotL + laneW * (slot + 0.5);\n    let r2 = 0;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) {\n      r2 = fixed;\n    } else {\n      const maxLane = Math.max(\n        1,\n        ...visible.map((i2) => catVals[i2].filter(isNum).length)\n      );\n      r2 = Math.max(\n        2,\n        Math.min(6, laneW * 0.12, plotH / (2.5 * Math.sqrt(maxLane)))\n      );\n    }\n    this._lastDotR = r2;\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const step = Math.max(0.5, r2 * spacing);\n    const jitter = scfg.spread === \"jitter\";\n    const clusters = [];\n    const lanes = [];\n    const maxR = sizeStats ? sizeStats.rMax : r2;\n    visible.forEach((ci, slot) => {\n      const cx = laneCx(slot);\n      lanes.push({ i: ci, cx, name: names[ci] || `series-${ci + 1}` });\n      const cat = unitData[ci] || [];\n      const pts = cat.map((d, j) => {\n        const v2 = valueOf(d);\n        const p2 = { j, py: plotY(isNum(v2) ? v2 : vMin), x: cx };\n        if (sizeStats) p2.r = this._scatterRadius(d, sizeStats, r2);\n        return p2;\n      });\n      if (jitter) {\n        const halfLane = Math.max(maxR, laneW / 2 - maxR);\n        pts.forEach((p2, k) => {\n          const t2 = (k * 9301 + 49297) % 233280 / 233280;\n          p2.x = cx + (t2 * 2 - 1) * halfLane;\n        });\n      } else {\n        this._beeswarm(pts, cx, r2, step, maxR, true);\n      }\n      clusters.push({\n        i: ci,\n        cx,\n        cy: (plotT + plotB) / 2,\n        outerR: laneW / 2,\n        dots: pts.map((p2) => ({ x: p2.x, y: p2.py, r: p2.r }))\n      });\n    });\n    const ticks = domain.ticks;\n    this._scatterAxis = {\n      mode: \"1d\",\n      orientation: \"vertical\",\n      plotL,\n      plotR,\n      plotT,\n      plotB,\n      vMin,\n      vMax,\n      plotY,\n      ticks,\n      lanes,\n      valueTitle: scfg.xTitle,\n      formatter: typeof scfg.xFormatter === \"function\" ? scfg.xFormatter : null,\n      gridlines: scfg.gridlines !== false\n    };\n    return clusters;\n  }\n  /**\n   * 2D value-value scatter: each datum is a point at (`x`, `y`) on two numeric\n   * axes (a scatter / bubble plot in the unit family - premium, keyed\n   * transitions, per-unit colour/tooltip). Category = colour (one series group\n   * per category). With `scatter.sizeRange` set, each dot is a BUBBLE scaled (by\n   * area) from its `sizeField` (default 'z'). Needs the object form with numeric\n   * `x` + `y`.\n   * @param {any} opts\n   */\n  _layoutScatter2D(opts) {\n    const w2 = this.w;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    const scfg = opts.scatter || {};\n    const unitData = w2.seriesData.unitData || [];\n    const isNum = (v2) => typeof v2 === \"number\" && isFinite(v2);\n    const xOf = (d) => d && typeof d === \"object\" ? d.x : null;\n    const yOf = (d) => d && typeof d === \"object\" ? d.y != null ? d.y : d.value : null;\n    const visible = unitData.map((_, i2) => i2).filter(\n      (i2) => (unitData[i2] || []).some((d) => isNum(xOf(d)) && isNum(yOf(d)))\n    );\n    let xmn = Infinity;\n    let xmx = -Infinity;\n    let ymn = Infinity;\n    let ymx = -Infinity;\n    unitData.forEach(\n      (cat) => (cat || []).forEach((d) => {\n        const x = xOf(d);\n        const y = yOf(d);\n        if (isNum(x) && isNum(y)) {\n          if (x < xmn) xmn = x;\n          if (x > xmx) xmx = x;\n          if (y < ymn) ymn = y;\n          if (y > ymx) ymx = y;\n        }\n      })\n    );\n    if (xmn === Infinity) {\n      xmn = 0;\n      xmx = 1;\n      ymn = 0;\n      ymx = 1;\n    }\n    const xTicksN = Math.max(2, Math.round(scfg.tickAmount > 0 ? scfg.tickAmount : 5));\n    const yTicksN = Math.max(2, Math.round(scfg.yTickAmount > 0 ? scfg.yTickAmount : 5));\n    const nx = this._niceScale(\n      scfg.xMin != null ? scfg.xMin : xmn,\n      scfg.xMax != null ? scfg.xMax : xmx,\n      xTicksN\n    );\n    const ny = this._niceScale(\n      scfg.yMin != null ? scfg.yMin : ymn,\n      scfg.yMax != null ? scfg.yMax : ymx,\n      yTicksN\n    );\n    const xMin = scfg.xMin != null ? scfg.xMin : nx.min;\n    const xMax = scfg.xMax != null ? scfg.xMax : nx.max;\n    const yMin = scfg.yMin != null ? scfg.yMin : ny.min;\n    const yMax = scfg.yMax != null ? scfg.yMax : ny.max;\n    const xSpan = xMax - xMin || 1;\n    const ySpan = yMax - yMin || 1;\n    const leftGutter = 46 + (scfg.yTitle ? 18 : 0);\n    const bottomGutter = 30 + (scfg.xTitle ? 20 : 0);\n    const plotL = leftGutter;\n    const plotR = gw - 12;\n    const plotT = 10;\n    const plotB = gh - bottomGutter;\n    const plotW = Math.max(4, plotR - plotL);\n    const plotH = Math.max(4, plotB - plotT);\n    const plotX = (v2) => plotL + (v2 - xMin) / xSpan * plotW;\n    const plotY = (v2) => plotB - (v2 - yMin) / ySpan * plotH;\n    const sizeStats = this._scatterSizeStats(scfg, unitData);\n    const baseR = this._fixedRadius(opts) || 5;\n    this._lastDotR = baseR;\n    const clusters = [];\n    visible.forEach((ci) => {\n      const cat = unitData[ci] || [];\n      const dots = cat.map((d) => {\n        const x = xOf(d);\n        const y = yOf(d);\n        return {\n          x: plotX(isNum(x) ? x : xMin),\n          y: plotY(isNum(y) ? y : yMin),\n          r: sizeStats ? this._scatterRadius(d, sizeStats, baseR) : void 0\n        };\n      });\n      clusters.push({\n        i: ci,\n        cx: (plotL + plotR) / 2,\n        cy: (plotT + plotB) / 2,\n        outerR: plotH / 2,\n        dots\n      });\n    });\n    const mkTicks = (lo, hi, span, spacing, pinned, n2) => {\n      const out = [];\n      if (pinned) {\n        for (let k = 0; k < n2; k++) out.push(lo + span * k / (n2 - 1));\n      } else {\n        const sp = spacing || span / Math.max(1, n2 - 1);\n        for (let v2 = lo; v2 <= hi + sp * 0.5; v2 += sp) {\n          out.push(Math.abs(v2) < sp * 1e-9 ? 0 : v2);\n        }\n      }\n      return out;\n    };\n    this._scatterAxis = {\n      mode: \"2d\",\n      plotL,\n      plotR,\n      plotT,\n      plotB,\n      plotX,\n      plotY,\n      xTicks: mkTicks(\n        xMin,\n        xMax,\n        xSpan,\n        nx.spacing,\n        scfg.xMin != null || scfg.xMax != null,\n        xTicksN\n      ),\n      yTicks: mkTicks(\n        yMin,\n        yMax,\n        ySpan,\n        ny.spacing,\n        scfg.yMin != null || scfg.yMax != null,\n        yTicksN\n      ),\n      xTitle: scfg.xTitle,\n      yTitle: scfg.yTitle,\n      xFormatter: typeof scfg.xFormatter === \"function\" ? scfg.xFormatter : null,\n      yFormatter: typeof scfg.yFormatter === \"function\" ? scfg.yFormatter : null,\n      gridlines: scfg.gridlines !== false\n    };\n    return clusters;\n  }\n  /**\n   * Bubble size stats for the scatter layout, or null when `scatter.sizeRange`\n   * is not a `[minR, maxR]` pair. Reads the global range of each datum's\n   * `sizeField` (default 'z') so a value maps to a radius (area scale) in\n   * _scatterRadius.\n   * @param {any} scfg @param {any[][]} unitData\n   * @returns {{zmin:number,zmax:number,rMin:number,rMax:number,field:string}|null}\n   */\n  _scatterSizeStats(scfg, unitData) {\n    const range = scfg && scfg.sizeRange;\n    if (!Array.isArray(range) || range.length < 2) return null;\n    const rMin = Math.max(0.5, +range[0]);\n    const rMax = Math.max(rMin, +range[1]);\n    const field = scfg.sizeField || \"z\";\n    let zmin = Infinity;\n    let zmax = -Infinity;\n    unitData.forEach(\n      (cat) => (cat || []).forEach((d) => {\n        const z = d && typeof d === \"object\" ? d[field] : null;\n        if (typeof z === \"number\" && isFinite(z)) {\n          if (z < zmin) zmin = z;\n          if (z > zmax) zmax = z;\n        }\n      })\n    );\n    if (zmin === Infinity) return null;\n    return { zmin, zmax, rMin, rMax, field };\n  }\n  /**\n   * Radius for one datum under the bubble size stats: area proportional to the\n   * `sizeField` value (so radius grows with sqrt), between rMin and rMax. A\n   * missing value collapses to rMin.\n   * @param {any} d\n   * @param {{zmin:number,zmax:number,rMin:number,rMax:number,field:string}} st\n   * @param {number} fallback @returns {number}\n   */\n  _scatterRadius(d, st, fallback) {\n    if (!st) return fallback;\n    const z = d && typeof d === \"object\" ? d[st.field] : null;\n    if (typeof z !== \"number\" || !isFinite(z)) return st.rMin;\n    const t2 = st.zmax > st.zmin ? (z - st.zmin) / (st.zmax - st.zmin) : 1;\n    const tc = Math.max(0, Math.min(1, t2));\n    const aMin = st.rMin * st.rMin;\n    const aMax = st.rMax * st.rMax;\n    return Math.sqrt(aMin + tc * (aMax - aMin));\n  }\n  /**\n   * One-dimensional anti-overlap \"beeswarm\" pack: given points with a fixed x\n   * (`px`) and a lane centre `cy`, assign each a y so no two dots overlap (centre\n   * distance >= r_i + r_j). Greedy in ascending-x order, trying offsets 0, +step,\n   * -step, +2step ... and taking the SMALLEST that clears every already-placed\n   * neighbour still within reach in x. No-overlap always wins: a very dense lane\n   * grows a taller swarm rather than stacking dots (offsets are not hard-clamped\n   * to the lane). Each point may carry its own radius `r` (bubble beeswarm),\n   * else `rFallback` applies; `maxR` bounds the value-window break. Deterministic\n   * (no physics, no randomness).\n   *\n   * Orientation-agnostic: the \"fixed\" axis is the value axis and the \"spread\"\n   * axis is the lane thickness. Horizontal (default): fixed = `px`, spread = `y`\n   * (mutates `.y`). Vertical: fixed = `py`, spread = `x` (mutates `.x`).\n   * @param {any[]} pts @param {number} center lane centre on the spread axis\n   * @param {number} rFallback @param {number} step @param {number} [maxR]\n   * @param {boolean} [vertical]\n   */\n  _beeswarm(pts, center, rFallback, step, maxR, vertical = false) {\n    const fk = vertical ? \"py\" : \"px\";\n    const sk = vertical ? \"x\" : \"y\";\n    const order = pts.slice().sort((a2, b2) => a2[fk] - b2[fk]);\n    const placed = [];\n    const rCap = maxR != null ? maxR : rFallback;\n    order.forEach((p2) => {\n      const pr = p2.r != null ? p2.r : rFallback;\n      let chosen = 0;\n      for (let k = 0; k < 2e3; k++) {\n        const off = k === 0 ? 0 : Math.ceil(k / 2) * step * (k % 2 ? 1 : -1);\n        const s2 = center + off;\n        let ok = true;\n        for (let m2 = placed.length - 1; m2 >= 0; m2--) {\n          const q = placed[m2];\n          const df = p2[fk] - q.f;\n          if (df > pr + rCap) break;\n          const need = pr + q.r;\n          const ds = s2 - q.s;\n          if (df * df + ds * ds < need * need) {\n            ok = false;\n            break;\n          }\n        }\n        if (ok) {\n          chosen = off;\n          break;\n        }\n      }\n      p2[sk] = center + chosen;\n      placed.push({ f: p2[fk], s: p2[sk], r: pr });\n    });\n  }\n  /**\n   * Value-axis domain + ticks for a 1D beeswarm. The domain ALWAYS contains\n   * every datum: a swarm that clips a dot outside the plot box is a bug, so an\n   * explicit `xMin`/`xMax` only FRAMES the axis and is extended by whole\n   * tick-steps whenever the data would otherwise overflow. Orientation-agnostic:\n   * the same value axis is X for a horizontal swarm and Y for a vertical one.\n   * @param {any} scfg scatter config\n   * @param {number} vmin data minimum @param {number} vmax data maximum\n   * @param {number} tickAmount desired tick count\n   * @returns {{ min:number, max:number, ticks:number[] }}\n   */\n  _scatterValueDomain(scfg, vmin, vmax, tickAmount) {\n    const buildTicks = (min, max, spacing2) => {\n      const ticks = [];\n      for (let v2 = min; v2 <= max + spacing2 * 0.5; v2 += spacing2) {\n        ticks.push(Math.abs(v2) < spacing2 * 1e-9 ? 0 : v2);\n      }\n      return ticks;\n    };\n    if (scfg.xMin != null || scfg.xMax != null) {\n      let min = scfg.xMin != null ? scfg.xMin : vmin;\n      let max = scfg.xMax != null ? scfg.xMax : vmax;\n      if (!(max > min)) max = min + 1;\n      const spacing2 = (max - min) / Math.max(1, tickAmount - 1);\n      if (vmin < min) min -= Math.ceil((min - vmin) / spacing2) * spacing2;\n      if (vmax > max) max += Math.ceil((vmax - max) / spacing2) * spacing2;\n      return { min, max, ticks: buildTicks(min, max, spacing2) };\n    }\n    const nice = this._niceScale(vmin, vmax, tickAmount);\n    const spacing = nice.spacing || (nice.max - nice.min) / Math.max(1, tickAmount - 1);\n    return { min: nice.min, max: nice.max, ticks: buildTicks(nice.min, nice.max, spacing) };\n  }\n  /**\n   * A \"nice\" numeric scale [min, max] + tick spacing covering [dataMin, dataMax]\n   * with about `ticks` ticks, using rounded 1/2/5 x 10^n steps. Homegrown (no\n   * dependency) - lean-core.\n   * @param {number} dataMin @param {number} dataMax @param {number} ticks\n   * @returns {{min:number,max:number,spacing:number}}\n   */\n  _niceScale(dataMin, dataMax, ticks) {\n    const lo = dataMin;\n    let hi = dataMax;\n    if (!(hi > lo)) hi = lo + 1;\n    const range = this._niceNum(hi - lo, false);\n    const spacing = this._niceNum(range / Math.max(1, ticks - 1), true);\n    return {\n      min: Math.floor(lo / spacing) * spacing,\n      max: Math.ceil(hi / spacing) * spacing,\n      spacing\n    };\n  }\n  /**\n   * Round a range to a \"nice\" 1/2/5 x 10^n number (Heckbert's loose/round label\n   * algorithm).\n   * @param {number} range @param {boolean} round @returns {number}\n   */\n  _niceNum(range, round) {\n    const rng = range > 0 ? range : 1;\n    const exp = Math.floor(Math.log(rng) / Math.LN10);\n    const frac = rng / Math.pow(10, exp);\n    let nf;\n    if (round) {\n      nf = frac < 1.5 ? 1 : frac < 3 ? 2 : frac < 7 ? 5 : 10;\n    } else {\n      nf = frac <= 1 ? 1 : frac <= 2 ? 2 : frac <= 5 ? 5 : 10;\n    }\n    return nf * Math.pow(10, exp);\n  }\n  /**\n   * Draw the scatter chrome behind the dots, from the geometry the layout\n   * stashed on `this._scatterAxis`. 1D (beeswarm): vertical X gridlines +\n   * baseline + tick labels (+ x title) + a per-lane category label in the\n   * category colour. 2D: both X + Y gridlines, both axes' tick labels, and\n   * rotated/placed axis titles (no lane labels - category is colour). Browser-\n   * only (SSR renders the dots without the chrome, as with cluster labels).\n   * @param {any} ret @param {Graphics} graphics\n   */\n  _drawScatterAxes(ret, graphics) {\n    const w2 = this.w;\n    if (!Environment.isBrowser()) return;\n    const ax = this._scatterAxis;\n    if (!ax) return;\n    const NS = \"http://www.w3.org/2000/svg\";\n    const g2 = graphics.group({ class: \"apexcharts-unit-axis\" });\n    const gridColor = w2.config.grid && w2.config.grid.borderColor || \"rgba(128,128,128,0.18)\";\n    const axisColor = \"rgba(128,128,128,0.5)\";\n    const cfgColors = w2.config.xaxis && w2.config.xaxis.labels && w2.config.xaxis.labels.style && w2.config.xaxis.labels.style.colors;\n    const configuredLabelColor = Array.isArray(cfgColors) ? cfgColors[0] : cfgColors;\n    const labelColor = configuredLabelColor || \"rgba(120,130,140,0.9)\";\n    const line = (x1, y1, x2, y2, stroke) => {\n      const l2 = BrowserAPIs.createElementNS(NS, \"line\");\n      l2.setAttribute(\"x1\", String(x1));\n      l2.setAttribute(\"y1\", String(y1));\n      l2.setAttribute(\"x2\", String(x2));\n      l2.setAttribute(\"y2\", String(y2));\n      l2.setAttribute(\"stroke\", stroke);\n      l2.setAttribute(\"shape-rendering\", \"crispEdges\");\n      g2.node.appendChild(l2);\n    };\n    const text = (str, x, y, anchor, fill, size, weight, cls) => {\n      const t2 = BrowserAPIs.createElementNS(NS, \"text\");\n      t2.setAttribute(\"class\", cls);\n      t2.setAttribute(\"x\", String(x));\n      t2.setAttribute(\"y\", String(y));\n      t2.setAttribute(\"text-anchor\", anchor);\n      t2.setAttribute(\"dominant-baseline\", \"middle\");\n      t2.setAttribute(\"font-size\", `${size}px`);\n      t2.setAttribute(\"font-family\", w2.config.chart.fontFamily || \"inherit\");\n      t2.setAttribute(\"font-weight\", String(weight));\n      t2.setAttribute(\"fill\", fill);\n      t2.textContent = str;\n      g2.node.appendChild(t2);\n    };\n    if (ax.mode === \"2d\") {\n      ax.yTicks.forEach((v2) => {\n        const y = ax.plotY(v2);\n        if (ax.gridlines) line(ax.plotL, y, ax.plotR, y, gridColor);\n        const label = ax.yFormatter ? String(ax.yFormatter(v2)) : this._formatTick(v2);\n        text(label, ax.plotL - 8, y, \"end\", labelColor, 11, 400, \"apexcharts-unit-tick\");\n      });\n      ax.xTicks.forEach((v2) => {\n        const x = ax.plotX(v2);\n        if (ax.gridlines) line(x, ax.plotT, x, ax.plotB, gridColor);\n        const label = ax.xFormatter ? String(ax.xFormatter(v2)) : this._formatTick(v2);\n        text(label, x, ax.plotB + 14, \"middle\", labelColor, 11, 400, \"apexcharts-unit-tick\");\n      });\n      line(ax.plotL, ax.plotB, ax.plotR, ax.plotB, axisColor);\n      line(ax.plotL, ax.plotT, ax.plotL, ax.plotB, axisColor);\n      if (ax.xTitle) {\n        text(\n          String(ax.xTitle),\n          (ax.plotL + ax.plotR) / 2,\n          ax.plotB + 32,\n          \"middle\",\n          labelColor,\n          12,\n          600,\n          \"apexcharts-unit-axis-title\"\n        );\n      }\n      if (ax.yTitle) {\n        const yt = BrowserAPIs.createElementNS(NS, \"text\");\n        yt.setAttribute(\"class\", \"apexcharts-unit-axis-title\");\n        const tx = 14;\n        const ty = (ax.plotT + ax.plotB) / 2;\n        yt.setAttribute(\"x\", String(tx));\n        yt.setAttribute(\"y\", String(ty));\n        yt.setAttribute(\"text-anchor\", \"middle\");\n        yt.setAttribute(\"font-size\", \"12px\");\n        yt.setAttribute(\"font-family\", w2.config.chart.fontFamily || \"inherit\");\n        yt.setAttribute(\"font-weight\", \"600\");\n        yt.setAttribute(\"fill\", labelColor);\n        yt.setAttribute(\"transform\", `rotate(-90 ${tx} ${ty})`);\n        yt.textContent = String(ax.yTitle);\n        g2.node.appendChild(yt);\n      }\n      ret.add(g2);\n      return;\n    }\n    if (ax.orientation === \"vertical\") {\n      ax.ticks.forEach((v2) => {\n        const y = ax.plotY(v2);\n        if (ax.gridlines) line(ax.plotL, y, ax.plotR, y, gridColor);\n        const label = ax.formatter ? String(ax.formatter(v2)) : this._formatTick(v2);\n        text(label, ax.plotL - 8, y, \"end\", labelColor, 11, 400, \"apexcharts-unit-tick\");\n      });\n      line(ax.plotL, ax.plotT, ax.plotL, ax.plotB, axisColor);\n      if (ax.valueTitle) {\n        const yt = BrowserAPIs.createElementNS(NS, \"text\");\n        yt.setAttribute(\"class\", \"apexcharts-unit-axis-title\");\n        const tx = 14;\n        const ty = (ax.plotT + ax.plotB) / 2;\n        yt.setAttribute(\"x\", String(tx));\n        yt.setAttribute(\"y\", String(ty));\n        yt.setAttribute(\"text-anchor\", \"middle\");\n        yt.setAttribute(\"font-size\", \"12px\");\n        yt.setAttribute(\"font-family\", w2.config.chart.fontFamily || \"inherit\");\n        yt.setAttribute(\"font-weight\", \"600\");\n        yt.setAttribute(\"fill\", labelColor);\n        yt.setAttribute(\"transform\", `rotate(-90 ${tx} ${ty})`);\n        yt.textContent = String(ax.valueTitle);\n        g2.node.appendChild(yt);\n      }\n      ax.lanes.forEach((lane) => {\n        const color = configuredLabelColor || w2.globals.colors[lane.i] || w2.globals.colors[0] || \"#008FFB\";\n        text(lane.name, lane.cx, ax.plotB + 16, \"middle\", color, 12, 600, \"apexcharts-unit-lane-label\");\n      });\n      ret.add(g2);\n      return;\n    }\n    ax.ticks.forEach((v2, idx) => {\n      const x = ax.plotX(v2);\n      if (ax.gridlines) line(x, ax.plotT, x, ax.plotB, gridColor);\n      const label = ax.formatter ? String(ax.formatter(v2)) : this._formatTick(v2);\n      const anchor = idx === 0 ? \"start\" : idx === ax.ticks.length - 1 ? \"end\" : \"middle\";\n      text(label, x, ax.plotB + 14, anchor, labelColor, 11, 400, \"apexcharts-unit-tick\");\n    });\n    line(ax.plotL, ax.plotB, ax.plotR, ax.plotB, axisColor);\n    if (ax.xTitle) {\n      text(\n        String(ax.xTitle),\n        (ax.plotL + ax.plotR) / 2,\n        ax.plotB + 32,\n        \"middle\",\n        labelColor,\n        12,\n        600,\n        \"apexcharts-unit-axis-title\"\n      );\n    }\n    if (ax.plotL > 12) {\n      ax.lanes.forEach((lane) => {\n        const color = configuredLabelColor || w2.globals.colors[lane.i] || w2.globals.colors[0] || \"#008FFB\";\n        text(lane.name, ax.plotL - 8, lane.cy, \"end\", color, 12, 600, \"apexcharts-unit-lane-label\");\n      });\n    }\n    ret.add(g2);\n  }\n  /**\n   * Compact tick-value formatting: integers as-is, otherwise trimmed to a short\n   * decimal; large magnitudes get a k/M suffix.\n   * @param {number} v @returns {string}\n   */\n  _formatTick(v2) {\n    if (!isFinite(v2)) return \"\";\n    const a2 = Math.abs(v2);\n    if (a2 >= 1e6) return `${+(v2 / 1e6).toFixed(1)}M`;\n    if (a2 >= 1e4) return `${+(v2 / 1e3).toFixed(1)}k`;\n    if (Number.isInteger(v2)) return String(v2);\n    return String(+v2.toFixed(2));\n  }\n  /**\n   * Distribute `total` whole cells across `counts` in proportion to each value,\n   * using the largest-remainder method so the parts sum to exactly `total`\n   * (used by the grid/waffle percentage mode).\n   * @param {number[]} counts @param {number} total @returns {number[]}\n   */\n  _largestRemainder(counts, total) {\n    const sum = counts.reduce((a2, b2) => a2 + b2, 0);\n    if (sum <= 0 || total <= 0) return counts.map(() => 0);\n    const exact = counts.map((c2) => c2 / sum * total);\n    const floors = exact.map((v2) => Math.floor(v2));\n    const used = floors.reduce((a2, b2) => a2 + b2, 0);\n    const remaining = Math.max(0, total - used);\n    const byFrac = exact.map((v2, i2) => ({ i: i2, frac: v2 - Math.floor(v2) })).sort((a2, b2) => b2.frac - a2.frac);\n    const out = floors.slice();\n    for (let n2 = 0; n2 < remaining && n2 < byFrac.length; n2++) {\n      out[byFrac[n2].i]++;\n    }\n    return out;\n  }\n  /**\n   * Phyllotaxis (sunflower) placement for `n` points around (cx, cy).\n   * @param {number} cx @param {number} cy @param {number} n\n   * @param {number} step @param {number} startIndex\n   * @returns {{x:number,y:number}[]}\n   */\n  _spiral(cx, cy, n2, step, startIndex) {\n    const pts = [];\n    for (let k = 0; k < n2; k++) {\n      const idx = startIndex + k;\n      const r2 = step * Math.sqrt(idx + 0.5);\n      const theta = idx * GOLDEN_ANGLE;\n      pts.push({ x: cx + r2 * Math.cos(theta), y: cy + r2 * Math.sin(theta) });\n    }\n    return pts;\n  }\n  /**\n   * A fixed dot radius, if the shape/size implies one: an explicit numeric\n   * `size`, or an `image` shape (sized by its own width/height). Returns null\n   * when dots should auto-size to fit the plot.\n   * @param {any} opts @returns {number | null}\n   */\n  _fixedRadius(opts) {\n    if (opts.shape === \"image\" && opts.image) {\n      return Math.max(opts.image.width || 20, opts.image.height || 20) / 2;\n    }\n    if (this._bubbleActive(opts) && typeof opts.sizeByValue.maxRadius === \"number\") {\n      return opts.sizeByValue.maxRadius > 0 ? opts.sizeByValue.maxRadius : null;\n    }\n    if (typeof opts.size === \"number\" && opts.size > 0) return opts.size;\n    return null;\n  }\n  /**\n   * Whether opt-in bubble sizing applies: enabled, and the shape is a circle\n   * (squares/images keep a uniform size).\n   * @param {any} opts @returns {boolean}\n   */\n  _bubbleActive(opts) {\n    const sbv = opts.sizeByValue;\n    return !!(sbv && sbv.enabled && opts.shape !== \"image\" && opts.shape !== \"square\");\n  }\n  /**\n   * This datum's numeric value for sizing / tooltip: the number itself, or an\n   * object's `value` / `y`. Null when there is no usable number.\n   * @param {any} d @returns {number | null}\n   */\n  _unitValueOf(d) {\n    if (typeof d === \"number\") return d;\n    if (d && typeof d === \"object\") {\n      const v2 = d.value != null ? d.value : d.y;\n      return typeof v2 === \"number\" ? v2 : null;\n    }\n    return null;\n  }\n  /**\n   * Radius for one bubble given the value stats. Default 'area' scaling makes\n   * a bubble's AREA proportional to its value (radius grows with sqrt); 'linear'\n   * scales the radius directly. Missing values collapse to the min radius.\n   * @param {number|null} v\n   * @param {{min:number,max:number,minR:number,maxR:number,scale:string}} stats\n   * @returns {number}\n   */\n  _radiusForValue(v2, stats) {\n    if (v2 == null || !isFinite(v2)) return stats.minR;\n    const t2 = stats.max > stats.min ? (v2 - stats.min) / (stats.max - stats.min) : 1;\n    const tc = Math.max(0, Math.min(1, t2));\n    if (stats.scale === \"linear\") {\n      return stats.minR + tc * (stats.maxR - stats.minR);\n    }\n    const aMin = stats.minR * stats.minR;\n    const aMax = stats.maxR * stats.maxR;\n    return Math.sqrt(aMin + tc * (aMax - aMin));\n  }\n  /**\n   * Value stats + radius bounds for bubble sizing, or null when it does not\n   * apply (disabled, non-circle shape, or no per-unit values). `maxR` is the\n   * reference radius the layout already spaced the lattice for; `minR` defaults\n   * to ~35% of it.\n   * @param {any[][]} unitData @param {any} opts @param {number} refR\n   * @returns {{min:number,max:number,minR:number,maxR:number,scale:string}|null}\n   */\n  _bubbleStats(unitData, opts, refR) {\n    if (!this._bubbleActive(opts)) return null;\n    let vmin = Infinity;\n    let vmax = -Infinity;\n    unitData.forEach((cat) => {\n      if (!cat) return;\n      cat.forEach((d) => {\n        const v2 = this._unitValueOf(d);\n        if (v2 != null && isFinite(v2)) {\n          if (v2 < vmin) vmin = v2;\n          if (v2 > vmax) vmax = v2;\n        }\n      });\n    });\n    if (vmin === Infinity || vmax < vmin) return null;\n    const sbv = opts.sizeByValue;\n    const maxR = refR;\n    const minR = Math.max(\n      1,\n      Math.min(\n        maxR,\n        typeof sbv.minRadius === \"number\" ? sbv.minRadius : maxR * 0.35\n      )\n    );\n    return {\n      min: vmin,\n      max: vmax,\n      minR,\n      maxR,\n      scale: sbv.scale === \"linear\" ? \"linear\" : \"area\"\n    };\n  }\n  /**\n   * Radial step between successive spiral shells. A fixed radius derives the\n   * step directly; 'auto' derives it so a cluster of `count` dots fits `availR`.\n   * @param {any} opts @param {number} availR @param {number} count\n   * @returns {number}\n   */\n  _resolveStep(opts, availR, count) {\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) return 2 * fixed * spacing;\n    return availR / (Math.sqrt(Math.max(1, count)) + 0.5);\n  }\n  /**\n   * @param {number} step @param {any} opts\n   * @returns {number}\n   */\n  _dotRadiusFromStep(step, opts) {\n    const spacing = opts.spacing > 0 ? opts.spacing : 1;\n    const fixed = this._fixedRadius(opts);\n    if (fixed) return fixed;\n    return Math.max(1, step / (2 * spacing));\n  }\n  /**\n   * Corner-anchored shapes (square, image) position by their top-left x/y;\n   * circles position by their centre cx/cy.\n   * @param {any} opts @returns {boolean}\n   */\n  _isCorner(opts) {\n    return opts.shape === \"square\" || opts.shape === \"image\";\n  }\n  /**\n   * Half-width/height used to convert a centre point to a corner shape's x/y.\n   * @param {any} opts @returns {{hx:number, hy:number}}\n   */\n  _halfExtent(opts) {\n    if (opts.shape === \"image\" && opts.image) {\n      return { hx: (opts.image.width || 20) / 2, hy: (opts.image.height || 20) / 2 };\n    }\n    const r2 = this._lastDotR;\n    return { hx: r2, hy: r2 };\n  }\n  /**\n   * Draw one dot (circle, square, or image icon) with the category fill +\n   * stroke, tagged so the shared non-axis tooltip and hover reuse work.\n   * @param {Graphics} graphics @param {any} opts @param {number} dotR\n   * @param {string} color @param {number} i @param {number} j\n   * @returns {any}\n   */\n  _drawDot(graphics, opts, dotR, color, i2, j) {\n    const w2 = this.w;\n    const strokeW = w2.config.stroke.show ? w2.config.stroke.width : 0;\n    const strokeColor = Array.isArray(w2.globals.stroke.colors) ? w2.globals.stroke.colors[i2] || \"none\" : \"none\";\n    const fillOpacity = typeof w2.config.fill.opacity === \"number\" ? w2.config.fill.opacity : 1;\n    let el;\n    if (opts.shape === \"image\" && opts.image && opts.image.src) {\n      const iw = opts.image.width || 20;\n      const ih = opts.image.height || 20;\n      el = w2.dom.Paper.image(opts.image.src);\n      el.node.setAttribute(\"width\", String(iw));\n      el.node.setAttribute(\"height\", String(ih));\n      el.node.setAttribute(\"preserveAspectRatio\", \"xMidYMid meet\");\n      if (opts.image.tint) {\n        el.node.setAttribute(\"filter\", `url(#${this._tintFilter(color)})`);\n      }\n    } else if (opts.shape === \"square\") {\n      const side = dotR * 2;\n      el = graphics.drawRect(0, 0, side, side, opts.borderRadius || 0, color, 1, strokeW, strokeColor);\n      el.node.setAttribute(\"fill\", color);\n      if (fillOpacity < 1) el.node.setAttribute(\"fill-opacity\", String(fillOpacity));\n    } else {\n      el = graphics.drawCircle(dotR, {\n        fill: color,\n        \"stroke-width\": strokeW,\n        stroke: strokeColor\n      });\n      el.node.setAttribute(\"fill\", color);\n      if (fillOpacity < 1) el.node.setAttribute(\"fill-opacity\", String(fillOpacity));\n    }\n    el.node.classList.add(\"apexcharts-unit-area\");\n    el.node.setAttribute(\"i\", String(i2));\n    el.node.setAttribute(\"j\", String(j));\n    return el;\n  }\n  /**\n   * Ensure (once per colour) an SVG recolour filter exists in the chart's defs\n   * and return its id. The filter floods `color` and clips it to the source\n   * graphic's alpha (feComposite operator=\"in\"), so an `<image>` referencing a\n   * monochrome icon is repainted in `color` while keeping its silhouette. Reused\n   * across every dot of the same colour.\n   * @param {string} color @returns {string}\n   */\n  _tintFilter(color) {\n    const w2 = this.w;\n    const NS = \"http://www.w3.org/2000/svg\";\n    const safe = String(color).replace(/[^a-zA-Z0-9]/g, \"\");\n    const id = `apexcharts-unit-tint-${w2.globals.chartID}-${safe}`;\n    const svg = w2.dom.Paper.node;\n    if (svg.querySelector(`#${id}`)) return id;\n    let defs = svg.querySelector(\"defs\");\n    if (!defs) {\n      defs = BrowserAPIs.createElementNS(NS, \"defs\");\n      svg.insertBefore(defs, svg.firstChild);\n    }\n    const filter = BrowserAPIs.createElementNS(NS, \"filter\");\n    filter.setAttribute(\"id\", id);\n    filter.setAttribute(\"x\", \"0%\");\n    filter.setAttribute(\"y\", \"0%\");\n    filter.setAttribute(\"width\", \"100%\");\n    filter.setAttribute(\"height\", \"100%\");\n    const flood = BrowserAPIs.createElementNS(NS, \"feFlood\");\n    flood.setAttribute(\"flood-color\", color);\n    flood.setAttribute(\"result\", \"flood\");\n    const comp = BrowserAPIs.createElementNS(NS, \"feComposite\");\n    comp.setAttribute(\"in\", \"flood\");\n    comp.setAttribute(\"in2\", \"SourceAlpha\");\n    comp.setAttribute(\"operator\", \"in\");\n    filter.appendChild(flood);\n    filter.appendChild(comp);\n    defs.appendChild(filter);\n    return id;\n  }\n  /**\n   * Position a non-animated dot at (x, y). Circles use cx/cy at the centre;\n   * corner shapes (square, image) use x/y at the top-left.\n   * @param {SVGElement} node @param {any} opts @param {number} x @param {number} y\n   */\n  _placeDot(node, opts, x, y) {\n    if (this._isCorner(opts)) {\n      const { hx, hy } = this._halfExtent(opts);\n      node.setAttribute(\"x\", String(x - hx));\n      node.setAttribute(\"y\", String(y - hy));\n    } else {\n      node.setAttribute(\"cx\", String(x));\n      node.setAttribute(\"cy\", String(y));\n    }\n  }\n  /**\n   * Parse a `#rgb` / `#rrggbb` / `rgb()` / `rgba()` colour to `[r, g, b]`, or\n   * null if it cannot be parsed (the colour tween is then skipped).\n   * @param {string} str @returns {number[] | null}\n   */\n  _rgb(str) {\n    if (typeof str !== \"string\") return null;\n    let s2 = str.trim();\n    if (s2[0] === \"#\") {\n      if (s2.length === 4) s2 = \"#\" + s2[1] + s2[1] + s2[2] + s2[2] + s2[3] + s2[3];\n      const n2 = parseInt(s2.slice(1, 7), 16);\n      if (isNaN(n2)) return null;\n      return [n2 >> 16 & 255, n2 >> 8 & 255, n2 & 255];\n    }\n    const m2 = s2.match(/rgba?\\(([^)]+)\\)/);\n    if (m2) {\n      const p2 = m2[1].split(\",\").map((x) => parseFloat(x));\n      if (p2.length >= 3 && p2.every((v2) => !isNaN(v2))) return [p2[0], p2[1], p2[2]];\n    }\n    return null;\n  }\n  /**\n   * Whether to run the gather / transition animation. Runs on the initial mount\n   * and on data-driven updates (keyed old->new tween or cross-type burst).\n   * Skipped: in SSR, when animations are off, when the caller passed\n   * `animate:false` (shouldAnimate === false), on a PURE window resize (resized\n   * with no data change - re-gathering on every resize would be jarring), and\n   * when the user prefers reduced motion.\n   *\n   * Note: `w.globals.resized` is set true on every update (not just window\n   * resize), so it must be paired with `!dataChanged` to isolate a real resize.\n   * @returns {boolean}\n   */\n  _shouldAnimate() {\n    const w2 = this.w;\n    const anim = w2.config.chart.animations;\n    if (!Environment.isBrowser()) return false;\n    if (!anim || anim.enabled === false) return false;\n    if (w2.globals.shouldAnimate === false) return false;\n    if (w2.globals.resized && !w2.globals.dataChanged) return false;\n    if (anim.respectReducedMotion && prefersReducedMotion()) return false;\n    return true;\n  }\n  /**\n   * Give every dot an x/y spring, reusing the live springs of a gather this\n   * render just cancelled.\n   *\n   * The reuse is the whole point of the spring path. A carried spring holds a\n   * dot's real on-screen position AND its velocity, so an interrupted gather\n   * resumes from there. Without it the dot restarts from `cx0`, which on an\n   * update is the slot it was still travelling towards - so every interruption\n   * teleports it forward and then re-animates from a standstill. A dragged\n   * slider or a scrubbed storyboard interrupts on almost every frame, which is\n   * where that reads worst.\n   *\n   * Springs left over from a completed gather are at rest on their targets, so\n   * carrying them is identical to making fresh ones. Only an interrupted flight\n   * carries anything.\n   *\n   * @param {UnitAnimDot[]} dots\n   * @param {any} gcfg plotOptions.unit.gather\n   * @param {number} speed chart.animations.speed, in ms\n   * @param {any} opts plotOptions.unit\n   */\n  _seedSprings(dots, gcfg, speed, opts) {\n    const [stiffness, damping] = springParams(gcfg.spring, speed);\n    const live = this.ctx ? this.ctx._unitSprings : null;\n    const springs = /* @__PURE__ */ new Map();\n    for (let k = 0; k < dots.length; k++) {\n      const d = dots[k];\n      const carried = live && !d.isEnter && d.key != null ? live.get(d.key) : null;\n      const sx = carried ? carried.x : v(d.cx0, stiffness, damping);\n      const sy = carried ? carried.y : v(d.cy0, stiffness, damping);\n      if (carried) {\n        sx.stiffness = stiffness;\n        sy.stiffness = stiffness;\n        sx.damping = damping;\n        sy.damping = damping;\n        d.cx0 = sx.value;\n        d.cy0 = sy.value;\n        this._placeDot(d.node, opts, d.cx0, d.cy0);\n        if (sx.velocity !== 0 || sy.velocity !== 0) d.delay = 0;\n      }\n      d.sx = sx;\n      d.sy = sy;\n      if (d.key != null) springs.set(d.key, { x: sx, y: sy });\n    }\n    if (this.ctx) this.ctx._unitSprings = springs;\n  }\n  /**\n   * One rAF loop that tweens every dot from its start (cx0/cy0 - either the\n   * cluster centre on first mount / for entering dots, or its previous slot on\n   * an update) to its target slot, staggered by index. Entering dots fade in;\n   * moving dots stay opaque. Dots whose group colour changed (a 'flow' regroup)\n   * cross-fade their fill from the old colour to the new one over the same ease;\n   * dots whose radius changed (bubble sizing) grow/shrink over it too (circles).\n   *\n   * Position travels on a spring by default (`gather.motion`), so a gather\n   * interrupted by the next render resumes from where the dots actually are,\n   * carrying their velocity, rather than restarting from a standstill. Colour,\n   * radius and opacity stay on a fixed-duration ease either way: those are 0..1\n   * quantities, and the shared solver's rest thresholds are absolute (0.05 in\n   * caller units), which is negligible for pixels but 5% of a unit interval.\n   * @param {UnitAnimDot[]} dots\n   */\n  _runGather(dots) {\n    const w$1 = this.w;\n    const opts = w$1.config.plotOptions.unit;\n    const speed = Math.max(1, w$1.config.chart.animations.speed || 800);\n    const corner = this._isCorner(opts);\n    const { hx, hy } = this._halfExtent(opts);\n    const maxDelay = Math.min(speed * 0.6, 450);\n    const n2 = dots.length;\n    for (let k = 0; k < n2; k++) {\n      dots[k].delay = n2 > 1 ? k / (n2 - 1) * maxDelay : 0;\n    }\n    const cxAttr = corner ? \"x\" : \"cx\";\n    const cyAttr = corner ? \"y\" : \"cy\";\n    const offX = corner ? hx : 0;\n    const offY = corner ? hy : 0;\n    const gcfg = opts.gather || {};\n    const motion = gcfg.motion || \"auto\";\n    const useSpring = motion === \"spring\" || motion === \"auto\" && (!gcfg.easing || gcfg.easing === \"outCubic\");\n    if (useSpring) this._seedSprings(dots, gcfg, speed, opts);\n    else if (this.ctx) this.ctx._unitSprings = null;\n    if (corner) {\n      for (let k = 0; k < n2; k++) {\n        dots[k].node.setAttribute(cxAttr, String(dots[k].cx0 - offX));\n        dots[k].node.setAttribute(cyAttr, String(dots[k].cy0 - offY));\n      }\n    }\n    if (!corner) {\n      for (let k = 0; k < n2; k++) {\n        const d = dots[k];\n        if (d.r0 != null && d.r1 != null && d.r0 !== d.r1) {\n          d.node.setAttribute(\"r\", String(d.r0));\n        }\n      }\n    }\n    for (let k = 0; k < n2; k++) {\n      const d = dots[k];\n      if (d.fill0 && d.fill1 && d.fill0 !== d.fill1) {\n        d._c0 = this._rgb(d.fill0);\n        d._c1 = this._rgb(d.fill1);\n      }\n    }\n    const easePos = gcfg.easing === \"outBack\" ? easeOutBack(typeof gcfg.overshoot === \"number\" ? gcfg.overshoot : 1.70158) : gcfg.easing === \"inOutCubic\" ? easeInOutCubic : easeOutCubic;\n    if (this.w.globals.unitGatherRAF != null) {\n      BrowserAPIs.cancelAnimationFrame(this.w.globals.unitGatherRAF);\n      this.w.globals.unitGatherRAF = null;\n    }\n    const start = performance.now();\n    let last = start;\n    const stepFn = (now) => {\n      if (this.w.globals.isDestroyed) {\n        this.w.globals.unitGatherRAF = null;\n        return;\n      }\n      const dt = Math.min(MAX_FRAME_STEP, Math.max(0, (now - last) / 1e3));\n      last = now;\n      let done = true;\n      for (let k = 0; k < n2; k++) {\n        const d = dots[k];\n        const elapsed = now - start - d.delay;\n        const t2 = Math.max(0, Math.min(1, elapsed / speed));\n        const ec = easeOutCubic(t2);\n        let cx, cy;\n        if (d.sx && d.sy) {\n          if (elapsed >= 0 && !d.released) {\n            w(d.sx, d.x);\n            w(d.sy, d.y);\n            d.released = true;\n          }\n          const restX = b(d.sx, dt);\n          const restY = b(d.sy, dt);\n          if (!d.released || !restX || !restY) done = false;\n          cx = d.sx.value;\n          cy = d.sy.value;\n        } else {\n          const e2 = easePos(t2);\n          cx = d.cx0 + (d.x - d.cx0) * e2;\n          cy = d.cy0 + (d.y - d.cy0) * e2;\n        }\n        d.node.setAttribute(cxAttr, String(cx - offX));\n        d.node.setAttribute(cyAttr, String(cy - offY));\n        if (d.isEnter) d.node.style.opacity = String(Math.min(1, t2 * 2.5));\n        if (d._c0 && d._c1) {\n          const cr = Math.round(d._c0[0] + (d._c1[0] - d._c0[0]) * ec);\n          const cg = Math.round(d._c0[1] + (d._c1[1] - d._c0[1]) * ec);\n          const cb = Math.round(d._c0[2] + (d._c1[2] - d._c0[2]) * ec);\n          d.node.setAttribute(\"fill\", `rgb(${cr},${cg},${cb})`);\n        }\n        if (!corner && d.r0 != null && d.r1 != null && d.r0 !== d.r1) {\n          d.node.setAttribute(\"r\", String(d.r0 + (d.r1 - d.r0) * ec));\n        }\n        if (t2 < 1) done = false;\n      }\n      if (done) {\n        for (let k = 0; k < n2; k++) {\n          const d = dots[k];\n          d.node.style.opacity = \"\";\n          if (d._c1 && d.fill1) d.node.setAttribute(\"fill\", d.fill1);\n          if (!corner && d.r0 != null && d.r1 != null && d.r0 !== d.r1) {\n            d.node.setAttribute(\"r\", String(d.r1));\n          }\n        }\n        this.w.globals.unitGatherRAF = null;\n      } else {\n        this.w.globals.unitGatherRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n      }\n    };\n    this.w.globals.unitGatherRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n  }\n  /**\n   * Keys present in the previous render but not the current one, resolved back\n   * to their old slot {x, y, fill}. These are the dots that must animate out.\n   * @param {Map<string, {x:number,y:number,fill:string}>} prev\n   * @param {Map<string, {x:number,y:number,fill:string}>} nextPrev\n   * @param {any} opts\n   * @returns {{x:number,y:number,fill:string}[]}\n   */\n  _collectExits(prev, nextPrev, opts) {\n    const cap = Math.max(0, opts.maxUnits || 5e3);\n    const exits = [];\n    for (const [key, slot] of prev) {\n      if (!nextPrev.has(key)) {\n        exits.push(slot);\n        if (exits.length >= cap) break;\n      }\n    }\n    return exits;\n  }\n  /**\n   * Animate the exit ghosts out, then remove them. Layouts whose positions carry\n   * data (a waffle / grid lattice, or a scatter / beeswarm on real axes) fade\n   * their ghosts OUT IN PLACE - drifting them toward the plot centre would drag\n   * cells across tiles or bubbles across the plane, which reads as wrong. The\n   * blob / bar layouts keep the gentle inward collapse so a removal reads as\n   * motion rather than a pop.\n   * @param {any} group @param {{x:number,y:number,fill:string}[]} exits @param {any} opts\n   */\n  _runExits(group, exits, opts) {\n    const w2 = this.w;\n    const graphics = new Graphics(w2, this.ctx);\n    const dotR = this._lastDotR;\n    const cx = w2.layout.gridWidth / 2;\n    const cy = w2.layout.gridHeight / 2;\n    const drift = opts.layout === \"grid\" || opts.layout === \"scatter\" || opts.layout === \"arc\" || opts.layout === \"custom\" ? 0 : 0.35;\n    const ghosts = [];\n    exits.forEach((slot) => {\n      const el = this._drawDot(graphics, opts, dotR, slot.fill, 0, 0);\n      el.node.classList.add(\"apexcharts-unit-exit\");\n      this._placeDot(el.node, opts, slot.x, slot.y);\n      group.add(el);\n      ghosts.push({ node: el.node, x0: slot.x, y0: slot.y });\n    });\n    if (!this._shouldAnimate()) {\n      ghosts.forEach((g2) => g2.node.remove());\n      return;\n    }\n    const speed = Math.max(1, w2.config.chart.animations.speed || 800);\n    const corner = this._isCorner(opts);\n    const { hx, hy } = this._halfExtent(opts);\n    const offX = corner ? hx : 0;\n    const offY = corner ? hy : 0;\n    const cxAttr = corner ? \"x\" : \"cx\";\n    const cyAttr = corner ? \"y\" : \"cy\";\n    if (this.w.globals.unitExitRAF != null) {\n      BrowserAPIs.cancelAnimationFrame(this.w.globals.unitExitRAF);\n      this.w.globals.unitExitRAF = null;\n    }\n    const start = performance.now();\n    const stepFn = (now) => {\n      if (this.w.globals.isDestroyed) {\n        this.w.globals.unitExitRAF = null;\n        return;\n      }\n      const t2 = Math.max(0, Math.min(1, (now - start) / speed));\n      const e2 = easeOutCubic(t2);\n      for (let k = 0; k < ghosts.length; k++) {\n        const g2 = ghosts[k];\n        if (drift) {\n          const x = g2.x0 + (cx - g2.x0) * e2 * drift;\n          const y = g2.y0 + (cy - g2.y0) * e2 * drift;\n          g2.node.setAttribute(cxAttr, String(x - offX));\n          g2.node.setAttribute(cyAttr, String(y - offY));\n        }\n        g2.node.style.opacity = String(1 - e2);\n      }\n      if (t2 < 1) {\n        this.w.globals.unitExitRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n      } else {\n        this.w.globals.unitExitRAF = null;\n        group.node && group.node.remove();\n      }\n    };\n    this.w.globals.unitExitRAF = BrowserAPIs.requestAnimationFrame(stepFn);\n  }\n  /**\n   * A cluster label placed above (default) or below the cluster/bar. A TOP label\n   * over a wide grouped/packed blob rides a curved arc (invisible arc path +\n   * <textPath>, centred at 50% offset); a bottom label, a 'columns' bar, or a\n   * cluster too small for the arc gets a straight centred label instead.\n   * `clusterLabels.position` = 'top' | 'bottom'; `offsetY` pushes it further from\n   * the blob in either direction.\n   * @param {any} elSeries @param {{ i:number, cx:number, cy:number, outerR:number, flat?:boolean }} cluster\n   * @param {number} value @param {number} total @param {any} opts @param {string} color\n   */\n  _drawClusterLabel(elSeries, cluster, value, total, opts, color) {\n    const w2 = this.w;\n    if (!Environment.isBrowser()) return;\n    const NS = \"http://www.w3.org/2000/svg\";\n    const name2 = w2.seriesData.seriesNames[cluster.i] || `series-${cluster.i + 1}`;\n    const percent = total > 0 ? value / total * 100 : 0;\n    const cfg = opts.clusterLabels;\n    const fontSize = parseFloat(cfg.fontSize) || 13;\n    let text;\n    if (typeof cfg.formatter === \"function\") {\n      text = cfg.formatter(name2, {\n        seriesIndex: cluster.i,\n        value,\n        percent,\n        w: w2\n      });\n    } else {\n      text = `${name2} (${percent.toFixed(1)}%)`;\n    }\n    const str = typeof text === \"string\" ? text : String(text);\n    const textEl = BrowserAPIs.createElementNS(NS, \"text\");\n    textEl.setAttribute(\"class\", \"apexcharts-unit-label\");\n    textEl.setAttribute(\"text-anchor\", \"middle\");\n    textEl.setAttribute(\"font-size\", `${fontSize}px`);\n    textEl.setAttribute(\"font-family\", cfg.fontFamily || w2.config.chart.fontFamily || \"inherit\");\n    textEl.setAttribute(\"font-weight\", String(cfg.fontWeight || 600));\n    textEl.setAttribute(\"fill\", cfg.color || color);\n    const bottom = cfg.position === \"bottom\";\n    const R = cluster.outerR + fontSize * 0.6 + 3 + (cfg.offsetY || 0);\n    const estWidth = str.length * fontSize * 0.55;\n    const curved = !bottom && !cluster.flat && cfg.curved !== false && estWidth <= Math.PI * R * 0.95;\n    if (curved) {\n      const yMid = cluster.cy;\n      const x1 = cluster.cx - R;\n      const x2 = cluster.cx + R;\n      const d = `M ${x1} ${yMid} A ${R} ${R} 0 0 1 ${x2} ${yMid}`;\n      const arcId = `apexcharts-unit-label-${w2.globals.chartID}-${cluster.i}`;\n      const pathEl = BrowserAPIs.createElementNS(NS, \"path\");\n      pathEl.setAttribute(\"id\", arcId);\n      pathEl.setAttribute(\"d\", d);\n      pathEl.setAttribute(\"fill\", \"none\");\n      pathEl.setAttribute(\"stroke\", \"none\");\n      const tp = BrowserAPIs.createElementNS(NS, \"textPath\");\n      tp.setAttribute(\"href\", `#${arcId}`);\n      tp.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", `#${arcId}`);\n      tp.setAttribute(\"startOffset\", \"50%\");\n      tp.textContent = str;\n      textEl.appendChild(tp);\n      elSeries.node.appendChild(pathEl);\n    } else {\n      textEl.setAttribute(\"x\", String(cluster.cx));\n      const y = bottom ? cluster.cy + cluster.outerR + fontSize + 6 + (cfg.offsetY || 0) : cluster.cy - cluster.outerR - 6 - (cfg.offsetY || 0);\n      textEl.setAttribute(\"y\", String(y));\n      textEl.textContent = str;\n    }\n    elSeries.node.appendChild(textEl);\n  }\n}\nconst D2R = Math.PI / 180;\nconst R2D = 180 / Math.PI;\nconst SVGNS = \"http://www.w3.org/2000/svg\";\nconst XHTML = \"http://www.w3.org/1999/xhtml\";\nconst lerp = (a2, b2, t2) => a2 + (b2 - a2) * t2;\nclass SunburstChart {\n  /**\n   * @param {import('../types/internal').ChartStateW} w\n   * @param {import('../types/internal').ChartContext} ctx\n   */\n  constructor(w2, ctx) {\n    this.ctx = ctx;\n    this.w = w2;\n    const cnf = w2.config;\n    this.cfg = cnf.plotOptions.sunburst;\n    this.strokeWidth = cnf.stroke.show ? cnf.stroke.width : 0;\n    this.strokeColor = Array.isArray(cnf.stroke.colors) ? cnf.stroke.colors[0] : cnf.stroke.colors || \"#fff\";\n    this.startAngle = this.cfg.startAngle;\n    this.endAngle = this.cfg.endAngle;\n    this.maxDepth = 0;\n    this.centerX = 0;\n    this.centerY = 0;\n    this.maxRadius = 0;\n    this.total = 1;\n    this._focusMaxDepth = 0;\n    this._focus = null;\n    this._zoomGen = 0;\n    this._roots = [];\n    this._nodesAll = [];\n    this._innerR = () => 0;\n    this._outerR = () => 0;\n    this._tooltipEl = null;\n    this._lblSeq = 0;\n    this._morphLeafIndex = 0;\n    this._graphics = null;\n    this._ringsG = null;\n    this._labelsG = null;\n  }\n  /**\n   * @param {any[]} series  flattened top-level values (geometry comes from the\n   *   config hierarchy; kept for the standard draw(series) signature + noData)\n   * @returns {any} SVG group\n   */\n  draw(series) {\n    const w2 = this.w;\n    const graphics = new Graphics(this.w);\n    this._graphics = graphics;\n    const g2 = graphics.group({ class: \"apexcharts-sunburst\" });\n    if (w2.globals.noData || !series || !series.length) return g2;\n    const gw = w2.layout.gridWidth;\n    const gh = w2.layout.gridHeight;\n    this.centerX = gw / 2 + (this.cfg.offsetX || 0);\n    this.centerY = gh / 2 + (this.cfg.offsetY || 0);\n    this.maxRadius = Math.min(gw, gh) / 2.05 - this.strokeWidth - (!w2.config.chart.sparkline.enabled ? w2.config.chart.dropShadow.blur : 0);\n    if (this.maxRadius < 5) return g2;\n    this._roots = this._buildHierarchy();\n    if (!this._roots.length) return g2;\n    this._roots.forEach((r2) => this._fillValues(r2));\n    this._validateStrict();\n    this._nodesAll = [];\n    const colors = w2.globals.colors || [];\n    this._roots.forEach((r2, i2) => {\n      this._colorPass(r2, r2.color || colors[i2 % colors.length] || \"#008FFB\");\n    });\n    this.total = this._roots.reduce((s2, r2) => s2 + Math.max(0, r2.value), 0) || 1;\n    this._ringsG = graphics.group({ class: \"apexcharts-sunburst-rings\" });\n    this._labelsG = graphics.group({ class: \"apexcharts-sunburst-labels\" });\n    g2.add(this._ringsG);\n    g2.add(this._labelsG);\n    this._focus = null;\n    this._relayout(this._focus);\n    const anims = w2.config.chart.animations;\n    let mode = \"none\";\n    if (anims.enabled) {\n      if (w2.globals.dataChanged) {\n        if (anims.dynamicAnimation.enabled) mode = \"update\";\n      } else if (!w2.globals.resized) {\n        mode = \"intro\";\n      }\n    }\n    this._applyLayout(mode);\n    this._renderBreadcrumb();\n    return g2;\n  }\n  // ------------------------------------------------------------------ data\n  /**\n   * Resolve the config into root nodes `{ name, value, color?, children? }`.\n   * Each datum may carry `children` (native) or `drilldown: '<id>'` (adapter).\n   * Shared with the treemap - see charts/common/Hierarchy.\n   * @returns {any[]}\n   */\n  _buildHierarchy() {\n    return buildHierarchy(this.w);\n  }\n  /**\n   * Fill a parent's value from its children when missing.\n   * @param {any} node\n   */\n  _fillValues(node) {\n    fillValues(node);\n  }\n  /**\n   * With `partition: 'strict'`, warn (once) when a parent's value does not\n   * match the sum of its children. The angles are still normalized to fill the\n   * wedge (strict rendering is a P3 refinement); this just surfaces the data\n   * mismatch.\n   */\n  _validateStrict() {\n    if (this.cfg.partition !== \"strict\") return;\n    let warned = false;\n    const walk = (node) => {\n      if (node.children && node.children.length) {\n        const sum = node.children.reduce(\n          (s2, c2) => s2 + Math.max(0, c2.value || 0),\n          0\n        );\n        if (!warned && node.value != null && Math.abs(sum - node.value) > 0.5) {\n          console.warn(\n            `ApexCharts sunburst: partition 'strict' but \"${node.name}\" (${node.value}) != sum of its children (${sum}). Angles are normalized to fill the wedge.`\n          );\n          warned = true;\n        }\n        node.children.forEach(walk);\n      }\n    };\n    this._roots.forEach(walk);\n  }\n  /**\n   * Assign a colour to every node (explicit `color` wins, else the parent's\n   * colour tinted lighter). Done once so zoom preserves colours.\n   * @param {any} node\n   * @param {string} color\n   */\n  _colorPass(node, color) {\n    node._color = node.color || color;\n    this._nodesAll.push(node);\n    if (node.children) {\n      node.children.forEach(\n        (c2) => this._colorPass(c2, c2.color || this._lighten(node._color, this.cfg.tint))\n      );\n    }\n  }\n  // ---------------------------------------------------------------- layout\n  /**\n   * Recompute visibility + angles + radii for a focus node (null = whole tree).\n   * @param {any} focus\n   */\n  _relayout(focus) {\n    this._nodesAll.forEach((n2) => {\n      n2._show = false;\n    });\n    this._focusMaxDepth = 0;\n    if (!focus) {\n      const total = this._roots.reduce((s2, r2) => s2 + Math.max(0, r2.value), 0) || 1;\n      let a2 = this.startAngle;\n      this._roots.forEach((r2) => {\n        const span = (this.endAngle - this.startAngle) * Math.max(0, r2.value) / total;\n        this._placeVis(r2, 0, a2, a2 + span, null);\n        a2 += span;\n      });\n    } else {\n      this._placeVis(focus, 0, this.startAngle, this.endAngle, focus._parent);\n    }\n    const hole = this._parseSize(this.cfg.innerSize, this.maxRadius);\n    const ringCount = this._focusMaxDepth + 1;\n    const band = (this.maxRadius - hole) / ringCount;\n    const radialGap = ringCount > 1 ? 1 : 0;\n    this._innerR = (vd) => hole + vd * band + (vd > 0 ? radialGap / 2 : 0);\n    this._outerR = (vd) => hole + (vd + 1) * band - radialGap / 2;\n    this._nodesAll.forEach((n2) => {\n      if (!n2._show) return;\n      n2._iR = this._innerR(n2._vDepth);\n      n2._oR = n2._leaf && this.cfg.leaf === \"extend\" && n2._vDepth < this._focusMaxDepth ? this.maxRadius : this._outerR(n2._vDepth);\n    });\n  }\n  /**\n   * @param {any} node\n   * @param {number} vDepth\n   * @param {number} a0\n   * @param {number} a1\n   * @param {any} parent\n   */\n  _placeVis(node, vDepth, a0, a1, parent) {\n    node._show = true;\n    node._vDepth = vDepth;\n    node._a0 = a0;\n    node._a1 = a1;\n    node._parent = parent;\n    node._leaf = !(node.children && node.children.length);\n    if (vDepth > this._focusMaxDepth) this._focusMaxDepth = vDepth;\n    if (!node._leaf) {\n      const total = node.children.reduce(\n        (s2, c2) => s2 + Math.max(0, c2.value),\n        0\n      ) || 1;\n      let a2 = a0;\n      node.children.forEach((c2) => {\n        const span = (a1 - a0) * Math.max(0, c2.value) / total;\n        this._placeVis(c2, vDepth + 1, a2, a2 + span, node);\n        a2 += span;\n      });\n    }\n  }\n  // --------------------------------------------------------------- render\n  /**\n   * Create / update / remove arc elements to match the current layout, with an\n   * animation appropriate to the transition:\n   *   intro  — pie/donut-style angular clock sweep from startAngle to endAngle\n   *            (all rings reveal together as the sweep line passes them)\n   *   update — morph every arc from its previous on-screen geometry (matched\n   *            by node key across the re-render); new arcs unfurl in place\n   *   zoom   — tween angles + radii between focus layouts (same instance)\n   * @param {'intro'|'zoom'|'update'|'none'} mode\n   */\n  _applyLayout(mode) {\n    var _a;\n    const w2 = this.w;\n    const anims = w2.config.chart.animations;\n    const dur = !anims.enabled ? 0 : mode === \"none\" ? 0 : mode === \"update\" ? anims.dynamicAnimation.speed || 350 : anims.speed || 500;\n    const gen = ++this._zoomGen;\n    const morph = (\n      /** @type {any} */\n      (_a = this.ctx) == null ? void 0 : _a.morphTypeChange\n    );\n    const morphActive = !!morph && typeof morph.isActive === \"function\" && morph.isActive() && typeof morph.getInitialPathAt === \"function\";\n    const morphDur = morphActive ? morph.getSpeed() : 0;\n    this._morphLeafIndex = 0;\n    const prev = mode === \"update\" ? (\n      /** @type {any} */\n      this.ctx._sunburstPrevGeoms\n    ) : null;\n    this._nodesAll.forEach((node) => {\n      if (node._show) {\n        const target = {\n          a0: node._a0,\n          a1: node._a1,\n          iR: node._iR,\n          oR: node._oR\n        };\n        if (!node._el) node._el = this._createArcEl(node);\n        const morphFrom = morphActive ? this._morphSourceFor(node) : null;\n        if (morphFrom && morphDur > 0) {\n          this._morphArcFrom(node, morphFrom, target, morphDur, gen);\n        } else if ((mode === \"intro\" || morphActive) && dur > 0) {\n          this._sweepArc(node, target, morphActive ? morphDur : dur, gen);\n        } else {\n          let from;\n          let isNew = false;\n          if (node._cur) {\n            from = node._cur;\n          } else if (prev && prev.get(node._key)) {\n            from = prev.get(node._key);\n          } else {\n            const mid = (target.a0 + target.a1) / 2;\n            from = { a0: mid, a1: mid, iR: target.iR, oR: target.iR };\n            isNew = true;\n          }\n          this._animateArc(node, from, target, dur, false, isNew, gen);\n        }\n      } else if (node._el && node._cur) {\n        const mid = (node._cur.a0 + node._cur.a1) / 2;\n        const target = { a0: mid, a1: mid, iR: node._cur.iR, oR: node._cur.iR };\n        this._animateArc(node, node._cur, target, dur, true, false, gen);\n      }\n    });\n    const geoms = /* @__PURE__ */ new Map();\n    this._nodesAll.forEach((n2) => {\n      if (n2._show) {\n        geoms.set(n2._key, { a0: n2._a0, a1: n2._a1, iR: n2._iR, oR: n2._oR });\n      }\n    });\n    this.ctx._sunburstPrevGeoms = geoms;\n    this._renderLabels(dur);\n  }\n  /**\n   * The captured mark this leaf should unroll from, or null when the node is\n   * the outgoing chart had nothing to give it.\n   *\n   * When both charts carry branch keys the pairing is by identity, so EVERY\n   * ring finds the tile that stood for the same branch and the inner rings\n   * unroll instead of appearing from nothing.\n   *\n   * Without keys (a flat treemap, or an older config) only leaves pair, and\n   * they consume the captured paths in draw order - the order the outgoing\n   * renderer laid its own marks out in, so tile k pairs with leaf k.\n   *\n   * @param {any} node\n   * @returns {string | null}\n   */\n  _morphSourceFor(node) {\n    const ctx = (\n      /** @type {any} */\n      this.ctx\n    );\n    const morph = ctx && ctx.morphTypeChange;\n    if (!morph) return null;\n    if (typeof morph.hasKeyedMarks === \"function\" && morph.hasKeyedMarks() && typeof morph.getInitialPathForKey === \"function\") {\n      return morph.getInitialPathForKey(morphKey(node._key));\n    }\n    if (node.children && node.children.length) return null;\n    return morph.getInitialPathAt(this._morphLeafIndex++);\n  }\n  /**\n   * Unroll an arc from an arbitrary captured shape.\n   *\n   * `_animateArc` interpolates arc PARAMETERS (angles and radii), which cannot\n   * express a rectangle, so this one tweens the path data itself through\n   * Animations.morphSVG - the same call every other morphing renderer makes,\n   * which already selects the polygon-resample algorithm while a cross-type\n   * morph is active.\n   *\n   * @param {any} node\n   * @param {string} fromD\n   * @param {{a0:number,a1:number,iR:number,oR:number}} target\n   * @param {number} dur\n   * @param {number} gen\n   */\n  _morphArcFrom(node, fromD, target, dur, gen) {\n    const el = node._el;\n    const toD = this._arcPath(\n      target.iR,\n      target.oR,\n      target.a0,\n      target.a1,\n      this.cfg.borderRadius\n    );\n    el.node.style.display = \"\";\n    el.attr({ d: fromD, opacity: 1 });\n    node._cur = target;\n    if (this._zoomGen !== gen) return;\n    new Animations(\n      this.w,\n      /** @type {any} */\n      this.ctx\n    ).morphSVG(\n      el,\n      0,\n      // Not a (series, point) index: an arc has no j, and passing a number here\n      // would make morphSVG treat it as the last point of a series and fire the\n      // chart's animation-completed hook.\n      /** @type {any} */\n      null,\n      node._color,\n      fromD,\n      toD,\n      dur,\n      0\n    );\n  }\n  /**\n   * Pie/donut-style intro: a clock sweep from startAngle to endAngle. Each\n   * arc's end angle is clamped to the sweep line, so arcs appear in angular\n   * order and grow until complete — the whole hierarchy unwipes together.\n   * @param {any} node\n   * @param {{a0:number,a1:number,iR:number,oR:number}} target\n   * @param {number} dur\n   * @param {number} gen  layout generation; frames stop once superseded\n   */\n  _sweepArc(node, target, dur, gen) {\n    const el = node._el;\n    const br = this.cfg.borderRadius;\n    const s0 = this.startAngle;\n    const s1 = this.endAngle;\n    el.node.style.display = \"\";\n    el.attr({ d: \"\", opacity: 1 });\n    el.animate(dur).during((pos) => {\n      if (this._zoomGen !== gen) return;\n      const sweep = s0 + (s1 - s0) * pos;\n      if (sweep <= target.a0 + 0.01) {\n        el.attr({ d: \"\" });\n        return;\n      }\n      const a1 = Math.min(target.a1, sweep);\n      el.attr({ d: this._arcPath(target.iR, target.oR, target.a0, a1, br) });\n      node._cur = { a0: target.a0, a1, iR: target.iR, oR: target.oR };\n    }).after(() => {\n      if (this._zoomGen !== gen) return;\n      node._cur = target;\n    });\n  }\n  /**\n   * @param {any} node\n   * @returns {any} svg.js path element\n   */\n  _createArcEl(node) {\n    const path = this._graphics.drawPath({\n      d: \"\",\n      fill: node._color,\n      stroke: this.strokeColor,\n      strokeWidth: this.strokeWidth,\n      fillOpacity: 1,\n      classes: \"apexcharts-sunburst-arc\"\n    });\n    const el = path.node;\n    el.setAttribute(\"data:name\", node.name);\n    el.setAttribute(\"data:value\", String(node.value));\n    el.setAttribute(\"data:key\", morphKey(node._key));\n    el.setAttribute(\n      \"data:leaf\",\n      String(!(node.children && node.children.length))\n    );\n    this._attachTooltip(el, node);\n    if (Environment.isBrowser()) {\n      el.addEventListener(\"click\", () => this._zoomTo(node));\n      el.style.cursor = \"pointer\";\n    }\n    this._ringsG.add(path);\n    return path;\n  }\n  /**\n   * @param {any} node\n   * @param {{a0:number,a1:number,iR:number,oR:number}} from\n   * @param {{a0:number,a1:number,iR:number,oR:number}} to\n   * @param {number} dur\n   * @param {boolean} hide    shrink + fade out, then hide\n   * @param {boolean} fadeIn  fade 0 -> 1 (new arcs only; morphs stay opaque)\n   * @param {number} gen  layout generation; frames stop once superseded\n   */\n  _animateArc(node, from, to, dur, hide, fadeIn2, gen) {\n    const el = node._el;\n    const br = this.cfg.borderRadius;\n    el.attr({ fill: node._color });\n    if (dur === 0) {\n      el.attr({ d: this._arcPath(to.iR, to.oR, to.a0, to.a1, br), opacity: hide ? 0 : 1 });\n      el.node.style.display = hide ? \"none\" : \"\";\n      node._cur = hide ? null : to;\n      return;\n    }\n    el.node.style.display = \"\";\n    const startOp = hide ? Number(el.attr(\"opacity\")) || 1 : fadeIn2 ? 0 : 1;\n    const endOp = hide ? 0 : 1;\n    el.attr({ opacity: startOp });\n    el.animate(dur).during((pos) => {\n      if (this._zoomGen !== gen) return;\n      const a0 = lerp(from.a0, to.a0, pos);\n      const a1 = lerp(from.a1, to.a1, pos);\n      const iR = lerp(from.iR, to.iR, pos);\n      const oR = lerp(from.oR, to.oR, pos);\n      el.attr({\n        d: this._arcPath(iR, oR, a0, a1, br),\n        opacity: lerp(startOp, endOp, pos)\n      });\n      node._cur = { a0, a1, iR, oR };\n    }).after(() => {\n      if (this._zoomGen !== gen) return;\n      if (hide) {\n        el.node.style.display = \"none\";\n        node._cur = null;\n      } else {\n        node._cur = to;\n      }\n    });\n  }\n  // ---------------------------------------------------------------- labels\n  /**\n   * Labels are overlays on animated paths, so they reveal gradually AFTER the\n   * arcs settle (repo convention: overlays never pop in over a moving path).\n   * @param {number} dur  arc animation duration (0 = instant labels)\n   */\n  _renderLabels(dur) {\n    const labelsG = this._labelsG;\n    while (labelsG.node.firstChild) labelsG.node.removeChild(labelsG.node.firstChild);\n    if (!this.cfg.dataLabels.show) return;\n    this._nodesAll.forEach((node) => {\n      if (!node._show) return;\n      if (node._a1 - node._a0 < this.cfg.dataLabels.minAngleToShow) return;\n      this._renderCurvedLabel(node);\n    });\n    if (dur > 0) {\n      labelsG.attr({ opacity: 0 });\n      labelsG.animate(250, dur).attr({ opacity: 1 });\n    } else {\n      labelsG.attr({ opacity: 1 });\n    }\n  }\n  /**\n   * Curved label along the arc's mid-radius (flipped on the bottom half so it\n   * stays upright). Raw SVG <textPath> — svg.js has no first-class textPath.\n   * @param {any} node\n   */\n  _renderCurvedLabel(node) {\n    if (!Environment.isBrowser()) return;\n    const style = this.cfg.dataLabels.style;\n    const w2 = this.w;\n    const r2 = (node._iR + node._oR) / 2;\n    const mid = (node._a0 + node._a1) / 2;\n    const flip = mid > 90 && mid < 270;\n    const padDeg = Math.min(r2 > 0 ? 4 / r2 * R2D : 0, (node._a1 - node._a0) / 2);\n    const from = flip ? node._a1 - padDeg : node._a0 + padDeg;\n    const to = flip ? node._a0 + padDeg : node._a1 - padDeg;\n    const p1 = this._ptAt(r2, from);\n    const p2 = this._ptAt(r2, to);\n    const largeArc = Math.abs(to - from) > 180 ? 1 : 0;\n    const sweep = flip ? 0 : 1;\n    const id = `apx-sb-lbl-${w2.globals.cuid}-${this._lblSeq++}`;\n    const guide = BrowserAPIs.createElementNS(SVGNS, \"path\");\n    guide.setAttribute(\"id\", id);\n    guide.setAttribute(\n      \"d\",\n      `M ${p1.x} ${p1.y} A ${r2} ${r2} 0 ${largeArc} ${sweep} ${p2.x} ${p2.y}`\n    );\n    guide.setAttribute(\"fill\", \"none\");\n    guide.setAttribute(\"stroke\", \"none\");\n    const colors = style.colors;\n    const fill = (Array.isArray(colors) ? colors[0] : colors) || \"#fff\";\n    const text = BrowserAPIs.createElementNS(SVGNS, \"text\");\n    text.setAttribute(\"font-size\", style.fontSize || \"12px\");\n    if (style.fontFamily) text.setAttribute(\"font-family\", style.fontFamily);\n    text.setAttribute(\"font-weight\", String(style.fontWeight || 400));\n    text.setAttribute(\"fill\", fill);\n    text.setAttribute(\"dominant-baseline\", \"central\");\n    text.style.pointerEvents = \"none\";\n    const tp = BrowserAPIs.createElementNS(SVGNS, \"textPath\");\n    tp.setAttribute(\"href\", \"#\" + id);\n    tp.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"xlink:href\", \"#\" + id);\n    tp.setAttribute(\"startOffset\", \"50%\");\n    tp.setAttribute(\"text-anchor\", \"middle\");\n    tp.textContent = this._truncate(node.name, r2, node._a1 - node._a0, style.fontSize);\n    text.appendChild(tp);\n    this._labelsG.node.appendChild(guide);\n    this._labelsG.node.appendChild(text);\n  }\n  /**\n   * Trim a label to the arc length available at its radius.\n   * @param {string} name\n   * @param {number} r\n   * @param {number} spanDeg\n   * @param {string} fontSize\n   * @returns {string}\n   */\n  _truncate(name2, r2, spanDeg, fontSize) {\n    const arcLen = r2 * spanDeg * D2R - 8;\n    const charW = (parseFloat(fontSize) || 12) * 0.58;\n    const maxChars = Math.floor(arcLen / charW);\n    if (maxChars >= name2.length) return name2;\n    if (maxChars <= 1) return \"\";\n    return name2.slice(0, Math.max(1, maxChars - 1)) + \"…\";\n  }\n  // ----------------------------------------------------------------- zoom\n  /**\n   * Focus a node (zoom in), or zoom out one level when the current focus (the\n   * innermost ring) is clicked.\n   * @param {any} node\n   */\n  _zoomTo(node) {\n    if (this.cfg.zoomOnClick === false) return;\n    const nextFocus = node === this._focus ? node._parent || null : node;\n    if (nextFocus === this._focus) return;\n    this._focus = nextFocus && !(nextFocus.children && nextFocus.children.length) ? nextFocus._parent || null : nextFocus;\n    this._relayout(this._focus);\n    this._applyLayout(\"zoom\");\n    this._renderBreadcrumb();\n  }\n  /** Root -> focus chain of nodes. */\n  _focusChain() {\n    const chain = [];\n    let n2 = this._focus;\n    while (n2) {\n      chain.unshift(n2);\n      n2 = n2._parent;\n    }\n    return chain;\n  }\n  /**\n   * Minimal self-contained breadcrumb (reuses the shared `.apexcharts-breadcrumb`\n   * CSS classes, but does NOT depend on the drilldown feature).\n   */\n  _renderBreadcrumb() {\n    if (!Environment.isBrowser()) return;\n    const w2 = this.w;\n    const elWrap = w2.dom.elWrap;\n    if (!elWrap) return;\n    const existing = elWrap.querySelector(\".apexcharts-breadcrumb\");\n    if (existing && existing.parentNode) existing.parentNode.removeChild(existing);\n    if (!this._focus) return;\n    const nav = BrowserAPIs.createElementNS(XHTML, \"nav\");\n    nav.setAttribute(\"class\", \"apexcharts-breadcrumb\");\n    nav.setAttribute(\"aria-label\", \"Sunburst breadcrumb\");\n    nav.style.position = \"absolute\";\n    nav.style.top = \"0px\";\n    nav.style.left = \"0px\";\n    const crumbs = [{ name: \"All\", node: null }].concat(\n      this._focusChain().map((n2) => ({ name: n2.name, node: n2 }))\n    );\n    crumbs.forEach((crumb, i2) => {\n      if (i2 > 0) {\n        const sep = BrowserAPIs.createElementNS(XHTML, \"span\");\n        sep.setAttribute(\"class\", \"apexcharts-breadcrumb-separator\");\n        sep.textContent = \" / \";\n        nav.appendChild(sep);\n      }\n      const isCurrent = i2 === crumbs.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.textContent = crumb.name;\n        nav.appendChild(cur);\n      } else {\n        const btn = BrowserAPIs.createElementNS(XHTML, \"button\");\n        btn.setAttribute(\"type\", \"button\");\n        btn.setAttribute(\"class\", \"apexcharts-breadcrumb-item\");\n        if (i2 === 0) {\n          const arrow = BrowserAPIs.createElementNS(XHTML, \"span\");\n          arrow.setAttribute(\"class\", \"apexcharts-breadcrumb-arrow\");\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 = crumb.name;\n        btn.appendChild(text);\n        btn.addEventListener(\"click\", () => {\n          this._focus = crumb.node;\n          this._relayout(this._focus);\n          this._applyLayout(\"zoom\");\n          this._renderBreadcrumb();\n        });\n        nav.appendChild(btn);\n      }\n    });\n    elWrap.appendChild(nav);\n    this._avoidChromeOverlap(nav);\n  }\n  /**\n   * The breadcrumb is an absolute overlay at top-left, so it can sit on top of\n   * a left-aligned title (or subtitle). After mounting, push it below any chart\n   * chrome it intersects. (Duplicated from drilldown's Breadcrumb on purpose —\n   * sunburst must not import the drilldown feature.)\n   * @param {any} nav\n   */\n  /**\n   * Shared with the treemap - see charts/common/Breadcrumb.\n   * @param {any} nav\n   */\n  _avoidChromeOverlap(nav) {\n    avoidChromeOverlap(this.w, nav);\n  }\n  // ------------------------------------------------------------ geometry\n  /**\n   * @param {number} r\n   * @param {number} deg  0 = top, clockwise\n   * @returns {{x: number, y: number}}\n   */\n  _ptAt(r2, deg) {\n    return {\n      x: this.centerX + r2 * Math.cos((deg - 90) * D2R),\n      y: this.centerY + r2 * Math.sin((deg - 90) * D2R)\n    };\n  }\n  /**\n   * Rounded donut-segment path (inner radius always > 0). Applies `spacing`\n   * (angular gap) and `borderRadius` (corner rounding), both clamped so a thin\n   * arc never inverts.\n   * @param {number} iR\n   * @param {number} oR\n   * @param {number} a0\n   * @param {number} a1\n   * @param {number} borderRadius\n   * @returns {string}\n   */\n  _arcPath(iR, oR, a0, a1, borderRadius) {\n    if (oR <= iR + 0.01) return \"\";\n    let spanDeg = a1 - a0;\n    const spacing = this.cfg.spacing;\n    if (spacing > 0 && spanDeg > 0 && oR > 0) {\n      const gapDeg = spacing / oR * R2D;\n      const inset = Math.min(gapDeg / 2, Math.max(0, spanDeg / 2 - 0.25));\n      a0 += inset;\n      a1 -= inset;\n      spanDeg = a1 - a0;\n    }\n    if (spanDeg <= 0) return \"\";\n    const spanRad = spanDeg * D2R;\n    const cx = this.centerX;\n    const cy = this.centerY;\n    let r2 = borderRadius;\n    r2 = Math.min(r2, spanRad * iR / 2, spanRad * oR / 2, (oR - iR) / 2);\n    if (!(r2 > 0.5)) {\n      return sharpDonutSegmentPath({ cx, cy, rIn: iR, rOut: oR, a0, a1, spanDeg });\n    }\n    return roundedDonutSegmentPath({ cx, cy, rIn: iR, rOut: oR, a0, a1, r: r2, spanDeg });\n  }\n  // ------------------------------------------------------------- tooltip\n  /** @returns {any} */\n  _tip() {\n    if (!this._tooltipEl) {\n      this._tooltipEl = this.w.dom.baseEl.querySelector(\".apexcharts-tooltip\");\n    }\n    return this._tooltipEl;\n  }\n  /**\n   * @param {any} el\n   * @param {any} node\n   */\n  _attachTooltip(el, node) {\n    if (!this.w.config.tooltip.enabled || !Environment.isBrowser()) return;\n    el.addEventListener(\n      \"mouseenter\",\n      (e2) => this._showTooltip(e2, node)\n    );\n    el.addEventListener(\n      \"mousemove\",\n      (e2) => this._positionTooltip(e2)\n    );\n    el.addEventListener(\"mouseleave\", () => this._hideTooltip());\n  }\n  /**\n   * @param {MouseEvent} e\n   * @param {any} node\n   */\n  _showTooltip(e2, node) {\n    const t2 = this._tip();\n    if (!t2) return;\n    const w2 = this.w;\n    const pctTotal = (node.value / this.total * 100).toFixed(1);\n    const parentVal = node._parent ? node._parent.value : this.total;\n    const pctParent = parentVal > 0 ? (node.value / parentVal * 100).toFixed(1) : pctTotal;\n    const groupBg = w2.config.tooltip.fillSeriesColor ? `background-color:${node._color};` : \"\";\n    t2.innerHTML = `<div class=\"apexcharts-tooltip-series-group apexcharts-active\" style=\"display:flex;${groupBg}\"><span class=\"apexcharts-tooltip-marker\" style=\"background-color:${node._color}\"></span><div class=\"apexcharts-tooltip-text\"><div class=\"apexcharts-tooltip-y-group\"><span class=\"apexcharts-tooltip-text-y-label\">${node.name}: </span><span class=\"apexcharts-tooltip-text-y-value\">${node.value} (${pctParent}% of parent, ${pctTotal}% of total)</span></div></div></div>`;\n    t2.classList.add(\"apexcharts-active\");\n    t2.style.opacity = \"1\";\n    this._positionTooltip(e2);\n  }\n  /**\n   * Position beside the cursor, flipping to the opposite side when the box\n   * would overflow the chart wrap, and clamping inside it either way.\n   * @param {MouseEvent} e\n   */\n  _positionTooltip(e2) {\n    const t2 = this._tip();\n    if (!t2) return;\n    const rect = this.w.dom.elWrap.getBoundingClientRect();\n    const tw = t2.offsetWidth;\n    const th = t2.offsetHeight;\n    const pad = 12;\n    let x = e2.clientX - rect.left + pad;\n    if (x + tw > rect.width) x = e2.clientX - rect.left - tw - pad;\n    x = Math.max(0, Math.min(x, rect.width - tw));\n    let y = e2.clientY - rect.top + pad;\n    if (y + th > rect.height) y = e2.clientY - rect.top - th - pad;\n    y = Math.max(0, Math.min(y, rect.height - th));\n    t2.style.left = x + \"px\";\n    t2.style.top = y + \"px\";\n  }\n  _hideTooltip() {\n    const t2 = this._tip();\n    if (!t2) return;\n    t2.classList.remove(\"apexcharts-active\");\n    t2.style.opacity = \"0\";\n  }\n  // --------------------------------------------------------------- utils\n  /**\n   * @param {string|number} size\n   * @param {number} max\n   * @returns {number}\n   */\n  _parseSize(size, max) {\n    if (typeof size === \"number\") return size;\n    const s2 = String(size).trim();\n    if (s2.endsWith(\"%\")) return parseFloat(s2) / 100 * max;\n    const n2 = parseFloat(s2);\n    return isNaN(n2) ? 0.15 * max : n2;\n  }\n  /**\n   * Blend a hex colour toward white by `amount` (0..1). Non-hex returned as-is.\n   * @param {string} color\n   * @param {number} amount\n   * @returns {string}\n   */\n  _lighten(color, amount) {\n    if (typeof color !== \"string\" || color[0] !== \"#\") return color;\n    let hex = color.slice(1);\n    if (hex.length === 3) {\n      hex = hex.split(\"\").map((c2) => c2 + c2).join(\"\");\n    }\n    if (hex.length !== 6) return color;\n    const num = parseInt(hex, 16);\n    if (isNaN(num)) return color;\n    let rC = num >> 16 & 255;\n    let gC = num >> 8 & 255;\n    let bC = num & 255;\n    rC = Math.round(rC + (255 - rC) * amount);\n    gC = Math.round(gC + (255 - gC) * amount);\n    bC = Math.round(bC + (255 - bC) * amount);\n    return \"#\" + ((1 << 24) + (rC << 16) + (gC << 8) + bC).toString(16).slice(1);\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  unit: Unit,\n  sunburst: SunburstChart\n});\nexport {\n  ApexCharts as default\n};\n"]}