{"version":3,"file":"charts-MgGNgf0v.mjs","sources":["../../../node_modules/.pnpm/@kurkle+color@0.3.4/node_modules/@kurkle/color/dist/color.esm.js","../../../node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chunks/helpers.dataset.js","../../../node_modules/.pnpm/chart.js@4.5.1/node_modules/chart.js/dist/chart.js","../../../node_modules/.pnpm/react-chartjs-2@5.3.1_chart.js@4.5.1_react@19.2.0/node_modules/react-chartjs-2/dist/index.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/core.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/util.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/errors.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/parse.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/regexes.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/checks.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/doc.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/versions.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/schemas.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/registries.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/core/api.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/iso.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/errors.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/parse.js","../../../node_modules/.pnpm/zod@4.1.12/node_modules/zod/v4/classic/schemas.js","../src/components/tools/charts/chartJsSchema.ts","../src/components/tools/charts/charts.tsx"],"sourcesContent":["/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n    let id = 0;\n    return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n    return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n    if (Array.isArray && Array.isArray(value)) {\n        return true;\n    }\n    const type = Object.prototype.toString.call(value);\n    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n        return true;\n    }\n    return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */ function isNumberFinite(value) {\n    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n    return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n    return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n    if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n    }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n    let i, len, keys;\n    if (isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n            for(i = len - 1; i >= 0; i--){\n                fn.call(thisArg, loopable[i], i);\n            }\n        } else {\n            for(i = 0; i < len; i++){\n                fn.call(thisArg, loopable[i], i);\n            }\n        }\n    } else if (isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for(i = 0; i < len; i++){\n            fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n    }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n    let i, ilen, v0, v1;\n    if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n    }\n    for(i = 0, ilen = a0.length; i < ilen; ++i){\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n    if (isArray(source)) {\n        return source.map(clone);\n    }\n    if (isObject(source)) {\n        const target = Object.create(null);\n        const keys = Object.keys(source);\n        const klen = keys.length;\n        let k = 0;\n        for(; k < klen; ++k){\n            target[keys[k]] = clone(source[keys[k]]);\n        }\n        return target;\n    }\n    return source;\n}\nfunction isValidKey(key) {\n    return [\n        '__proto__',\n        'prototype',\n        'constructor'\n    ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        merge(tval, sval, options);\n    } else {\n        target[key] = clone(sval);\n    }\n}\nfunction merge(target, source, options) {\n    const sources = isArray(source) ? source : [\n        source\n    ];\n    const ilen = sources.length;\n    if (!isObject(target)) {\n        return target;\n    }\n    options = options || {};\n    const merger = options.merger || _merger;\n    let current;\n    for(let i = 0; i < ilen; ++i){\n        current = sources[i];\n        if (!isObject(current)) {\n            continue;\n        }\n        const keys = Object.keys(current);\n        for(let k = 0, klen = keys.length; k < klen; ++k){\n            merger(keys[k], target, current, options);\n        }\n    }\n    return target;\n}\nfunction mergeIf(target, source) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    return merge(target, source, {\n        merger: _mergerIf\n    });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        mergeIf(tval, sval);\n    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n        target[key] = clone(sval);\n    }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n    if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n    }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n    // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n    '': (v)=>v,\n    // default resolvers\n    x: (o)=>o.x,\n    y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n    const parts = key.split('.');\n    const keys = [];\n    let tmp = '';\n    for (const part of parts){\n        tmp += part;\n        if (tmp.endsWith('\\\\')) {\n            tmp = tmp.slice(0, -1) + '.';\n        } else {\n            keys.push(tmp);\n            tmp = '';\n        }\n    }\n    return keys;\n}\nfunction _getKeyResolver(key) {\n    const keys = _splitKey(key);\n    return (obj)=>{\n        for (const k of keys){\n            if (k === '') {\n                break;\n            }\n            obj = obj && obj[k];\n        }\n        return obj;\n    };\n}\nfunction resolveObjectKey(obj, key) {\n    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n    return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const item of a){\n        if (!b.has(item)) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n    return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n    const roundedRange = Math.round(range);\n    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n    const niceRange = Math.pow(10, Math.floor(log10(range)));\n    const fraction = range / niceRange;\n    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n    return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n    const result = [];\n    const sqrt = Math.sqrt(value);\n    let i;\n    for(i = 1; i < sqrt; i++){\n        if (value % i === 0) {\n            result.push(i);\n            result.push(value / i);\n        }\n    }\n    if (sqrt === (sqrt | 0)) {\n        result.push(sqrt);\n    }\n    result.sort((a, b)=>a - b).pop();\n    return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n    const rounded = Math.round(x);\n    return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n    let i, ilen, value;\n    for(i = 0, ilen = array.length; i < ilen; i++){\n        value = array[i][property];\n        if (!isNaN(value)) {\n            target.min = Math.min(target.min, value);\n            target.max = Math.max(target.max, value);\n        }\n    }\n}\nfunction toRadians(degrees) {\n    return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n    return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n    if (!isNumberFinite(x)) {\n        return;\n    }\n    let e = 1;\n    let p = 0;\n    while(Math.round(x * e) / e !== x){\n        e *= 10;\n        p++;\n    }\n    return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n    if (angle < -0.5 * PI) {\n        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n    }\n    return {\n        angle,\n        distance: radialDistanceFromCenter\n    };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n    return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n    return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n    const a = _normalizeAngle(angle);\n    const s = _normalizeAngle(start);\n    const e = _normalizeAngle(end);\n    const angleToStart = _normalizeAngle(s - a);\n    const angleToEnd = _normalizeAngle(e - a);\n    const startToAngle = _normalizeAngle(a - s);\n    const endToAngle = _normalizeAngle(a - e);\n    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n    return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n    cmp = cmp || ((index)=>table[index] < value);\n    let hi = table.length - 1;\n    let lo = 0;\n    let mid;\n    while(hi - lo > 1){\n        mid = lo + hi >> 1;\n        if (cmp(mid)) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return {\n        lo,\n        hi\n    };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n        const ti = table[index][key];\n        return ti < value || ti === value && table[index + 1][key] === value;\n    } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n    let start = 0;\n    let end = values.length;\n    while(start < end && values[start] < min){\n        start++;\n    }\n    while(end > start && values[end - 1] > max){\n        end--;\n    }\n    return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n    'push',\n    'pop',\n    'shift',\n    'splice',\n    'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n        array._chartjs.listeners.push(listener);\n        return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n        configurable: true,\n        enumerable: false,\n        value: {\n            listeners: [\n                listener\n            ]\n        }\n    });\n    arrayEvents.forEach((key)=>{\n        const method = '_onData' + _capitalize(key);\n        const base = array[key];\n        Object.defineProperty(array, key, {\n            configurable: true,\n            enumerable: false,\n            value (...args) {\n                const res = base.apply(this, args);\n                array._chartjs.listeners.forEach((object)=>{\n                    if (typeof object[method] === 'function') {\n                        object[method](...args);\n                    }\n                });\n                return res;\n            }\n        });\n    });\n}\nfunction unlistenArrayEvents(array, listener) {\n    const stub = array._chartjs;\n    if (!stub) {\n        return;\n    }\n    const listeners = stub.listeners;\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n        listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n        return;\n    }\n    arrayEvents.forEach((key)=>{\n        delete array[key];\n    });\n    delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n    const set = new Set(items);\n    if (set.size === items.length) {\n        return items;\n    }\n    return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n    if (typeof window === 'undefined') {\n        return function(callback) {\n            return callback();\n        };\n    }\n    return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n    let argsToUse = [];\n    let ticking = false;\n    return function(...args) {\n        // Save the args for use later\n        argsToUse = args;\n        if (!ticking) {\n            ticking = true;\n            requestAnimFrame.call(window, ()=>{\n                ticking = false;\n                fn.apply(thisArg, argsToUse);\n            });\n        }\n    };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n    let timeout;\n    return function(...args) {\n        if (delay) {\n            clearTimeout(timeout);\n            timeout = setTimeout(fn, delay, args);\n        } else {\n            fn.apply(this, args);\n        }\n        return delay;\n    };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n    const check = rtl ? 'left' : 'right';\n    return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n    const pointCount = points.length;\n    let start = 0;\n    let count = pointCount;\n    if (meta._sorted) {\n        const { iScale , vScale , _parsed  } = meta;\n        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n        const axis = iScale.axis;\n        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n        if (minDefined) {\n            start = Math.min(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n            if (spanGaps) {\n                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                start -= Math.max(0, distanceToDefinedLo);\n            }\n            start = _limitValue(start, 0, pointCount - 1);\n        }\n        if (maxDefined) {\n            let end = Math.max(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n            if (spanGaps) {\n                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                end += Math.max(0, distanceToDefinedHi);\n            }\n            count = _limitValue(end, start, pointCount) - start;\n        } else {\n            count = pointCount - start;\n        }\n    }\n    return {\n        start,\n        count\n    };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n    const { xScale , yScale , _scaleRanges  } = meta;\n    const newRanges = {\n        xmin: xScale.min,\n        xmax: xScale.max,\n        ymin: yScale.min,\n        ymax: yScale.max\n    };\n    if (!_scaleRanges) {\n        meta._scaleRanges = newRanges;\n        return true;\n    }\n    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n    Object.assign(_scaleRanges, newRanges);\n    return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n    linear: (t)=>t,\n    easeInQuad: (t)=>t * t,\n    easeOutQuad: (t)=>-t * (t - 2),\n    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n    easeInCubic: (t)=>t * t * t,\n    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n    easeInQuart: (t)=>t * t * t * t,\n    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n    easeInQuint: (t)=>t * t * t * t * t,\n    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n    easeInOutElastic (t) {\n        const s = 0.1125;\n        const p = 0.45;\n        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n    },\n    easeInBack (t) {\n        const s = 1.70158;\n        return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack (t) {\n        const s = 1.70158;\n        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack (t) {\n        let s = 1.70158;\n        if ((t /= 0.5) < 1) {\n            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n        }\n        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n    easeOutBounce (t) {\n        const m = 7.5625;\n        const d = 2.75;\n        if (t < 1 / d) {\n            return m * t * t;\n        }\n        if (t < 2 / d) {\n            return m * (t -= 1.5 / d) * t + 0.75;\n        }\n        if (t < 2.5 / d) {\n            return m * (t -= 2.25 / d) * t + 0.9375;\n        }\n        return m * (t -= 2.625 / d) * t + 0.984375;\n    },\n    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n    if (value && typeof value === 'object') {\n        const type = value.toString();\n        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n    }\n    return false;\n}\nfunction color(value) {\n    return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n    return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n    'x',\n    'y',\n    'borderWidth',\n    'radius',\n    'tension'\n];\nconst colors = [\n    'color',\n    'borderColor',\n    'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n    defaults.set('animation', {\n        delay: undefined,\n        duration: 1000,\n        easing: 'easeOutQuart',\n        fn: undefined,\n        from: undefined,\n        loop: undefined,\n        to: undefined,\n        type: undefined\n    });\n    defaults.describe('animation', {\n        _fallback: false,\n        _indexable: false,\n        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n    });\n    defaults.set('animations', {\n        colors: {\n            type: 'color',\n            properties: colors\n        },\n        numbers: {\n            type: 'number',\n            properties: numbers\n        }\n    });\n    defaults.describe('animations', {\n        _fallback: 'animation'\n    });\n    defaults.set('transitions', {\n        active: {\n            animation: {\n                duration: 400\n            }\n        },\n        resize: {\n            animation: {\n                duration: 0\n            }\n        },\n        show: {\n            animations: {\n                colors: {\n                    from: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    duration: 0\n                }\n            }\n        },\n        hide: {\n            animations: {\n                colors: {\n                    to: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    easing: 'linear',\n                    fn: (v)=>v | 0\n                }\n            }\n        }\n    });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n    defaults.set('layout', {\n        autoPadding: true,\n        padding: {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        }\n    });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n    options = options || {};\n    const cacheKey = locale + JSON.stringify(options);\n    let formatter = intlCache.get(cacheKey);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        intlCache.set(cacheKey, formatter);\n    }\n    return formatter;\n}\nfunction formatNumber(num, locale, options) {\n    return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n        return isArray(value) ?  value : '' + value;\n    },\n numeric (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const locale = this.chart.options.locale;\n        let notation;\n        let delta = tickValue;\n        if (ticks.length > 1) {\n            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n            if (maxTick < 1e-4 || maxTick > 1e+15) {\n                notation = 'scientific';\n            }\n            delta = calculateDelta(tickValue, ticks);\n        }\n        const logDelta = log10(Math.abs(delta));\n        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n        const options = {\n            notation,\n            minimumFractionDigits: numDecimal,\n            maximumFractionDigits: numDecimal\n        };\n        Object.assign(options, this.options.ticks.format);\n        return formatNumber(tickValue, locale, options);\n    },\n logarithmic (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n        if ([\n            1,\n            2,\n            3,\n            5,\n            10,\n            15\n        ].includes(remain) || index > 0.8 * ticks.length) {\n            return formatters.numeric.call(this, tickValue, index, ticks);\n        }\n        return '';\n    }\n};\nfunction calculateDelta(tickValue, ticks) {\n    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n        delta = tickValue - Math.floor(tickValue);\n    }\n    return delta;\n}\n var Ticks = {\n    formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n    defaults.set('scale', {\n        display: true,\n        offset: false,\n        reverse: false,\n        beginAtZero: false,\n bounds: 'ticks',\n        clip: true,\n grace: 0,\n        grid: {\n            display: true,\n            lineWidth: 1,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickLength: 8,\n            tickWidth: (_ctx, options)=>options.lineWidth,\n            tickColor: (_ctx, options)=>options.color,\n            offset: false\n        },\n        border: {\n            display: true,\n            dash: [],\n            dashOffset: 0.0,\n            width: 1\n        },\n        title: {\n            display: false,\n            text: '',\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n        ticks: {\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            textStrokeWidth: 0,\n            textStrokeColor: '',\n            padding: 3,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 3,\n            labelOffset: 0,\n            callback: Ticks.formatters.values,\n            minor: {},\n            major: {},\n            align: 'center',\n            crossAlign: 'near',\n            showLabelBackdrop: false,\n            backdropColor: 'rgba(255, 255, 255, 0.75)',\n            backdropPadding: 2\n        }\n    });\n    defaults.route('scale.ticks', 'color', '', 'color');\n    defaults.route('scale.grid', 'color', '', 'borderColor');\n    defaults.route('scale.border', 'color', '', 'borderColor');\n    defaults.route('scale.title', 'color', '', 'color');\n    defaults.describe('scale', {\n        _fallback: false,\n        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n    });\n    defaults.describe('scales', {\n        _fallback: 'scale'\n    });\n    defaults.describe('scale.ticks', {\n        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n        _indexable: (name)=>name !== 'backdropPadding'\n    });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n    if (!key) {\n        return node;\n    }\n    const keys = key.split('.');\n    for(let i = 0, n = keys.length; i < n; ++i){\n        const k = keys[i];\n        node = node[k] || (node[k] = Object.create(null));\n    }\n    return node;\n}\nfunction set(root, scope, values) {\n    if (typeof scope === 'string') {\n        return merge(getScope$1(root, scope), values);\n    }\n    return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n    constructor(_descriptors, _appliers){\n        this.animation = undefined;\n        this.backgroundColor = 'rgba(0,0,0,0.1)';\n        this.borderColor = 'rgba(0,0,0,0.1)';\n        this.color = '#666';\n        this.datasets = {};\n        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n        this.elements = {};\n        this.events = [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ];\n        this.font = {\n            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n            size: 12,\n            style: 'normal',\n            lineHeight: 1.2,\n            weight: null\n        };\n        this.hover = {};\n        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n        this.indexAxis = 'x';\n        this.interaction = {\n            mode: 'nearest',\n            intersect: true,\n            includeInvisible: false\n        };\n        this.maintainAspectRatio = true;\n        this.onHover = null;\n        this.onClick = null;\n        this.parsing = true;\n        this.plugins = {};\n        this.responsive = true;\n        this.scale = undefined;\n        this.scales = {};\n        this.showLine = true;\n        this.drawActiveElementsOnTop = true;\n        this.describe(_descriptors);\n        this.apply(_appliers);\n    }\n set(scope, values) {\n        return set(this, scope, values);\n    }\n get(scope) {\n        return getScope$1(this, scope);\n    }\n describe(scope, values) {\n        return set(descriptors, scope, values);\n    }\n    override(scope, values) {\n        return set(overrides, scope, values);\n    }\n route(scope, name, targetScope, targetName) {\n        const scopeObject = getScope$1(this, scope);\n        const targetScopeObject = getScope$1(this, targetScope);\n        const privateName = '_' + name;\n        Object.defineProperties(scopeObject, {\n            [privateName]: {\n                value: scopeObject[name],\n                writable: true\n            },\n            [name]: {\n                enumerable: true,\n                get () {\n                    const local = this[privateName];\n                    const target = targetScopeObject[targetName];\n                    if (isObject(local)) {\n                        return Object.assign({}, target, local);\n                    }\n                    return valueOrDefault(local, target);\n                },\n                set (value) {\n                    this[privateName] = value;\n                }\n            }\n        });\n    }\n    apply(appliers) {\n        appliers.forEach((apply)=>apply(this));\n    }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n    _scriptable: (name)=>!name.startsWith('on'),\n    _indexable: (name)=>name !== 'events',\n    hover: {\n        _fallback: 'interaction'\n    },\n    interaction: {\n        _scriptable: false,\n        _indexable: false\n    }\n}, [\n    applyAnimationsDefaults,\n    applyLayoutsDefaults,\n    applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n        return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n    let textWidth = data[string];\n    if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n    }\n    if (textWidth > longest) {\n        longest = textWidth;\n    }\n    return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n    cache = cache || {};\n    let data = cache.data = cache.data || {};\n    let gc = cache.garbageCollect = cache.garbageCollect || [];\n    if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n    }\n    ctx.save();\n    ctx.font = font;\n    let longest = 0;\n    const ilen = arrayOfThings.length;\n    let i, j, jlen, thing, nestedThing;\n    for(i = 0; i < ilen; i++){\n        thing = arrayOfThings[i];\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && !isArray(thing)) {\n            longest = _measureText(ctx, data, gc, longest, thing);\n        } else if (isArray(thing)) {\n            // if it is an array lets measure each element\n            // to do maybe simplify this function a bit so we can do this more recursively?\n            for(j = 0, jlen = thing.length; j < jlen; j++){\n                nestedThing = thing[j];\n                // Undefined strings and arrays should not be measured\n                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n                }\n            }\n        }\n    }\n    ctx.restore();\n    const gcLen = gc.length / 2;\n    if (gcLen > arrayOfThings.length) {\n        for(i = 0; i < gcLen; i++){\n            delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n    }\n    return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n    const devicePixelRatio = chart.currentDevicePixelRatio;\n    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n    if (!ctx && !canvas) {\n        return;\n    }\n    ctx = ctx || canvas.getContext('2d');\n    ctx.save();\n    // canvas.width and canvas.height do not consider the canvas transform,\n    // while clearRect does\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n    const style = options.pointStyle;\n    const rotation = options.rotation;\n    const radius = options.radius;\n    let rad = (rotation || 0) * RAD_PER_DEG;\n    if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n            ctx.save();\n            ctx.translate(x, y);\n            ctx.rotate(rad);\n            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n            ctx.restore();\n            return;\n        }\n    }\n    if (isNaN(radius) || radius <= 0) {\n        return;\n    }\n    ctx.beginPath();\n    switch(style){\n        // Default includes circle\n        default:\n            if (w) {\n                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n            } else {\n                ctx.arc(x, y, radius, 0, TAU);\n            }\n            ctx.closePath();\n            break;\n        case 'triangle':\n            width = w ? w / 2 : radius;\n            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            ctx.closePath();\n            break;\n        case 'rectRounded':\n            // NOTE: the rounded rect implementation changed to use `arc` instead of\n            // `quadraticCurveTo` since it generates better results when rect is\n            // almost a circle. 0.516 (instead of 0.5) produces results with visually\n            // closer proportion to the previous impl and it is inscribed in the\n            // circle with `radius`. For more details, see the following PRs:\n            // https://github.com/chartjs/Chart.js/issues/5597\n            // https://github.com/chartjs/Chart.js/issues/5858\n            cornerRadius = radius * 0.516;\n            size = radius - cornerRadius;\n            xOffset = Math.cos(rad + QUARTER_PI) * size;\n            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            yOffset = Math.sin(rad + QUARTER_PI) * size;\n            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n            ctx.closePath();\n            break;\n        case 'rect':\n            if (!rotation) {\n                size = Math.SQRT1_2 * radius;\n                width = w ? w / 2 : size;\n                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n                break;\n            }\n            rad += QUARTER_PI;\n        /* falls through */ case 'rectRot':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            ctx.closePath();\n            break;\n        case 'crossRot':\n            rad += QUARTER_PI;\n        /* falls through */ case 'cross':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'star':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            rad += QUARTER_PI;\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'line':\n            xOffset = w ? w / 2 : Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            ctx.moveTo(x - xOffset, y - yOffset);\n            ctx.lineTo(x + xOffset, y + yOffset);\n            break;\n        case 'dash':\n            ctx.moveTo(x, y);\n            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n            break;\n        case false:\n            ctx.closePath();\n            break;\n    }\n    ctx.fill();\n    if (options.borderWidth > 0) {\n        ctx.stroke();\n    }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n    margin = margin || 0.5; // margin - default is to match rounded decimals\n    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n    ctx.clip();\n}\nfunction unclipArea(ctx) {\n    ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    if (mode === 'middle') {\n        const midpoint = (previous.x + target.x) / 2.0;\n        ctx.lineTo(midpoint, previous.y);\n        ctx.lineTo(midpoint, target.y);\n    } else if (mode === 'after' !== !!flip) {\n        ctx.lineTo(previous.x, target.y);\n    } else {\n        ctx.lineTo(target.x, previous.y);\n    }\n    ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n    if (opts.translation) {\n        ctx.translate(opts.translation[0], opts.translation[1]);\n    }\n    if (!isNullOrUndef(opts.rotation)) {\n        ctx.rotate(opts.rotation);\n    }\n    if (opts.color) {\n        ctx.fillStyle = opts.color;\n    }\n    if (opts.textAlign) {\n        ctx.textAlign = opts.textAlign;\n    }\n    if (opts.textBaseline) {\n        ctx.textBaseline = opts.textBaseline;\n    }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n    if (opts.strikethrough || opts.underline) {\n        /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */ const metrics = ctx.measureText(line);\n        const left = x - metrics.actualBoundingBoxLeft;\n        const right = x + metrics.actualBoundingBoxRight;\n        const top = y - metrics.actualBoundingBoxAscent;\n        const bottom = y + metrics.actualBoundingBoxDescent;\n        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n        ctx.strokeStyle = ctx.fillStyle;\n        ctx.beginPath();\n        ctx.lineWidth = opts.decorationWidth || 2;\n        ctx.moveTo(left, yDecoration);\n        ctx.lineTo(right, yDecoration);\n        ctx.stroke();\n    }\n}\nfunction drawBackdrop(ctx, opts) {\n    const oldColor = ctx.fillStyle;\n    ctx.fillStyle = opts.color;\n    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n    ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n    const lines = isArray(text) ? text : [\n        text\n    ];\n    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n    let i, line;\n    ctx.save();\n    ctx.font = font.string;\n    setRenderOpts(ctx, opts);\n    for(i = 0; i < lines.length; ++i){\n        line = lines[i];\n        if (opts.backdrop) {\n            drawBackdrop(ctx, opts.backdrop);\n        }\n        if (stroke) {\n            if (opts.strokeColor) {\n                ctx.strokeStyle = opts.strokeColor;\n            }\n            if (!isNullOrUndef(opts.strokeWidth)) {\n                ctx.lineWidth = opts.strokeWidth;\n            }\n            ctx.strokeText(line, x, y, opts.maxWidth);\n        }\n        ctx.fillText(line, x, y, opts.maxWidth);\n        decorateText(ctx, x, y, line, opts);\n        y += Number(font.lineHeight);\n    }\n    ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n    const { x , y , w , h , radius  } = rect;\n    // top left arc\n    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n    // line from top left to bottom left\n    ctx.lineTo(x, y + h - radius.bottomLeft);\n    // bottom left arc\n    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n    // line from bottom left to bottom right\n    ctx.lineTo(x + w - radius.bottomRight, y + h);\n    // bottom right arc\n    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n    // line from bottom right to top right\n    ctx.lineTo(x + w, y + radius.topRight);\n    // top right arc\n    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n    // line from top right to top left\n    ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n    const matches = ('' + value).match(LINE_HEIGHT);\n    if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n    }\n    value = +matches[2];\n    switch(matches[3]){\n        case 'px':\n            return value;\n        case '%':\n            value /= 100;\n            break;\n    }\n    return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n    const ret = {};\n    const objProps = isObject(props);\n    const keys = objProps ? Object.keys(props) : props;\n    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n    for (const prop of keys){\n        ret[prop] = numberOrZero(read(prop));\n    }\n    return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n    return _readValueToProps(value, {\n        top: 'y',\n        right: 'x',\n        bottom: 'y',\n        left: 'x'\n    });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n    return _readValueToProps(value, [\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight'\n    ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n    const obj = toTRBL(value);\n    obj.width = obj.left + obj.right;\n    obj.height = obj.top + obj.bottom;\n    return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n    options = options || {};\n    fallback = fallback || defaults.font;\n    let size = valueOrDefault(options.size, fallback.size);\n    if (typeof size === 'string') {\n        size = parseInt(size, 10);\n    }\n    let style = valueOrDefault(options.style, fallback.style);\n    if (style && !('' + style).match(FONT_STYLE)) {\n        console.warn('Invalid font style specified: \"' + style + '\"');\n        style = undefined;\n    }\n    const font = {\n        family: valueOrDefault(options.family, fallback.family),\n        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n        size,\n        style,\n        weight: valueOrDefault(options.weight, fallback.weight),\n        string: ''\n    };\n    font.string = toFontString(font);\n    return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n    let cacheable = true;\n    let i, ilen, value;\n    for(i = 0, ilen = inputs.length; i < ilen; ++i){\n        value = inputs[i];\n        if (value === undefined) {\n            continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n            value = value(context);\n            cacheable = false;\n        }\n        if (index !== undefined && isArray(value)) {\n            value = value[index % value.length];\n            cacheable = false;\n        }\n        if (value !== undefined) {\n            if (info && !cacheable) {\n                info.cacheable = false;\n            }\n            return value;\n        }\n    }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n    const { min , max  } = minmax;\n    const change = toDimension(grace, (max - min) / 2);\n    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n    return {\n        min: keepZero(min, -Math.abs(change)),\n        max: keepZero(max, change)\n    };\n}\nfunction createContext(parentContext, context) {\n    return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n    ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n    const finalRootScopes = rootScopes || scopes;\n    if (typeof fallback === 'undefined') {\n        fallback = _resolve('_fallback', scopes);\n    }\n    const cache = {\n        [Symbol.toStringTag]: 'Object',\n        _cacheable: true,\n        _scopes: scopes,\n        _rootScopes: finalRootScopes,\n        _fallback: fallback,\n        _getTarget: getTarget,\n        override: (scope)=>_createResolver([\n                scope,\n                ...scopes\n            ], prefixes, finalRootScopes, fallback)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete target._keys; // remove cached keys\n            delete scopes[0][prop]; // remove from top level scope\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop) {\n            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(scopes[0]);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return getKeysFromAllScopes(target).includes(prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys (target) {\n            return getKeysFromAllScopes(target);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            const storage = target._storage || (target._storage = getTarget());\n            target[prop] = storage[prop] = value; // set to top level scope + cache\n            delete target._keys; // remove cached keys\n            return true;\n        }\n    });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n    const cache = {\n        _cacheable: false,\n        _proxy: proxy,\n        _context: context,\n        _subProxy: subProxy,\n        _stack: new Set(),\n        _descriptors: _descriptors(proxy, descriptorDefaults),\n        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete proxy[prop]; // remove from proxy\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop, receiver) {\n            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n                enumerable: true,\n                configurable: true\n            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(proxy);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return Reflect.has(proxy, prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys () {\n            return Reflect.ownKeys(proxy);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            proxy[prop] = value; // set to proxy\n            delete target[prop]; // remove from cache\n            return true;\n        }\n    });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n    scriptable: true,\n    indexable: true\n}) {\n    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n    return {\n        allKeys: _allKeys,\n        scriptable: _scriptable,\n        indexable: _indexable,\n        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n    };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n        return target[prop];\n    }\n    const value = resolve();\n    // cache the resolved value\n    target[prop] = value;\n    return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    let value = _proxy[prop]; // resolve from proxy\n    // resolve with context\n    if (isFunction(value) && descriptors.isScriptable(prop)) {\n        value = _resolveScriptable(prop, value, target, receiver);\n    }\n    if (isArray(value) && value.length) {\n        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n    }\n    if (needsSubResolver(prop, value)) {\n        // if the resolved value is an object, create a sub resolver for it\n        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n    }\n    return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n    const { _proxy , _context , _subProxy , _stack  } = target;\n    if (_stack.has(prop)) {\n        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n    }\n    _stack.add(prop);\n    let value = getValue(_context, _subProxy || receiver);\n    _stack.delete(prop);\n    if (needsSubResolver(prop, value)) {\n        // When scriptable option returns an object, create a resolver on that.\n        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n    }\n    return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n        return value[_context.index % value.length];\n    } else if (isObject(value[0])) {\n        // Array of objects, return array or resolvers\n        const arr = value;\n        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n        value = [];\n        for (const item of arr){\n            const resolver = createSubResolver(scopes, _proxy, prop, item);\n            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n        }\n    }\n    return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n    return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n    for (const parent of parentScopes){\n        const scope = getScope(key, parent);\n        if (scope) {\n            set.add(scope);\n            const fallback = resolveFallback(scope._fallback, key, value);\n            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n                // When we reach the descriptor that defines a new _fallback, return that.\n                // The fallback will resume to that new scope.\n                return fallback;\n            }\n        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n            // Fallback to `false` results to `false`, when falling back to different key.\n            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n            return null;\n        }\n    }\n    return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n    const rootScopes = resolver._rootScopes;\n    const fallback = resolveFallback(resolver._fallback, prop, value);\n    const allScopes = [\n        ...parentScopes,\n        ...rootScopes\n    ];\n    const set = new Set();\n    set.add(value);\n    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n    if (key === null) {\n        return false;\n    }\n    if (typeof fallback !== 'undefined' && fallback !== prop) {\n        key = addScopesFromKey(set, allScopes, fallback, key, value);\n        if (key === null) {\n            return false;\n        }\n    }\n    return _createResolver(Array.from(set), [\n        ''\n    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n    while(key){\n        key = addScopes(set, allScopes, key, fallback, item);\n    }\n    return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n    const parent = resolver._getTarget();\n    if (!(prop in parent)) {\n        parent[prop] = {};\n    }\n    const target = parent[prop];\n    if (isArray(target) && isObject(value)) {\n        // For array of objects, the object is used to store updated values\n        return value;\n    }\n    return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n    let value;\n    for (const prefix of prefixes){\n        value = _resolve(readKey(prefix, prop), scopes);\n        if (typeof value !== 'undefined') {\n            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n        }\n    }\n}\nfunction _resolve(key, scopes) {\n    for (const scope of scopes){\n        if (!scope) {\n            continue;\n        }\n        const value = scope[key];\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n}\nfunction getKeysFromAllScopes(target) {\n    let keys = target._keys;\n    if (!keys) {\n        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n    }\n    return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n    const set = new Set();\n    for (const scope of scopes){\n        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n            set.add(key);\n        }\n    }\n    return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n    const { iScale  } = meta;\n    const { key ='r'  } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for(i = 0, ilen = count; i < ilen; ++i){\n        index = i + start;\n        item = data[index];\n        parsed[i] = {\n            r: iScale.parse(resolveObjectKey(item, key), index)\n        };\n    }\n    return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n    // Props to Rob Spencer at scaled innovation for his post on splining between points\n    // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n    // This function must also respect \"skipped\" points\n    const previous = firstPoint.skip ? middlePoint : firstPoint;\n    const current = middlePoint;\n    const next = afterPoint.skip ? middlePoint : afterPoint;\n    const d01 = distanceBetweenPoints(current, previous);\n    const d12 = distanceBetweenPoints(next, current);\n    let s01 = d01 / (d01 + d12);\n    let s12 = d12 / (d01 + d12);\n    // If all points are the same, s01 & s02 will be inf\n    s01 = isNaN(s01) ? 0 : s01;\n    s12 = isNaN(s12) ? 0 : s12;\n    const fa = t * s01; // scaling factor for triangle Ta\n    const fb = t * s12;\n    return {\n        previous: {\n            x: current.x - fa * (next.x - previous.x),\n            y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n            x: current.x + fb * (next.x - previous.x),\n            y: current.y + fb * (next.y - previous.y)\n        }\n    };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n    const pointsLen = points.length;\n    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen - 1; ++i){\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent || !pointAfter) {\n            continue;\n        }\n        if (almostEquals(deltaK[i], 0, EPSILON)) {\n            mK[i] = mK[i + 1] = 0;\n            continue;\n        }\n        alphaK = mK[i] / deltaK[i];\n        betaK = mK[i + 1] / deltaK[i];\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n            continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        mK[i] = alphaK * tauK * deltaK[i];\n        mK[i + 1] = betaK * tauK * deltaK[i];\n    }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    let delta, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        const iPixel = pointCurrent[indexAxis];\n        const vPixel = pointCurrent[valueAxis];\n        if (pointBefore) {\n            delta = (iPixel - pointBefore[indexAxis]) / 3;\n            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n        }\n        if (pointAfter) {\n            delta = (pointAfter[indexAxis] - iPixel) / 3;\n            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n        }\n    }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    const deltaK = Array(pointsLen).fill(0);\n    const mK = Array(pointsLen);\n    // Calculate slopes (deltaK) and initialize tangents (mK)\n    let i, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        if (pointAfter) {\n            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n        }\n        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n    }\n    monotoneAdjust(points, deltaK, mK);\n    monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n    return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n    let i, ilen, point, inArea, inAreaPrev;\n    let inAreaNext = _isPointInArea(points[0], area);\n    for(i = 0, ilen = points.length; i < ilen; ++i){\n        inAreaPrev = inArea;\n        inArea = inAreaNext;\n        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n        if (!inArea) {\n            continue;\n        }\n        point = points[i];\n        if (inAreaPrev) {\n            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n        }\n        if (inAreaNext) {\n            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n        }\n    }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n    let i, ilen, point, controlPoints;\n    // Only consider points that are drawn in case the spanGaps option is used\n    if (options.spanGaps) {\n        points = points.filter((pt)=>!pt.skip);\n    }\n    if (options.cubicInterpolationMode === 'monotone') {\n        splineCurveMonotone(points, indexAxis);\n    } else {\n        let prev = loop ? points[points.length - 1] : points[0];\n        for(i = 0, ilen = points.length; i < ilen; ++i){\n            point = points[i];\n            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n            point.cp1x = controlPoints.previous.x;\n            point.cp1y = controlPoints.previous.y;\n            point.cp2x = controlPoints.next.x;\n            point.cp2y = controlPoints.next.y;\n            prev = point;\n        }\n    }\n    if (options.capBezierPoints) {\n        capBezierPoints(points, area);\n    }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n    return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n    let parent = domNode.parentNode;\n    if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n    }\n    return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n    let valueInPixels;\n    if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n            // percentage * size in dimension\n            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n    } else {\n        valueInPixels = styleValue;\n    }\n    return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n    return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n    const result = {};\n    suffix = suffix ? '-' + suffix : '';\n    for(let i = 0; i < 4; i++){\n        const pos = positions[i];\n        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n    }\n    result.width = result.left + result.right;\n    result.height = result.top + result.bottom;\n    return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n    const touches = e.touches;\n    const source = touches && touches.length ? touches[0] : e;\n    const { offsetX , offsetY  } = source;\n    let box = false;\n    let x, y;\n    if (useOffsetPos(offsetX, offsetY, e.target)) {\n        x = offsetX;\n        y = offsetY;\n    } else {\n        const rect = canvas.getBoundingClientRect();\n        x = source.clientX - rect.left;\n        y = source.clientY - rect.top;\n        box = true;\n    }\n    return {\n        x,\n        y,\n        box\n    };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n    if ('native' in event) {\n        return event;\n    }\n    const { canvas , currentDevicePixelRatio  } = chart;\n    const style = getComputedStyle(canvas);\n    const borderBox = style.boxSizing === 'border-box';\n    const paddings = getPositionedStyle(style, 'padding');\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const { x , y , box  } = getCanvasPosition(event, canvas);\n    const xOffset = paddings.left + (box && borders.left);\n    const yOffset = paddings.top + (box && borders.top);\n    let { width , height  } = chart;\n    if (borderBox) {\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    return {\n        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n    };\n}\nfunction getContainerSize(canvas, width, height) {\n    let maxWidth, maxHeight;\n    if (width === undefined || height === undefined) {\n        const container = canvas && _getParentNode(canvas);\n        if (!container) {\n            width = canvas.clientWidth;\n            height = canvas.clientHeight;\n        } else {\n            const rect = container.getBoundingClientRect(); // this is the border box of the container\n            const containerStyle = getComputedStyle(container);\n            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n            width = rect.width - containerPadding.width - containerBorder.width;\n            height = rect.height - containerPadding.height - containerBorder.height;\n            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n        }\n    }\n    return {\n        width,\n        height,\n        maxWidth: maxWidth || INFINITY,\n        maxHeight: maxHeight || INFINITY\n    };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n    const style = getComputedStyle(canvas);\n    const margins = getPositionedStyle(style, 'margin');\n    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n    let { width , height  } = containerSize;\n    if (style.boxSizing === 'content-box') {\n        const borders = getPositionedStyle(style, 'border', 'width');\n        const paddings = getPositionedStyle(style, 'padding');\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    width = Math.max(0, width - margins.width);\n    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n    if (width && !height) {\n        // https://github.com/chartjs/Chart.js/issues/4659\n        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n        height = round1(width / 2);\n    }\n    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n        height = containerSize.height;\n        width = round1(Math.floor(height * aspectRatio));\n    }\n    return {\n        width,\n        height\n    };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n    const pixelRatio = forceRatio || 1;\n    const deviceHeight = round1(chart.height * pixelRatio);\n    const deviceWidth = round1(chart.width * pixelRatio);\n    chart.height = round1(chart.height);\n    chart.width = round1(chart.width);\n    const canvas = chart.canvas;\n    // If no style has been set on the canvas, the render size is used as display size,\n    // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n    // See https://github.com/chartjs/Chart.js/issues/3575\n    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n        canvas.style.height = `${chart.height}px`;\n        canvas.style.width = `${chart.width}px`;\n    }\n    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n        chart.currentDevicePixelRatio = pixelRatio;\n        canvas.height = deviceHeight;\n        canvas.width = deviceWidth;\n        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        return true;\n    }\n    return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n    let passiveSupported = false;\n    try {\n        const options = {\n            get passive () {\n                passiveSupported = true;\n                return false;\n            }\n        };\n        if (_isDomSupported()) {\n            window.addEventListener('test', null, options);\n            window.removeEventListener('test', null, options);\n        }\n    } catch (e) {\n    // continue regardless of error\n    }\n    return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n    const value = getStyle(element, property);\n    const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: p1.y + t * (p2.y - p1.y)\n    };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n    };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n    const cp1 = {\n        x: p1.cp2x,\n        y: p1.cp2y\n    };\n    const cp2 = {\n        x: p2.cp1x,\n        y: p2.cp1y\n    };\n    const a = _pointInLine(p1, cp1, t);\n    const b = _pointInLine(cp1, cp2, t);\n    const c = _pointInLine(cp2, p2, t);\n    const d = _pointInLine(a, b, t);\n    const e = _pointInLine(b, c, t);\n    return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n    return {\n        x (x) {\n            return rectX + rectX + width - x;\n        },\n        setWidth (w) {\n            width = w;\n        },\n        textAlign (align) {\n            if (align === 'center') {\n                return align;\n            }\n            return align === 'right' ? 'left' : 'right';\n        },\n        xPlus (x, value) {\n            return x - value;\n        },\n        leftForLtr (x, itemWidth) {\n            return x - itemWidth;\n        }\n    };\n};\nconst getLeftToRightAdapter = function() {\n    return {\n        x (x) {\n            return x;\n        },\n        setWidth (w) {},\n        textAlign (align) {\n            return align;\n        },\n        xPlus (x, value) {\n            return x + value;\n        },\n        leftForLtr (x, _itemWidth) {\n            return x;\n        }\n    };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n    let style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n        style = ctx.canvas.style;\n        original = [\n            style.getPropertyValue('direction'),\n            style.getPropertyPriority('direction')\n        ];\n        style.setProperty('direction', direction, 'important');\n        ctx.prevTextDirection = original;\n    }\n}\nfunction restoreTextDirection(ctx, original) {\n    if (original !== undefined) {\n        delete ctx.prevTextDirection;\n        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n}\n\nfunction propertyFn(property) {\n    if (property === 'angle') {\n        return {\n            between: _angleBetween,\n            compare: _angleDiff,\n            normalize: _normalizeAngle\n        };\n    }\n    return {\n        between: _isBetween,\n        compare: (a, b)=>a - b,\n        normalize: (x)=>x\n    };\n}\nfunction normalizeSegment({ start , end , count , loop , style  }) {\n    return {\n        start: start % count,\n        end: end % count,\n        loop: loop && (end - start + 1) % count === 0,\n        style\n    };\n}\nfunction getSegment(segment, points, bounds) {\n    const { property , start: startBound , end: endBound  } = bounds;\n    const { between , normalize  } = propertyFn(property);\n    const count = points.length;\n    let { start , end , loop  } = segment;\n    let i, ilen;\n    if (loop) {\n        start += count;\n        end += count;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n                break;\n            }\n            start--;\n            end--;\n        }\n        start %= count;\n        end %= count;\n    }\n    if (end < start) {\n        end += count;\n    }\n    return {\n        start,\n        end,\n        loop,\n        style: segment.style\n    };\n}\n function _boundSegment(segment, points, bounds) {\n    if (!bounds) {\n        return [\n            segment\n        ];\n    }\n    const { property , start: startBound , end: endBound  } = bounds;\n    const count = points.length;\n    const { compare , between , normalize  } = propertyFn(property);\n    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n    const result = [];\n    let inside = false;\n    let subStart = null;\n    let value, point, prevValue;\n    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n    const shouldStart = ()=>inside || startIsBefore();\n    const shouldStop = ()=>!inside || endIsBefore();\n    for(let i = start, prev = start; i <= end; ++i){\n        point = points[i % count];\n        if (point.skip) {\n            continue;\n        }\n        value = normalize(point[property]);\n        if (value === prevValue) {\n            continue;\n        }\n        inside = between(value, startBound, endBound);\n        if (subStart === null && shouldStart()) {\n            subStart = compare(value, startBound) === 0 ? i : prev;\n        }\n        if (subStart !== null && shouldStop()) {\n            result.push(normalizeSegment({\n                start: subStart,\n                end: i,\n                loop,\n                count,\n                style\n            }));\n            subStart = null;\n        }\n        prev = i;\n        prevValue = value;\n    }\n    if (subStart !== null) {\n        result.push(normalizeSegment({\n            start: subStart,\n            end,\n            loop,\n            count,\n            style\n        }));\n    }\n    return result;\n}\n function _boundSegments(line, bounds) {\n    const result = [];\n    const segments = line.segments;\n    for(let i = 0; i < segments.length; i++){\n        const sub = _boundSegment(segments[i], line.points, bounds);\n        if (sub.length) {\n            result.push(...sub);\n        }\n    }\n    return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n    let start = 0;\n    let end = count - 1;\n    if (loop && !spanGaps) {\n        while(start < count && !points[start].skip){\n            start++;\n        }\n    }\n    while(start < count && points[start].skip){\n        start++;\n    }\n    start %= count;\n    if (loop) {\n        end += start;\n    }\n    while(end > start && points[end % count].skip){\n        end--;\n    }\n    end %= count;\n    return {\n        start,\n        end\n    };\n}\n function solidSegments(points, start, max, loop) {\n    const count = points.length;\n    const result = [];\n    let last = start;\n    let prev = points[start];\n    let end;\n    for(end = start + 1; end <= max; ++end){\n        const cur = points[end % count];\n        if (cur.skip || cur.stop) {\n            if (!prev.skip) {\n                loop = false;\n                result.push({\n                    start: start % count,\n                    end: (end - 1) % count,\n                    loop\n                });\n                start = last = cur.stop ? end : null;\n            }\n        } else {\n            last = end;\n            if (prev.skip) {\n                start = end;\n            }\n        }\n        prev = cur;\n    }\n    if (last !== null) {\n        result.push({\n            start: start % count,\n            end: last % count,\n            loop\n        });\n    }\n    return result;\n}\n function _computeSegments(line, segmentOptions) {\n    const points = line.points;\n    const spanGaps = line.options.spanGaps;\n    const count = points.length;\n    if (!count) {\n        return [];\n    }\n    const loop = !!line._loop;\n    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n    if (spanGaps === true) {\n        return splitByStyles(line, [\n            {\n                start,\n                end,\n                loop\n            }\n        ], points, segmentOptions);\n    }\n    const max = end < start ? end + count : end;\n    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n    if (!segmentOptions || !segmentOptions.setContext || !points) {\n        return segments;\n    }\n    return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n    const chartContext = line._chart.getContext();\n    const baseStyle = readStyle(line.options);\n    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n    const count = points.length;\n    const result = [];\n    let prevStyle = baseStyle;\n    let start = segments[0].start;\n    let i = start;\n    function addStyle(s, e, l, st) {\n        const dir = spanGaps ? -1 : 1;\n        if (s === e) {\n            return;\n        }\n        s += count;\n        while(points[s % count].skip){\n            s -= dir;\n        }\n        while(points[e % count].skip){\n            e += dir;\n        }\n        if (s % count !== e % count) {\n            result.push({\n                start: s % count,\n                end: e % count,\n                loop: l,\n                style: st\n            });\n            prevStyle = st;\n            start = e % count;\n        }\n    }\n    for (const segment of segments){\n        start = spanGaps ? start : segment.start;\n        let prev = points[start % count];\n        let style;\n        for(i = start + 1; i <= segment.end; i++){\n            const pt = points[i % count];\n            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n                type: 'segment',\n                p0: prev,\n                p1: pt,\n                p0DataIndex: (i - 1) % count,\n                p1DataIndex: i % count,\n                datasetIndex\n            })));\n            if (styleChanged(style, prevStyle)) {\n                addStyle(start, i - 1, segment.loop, prevStyle);\n            }\n            prev = pt;\n            prevStyle = style;\n        }\n        if (start < i - 1) {\n            addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n    }\n    return result;\n}\nfunction readStyle(options) {\n    return {\n        backgroundColor: options.backgroundColor,\n        borderCapStyle: options.borderCapStyle,\n        borderDash: options.borderDash,\n        borderDashOffset: options.borderDashOffset,\n        borderJoinStyle: options.borderJoinStyle,\n        borderWidth: options.borderWidth,\n        borderColor: options.borderColor\n    };\n}\nfunction styleChanged(style, prevStyle) {\n    if (!prevStyle) {\n        return false;\n    }\n    const cache = [];\n    const replacer = function(key, value) {\n        if (!isPatternOrGradient(value)) {\n            return value;\n        }\n        if (!cache.includes(value)) {\n            cache.push(value);\n        }\n        return cache.indexOf(value);\n    };\n    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n    return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n    const { xScale , yScale  } = meta;\n    if (xScale && yScale) {\n        return {\n            left: getSizeForArea(xScale, chartArea, 'left'),\n            right: getSizeForArea(xScale, chartArea, 'right'),\n            top: getSizeForArea(yScale, chartArea, 'top'),\n            bottom: getSizeForArea(yScale, chartArea, 'bottom')\n        };\n    }\n    return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n    const clip = meta._clip;\n    if (clip.disabled) {\n        return false;\n    }\n    const area = getDatasetArea(meta, chart.chartArea);\n    return {\n        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n    };\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.dataset.js.map\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\n\nclass Animator {\n    constructor(){\n        this._request = null;\n        this._charts = new Map();\n        this._running = false;\n        this._lastDate = undefined;\n    }\n _notify(chart, anims, date, type) {\n        const callbacks = anims.listeners[type];\n        const numSteps = anims.duration;\n        callbacks.forEach((fn)=>fn({\n                chart,\n                initial: anims.initial,\n                numSteps,\n                currentStep: Math.min(date - anims.start, numSteps)\n            }));\n    }\n _refresh() {\n        if (this._request) {\n            return;\n        }\n        this._running = true;\n        this._request = requestAnimFrame.call(window, ()=>{\n            this._update();\n            this._request = null;\n            if (this._running) {\n                this._refresh();\n            }\n        });\n    }\n _update(date = Date.now()) {\n        let remaining = 0;\n        this._charts.forEach((anims, chart)=>{\n            if (!anims.running || !anims.items.length) {\n                return;\n            }\n            const items = anims.items;\n            let i = items.length - 1;\n            let draw = false;\n            let item;\n            for(; i >= 0; --i){\n                item = items[i];\n                if (item._active) {\n                    if (item._total > anims.duration) {\n                        anims.duration = item._total;\n                    }\n                    item.tick(date);\n                    draw = true;\n                } else {\n                    items[i] = items[items.length - 1];\n                    items.pop();\n                }\n            }\n            if (draw) {\n                chart.draw();\n                this._notify(chart, anims, date, 'progress');\n            }\n            if (!items.length) {\n                anims.running = false;\n                this._notify(chart, anims, date, 'complete');\n                anims.initial = false;\n            }\n            remaining += items.length;\n        });\n        this._lastDate = date;\n        if (remaining === 0) {\n            this._running = false;\n        }\n    }\n _getAnims(chart) {\n        const charts = this._charts;\n        let anims = charts.get(chart);\n        if (!anims) {\n            anims = {\n                running: false,\n                initial: true,\n                items: [],\n                listeners: {\n                    complete: [],\n                    progress: []\n                }\n            };\n            charts.set(chart, anims);\n        }\n        return anims;\n    }\n listen(chart, event, cb) {\n        this._getAnims(chart).listeners[event].push(cb);\n    }\n add(chart, items) {\n        if (!items || !items.length) {\n            return;\n        }\n        this._getAnims(chart).items.push(...items);\n    }\n has(chart) {\n        return this._getAnims(chart).items.length > 0;\n    }\n start(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims) {\n            return;\n        }\n        anims.running = true;\n        anims.start = Date.now();\n        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n        this._refresh();\n    }\n    running(chart) {\n        if (!this._running) {\n            return false;\n        }\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.running || !anims.items.length) {\n            return false;\n        }\n        return true;\n    }\n stop(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.items.length) {\n            return;\n        }\n        const items = anims.items;\n        let i = items.length - 1;\n        for(; i >= 0; --i){\n            items[i].cancel();\n        }\n        anims.items = [];\n        this._notify(chart, anims, Date.now(), 'complete');\n    }\n remove(chart) {\n        return this._charts.delete(chart);\n    }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n    boolean (from, to, factor) {\n        return factor > 0.5 ? to : from;\n    },\n color (from, to, factor) {\n        const c0 = color(from || transparent);\n        const c1 = c0.valid && color(to || transparent);\n        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n    },\n    number (from, to, factor) {\n        return from + (to - from) * factor;\n    }\n};\nclass Animation {\n    constructor(cfg, target, prop, to){\n        const currentValue = target[prop];\n        to = resolve([\n            cfg.to,\n            to,\n            currentValue,\n            cfg.from\n        ]);\n        const from = resolve([\n            cfg.from,\n            currentValue,\n            to\n        ]);\n        this._active = true;\n        this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n        this._easing = effects[cfg.easing] || effects.linear;\n        this._start = Math.floor(Date.now() + (cfg.delay || 0));\n        this._duration = this._total = Math.floor(cfg.duration);\n        this._loop = !!cfg.loop;\n        this._target = target;\n        this._prop = prop;\n        this._from = from;\n        this._to = to;\n        this._promises = undefined;\n    }\n    active() {\n        return this._active;\n    }\n    update(cfg, to, date) {\n        if (this._active) {\n            this._notify(false);\n            const currentValue = this._target[this._prop];\n            const elapsed = date - this._start;\n            const remain = this._duration - elapsed;\n            this._start = date;\n            this._duration = Math.floor(Math.max(remain, cfg.duration));\n            this._total += elapsed;\n            this._loop = !!cfg.loop;\n            this._to = resolve([\n                cfg.to,\n                to,\n                currentValue,\n                cfg.from\n            ]);\n            this._from = resolve([\n                cfg.from,\n                currentValue,\n                to\n            ]);\n        }\n    }\n    cancel() {\n        if (this._active) {\n            this.tick(Date.now());\n            this._active = false;\n            this._notify(false);\n        }\n    }\n    tick(date) {\n        const elapsed = date - this._start;\n        const duration = this._duration;\n        const prop = this._prop;\n        const from = this._from;\n        const loop = this._loop;\n        const to = this._to;\n        let factor;\n        this._active = from !== to && (loop || elapsed < duration);\n        if (!this._active) {\n            this._target[prop] = to;\n            this._notify(true);\n            return;\n        }\n        if (elapsed < 0) {\n            this._target[prop] = from;\n            return;\n        }\n        factor = elapsed / duration % 2;\n        factor = loop && factor > 1 ? 2 - factor : factor;\n        factor = this._easing(Math.min(1, Math.max(0, factor)));\n        this._target[prop] = this._fn(from, to, factor);\n    }\n    wait() {\n        const promises = this._promises || (this._promises = []);\n        return new Promise((res, rej)=>{\n            promises.push({\n                res,\n                rej\n            });\n        });\n    }\n    _notify(resolved) {\n        const method = resolved ? 'res' : 'rej';\n        const promises = this._promises || [];\n        for(let i = 0; i < promises.length; i++){\n            promises[i][method]();\n        }\n    }\n}\n\nclass Animations {\n    constructor(chart, config){\n        this._chart = chart;\n        this._properties = new Map();\n        this.configure(config);\n    }\n    configure(config) {\n        if (!isObject(config)) {\n            return;\n        }\n        const animationOptions = Object.keys(defaults.animation);\n        const animatedProps = this._properties;\n        Object.getOwnPropertyNames(config).forEach((key)=>{\n            const cfg = config[key];\n            if (!isObject(cfg)) {\n                return;\n            }\n            const resolved = {};\n            for (const option of animationOptions){\n                resolved[option] = cfg[option];\n            }\n            (isArray(cfg.properties) && cfg.properties || [\n                key\n            ]).forEach((prop)=>{\n                if (prop === key || !animatedProps.has(prop)) {\n                    animatedProps.set(prop, resolved);\n                }\n            });\n        });\n    }\n _animateOptions(target, values) {\n        const newOptions = values.options;\n        const options = resolveTargetOptions(target, newOptions);\n        if (!options) {\n            return [];\n        }\n        const animations = this._createAnimations(options, newOptions);\n        if (newOptions.$shared) {\n            awaitAll(target.options.$animations, newOptions).then(()=>{\n                target.options = newOptions;\n            }, ()=>{\n            });\n        }\n        return animations;\n    }\n _createAnimations(target, values) {\n        const animatedProps = this._properties;\n        const animations = [];\n        const running = target.$animations || (target.$animations = {});\n        const props = Object.keys(values);\n        const date = Date.now();\n        let i;\n        for(i = props.length - 1; i >= 0; --i){\n            const prop = props[i];\n            if (prop.charAt(0) === '$') {\n                continue;\n            }\n            if (prop === 'options') {\n                animations.push(...this._animateOptions(target, values));\n                continue;\n            }\n            const value = values[prop];\n            let animation = running[prop];\n            const cfg = animatedProps.get(prop);\n            if (animation) {\n                if (cfg && animation.active()) {\n                    animation.update(cfg, value, date);\n                    continue;\n                } else {\n                    animation.cancel();\n                }\n            }\n            if (!cfg || !cfg.duration) {\n                target[prop] = value;\n                continue;\n            }\n            running[prop] = animation = new Animation(cfg, target, prop, value);\n            animations.push(animation);\n        }\n        return animations;\n    }\n update(target, values) {\n        if (this._properties.size === 0) {\n            Object.assign(target, values);\n            return;\n        }\n        const animations = this._createAnimations(target, values);\n        if (animations.length) {\n            animator.add(this._chart, animations);\n            return true;\n        }\n    }\n}\nfunction awaitAll(animations, properties) {\n    const running = [];\n    const keys = Object.keys(properties);\n    for(let i = 0; i < keys.length; i++){\n        const anim = animations[keys[i]];\n        if (anim && anim.active()) {\n            running.push(anim.wait());\n        }\n    }\n    return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n    if (!newOptions) {\n        return;\n    }\n    let options = target.options;\n    if (!options) {\n        target.options = newOptions;\n        return;\n    }\n    if (options.$shared) {\n        target.options = options = Object.assign({}, options, {\n            $shared: false,\n            $animations: {}\n        });\n    }\n    return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n    const opts = scale && scale.options || {};\n    const reverse = opts.reverse;\n    const min = opts.min === undefined ? allowedOverflow : 0;\n    const max = opts.max === undefined ? allowedOverflow : 0;\n    return {\n        start: reverse ? max : min,\n        end: reverse ? min : max\n    };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n    if (allowedOverflow === false) {\n        return false;\n    }\n    const x = scaleClip(xScale, allowedOverflow);\n    const y = scaleClip(yScale, allowedOverflow);\n    return {\n        top: y.end,\n        right: x.end,\n        bottom: y.start,\n        left: x.start\n    };\n}\nfunction toClip(value) {\n    let t, r, b, l;\n    if (isObject(value)) {\n        t = value.top;\n        r = value.right;\n        b = value.bottom;\n        l = value.left;\n    } else {\n        t = r = b = l = value;\n    }\n    return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        disabled: value === false\n    };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n    const keys = [];\n    const metasets = chart._getSortedDatasetMetas(filterVisible);\n    let i, ilen;\n    for(i = 0, ilen = metasets.length; i < ilen; ++i){\n        keys.push(metasets[i].index);\n    }\n    return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n    const keys = stack.keys;\n    const singleMode = options.mode === 'single';\n    let i, ilen, datasetIndex, otherValue;\n    if (value === null) {\n        return;\n    }\n    let found = false;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        datasetIndex = +keys[i];\n        if (datasetIndex === dsIndex) {\n            found = true;\n            if (options.all) {\n                continue;\n            }\n            break;\n        }\n        otherValue = stack.values[datasetIndex];\n        if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n            value += otherValue;\n        }\n    }\n    if (!found && !options.all) {\n        return 0;\n    }\n    return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n    const { iScale , vScale  } = meta;\n    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n    const keys = Object.keys(data);\n    const adata = new Array(keys.length);\n    let i, ilen, key;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        key = keys[i];\n        adata[i] = {\n            [iAxisKey]: key,\n            [vAxisKey]: data[key]\n        };\n    }\n    return adata;\n}\nfunction isStacked(scale, meta) {\n    const stacked = scale && scale.options.stacked;\n    return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();\n    return {\n        min: minDefined ? min : Number.NEGATIVE_INFINITY,\n        max: maxDefined ? max : Number.POSITIVE_INFINITY\n    };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n    const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n    return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n        const value = stack[meta.index];\n        if (positive && value > 0 || !positive && value < 0) {\n            return meta.index;\n        }\n    }\n    return null;\n}\nfunction updateStacks(controller, parsed) {\n    const { chart , _cachedMeta: meta  } = controller;\n    const stacks = chart._stacks || (chart._stacks = {});\n    const { iScale , vScale , index: datasetIndex  } = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const key = getStackKey(iScale, vScale, meta);\n    const ilen = parsed.length;\n    let stack;\n    for(let i = 0; i < ilen; ++i){\n        const item = parsed[i];\n        const { [iAxis]: index , [vAxis]: value  } = item;\n        const itemStacks = item._stacks || (item._stacks = {});\n        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n        stack[datasetIndex] = value;\n        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n        const visualValues = stack._visualValues || (stack._visualValues = {});\n        visualValues[datasetIndex] = value;\n    }\n}\nfunction getFirstScaleId(chart, axis) {\n    const scales = chart.scales;\n    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n    return createContext(parent, {\n        active: false,\n        dataset: undefined,\n        datasetIndex: index,\n        index,\n        mode: 'default',\n        type: 'dataset'\n    });\n}\nfunction createDataContext(parent, index, element) {\n    return createContext(parent, {\n        active: false,\n        dataIndex: index,\n        parsed: undefined,\n        raw: undefined,\n        element,\n        index,\n        mode: 'default',\n        type: 'data'\n    });\n}\nfunction clearStacks(meta, items) {\n    const datasetIndex = meta.controller.index;\n    const axis = meta.vScale && meta.vScale.axis;\n    if (!axis) {\n        return;\n    }\n    items = items || meta._parsed;\n    for (const parsed of items){\n        const stacks = parsed._stacks;\n        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n            return;\n        }\n        delete stacks[axis][datasetIndex];\n        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n            delete stacks[axis]._visualValues[datasetIndex];\n        }\n    }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n        keys: getSortedDatasetIndices(chart, true),\n        values: null\n    };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n        this.chart = chart;\n        this._ctx = chart.ctx;\n        this.index = datasetIndex;\n        this._cachedDataOpts = {};\n        this._cachedMeta = this.getMeta();\n        this._type = this._cachedMeta.type;\n        this.options = undefined;\n         this._parsing = false;\n        this._data = undefined;\n        this._objectData = undefined;\n        this._sharedOptions = undefined;\n        this._drawStart = undefined;\n        this._drawCount = undefined;\n        this.enableOptionSharing = false;\n        this.supportsDecimation = false;\n        this.$context = undefined;\n        this._syncList = [];\n        this.datasetElementType = new.target.datasetElementType;\n        this.dataElementType = new.target.dataElementType;\n        this.initialize();\n    }\n    initialize() {\n        const meta = this._cachedMeta;\n        this.configure();\n        this.linkScales();\n        meta._stacked = isStacked(meta.vScale, meta);\n        this.addElements();\n        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n            console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n        }\n    }\n    updateIndex(datasetIndex) {\n        if (this.index !== datasetIndex) {\n            clearStacks(this._cachedMeta);\n        }\n        this.index = datasetIndex;\n    }\n    linkScales() {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n        const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n        const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n        const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n        const indexAxis = meta.indexAxis;\n        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n        meta.xScale = this.getScaleForId(xid);\n        meta.yScale = this.getScaleForId(yid);\n        meta.rScale = this.getScaleForId(rid);\n        meta.iScale = this.getScaleForId(iid);\n        meta.vScale = this.getScaleForId(vid);\n    }\n    getDataset() {\n        return this.chart.data.datasets[this.index];\n    }\n    getMeta() {\n        return this.chart.getDatasetMeta(this.index);\n    }\n getScaleForId(scaleID) {\n        return this.chart.scales[scaleID];\n    }\n _getOtherScale(scale) {\n        const meta = this._cachedMeta;\n        return scale === meta.iScale ? meta.vScale : meta.iScale;\n    }\n    reset() {\n        this._update('reset');\n    }\n _destroy() {\n        const meta = this._cachedMeta;\n        if (this._data) {\n            unlistenArrayEvents(this._data, this);\n        }\n        if (meta._stacked) {\n            clearStacks(meta);\n        }\n    }\n _dataCheck() {\n        const dataset = this.getDataset();\n        const data = dataset.data || (dataset.data = []);\n        const _data = this._data;\n        if (isObject(data)) {\n            const meta = this._cachedMeta;\n            this._data = convertObjectDataToArray(data, meta);\n        } else if (_data !== data) {\n            if (_data) {\n                unlistenArrayEvents(_data, this);\n                const meta = this._cachedMeta;\n                clearStacks(meta);\n                meta._parsed = [];\n            }\n            if (data && Object.isExtensible(data)) {\n                listenArrayEvents(data, this);\n            }\n            this._syncList = [];\n            this._data = data;\n        }\n    }\n    addElements() {\n        const meta = this._cachedMeta;\n        this._dataCheck();\n        if (this.datasetElementType) {\n            meta.dataset = new this.datasetElementType();\n        }\n    }\n    buildOrUpdateElements(resetNewElements) {\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        let stackChanged = false;\n        this._dataCheck();\n        const oldStacked = meta._stacked;\n        meta._stacked = isStacked(meta.vScale, meta);\n        if (meta.stack !== dataset.stack) {\n            stackChanged = true;\n            clearStacks(meta);\n            meta.stack = dataset.stack;\n        }\n        this._resyncElements(resetNewElements);\n        if (stackChanged || oldStacked !== meta._stacked) {\n            updateStacks(this, meta._parsed);\n            meta._stacked = isStacked(meta.vScale, meta);\n        }\n    }\n configure() {\n        const config = this.chart.config;\n        const scopeKeys = config.datasetScopeKeys(this._type);\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n        this.options = config.createResolver(scopes, this.getContext());\n        this._parsing = this.options.parsing;\n        this._cachedDataOpts = {};\n    }\n parse(start, count) {\n        const { _cachedMeta: meta , _data: data  } = this;\n        const { iScale , _stacked  } = meta;\n        const iAxis = iScale.axis;\n        let sorted = start === 0 && count === data.length ? true : meta._sorted;\n        let prev = start > 0 && meta._parsed[start - 1];\n        let i, cur, parsed;\n        if (this._parsing === false) {\n            meta._parsed = data;\n            meta._sorted = true;\n            parsed = data;\n        } else {\n            if (isArray(data[start])) {\n                parsed = this.parseArrayData(meta, data, start, count);\n            } else if (isObject(data[start])) {\n                parsed = this.parseObjectData(meta, data, start, count);\n            } else {\n                parsed = this.parsePrimitiveData(meta, data, start, count);\n            }\n            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n            for(i = 0; i < count; ++i){\n                meta._parsed[i + start] = cur = parsed[i];\n                if (sorted) {\n                    if (isNotInOrderComparedToPrev()) {\n                        sorted = false;\n                    }\n                    prev = cur;\n                }\n            }\n            meta._sorted = sorted;\n        }\n        if (_stacked) {\n            updateStacks(this, parsed);\n        }\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const labels = iScale.getLabels();\n        const singleScale = iScale === vScale;\n        const parsed = new Array(count);\n        let i, ilen, index;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            parsed[i] = {\n                [iAxis]: singleScale || iScale.parse(labels[index], index),\n                [vAxis]: vScale.parse(data[index], index)\n            };\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(item[0], index),\n                y: yScale.parse(item[1], index)\n            };\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n                y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n            };\n        }\n        return parsed;\n    }\n getParsed(index) {\n        return this._cachedMeta._parsed[index];\n    }\n getDataElement(index) {\n        return this._cachedMeta.data[index];\n    }\n applyStack(scale, parsed, mode) {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const value = parsed[scale.axis];\n        const stack = {\n            keys: getSortedDatasetIndices(chart, true),\n            values: parsed._stacks[scale.axis]._visualValues\n        };\n        return applyStack(stack, value, meta.index, {\n            mode\n        });\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        const parsedValue = parsed[scale.axis];\n        let value = parsedValue === null ? NaN : parsedValue;\n        const values = stack && parsed._stacks[scale.axis];\n        if (stack && values) {\n            stack.values = values;\n            value = applyStack(stack, parsedValue, this._cachedMeta.index);\n        }\n        range.min = Math.min(range.min, value);\n        range.max = Math.max(range.max, value);\n    }\n getMinMax(scale, canStack) {\n        const meta = this._cachedMeta;\n        const _parsed = meta._parsed;\n        const sorted = meta._sorted && scale === meta.iScale;\n        const ilen = _parsed.length;\n        const otherScale = this._getOtherScale(scale);\n        const stack = createStack(canStack, meta, this.chart);\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);\n        let i, parsed;\n        function _skip() {\n            parsed = _parsed[i];\n            const otherValue = parsed[otherScale.axis];\n            return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n        }\n        for(i = 0; i < ilen; ++i){\n            if (_skip()) {\n                continue;\n            }\n            this.updateRangeFromParsed(range, scale, parsed, stack);\n            if (sorted) {\n                break;\n            }\n        }\n        if (sorted) {\n            for(i = ilen - 1; i >= 0; --i){\n                if (_skip()) {\n                    continue;\n                }\n                this.updateRangeFromParsed(range, scale, parsed, stack);\n                break;\n            }\n        }\n        return range;\n    }\n    getAllParsedValues(scale) {\n        const parsed = this._cachedMeta._parsed;\n        const values = [];\n        let i, ilen, value;\n        for(i = 0, ilen = parsed.length; i < ilen; ++i){\n            value = parsed[i][scale.axis];\n            if (isNumberFinite(value)) {\n                values.push(value);\n            }\n        }\n        return values;\n    }\n getMaxOverflow() {\n        return false;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const vScale = meta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n        };\n    }\n _update(mode) {\n        const meta = this._cachedMeta;\n        this.update(mode || 'default');\n        meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n    }\n update(mode) {}\n    draw() {\n        const ctx = this._ctx;\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const elements = meta.data || [];\n        const area = chart.chartArea;\n        const active = [];\n        const start = this._drawStart || 0;\n        const count = this._drawCount || elements.length - start;\n        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n        let i;\n        if (meta.dataset) {\n            meta.dataset.draw(ctx, area, start, count);\n        }\n        for(i = start; i < start + count; ++i){\n            const element = elements[i];\n            if (element.hidden) {\n                continue;\n            }\n            if (element.active && drawActiveElementsOnTop) {\n                active.push(element);\n            } else {\n                element.draw(ctx, area);\n            }\n        }\n        for(i = 0; i < active.length; ++i){\n            active[i].draw(ctx, area);\n        }\n    }\n getStyle(index, active) {\n        const mode = active ? 'active' : 'default';\n        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n    }\n getContext(index, active, mode) {\n        const dataset = this.getDataset();\n        let context;\n        if (index >= 0 && index < this._cachedMeta.data.length) {\n            const element = this._cachedMeta.data[index];\n            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n            context.parsed = this.getParsed(index);\n            context.raw = dataset.data[index];\n            context.index = context.dataIndex = index;\n        } else {\n            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n            context.dataset = dataset;\n            context.index = context.datasetIndex = this.index;\n        }\n        context.active = !!active;\n        context.mode = mode;\n        return context;\n    }\n resolveDatasetElementOptions(mode) {\n        return this._resolveElementOptions(this.datasetElementType.id, mode);\n    }\n resolveDataElementOptions(index, mode) {\n        return this._resolveElementOptions(this.dataElementType.id, mode, index);\n    }\n _resolveElementOptions(elementType, mode = 'default', index) {\n        const active = mode === 'active';\n        const cache = this._cachedDataOpts;\n        const cacheKey = elementType + '-' + mode;\n        const cached = cache[cacheKey];\n        const sharing = this.enableOptionSharing && defined(index);\n        if (cached) {\n            return cloneIfNotShared(cached, sharing);\n        }\n        const config = this.chart.config;\n        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n        const prefixes = active ? [\n            `${elementType}Hover`,\n            'hover',\n            elementType,\n            ''\n        ] : [\n            elementType,\n            ''\n        ];\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n        const names = Object.keys(defaults.elements[elementType]);\n        const context = ()=>this.getContext(index, active, mode);\n        const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n        if (values.$shared) {\n            values.$shared = sharing;\n            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n        }\n        return values;\n    }\n _resolveAnimations(index, transition, active) {\n        const chart = this.chart;\n        const cache = this._cachedDataOpts;\n        const cacheKey = `animation-${transition}`;\n        const cached = cache[cacheKey];\n        if (cached) {\n            return cached;\n        }\n        let options;\n        if (chart.options.animation !== false) {\n            const config = this.chart.config;\n            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n            options = config.createResolver(scopes, this.getContext(index, active, transition));\n        }\n        const animations = new Animations(chart, options && options.animations);\n        if (options && options._cacheable) {\n            cache[cacheKey] = Object.freeze(animations);\n        }\n        return animations;\n    }\n getSharedOptions(options) {\n        if (!options.$shared) {\n            return;\n        }\n        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n    }\n includeOptions(mode, sharedOptions) {\n        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n    }\n _getSharedOptions(start, mode) {\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const previouslySharedOptions = this._sharedOptions;\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n        return {\n            sharedOptions,\n            includeOptions\n        };\n    }\n updateElement(element, index, properties, mode) {\n        if (isDirectUpdateMode(mode)) {\n            Object.assign(element, properties);\n        } else {\n            this._resolveAnimations(index, mode).update(element, properties);\n        }\n    }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n        if (sharedOptions && !isDirectUpdateMode(mode)) {\n            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n        }\n    }\n _setStyle(element, index, mode, active) {\n        element.active = active;\n        const options = this.getStyle(index, active);\n        this._resolveAnimations(index, mode, active).update(element, {\n            options: !active && this.getSharedOptions(options) || options\n        });\n    }\n    removeHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', false);\n    }\n    setHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', true);\n    }\n _removeDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', false);\n        }\n    }\n _setDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', true);\n        }\n    }\n _resyncElements(resetNewElements) {\n        const data = this._data;\n        const elements = this._cachedMeta.data;\n        for (const [method, arg1, arg2] of this._syncList){\n            this[method](arg1, arg2);\n        }\n        this._syncList = [];\n        const numMeta = elements.length;\n        const numData = data.length;\n        const count = Math.min(numData, numMeta);\n        if (count) {\n            this.parse(0, count);\n        }\n        if (numData > numMeta) {\n            this._insertElements(numMeta, numData - numMeta, resetNewElements);\n        } else if (numData < numMeta) {\n            this._removeElements(numData, numMeta - numData);\n        }\n    }\n _insertElements(start, count, resetNewElements = true) {\n        const meta = this._cachedMeta;\n        const data = meta.data;\n        const end = start + count;\n        let i;\n        const move = (arr)=>{\n            arr.length += count;\n            for(i = arr.length - 1; i >= end; i--){\n                arr[i] = arr[i - count];\n            }\n        };\n        move(data);\n        for(i = start; i < end; ++i){\n            data[i] = new this.dataElementType();\n        }\n        if (this._parsing) {\n            move(meta._parsed);\n        }\n        this.parse(start, count);\n        if (resetNewElements) {\n            this.updateElements(data, start, count, 'reset');\n        }\n    }\n    updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n        const meta = this._cachedMeta;\n        if (this._parsing) {\n            const removed = meta._parsed.splice(start, count);\n            if (meta._stacked) {\n                clearStacks(meta, removed);\n            }\n        }\n        meta.data.splice(start, count);\n    }\n _sync(args) {\n        if (this._parsing) {\n            this._syncList.push(args);\n        } else {\n            const [method, arg1, arg2] = args;\n            this[method](arg1, arg2);\n        }\n        this.chart._dataChanges.push([\n            this.index,\n            ...args\n        ]);\n    }\n    _onDataPush() {\n        const count = arguments.length;\n        this._sync([\n            '_insertElements',\n            this.getDataset().data.length - count,\n            count\n        ]);\n    }\n    _onDataPop() {\n        this._sync([\n            '_removeElements',\n            this._cachedMeta.data.length - 1,\n            1\n        ]);\n    }\n    _onDataShift() {\n        this._sync([\n            '_removeElements',\n            0,\n            1\n        ]);\n    }\n    _onDataSplice(start, count) {\n        if (count) {\n            this._sync([\n                '_removeElements',\n                start,\n                count\n            ]);\n        }\n        const newCount = arguments.length - 2;\n        if (newCount) {\n            this._sync([\n                '_insertElements',\n                start,\n                newCount\n            ]);\n        }\n    }\n    _onDataUnshift() {\n        this._sync([\n            '_insertElements',\n            0,\n            arguments.length\n        ]);\n    }\n}\n\nfunction getAllScaleValues(scale, type) {\n    if (!scale._cache.$bar) {\n        const visibleMetas = scale.getMatchingVisibleMetas(type);\n        let values = [];\n        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n        }\n        scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n    }\n    return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n    const scale = meta.iScale;\n    const values = getAllScaleValues(scale, meta.type);\n    let min = scale._length;\n    let i, ilen, curr, prev;\n    const updateMinAndPrev = ()=>{\n        if (curr === 32767 || curr === -32768) {\n            return;\n        }\n        if (defined(prev)) {\n            min = Math.min(min, Math.abs(curr - prev) || min);\n        }\n        prev = curr;\n    };\n    for(i = 0, ilen = values.length; i < ilen; ++i){\n        curr = scale.getPixelForValue(values[i]);\n        updateMinAndPrev();\n    }\n    prev = undefined;\n    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n        curr = scale.getPixelForTick(i);\n        updateMinAndPrev();\n    }\n    return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n    const thickness = options.barThickness;\n    let size, ratio;\n    if (isNullOrUndef(thickness)) {\n        size = ruler.min * options.categoryPercentage;\n        ratio = options.barPercentage;\n    } else {\n        size = thickness * stackCount;\n        ratio = 1;\n    }\n    return {\n        chunk: size / stackCount,\n        ratio,\n        start: ruler.pixels[index] - size / 2\n    };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n    const pixels = ruler.pixels;\n    const curr = pixels[index];\n    let prev = index > 0 ? pixels[index - 1] : null;\n    let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    const percent = options.categoryPercentage;\n    if (prev === null) {\n        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n    if (next === null) {\n        next = curr + curr - prev;\n    }\n    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    const size = Math.abs(next - prev) / 2 * percent;\n    return {\n        chunk: size / stackCount,\n        ratio: options.barPercentage,\n        start\n    };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n    const startValue = vScale.parse(entry[0], i);\n    const endValue = vScale.parse(entry[1], i);\n    const min = Math.min(startValue, endValue);\n    const max = Math.max(startValue, endValue);\n    let barStart = min;\n    let barEnd = max;\n    if (Math.abs(min) > Math.abs(max)) {\n        barStart = max;\n        barEnd = min;\n    }\n    item[vScale.axis] = barEnd;\n    item._custom = {\n        barStart,\n        barEnd,\n        start: startValue,\n        end: endValue,\n        min,\n        max\n    };\n}\nfunction parseValue(entry, item, vScale, i) {\n    if (isArray(entry)) {\n        parseFloatBar(entry, item, vScale, i);\n    } else {\n        item[vScale.axis] = vScale.parse(entry, i);\n    }\n    return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = [];\n    let i, ilen, item, entry;\n    for(i = start, ilen = start + count; i < ilen; ++i){\n        entry = data[i];\n        item = {};\n        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n        parsed.push(parseValue(entry, item, vScale, i));\n    }\n    return parsed;\n}\nfunction isFloatBar(custom) {\n    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n    if (size !== 0) {\n        return sign(size);\n    }\n    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n    let reverse, start, end, top, bottom;\n    if (properties.horizontal) {\n        reverse = properties.base > properties.x;\n        start = 'left';\n        end = 'right';\n    } else {\n        reverse = properties.base < properties.y;\n        start = 'bottom';\n        end = 'top';\n    }\n    if (reverse) {\n        top = 'end';\n        bottom = 'start';\n    } else {\n        top = 'start';\n        bottom = 'end';\n    }\n    return {\n        start,\n        end,\n        reverse,\n        top,\n        bottom\n    };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n    let edge = options.borderSkipped;\n    const res = {};\n    if (!edge) {\n        properties.borderSkipped = res;\n        return;\n    }\n    if (edge === true) {\n        properties.borderSkipped = {\n            top: true,\n            right: true,\n            bottom: true,\n            left: true\n        };\n        return;\n    }\n    const { start , end , reverse , top , bottom  } = borderProps(properties);\n    if (edge === 'middle' && stack) {\n        properties.enableBorderRadius = true;\n        if ((stack._top || 0) === index) {\n            edge = top;\n        } else if ((stack._bottom || 0) === index) {\n            edge = bottom;\n        } else {\n            res[parseEdge(bottom, start, end, reverse)] = true;\n            edge = top;\n        }\n    }\n    res[parseEdge(edge, start, end, reverse)] = true;\n    properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n    if (reverse) {\n        edge = swap(edge, a, b);\n        edge = startEnd(edge, b, a);\n    } else {\n        edge = startEnd(edge, a, b);\n    }\n    return edge;\n}\nfunction swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n    return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount  }, ratio) {\n    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n    static id = 'bar';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'bar',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        grouped: true,\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'base',\n                    'width',\n                    'height'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category',\n                offset: true,\n                grid: {\n                    offset: true\n                }\n            },\n            _value_: {\n                type: 'linear',\n                beginAtZero: true\n            }\n        }\n    };\n parsePrimitiveData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseArrayData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseObjectData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const parsed = [];\n        let i, ilen, item, obj;\n        for(i = start, ilen = start + count; i < ilen; ++i){\n            obj = data[i];\n            item = {};\n            item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n            parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n        }\n        return parsed;\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        super.updateRangeFromParsed(range, scale, parsed, stack);\n        const custom = parsed._custom;\n        if (custom && scale === this._cachedMeta.vScale) {\n            range.min = Math.min(range.min, custom.min);\n            range.max = Math.max(range.max, custom.max);\n        }\n    }\n getMaxOverflow() {\n        return 0;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const { iScale , vScale  } = meta;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n        return {\n            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n            value\n        };\n    }\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n        const meta = this._cachedMeta;\n        meta.stack = this.getDataset().stack;\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        this.updateElements(meta.data, 0, meta.data.length, mode);\n    }\n    updateElements(bars, start, count, mode) {\n        const reset = mode === 'reset';\n        const { index , _cachedMeta: { vScale  }  } = this;\n        const base = vScale.getBasePixel();\n        const horizontal = vScale.isHorizontal();\n        const ruler = this._getRuler();\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        for(let i = start; i < start + count; i++){\n            const parsed = this.getParsed(i);\n            const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n                base,\n                head: base\n            } : this._calculateBarValuePixels(i);\n            const ipixels = this._calculateBarIndexPixels(i, ruler);\n            const stack = (parsed._stacks || {})[vScale.axis];\n            const properties = {\n                horizontal,\n                base: vpixels.base,\n                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n                x: horizontal ? vpixels.head : ipixels.center,\n                y: horizontal ? ipixels.center : vpixels.head,\n                height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n                width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n            }\n            const options = properties.options || bars[i].options;\n            setBorderSkipped(properties, options, stack, index);\n            setInflateAmount(properties, options, ruler.ratio);\n            this.updateElement(bars[i], i, properties, mode);\n        }\n    }\n _getStacks(last, dataIndex) {\n        const { iScale  } = this._cachedMeta;\n        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n        const stacked = iScale.options.stacked;\n        const stacks = [];\n        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n        const iScaleValue = currentParsed && currentParsed[iScale.axis];\n        const skipNull = (meta)=>{\n            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n            const val = parsed && parsed[meta.vScale.axis];\n            if (isNullOrUndef(val) || isNaN(val)) {\n                return true;\n            }\n        };\n        for (const meta of metasets){\n            if (dataIndex !== undefined && skipNull(meta)) {\n                continue;\n            }\n            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n                stacks.push(meta.stack);\n            }\n            if (meta.index === last) {\n                break;\n            }\n        }\n        if (!stacks.length) {\n            stacks.push(undefined);\n        }\n        return stacks;\n    }\n _getStackCount(index) {\n        return this._getStacks(undefined, index).length;\n    }\n    _getAxisCount() {\n        return this._getAxis().length;\n    }\n    getFirstScaleIdForIndexAxis() {\n        const scales = this.chart.scales;\n        const indexScaleId = this.chart.options.indexAxis;\n        return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();\n    }\n    _getAxis() {\n        const axis = {};\n        const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n        for (const dataset of this.chart.data.datasets){\n            axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n        }\n        return Object.keys(axis);\n    }\n _getStackIndex(datasetIndex, name, dataIndex) {\n        const stacks = this._getStacks(datasetIndex, dataIndex);\n        const index = name !== undefined ? stacks.indexOf(name) : -1;\n        return index === -1 ? stacks.length - 1 : index;\n    }\n _getRuler() {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const pixels = [];\n        let i, ilen;\n        for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n        }\n        const barThickness = opts.barThickness;\n        const min = barThickness || computeMinSampleSize(meta);\n        return {\n            min,\n            pixels,\n            start: iScale._startPixel,\n            end: iScale._endPixel,\n            stackCount: this._getStackCount(),\n            scale: iScale,\n            grouped: opts.grouped,\n            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n        };\n    }\n _calculateBarValuePixels(index) {\n        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;\n        const actualBase = baseValue || 0;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const floating = isFloatBar(custom);\n        let value = parsed[vScale.axis];\n        let start = 0;\n        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n        let head, size;\n        if (length !== value) {\n            start = length - value;\n            length = value;\n        }\n        if (floating) {\n            value = custom.barStart;\n            length = custom.barEnd - custom.barStart;\n            if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n                start = 0;\n            }\n            start += value;\n        }\n        const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n        let base = vScale.getPixelForValue(startValue);\n        if (this.chart.getDataVisibility(index)) {\n            head = vScale.getPixelForValue(start + length);\n        } else {\n            head = base;\n        }\n        size = head - base;\n        if (Math.abs(size) < minBarLength) {\n            size = barSign(size, vScale, actualBase) * minBarLength;\n            if (value === actualBase) {\n                base -= size / 2;\n            }\n            const startPixel = vScale.getPixelForDecimal(0);\n            const endPixel = vScale.getPixelForDecimal(1);\n            const min = Math.min(startPixel, endPixel);\n            const max = Math.max(startPixel, endPixel);\n            base = Math.max(Math.min(base, max), min);\n            head = base + size;\n            if (_stacked && !floating) {\n                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n            }\n        }\n        if (base === vScale.getPixelForValue(actualBase)) {\n            const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n            base += halfGrid;\n            size -= halfGrid;\n        }\n        return {\n            size,\n            base,\n            head,\n            center: head + size / 2\n        };\n    }\n _calculateBarIndexPixels(index, ruler) {\n        const scale = ruler.scale;\n        const options = this.options;\n        const skipNull = options.skipNull;\n        const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n        let center, size;\n        const axisCount = this._getAxisCount();\n        if (ruler.grouped) {\n            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n            const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n            const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n            center = range.start + range.chunk * stackIndex + range.chunk / 2;\n            size = Math.min(maxBarThickness, range.chunk * range.ratio);\n        } else {\n            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n        }\n        return {\n            base: center - size / 2,\n            head: center + size / 2,\n            center,\n            size\n        };\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        const vScale = meta.vScale;\n        const rects = meta.data;\n        const ilen = rects.length;\n        let i = 0;\n        for(; i < ilen; ++i){\n            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n                rects[i].draw(this._ctx);\n            }\n        }\n    }\n}\n\nclass BubbleController extends DatasetController {\n    static id = 'bubble';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'borderWidth',\n                    'radius'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const parsed = super.parsePrimitiveData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const parsed = super.parseArrayData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const parsed = super.parseObjectData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n getMaxOverflow() {\n        const data = this._cachedMeta.data;\n        let max = 0;\n        for(let i = data.length - 1; i >= 0; --i){\n            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n        }\n        return max > 0 && max;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        const r = parsed._custom;\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n        };\n    }\n    update(mode) {\n        const points = this._cachedMeta.data;\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const parsed = !reset && this.getParsed(i);\n            const properties = {};\n            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel);\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n                if (reset) {\n                    properties.options.radius = 0;\n                }\n            }\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n resolveDataElementOptions(index, mode) {\n        const parsed = this.getParsed(index);\n        let values = super.resolveDataElementOptions(index, mode);\n        if (values.$shared) {\n            values = Object.assign({}, values, {\n                $shared: false\n            });\n        }\n        const radius = values.radius;\n        if (mode !== 'active') {\n            values.radius = 0;\n        }\n        values.radius += valueOrDefault(parsed && parsed._custom, radius);\n        return values;\n    }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n    let ratioX = 1;\n    let ratioY = 1;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (circumference < TAU) {\n        const startAngle = rotation;\n        const endAngle = startAngle + circumference;\n        const startX = Math.cos(startAngle);\n        const startY = Math.sin(startAngle);\n        const endX = Math.cos(endAngle);\n        const endY = Math.sin(endAngle);\n        const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n        const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n        const maxX = calcMax(0, startX, endX);\n        const maxY = calcMax(HALF_PI, startY, endY);\n        const minX = calcMin(PI, startX, endX);\n        const minY = calcMin(PI + HALF_PI, startY, endY);\n        ratioX = (maxX - minX) / 2;\n        ratioY = (maxY - minY) / 2;\n        offsetX = -(maxX + minX) / 2;\n        offsetY = -(maxY + minY) / 2;\n    }\n    return {\n        ratioX,\n        ratioY,\n        offsetX,\n        offsetY\n    };\n}\nclass DoughnutController extends DatasetController {\n    static id = 'doughnut';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: false\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'circumference',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius',\n                    'startAngle',\n                    'x',\n                    'y',\n                    'offset',\n                    'borderWidth',\n                    'spacing'\n                ]\n            }\n        },\n        cutout: '50%',\n        rotation: 0,\n        circumference: 360,\n        radius: '100%',\n        spacing: 0,\n        indexAxis: 'r'\n    };\n    static descriptors = {\n        _scriptable: (name)=>name !== 'spacing',\n        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        const { labels: { pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                        if (data.labels.length && data.datasets.length) {\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    fontColor: color,\n                                    hidden: !chart.getDataVisibility(i),\n                                    lineDash: style.borderDash,\n                                    lineDashOffset: style.borderDashOffset,\n                                    lineJoin: style.borderJoinStyle,\n                                    lineWidth: style.borderWidth,\n                                    strokeStyle: style.borderColor,\n                                    textAlign: textAlign,\n                                    pointStyle: pointStyle,\n                                    borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.enableOptionSharing = true;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.offsetX = undefined;\n        this.offsetY = undefined;\n    }\n    linkScales() {}\n parse(start, count) {\n        const data = this.getDataset().data;\n        const meta = this._cachedMeta;\n        if (this._parsing === false) {\n            meta._parsed = data;\n        } else {\n            let getter = (i)=>+data[i];\n            if (isObject(data[start])) {\n                const { key ='value'  } = this._parsing;\n                getter = (i)=>+resolveObjectKey(data[i], key);\n            }\n            let i, ilen;\n            for(i = start, ilen = start + count; i < ilen; ++i){\n                meta._parsed[i] = getter(i);\n            }\n        }\n    }\n _getRotation() {\n        return toRadians(this.options.rotation - 90);\n    }\n _getCircumference() {\n        return toRadians(this.options.circumference);\n    }\n _getRotationExtents() {\n        let min = TAU;\n        let max = -TAU;\n        for(let i = 0; i < this.chart.data.datasets.length; ++i){\n            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n                const controller = this.chart.getDatasetMeta(i).controller;\n                const rotation = controller._getRotation();\n                const circumference = controller._getCircumference();\n                min = Math.min(min, rotation);\n                max = Math.max(max, rotation + circumference);\n            }\n        }\n        return {\n            rotation: min,\n            circumference: max - min\n        };\n    }\n update(mode) {\n        const chart = this.chart;\n        const { chartArea  } = chart;\n        const meta = this._cachedMeta;\n        const arcs = meta.data;\n        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n        const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n        const chartWeight = this._getRingWeight(this.index);\n        const { circumference , rotation  } = this._getRotationExtents();\n        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);\n        const maxWidth = (chartArea.width - spacing) / ratioX;\n        const maxHeight = (chartArea.height - spacing) / ratioY;\n        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n        const outerRadius = toDimension(this.options.radius, maxRadius);\n        const innerRadius = Math.max(outerRadius * cutout, 0);\n        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n        this.offsetX = offsetX * outerRadius;\n        this.offsetY = offsetY * outerRadius;\n        meta.total = this.calculateTotal();\n        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n _circumference(i, reset) {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const circumference = this._getCircumference();\n        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n            return 0;\n        }\n        return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const centerX = (chartArea.left + chartArea.right) / 2;\n        const centerY = (chartArea.top + chartArea.bottom) / 2;\n        const animateScale = reset && animationOpts.animateScale;\n        const innerRadius = animateScale ? 0 : this.innerRadius;\n        const outerRadius = animateScale ? 0 : this.outerRadius;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        let startAngle = this._getRotation();\n        let i;\n        for(i = 0; i < start; ++i){\n            startAngle += this._circumference(i, reset);\n        }\n        for(i = start; i < start + count; ++i){\n            const circumference = this._circumference(i, reset);\n            const arc = arcs[i];\n            const properties = {\n                x: centerX + this.offsetX,\n                y: centerY + this.offsetY,\n                startAngle,\n                endAngle: startAngle + circumference,\n                circumference,\n                outerRadius,\n                innerRadius\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n            }\n            startAngle += circumference;\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    calculateTotal() {\n        const meta = this._cachedMeta;\n        const metaData = meta.data;\n        let total = 0;\n        let i;\n        for(i = 0; i < metaData.length; i++){\n            const value = meta._parsed[i];\n            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n                total += Math.abs(value);\n            }\n        }\n        return total;\n    }\n    calculateCircumference(value) {\n        const total = this._cachedMeta.total;\n        if (total > 0 && !isNaN(value)) {\n            return TAU * (Math.abs(value) / total);\n        }\n        return 0;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index], chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    getMaxBorderWidth(arcs) {\n        let max = 0;\n        const chart = this.chart;\n        let i, ilen, meta, controller, options;\n        if (!arcs) {\n            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n                if (chart.isDatasetVisible(i)) {\n                    meta = chart.getDatasetMeta(i);\n                    arcs = meta.data;\n                    controller = meta.controller;\n                    break;\n                }\n            }\n        }\n        if (!arcs) {\n            return 0;\n        }\n        for(i = 0, ilen = arcs.length; i < ilen; ++i){\n            options = controller.resolveDataElementOptions(i);\n            if (options.borderAlign !== 'inner') {\n                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n            }\n        }\n        return max;\n    }\n    getMaxOffset(arcs) {\n        let max = 0;\n        for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n            const options = this.resolveDataElementOptions(i);\n            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n        }\n        return max;\n    }\n _getRingWeightOffset(datasetIndex) {\n        let ringWeightOffset = 0;\n        for(let i = 0; i < datasetIndex; ++i){\n            if (this.chart.isDatasetVisible(i)) {\n                ringWeightOffset += this._getRingWeight(i);\n            }\n        }\n        return ringWeightOffset;\n    }\n _getRingWeight(datasetIndex) {\n        return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n    }\n _getVisibleDatasetWeightTotal() {\n        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n    }\n}\n\nclass LineController extends DatasetController {\n    static id = 'line';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        showLine: true,\n        spanGaps: false\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category'\n            },\n            _value_: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        this.supportsDecimation = true;\n        super.initialize();\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { dataset: line , data: points = [] , _dataset  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        line._chart = this.chart;\n        line._datasetIndex = this.index;\n        line._decimated = !!_dataset._decimated;\n        line.points = points;\n        const options = this.resolveDatasetElementOptions(mode);\n        if (!this.options.showLine) {\n            options.borderWidth = 0;\n        }\n        options.segment = this.options.segment;\n        this.updateElement(line, undefined, {\n            animated: !animationsDisabled,\n            options\n        }, mode);\n        this.updateElements(points, start, count, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        const end = start + count;\n        const pointsCount = points.length;\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = 0; i < pointsCount; ++i){\n            const point = points[i];\n            const properties = directUpdate ? point : {};\n            if (i < start || i >= end) {\n                properties.skip = true;\n                continue;\n            }\n            const parsed = this.getParsed(i);\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        const data = meta.data || [];\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n        super.draw();\n    }\n}\n\nclass PolarAreaController extends DatasetController {\n    static id = 'polarArea';\n static defaults = {\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: true\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'startAngle',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius'\n                ]\n            }\n        },\n        indexAxis: 'r',\n        startAngle: 0\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        },\n        scales: {\n            r: {\n                type: 'radialLinear',\n                angleLines: {\n                    display: false\n                },\n                beginAtZero: true,\n                grid: {\n                    circular: true\n                },\n                pointLabels: {\n                    display: false\n                },\n                startAngle: 0\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const arcs = this._cachedMeta.data;\n        this._updateRadius();\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n getMinMax() {\n        const meta = this._cachedMeta;\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        meta.data.forEach((element, index)=>{\n            const parsed = this.getParsed(index).r;\n            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n                if (parsed < range.min) {\n                    range.min = parsed;\n                }\n                if (parsed > range.max) {\n                    range.max = parsed;\n                }\n            }\n        });\n        return range;\n    }\n _updateRadius() {\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n        const outerRadius = Math.max(minSize / 2, 0);\n        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n        this.outerRadius = outerRadius - radiusLength * this.index;\n        this.innerRadius = this.outerRadius - radiusLength;\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const scale = this._cachedMeta.rScale;\n        const centerX = scale.xCenter;\n        const centerY = scale.yCenter;\n        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n        let angle = datasetStartAngle;\n        let i;\n        const defaultAngle = 360 / this.countVisibleElements();\n        for(i = 0; i < start; ++i){\n            angle += this._computeAngle(i, mode, defaultAngle);\n        }\n        for(i = start; i < start + count; i++){\n            const arc = arcs[i];\n            let startAngle = angle;\n            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n            angle = endAngle;\n            if (reset) {\n                if (animationOpts.animateScale) {\n                    outerRadius = 0;\n                }\n                if (animationOpts.animateRotate) {\n                    startAngle = endAngle = datasetStartAngle;\n                }\n            }\n            const properties = {\n                x: centerX,\n                y: centerY,\n                innerRadius: 0,\n                outerRadius,\n                startAngle,\n                endAngle,\n                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n            };\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    countVisibleElements() {\n        const meta = this._cachedMeta;\n        let count = 0;\n        meta.data.forEach((element, index)=>{\n            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n                count++;\n            }\n        });\n        return count;\n    }\n _computeAngle(index, mode, defaultAngle) {\n        return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n    }\n}\n\nclass PieController extends DoughnutController {\n    static id = 'pie';\n static defaults = {\n        cutout: 0,\n        rotation: 0,\n        circumference: 360,\n        radius: '100%'\n    };\n}\n\nclass RadarController extends DatasetController {\n    static id = 'radar';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        indexAxis: 'r',\n        showLine: true,\n        elements: {\n            line: {\n                fill: 'start'\n            }\n        }\n    };\n static overrides = {\n        aspectRatio: 1,\n        scales: {\n            r: {\n                type: 'radialLinear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const vScale = this._cachedMeta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: vScale.getLabels()[index],\n            value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const line = meta.dataset;\n        const points = meta.data || [];\n        const labels = meta.iScale.getLabels();\n        line.points = points;\n        if (mode !== 'resize') {\n            const options = this.resolveDatasetElementOptions(mode);\n            if (!this.options.showLine) {\n                options.borderWidth = 0;\n            }\n            const properties = {\n                _loop: true,\n                _fullLoop: labels.length === points.length,\n                options\n            };\n            this.updateElement(line, undefined, properties, mode);\n        }\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const scale = this._cachedMeta.rScale;\n        const reset = mode === 'reset';\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n            const x = reset ? scale.xCenter : pointPosition.x;\n            const y = reset ? scale.yCenter : pointPosition.y;\n            const properties = {\n                x,\n                y,\n                angle: pointPosition.angle,\n                skip: isNaN(x) || isNaN(y),\n                options\n            };\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n}\n\nclass ScatterController extends DatasetController {\n    static id = 'scatter';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        showLine: false,\n        fill: false\n    };\n static overrides = {\n        interaction: {\n            mode: 'point'\n        },\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + ')'\n        };\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { data: points = []  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        if (this.options.showLine) {\n            if (!this.datasetElementType) {\n                this.addElements();\n            }\n            const { dataset: line , _dataset  } = meta;\n            line._chart = this.chart;\n            line._datasetIndex = this.index;\n            line._decimated = !!_dataset._decimated;\n            line.points = points;\n            const options = this.resolveDatasetElementOptions(mode);\n            options.segment = this.options.segment;\n            this.updateElement(line, undefined, {\n                animated: !animationsDisabled,\n                options\n            }, mode);\n        } else if (this.datasetElementType) {\n            delete meta.dataset;\n            this.datasetElementType = false;\n        }\n        this.updateElements(points, start, count, mode);\n    }\n    addElements() {\n        const { showLine  } = this.options;\n        if (!this.datasetElementType && showLine) {\n            this.datasetElementType = this.chart.registry.getElement('line');\n        }\n        super.addElements();\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = start; i < start + count; ++i){\n            const point = points[i];\n            const parsed = this.getParsed(i);\n            const properties = directUpdate ? point : {};\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const data = meta.data || [];\n        if (!this.options.showLine) {\n            let max = 0;\n            for(let i = data.length - 1; i >= 0; --i){\n                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n            }\n            return max > 0 && max;\n        }\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n    /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */ static override(members) {\n        Object.assign(DateAdapterBase.prototype, members);\n    }\n    options;\n    constructor(options){\n        this.options = options || {};\n    }\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    init() {}\n    formats() {\n        return abstract();\n    }\n    parse() {\n        return abstract();\n    }\n    format() {\n        return abstract();\n    }\n    add() {\n        return abstract();\n    }\n    diff() {\n        return abstract();\n    }\n    startOf() {\n        return abstract();\n    }\n    endOf() {\n        return abstract();\n    }\n}\nvar adapters = {\n    _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n    const { controller , data , _sorted  } = metaset;\n    const iScale = controller._cachedMeta.iScale;\n    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n        const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n        if (!intersect) {\n            const result = lookupMethod(data, axis, value);\n            if (spanGaps) {\n                const { vScale  } = controller._cachedMeta;\n                const { _parsed  } = metaset;\n                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.lo -= Math.max(0, distanceToDefinedLo);\n                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.hi += Math.max(0, distanceToDefinedHi);\n            }\n            return result;\n        } else if (controller._sharedOptions) {\n            const el = data[0];\n            const range = typeof el.getRange === 'function' && el.getRange(axis);\n            if (range) {\n                const start = lookupMethod(data, axis, value - range);\n                const end = lookupMethod(data, axis, value + range);\n                return {\n                    lo: start.lo,\n                    hi: end.hi\n                };\n            }\n        }\n    }\n    return {\n        lo: 0,\n        hi: data.length - 1\n    };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const value = position[axis];\n    for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n        const { index , data  } = metasets[i];\n        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);\n        for(let j = lo; j <= hi; ++j){\n            const element = data[j];\n            if (!element.skip) {\n                handler(element, index, j);\n            }\n        }\n    }\n}\n function getDistanceMetricForAxis(axis) {\n    const useX = axis.indexOf('x') !== -1;\n    const useY = axis.indexOf('y') !== -1;\n    return function(pt1, pt2) {\n        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n    const items = [];\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return items;\n    }\n    const evaluationFunc = function(element, datasetIndex, index) {\n        if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n            return;\n        }\n        if (element.inRange(position.x, position.y, useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    };\n    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n    return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n    let items = [];\n    function evaluationFunc(element, datasetIndex, index) {\n        const { startAngle , endAngle  } = element.getProps([\n            'startAngle',\n            'endAngle'\n        ], useFinalPosition);\n        const { angle  } = getAngleFromPoint(element, {\n            x: position.x,\n            y: position.y\n        });\n        if (_angleBetween(angle, startAngle, endAngle)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    let items = [];\n    const distanceMetric = getDistanceMetricForAxis(axis);\n    let minDistance = Number.POSITIVE_INFINITY;\n    function evaluationFunc(element, datasetIndex, index) {\n        const inRange = element.inRange(position.x, position.y, useFinalPosition);\n        if (intersect && !inRange) {\n            return;\n        }\n        const center = element.getCenterPoint(useFinalPosition);\n        const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n        if (!pointInArea && !inRange) {\n            return;\n        }\n        const distance = distanceMetric(position, center);\n        if (distance < minDistance) {\n            items = [\n                {\n                    element,\n                    datasetIndex,\n                    index\n                }\n            ];\n            minDistance = distance;\n        } else if (distance === minDistance) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return [];\n    }\n    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n    const items = [];\n    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n    let intersectsItem = false;\n    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n        }\n    });\n    if (intersect && !intersectsItem) {\n        return [];\n    }\n    return items;\n}\n var Interaction = {\n    evaluateInteractionItems,\n    modes: {\n index (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'x';\n            const includeInvisible = options.includeInvisible || false;\n            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            const elements = [];\n            if (!items.length) {\n                return [];\n            }\n            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n                const index = items[0].index;\n                const element = meta.data[index];\n                if (element && !element.skip) {\n                    elements.push({\n                        element,\n                        datasetIndex: meta.index,\n                        index\n                    });\n                }\n            });\n            return elements;\n        },\n dataset (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            if (items.length > 0) {\n                const datasetIndex = items[0].datasetIndex;\n                const data = chart.getDatasetMeta(datasetIndex).data;\n                items = [];\n                for(let i = 0; i < data.length; ++i){\n                    items.push({\n                        element: data[i],\n                        datasetIndex,\n                        index: i\n                    });\n                }\n            }\n            return items;\n        },\n point (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n        },\n nearest (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n        },\n x (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n        },\n y (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n        }\n    }\n};\n\nconst STATIC_POSITIONS = [\n    'left',\n    'top',\n    'right',\n    'bottom'\n];\nfunction filterByPosition(array, position) {\n    return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n    return array.sort((a, b)=>{\n        const v0 = reverse ? b : a;\n        const v1 = reverse ? a : b;\n        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n    });\n}\nfunction wrapBoxes(boxes) {\n    const layoutBoxes = [];\n    let i, ilen, box, pos, stack, stackWeight;\n    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n        box = boxes[i];\n        ({ position: pos , options: { stack , stackWeight =1  }  } = box);\n        layoutBoxes.push({\n            index: i,\n            box,\n            pos,\n            horizontal: box.isHorizontal(),\n            weight: box.weight,\n            stack: stack && pos + stack,\n            stackWeight\n        });\n    }\n    return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n    const stacks = {};\n    for (const wrap of layouts){\n        const { stack , pos , stackWeight  } = wrap;\n        if (!stack || !STATIC_POSITIONS.includes(pos)) {\n            continue;\n        }\n        const _stack = stacks[stack] || (stacks[stack] = {\n            count: 0,\n            placed: 0,\n            weight: 0,\n            size: 0\n        });\n        _stack.count++;\n        _stack.weight += stackWeight;\n    }\n    return stacks;\n}\n function setLayoutDims(layouts, params) {\n    const stacks = buildStacks(layouts);\n    const { vBoxMaxWidth , hBoxMaxHeight  } = params;\n    let i, ilen, layout;\n    for(i = 0, ilen = layouts.length; i < ilen; ++i){\n        layout = layouts[i];\n        const { fullSize  } = layout.box;\n        const stack = stacks[layout.stack];\n        const factor = stack && layout.stackWeight / stack.weight;\n        if (layout.horizontal) {\n            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n            layout.height = hBoxMaxHeight;\n        } else {\n            layout.width = vBoxMaxWidth;\n            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n        }\n    }\n    return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n    const layoutBoxes = wrapBoxes(boxes);\n    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n    return {\n        fullSize,\n        leftAndTop: left.concat(top),\n        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n        chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n        vertical: left.concat(right).concat(centerVertical),\n        horizontal: top.concat(bottom).concat(centerHorizontal)\n    };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n    const { pos , box  } = layout;\n    const maxPadding = chartArea.maxPadding;\n    if (!isObject(pos)) {\n        if (layout.size) {\n            chartArea[pos] -= layout.size;\n        }\n        const stack = stacks[layout.stack] || {\n            size: 0,\n            count: 1\n        };\n        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n        layout.size = stack.size / stack.count;\n        chartArea[pos] += layout.size;\n    }\n    if (box.getPadding) {\n        updateMaxPadding(maxPadding, box.getPadding());\n    }\n    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n    const widthChanged = newWidth !== chartArea.w;\n    const heightChanged = newHeight !== chartArea.h;\n    chartArea.w = newWidth;\n    chartArea.h = newHeight;\n    return layout.horizontal ? {\n        same: widthChanged,\n        other: heightChanged\n    } : {\n        same: heightChanged,\n        other: widthChanged\n    };\n}\nfunction handleMaxPadding(chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function updatePos(pos) {\n        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n        chartArea[pos] += change;\n        return change;\n    }\n    chartArea.y += updatePos('top');\n    chartArea.x += updatePos('left');\n    updatePos('right');\n    updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function marginForPositions(positions) {\n        const margin = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0\n        };\n        positions.forEach((pos)=>{\n            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n        });\n        return margin;\n    }\n    return horizontal ? marginForPositions([\n        'left',\n        'right'\n    ]) : marginForPositions([\n        'top',\n        'bottom'\n    ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n    const refitBoxes = [];\n    let i, ilen, layout, box, refit, changed;\n    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n        layout = boxes[i];\n        box = layout.box;\n        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n        const { same , other  } = updateDims(chartArea, params, layout, stacks);\n        refit |= same && refitBoxes.length;\n        changed = changed || other;\n        if (!box.fullSize) {\n            refitBoxes.push(layout);\n        }\n    }\n    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n    box.top = top;\n    box.left = left;\n    box.right = left + width;\n    box.bottom = top + height;\n    box.width = width;\n    box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n    const userPadding = params.padding;\n    let { x , y  } = chartArea;\n    for (const layout of boxes){\n        const box = layout.box;\n        const stack = stacks[layout.stack] || {\n            count: 1,\n            placed: 0,\n            weight: 1\n        };\n        const weight = layout.stackWeight / stack.weight || 1;\n        if (layout.horizontal) {\n            const width = chartArea.w * weight;\n            const height = stack.size || box.height;\n            if (defined(stack.start)) {\n                y = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n            } else {\n                setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n            }\n            stack.start = y;\n            stack.placed += width;\n            y = box.bottom;\n        } else {\n            const height = chartArea.h * weight;\n            const width = stack.size || box.width;\n            if (defined(stack.start)) {\n                x = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n            } else {\n                setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n            }\n            stack.start = x;\n            stack.placed += height;\n            x = box.right;\n        }\n    }\n    chartArea.x = x;\n    chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n        if (!chart.boxes) {\n            chart.boxes = [];\n        }\n        item.fullSize = item.fullSize || false;\n        item.position = item.position || 'top';\n        item.weight = item.weight || 0;\n        item._layers = item._layers || function() {\n            return [\n                {\n                    z: 0,\n                    draw (chartArea) {\n                        item.draw(chartArea);\n                    }\n                }\n            ];\n        };\n        chart.boxes.push(item);\n    },\n removeBox (chart, layoutItem) {\n        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n        if (index !== -1) {\n            chart.boxes.splice(index, 1);\n        }\n    },\n configure (chart, item, options) {\n        item.fullSize = options.fullSize;\n        item.position = options.position;\n        item.weight = options.weight;\n    },\n update (chart, width, height, minPadding) {\n        if (!chart) {\n            return;\n        }\n        const padding = toPadding(chart.options.layout.padding);\n        const availableWidth = Math.max(width - padding.width, 0);\n        const availableHeight = Math.max(height - padding.height, 0);\n        const boxes = buildLayoutBoxes(chart.boxes);\n        const verticalBoxes = boxes.vertical;\n        const horizontalBoxes = boxes.horizontal;\n        each(chart.boxes, (box)=>{\n            if (typeof box.beforeLayout === 'function') {\n                box.beforeLayout();\n            }\n        });\n        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n        const params = Object.freeze({\n            outerWidth: width,\n            outerHeight: height,\n            padding,\n            availableWidth,\n            availableHeight,\n            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n            hBoxMaxHeight: availableHeight / 2\n        });\n        const maxPadding = Object.assign({}, padding);\n        updateMaxPadding(maxPadding, toPadding(minPadding));\n        const chartArea = Object.assign({\n            maxPadding,\n            w: availableWidth,\n            h: availableHeight,\n            x: padding.left,\n            y: padding.top\n        }, padding);\n        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n        fitBoxes(boxes.fullSize, chartArea, params, stacks);\n        fitBoxes(verticalBoxes, chartArea, params, stacks);\n        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n            fitBoxes(verticalBoxes, chartArea, params, stacks);\n        }\n        handleMaxPadding(chartArea);\n        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n        chartArea.x += chartArea.w;\n        chartArea.y += chartArea.h;\n        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n        chart.chartArea = {\n            left: chartArea.left,\n            top: chartArea.top,\n            right: chartArea.left + chartArea.w,\n            bottom: chartArea.top + chartArea.h,\n            height: chartArea.h,\n            width: chartArea.w\n        };\n        each(boxes.chartArea, (layout)=>{\n            const box = layout.box;\n            Object.assign(box, chart.chartArea);\n            box.update(chartArea.w, chartArea.h, {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0\n            });\n        });\n    }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n        return false;\n    }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n        return 1;\n    }\n getMaximumSize(element, width, height, aspectRatio) {\n        width = Math.max(0, width || element.width);\n        height = height || element.height;\n        return {\n            width,\n            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n        };\n    }\n isAttached(canvas) {\n        return true;\n    }\n updateConfig(config) {\n    }\n}\n\nclass BasicPlatform extends BasePlatform {\n    acquireContext(item) {\n        return item && item.getContext && item.getContext('2d') || null;\n    }\n    updateConfig(config) {\n        config.options.animation = false;\n    }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n    const style = canvas.style;\n    const renderHeight = canvas.getAttribute('height');\n    const renderWidth = canvas.getAttribute('width');\n    canvas[EXPANDO_KEY] = {\n        initial: {\n            height: renderHeight,\n            width: renderWidth,\n            style: {\n                display: style.display,\n                height: style.height,\n                width: style.width\n            }\n        }\n    };\n    style.display = style.display || 'block';\n    style.boxSizing = style.boxSizing || 'border-box';\n    if (isNullOrEmpty(renderWidth)) {\n        const displayWidth = readUsedSize(canvas, 'width');\n        if (displayWidth !== undefined) {\n            canvas.width = displayWidth;\n        }\n    }\n    if (isNullOrEmpty(renderHeight)) {\n        if (canvas.style.height === '') {\n            canvas.height = canvas.width / (aspectRatio || 2);\n        } else {\n            const displayHeight = readUsedSize(canvas, 'height');\n            if (displayHeight !== undefined) {\n                canvas.height = displayHeight;\n            }\n        }\n    }\n    return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n    passive: true\n} : false;\nfunction addListener(node, type, listener) {\n    if (node) {\n        node.addEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction removeListener(chart, type, listener) {\n    if (chart && chart.canvas) {\n        chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction fromNativeEvent(event, chart) {\n    const type = EVENT_TYPES[event.type] || event.type;\n    const { x , y  } = getRelativePosition(event, chart);\n    return {\n        type,\n        chart,\n        native: event,\n        x: x !== undefined ? x : null,\n        y: y !== undefined ? y : null\n    };\n}\nfunction nodeListContains(nodeList, canvas) {\n    for (const node of nodeList){\n        if (node === canvas || node.contains(canvas)) {\n            return true;\n        }\n    }\n}\nfunction createAttachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n    const dpr = window.devicePixelRatio;\n    if (dpr === oldDevicePixelRatio) {\n        return;\n    }\n    oldDevicePixelRatio = dpr;\n    drpListeningCharts.forEach((resize, chart)=>{\n        if (chart.currentDevicePixelRatio !== dpr) {\n            resize();\n        }\n    });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n    if (!drpListeningCharts.size) {\n        window.addEventListener('resize', onWindowResize);\n    }\n    drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n    drpListeningCharts.delete(chart);\n    if (!drpListeningCharts.size) {\n        window.removeEventListener('resize', onWindowResize);\n    }\n}\nfunction createResizeObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n        return;\n    }\n    const resize = throttled((width, height)=>{\n        const w = container.clientWidth;\n        listener(width, height);\n        if (w < container.clientWidth) {\n            listener();\n        }\n    }, window);\n    const observer = new ResizeObserver((entries)=>{\n        const entry = entries[0];\n        const width = entry.contentRect.width;\n        const height = entry.contentRect.height;\n        if (width === 0 && height === 0) {\n            return;\n        }\n        resize(width, height);\n    });\n    observer.observe(container);\n    listenDevicePixelRatioChanges(chart, resize);\n    return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n    if (observer) {\n        observer.disconnect();\n    }\n    if (type === 'resize') {\n        unlistenDevicePixelRatioChanges(chart);\n    }\n}\nfunction createProxyAndListen(chart, type, listener) {\n    const canvas = chart.canvas;\n    const proxy = throttled((event)=>{\n        if (chart.ctx !== null) {\n            listener(fromNativeEvent(event, chart));\n        }\n    }, chart);\n    addListener(canvas, type, proxy);\n    return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n        const context = canvas && canvas.getContext && canvas.getContext('2d');\n        if (context && context.canvas === canvas) {\n            initCanvas(canvas, aspectRatio);\n            return context;\n        }\n        return null;\n    }\n releaseContext(context) {\n        const canvas = context.canvas;\n        if (!canvas[EXPANDO_KEY]) {\n            return false;\n        }\n        const initial = canvas[EXPANDO_KEY].initial;\n        [\n            'height',\n            'width'\n        ].forEach((prop)=>{\n            const value = initial[prop];\n            if (isNullOrUndef(value)) {\n                canvas.removeAttribute(prop);\n            } else {\n                canvas.setAttribute(prop, value);\n            }\n        });\n        const style = initial.style || {};\n        Object.keys(style).forEach((key)=>{\n            canvas.style[key] = style[key];\n        });\n        canvas.width = canvas.width;\n        delete canvas[EXPANDO_KEY];\n        return true;\n    }\n addEventListener(chart, type, listener) {\n        this.removeEventListener(chart, type);\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const handlers = {\n            attach: createAttachObserver,\n            detach: createDetachObserver,\n            resize: createResizeObserver\n        };\n        const handler = handlers[type] || createProxyAndListen;\n        proxies[type] = handler(chart, type, listener);\n    }\n removeEventListener(chart, type) {\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const proxy = proxies[type];\n        if (!proxy) {\n            return;\n        }\n        const handlers = {\n            attach: releaseObserver,\n            detach: releaseObserver,\n            resize: releaseObserver\n        };\n        const handler = handlers[type] || removeListener;\n        handler(chart, type, proxy);\n        proxies[type] = undefined;\n    }\n    getDevicePixelRatio() {\n        return window.devicePixelRatio;\n    }\n getMaximumSize(canvas, width, height, aspectRatio) {\n        return getMaximumSize(canvas, width, height, aspectRatio);\n    }\n isAttached(canvas) {\n        const container = canvas && _getParentNode(canvas);\n        return !!(container && container.isConnected);\n    }\n}\n\nfunction _detectPlatform(canvas) {\n    if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n        return BasicPlatform;\n    }\n    return DomPlatform;\n}\n\nclass Element {\n    static defaults = {};\n    static defaultRoutes = undefined;\n    x;\n    y;\n    active = false;\n    options;\n    $animations;\n    tooltipPosition(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    hasValue() {\n        return isNumber(this.x) && isNumber(this.y);\n    }\n    getProps(props, final) {\n        const anims = this.$animations;\n        if (!final || !anims) {\n            // let's not create an object, if not needed\n            return this;\n        }\n        const ret = {};\n        props.forEach((prop)=>{\n            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n        });\n        return ret;\n    }\n}\n\nfunction autoSkip(scale, ticks) {\n    const tickOpts = scale.options.ticks;\n    const determinedMaxTicks = determineMaxTicks(scale);\n    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n    const numMajorIndices = majorIndices.length;\n    const first = majorIndices[0];\n    const last = majorIndices[numMajorIndices - 1];\n    const newTicks = [];\n    if (numMajorIndices > ticksLimit) {\n        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n        return newTicks;\n    }\n    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n    if (numMajorIndices > 0) {\n        let i, ilen;\n        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n        skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n        }\n        skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n        return newTicks;\n    }\n    skip(ticks, newTicks, spacing);\n    return newTicks;\n}\nfunction determineMaxTicks(scale) {\n    const offset = scale.options.offset;\n    const tickLength = scale._tickSize();\n    const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n    const maxChart = scale._maxLength / tickLength;\n    return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n    const evenMajorSpacing = getEvenSpacing(majorIndices);\n    const spacing = ticks.length / ticksLimit;\n    if (!evenMajorSpacing) {\n        return Math.max(spacing, 1);\n    }\n    const factors = _factorize(evenMajorSpacing);\n    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n        const factor = factors[i];\n        if (factor > spacing) {\n            return factor;\n        }\n    }\n    return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n    const result = [];\n    let i, ilen;\n    for(i = 0, ilen = ticks.length; i < ilen; i++){\n        if (ticks[i].major) {\n            result.push(i);\n        }\n    }\n    return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n    let count = 0;\n    let next = majorIndices[0];\n    let i;\n    spacing = Math.ceil(spacing);\n    for(i = 0; i < ticks.length; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = majorIndices[count * spacing];\n        }\n    }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n    const start = valueOrDefault(majorStart, 0);\n    const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n    let count = 0;\n    let length, i, next;\n    spacing = Math.ceil(spacing);\n    if (majorEnd) {\n        length = majorEnd - majorStart;\n        spacing = length / Math.floor(length / spacing);\n    }\n    next = start;\n    while(next < 0){\n        count++;\n        next = Math.round(start + count * spacing);\n    }\n    for(i = Math.max(start, 0); i < end; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = Math.round(start + count * spacing);\n        }\n    }\n}\n function getEvenSpacing(arr) {\n    const len = arr.length;\n    let i, diff;\n    if (len < 2) {\n        return false;\n    }\n    for(diff = arr[0], i = 1; i < len; ++i){\n        if (arr[i] - arr[i - 1] !== diff) {\n            return false;\n        }\n    }\n    return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n    const result = [];\n    const increment = arr.length / numItems;\n    const len = arr.length;\n    let i = 0;\n    for(; i < len; i += increment){\n        result.push(arr[Math.floor(i)]);\n    }\n    return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n    const length = scale.ticks.length;\n    const validIndex = Math.min(index, length - 1);\n    const start = scale._startPixel;\n    const end = scale._endPixel;\n    const epsilon = 1e-6;\n    let lineValue = scale.getPixelForTick(validIndex);\n    let offset;\n    if (offsetGridLines) {\n        if (length === 1) {\n            offset = Math.max(lineValue - start, end - lineValue);\n        } else if (index === 0) {\n            offset = (scale.getPixelForTick(1) - lineValue) / 2;\n        } else {\n            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n        }\n        lineValue += validIndex < index ? offset : -offset;\n        if (lineValue < start - epsilon || lineValue > end + epsilon) {\n            return;\n        }\n    }\n    return lineValue;\n}\n function garbageCollect(caches, length) {\n    each(caches, (cache)=>{\n        const gc = cache.gc;\n        const gcLen = gc.length / 2;\n        let i;\n        if (gcLen > length) {\n            for(i = 0; i < gcLen; ++i){\n                delete cache.data[gc[i]];\n            }\n            gc.splice(0, gcLen);\n        }\n    });\n}\n function getTickMarkLength(options) {\n    return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n    if (!options.display) {\n        return 0;\n    }\n    const font = toFont(options.font, fallback);\n    const padding = toPadding(options.padding);\n    const lines = isArray(options.text) ? options.text.length : 1;\n    return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n    return createContext(parent, {\n        scale,\n        type: 'scale'\n    });\n}\nfunction createTickContext(parent, index, tick) {\n    return createContext(parent, {\n        tick,\n        index,\n        type: 'tick'\n    });\n}\nfunction titleAlign(align, position, reverse) {\n     let ret = _toLeftRightCenter(align);\n    if (reverse && position !== 'right' || !reverse && position === 'right') {\n        ret = reverseAlign(ret);\n    }\n    return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n    const { top , left , bottom , right , chart  } = scale;\n    const { chartArea , scales  } = chart;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    const height = bottom - top;\n    const width = right - left;\n    if (scale.isHorizontal()) {\n        titleX = _alignStartEnd(align, left, right);\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n        } else if (position === 'center') {\n            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n        } else {\n            titleY = offsetFromEdge(scale, position, offset);\n        }\n        maxWidth = right - left;\n    } else {\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n        } else if (position === 'center') {\n            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n        } else {\n            titleX = offsetFromEdge(scale, position, offset);\n        }\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = position === 'left' ? -HALF_PI : HALF_PI;\n    }\n    return {\n        titleX,\n        titleY,\n        maxWidth,\n        rotation\n    };\n}\nclass Scale extends Element {\n    constructor(cfg){\n        super();\n         this.id = cfg.id;\n         this.type = cfg.type;\n         this.options = undefined;\n         this.ctx = cfg.ctx;\n         this.chart = cfg.chart;\n         this.top = undefined;\n         this.bottom = undefined;\n         this.left = undefined;\n         this.right = undefined;\n         this.width = undefined;\n         this.height = undefined;\n        this._margins = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        };\n         this.maxWidth = undefined;\n         this.maxHeight = undefined;\n         this.paddingTop = undefined;\n         this.paddingBottom = undefined;\n         this.paddingLeft = undefined;\n         this.paddingRight = undefined;\n         this.axis = undefined;\n         this.labelRotation = undefined;\n        this.min = undefined;\n        this.max = undefined;\n        this._range = undefined;\n         this.ticks = [];\n         this._gridLineItems = null;\n         this._labelItems = null;\n         this._labelSizes = null;\n        this._length = 0;\n        this._maxLength = 0;\n        this._longestTextCache = {};\n         this._startPixel = undefined;\n         this._endPixel = undefined;\n        this._reversePixels = false;\n        this._userMax = undefined;\n        this._userMin = undefined;\n        this._suggestedMax = undefined;\n        this._suggestedMin = undefined;\n        this._ticksLength = 0;\n        this._borderValue = 0;\n        this._cache = {};\n        this._dataLimitsCached = false;\n        this.$context = undefined;\n    }\n init(options) {\n        this.options = options.setContext(this.getContext());\n        this.axis = options.axis;\n        this._userMin = this.parse(options.min);\n        this._userMax = this.parse(options.max);\n        this._suggestedMin = this.parse(options.suggestedMin);\n        this._suggestedMax = this.parse(options.suggestedMax);\n    }\n parse(raw, index) {\n        return raw;\n    }\n getUserBounds() {\n        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;\n        _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n        _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n        _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n        _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n        return {\n            min: finiteOrDefault(_userMin, _suggestedMin),\n            max: finiteOrDefault(_userMax, _suggestedMax),\n            minDefined: isNumberFinite(_userMin),\n            maxDefined: isNumberFinite(_userMax)\n        };\n    }\n getMinMax(canStack) {\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n        let range;\n        if (minDefined && maxDefined) {\n            return {\n                min,\n                max\n            };\n        }\n        const metas = this.getMatchingVisibleMetas();\n        for(let i = 0, ilen = metas.length; i < ilen; ++i){\n            range = metas[i].controller.getMinMax(this, canStack);\n            if (!minDefined) {\n                min = Math.min(min, range.min);\n            }\n            if (!maxDefined) {\n                max = Math.max(max, range.max);\n            }\n        }\n        min = maxDefined && min > max ? max : min;\n        max = minDefined && min > max ? min : max;\n        return {\n            min: finiteOrDefault(min, finiteOrDefault(max, min)),\n            max: finiteOrDefault(max, finiteOrDefault(min, max))\n        };\n    }\n getPadding() {\n        return {\n            left: this.paddingLeft || 0,\n            top: this.paddingTop || 0,\n            right: this.paddingRight || 0,\n            bottom: this.paddingBottom || 0\n        };\n    }\n getTicks() {\n        return this.ticks;\n    }\n getLabels() {\n        const data = this.chart.data;\n        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    }\n getLabelItems(chartArea = this.chart.chartArea) {\n        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n        return items;\n    }\n    beforeLayout() {\n        this._cache = {};\n        this._dataLimitsCached = false;\n    }\n    beforeUpdate() {\n        callback(this.options.beforeUpdate, [\n            this\n        ]);\n    }\n update(maxWidth, maxHeight, margins) {\n        const { beginAtZero , grace , ticks: tickOpts  } = this.options;\n        const sampleSize = tickOpts.sampleSize;\n        this.beforeUpdate();\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins = Object.assign({\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        }, margins);\n        this.ticks = null;\n        this._labelSizes = null;\n        this._gridLineItems = null;\n        this._labelItems = null;\n        this.beforeSetDimensions();\n        this.setDimensions();\n        this.afterSetDimensions();\n        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n        if (!this._dataLimitsCached) {\n            this.beforeDataLimits();\n            this.determineDataLimits();\n            this.afterDataLimits();\n            this._range = _addGrace(this, grace, beginAtZero);\n            this._dataLimitsCached = true;\n        }\n        this.beforeBuildTicks();\n        this.ticks = this.buildTicks() || [];\n        this.afterBuildTicks();\n        const samplingEnabled = sampleSize < this.ticks.length;\n        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n        this.configure();\n        this.beforeCalculateLabelRotation();\n        this.calculateLabelRotation();\n        this.afterCalculateLabelRotation();\n        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n            this.ticks = autoSkip(this, this.ticks);\n            this._labelSizes = null;\n            this.afterAutoSkip();\n        }\n        if (samplingEnabled) {\n            this._convertTicksToLabels(this.ticks);\n        }\n        this.beforeFit();\n        this.fit();\n        this.afterFit();\n        this.afterUpdate();\n    }\n configure() {\n        let reversePixels = this.options.reverse;\n        let startPixel, endPixel;\n        if (this.isHorizontal()) {\n            startPixel = this.left;\n            endPixel = this.right;\n        } else {\n            startPixel = this.top;\n            endPixel = this.bottom;\n            reversePixels = !reversePixels;\n        }\n        this._startPixel = startPixel;\n        this._endPixel = endPixel;\n        this._reversePixels = reversePixels;\n        this._length = endPixel - startPixel;\n        this._alignToPixels = this.options.alignToPixels;\n    }\n    afterUpdate() {\n        callback(this.options.afterUpdate, [\n            this\n        ]);\n    }\n    beforeSetDimensions() {\n        callback(this.options.beforeSetDimensions, [\n            this\n        ]);\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = 0;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = 0;\n            this.bottom = this.height;\n        }\n        this.paddingLeft = 0;\n        this.paddingTop = 0;\n        this.paddingRight = 0;\n        this.paddingBottom = 0;\n    }\n    afterSetDimensions() {\n        callback(this.options.afterSetDimensions, [\n            this\n        ]);\n    }\n    _callHooks(name) {\n        this.chart.notifyPlugins(name, this.getContext());\n        callback(this.options[name], [\n            this\n        ]);\n    }\n    beforeDataLimits() {\n        this._callHooks('beforeDataLimits');\n    }\n    determineDataLimits() {}\n    afterDataLimits() {\n        this._callHooks('afterDataLimits');\n    }\n    beforeBuildTicks() {\n        this._callHooks('beforeBuildTicks');\n    }\n buildTicks() {\n        return [];\n    }\n    afterBuildTicks() {\n        this._callHooks('afterBuildTicks');\n    }\n    beforeTickToLabelConversion() {\n        callback(this.options.beforeTickToLabelConversion, [\n            this\n        ]);\n    }\n generateTickLabels(ticks) {\n        const tickOpts = this.options.ticks;\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            tick = ticks[i];\n            tick.label = callback(tickOpts.callback, [\n                tick.value,\n                i,\n                ticks\n            ], this);\n        }\n    }\n    afterTickToLabelConversion() {\n        callback(this.options.afterTickToLabelConversion, [\n            this\n        ]);\n    }\n    beforeCalculateLabelRotation() {\n        callback(this.options.beforeCalculateLabelRotation, [\n            this\n        ]);\n    }\n    calculateLabelRotation() {\n        const options = this.options;\n        const tickOpts = options.ticks;\n        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n        const minRotation = tickOpts.minRotation || 0;\n        const maxRotation = tickOpts.maxRotation;\n        let labelRotation = minRotation;\n        let tickWidth, maxHeight, maxLabelDiagonal;\n        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n            this.labelRotation = minRotation;\n            return;\n        }\n        const labelSizes = this._getLabelSizes();\n        const maxLabelWidth = labelSizes.widest.width;\n        const maxLabelHeight = labelSizes.highest.height;\n        const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n        if (maxLabelWidth + 6 > tickWidth) {\n            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n            labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n        }\n        this.labelRotation = labelRotation;\n    }\n    afterCalculateLabelRotation() {\n        callback(this.options.afterCalculateLabelRotation, [\n            this\n        ]);\n    }\n    afterAutoSkip() {}\n    beforeFit() {\n        callback(this.options.beforeFit, [\n            this\n        ]);\n    }\n    fit() {\n        const minSize = {\n            width: 0,\n            height: 0\n        };\n        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;\n        const display = this._isVisible();\n        const isHorizontal = this.isHorizontal();\n        if (display) {\n            const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n            if (isHorizontal) {\n                minSize.width = this.maxWidth;\n                minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n            } else {\n                minSize.height = this.maxHeight;\n                minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n            }\n            if (tickOpts.display && this.ticks.length) {\n                const { first , last , widest , highest  } = this._getLabelSizes();\n                const tickPadding = tickOpts.padding * 2;\n                const angleRadians = toRadians(this.labelRotation);\n                const cos = Math.cos(angleRadians);\n                const sin = Math.sin(angleRadians);\n                if (isHorizontal) {\n                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n                } else {\n                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n                }\n                this._calculatePadding(first, last, sin, cos);\n            }\n        }\n        this._handleMargins();\n        if (isHorizontal) {\n            this.width = this._length = chart.width - this._margins.left - this._margins.right;\n            this.height = minSize.height;\n        } else {\n            this.width = minSize.width;\n            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n        }\n    }\n    _calculatePadding(first, last, sin, cos) {\n        const { ticks: { align , padding  } , position  } = this.options;\n        const isRotated = this.labelRotation !== 0;\n        const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n        if (this.isHorizontal()) {\n            const offsetLeft = this.getPixelForTick(0) - this.left;\n            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n            let paddingLeft = 0;\n            let paddingRight = 0;\n            if (isRotated) {\n                if (labelsBelowTicks) {\n                    paddingLeft = cos * first.width;\n                    paddingRight = sin * last.height;\n                } else {\n                    paddingLeft = sin * first.height;\n                    paddingRight = cos * last.width;\n                }\n            } else if (align === 'start') {\n                paddingRight = last.width;\n            } else if (align === 'end') {\n                paddingLeft = first.width;\n            } else if (align !== 'inner') {\n                paddingLeft = first.width / 2;\n                paddingRight = last.width / 2;\n            }\n            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n        } else {\n            let paddingTop = last.height / 2;\n            let paddingBottom = first.height / 2;\n            if (align === 'start') {\n                paddingTop = 0;\n                paddingBottom = first.height;\n            } else if (align === 'end') {\n                paddingTop = last.height;\n                paddingBottom = 0;\n            }\n            this.paddingTop = paddingTop + padding;\n            this.paddingBottom = paddingBottom + padding;\n        }\n    }\n _handleMargins() {\n        if (this._margins) {\n            this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n            this._margins.top = Math.max(this.paddingTop, this._margins.top);\n            this._margins.right = Math.max(this.paddingRight, this._margins.right);\n            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n        }\n    }\n    afterFit() {\n        callback(this.options.afterFit, [\n            this\n        ]);\n    }\n isHorizontal() {\n        const { axis , position  } = this.options;\n        return position === 'top' || position === 'bottom' || axis === 'x';\n    }\n isFullSize() {\n        return this.options.fullSize;\n    }\n _convertTicksToLabels(ticks) {\n        this.beforeTickToLabelConversion();\n        this.generateTickLabels(ticks);\n        let i, ilen;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            if (isNullOrUndef(ticks[i].label)) {\n                ticks.splice(i, 1);\n                ilen--;\n                i--;\n            }\n        }\n        this.afterTickToLabelConversion();\n    }\n _getLabelSizes() {\n        let labelSizes = this._labelSizes;\n        if (!labelSizes) {\n            const sampleSize = this.options.ticks.sampleSize;\n            let ticks = this.ticks;\n            if (sampleSize < ticks.length) {\n                ticks = sample(ticks, sampleSize);\n            }\n            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n        }\n        return labelSizes;\n    }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n        const { ctx , _longestTextCache: caches  } = this;\n        const widths = [];\n        const heights = [];\n        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n        let widestLabelSize = 0;\n        let highestLabelSize = 0;\n        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n        for(i = 0; i < length; i += increment){\n            label = ticks[i].label;\n            tickFont = this._resolveTickFontOptions(i);\n            ctx.font = fontString = tickFont.string;\n            cache = caches[fontString] = caches[fontString] || {\n                data: {},\n                gc: []\n            };\n            lineHeight = tickFont.lineHeight;\n            width = height = 0;\n            if (!isNullOrUndef(label) && !isArray(label)) {\n                width = _measureText(ctx, cache.data, cache.gc, width, label);\n                height = lineHeight;\n            } else if (isArray(label)) {\n                for(j = 0, jlen = label.length; j < jlen; ++j){\n                    nestedLabel =  label[j];\n                    if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n                        width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n                        height += lineHeight;\n                    }\n                }\n            }\n            widths.push(width);\n            heights.push(height);\n            widestLabelSize = Math.max(width, widestLabelSize);\n            highestLabelSize = Math.max(height, highestLabelSize);\n        }\n        garbageCollect(caches, length);\n        const widest = widths.indexOf(widestLabelSize);\n        const highest = heights.indexOf(highestLabelSize);\n        const valueAt = (idx)=>({\n                width: widths[idx] || 0,\n                height: heights[idx] || 0\n            });\n        return {\n            first: valueAt(0),\n            last: valueAt(length - 1),\n            widest: valueAt(widest),\n            highest: valueAt(highest),\n            widths,\n            heights\n        };\n    }\n getLabelForValue(value) {\n        return value;\n    }\n getPixelForValue(value, index) {\n        return NaN;\n    }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n getPixelForDecimal(decimal) {\n        if (this._reversePixels) {\n            decimal = 1 - decimal;\n        }\n        const pixel = this._startPixel + decimal * this._length;\n        return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n    }\n getDecimalForPixel(pixel) {\n        const decimal = (pixel - this._startPixel) / this._length;\n        return this._reversePixels ? 1 - decimal : decimal;\n    }\n getBasePixel() {\n        return this.getPixelForValue(this.getBaseValue());\n    }\n getBaseValue() {\n        const { min , max  } = this;\n        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    }\n getContext(index) {\n        const ticks = this.ticks || [];\n        if (index >= 0 && index < ticks.length) {\n            const tick = ticks[index];\n            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n        }\n        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n    }\n _tickSize() {\n        const optionTicks = this.options.ticks;\n        const rot = toRadians(this.labelRotation);\n        const cos = Math.abs(Math.cos(rot));\n        const sin = Math.abs(Math.sin(rot));\n        const labelSizes = this._getLabelSizes();\n        const padding = optionTicks.autoSkipPadding || 0;\n        const w = labelSizes ? labelSizes.widest.width + padding : 0;\n        const h = labelSizes ? labelSizes.highest.height + padding : 0;\n        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    }\n _isVisible() {\n        const display = this.options.display;\n        if (display !== 'auto') {\n            return !!display;\n        }\n        return this.getMatchingVisibleMetas().length > 0;\n    }\n _computeGridLineItems(chartArea) {\n        const axis = this.axis;\n        const chart = this.chart;\n        const options = this.options;\n        const { grid , position , border  } = options;\n        const offset = grid.offset;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const ticksLength = ticks.length + (offset ? 1 : 0);\n        const tl = getTickMarkLength(grid);\n        const items = [];\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = borderOpts.display ? borderOpts.width : 0;\n        const axisHalfWidth = axisWidth / 2;\n        const alignBorderValue = function(pixel) {\n            return _alignPixel(chart, pixel, axisWidth);\n        };\n        let borderValue, i, lineValue, alignedLineValue;\n        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n        if (position === 'top') {\n            borderValue = alignBorderValue(this.bottom);\n            ty1 = this.bottom - tl;\n            ty2 = borderValue - axisHalfWidth;\n            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n            y2 = chartArea.bottom;\n        } else if (position === 'bottom') {\n            borderValue = alignBorderValue(this.top);\n            y1 = chartArea.top;\n            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = this.top + tl;\n        } else if (position === 'left') {\n            borderValue = alignBorderValue(this.right);\n            tx1 = this.right - tl;\n            tx2 = borderValue - axisHalfWidth;\n            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n            x2 = chartArea.right;\n        } else if (position === 'right') {\n            borderValue = alignBorderValue(this.left);\n            x1 = chartArea.left;\n            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n            tx1 = borderValue + axisHalfWidth;\n            tx2 = this.left + tl;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            y1 = chartArea.top;\n            y2 = chartArea.bottom;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = ty1 + tl;\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            tx1 = borderValue - axisHalfWidth;\n            tx2 = tx1 - tl;\n            x1 = chartArea.left;\n            x2 = chartArea.right;\n        }\n        const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n        const step = Math.max(1, Math.ceil(ticksLength / limit));\n        for(i = 0; i < ticksLength; i += step){\n            const context = this.getContext(i);\n            const optsAtIndex = grid.setContext(context);\n            const optsAtIndexBorder = border.setContext(context);\n            const lineWidth = optsAtIndex.lineWidth;\n            const lineColor = optsAtIndex.color;\n            const borderDash = optsAtIndexBorder.dash || [];\n            const borderDashOffset = optsAtIndexBorder.dashOffset;\n            const tickWidth = optsAtIndex.tickWidth;\n            const tickColor = optsAtIndex.tickColor;\n            const tickBorderDash = optsAtIndex.tickBorderDash || [];\n            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n            lineValue = getPixelForGridLine(this, i, offset);\n            if (lineValue === undefined) {\n                continue;\n            }\n            alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n            if (isHorizontal) {\n                tx1 = tx2 = x1 = x2 = alignedLineValue;\n            } else {\n                ty1 = ty2 = y1 = y2 = alignedLineValue;\n            }\n            items.push({\n                tx1,\n                ty1,\n                tx2,\n                ty2,\n                x1,\n                y1,\n                x2,\n                y2,\n                width: lineWidth,\n                color: lineColor,\n                borderDash,\n                borderDashOffset,\n                tickWidth,\n                tickColor,\n                tickBorderDash,\n                tickBorderDashOffset\n            });\n        }\n        this._ticksLength = ticksLength;\n        this._borderValue = borderValue;\n        return items;\n    }\n _computeLabelItems(chartArea) {\n        const axis = this.axis;\n        const options = this.options;\n        const { position , ticks: optionTicks  } = options;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const { align , crossAlign , padding , mirror  } = optionTicks;\n        const tl = getTickMarkLength(options.grid);\n        const tickAndPadding = tl + padding;\n        const hTickAndPadding = mirror ? -padding : tickAndPadding;\n        const rotation = -toRadians(this.labelRotation);\n        const items = [];\n        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n        let textBaseline = 'middle';\n        if (position === 'top') {\n            y = this.bottom - hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'bottom') {\n            y = this.top + hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'left') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (position === 'right') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n            }\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                x = this.chart.scales[positionAxisID].getPixelForValue(value);\n            }\n            textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n        }\n        if (axis === 'y') {\n            if (align === 'start') {\n                textBaseline = 'top';\n            } else if (align === 'end') {\n                textBaseline = 'bottom';\n            }\n        }\n        const labelSizes = this._getLabelSizes();\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            label = tick.label;\n            const optsAtIndex = optionTicks.setContext(this.getContext(i));\n            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n            font = this._resolveTickFontOptions(i);\n            lineHeight = font.lineHeight;\n            lineCount = isArray(label) ? label.length : 1;\n            const halfCount = lineCount / 2;\n            const color = optsAtIndex.color;\n            const strokeColor = optsAtIndex.textStrokeColor;\n            const strokeWidth = optsAtIndex.textStrokeWidth;\n            let tickTextAlign = textAlign;\n            if (isHorizontal) {\n                x = pixel;\n                if (textAlign === 'inner') {\n                    if (i === ilen - 1) {\n                        tickTextAlign = !this.options.reverse ? 'right' : 'left';\n                    } else if (i === 0) {\n                        tickTextAlign = !this.options.reverse ? 'left' : 'right';\n                    } else {\n                        tickTextAlign = 'center';\n                    }\n                }\n                if (position === 'top') {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = -lineCount * lineHeight + lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n                    } else {\n                        textOffset = -labelSizes.highest.height + lineHeight / 2;\n                    }\n                } else {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n                    } else {\n                        textOffset = labelSizes.highest.height - lineCount * lineHeight;\n                    }\n                }\n                if (mirror) {\n                    textOffset *= -1;\n                }\n                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n                    x += lineHeight / 2 * Math.sin(rotation);\n                }\n            } else {\n                y = pixel;\n                textOffset = (1 - lineCount) * lineHeight / 2;\n            }\n            let backdrop;\n            if (optsAtIndex.showLabelBackdrop) {\n                const labelPadding = toPadding(optsAtIndex.backdropPadding);\n                const height = labelSizes.heights[i];\n                const width = labelSizes.widths[i];\n                let top = textOffset - labelPadding.top;\n                let left = 0 - labelPadding.left;\n                switch(textBaseline){\n                    case 'middle':\n                        top -= height / 2;\n                        break;\n                    case 'bottom':\n                        top -= height;\n                        break;\n                }\n                switch(textAlign){\n                    case 'center':\n                        left -= width / 2;\n                        break;\n                    case 'right':\n                        left -= width;\n                        break;\n                    case 'inner':\n                        if (i === ilen - 1) {\n                            left -= width;\n                        } else if (i > 0) {\n                            left -= width / 2;\n                        }\n                        break;\n                }\n                backdrop = {\n                    left,\n                    top,\n                    width: width + labelPadding.width,\n                    height: height + labelPadding.height,\n                    color: optsAtIndex.backdropColor\n                };\n            }\n            items.push({\n                label,\n                font,\n                textOffset,\n                options: {\n                    rotation,\n                    color,\n                    strokeColor,\n                    strokeWidth,\n                    textAlign: tickTextAlign,\n                    textBaseline,\n                    translation: [\n                        x,\n                        y\n                    ],\n                    backdrop\n                }\n            });\n        }\n        return items;\n    }\n    _getXAxisLabelAlignment() {\n        const { position , ticks  } = this.options;\n        const rotation = -toRadians(this.labelRotation);\n        if (rotation) {\n            return position === 'top' ? 'left' : 'right';\n        }\n        let align = 'center';\n        if (ticks.align === 'start') {\n            align = 'left';\n        } else if (ticks.align === 'end') {\n            align = 'right';\n        } else if (ticks.align === 'inner') {\n            align = 'inner';\n        }\n        return align;\n    }\n    _getYAxisLabelAlignment(tl) {\n        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;\n        const labelSizes = this._getLabelSizes();\n        const tickAndPadding = tl + padding;\n        const widest = labelSizes.widest.width;\n        let textAlign;\n        let x;\n        if (position === 'left') {\n            if (mirror) {\n                x = this.right + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x += widest;\n                }\n            } else {\n                x = this.right - tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x = this.left;\n                }\n            }\n        } else if (position === 'right') {\n            if (mirror) {\n                x = this.left + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x -= widest;\n                }\n            } else {\n                x = this.left + tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x = this.right;\n                }\n            }\n        } else {\n            textAlign = 'right';\n        }\n        return {\n            textAlign,\n            x\n        };\n    }\n _computeLabelArea() {\n        if (this.options.ticks.mirror) {\n            return;\n        }\n        const chart = this.chart;\n        const position = this.options.position;\n        if (position === 'left' || position === 'right') {\n            return {\n                top: 0,\n                left: this.left,\n                bottom: chart.height,\n                right: this.right\n            };\n        }\n        if (position === 'top' || position === 'bottom') {\n            return {\n                top: this.top,\n                left: 0,\n                bottom: this.bottom,\n                right: chart.width\n            };\n        }\n    }\n drawBackground() {\n        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;\n        if (backgroundColor) {\n            ctx.save();\n            ctx.fillStyle = backgroundColor;\n            ctx.fillRect(left, top, width, height);\n            ctx.restore();\n        }\n    }\n    getLineWidthForValue(value) {\n        const grid = this.options.grid;\n        if (!this._isVisible() || !grid.display) {\n            return 0;\n        }\n        const ticks = this.ticks;\n        const index = ticks.findIndex((t)=>t.value === value);\n        if (index >= 0) {\n            const opts = grid.setContext(this.getContext(index));\n            return opts.lineWidth;\n        }\n        return 0;\n    }\n drawGrid(chartArea) {\n        const grid = this.options.grid;\n        const ctx = this.ctx;\n        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n        let i, ilen;\n        const drawLine = (p1, p2, style)=>{\n            if (!style.width || !style.color) {\n                return;\n            }\n            ctx.save();\n            ctx.lineWidth = style.width;\n            ctx.strokeStyle = style.color;\n            ctx.setLineDash(style.borderDash || []);\n            ctx.lineDashOffset = style.borderDashOffset;\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n            ctx.restore();\n        };\n        if (grid.display) {\n            for(i = 0, ilen = items.length; i < ilen; ++i){\n                const item = items[i];\n                if (grid.drawOnChartArea) {\n                    drawLine({\n                        x: item.x1,\n                        y: item.y1\n                    }, {\n                        x: item.x2,\n                        y: item.y2\n                    }, item);\n                }\n                if (grid.drawTicks) {\n                    drawLine({\n                        x: item.tx1,\n                        y: item.ty1\n                    }, {\n                        x: item.tx2,\n                        y: item.ty2\n                    }, {\n                        color: item.tickColor,\n                        width: item.tickWidth,\n                        borderDash: item.tickBorderDash,\n                        borderDashOffset: item.tickBorderDashOffset\n                    });\n                }\n            }\n        }\n    }\n drawBorder() {\n        const { chart , ctx , options: { border , grid  }  } = this;\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = border.display ? borderOpts.width : 0;\n        if (!axisWidth) {\n            return;\n        }\n        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n        const borderValue = this._borderValue;\n        let x1, x2, y1, y2;\n        if (this.isHorizontal()) {\n            x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n            x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n            y1 = y2 = borderValue;\n        } else {\n            y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n            y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n            x1 = x2 = borderValue;\n        }\n        ctx.save();\n        ctx.lineWidth = borderOpts.width;\n        ctx.strokeStyle = borderOpts.color;\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n        ctx.restore();\n    }\n drawLabels(chartArea) {\n        const optionTicks = this.options.ticks;\n        if (!optionTicks.display) {\n            return;\n        }\n        const ctx = this.ctx;\n        const area = this._computeLabelArea();\n        if (area) {\n            clipArea(ctx, area);\n        }\n        const items = this.getLabelItems(chartArea);\n        for (const item of items){\n            const renderTextOptions = item.options;\n            const tickFont = item.font;\n            const label = item.label;\n            const y = item.textOffset;\n            renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n        }\n        if (area) {\n            unclipArea(ctx);\n        }\n    }\n drawTitle() {\n        const { ctx , options: { position , title , reverse  }  } = this;\n        if (!title.display) {\n            return;\n        }\n        const font = toFont(title.font);\n        const padding = toPadding(title.padding);\n        const align = title.align;\n        let offset = font.lineHeight / 2;\n        if (position === 'bottom' || position === 'center' || isObject(position)) {\n            offset += padding.bottom;\n            if (isArray(title.text)) {\n                offset += font.lineHeight * (title.text.length - 1);\n            }\n        } else {\n            offset += padding.top;\n        }\n        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);\n        renderText(ctx, title.text, 0, 0, font, {\n            color: title.color,\n            maxWidth,\n            rotation,\n            textAlign: titleAlign(align, position, reverse),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n    draw(chartArea) {\n        if (!this._isVisible()) {\n            return;\n        }\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawBorder();\n        this.drawTitle();\n        this.drawLabels(chartArea);\n    }\n _layers() {\n        const opts = this.options;\n        const tz = opts.ticks && opts.ticks.z || 0;\n        const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n        const bz = valueOrDefault(opts.border && opts.border.z, 0);\n        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n            return [\n                {\n                    z: tz,\n                    draw: (chartArea)=>{\n                        this.draw(chartArea);\n                    }\n                }\n            ];\n        }\n        return [\n            {\n                z: gz,\n                draw: (chartArea)=>{\n                    this.drawBackground();\n                    this.drawGrid(chartArea);\n                    this.drawTitle();\n                }\n            },\n            {\n                z: bz,\n                draw: ()=>{\n                    this.drawBorder();\n                }\n            },\n            {\n                z: tz,\n                draw: (chartArea)=>{\n                    this.drawLabels(chartArea);\n                }\n            }\n        ];\n    }\n getMatchingVisibleMetas(type) {\n        const metas = this.chart.getSortedVisibleDatasetMetas();\n        const axisID = this.axis + 'AxisID';\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            const meta = metas[i];\n            if (meta[axisID] === this.id && (!type || meta.type === type)) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n _resolveTickFontOptions(index) {\n        const opts = this.options.ticks.setContext(this.getContext(index));\n        return toFont(opts.font);\n    }\n _maxDigits() {\n        const fontSize = this._resolveTickFontOptions(0).lineHeight;\n        return (this.isHorizontal() ? this.width : this.height) / fontSize;\n    }\n}\n\nclass TypedRegistry {\n    constructor(type, scope, override){\n        this.type = type;\n        this.scope = scope;\n        this.override = override;\n        this.items = Object.create(null);\n    }\n    isForType(type) {\n        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n    }\n register(item) {\n        const proto = Object.getPrototypeOf(item);\n        let parentScope;\n        if (isIChartComponent(proto)) {\n            parentScope = this.register(proto);\n        }\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope + '.' + id;\n        if (!id) {\n            throw new Error('class does not have id: ' + item);\n        }\n        if (id in items) {\n            return scope;\n        }\n        items[id] = item;\n        registerDefaults(item, scope, parentScope);\n        if (this.override) {\n            defaults.override(item.id, item.overrides);\n        }\n        return scope;\n    }\n get(id) {\n        return this.items[id];\n    }\n unregister(item) {\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope;\n        if (id in items) {\n            delete items[id];\n        }\n        if (scope && id in defaults[scope]) {\n            delete defaults[scope][id];\n            if (this.override) {\n                delete overrides[id];\n            }\n        }\n    }\n}\nfunction registerDefaults(item, scope, parentScope) {\n    const itemDefaults = merge(Object.create(null), [\n        parentScope ? defaults.get(parentScope) : {},\n        defaults.get(scope),\n        item.defaults\n    ]);\n    defaults.set(scope, itemDefaults);\n    if (item.defaultRoutes) {\n        routeDefaults(scope, item.defaultRoutes);\n    }\n    if (item.descriptors) {\n        defaults.describe(scope, item.descriptors);\n    }\n}\nfunction routeDefaults(scope, routes) {\n    Object.keys(routes).forEach((property)=>{\n        const propertyParts = property.split('.');\n        const sourceName = propertyParts.pop();\n        const sourceScope = [\n            scope\n        ].concat(propertyParts).join('.');\n        const parts = routes[property].split('.');\n        const targetName = parts.pop();\n        const targetScope = parts.join('.');\n        defaults.route(sourceScope, sourceName, targetScope, targetName);\n    });\n}\nfunction isIChartComponent(proto) {\n    return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n    constructor(){\n        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n        this.elements = new TypedRegistry(Element, 'elements');\n        this.plugins = new TypedRegistry(Object, 'plugins');\n        this.scales = new TypedRegistry(Scale, 'scales');\n        this._typedRegistries = [\n            this.controllers,\n            this.scales,\n            this.elements\n        ];\n    }\n add(...args) {\n        this._each('register', args);\n    }\n    remove(...args) {\n        this._each('unregister', args);\n    }\n addControllers(...args) {\n        this._each('register', args, this.controllers);\n    }\n addElements(...args) {\n        this._each('register', args, this.elements);\n    }\n addPlugins(...args) {\n        this._each('register', args, this.plugins);\n    }\n addScales(...args) {\n        this._each('register', args, this.scales);\n    }\n getController(id) {\n        return this._get(id, this.controllers, 'controller');\n    }\n getElement(id) {\n        return this._get(id, this.elements, 'element');\n    }\n getPlugin(id) {\n        return this._get(id, this.plugins, 'plugin');\n    }\n getScale(id) {\n        return this._get(id, this.scales, 'scale');\n    }\n removeControllers(...args) {\n        this._each('unregister', args, this.controllers);\n    }\n removeElements(...args) {\n        this._each('unregister', args, this.elements);\n    }\n removePlugins(...args) {\n        this._each('unregister', args, this.plugins);\n    }\n removeScales(...args) {\n        this._each('unregister', args, this.scales);\n    }\n _each(method, args, typedRegistry) {\n        [\n            ...args\n        ].forEach((arg)=>{\n            const reg = typedRegistry || this._getRegistryForType(arg);\n            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n                this._exec(method, reg, arg);\n            } else {\n                each(arg, (item)=>{\n                    const itemReg = typedRegistry || this._getRegistryForType(item);\n                    this._exec(method, itemReg, item);\n                });\n            }\n        });\n    }\n _exec(method, registry, component) {\n        const camelMethod = _capitalize(method);\n        callback(component['before' + camelMethod], [], component);\n        registry[method](component);\n        callback(component['after' + camelMethod], [], component);\n    }\n _getRegistryForType(type) {\n        for(let i = 0; i < this._typedRegistries.length; i++){\n            const reg = this._typedRegistries[i];\n            if (reg.isForType(type)) {\n                return reg;\n            }\n        }\n        return this.plugins;\n    }\n _get(id, typedRegistry, type) {\n        const item = typedRegistry.get(id);\n        if (item === undefined) {\n            throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n        }\n        return item;\n    }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n    constructor(){\n        this._init = undefined;\n    }\n notify(chart, hook, args, filter) {\n        if (hook === 'beforeInit') {\n            this._init = this._createDescriptors(chart, true);\n            this._notify(this._init, chart, 'install');\n        }\n        if (this._init === undefined) {\n            return;\n        }\n        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n        const result = this._notify(descriptors, chart, hook, args);\n        if (hook === 'afterDestroy') {\n            this._notify(descriptors, chart, 'stop');\n            this._notify(this._init, chart, 'uninstall');\n            this._init = undefined;\n        }\n        return result;\n    }\n _notify(descriptors, chart, hook, args) {\n        args = args || {};\n        for (const descriptor of descriptors){\n            const plugin = descriptor.plugin;\n            const method = plugin[hook];\n            const params = [\n                chart,\n                args,\n                descriptor.options\n            ];\n            if (callback(method, params, plugin) === false && args.cancelable) {\n                return false;\n            }\n        }\n        return true;\n    }\n    invalidate() {\n        if (!isNullOrUndef(this._cache)) {\n            this._oldCache = this._cache;\n            this._cache = undefined;\n        }\n    }\n _descriptors(chart) {\n        if (this._cache) {\n            return this._cache;\n        }\n        const descriptors = this._cache = this._createDescriptors(chart);\n        this._notifyStateChanges(chart);\n        return descriptors;\n    }\n    _createDescriptors(chart, all) {\n        const config = chart && chart.config;\n        const options = valueOrDefault(config.options && config.options.plugins, {});\n        const plugins = allPlugins(config);\n        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n    }\n _notifyStateChanges(chart) {\n        const previousDescriptors = this._oldCache || [];\n        const descriptors = this._cache;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n        this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n    }\n}\n function allPlugins(config) {\n    const localIds = {};\n    const plugins = [];\n    const keys = Object.keys(registry.plugins.items);\n    for(let i = 0; i < keys.length; i++){\n        plugins.push(registry.getPlugin(keys[i]));\n    }\n    const local = config.plugins || [];\n    for(let i = 0; i < local.length; i++){\n        const plugin = local[i];\n        if (plugins.indexOf(plugin) === -1) {\n            plugins.push(plugin);\n            localIds[plugin.id] = true;\n        }\n    }\n    return {\n        plugins,\n        localIds\n    };\n}\nfunction getOpts(options, all) {\n    if (!all && options === false) {\n        return null;\n    }\n    if (options === true) {\n        return {};\n    }\n    return options;\n}\nfunction createDescriptors(chart, { plugins , localIds  }, options, all) {\n    const result = [];\n    const context = chart.getContext();\n    for (const plugin of plugins){\n        const id = plugin.id;\n        const opts = getOpts(options[id], all);\n        if (opts === null) {\n            continue;\n        }\n        result.push({\n            plugin,\n            options: pluginOpts(chart.config, {\n                plugin,\n                local: localIds[id]\n            }, opts, context)\n        });\n    }\n    return result;\n}\nfunction pluginOpts(config, { plugin , local  }, opts, context) {\n    const keys = config.pluginScopeKeys(plugin);\n    const scopes = config.getOptionScopes(opts, keys);\n    if (local && plugin.defaults) {\n        scopes.push(plugin.defaults);\n    }\n    return config.createResolver(scopes, context, [\n        ''\n    ], {\n        scriptable: false,\n        indexable: false,\n        allKeys: true\n    });\n}\n\nfunction getIndexAxis(type, options) {\n    const datasetDefaults = defaults.datasets[type] || {};\n    const datasetOptions = (options.datasets || {})[type] || {};\n    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n    let axis = id;\n    if (id === '_index_') {\n        axis = indexAxis;\n    } else if (id === '_value_') {\n        axis = indexAxis === 'x' ? 'y' : 'x';\n    }\n    return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n    return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n    if (id === 'x' || id === 'y' || id === 'r') {\n        return id;\n    }\n}\nfunction axisFromPosition(position) {\n    if (position === 'top' || position === 'bottom') {\n        return 'x';\n    }\n    if (position === 'left' || position === 'right') {\n        return 'y';\n    }\n}\nfunction determineAxis(id, ...scaleOptions) {\n    if (idMatchesAxis(id)) {\n        return id;\n    }\n    for (const opts of scaleOptions){\n        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n        if (axis) {\n            return axis;\n        }\n    }\n    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n    if (dataset[axis + 'AxisID'] === id) {\n        return {\n            axis\n        };\n    }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n    if (config.data && config.data.datasets) {\n        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n        if (boundDs.length) {\n            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n        }\n    }\n    return {};\n}\nfunction mergeScaleConfig(config, options) {\n    const chartDefaults = overrides[config.type] || {\n        scales: {}\n    };\n    const configScales = options.scales || {};\n    const chartIndexAxis = getIndexAxis(config.type, options);\n    const scales = Object.create(null);\n    Object.keys(configScales).forEach((id)=>{\n        const scaleConf = configScales[id];\n        if (!isObject(scaleConf)) {\n            return console.error(`Invalid scale configuration for scale: ${id}`);\n        }\n        if (scaleConf._proxy) {\n            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n        }\n        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n        const defaultScaleOptions = chartDefaults.scales || {};\n        scales[id] = mergeIf(Object.create(null), [\n            {\n                axis\n            },\n            scaleConf,\n            defaultScaleOptions[axis],\n            defaultScaleOptions[defaultId]\n        ]);\n    });\n    config.data.datasets.forEach((dataset)=>{\n        const type = dataset.type || config.type;\n        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n        const datasetDefaults = overrides[type] || {};\n        const defaultScaleOptions = datasetDefaults.scales || {};\n        Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n            const id = dataset[axis + 'AxisID'] || axis;\n            scales[id] = scales[id] || Object.create(null);\n            mergeIf(scales[id], [\n                {\n                    axis\n                },\n                configScales[id],\n                defaultScaleOptions[defaultID]\n            ]);\n        });\n    });\n    Object.keys(scales).forEach((key)=>{\n        const scale = scales[key];\n        mergeIf(scale, [\n            defaults.scales[scale.type],\n            defaults.scale\n        ]);\n    });\n    return scales;\n}\nfunction initOptions(config) {\n    const options = config.options || (config.options = {});\n    options.plugins = valueOrDefault(options.plugins, {});\n    options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n    data = data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    return data;\n}\nfunction initConfig(config) {\n    config = config || {};\n    config.data = initData(config.data);\n    initOptions(config);\n    return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n    let keys = keyCache.get(cacheKey);\n    if (!keys) {\n        keys = generate();\n        keyCache.set(cacheKey, keys);\n        keysCached.add(keys);\n    }\n    return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n    const opts = resolveObjectKey(obj, key);\n    if (opts !== undefined) {\n        set.add(opts);\n    }\n};\nclass Config {\n    constructor(config){\n        this._config = initConfig(config);\n        this._scopeCache = new Map();\n        this._resolverCache = new Map();\n    }\n    get platform() {\n        return this._config.platform;\n    }\n    get type() {\n        return this._config.type;\n    }\n    set type(type) {\n        this._config.type = type;\n    }\n    get data() {\n        return this._config.data;\n    }\n    set data(data) {\n        this._config.data = initData(data);\n    }\n    get options() {\n        return this._config.options;\n    }\n    set options(options) {\n        this._config.options = options;\n    }\n    get plugins() {\n        return this._config.plugins;\n    }\n    update() {\n        const config = this._config;\n        this.clearCache();\n        initOptions(config);\n    }\n    clearCache() {\n        this._scopeCache.clear();\n        this._resolverCache.clear();\n    }\n datasetScopeKeys(datasetType) {\n        return cachedKeys(datasetType, ()=>[\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetAnimationScopeKeys(datasetType, transition) {\n        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n                [\n                    `datasets.${datasetType}.transitions.${transition}`,\n                    `transitions.${transition}`\n                ],\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetElementScopeKeys(datasetType, elementType) {\n        return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n                [\n                    `datasets.${datasetType}.elements.${elementType}`,\n                    `datasets.${datasetType}`,\n                    `elements.${elementType}`,\n                    ''\n                ]\n            ]);\n    }\n pluginScopeKeys(plugin) {\n        const id = plugin.id;\n        const type = this.type;\n        return cachedKeys(`${type}-plugin-${id}`, ()=>[\n                [\n                    `plugins.${id}`,\n                    ...plugin.additionalOptionScopes || []\n                ]\n            ]);\n    }\n _cachedScopes(mainScope, resetCache) {\n        const _scopeCache = this._scopeCache;\n        let cache = _scopeCache.get(mainScope);\n        if (!cache || resetCache) {\n            cache = new Map();\n            _scopeCache.set(mainScope, cache);\n        }\n        return cache;\n    }\n getOptionScopes(mainScope, keyLists, resetCache) {\n        const { options , type  } = this;\n        const cache = this._cachedScopes(mainScope, resetCache);\n        const cached = cache.get(keyLists);\n        if (cached) {\n            return cached;\n        }\n        const scopes = new Set();\n        keyLists.forEach((keys)=>{\n            if (mainScope) {\n                scopes.add(mainScope);\n                keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n            }\n            keys.forEach((key)=>addIfFound(scopes, options, key));\n            keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n            keys.forEach((key)=>addIfFound(scopes, defaults, key));\n            keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n        });\n        const array = Array.from(scopes);\n        if (array.length === 0) {\n            array.push(Object.create(null));\n        }\n        if (keysCached.has(keyLists)) {\n            cache.set(keyLists, array);\n        }\n        return array;\n    }\n chartOptionScopes() {\n        const { options , type  } = this;\n        return [\n            options,\n            overrides[type] || {},\n            defaults.datasets[type] || {},\n            {\n                type\n            },\n            defaults,\n            descriptors\n        ];\n    }\n resolveNamedOptions(scopes, names, context, prefixes = [\n        ''\n    ]) {\n        const result = {\n            $shared: true\n        };\n        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);\n        let options = resolver;\n        if (needContext(resolver, names)) {\n            result.$shared = false;\n            context = isFunction(context) ? context() : context;\n            const subResolver = this.createResolver(scopes, context, subPrefixes);\n            options = _attachContext(resolver, context, subResolver);\n        }\n        for (const prop of names){\n            result[prop] = options[prop];\n        }\n        return result;\n    }\n createResolver(scopes, context, prefixes = [\n        ''\n    ], descriptorDefaults) {\n        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);\n        return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n    }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n    let cache = resolverCache.get(scopes);\n    if (!cache) {\n        cache = new Map();\n        resolverCache.set(scopes, cache);\n    }\n    const cacheKey = prefixes.join();\n    let cached = cache.get(cacheKey);\n    if (!cached) {\n        const resolver = _createResolver(scopes, prefixes);\n        cached = {\n            resolver,\n            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n        };\n        cache.set(cacheKey, cached);\n    }\n    return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n    const { isScriptable , isIndexable  } = _descriptors(proxy);\n    for (const prop of names){\n        const scriptable = isScriptable(prop);\n        const indexable = isIndexable(prop);\n        const value = (indexable || scriptable) && proxy[prop];\n        if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar version = \"4.5.1\";\n\nconst KNOWN_POSITIONS = [\n    'top',\n    'bottom',\n    'left',\n    'right',\n    'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n    return function(a, b) {\n        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n    };\n}\nfunction onAnimationsComplete(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    chart.notifyPlugins('afterRender');\n    callback(animationOptions && animationOptions.onComplete, [\n        context\n    ], chart);\n}\nfunction onAnimationProgress(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    callback(animationOptions && animationOptions.onProgress, [\n        context\n    ], chart);\n}\n function getCanvas(item) {\n    if (_isDomSupported() && typeof item === 'string') {\n        item = document.getElementById(item);\n    } else if (item && item.length) {\n        item = item[0];\n    }\n    if (item && item.canvas) {\n        item = item.canvas;\n    }\n    return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n    const canvas = getCanvas(key);\n    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n    const keys = Object.keys(obj);\n    for (const key of keys){\n        const intKey = +key;\n        if (intKey >= start) {\n            const value = obj[key];\n            delete obj[key];\n            if (move > 0 || intKey > start) {\n                obj[intKey + move] = value;\n            }\n        }\n    }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n    if (!inChartArea || e.type === 'mouseout') {\n        return null;\n    }\n    if (isClick) {\n        return lastEvent;\n    }\n    return e;\n}\nclass Chart {\n    static defaults = defaults;\n    static instances = instances;\n    static overrides = overrides;\n    static registry = registry;\n    static version = version;\n    static getChart = getChart;\n    static register(...items) {\n        registry.add(...items);\n        invalidatePlugins();\n    }\n    static unregister(...items) {\n        registry.remove(...items);\n        invalidatePlugins();\n    }\n    constructor(item, userConfig){\n        const config = this.config = new Config(userConfig);\n        const initialCanvas = getCanvas(item);\n        const existingChart = getChart(initialCanvas);\n        if (existingChart) {\n            throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n        }\n        const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n        this.platform.updateConfig(config);\n        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n        const canvas = context && context.canvas;\n        const height = canvas && canvas.height;\n        const width = canvas && canvas.width;\n        this.id = uid();\n        this.ctx = context;\n        this.canvas = canvas;\n        this.width = width;\n        this.height = height;\n        this._options = options;\n        this._aspectRatio = this.aspectRatio;\n        this._layers = [];\n        this._metasets = [];\n        this._stacks = undefined;\n        this.boxes = [];\n        this.currentDevicePixelRatio = undefined;\n        this.chartArea = undefined;\n        this._active = [];\n        this._lastEvent = undefined;\n        this._listeners = {};\n         this._responsiveListeners = undefined;\n        this._sortedMetasets = [];\n        this.scales = {};\n        this._plugins = new PluginService();\n        this.$proxies = {};\n        this._hiddenIndices = {};\n        this.attached = false;\n        this._animationsDisabled = undefined;\n        this.$context = undefined;\n        this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n        this._dataChanges = [];\n        instances[this.id] = this;\n        if (!context || !canvas) {\n            console.error(\"Failed to create chart: can't acquire context from the given item\");\n            return;\n        }\n        animator.listen(this, 'complete', onAnimationsComplete);\n        animator.listen(this, 'progress', onAnimationProgress);\n        this._initialize();\n        if (this.attached) {\n            this.update();\n        }\n    }\n    get aspectRatio() {\n        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;\n        if (!isNullOrUndef(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (maintainAspectRatio && _aspectRatio) {\n            return _aspectRatio;\n        }\n        return height ? width / height : null;\n    }\n    get data() {\n        return this.config.data;\n    }\n    set data(data) {\n        this.config.data = data;\n    }\n    get options() {\n        return this._options;\n    }\n    set options(options) {\n        this.config.options = options;\n    }\n    get registry() {\n        return registry;\n    }\n _initialize() {\n        this.notifyPlugins('beforeInit');\n        if (this.options.responsive) {\n            this.resize();\n        } else {\n            retinaScale(this, this.options.devicePixelRatio);\n        }\n        this.bindEvents();\n        this.notifyPlugins('afterInit');\n        return this;\n    }\n    clear() {\n        clearCanvas(this.canvas, this.ctx);\n        return this;\n    }\n    stop() {\n        animator.stop(this);\n        return this;\n    }\n resize(width, height) {\n        if (!animator.running(this)) {\n            this._resize(width, height);\n        } else {\n            this._resizeBeforeDraw = {\n                width,\n                height\n            };\n        }\n    }\n    _resize(width, height) {\n        const options = this.options;\n        const canvas = this.canvas;\n        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n        const mode = this.width ? 'resize' : 'attach';\n        this.width = newSize.width;\n        this.height = newSize.height;\n        this._aspectRatio = this.aspectRatio;\n        if (!retinaScale(this, newRatio, true)) {\n            return;\n        }\n        this.notifyPlugins('resize', {\n            size: newSize\n        });\n        callback(options.onResize, [\n            this,\n            newSize\n        ], this);\n        if (this.attached) {\n            if (this._doResize(mode)) {\n                this.render();\n            }\n        }\n    }\n    ensureScalesHaveIDs() {\n        const options = this.options;\n        const scalesOptions = options.scales || {};\n        each(scalesOptions, (axisOptions, axisID)=>{\n            axisOptions.id = axisID;\n        });\n    }\n buildOrUpdateScales() {\n        const options = this.options;\n        const scaleOpts = options.scales;\n        const scales = this.scales;\n        const updated = Object.keys(scales).reduce((obj, id)=>{\n            obj[id] = false;\n            return obj;\n        }, {});\n        let items = [];\n        if (scaleOpts) {\n            items = items.concat(Object.keys(scaleOpts).map((id)=>{\n                const scaleOptions = scaleOpts[id];\n                const axis = determineAxis(id, scaleOptions);\n                const isRadial = axis === 'r';\n                const isHorizontal = axis === 'x';\n                return {\n                    options: scaleOptions,\n                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n                };\n            }));\n        }\n        each(items, (item)=>{\n            const scaleOptions = item.options;\n            const id = scaleOptions.id;\n            const axis = determineAxis(id, scaleOptions);\n            const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n                scaleOptions.position = item.dposition;\n            }\n            updated[id] = true;\n            let scale = null;\n            if (id in scales && scales[id].type === scaleType) {\n                scale = scales[id];\n            } else {\n                const scaleClass = registry.getScale(scaleType);\n                scale = new scaleClass({\n                    id,\n                    type: scaleType,\n                    ctx: this.ctx,\n                    chart: this\n                });\n                scales[scale.id] = scale;\n            }\n            scale.init(scaleOptions, options);\n        });\n        each(updated, (hasUpdated, id)=>{\n            if (!hasUpdated) {\n                delete scales[id];\n            }\n        });\n        each(scales, (scale)=>{\n            layouts.configure(this, scale, scale.options);\n            layouts.addBox(this, scale);\n        });\n    }\n _updateMetasets() {\n        const metasets = this._metasets;\n        const numData = this.data.datasets.length;\n        const numMeta = metasets.length;\n        metasets.sort((a, b)=>a.index - b.index);\n        if (numMeta > numData) {\n            for(let i = numData; i < numMeta; ++i){\n                this._destroyDatasetMeta(i);\n            }\n            metasets.splice(numData, numMeta - numData);\n        }\n        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n    }\n _removeUnreferencedMetasets() {\n        const { _metasets: metasets , data: { datasets  }  } = this;\n        if (metasets.length > datasets.length) {\n            delete this._stacks;\n        }\n        metasets.forEach((meta, index)=>{\n            if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n                this._destroyDatasetMeta(index);\n            }\n        });\n    }\n    buildOrUpdateControllers() {\n        const newControllers = [];\n        const datasets = this.data.datasets;\n        let i, ilen;\n        this._removeUnreferencedMetasets();\n        for(i = 0, ilen = datasets.length; i < ilen; i++){\n            const dataset = datasets[i];\n            let meta = this.getDatasetMeta(i);\n            const type = dataset.type || this.config.type;\n            if (meta.type && meta.type !== type) {\n                this._destroyDatasetMeta(i);\n                meta = this.getDatasetMeta(i);\n            }\n            meta.type = type;\n            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n            meta.order = dataset.order || 0;\n            meta.index = i;\n            meta.label = '' + dataset.label;\n            meta.visible = this.isDatasetVisible(i);\n            if (meta.controller) {\n                meta.controller.updateIndex(i);\n                meta.controller.linkScales();\n            } else {\n                const ControllerClass = registry.getController(type);\n                const { datasetElementType , dataElementType  } = defaults.datasets[type];\n                Object.assign(ControllerClass, {\n                    dataElementType: registry.getElement(dataElementType),\n                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n                });\n                meta.controller = new ControllerClass(this, i);\n                newControllers.push(meta.controller);\n            }\n        }\n        this._updateMetasets();\n        return newControllers;\n    }\n _resetElements() {\n        each(this.data.datasets, (dataset, datasetIndex)=>{\n            this.getDatasetMeta(datasetIndex).controller.reset();\n        }, this);\n    }\n reset() {\n        this._resetElements();\n        this.notifyPlugins('reset');\n    }\n    update(mode) {\n        const config = this.config;\n        config.update();\n        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        const animsDisabled = this._animationsDisabled = !options.animation;\n        this._updateScales();\n        this._checkEventBindings();\n        this._updateHiddenIndices();\n        this._plugins.invalidate();\n        if (this.notifyPlugins('beforeUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const newControllers = this.buildOrUpdateControllers();\n        this.notifyPlugins('beforeElementsUpdate');\n        let minPadding = 0;\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n            const { controller  } = this.getDatasetMeta(i);\n            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n            controller.buildOrUpdateElements(reset);\n            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n        }\n        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n        this._updateLayout(minPadding);\n        if (!animsDisabled) {\n            each(newControllers, (controller)=>{\n                controller.reset();\n            });\n        }\n        this._updateDatasets(mode);\n        this.notifyPlugins('afterUpdate', {\n            mode\n        });\n        this._layers.sort(compare2Level('z', '_idx'));\n        const { _active , _lastEvent  } = this;\n        if (_lastEvent) {\n            this._eventHandler(_lastEvent, true);\n        } else if (_active.length) {\n            this._updateHoverStyles(_active, _active, true);\n        }\n        this.render();\n    }\n _updateScales() {\n        each(this.scales, (scale)=>{\n            layouts.removeBox(this, scale);\n        });\n        this.ensureScalesHaveIDs();\n        this.buildOrUpdateScales();\n    }\n _checkEventBindings() {\n        const options = this.options;\n        const existingEvents = new Set(Object.keys(this._listeners));\n        const newEvents = new Set(options.events);\n        if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n            this.unbindEvents();\n            this.bindEvents();\n        }\n    }\n _updateHiddenIndices() {\n        const { _hiddenIndices  } = this;\n        const changes = this._getUniformDataChanges() || [];\n        for (const { method , start , count  } of changes){\n            const move = method === '_removeElements' ? -count : count;\n            moveNumericKeys(_hiddenIndices, start, move);\n        }\n    }\n _getUniformDataChanges() {\n        const _dataChanges = this._dataChanges;\n        if (!_dataChanges || !_dataChanges.length) {\n            return;\n        }\n        this._dataChanges = [];\n        const datasetCount = this.data.datasets.length;\n        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n        const changeSet = makeSet(0);\n        for(let i = 1; i < datasetCount; i++){\n            if (!setsEqual(changeSet, makeSet(i))) {\n                return;\n            }\n        }\n        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n                method: a[1],\n                start: +a[2],\n                count: +a[3]\n            }));\n    }\n _updateLayout(minPadding) {\n        if (this.notifyPlugins('beforeLayout', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        layouts.update(this, this.width, this.height, minPadding);\n        const area = this.chartArea;\n        const noArea = area.width <= 0 || area.height <= 0;\n        this._layers = [];\n        each(this.boxes, (box)=>{\n            if (noArea && box.position === 'chartArea') {\n                return;\n            }\n            if (box.configure) {\n                box.configure();\n            }\n            this._layers.push(...box._layers());\n        }, this);\n        this._layers.forEach((item, index)=>{\n            item._idx = index;\n        });\n        this.notifyPlugins('afterLayout');\n    }\n _updateDatasets(mode) {\n        if (this.notifyPlugins('beforeDatasetsUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this.getDatasetMeta(i).controller.configure();\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._updateDataset(i, isFunction(mode) ? mode({\n                datasetIndex: i\n            }) : mode);\n        }\n        this.notifyPlugins('afterDatasetsUpdate', {\n            mode\n        });\n    }\n _updateDataset(index, mode) {\n        const meta = this.getDatasetMeta(index);\n        const args = {\n            meta,\n            index,\n            mode,\n            cancelable: true\n        };\n        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n            return;\n        }\n        meta.controller._update(mode);\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetUpdate', args);\n    }\n    render() {\n        if (this.notifyPlugins('beforeRender', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        if (animator.has(this)) {\n            if (this.attached && !animator.running(this)) {\n                animator.start(this);\n            }\n        } else {\n            this.draw();\n            onAnimationsComplete({\n                chart: this\n            });\n        }\n    }\n    draw() {\n        let i;\n        if (this._resizeBeforeDraw) {\n            const { width , height  } = this._resizeBeforeDraw;\n            this._resizeBeforeDraw = null;\n            this._resize(width, height);\n        }\n        this.clear();\n        if (this.width <= 0 || this.height <= 0) {\n            return;\n        }\n        if (this.notifyPlugins('beforeDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const layers = this._layers;\n        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this._drawDatasets();\n        for(; i < layers.length; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this.notifyPlugins('afterDraw');\n    }\n _getSortedDatasetMetas(filterVisible) {\n        const metasets = this._sortedMetasets;\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metasets.length; i < ilen; ++i){\n            const meta = metasets[i];\n            if (!filterVisible || meta.visible) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n getSortedVisibleDatasetMetas() {\n        return this._getSortedDatasetMetas(true);\n    }\n _drawDatasets() {\n        if (this.notifyPlugins('beforeDatasetsDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const metasets = this.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            this._drawDataset(metasets[i]);\n        }\n        this.notifyPlugins('afterDatasetsDraw');\n    }\n _drawDataset(meta) {\n        const ctx = this.ctx;\n        const args = {\n            meta,\n            index: meta.index,\n            cancelable: true\n        };\n        const clip = getDatasetClipArea(this, meta);\n        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n            return;\n        }\n        if (clip) {\n            clipArea(ctx, clip);\n        }\n        meta.controller.draw();\n        if (clip) {\n            unclipArea(ctx);\n        }\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetDraw', args);\n    }\n isPointInArea(point) {\n        return _isPointInArea(point, this.chartArea, this._minPadding);\n    }\n    getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n        const method = Interaction.modes[mode];\n        if (typeof method === 'function') {\n            return method(this, e, options, useFinalPosition);\n        }\n        return [];\n    }\n    getDatasetMeta(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        const metasets = this._metasets;\n        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n        if (!meta) {\n            meta = {\n                type: null,\n                data: [],\n                dataset: null,\n                controller: null,\n                hidden: null,\n                xAxisID: null,\n                yAxisID: null,\n                order: dataset && dataset.order || 0,\n                index: datasetIndex,\n                _dataset: dataset,\n                _parsed: [],\n                _sorted: false\n            };\n            metasets.push(meta);\n        }\n        return meta;\n    }\n    getContext() {\n        return this.$context || (this.$context = createContext(null, {\n            chart: this,\n            type: 'chart'\n        }));\n    }\n    getVisibleDatasetCount() {\n        return this.getSortedVisibleDatasetMetas().length;\n    }\n    isDatasetVisible(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        if (!dataset) {\n            return false;\n        }\n        const meta = this.getDatasetMeta(datasetIndex);\n        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n    }\n    setDatasetVisibility(datasetIndex, visible) {\n        const meta = this.getDatasetMeta(datasetIndex);\n        meta.hidden = !visible;\n    }\n    toggleDataVisibility(index) {\n        this._hiddenIndices[index] = !this._hiddenIndices[index];\n    }\n    getDataVisibility(index) {\n        return !this._hiddenIndices[index];\n    }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n        const mode = visible ? 'show' : 'hide';\n        const meta = this.getDatasetMeta(datasetIndex);\n        const anims = meta.controller._resolveAnimations(undefined, mode);\n        if (defined(dataIndex)) {\n            meta.data[dataIndex].hidden = !visible;\n            this.update();\n        } else {\n            this.setDatasetVisibility(datasetIndex, visible);\n            anims.update(meta, {\n                visible\n            });\n            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n        }\n    }\n    hide(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, false);\n    }\n    show(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, true);\n    }\n _destroyDatasetMeta(datasetIndex) {\n        const meta = this._metasets[datasetIndex];\n        if (meta && meta.controller) {\n            meta.controller._destroy();\n        }\n        delete this._metasets[datasetIndex];\n    }\n    _stop() {\n        let i, ilen;\n        this.stop();\n        animator.remove(this);\n        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._destroyDatasetMeta(i);\n        }\n    }\n    destroy() {\n        this.notifyPlugins('beforeDestroy');\n        const { canvas , ctx  } = this;\n        this._stop();\n        this.config.clearCache();\n        if (canvas) {\n            this.unbindEvents();\n            clearCanvas(canvas, ctx);\n            this.platform.releaseContext(ctx);\n            this.canvas = null;\n            this.ctx = null;\n        }\n        delete instances[this.id];\n        this.notifyPlugins('afterDestroy');\n    }\n    toBase64Image(...args) {\n        return this.canvas.toDataURL(...args);\n    }\n bindEvents() {\n        this.bindUserEvents();\n        if (this.options.responsive) {\n            this.bindResponsiveEvents();\n        } else {\n            this.attached = true;\n        }\n    }\n bindUserEvents() {\n        const listeners = this._listeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const listener = (e, x, y)=>{\n            e.offsetX = x;\n            e.offsetY = y;\n            this._eventHandler(e);\n        };\n        each(this.options.events, (type)=>_add(type, listener));\n    }\n bindResponsiveEvents() {\n        if (!this._responsiveListeners) {\n            this._responsiveListeners = {};\n        }\n        const listeners = this._responsiveListeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const _remove = (type, listener)=>{\n            if (listeners[type]) {\n                platform.removeEventListener(this, type, listener);\n                delete listeners[type];\n            }\n        };\n        const listener = (width, height)=>{\n            if (this.canvas) {\n                this.resize(width, height);\n            }\n        };\n        let detached;\n        const attached = ()=>{\n            _remove('attach', attached);\n            this.attached = true;\n            this.resize();\n            _add('resize', listener);\n            _add('detach', detached);\n        };\n        detached = ()=>{\n            this.attached = false;\n            _remove('resize', listener);\n            this._stop();\n            this._resize(0, 0);\n            _add('attach', attached);\n        };\n        if (platform.isAttached(this.canvas)) {\n            attached();\n        } else {\n            detached();\n        }\n    }\n unbindEvents() {\n        each(this._listeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._listeners = {};\n        each(this._responsiveListeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._responsiveListeners = undefined;\n    }\n    updateHoverStyle(items, mode, enabled) {\n        const prefix = enabled ? 'set' : 'remove';\n        let meta, item, i, ilen;\n        if (mode === 'dataset') {\n            meta = this.getDatasetMeta(items[0].datasetIndex);\n            meta.controller['_' + prefix + 'DatasetHoverStyle']();\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            item = items[i];\n            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n            if (controller) {\n                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n            }\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements) {\n        const lastActive = this._active || [];\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('No dataset found at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed) {\n            this._active = active;\n            this._lastEvent = null;\n            this._updateHoverStyles(active, lastActive);\n        }\n    }\n notifyPlugins(hook, args, filter) {\n        return this._plugins.notify(this, hook, args, filter);\n    }\n isPluginEnabled(pluginId) {\n        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n    }\n _updateHoverStyles(active, lastActive, replay) {\n        const hoverOptions = this.options.hover;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n        const deactivated = diff(lastActive, active);\n        const activated = replay ? active : diff(active, lastActive);\n        if (deactivated.length) {\n            this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n        }\n        if (activated.length && hoverOptions.mode) {\n            this.updateHoverStyle(activated, hoverOptions.mode, true);\n        }\n    }\n _eventHandler(e, replay) {\n        const args = {\n            event: e,\n            replay,\n            cancelable: true,\n            inChartArea: this.isPointInArea(e)\n        };\n        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n            return;\n        }\n        const changed = this._handleEvent(e, replay, args.inChartArea);\n        args.cancelable = false;\n        this.notifyPlugins('afterEvent', args, eventFilter);\n        if (changed || args.changed) {\n            this.render();\n        }\n        return this;\n    }\n _handleEvent(e, replay, inChartArea) {\n        const { _active: lastActive = [] , options  } = this;\n        const useFinalPosition = replay;\n        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n        const isClick = _isClickEvent(e);\n        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n        if (inChartArea) {\n            this._lastEvent = null;\n            callback(options.onHover, [\n                e,\n                active,\n                this\n            ], this);\n            if (isClick) {\n                callback(options.onClick, [\n                    e,\n                    active,\n                    this\n                ], this);\n            }\n        }\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed || replay) {\n            this._active = active;\n            this._updateHoverStyles(active, lastActive, replay);\n        }\n        this._lastEvent = lastEvent;\n        return changed;\n    }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive;\n        }\n        const hoverOptions = this.options.hover;\n        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n    }\n}\nfunction invalidatePlugins() {\n    return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipSelf(ctx, element, endAngle) {\n    const { startAngle , x , y , outerRadius , innerRadius , options  } = element;\n    const { borderWidth , borderJoinStyle  } = options;\n    const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n    if (innerRadius > 0) {\n        const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n        ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n    } else {\n        const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n        if (borderJoinStyle === 'round') {\n            ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n        } else if (borderJoinStyle === 'bevel') {\n            const r = 2 * clipWidth * clipWidth;\n            const endX = -r * Math.cos(endAngle + PI / 2) + x;\n            const endY = -r * Math.sin(endAngle + PI / 2) + y;\n            const startX = r * Math.cos(startAngle + PI / 2) + x;\n            const startY = r * Math.sin(startAngle + PI / 2) + y;\n            ctx.lineTo(endX, endY);\n            ctx.lineTo(startX, startY);\n        }\n    }\n    ctx.closePath();\n    ctx.moveTo(0, 0);\n    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n    ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;\n    let angleMargin = pixelMargin / outerRadius;\n    // Draw an inner border by clipping the arc and drawing a double-width border\n    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n    if (innerRadius > pixelMargin) {\n        angleMargin = pixelMargin / innerRadius;\n        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n    } else {\n        ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n    }\n    ctx.closePath();\n    ctx.clip();\n}\nfunction toRadiusCorners(value) {\n    return _readValueToProps(value, [\n        'outerStart',\n        'outerEnd',\n        'innerStart',\n        'innerEnd'\n    ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n    const o = toRadiusCorners(arc.options.borderRadius);\n    const halfThickness = (outerRadius - innerRadius) / 2;\n    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n    // Outer limits are complicated. We want to compute the available angular distance at\n    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n    //\n    // If the borderRadius is large, that value can become negative.\n    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n    // we know that the thickness term will dominate and compute the limits at that point\n    const computeOuterLimit = (val)=>{\n        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n        return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n    };\n    return {\n        outerStart: computeOuterLimit(o.outerStart),\n        outerEnd: computeOuterLimit(o.outerEnd),\n        innerStart: _limitValue(o.innerStart, 0, innerLimit),\n        innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n    };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n    return {\n        x: x + r * Math.cos(theta),\n        y: y + r * Math.sin(theta)\n    };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;\n    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n    let spacingOffset = 0;\n    const alpha = end - start;\n    if (spacing) {\n        // When spacing is present, it is the same for all items\n        // So we adjust the start and end angle of the arc such that\n        // the distance is the same as it would be without the spacing\n        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n        spacingOffset = (alpha - adjustedAngle) / 2;\n    }\n    const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n    const angleOffset = (alpha - beta) / 2;\n    const startAngle = start + angleOffset + spacingOffset;\n    const endAngle = end - angleOffset - spacingOffset;\n    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n    const outerStartAdjustedRadius = outerRadius - outerStart;\n    const outerEndAdjustedRadius = outerRadius - outerEnd;\n    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n    const innerStartAdjustedRadius = innerRadius + innerStart;\n    const innerEndAdjustedRadius = innerRadius + innerEnd;\n    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n    ctx.beginPath();\n    if (circular) {\n        // The first arc segments from point 1 to point a to point 2\n        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n        // The corner segment from point 2 to point 3\n        if (outerEnd > 0) {\n            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n        }\n        // The line from point 3 to point 4\n        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n        ctx.lineTo(p4.x, p4.y);\n        // The corner segment from point 4 to point 5\n        if (innerEnd > 0) {\n            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n        }\n        // The inner arc from point 5 to point b to point 6\n        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n        // The corner segment from point 6 to point 7\n        if (innerStart > 0) {\n            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n        }\n        // The line from point 7 to point 8\n        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n        ctx.lineTo(p8.x, p8.y);\n        // The corner segment from point 8 to point 1\n        if (outerStart > 0) {\n            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n        }\n    } else {\n        ctx.moveTo(x, y);\n        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerStartX, outerStartY);\n        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerEndX, outerEndY);\n    }\n    ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference  } = element;\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.fill();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.fill();\n    return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference , options  } = element;\n    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius  } = options;\n    const inner = options.borderAlign === 'inner';\n    if (!borderWidth) {\n        return;\n    }\n    ctx.setLineDash(borderDash || []);\n    ctx.lineDashOffset = borderDashOffset;\n    if (inner) {\n        ctx.lineWidth = borderWidth * 2;\n        ctx.lineJoin = borderJoinStyle || 'round';\n    } else {\n        ctx.lineWidth = borderWidth;\n        ctx.lineJoin = borderJoinStyle || 'bevel';\n    }\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.stroke();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    if (inner) {\n        clipArc(ctx, element, endAngle);\n    }\n    if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n        clipSelf(ctx, element, endAngle);\n    }\n    if (!fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        ctx.stroke();\n    }\n}\nclass ArcElement extends Element {\n    static id = 'arc';\n    static defaults = {\n        borderAlign: 'center',\n        borderColor: '#fff',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: undefined,\n        borderRadius: 0,\n        borderWidth: 2,\n        offset: 0,\n        spacing: 0,\n        angle: undefined,\n        circular: true,\n        selfJoin: false\n    };\n    static defaultRoutes = {\n        backgroundColor: 'backgroundColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash'\n    };\n    circumference;\n    endAngle;\n    fullCircles;\n    innerRadius;\n    outerRadius;\n    pixelMargin;\n    startAngle;\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.circumference = undefined;\n        this.startAngle = undefined;\n        this.endAngle = undefined;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.pixelMargin = 0;\n        this.fullCircles = 0;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(chartX, chartY, useFinalPosition) {\n        const point = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        const { angle , distance  } = getAngleFromPoint(point, {\n            x: chartX,\n            y: chartY\n        });\n        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius',\n            'circumference'\n        ], useFinalPosition);\n        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n        const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n        const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n        const betweenAngles = _circumference >= TAU || nonZeroBetween;\n        const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n        return betweenAngles && withinRadius;\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([\n            'x',\n            'y',\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius'\n        ], useFinalPosition);\n        const { offset , spacing  } = this.options;\n        const halfAngle = (startAngle + endAngle) / 2;\n        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n        return {\n            x: x + Math.cos(halfAngle) * halfRadius,\n            y: y + Math.sin(halfAngle) * halfRadius\n        };\n    }\n    tooltipPosition(useFinalPosition) {\n        return this.getCenterPoint(useFinalPosition);\n    }\n    draw(ctx) {\n        const { options , circumference  } = this;\n        const offset = (options.offset || 0) / 4;\n        const spacing = (options.spacing || 0) / 2;\n        const circular = options.circular;\n        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n        this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n            return;\n        }\n        ctx.save();\n        const halfAngle = (this.startAngle + this.endAngle) / 2;\n        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n        const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n        const radiusOffset = offset * fix;\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        drawArc(ctx, this, radiusOffset, spacing, circular);\n        drawBorder(ctx, this, radiusOffset, spacing, circular);\n        ctx.restore();\n    }\n}\n\nfunction setStyle(ctx, options, style = options) {\n    ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n    ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n    ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n    ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n    ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n    ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n    ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n    if (options.stepped) {\n        return _steppedLineTo;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierCurveTo;\n    }\n    return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n    const count = points.length;\n    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;\n    const { start: segmentStart , end: segmentEnd  } = segment;\n    const start = Math.max(paramsStart, segmentStart);\n    const end = Math.min(paramsEnd, segmentEnd);\n    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n    return {\n        count,\n        start,\n        loop: segment.loop,\n        ilen: end < start && !outside ? count + end - start : end - start\n    };\n}\n function pathSegment(ctx, line, segment, params) {\n    const { points , options  } = line;\n    const { count , start , loop , ilen  } = pathVars(points, segment, params);\n    const lineMethod = getLineMethod(options);\n    let { move =true , reverse  } = params || {};\n    let i, point, prev;\n    for(i = 0; i <= ilen; ++i){\n        point = points[(start + (reverse ? ilen - i : i)) % count];\n        if (point.skip) {\n            continue;\n        } else if (move) {\n            ctx.moveTo(point.x, point.y);\n            move = false;\n        } else {\n            lineMethod(ctx, prev, point, reverse, options.stepped);\n        }\n        prev = point;\n    }\n    if (loop) {\n        point = points[(start + (reverse ? ilen : 0)) % count];\n        lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n    const points = line.points;\n    const { count , start , ilen  } = pathVars(points, segment, params);\n    const { move =true , reverse  } = params || {};\n    let avgX = 0;\n    let countX = 0;\n    let i, point, prevX, minY, maxY, lastY;\n    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n    const drawX = ()=>{\n        if (minY !== maxY) {\n            ctx.lineTo(avgX, maxY);\n            ctx.lineTo(avgX, minY);\n            ctx.lineTo(avgX, lastY);\n        }\n    };\n    if (move) {\n        point = points[pointIndex(0)];\n        ctx.moveTo(point.x, point.y);\n    }\n    for(i = 0; i <= ilen; ++i){\n        point = points[pointIndex(i)];\n        if (point.skip) {\n            continue;\n        }\n        const x = point.x;\n        const y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n            } else if (y > maxY) {\n                maxY = y;\n            }\n            avgX = (countX * avgX + x) / ++countX;\n        } else {\n            drawX();\n            ctx.lineTo(x, y);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n        }\n        lastY = y;\n    }\n    drawX();\n}\n function _getSegmentMethod(line) {\n    const opts = line.options;\n    const borderDash = opts.borderDash && opts.borderDash.length;\n    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n    return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n    if (options.stepped) {\n        return _steppedInterpolation;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierInterpolation;\n    }\n    return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n    let path = line._path;\n    if (!path) {\n        path = line._path = new Path2D();\n        if (line.path(path, start, count)) {\n            path.closePath();\n        }\n    }\n    setStyle(ctx, line.options);\n    ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n    const { segments , options  } = line;\n    const segmentMethod = _getSegmentMethod(line);\n    for (const segment of segments){\n        setStyle(ctx, options, segment.style);\n        ctx.beginPath();\n        if (segmentMethod(ctx, line, segment, {\n            start,\n            end: start + count - 1\n        })) {\n            ctx.closePath();\n        }\n        ctx.stroke();\n    }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n    if (usePath2D && !line.options.segment) {\n        strokePathWithCache(ctx, line, start, count);\n    } else {\n        strokePathDirect(ctx, line, start, count);\n    }\n}\nclass LineElement extends Element {\n    static id = 'line';\n static defaults = {\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: 'miter',\n        borderWidth: 3,\n        capBezierPoints: true,\n        cubicInterpolationMode: 'default',\n        fill: false,\n        spanGaps: false,\n        stepped: false,\n        tension: 0\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n    };\n    constructor(cfg){\n        super();\n        this.animated = true;\n        this.options = undefined;\n        this._chart = undefined;\n        this._loop = undefined;\n        this._fullLoop = undefined;\n        this._path = undefined;\n        this._points = undefined;\n        this._segments = undefined;\n        this._decimated = false;\n        this._pointsUpdated = false;\n        this._datasetIndex = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    updateControlPoints(chartArea, indexAxis) {\n        const options = this.options;\n        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n            const loop = options.spanGaps ? this._loop : this._fullLoop;\n            _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n            this._pointsUpdated = true;\n        }\n    }\n    set points(points) {\n        this._points = points;\n        delete this._segments;\n        delete this._path;\n        this._pointsUpdated = false;\n    }\n    get points() {\n        return this._points;\n    }\n    get segments() {\n        return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n    }\n first() {\n        const segments = this.segments;\n        const points = this.points;\n        return segments.length && points[segments[0].start];\n    }\n last() {\n        const segments = this.segments;\n        const points = this.points;\n        const count = segments.length;\n        return count && points[segments[count - 1].end];\n    }\n interpolate(point, property) {\n        const options = this.options;\n        const value = point[property];\n        const points = this.points;\n        const segments = _boundSegments(this, {\n            property,\n            start: value,\n            end: value\n        });\n        if (!segments.length) {\n            return;\n        }\n        const result = [];\n        const _interpolate = _getInterpolationMethod(options);\n        let i, ilen;\n        for(i = 0, ilen = segments.length; i < ilen; ++i){\n            const { start , end  } = segments[i];\n            const p1 = points[start];\n            const p2 = points[end];\n            if (p1 === p2) {\n                result.push(p1);\n                continue;\n            }\n            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n            const interpolated = _interpolate(p1, p2, t, options.stepped);\n            interpolated[property] = point[property];\n            result.push(interpolated);\n        }\n        return result.length === 1 ? result[0] : result;\n    }\n pathSegment(ctx, segment, params) {\n        const segmentMethod = _getSegmentMethod(this);\n        return segmentMethod(ctx, this, segment, params);\n    }\n path(ctx, start, count) {\n        const segments = this.segments;\n        const segmentMethod = _getSegmentMethod(this);\n        let loop = this._loop;\n        start = start || 0;\n        count = count || this.points.length - start;\n        for (const segment of segments){\n            loop &= segmentMethod(ctx, this, segment, {\n                start,\n                end: start + count - 1\n            });\n        }\n        return !!loop;\n    }\n draw(ctx, chartArea, start, count) {\n        const options = this.options || {};\n        const points = this.points || [];\n        if (points.length && options.borderWidth) {\n            ctx.save();\n            draw(ctx, this, start, count);\n            ctx.restore();\n        }\n        if (this.animated) {\n            this._pointsUpdated = false;\n            this._path = undefined;\n        }\n    }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n    const options = el.options;\n    const { [axis]: value  } = el.getProps([\n        axis\n    ], useFinalPosition);\n    return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n    static id = 'point';\n    parsed;\n    skip;\n    stop;\n    /**\n   * @type {any}\n   */ static defaults = {\n        borderWidth: 1,\n        hitRadius: 1,\n        hoverBorderWidth: 1,\n        hoverRadius: 4,\n        pointStyle: 'circle',\n        radius: 3,\n        rotation: 0\n    };\n    /**\n   * @type {any}\n   */ static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.parsed = undefined;\n        this.skip = undefined;\n        this.stop = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        const options = this.options;\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange$1(this, mouseX, 'x', useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange$1(this, mouseY, 'y', useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    size(options) {\n        options = options || this.options || {};\n        let radius = options.radius || 0;\n        radius = Math.max(radius, radius && options.hoverRadius || 0);\n        const borderWidth = radius && options.borderWidth || 0;\n        return (radius + borderWidth) * 2;\n    }\n    draw(ctx, area) {\n        const options = this.options;\n        if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n            return;\n        }\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.fillStyle = options.backgroundColor;\n        drawPoint(ctx, options, this.x, this.y);\n    }\n    getRange() {\n        const options = this.options || {};\n        // @ts-expect-error Fallbacks should never be hit in practice\n        return options.radius + options.hitRadius;\n    }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n    const { x , y , base , width , height  } =  bar.getProps([\n        'x',\n        'y',\n        'base',\n        'width',\n        'height'\n    ], useFinalPosition);\n    let left, right, top, bottom, half;\n    if (bar.horizontal) {\n        half = height / 2;\n        left = Math.min(x, base);\n        right = Math.max(x, base);\n        top = y - half;\n        bottom = y + half;\n    } else {\n        half = width / 2;\n        left = x - half;\n        right = x + half;\n        top = Math.min(y, base);\n        bottom = Math.max(y, base);\n    }\n    return {\n        left,\n        top,\n        right,\n        bottom\n    };\n}\nfunction skipOrLimit(skip, value, min, max) {\n    return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n    const value = bar.options.borderWidth;\n    const skip = bar.borderSkipped;\n    const o = toTRBL(value);\n    return {\n        t: skipOrLimit(skip.top, o.top, 0, maxH),\n        r: skipOrLimit(skip.right, o.right, 0, maxW),\n        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n        l: skipOrLimit(skip.left, o.left, 0, maxW)\n    };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n    const { enableBorderRadius  } = bar.getProps([\n        'enableBorderRadius'\n    ]);\n    const value = bar.options.borderRadius;\n    const o = toTRBLCorners(value);\n    const maxR = Math.min(maxW, maxH);\n    const skip = bar.borderSkipped;\n    const enableBorder = enableBorderRadius || isObject(value);\n    return {\n        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n    };\n}\nfunction boundingRects(bar) {\n    const bounds = getBarBounds(bar);\n    const width = bounds.right - bounds.left;\n    const height = bounds.bottom - bounds.top;\n    const border = parseBorderWidth(bar, width / 2, height / 2);\n    const radius = parseBorderRadius(bar, width / 2, height / 2);\n    return {\n        outer: {\n            x: bounds.left,\n            y: bounds.top,\n            w: width,\n            h: height,\n            radius\n        },\n        inner: {\n            x: bounds.left + border.l,\n            y: bounds.top + border.t,\n            w: width - border.l - border.r,\n            h: height - border.t - border.b,\n            radius: {\n                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n            }\n        }\n    };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n    const skipX = x === null;\n    const skipY = y === null;\n    const skipBoth = skipX && skipY;\n    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n    return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n    ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n    const x = rect.x !== refRect.x ? -amount : 0;\n    const y = rect.y !== refRect.y ? -amount : 0;\n    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n    return {\n        x: rect.x + x,\n        y: rect.y + y,\n        w: rect.w + w,\n        h: rect.h + h,\n        radius: rect.radius\n    };\n}\nclass BarElement extends Element {\n    static id = 'bar';\n static defaults = {\n        borderSkipped: 'start',\n        borderWidth: 0,\n        borderRadius: 0,\n        inflateAmount: 'auto',\n        pointStyle: undefined\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.horizontal = undefined;\n        this.base = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.inflateAmount = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    draw(ctx) {\n        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;\n        const { inner , outer  } = boundingRects(this);\n        const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n        ctx.save();\n        if (outer.w !== inner.w || outer.h !== inner.h) {\n            ctx.beginPath();\n            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n            ctx.clip();\n            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n            ctx.fillStyle = borderColor;\n            ctx.fill('evenodd');\n        }\n        ctx.beginPath();\n        addRectPath(ctx, inflateRect(inner, inflateAmount));\n        ctx.fillStyle = backgroundColor;\n        ctx.fill();\n        ctx.restore();\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        return inRange(this, mouseX, mouseY, useFinalPosition);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange(this, mouseX, null, useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange(this, null, mouseY, useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , base , horizontal  } =  this.getProps([\n            'x',\n            'y',\n            'base',\n            'horizontal'\n        ], useFinalPosition);\n        return {\n            x: horizontal ? (x + base) / 2 : x,\n            y: horizontal ? y : (y + base) / 2\n        };\n    }\n    getRange(axis) {\n        return axis === 'x' ? this.width / 2 : this.height / 2;\n    }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n    'rgb(54, 162, 235)',\n    'rgb(255, 99, 132)',\n    'rgb(255, 159, 64)',\n    'rgb(255, 205, 86)',\n    'rgb(75, 192, 192)',\n    'rgb(153, 102, 255)',\n    'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n    return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n    dataset.borderColor = getBorderColor(i);\n    dataset.backgroundColor = getBackgroundColor(i);\n    return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n    return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n    return i;\n}\nfunction getColorizer(chart) {\n    let i = 0;\n    return (dataset, datasetIndex)=>{\n        const controller = chart.getDatasetMeta(datasetIndex).controller;\n        if (controller instanceof DoughnutController) {\n            i = colorizeDoughnutDataset(dataset, i);\n        } else if (controller instanceof PolarAreaController) {\n            i = colorizePolarAreaDataset(dataset, i);\n        } else if (controller) {\n            i = colorizeDefaultDataset(dataset, i);\n        }\n    };\n}\nfunction containsColorsDefinitions(descriptors) {\n    let k;\n    for(k in descriptors){\n        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction containsColorsDefinition(descriptor) {\n    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n    return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n    id: 'colors',\n    defaults: {\n        enabled: true,\n        forceOverride: false\n    },\n    beforeLayout (chart, _args, options) {\n        if (!options.enabled) {\n            return;\n        }\n        const { data: { datasets  } , options: chartOptions  } = chart.config;\n        const { elements  } = chartOptions;\n        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n        if (!options.forceOverride && containsColorDefenition) {\n            return;\n        }\n        const colorizer = getColorizer(chart);\n        datasets.forEach(colorizer);\n    }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n    if (samples >= count) {\n        return data.slice(start, start + count);\n    }\n    const decimated = [];\n    const bucketWidth = (count - 2) / (samples - 2);\n    let sampledIndex = 0;\n    const endIndex = start + count - 1;\n    let a = start;\n    let i, maxAreaPoint, maxArea, area, nextA;\n    decimated[sampledIndex++] = data[a];\n    for(i = 0; i < samples - 2; i++){\n        let avgX = 0;\n        let avgY = 0;\n        let j;\n        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n        const avgRangeLength = avgRangeEnd - avgRangeStart;\n        for(j = avgRangeStart; j < avgRangeEnd; j++){\n            avgX += data[j].x;\n            avgY += data[j].y;\n        }\n        avgX /= avgRangeLength;\n        avgY /= avgRangeLength;\n        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n        const { x: pointAx , y: pointAy  } = data[a];\n        maxArea = area = -1;\n        for(j = rangeOffs; j < rangeTo; j++){\n            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n            if (area > maxArea) {\n                maxArea = area;\n                maxAreaPoint = data[j];\n                nextA = j;\n            }\n        }\n        decimated[sampledIndex++] = maxAreaPoint;\n        a = nextA;\n    }\n    decimated[sampledIndex++] = data[endIndex];\n    return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n    let avgX = 0;\n    let countX = 0;\n    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n    const decimated = [];\n    const endIndex = start + count - 1;\n    const xMin = data[start].x;\n    const xMax = data[endIndex].x;\n    const dx = xMax - xMin;\n    for(i = start; i < start + count; ++i){\n        point = data[i];\n        x = (point.x - xMin) / dx * availableWidth;\n        y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n                minIndex = i;\n            } else if (y > maxY) {\n                maxY = y;\n                maxIndex = i;\n            }\n            avgX = (countX * avgX + point.x) / ++countX;\n        } else {\n            const lastIndex = i - 1;\n            if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n                const intermediateIndex1 = Math.min(minIndex, maxIndex);\n                const intermediateIndex2 = Math.max(minIndex, maxIndex);\n                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex1],\n                        x: avgX\n                    });\n                }\n                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex2],\n                        x: avgX\n                    });\n                }\n            }\n            if (i > 0 && lastIndex !== startIndex) {\n                decimated.push(data[lastIndex]);\n            }\n            decimated.push(point);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n            minIndex = maxIndex = startIndex = i;\n        }\n    }\n    return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n    if (dataset._decimated) {\n        const data = dataset._data;\n        delete dataset._decimated;\n        delete dataset._data;\n        Object.defineProperty(dataset, 'data', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: data\n        });\n    }\n}\nfunction cleanDecimatedData(chart) {\n    chart.data.datasets.forEach((dataset)=>{\n        cleanDecimatedDataset(dataset);\n    });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n    const pointCount = points.length;\n    let start = 0;\n    let count;\n    const { iScale  } = meta;\n    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n    if (minDefined) {\n        start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n        count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n    } else {\n        count = pointCount - start;\n    }\n    return {\n        start,\n        count\n    };\n}\nvar plugin_decimation = {\n    id: 'decimation',\n    defaults: {\n        algorithm: 'min-max',\n        enabled: false\n    },\n    beforeElementsUpdate: (chart, args, options)=>{\n        if (!options.enabled) {\n            cleanDecimatedData(chart);\n            return;\n        }\n        const availableWidth = chart.width;\n        chart.data.datasets.forEach((dataset, datasetIndex)=>{\n            const { _data , indexAxis  } = dataset;\n            const meta = chart.getDatasetMeta(datasetIndex);\n            const data = _data || dataset.data;\n            if (resolve([\n                indexAxis,\n                chart.options.indexAxis\n            ]) === 'y') {\n                return;\n            }\n            if (!meta.controller.supportsDecimation) {\n                return;\n            }\n            const xAxis = chart.scales[meta.xAxisID];\n            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n                return;\n            }\n            if (chart.options.parsing) {\n                return;\n            }\n            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n            const threshold = options.threshold || 4 * availableWidth;\n            if (count <= threshold) {\n                cleanDecimatedDataset(dataset);\n                return;\n            }\n            if (isNullOrUndef(_data)) {\n                dataset._data = data;\n                delete dataset.data;\n                Object.defineProperty(dataset, 'data', {\n                    configurable: true,\n                    enumerable: true,\n                    get: function() {\n                        return this._decimated;\n                    },\n                    set: function(d) {\n                        this._data = d;\n                    }\n                });\n            }\n            let decimated;\n            switch(options.algorithm){\n                case 'lttb':\n                    decimated = lttbDecimation(data, start, count, availableWidth, options);\n                    break;\n                case 'min-max':\n                    decimated = minMaxDecimation(data, start, count, availableWidth);\n                    break;\n                default:\n                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n            }\n            dataset._decimated = decimated;\n        });\n    },\n    destroy (chart) {\n        cleanDecimatedData(chart);\n    }\n};\n\nfunction _segments(line, target, property) {\n    const segments = line.segments;\n    const points = line.points;\n    const tpoints = target.points;\n    const parts = [];\n    for (const segment of segments){\n        let { start , end  } = segment;\n        end = _findSegmentEnd(start, end, points);\n        const bounds = _getBounds(property, points[start], points[end], segment.loop);\n        if (!target.segments) {\n            parts.push({\n                source: segment,\n                target: bounds,\n                start: points[start],\n                end: points[end]\n            });\n            continue;\n        }\n        const targetSegments = _boundSegments(target, bounds);\n        for (const tgt of targetSegments){\n            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n            const fillSources = _boundSegment(segment, points, subBounds);\n            for (const fillSource of fillSources){\n                parts.push({\n                    source: fillSource,\n                    target: tgt,\n                    start: {\n                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n                    },\n                    end: {\n                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n                    }\n                });\n            }\n        }\n    }\n    return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n    if (loop) {\n        return;\n    }\n    let start = first[property];\n    let end = last[property];\n    if (property === 'angle') {\n        start = _normalizeAngle(start);\n        end = _normalizeAngle(end);\n    }\n    return {\n        property,\n        start,\n        end\n    };\n}\nfunction _pointsFromSegments(boundary, line) {\n    const { x =null , y =null  } = boundary || {};\n    const linePoints = line.points;\n    const points = [];\n    line.segments.forEach(({ start , end  })=>{\n        end = _findSegmentEnd(start, end, linePoints);\n        const first = linePoints[start];\n        const last = linePoints[end];\n        if (y !== null) {\n            points.push({\n                x: first.x,\n                y\n            });\n            points.push({\n                x: last.x,\n                y\n            });\n        } else if (x !== null) {\n            points.push({\n                x,\n                y: first.y\n            });\n            points.push({\n                x,\n                y: last.y\n            });\n        }\n    });\n    return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n    for(; end > start; end--){\n        const point = points[end];\n        if (!isNaN(point.x) && !isNaN(point.y)) {\n            break;\n        }\n    }\n    return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n    if (a && b) {\n        return fn(a[prop], b[prop]);\n    }\n    return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n    let points = [];\n    let _loop = false;\n    if (isArray(boundary)) {\n        _loop = true;\n        points = boundary;\n    } else {\n        points = _pointsFromSegments(boundary, line);\n    }\n    return points.length ? new LineElement({\n        points,\n        options: {\n            tension: 0\n        },\n        _loop,\n        _fullLoop: _loop\n    }) : null;\n}\nfunction _shouldApplyFill(source) {\n    return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n    const source = sources[index];\n    let fill = source.fill;\n    const visited = [\n        index\n    ];\n    let target;\n    if (!propagate) {\n        return fill;\n    }\n    while(fill !== false && visited.indexOf(fill) === -1){\n        if (!isNumberFinite(fill)) {\n            return fill;\n        }\n        target = sources[fill];\n        if (!target) {\n            return false;\n        }\n        if (target.visible) {\n            return fill;\n        }\n        visited.push(fill);\n        fill = target.fill;\n    }\n    return false;\n}\n function _decodeFill(line, index, count) {\n     const fill = parseFillOption(line);\n    if (isObject(fill)) {\n        return isNaN(fill.value) ? false : fill;\n    }\n    let target = parseFloat(fill);\n    if (isNumberFinite(target) && Math.floor(target) === target) {\n        return decodeTargetIndex(fill[0], index, target, count);\n    }\n    return [\n        'origin',\n        'start',\n        'end',\n        'stack',\n        'shape'\n    ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n    if (firstCh === '-' || firstCh === '+') {\n        target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n        return false;\n    }\n    return target;\n}\n function _getTargetPixel(fill, scale) {\n    let pixel = null;\n    if (fill === 'start') {\n        pixel = scale.bottom;\n    } else if (fill === 'end') {\n        pixel = scale.top;\n    } else if (isObject(fill)) {\n        pixel = scale.getPixelForValue(fill.value);\n    } else if (scale.getBasePixel) {\n        pixel = scale.getBasePixel();\n    }\n    return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n    let value;\n    if (fill === 'start') {\n        value = startValue;\n    } else if (fill === 'end') {\n        value = scale.options.reverse ? scale.min : scale.max;\n    } else if (isObject(fill)) {\n        value = fill.value;\n    } else {\n        value = scale.getBaseValue();\n    }\n    return value;\n}\n function parseFillOption(line) {\n    const options = line.options;\n    const fillOption = options.fill;\n    let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n    if (fill === undefined) {\n        fill = !!options.backgroundColor;\n    }\n    if (fill === false || fill === null) {\n        return false;\n    }\n    if (fill === true) {\n        return 'origin';\n    }\n    return fill;\n}\n\nfunction _buildStackLine(source) {\n    const { scale , index , line  } = source;\n    const points = [];\n    const segments = line.segments;\n    const sourcePoints = line.points;\n    const linesBelow = getLinesBelow(scale, index);\n    linesBelow.push(_createBoundaryLine({\n        x: null,\n        y: scale.bottom\n    }, line));\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        for(let j = segment.start; j <= segment.end; j++){\n            addPointsBelow(points, sourcePoints[j], linesBelow);\n        }\n    }\n    return new LineElement({\n        points,\n        options: {}\n    });\n}\n function getLinesBelow(scale, index) {\n    const below = [];\n    const metas = scale.getMatchingVisibleMetas('line');\n    for(let i = 0; i < metas.length; i++){\n        const meta = metas[i];\n        if (meta.index === index) {\n            break;\n        }\n        if (!meta.hidden) {\n            below.unshift(meta.dataset);\n        }\n    }\n    return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n    const postponed = [];\n    for(let j = 0; j < linesBelow.length; j++){\n        const line = linesBelow[j];\n        const { first , last , point  } = findPoint(line, sourcePoint, 'x');\n        if (!point || first && last) {\n            continue;\n        }\n        if (first) {\n            postponed.unshift(point);\n        } else {\n            points.push(point);\n            if (!last) {\n                break;\n            }\n        }\n    }\n    points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n    const point = line.interpolate(sourcePoint, property);\n    if (!point) {\n        return {};\n    }\n    const pointValue = point[property];\n    const segments = line.segments;\n    const linePoints = line.points;\n    let first = false;\n    let last = false;\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        const firstValue = linePoints[segment.start][property];\n        const lastValue = linePoints[segment.end][property];\n        if (_isBetween(pointValue, firstValue, lastValue)) {\n            first = pointValue === firstValue;\n            last = pointValue === lastValue;\n            break;\n        }\n    }\n    return {\n        first,\n        last,\n        point\n    };\n}\n\nclass simpleArc {\n    constructor(opts){\n        this.x = opts.x;\n        this.y = opts.y;\n        this.radius = opts.radius;\n    }\n    pathSegment(ctx, bounds, opts) {\n        const { x , y , radius  } = this;\n        bounds = bounds || {\n            start: 0,\n            end: TAU\n        };\n        ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n        return !opts.bounds;\n    }\n    interpolate(point) {\n        const { x , y , radius  } = this;\n        const angle = point.angle;\n        return {\n            x: x + Math.cos(angle) * radius,\n            y: y + Math.sin(angle) * radius,\n            angle\n        };\n    }\n}\n\nfunction _getTarget(source) {\n    const { chart , fill , line  } = source;\n    if (isNumberFinite(fill)) {\n        return getLineByIndex(chart, fill);\n    }\n    if (fill === 'stack') {\n        return _buildStackLine(source);\n    }\n    if (fill === 'shape') {\n        return true;\n    }\n    const boundary = computeBoundary(source);\n    if (boundary instanceof simpleArc) {\n        return boundary;\n    }\n    return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n    const meta = chart.getDatasetMeta(index);\n    const visible = meta && chart.isDatasetVisible(index);\n    return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n    const scale = source.scale || {};\n    if (scale.getPointPositionForValue) {\n        return computeCircularBoundary(source);\n    }\n    return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n    const { scale ={} , fill  } = source;\n    const pixel = _getTargetPixel(fill, scale);\n    if (isNumberFinite(pixel)) {\n        const horizontal = scale.isHorizontal();\n        return {\n            x: horizontal ? pixel : null,\n            y: horizontal ? null : pixel\n        };\n    }\n    return null;\n}\nfunction computeCircularBoundary(source) {\n    const { scale , fill  } = source;\n    const options = scale.options;\n    const length = scale.getLabels().length;\n    const start = options.reverse ? scale.max : scale.min;\n    const value = _getTargetValue(fill, scale, start);\n    const target = [];\n    if (options.grid.circular) {\n        const center = scale.getPointPositionForValue(0, start);\n        return new simpleArc({\n            x: center.x,\n            y: center.y,\n            radius: scale.getDistanceFromCenterForValue(value)\n        });\n    }\n    for(let i = 0; i < length; ++i){\n        target.push(scale.getPointPositionForValue(i, value));\n    }\n    return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n    const target = _getTarget(source);\n    const { chart , index , line , scale , axis  } = source;\n    const lineOpts = line.options;\n    const fillOption = lineOpts.fill;\n    const color = lineOpts.backgroundColor;\n    const { above =color , below =color  } = fillOption || {};\n    const meta = chart.getDatasetMeta(index);\n    const clip = getDatasetClipArea(chart, meta);\n    if (target && line.points.length) {\n        clipArea(ctx, area);\n        doFill(ctx, {\n            line,\n            target,\n            above,\n            below,\n            area,\n            scale,\n            axis,\n            clip\n        });\n        unclipArea(ctx);\n    }\n}\nfunction doFill(ctx, cfg) {\n    const { line , target , above , below , area , scale , clip  } = cfg;\n    const property = line._loop ? 'angle' : cfg.axis;\n    ctx.save();\n    let fillColor = below;\n    if (below !== above) {\n        if (property === 'x') {\n            clipVertical(ctx, target, area.top);\n            fill(ctx, {\n                line,\n                target,\n                color: above,\n                scale,\n                property,\n                clip\n            });\n            ctx.restore();\n            ctx.save();\n            clipVertical(ctx, target, area.bottom);\n        } else if (property === 'y') {\n            clipHorizontal(ctx, target, area.left);\n            fill(ctx, {\n                line,\n                target,\n                color: below,\n                scale,\n                property,\n                clip\n            });\n            ctx.restore();\n            ctx.save();\n            clipHorizontal(ctx, target, area.right);\n            fillColor = above;\n        }\n    }\n    fill(ctx, {\n        line,\n        target,\n        color: fillColor,\n        scale,\n        property,\n        clip\n    });\n    ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(firstPoint.x, clipY);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(lastPoint.x, clipY);\n        }\n    }\n    ctx.lineTo(target.first().x, clipY);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(clipX, firstPoint.y);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(clipX, lastPoint.y);\n        }\n    }\n    ctx.lineTo(clipX, target.first().y);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction fill(ctx, cfg) {\n    const { line , target , property , color , scale , clip  } = cfg;\n    const segments = _segments(line, target, property);\n    for (const { source: src , target: tgt , start , end  } of segments){\n        const { style: { backgroundColor =color  } = {}  } = src;\n        const notShape = target !== true;\n        ctx.save();\n        ctx.fillStyle = backgroundColor;\n        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n        ctx.beginPath();\n        const lineLoop = !!line.pathSegment(ctx, src);\n        let loop;\n        if (notShape) {\n            if (lineLoop) {\n                ctx.closePath();\n            } else {\n                interpolatedLineTo(ctx, target, end, property);\n            }\n            const targetLoop = !!target.pathSegment(ctx, tgt, {\n                move: lineLoop,\n                reverse: true\n            });\n            loop = lineLoop && targetLoop;\n            if (!loop) {\n                interpolatedLineTo(ctx, target, start, property);\n            }\n        }\n        ctx.closePath();\n        ctx.fill(loop ? 'evenodd' : 'nonzero');\n        ctx.restore();\n    }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n    const chartArea = scale.chart.chartArea;\n    const { property , start , end  } = bounds || {};\n    if (property === 'x' || property === 'y') {\n        let left, top, right, bottom;\n        if (property === 'x') {\n            left = start;\n            top = chartArea.top;\n            right = end;\n            bottom = chartArea.bottom;\n        } else {\n            left = chartArea.left;\n            top = start;\n            right = chartArea.right;\n            bottom = end;\n        }\n        ctx.beginPath();\n        if (clip) {\n            left = Math.max(left, clip.left);\n            right = Math.min(right, clip.right);\n            top = Math.max(top, clip.top);\n            bottom = Math.min(bottom, clip.bottom);\n        }\n        ctx.rect(left, top, right - left, bottom - top);\n        ctx.clip();\n    }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n    const interpolatedPoint = target.interpolate(point, property);\n    if (interpolatedPoint) {\n        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n    }\n}\n\nvar index = {\n    id: 'filler',\n    afterDatasetsUpdate (chart, _args, options) {\n        const count = (chart.data.datasets || []).length;\n        const sources = [];\n        let meta, i, line, source;\n        for(i = 0; i < count; ++i){\n            meta = chart.getDatasetMeta(i);\n            line = meta.dataset;\n            source = null;\n            if (line && line.options && line instanceof LineElement) {\n                source = {\n                    visible: chart.isDatasetVisible(i),\n                    index: i,\n                    fill: _decodeFill(line, i, count),\n                    chart,\n                    axis: meta.controller.options.indexAxis,\n                    scale: meta.vScale,\n                    line\n                };\n            }\n            meta.$filler = source;\n            sources.push(source);\n        }\n        for(i = 0; i < count; ++i){\n            source = sources[i];\n            if (!source || source.fill === false) {\n                continue;\n            }\n            source.fill = _resolveTarget(sources, i, options.propagate);\n        }\n    },\n    beforeDraw (chart, _args, options) {\n        const draw = options.drawTime === 'beforeDraw';\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        const area = chart.chartArea;\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (!source) {\n                continue;\n            }\n            source.line.updateControlPoints(area, source.axis);\n            if (draw && source.fill) {\n                _drawfill(chart.ctx, source, area);\n            }\n        }\n    },\n    beforeDatasetsDraw (chart, _args, options) {\n        if (options.drawTime !== 'beforeDatasetsDraw') {\n            return;\n        }\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (_shouldApplyFill(source)) {\n                _drawfill(chart.ctx, source, chart.chartArea);\n            }\n        }\n    },\n    beforeDatasetDraw (chart, args, options) {\n        const source = args.meta.$filler;\n        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n            return;\n        }\n        _drawfill(chart.ctx, source, chart.chartArea);\n    },\n    defaults: {\n        propagate: true,\n        drawTime: 'beforeDatasetDraw'\n    }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;\n    if (labelOpts.usePointStyle) {\n        boxHeight = Math.min(boxHeight, fontSize);\n        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n    }\n    return {\n        boxWidth,\n        boxHeight,\n        itemHeight: Math.max(fontSize, boxHeight)\n    };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n        super();\n        this._added = false;\n        this.legendHitBoxes = [];\n this._hoveredItem = null;\n        this.doughnutMode = false;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this.legendItems = undefined;\n        this.columnSizes = undefined;\n        this.lineWidths = undefined;\n        this.maxHeight = undefined;\n        this.maxWidth = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this._margins = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight, margins) {\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins;\n        this.setDimensions();\n        this.buildLabels();\n        this.fit();\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = this._margins.left;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = this._margins.top;\n            this.bottom = this.height;\n        }\n    }\n    buildLabels() {\n        const labelOpts = this.options.labels || {};\n        let legendItems = callback(labelOpts.generateLabels, [\n            this.chart\n        ], this) || [];\n        if (labelOpts.filter) {\n            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n        }\n        if (labelOpts.sort) {\n            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n        }\n        if (this.options.reverse) {\n            legendItems.reverse();\n        }\n        this.legendItems = legendItems;\n    }\n    fit() {\n        const { options , ctx  } = this;\n        if (!options.display) {\n            this.width = this.height = 0;\n            return;\n        }\n        const labelOpts = options.labels;\n        const labelFont = toFont(labelOpts.font);\n        const fontSize = labelFont.size;\n        const titleHeight = this._computeTitleHeight();\n        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        let width, height;\n        ctx.font = labelFont.string;\n        if (this.isHorizontal()) {\n            width = this.maxWidth;\n            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n        } else {\n            height = this.maxHeight;\n            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n        }\n        this.width = Math.min(width, options.maxWidth || this.maxWidth);\n        this.height = Math.min(height, options.maxHeight || this.maxHeight);\n    }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const lineWidths = this.lineWidths = [\n            0\n        ];\n        const lineHeight = itemHeight + padding;\n        let totalHeight = titleHeight;\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        let row = -1;\n        let top = -lineHeight;\n        this.legendItems.forEach((legendItem, i)=>{\n            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n                totalHeight += lineHeight;\n                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n                top += lineHeight;\n                row++;\n            }\n            hitboxes[i] = {\n                left: 0,\n                top,\n                row,\n                width: itemWidth,\n                height: itemHeight\n            };\n            lineWidths[lineWidths.length - 1] += itemWidth + padding;\n        });\n        return totalHeight;\n    }\n    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const columnSizes = this.columnSizes = [];\n        const heightLimit = maxHeight - titleHeight;\n        let totalWidth = padding;\n        let currentColWidth = 0;\n        let currentColHeight = 0;\n        let left = 0;\n        let col = 0;\n        this.legendItems.forEach((legendItem, i)=>{\n            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n                totalWidth += currentColWidth + padding;\n                columnSizes.push({\n                    width: currentColWidth,\n                    height: currentColHeight\n                });\n                left += currentColWidth + padding;\n                col++;\n                currentColWidth = currentColHeight = 0;\n            }\n            hitboxes[i] = {\n                left,\n                top: currentColHeight,\n                col,\n                width: itemWidth,\n                height: itemHeight\n            };\n            currentColWidth = Math.max(currentColWidth, itemWidth);\n            currentColHeight += itemHeight + padding;\n        });\n        totalWidth += currentColWidth;\n        columnSizes.push({\n            width: currentColWidth,\n            height: currentColHeight\n        });\n        return totalWidth;\n    }\n    adjustHitBoxes() {\n        if (!this.options.display) {\n            return;\n        }\n        const titleHeight = this._computeTitleHeight();\n        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;\n        const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n        if (this.isHorizontal()) {\n            let row = 0;\n            let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n            for (const hitbox of hitboxes){\n                if (row !== hitbox.row) {\n                    row = hitbox.row;\n                    left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n                }\n                hitbox.top += this.top + titleHeight + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n                left += hitbox.width + padding;\n            }\n        } else {\n            let col = 0;\n            let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n            for (const hitbox of hitboxes){\n                if (hitbox.col !== col) {\n                    col = hitbox.col;\n                    top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n                }\n                hitbox.top = top;\n                hitbox.left += this.left + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n                top += hitbox.height + padding;\n            }\n        }\n    }\n    isHorizontal() {\n        return this.options.position === 'top' || this.options.position === 'bottom';\n    }\n    draw() {\n        if (this.options.display) {\n            const ctx = this.ctx;\n            clipArea(ctx, this);\n            this._draw();\n            unclipArea(ctx);\n        }\n    }\n _draw() {\n        const { options: opts , columnSizes , lineWidths , ctx  } = this;\n        const { align , labels: labelOpts  } = opts;\n        const defaultColor = defaults.color;\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const labelFont = toFont(labelOpts.font);\n        const { padding  } = labelOpts;\n        const fontSize = labelFont.size;\n        const halfFontSize = fontSize / 2;\n        let cursor;\n        this.drawTitle();\n        ctx.textAlign = rtlHelper.textAlign('left');\n        ctx.textBaseline = 'middle';\n        ctx.lineWidth = 0.5;\n        ctx.font = labelFont.string;\n        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        const drawLegendBox = function(x, y, legendItem) {\n            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n                return;\n            }\n            ctx.save();\n            const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n            ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n            ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n            ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n            ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n            ctx.lineWidth = lineWidth;\n            ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n            ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n            if (labelOpts.usePointStyle) {\n                const drawOptions = {\n                    radius: boxHeight * Math.SQRT2 / 2,\n                    pointStyle: legendItem.pointStyle,\n                    rotation: legendItem.rotation,\n                    borderWidth: lineWidth\n                };\n                const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n                const centerY = y + halfFontSize;\n                drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n            } else {\n                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n                const borderRadius = toTRBLCorners(legendItem.borderRadius);\n                ctx.beginPath();\n                if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                    addRoundedRectPath(ctx, {\n                        x: xBoxLeft,\n                        y: yBoxTop,\n                        w: boxWidth,\n                        h: boxHeight,\n                        radius: borderRadius\n                    });\n                } else {\n                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n                }\n                ctx.fill();\n                if (lineWidth !== 0) {\n                    ctx.stroke();\n                }\n            }\n            ctx.restore();\n        };\n        const fillText = function(x, y, legendItem) {\n            renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n                strikethrough: legendItem.hidden,\n                textAlign: rtlHelper.textAlign(legendItem.textAlign)\n            });\n        };\n        const isHorizontal = this.isHorizontal();\n        const titleHeight = this._computeTitleHeight();\n        if (isHorizontal) {\n            cursor = {\n                x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n                y: this.top + padding + titleHeight,\n                line: 0\n            };\n        } else {\n            cursor = {\n                x: this.left + padding,\n                y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n                line: 0\n            };\n        }\n        overrideTextDirection(this.ctx, opts.textDirection);\n        const lineHeight = itemHeight + padding;\n        this.legendItems.forEach((legendItem, i)=>{\n            ctx.strokeStyle = legendItem.fontColor;\n            ctx.fillStyle = legendItem.fontColor;\n            const textWidth = ctx.measureText(legendItem.text).width;\n            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n            const width = boxWidth + halfFontSize + textWidth;\n            let x = cursor.x;\n            let y = cursor.y;\n            rtlHelper.setWidth(this.width);\n            if (isHorizontal) {\n                if (i > 0 && x + width + padding > this.right) {\n                    y = cursor.y += lineHeight;\n                    cursor.line++;\n                    x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n                }\n            } else if (i > 0 && y + lineHeight > this.bottom) {\n                x = cursor.x = x + columnSizes[cursor.line].width + padding;\n                cursor.line++;\n                y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n            }\n            const realX = rtlHelper.x(x);\n            drawLegendBox(realX, y, legendItem);\n            x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n            fillText(rtlHelper.x(x), y, legendItem);\n            if (isHorizontal) {\n                cursor.x += width + padding;\n            } else if (typeof legendItem.text !== 'string') {\n                const fontLineHeight = labelFont.lineHeight;\n                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n            } else {\n                cursor.y += lineHeight;\n            }\n        });\n        restoreTextDirection(this.ctx, opts.textDirection);\n    }\n drawTitle() {\n        const opts = this.options;\n        const titleOpts = opts.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        if (!titleOpts.display) {\n            return;\n        }\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const ctx = this.ctx;\n        const position = titleOpts.position;\n        const halfFontSize = titleFont.size / 2;\n        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n        let y;\n        let left = this.left;\n        let maxWidth = this.width;\n        if (this.isHorizontal()) {\n            maxWidth = Math.max(...this.lineWidths);\n            y = this.top + topPaddingPlusHalfFontSize;\n            left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n        } else {\n            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n            y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n        }\n        const x = _alignStartEnd(position, left, left + maxWidth);\n        ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n        ctx.textBaseline = 'middle';\n        ctx.strokeStyle = titleOpts.color;\n        ctx.fillStyle = titleOpts.color;\n        ctx.font = titleFont.string;\n        renderText(ctx, titleOpts.text, x, y, titleFont);\n    }\n _computeTitleHeight() {\n        const titleOpts = this.options.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n    }\n _getLegendItemAt(x, y) {\n        let i, hitBox, lh;\n        if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n            lh = this.legendHitBoxes;\n            for(i = 0; i < lh.length; ++i){\n                hitBox = lh[i];\n                if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n                    return this.legendItems[i];\n                }\n            }\n        }\n        return null;\n    }\n handleEvent(e) {\n        const opts = this.options;\n        if (!isListened(e.type, opts)) {\n            return;\n        }\n        const hoveredItem = this._getLegendItemAt(e.x, e.y);\n        if (e.type === 'mousemove' || e.type === 'mouseout') {\n            const previous = this._hoveredItem;\n            const sameItem = itemsEqual(previous, hoveredItem);\n            if (previous && !sameItem) {\n                callback(opts.onLeave, [\n                    e,\n                    previous,\n                    this\n                ], this);\n            }\n            this._hoveredItem = hoveredItem;\n            if (hoveredItem && !sameItem) {\n                callback(opts.onHover, [\n                    e,\n                    hoveredItem,\n                    this\n                ], this);\n            }\n        } else if (hoveredItem) {\n            callback(opts.onClick, [\n                e,\n                hoveredItem,\n                this\n            ], this);\n        }\n    }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n    return {\n        itemWidth,\n        itemHeight\n    };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n    let legendItemText = legendItem.text;\n    if (legendItemText && typeof legendItemText !== 'string') {\n        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n    }\n    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n    let itemHeight = _itemHeight;\n    if (typeof legendItem.text !== 'string') {\n        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n    }\n    return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n    const labelHeight = legendItem.text ? legendItem.text.length : 0;\n    return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n        return true;\n    }\n    if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n        return true;\n    }\n    return false;\n}\nvar plugin_legend = {\n    id: 'legend',\n _element: Legend,\n    start (chart, _args, options) {\n        const legend = chart.legend = new Legend({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, legend, options);\n        layouts.addBox(chart, legend);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, chart.legend);\n        delete chart.legend;\n    },\n    beforeUpdate (chart, _args, options) {\n        const legend = chart.legend;\n        layouts.configure(chart, legend, options);\n        legend.options = options;\n    },\n    afterUpdate (chart) {\n        const legend = chart.legend;\n        legend.buildLabels();\n        legend.adjustHitBoxes();\n    },\n    afterEvent (chart, args) {\n        if (!args.replay) {\n            chart.legend.handleEvent(args.event);\n        }\n    },\n    defaults: {\n        display: true,\n        position: 'top',\n        align: 'center',\n        fullSize: true,\n        reverse: false,\n        weight: 1000,\n        onClick (e, legendItem, legend) {\n            const index = legendItem.datasetIndex;\n            const ci = legend.chart;\n            if (ci.isDatasetVisible(index)) {\n                ci.hide(index);\n                legendItem.hidden = true;\n            } else {\n                ci.show(index);\n                legendItem.hidden = false;\n            }\n        },\n        onHover: null,\n        onLeave: null,\n        labels: {\n            color: (ctx)=>ctx.chart.options.color,\n            boxWidth: 40,\n            padding: 10,\n            generateLabels (chart) {\n                const datasets = chart.data.datasets;\n                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                return chart._getSortedDatasetMetas().map((meta)=>{\n                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n                    const borderWidth = toPadding(style.borderWidth);\n                    return {\n                        text: datasets[meta.index].label,\n                        fillStyle: style.backgroundColor,\n                        fontColor: color,\n                        hidden: !meta.visible,\n                        lineCap: style.borderCapStyle,\n                        lineDash: style.borderDash,\n                        lineDashOffset: style.borderDashOffset,\n                        lineJoin: style.borderJoinStyle,\n                        lineWidth: (borderWidth.width + borderWidth.height) / 4,\n                        strokeStyle: style.borderColor,\n                        pointStyle: pointStyle || style.pointStyle,\n                        rotation: style.rotation,\n                        textAlign: textAlign || style.textAlign,\n                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                        datasetIndex: meta.index\n                    };\n                }, this);\n            }\n        },\n        title: {\n            color: (ctx)=>ctx.chart.options.color,\n            display: false,\n            position: 'center',\n            text: ''\n        }\n    },\n    descriptors: {\n        _scriptable: (name)=>!name.startsWith('on'),\n        labels: {\n            _scriptable: (name)=>![\n                    'generateLabels',\n                    'filter',\n                    'sort'\n                ].includes(name)\n        }\n    }\n};\n\nclass Title extends Element {\n constructor(config){\n        super();\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this._padding = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight) {\n        const opts = this.options;\n        this.left = 0;\n        this.top = 0;\n        if (!opts.display) {\n            this.width = this.height = this.right = this.bottom = 0;\n            return;\n        }\n        this.width = this.right = maxWidth;\n        this.height = this.bottom = maxHeight;\n        const lineCount = isArray(opts.text) ? opts.text.length : 1;\n        this._padding = toPadding(opts.padding);\n        const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n        if (this.isHorizontal()) {\n            this.height = textSize;\n        } else {\n            this.width = textSize;\n        }\n    }\n    isHorizontal() {\n        const pos = this.options.position;\n        return pos === 'top' || pos === 'bottom';\n    }\n    _drawArgs(offset) {\n        const { top , left , bottom , right , options  } = this;\n        const align = options.align;\n        let rotation = 0;\n        let maxWidth, titleX, titleY;\n        if (this.isHorizontal()) {\n            titleX = _alignStartEnd(align, left, right);\n            titleY = top + offset;\n            maxWidth = right - left;\n        } else {\n            if (options.position === 'left') {\n                titleX = left + offset;\n                titleY = _alignStartEnd(align, bottom, top);\n                rotation = PI * -0.5;\n            } else {\n                titleX = right - offset;\n                titleY = _alignStartEnd(align, top, bottom);\n                rotation = PI * 0.5;\n            }\n            maxWidth = bottom - top;\n        }\n        return {\n            titleX,\n            titleY,\n            maxWidth,\n            rotation\n        };\n    }\n    draw() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        if (!opts.display) {\n            return;\n        }\n        const fontOpts = toFont(opts.font);\n        const lineHeight = fontOpts.lineHeight;\n        const offset = lineHeight / 2 + this._padding.top;\n        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);\n        renderText(ctx, opts.text, 0, 0, fontOpts, {\n            color: opts.color,\n            maxWidth,\n            rotation,\n            textAlign: _toLeftRightCenter(opts.align),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n}\nfunction createTitle(chart, titleOpts) {\n    const title = new Title({\n        ctx: chart.ctx,\n        options: titleOpts,\n        chart\n    });\n    layouts.configure(chart, title, titleOpts);\n    layouts.addBox(chart, title);\n    chart.titleBlock = title;\n}\nvar plugin_title = {\n    id: 'title',\n _element: Title,\n    start (chart, _args, options) {\n        createTitle(chart, options);\n    },\n    stop (chart) {\n        const titleBlock = chart.titleBlock;\n        layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = chart.titleBlock;\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'bold'\n        },\n        fullSize: true,\n        padding: 10,\n        position: 'top',\n        text: '',\n        weight: 2000\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n    id: 'subtitle',\n    start (chart, _args, options) {\n        const title = new Title({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, title, options);\n        layouts.addBox(chart, title);\n        map.set(chart, title);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, map.get(chart));\n        map.delete(chart);\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = map.get(chart);\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'normal'\n        },\n        fullSize: true,\n        padding: 0,\n        position: 'top',\n        text: '',\n        weight: 1500\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst positioners = {\n average (items) {\n        if (!items.length) {\n            return false;\n        }\n        let i, len;\n        let xSet = new Set();\n        let y = 0;\n        let count = 0;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const pos = el.tooltipPosition();\n                xSet.add(pos.x);\n                y += pos.y;\n                ++count;\n            }\n        }\n        if (count === 0 || xSet.size === 0) {\n            return false;\n        }\n        const xAverage = [\n            ...xSet\n        ].reduce((a, b)=>a + b) / xSet.size;\n        return {\n            x: xAverage,\n            y: y / count\n        };\n    },\n nearest (items, eventPosition) {\n        if (!items.length) {\n            return false;\n        }\n        let x = eventPosition.x;\n        let y = eventPosition.y;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let i, len, nearestElement;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const center = el.getCenterPoint();\n                const d = distanceBetweenPoints(eventPosition, center);\n                if (d < minDistance) {\n                    minDistance = d;\n                    nearestElement = el;\n                }\n            }\n        }\n        if (nearestElement) {\n            const tp = nearestElement.tooltipPosition();\n            x = tp.x;\n            y = tp.y;\n        }\n        return {\n            x,\n            y\n        };\n    }\n};\nfunction pushOrConcat(base, toPush) {\n    if (toPush) {\n        if (isArray(toPush)) {\n            Array.prototype.push.apply(base, toPush);\n        } else {\n            base.push(toPush);\n        }\n    }\n    return base;\n}\n function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n        return str.split('\\n');\n    }\n    return str;\n}\n function createTooltipItem(chart, item) {\n    const { element , datasetIndex , index  } = item;\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n    const { label , value  } = controller.getLabelAndValue(index);\n    return {\n        chart,\n        label,\n        parsed: controller.getParsed(index),\n        raw: chart.data.datasets[datasetIndex].data[index],\n        formattedValue: value,\n        dataset: controller.getDataset(),\n        dataIndex: index,\n        datasetIndex,\n        element\n    };\n}\n function getTooltipSize(tooltip, options) {\n    const ctx = tooltip.chart.ctx;\n    const { body , footer , title  } = tooltip;\n    const { boxWidth , boxHeight  } = options;\n    const bodyFont = toFont(options.bodyFont);\n    const titleFont = toFont(options.titleFont);\n    const footerFont = toFont(options.footerFont);\n    const titleLineCount = title.length;\n    const footerLineCount = footer.length;\n    const bodyLineItemCount = body.length;\n    const padding = toPadding(options.padding);\n    let height = padding.height;\n    let width = 0;\n    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n    if (titleLineCount) {\n        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n    }\n    if (combinedBodyLength) {\n        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n    }\n    if (footerLineCount) {\n        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n    }\n    let widthPadding = 0;\n    const maxLineWidth = function(line) {\n        width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n    ctx.save();\n    ctx.font = titleFont.string;\n    each(tooltip.title, maxLineWidth);\n    ctx.font = bodyFont.string;\n    each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n    each(body, (bodyItem)=>{\n        each(bodyItem.before, maxLineWidth);\n        each(bodyItem.lines, maxLineWidth);\n        each(bodyItem.after, maxLineWidth);\n    });\n    widthPadding = 0;\n    ctx.font = footerFont.string;\n    each(tooltip.footer, maxLineWidth);\n    ctx.restore();\n    width += padding.width;\n    return {\n        width,\n        height\n    };\n}\nfunction determineYAlign(chart, size) {\n    const { y , height  } = size;\n    if (y < height / 2) {\n        return 'top';\n    } else if (y > chart.height - height / 2) {\n        return 'bottom';\n    }\n    return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n    const { x , width  } = size;\n    const caret = options.caretSize + options.caretPadding;\n    if (xAlign === 'left' && x + width + caret > chart.width) {\n        return true;\n    }\n    if (xAlign === 'right' && x - width - caret < 0) {\n        return true;\n    }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n    const { x , width  } = size;\n    const { width: chartWidth , chartArea: { left , right  }  } = chart;\n    let xAlign = 'center';\n    if (yAlign === 'center') {\n        xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n    } else if (x <= width / 2) {\n        xAlign = 'left';\n    } else if (x >= chartWidth - width / 2) {\n        xAlign = 'right';\n    }\n    if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n        xAlign = 'center';\n    }\n    return xAlign;\n}\n function determineAlignment(chart, options, size) {\n    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n    return {\n        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n        yAlign\n    };\n}\nfunction alignX(size, xAlign) {\n    let { x , width  } = size;\n    if (xAlign === 'right') {\n        x -= width;\n    } else if (xAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n    let { y , height  } = size;\n    if (yAlign === 'top') {\n        y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n        y -= height + paddingAndSize;\n    } else {\n        y -= height / 2;\n    }\n    return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n    const { caretSize , caretPadding , cornerRadius  } = options;\n    const { xAlign , yAlign  } = alignment;\n    const paddingAndSize = caretSize + caretPadding;\n    const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n    let x = alignX(size, xAlign);\n    const y = alignY(size, yAlign, paddingAndSize);\n    if (yAlign === 'center') {\n        if (xAlign === 'left') {\n            x += paddingAndSize;\n        } else if (xAlign === 'right') {\n            x -= paddingAndSize;\n        }\n    } else if (xAlign === 'left') {\n        x -= Math.max(topLeft, bottomLeft) + caretSize;\n    } else if (xAlign === 'right') {\n        x += Math.max(topRight, bottomRight) + caretSize;\n    }\n    return {\n        x: _limitValue(x, 0, chart.width - size.width),\n        y: _limitValue(y, 0, chart.height - size.height)\n    };\n}\nfunction getAlignedX(tooltip, align, options) {\n    const padding = toPadding(options.padding);\n    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n    return createContext(parent, {\n        tooltip,\n        tooltipItems,\n        type: 'tooltip'\n    });\n}\nfunction overrideCallbacks(callbacks, context) {\n    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n    return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n    beforeTitle: noop,\n    title (tooltipItems) {\n        if (tooltipItems.length > 0) {\n            const item = tooltipItems[0];\n            const labels = item.chart.data.labels;\n            const labelCount = labels ? labels.length : 0;\n            if (this && this.options && this.options.mode === 'dataset') {\n                return item.dataset.label || '';\n            } else if (item.label) {\n                return item.label;\n            } else if (labelCount > 0 && item.dataIndex < labelCount) {\n                return labels[item.dataIndex];\n            }\n        }\n        return '';\n    },\n    afterTitle: noop,\n    beforeBody: noop,\n    beforeLabel: noop,\n    label (tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n            label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n            label += value;\n        }\n        return label;\n    },\n    labelColor (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            borderColor: options.borderColor,\n            backgroundColor: options.backgroundColor,\n            borderWidth: options.borderWidth,\n            borderDash: options.borderDash,\n            borderDashOffset: options.borderDashOffset,\n            borderRadius: 0\n        };\n    },\n    labelTextColor () {\n        return this.options.bodyColor;\n    },\n    labelPointStyle (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            pointStyle: options.pointStyle,\n            rotation: options.rotation\n        };\n    },\n    afterLabel: noop,\n    afterBody: noop,\n    beforeFooter: noop,\n    footer: noop,\n    afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n    const result = callbacks[name].call(ctx, arg);\n    if (typeof result === 'undefined') {\n        return defaultCallbacks[name].call(ctx, arg);\n    }\n    return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n    constructor(config){\n        super();\n        this.opacity = 0;\n        this._active = [];\n        this._eventPosition = undefined;\n        this._size = undefined;\n        this._cachedAnimations = undefined;\n        this._tooltipItems = [];\n        this.$animations = undefined;\n        this.$context = undefined;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.dataPoints = undefined;\n        this.title = undefined;\n        this.beforeBody = undefined;\n        this.body = undefined;\n        this.afterBody = undefined;\n        this.footer = undefined;\n        this.xAlign = undefined;\n        this.yAlign = undefined;\n        this.x = undefined;\n        this.y = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this.caretX = undefined;\n        this.caretY = undefined;\n        this.labelColors = undefined;\n        this.labelPointStyles = undefined;\n        this.labelTextColors = undefined;\n    }\n    initialize(options) {\n        this.options = options;\n        this._cachedAnimations = undefined;\n        this.$context = undefined;\n    }\n _resolveAnimations() {\n        const cached = this._cachedAnimations;\n        if (cached) {\n            return cached;\n        }\n        const chart = this.chart;\n        const options = this.options.setContext(this.getContext());\n        const opts = options.enabled && chart.options.animation && options.animations;\n        const animations = new Animations(this.chart, opts);\n        if (opts._cacheable) {\n            this._cachedAnimations = Object.freeze(animations);\n        }\n        return animations;\n    }\n getContext() {\n        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n    }\n    getTitle(context, options) {\n        const { callbacks  } = options;\n        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n        lines = pushOrConcat(lines, splitNewlines(title));\n        lines = pushOrConcat(lines, splitNewlines(afterTitle));\n        return lines;\n    }\n    getBeforeBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n    }\n    getBody(tooltipItems, options) {\n        const { callbacks  } = options;\n        const bodyItems = [];\n        each(tooltipItems, (context)=>{\n            const bodyItem = {\n                before: [],\n                lines: [],\n                after: []\n            };\n            const scoped = overrideCallbacks(callbacks, context);\n            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n            bodyItems.push(bodyItem);\n        });\n        return bodyItems;\n    }\n    getAfterBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n    }\n    getFooter(tooltipItems, options) {\n        const { callbacks  } = options;\n        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n        lines = pushOrConcat(lines, splitNewlines(footer));\n        lines = pushOrConcat(lines, splitNewlines(afterFooter));\n        return lines;\n    }\n _createItems(options) {\n        const active = this._active;\n        const data = this.chart.data;\n        const labelColors = [];\n        const labelPointStyles = [];\n        const labelTextColors = [];\n        let tooltipItems = [];\n        let i, len;\n        for(i = 0, len = active.length; i < len; ++i){\n            tooltipItems.push(createTooltipItem(this.chart, active[i]));\n        }\n        if (options.filter) {\n            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n        }\n        if (options.itemSort) {\n            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n        }\n        each(tooltipItems, (context)=>{\n            const scoped = overrideCallbacks(options.callbacks, context);\n            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n        });\n        this.labelColors = labelColors;\n        this.labelPointStyles = labelPointStyles;\n        this.labelTextColors = labelTextColors;\n        this.dataPoints = tooltipItems;\n        return tooltipItems;\n    }\n    update(changed, replay) {\n        const options = this.options.setContext(this.getContext());\n        const active = this._active;\n        let properties;\n        let tooltipItems = [];\n        if (!active.length) {\n            if (this.opacity !== 0) {\n                properties = {\n                    opacity: 0\n                };\n            }\n        } else {\n            const position = positioners[options.position].call(this, active, this._eventPosition);\n            tooltipItems = this._createItems(options);\n            this.title = this.getTitle(tooltipItems, options);\n            this.beforeBody = this.getBeforeBody(tooltipItems, options);\n            this.body = this.getBody(tooltipItems, options);\n            this.afterBody = this.getAfterBody(tooltipItems, options);\n            this.footer = this.getFooter(tooltipItems, options);\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, size);\n            const alignment = determineAlignment(this.chart, options, positionAndSize);\n            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n            this.xAlign = alignment.xAlign;\n            this.yAlign = alignment.yAlign;\n            properties = {\n                opacity: 1,\n                x: backgroundPoint.x,\n                y: backgroundPoint.y,\n                width: size.width,\n                height: size.height,\n                caretX: position.x,\n                caretY: position.y\n            };\n        }\n        this._tooltipItems = tooltipItems;\n        this.$context = undefined;\n        if (properties) {\n            this._resolveAnimations().update(this, properties);\n        }\n        if (changed && options.external) {\n            options.external.call(this, {\n                chart: this.chart,\n                tooltip: this,\n                replay\n            });\n        }\n    }\n    drawCaret(tooltipPoint, ctx, size, options) {\n        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n        ctx.lineTo(caretPosition.x1, caretPosition.y1);\n        ctx.lineTo(caretPosition.x2, caretPosition.y2);\n        ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    }\n    getCaretPosition(tooltipPoint, size, options) {\n        const { xAlign , yAlign  } = this;\n        const { caretSize , cornerRadius  } = options;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n        const { x: ptX , y: ptY  } = tooltipPoint;\n        const { width , height  } = size;\n        let x1, x2, x3, y1, y2, y3;\n        if (yAlign === 'center') {\n            y2 = ptY + height / 2;\n            if (xAlign === 'left') {\n                x1 = ptX;\n                x2 = x1 - caretSize;\n                y1 = y2 + caretSize;\n                y3 = y2 - caretSize;\n            } else {\n                x1 = ptX + width;\n                x2 = x1 + caretSize;\n                y1 = y2 - caretSize;\n                y3 = y2 + caretSize;\n            }\n            x3 = x1;\n        } else {\n            if (xAlign === 'left') {\n                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n            } else if (xAlign === 'right') {\n                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n            } else {\n                x2 = this.caretX;\n            }\n            if (yAlign === 'top') {\n                y1 = ptY;\n                y2 = y1 - caretSize;\n                x1 = x2 - caretSize;\n                x3 = x2 + caretSize;\n            } else {\n                y1 = ptY + height;\n                y2 = y1 + caretSize;\n                x1 = x2 + caretSize;\n                x3 = x2 - caretSize;\n            }\n            y3 = y1;\n        }\n        return {\n            x1,\n            x2,\n            x3,\n            y1,\n            y2,\n            y3\n        };\n    }\n    drawTitle(pt, ctx, options) {\n        const title = this.title;\n        const length = title.length;\n        let titleFont, titleSpacing, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.titleAlign, options);\n            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n            ctx.textBaseline = 'middle';\n            titleFont = toFont(options.titleFont);\n            titleSpacing = options.titleSpacing;\n            ctx.fillStyle = options.titleColor;\n            ctx.font = titleFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n                pt.y += titleFont.lineHeight + titleSpacing;\n                if (i + 1 === length) {\n                    pt.y += options.titleMarginBottom - titleSpacing;\n                }\n            }\n        }\n    }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n        const labelColor = this.labelColors[i];\n        const labelPointStyle = this.labelPointStyles[i];\n        const { boxHeight , boxWidth  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        const colorX = getAlignedX(this, 'left', options);\n        const rtlColorX = rtlHelper.x(colorX);\n        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n        const colorY = pt.y + yOffSet;\n        if (options.usePointStyle) {\n            const drawOptions = {\n                radius: Math.min(boxWidth, boxHeight) / 2,\n                pointStyle: labelPointStyle.pointStyle,\n                rotation: labelPointStyle.rotation,\n                borderWidth: 1\n            };\n            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n            const centerY = colorY + boxHeight / 2;\n            ctx.strokeStyle = options.multiKeyBackground;\n            ctx.fillStyle = options.multiKeyBackground;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.fillStyle = labelColor.backgroundColor;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n        } else {\n            ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.setLineDash(labelColor.borderDash || []);\n            ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n            const borderRadius = toTRBLCorners(labelColor.borderRadius);\n            if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                ctx.beginPath();\n                ctx.fillStyle = options.multiKeyBackground;\n                addRoundedRectPath(ctx, {\n                    x: outerX,\n                    y: colorY,\n                    w: boxWidth,\n                    h: boxHeight,\n                    radius: borderRadius\n                });\n                ctx.fill();\n                ctx.stroke();\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.beginPath();\n                addRoundedRectPath(ctx, {\n                    x: innerX,\n                    y: colorY + 1,\n                    w: boxWidth - 2,\n                    h: boxHeight - 2,\n                    radius: borderRadius\n                });\n                ctx.fill();\n            } else {\n                ctx.fillStyle = options.multiKeyBackground;\n                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n            }\n        }\n        ctx.fillStyle = this.labelTextColors[i];\n    }\n    drawBody(pt, ctx, options) {\n        const { body  } = this;\n        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        let bodyLineHeight = bodyFont.lineHeight;\n        let xLinePadding = 0;\n        const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n        const fillLineOfText = function(line) {\n            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n            pt.y += bodyLineHeight + bodySpacing;\n        };\n        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n        let bodyItem, textColor, lines, i, j, ilen, jlen;\n        ctx.textAlign = bodyAlign;\n        ctx.textBaseline = 'middle';\n        ctx.font = bodyFont.string;\n        pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n        ctx.fillStyle = options.bodyColor;\n        each(this.beforeBody, fillLineOfText);\n        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n        for(i = 0, ilen = body.length; i < ilen; ++i){\n            bodyItem = body[i];\n            textColor = this.labelTextColors[i];\n            ctx.fillStyle = textColor;\n            each(bodyItem.before, fillLineOfText);\n            lines = bodyItem.lines;\n            if (displayColors && lines.length) {\n                this._drawColorBox(ctx, pt, i, rtlHelper, options);\n                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n            }\n            for(j = 0, jlen = lines.length; j < jlen; ++j){\n                fillLineOfText(lines[j]);\n                bodyLineHeight = bodyFont.lineHeight;\n            }\n            each(bodyItem.after, fillLineOfText);\n        }\n        xLinePadding = 0;\n        bodyLineHeight = bodyFont.lineHeight;\n        each(this.afterBody, fillLineOfText);\n        pt.y -= bodySpacing;\n    }\n    drawFooter(pt, ctx, options) {\n        const footer = this.footer;\n        const length = footer.length;\n        let footerFont, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.footerAlign, options);\n            pt.y += options.footerMarginTop;\n            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n            ctx.textBaseline = 'middle';\n            footerFont = toFont(options.footerFont);\n            ctx.fillStyle = options.footerColor;\n            ctx.font = footerFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n                pt.y += footerFont.lineHeight + options.footerSpacing;\n            }\n        }\n    }\n    drawBackground(pt, ctx, tooltipSize, options) {\n        const { xAlign , yAlign  } = this;\n        const { x , y  } = pt;\n        const { width , height  } = tooltipSize;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(options.cornerRadius);\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.beginPath();\n        ctx.moveTo(x + topLeft, y);\n        if (yAlign === 'top') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width - topRight, y);\n        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n        if (yAlign === 'center' && xAlign === 'right') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width, y + height - bottomRight);\n        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n        if (yAlign === 'bottom') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + bottomLeft, y + height);\n        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n        if (yAlign === 'center' && xAlign === 'left') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x, y + topLeft);\n        ctx.quadraticCurveTo(x, y, x + topLeft, y);\n        ctx.closePath();\n        ctx.fill();\n        if (options.borderWidth > 0) {\n            ctx.stroke();\n        }\n    }\n _updateAnimationTarget(options) {\n        const chart = this.chart;\n        const anims = this.$animations;\n        const animX = anims && anims.x;\n        const animY = anims && anims.y;\n        if (animX || animY) {\n            const position = positioners[options.position].call(this, this._active, this._eventPosition);\n            if (!position) {\n                return;\n            }\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, this._size);\n            const alignment = determineAlignment(chart, options, positionAndSize);\n            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n            if (animX._to !== point.x || animY._to !== point.y) {\n                this.xAlign = alignment.xAlign;\n                this.yAlign = alignment.yAlign;\n                this.width = size.width;\n                this.height = size.height;\n                this.caretX = position.x;\n                this.caretY = position.y;\n                this._resolveAnimations().update(this, point);\n            }\n        }\n    }\n _willRender() {\n        return !!this.opacity;\n    }\n    draw(ctx) {\n        const options = this.options.setContext(this.getContext());\n        let opacity = this.opacity;\n        if (!opacity) {\n            return;\n        }\n        this._updateAnimationTarget(options);\n        const tooltipSize = {\n            width: this.width,\n            height: this.height\n        };\n        const pt = {\n            x: this.x,\n            y: this.y\n        };\n        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n        const padding = toPadding(options.padding);\n        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n        if (options.enabled && hasTooltipContent) {\n            ctx.save();\n            ctx.globalAlpha = opacity;\n            this.drawBackground(pt, ctx, tooltipSize, options);\n            overrideTextDirection(ctx, options.textDirection);\n            pt.y += padding.top;\n            this.drawTitle(pt, ctx, options);\n            this.drawBody(pt, ctx, options);\n            this.drawFooter(pt, ctx, options);\n            restoreTextDirection(ctx, options.textDirection);\n            ctx.restore();\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements, eventPosition) {\n        const lastActive = this._active;\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.chart.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('Cannot find a dataset at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(lastActive, active);\n        const positionChanged = this._positionChanged(active, eventPosition);\n        if (changed || positionChanged) {\n            this._active = active;\n            this._eventPosition = eventPosition;\n            this._ignoreReplayEvents = true;\n            this.update(true);\n        }\n    }\n handleEvent(e, replay, inChartArea = true) {\n        if (replay && this._ignoreReplayEvents) {\n            return false;\n        }\n        this._ignoreReplayEvents = false;\n        const options = this.options;\n        const lastActive = this._active || [];\n        const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n        const positionChanged = this._positionChanged(active, e);\n        const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n        if (changed) {\n            this._active = active;\n            if (options.enabled || options.external) {\n                this._eventPosition = {\n                    x: e.x,\n                    y: e.y\n                };\n                this.update(true, replay);\n            }\n        }\n        return changed;\n    }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n        const options = this.options;\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n        }\n        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n        if (options.reverse) {\n            active.reverse();\n        }\n        return active;\n    }\n _positionChanged(active, e) {\n        const { caretX , caretY , options  } = this;\n        const position = positioners[options.position].call(this, active, e);\n        return position !== false && (caretX !== position.x || caretY !== position.y);\n    }\n}\nvar plugin_tooltip = {\n    id: 'tooltip',\n    _element: Tooltip,\n    positioners,\n    afterInit (chart, _args, options) {\n        if (options) {\n            chart.tooltip = new Tooltip({\n                chart,\n                options\n            });\n        }\n    },\n    beforeUpdate (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    reset (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    afterDraw (chart) {\n        const tooltip = chart.tooltip;\n        if (tooltip && tooltip._willRender()) {\n            const args = {\n                tooltip\n            };\n            if (chart.notifyPlugins('beforeTooltipDraw', {\n                ...args,\n                cancelable: true\n            }) === false) {\n                return;\n            }\n            tooltip.draw(chart.ctx);\n            chart.notifyPlugins('afterTooltipDraw', args);\n        }\n    },\n    afterEvent (chart, args) {\n        if (chart.tooltip) {\n            const useFinalPosition = args.replay;\n            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n                args.changed = true;\n            }\n        }\n    },\n    defaults: {\n        enabled: true,\n        external: null,\n        position: 'average',\n        backgroundColor: 'rgba(0,0,0,0.8)',\n        titleColor: '#fff',\n        titleFont: {\n            weight: 'bold'\n        },\n        titleSpacing: 2,\n        titleMarginBottom: 6,\n        titleAlign: 'left',\n        bodyColor: '#fff',\n        bodySpacing: 2,\n        bodyFont: {},\n        bodyAlign: 'left',\n        footerColor: '#fff',\n        footerSpacing: 2,\n        footerMarginTop: 6,\n        footerFont: {\n            weight: 'bold'\n        },\n        footerAlign: 'left',\n        padding: 6,\n        caretPadding: 2,\n        caretSize: 5,\n        cornerRadius: 6,\n        boxHeight: (ctx, opts)=>opts.bodyFont.size,\n        boxWidth: (ctx, opts)=>opts.bodyFont.size,\n        multiKeyBackground: '#fff',\n        displayColors: true,\n        boxPadding: 0,\n        borderColor: 'rgba(0,0,0,0)',\n        borderWidth: 0,\n        animation: {\n            duration: 400,\n            easing: 'easeOutQuart'\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'width',\n                    'height',\n                    'caretX',\n                    'caretY'\n                ]\n            },\n            opacity: {\n                easing: 'linear',\n                duration: 200\n            }\n        },\n        callbacks: defaultCallbacks\n    },\n    defaultRoutes: {\n        bodyFont: 'font',\n        footerFont: 'font',\n        titleFont: 'font'\n    },\n    descriptors: {\n        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n        _indexable: false,\n        callbacks: {\n            _scriptable: false,\n            _indexable: false\n        },\n        animation: {\n            _fallback: false\n        },\n        animations: {\n            _fallback: 'animation'\n        }\n    },\n    additionalOptionScopes: [\n        'interaction'\n    ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n    if (typeof raw === 'string') {\n        index = labels.push(raw) - 1;\n        addedLabels.unshift({\n            index,\n            label: raw\n        });\n    } else if (isNaN(raw)) {\n        index = null;\n    }\n    return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n    const first = labels.indexOf(raw);\n    if (first === -1) {\n        return addIfString(labels, raw, index, addedLabels);\n    }\n    const last = labels.lastIndexOf(raw);\n    return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n        return labels[value];\n    }\n    return value;\n}\nclass CategoryScale extends Scale {\n    static id = 'category';\n static defaults = {\n        ticks: {\n            callback: _getLabelForValue\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this._startValue = undefined;\n        this._valueRange = 0;\n        this._addedLabels = [];\n    }\n    init(scaleOptions) {\n        const added = this._addedLabels;\n        if (added.length) {\n            const labels = this.getLabels();\n            for (const { index , label  } of added){\n                if (labels[index] === label) {\n                    labels.splice(index, 1);\n                }\n            }\n            this._addedLabels = [];\n        }\n        super.init(scaleOptions);\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        const labels = this.getLabels();\n        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n        return validIndex(index, labels.length - 1);\n    }\n    determineDataLimits() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this.getMinMax(true);\n        if (this.options.bounds === 'ticks') {\n            if (!minDefined) {\n                min = 0;\n            }\n            if (!maxDefined) {\n                max = this.getLabels().length - 1;\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const min = this.min;\n        const max = this.max;\n        const offset = this.options.offset;\n        const ticks = [];\n        let labels = this.getLabels();\n        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n        this._startValue = this.min - (offset ? 0.5 : 0);\n        for(let value = min; value <= max; value++){\n            ticks.push({\n                value\n            });\n        }\n        return ticks;\n    }\n    getLabelForValue(value) {\n        return _getLabelForValue.call(this, value);\n    }\n configure() {\n        super.configure();\n        if (!this.isHorizontal()) {\n            this._reversePixels = !this._reversePixels;\n        }\n    }\n    getPixelForValue(value) {\n        if (typeof value !== 'number') {\n            value = this.parse(value);\n        }\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n    getValueForPixel(pixel) {\n        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n    }\n    getBasePixel() {\n        return this.bottom;\n    }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n    const ticks = [];\n    const MIN_SPACING = 1e-14;\n    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;\n    const unit = step || 1;\n    const maxSpaces = maxTicks - 1;\n    const { min: rmin , max: rmax  } = dataRange;\n    const minDefined = !isNullOrUndef(min);\n    const maxDefined = !isNullOrUndef(max);\n    const countDefined = !isNullOrUndef(count);\n    const minSpacing = (rmax - rmin) / (maxDigits + 1);\n    let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n    let factor, niceMin, niceMax, numSpaces;\n    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n        return [\n            {\n                value: rmin\n            },\n            {\n                value: rmax\n            }\n        ];\n    }\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n    if (numSpaces > maxSpaces) {\n        spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n    }\n    if (!isNullOrUndef(precision)) {\n        factor = Math.pow(10, precision);\n        spacing = Math.ceil(spacing * factor) / factor;\n    }\n    if (bounds === 'ticks') {\n        niceMin = Math.floor(rmin / spacing) * spacing;\n        niceMax = Math.ceil(rmax / spacing) * spacing;\n    } else {\n        niceMin = rmin;\n        niceMax = rmax;\n    }\n    if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n        spacing = (max - min) / numSpaces;\n        niceMin = min;\n        niceMax = max;\n    } else if (countDefined) {\n        niceMin = minDefined ? min : niceMin;\n        niceMax = maxDefined ? max : niceMax;\n        numSpaces = count - 1;\n        spacing = (niceMax - niceMin) / numSpaces;\n    } else {\n        numSpaces = (niceMax - niceMin) / spacing;\n        if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n            numSpaces = Math.round(numSpaces);\n        } else {\n            numSpaces = Math.ceil(numSpaces);\n        }\n    }\n    const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n    factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    let j = 0;\n    if (minDefined) {\n        if (includeBounds && niceMin !== min) {\n            ticks.push({\n                value: min\n            });\n            if (niceMin < min) {\n                j++;\n            }\n            if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n                j++;\n            }\n        } else if (niceMin < min) {\n            j++;\n        }\n    }\n    for(; j < numSpaces; ++j){\n        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n        if (maxDefined && tickValue > max) {\n            break;\n        }\n        ticks.push({\n            value: tickValue\n        });\n    }\n    if (maxDefined && includeBounds && niceMax !== max) {\n        if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n            ticks[ticks.length - 1].value = max;\n        } else {\n            ticks.push({\n                value: max\n            });\n        }\n    } else if (!maxDefined || niceMax === max) {\n        ticks.push({\n            value: niceMax\n        });\n    }\n    return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {\n    const rad = toRadians(minRotation);\n    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n    const length = 0.75 * minSpacing * ('' + value).length;\n    return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n         this._endValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n            return null;\n        }\n        return +raw;\n    }\n    handleTickRangeOptions() {\n        const { beginAtZero  } = this.options;\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (beginAtZero) {\n            const minSign = sign(min);\n            const maxSign = sign(max);\n            if (minSign < 0 && maxSign < 0) {\n                setMax(0);\n            } else if (minSign > 0 && maxSign > 0) {\n                setMin(0);\n            }\n        }\n        if (min === max) {\n            let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n            setMax(max + offset);\n            if (!beginAtZero) {\n                setMin(min - offset);\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    getTickLimit() {\n        const tickOpts = this.options.ticks;\n        let { maxTicksLimit , stepSize  } = tickOpts;\n        let maxTicks;\n        if (stepSize) {\n            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n            if (maxTicks > 1000) {\n                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n                maxTicks = 1000;\n            }\n        } else {\n            maxTicks = this.computeTickLimit();\n            maxTicksLimit = maxTicksLimit || 11;\n        }\n        if (maxTicksLimit) {\n            maxTicks = Math.min(maxTicksLimit, maxTicks);\n        }\n        return maxTicks;\n    }\n computeTickLimit() {\n        return Number.POSITIVE_INFINITY;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        let maxTicks = this.getTickLimit();\n        maxTicks = Math.max(2, maxTicks);\n        const numericGeneratorOptions = {\n            maxTicks,\n            bounds: opts.bounds,\n            min: opts.min,\n            max: opts.max,\n            precision: tickOpts.precision,\n            step: tickOpts.stepSize,\n            count: tickOpts.count,\n            maxDigits: this._maxDigits(),\n            horizontal: this.isHorizontal(),\n            minRotation: tickOpts.minRotation || 0,\n            includeBounds: tickOpts.includeBounds !== false\n        };\n        const dataRange = this._range || this;\n        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n configure() {\n        const ticks = this.ticks;\n        let start = this.min;\n        let end = this.max;\n        super.configure();\n        if (this.options.offset && ticks.length) {\n            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n            start -= offset;\n            end += offset;\n        }\n        this._startValue = start;\n        this._endValue = end;\n        this._valueRange = end - start;\n    }\n    getLabelForValue(value) {\n        return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n}\n\nclass LinearScale extends LinearScaleBase {\n    static id = 'linear';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.numeric\n        }\n    };\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? min : 0;\n        this.max = isNumberFinite(max) ? max : 1;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        const horizontal = this.isHorizontal();\n        const length = horizontal ? this.width : this.height;\n        const minRotation = toRadians(this.options.ticks.minRotation);\n        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n        const tickFont = this._resolveTickFontOptions(0);\n        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n    }\n    getPixelForValue(value) {\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n    const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n    return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n    const rangeStep = Math.pow(10, rangeExp);\n    const start = Math.floor(min / rangeStep);\n    const end = Math.ceil(max / rangeStep);\n    return end - start;\n}\nfunction startExp(min, max) {\n    const range = max - min;\n    let rangeExp = log10Floor(range);\n    while(steps(min, max, rangeExp) > 10){\n        rangeExp++;\n    }\n    while(steps(min, max, rangeExp) < 10){\n        rangeExp--;\n    }\n    return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max  }) {\n    min = finiteOrDefault(generationOptions.min, min);\n    const ticks = [];\n    const minExp = log10Floor(min);\n    let exp = startExp(min, max);\n    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n    const stepSize = Math.pow(10, exp);\n    const base = minExp > exp ? Math.pow(10, minExp) : 0;\n    const start = Math.round((min - base) * precision) / precision;\n    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n    let significand = Math.floor((start - offset) / Math.pow(10, exp));\n    let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n    while(value < max){\n        ticks.push({\n            value,\n            major: isMajor(value),\n            significand\n        });\n        if (significand >= 10) {\n            significand = significand < 15 ? 15 : 20;\n        } else {\n            significand++;\n        }\n        if (significand >= 20) {\n            exp++;\n            significand = 2;\n            precision = exp >= 0 ? 1 : precision;\n        }\n        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n    }\n    const lastTick = finiteOrDefault(generationOptions.max, value);\n    ticks.push({\n        value: lastTick,\n        major: isMajor(lastTick),\n        significand\n    });\n    return ticks;\n}\nclass LogarithmicScale extends Scale {\n    static id = 'logarithmic';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.logarithmic,\n            major: {\n                enabled: true\n            }\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        const value = LinearScaleBase.prototype.parse.apply(this, [\n            raw,\n            index\n        ]);\n        if (value === 0) {\n            this._zero = true;\n            return undefined;\n        }\n        return isNumberFinite(value) && value > 0 ? value : null;\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n        this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n        if (this.options.beginAtZero) {\n            this._zero = true;\n        }\n        if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n        }\n        this.handleTickRangeOptions();\n    }\n    handleTickRangeOptions() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let min = this.min;\n        let max = this.max;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (min === max) {\n            if (min <= 0) {\n                setMin(1);\n                setMax(10);\n            } else {\n                setMin(changeExponent(min, -1));\n                setMax(changeExponent(max, +1));\n            }\n        }\n        if (min <= 0) {\n            setMin(changeExponent(max, -1));\n        }\n        if (max <= 0) {\n            setMax(changeExponent(min, +1));\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const generationOptions = {\n            min: this._userMin,\n            max: this._userMax\n        };\n        const ticks = generateTicks(generationOptions, this);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n getLabelForValue(value) {\n        return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n configure() {\n        const start = this.min;\n        super.configure();\n        this._startValue = log10(start);\n        this._valueRange = log10(this.max) - log10(start);\n    }\n    getPixelForValue(value) {\n        if (value === undefined || value === 0) {\n            value = this.min;\n        }\n        if (value === null || isNaN(value)) {\n            return NaN;\n        }\n        return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        const decimal = this.getDecimalForPixel(pixel);\n        return Math.pow(10, this._startValue + decimal * this._valueRange);\n    }\n}\n\nfunction getTickBackdropHeight(opts) {\n    const tickOpts = opts.ticks;\n    if (tickOpts.display && opts.display) {\n        const padding = toPadding(tickOpts.backdropPadding);\n        return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n    }\n    return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n    label = isArray(label) ? label : [\n        label\n    ];\n    return {\n        w: _longestText(ctx, font.string, label),\n        h: label.length * font.lineHeight\n    };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n        return {\n            start: pos - size / 2,\n            end: pos + size / 2\n        };\n    } else if (angle < min || angle > max) {\n        return {\n            start: pos - size,\n            end: pos\n        };\n    }\n    return {\n        start: pos,\n        end: pos + size\n    };\n}\n function fitWithPointLabels(scale) {\n    const orig = {\n        l: scale.left + scale._padding.left,\n        r: scale.right - scale._padding.right,\n        t: scale.top + scale._padding.top,\n        b: scale.bottom - scale._padding.bottom\n    };\n    const limits = Object.assign({}, orig);\n    const labelSizes = [];\n    const padding = [];\n    const valueCount = scale._pointLabels.length;\n    const pointLabelOpts = scale.options.pointLabels;\n    const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n    for(let i = 0; i < valueCount; i++){\n        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n        padding[i] = opts.padding;\n        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n        const plFont = toFont(opts.font);\n        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n        labelSizes[i] = textSize;\n        const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n        const angle = Math.round(toDegrees(angleRadians));\n        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n        updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n    }\n    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n    const sin = Math.abs(Math.sin(angle));\n    const cos = Math.abs(Math.cos(angle));\n    let x = 0;\n    let y = 0;\n    if (hLimits.start < orig.l) {\n        x = (orig.l - hLimits.start) / sin;\n        limits.l = Math.min(limits.l, orig.l - x);\n    } else if (hLimits.end > orig.r) {\n        x = (hLimits.end - orig.r) / sin;\n        limits.r = Math.max(limits.r, orig.r + x);\n    }\n    if (vLimits.start < orig.t) {\n        y = (orig.t - vLimits.start) / cos;\n        limits.t = Math.min(limits.t, orig.t - y);\n    } else if (vLimits.end > orig.b) {\n        y = (vLimits.end - orig.b) / cos;\n        limits.b = Math.max(limits.b, orig.b + y);\n    }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n    const outerDistance = scale.drawingArea;\n    const { extra , additionalAngle , padding , size  } = itemOpts;\n    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    return {\n        visible: true,\n        x: pointLabelPosition.x,\n        y,\n        textAlign,\n        left,\n        top: y,\n        right: left + size.w,\n        bottom: y + size.h\n    };\n}\nfunction isNotOverlapped(item, area) {\n    if (!area) {\n        return true;\n    }\n    const { left , top , right , bottom  } = item;\n    const apexesInArea = _isPointInArea({\n        x: left,\n        y: top\n    }, area) || _isPointInArea({\n        x: left,\n        y: bottom\n    }, area) || _isPointInArea({\n        x: right,\n        y: top\n    }, area) || _isPointInArea({\n        x: right,\n        y: bottom\n    }, area);\n    return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n    const items = [];\n    const valueCount = scale._pointLabels.length;\n    const opts = scale.options;\n    const { centerPointLabels , display  } = opts.pointLabels;\n    const itemOpts = {\n        extra: getTickBackdropHeight(opts) / 2,\n        additionalAngle: centerPointLabels ? PI / valueCount : 0\n    };\n    let area;\n    for(let i = 0; i < valueCount; i++){\n        itemOpts.padding = padding[i];\n        itemOpts.size = labelSizes[i];\n        const item = createPointLabelItem(scale, i, itemOpts);\n        items.push(item);\n        if (display === 'auto') {\n            item.visible = isNotOverlapped(item, area);\n            if (item.visible) {\n                area = item;\n            }\n        }\n    }\n    return items;\n}\nfunction getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n        return 'center';\n    } else if (angle < 180) {\n        return 'left';\n    }\n    return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n    if (align === 'right') {\n        x -= w;\n    } else if (align === 'center') {\n        x -= w / 2;\n    }\n    return x;\n}\nfunction yForAngle(y, h, angle) {\n    if (angle === 90 || angle === 270) {\n        y -= h / 2;\n    } else if (angle > 270 || angle < 90) {\n        y -= h;\n    }\n    return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n    const { left , top , right , bottom  } = item;\n    const { backdropColor  } = opts;\n    if (!isNullOrUndef(backdropColor)) {\n        const borderRadius = toTRBLCorners(opts.borderRadius);\n        const padding = toPadding(opts.backdropPadding);\n        ctx.fillStyle = backdropColor;\n        const backdropLeft = left - padding.left;\n        const backdropTop = top - padding.top;\n        const backdropWidth = right - left + padding.width;\n        const backdropHeight = bottom - top + padding.height;\n        if (Object.values(borderRadius).some((v)=>v !== 0)) {\n            ctx.beginPath();\n            addRoundedRectPath(ctx, {\n                x: backdropLeft,\n                y: backdropTop,\n                w: backdropWidth,\n                h: backdropHeight,\n                radius: borderRadius\n            });\n            ctx.fill();\n        } else {\n            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n        }\n    }\n}\nfunction drawPointLabels(scale, labelCount) {\n    const { ctx , options: { pointLabels  }  } = scale;\n    for(let i = labelCount - 1; i >= 0; i--){\n        const item = scale._pointLabelItems[i];\n        if (!item.visible) {\n            continue;\n        }\n        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n        drawPointLabelBox(ctx, optsAtIndex, item);\n        const plFont = toFont(optsAtIndex.font);\n        const { x , y , textAlign  } = item;\n        renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n            color: optsAtIndex.color,\n            textAlign: textAlign,\n            textBaseline: 'middle'\n        });\n    }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n    const { ctx  } = scale;\n    if (circular) {\n        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n    } else {\n        let pointPosition = scale.getPointPosition(0, radius);\n        ctx.moveTo(pointPosition.x, pointPosition.y);\n        for(let i = 1; i < labelCount; i++){\n            pointPosition = scale.getPointPosition(i, radius);\n            ctx.lineTo(pointPosition.x, pointPosition.y);\n        }\n    }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n    const ctx = scale.ctx;\n    const circular = gridLineOpts.circular;\n    const { color , lineWidth  } = gridLineOpts;\n    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n        return;\n    }\n    ctx.save();\n    ctx.strokeStyle = color;\n    ctx.lineWidth = lineWidth;\n    ctx.setLineDash(borderOpts.dash || []);\n    ctx.lineDashOffset = borderOpts.dashOffset;\n    ctx.beginPath();\n    pathRadiusLine(scale, radius, circular, labelCount);\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n    return createContext(parent, {\n        label,\n        index,\n        type: 'pointLabel'\n    });\n}\nclass RadialLinearScale extends LinearScaleBase {\n    static id = 'radialLinear';\n static defaults = {\n        display: true,\n        animate: true,\n        position: 'chartArea',\n        angleLines: {\n            display: true,\n            lineWidth: 1,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n        grid: {\n            circular: false\n        },\n        startAngle: 0,\n        ticks: {\n            showLabelBackdrop: true,\n            callback: Ticks.formatters.numeric\n        },\n        pointLabels: {\n            backdropColor: undefined,\n            backdropPadding: 2,\n            display: true,\n            font: {\n                size: 10\n            },\n            callback (label) {\n                return label;\n            },\n            padding: 5,\n            centerPointLabels: false\n        }\n    };\n    static defaultRoutes = {\n        'angleLines.color': 'borderColor',\n        'pointLabels.color': 'color',\n        'ticks.color': 'color'\n    };\n    static descriptors = {\n        angleLines: {\n            _fallback: 'grid'\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.xCenter = undefined;\n         this.yCenter = undefined;\n         this.drawingArea = undefined;\n         this._pointLabels = [];\n        this._pointLabelItems = [];\n    }\n    setDimensions() {\n        const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n        const w = this.width = this.maxWidth - padding.width;\n        const h = this.height = this.maxHeight - padding.height;\n        this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n        this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n        this.drawingArea = Math.floor(Math.min(w, h) / 2);\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(false);\n        this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n        this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    }\n    generateTickLabels(ticks) {\n        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n        this._pointLabels = this.getLabels().map((value, index)=>{\n            const label = callback(this.options.pointLabels.callback, [\n                value,\n                index\n            ], this);\n            return label || label === 0 ? label : '';\n        }).filter((v, i)=>this.chart.getDataVisibility(i));\n    }\n    fit() {\n        const opts = this.options;\n        if (opts.display && opts.pointLabels.display) {\n            fitWithPointLabels(this);\n        } else {\n            this.setCenterPoint(0, 0, 0, 0);\n        }\n    }\n    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n    }\n    getIndexAngle(index) {\n        const angleMultiplier = TAU / (this._pointLabels.length || 1);\n        const startAngle = this.options.startAngle || 0;\n        return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n    }\n    getDistanceFromCenterForValue(value) {\n        if (isNullOrUndef(value)) {\n            return NaN;\n        }\n        const scalingFactor = this.drawingArea / (this.max - this.min);\n        if (this.options.reverse) {\n            return (this.max - value) * scalingFactor;\n        }\n        return (value - this.min) * scalingFactor;\n    }\n    getValueForDistanceFromCenter(distance) {\n        if (isNullOrUndef(distance)) {\n            return NaN;\n        }\n        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n    }\n    getPointLabelContext(index) {\n        const pointLabels = this._pointLabels || [];\n        if (index >= 0 && index < pointLabels.length) {\n            const pointLabel = pointLabels[index];\n            return createPointLabelContext(this.getContext(), index, pointLabel);\n        }\n    }\n    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n        const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n        return {\n            x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n            y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n            angle\n        };\n    }\n    getPointPositionForValue(index, value) {\n        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    }\n    getBasePosition(index) {\n        return this.getPointPositionForValue(index || 0, this.getBaseValue());\n    }\n    getPointLabelPosition(index) {\n        const { left , top , right , bottom  } = this._pointLabelItems[index];\n        return {\n            left,\n            top,\n            right,\n            bottom\n        };\n    }\n drawBackground() {\n        const { backgroundColor , grid: { circular  }  } = this.options;\n        if (backgroundColor) {\n            const ctx = this.ctx;\n            ctx.save();\n            ctx.beginPath();\n            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n            ctx.closePath();\n            ctx.fillStyle = backgroundColor;\n            ctx.fill();\n            ctx.restore();\n        }\n    }\n drawGrid() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const { angleLines , grid , border  } = opts;\n        const labelCount = this._pointLabels.length;\n        let i, offset, position;\n        if (opts.pointLabels.display) {\n            drawPointLabels(this, labelCount);\n        }\n        if (grid.display) {\n            this.ticks.forEach((tick, index)=>{\n                if (index !== 0 || index === 0 && this.min < 0) {\n                    offset = this.getDistanceFromCenterForValue(tick.value);\n                    const context = this.getContext(index);\n                    const optsAtIndex = grid.setContext(context);\n                    const optsAtIndexBorder = border.setContext(context);\n                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n                }\n            });\n        }\n        if (angleLines.display) {\n            ctx.save();\n            for(i = labelCount - 1; i >= 0; i--){\n                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n                const { color , lineWidth  } = optsAtIndex;\n                if (!lineWidth || !color) {\n                    continue;\n                }\n                ctx.lineWidth = lineWidth;\n                ctx.strokeStyle = color;\n                ctx.setLineDash(optsAtIndex.borderDash);\n                ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n                position = this.getPointPosition(i, offset);\n                ctx.beginPath();\n                ctx.moveTo(this.xCenter, this.yCenter);\n                ctx.lineTo(position.x, position.y);\n                ctx.stroke();\n            }\n            ctx.restore();\n        }\n    }\n drawBorder() {}\n drawLabels() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        if (!tickOpts.display) {\n            return;\n        }\n        const startAngle = this.getIndexAngle(0);\n        let offset, width;\n        ctx.save();\n        ctx.translate(this.xCenter, this.yCenter);\n        ctx.rotate(startAngle);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        this.ticks.forEach((tick, index)=>{\n            if (index === 0 && this.min >= 0 && !opts.reverse) {\n                return;\n            }\n            const optsAtIndex = tickOpts.setContext(this.getContext(index));\n            const tickFont = toFont(optsAtIndex.font);\n            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n            if (optsAtIndex.showLabelBackdrop) {\n                ctx.font = tickFont.string;\n                width = ctx.measureText(tick.label).width;\n                ctx.fillStyle = optsAtIndex.backdropColor;\n                const padding = toPadding(optsAtIndex.backdropPadding);\n                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n            }\n            renderText(ctx, tick.label, 0, -offset, tickFont, {\n                color: optsAtIndex.color,\n                strokeColor: optsAtIndex.textStrokeColor,\n                strokeWidth: optsAtIndex.textStrokeWidth\n            });\n        });\n        ctx.restore();\n    }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n    millisecond: {\n        common: true,\n        size: 1,\n        steps: 1000\n    },\n    second: {\n        common: true,\n        size: 1000,\n        steps: 60\n    },\n    minute: {\n        common: true,\n        size: 60000,\n        steps: 60\n    },\n    hour: {\n        common: true,\n        size: 3600000,\n        steps: 24\n    },\n    day: {\n        common: true,\n        size: 86400000,\n        steps: 30\n    },\n    week: {\n        common: false,\n        size: 604800000,\n        steps: 4\n    },\n    month: {\n        common: true,\n        size: 2.628e9,\n        steps: 12\n    },\n    quarter: {\n        common: false,\n        size: 7.884e9,\n        steps: 4\n    },\n    year: {\n        common: true,\n        size: 3.154e10\n    }\n};\n const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n    return a - b;\n}\n function parse(scale, input) {\n    if (isNullOrUndef(input)) {\n        return null;\n    }\n    const adapter = scale._adapter;\n    const { parser , round , isoWeekday  } = scale._parseOpts;\n    let value = input;\n    if (typeof parser === 'function') {\n        value = parser(value);\n    }\n    if (!isNumberFinite(value)) {\n        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n    }\n    if (value === null) {\n        return null;\n    }\n    if (round) {\n        value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n    }\n    return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    const ilen = UNITS.length;\n    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n        const interval = INTERVALS[UNITS[i]];\n        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n            return UNITS[i];\n        }\n    }\n    return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n        const unit = UNITS[i];\n        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n            return unit;\n        }\n    }\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n        if (INTERVALS[UNITS[i]].common) {\n            return UNITS[i];\n        }\n    }\n}\n function addTick(ticks, time, timestamps) {\n    if (!timestamps) {\n        ticks[time] = true;\n    } else if (timestamps.length) {\n        const { lo , hi  } = _lookup(timestamps, time);\n        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n        ticks[timestamp] = true;\n    }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n    const adapter = scale._adapter;\n    const first = +adapter.startOf(ticks[0].value, majorUnit);\n    const last = ticks[ticks.length - 1].value;\n    let major, index;\n    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n        index = map[major];\n        if (index >= 0) {\n            ticks[index].major = true;\n        }\n    }\n    return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n    const ticks = [];\n     const map = {};\n    const ilen = values.length;\n    let i, value;\n    for(i = 0; i < ilen; ++i){\n        value = values[i];\n        map[value] = i;\n        ticks.push({\n            value,\n            major: false\n        });\n    }\n    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n    static id = 'time';\n static defaults = {\n bounds: 'data',\n        adapters: {},\n        time: {\n            parser: false,\n            unit: false,\n            round: false,\n            isoWeekday: false,\n            minUnit: 'millisecond',\n            displayFormats: {}\n        },\n        ticks: {\n source: 'auto',\n            callback: false,\n            major: {\n                enabled: false\n            }\n        }\n    };\n constructor(props){\n        super(props);\n         this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n         this._unit = 'day';\n         this._majorUnit = undefined;\n        this._offsets = {};\n        this._normalized = false;\n        this._parseOpts = undefined;\n    }\n    init(scaleOpts, opts = {}) {\n        const time = scaleOpts.time || (scaleOpts.time = {});\n         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n        adapter.init(opts);\n        mergeIf(time.displayFormats, adapter.formats());\n        this._parseOpts = {\n            parser: time.parser,\n            round: time.round,\n            isoWeekday: time.isoWeekday\n        };\n        super.init(scaleOpts);\n        this._normalized = opts.normalized;\n    }\n parse(raw, index) {\n        if (raw === undefined) {\n            return null;\n        }\n        return parse(this, raw);\n    }\n    beforeLayout() {\n        super.beforeLayout();\n        this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n    }\n    determineDataLimits() {\n        const options = this.options;\n        const adapter = this._adapter;\n        const unit = options.time.unit || 'day';\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n function _applyBounds(bounds) {\n            if (!minDefined && !isNaN(bounds.min)) {\n                min = Math.min(min, bounds.min);\n            }\n            if (!maxDefined && !isNaN(bounds.max)) {\n                max = Math.max(max, bounds.max);\n            }\n        }\n        if (!minDefined || !maxDefined) {\n            _applyBounds(this._getLabelBounds());\n            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n                _applyBounds(this.getMinMax(false));\n            }\n        }\n        min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n        max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n        this.min = Math.min(min, max - 1);\n        this.max = Math.max(min + 1, max);\n    }\n _getLabelBounds() {\n        const arr = this.getLabelTimestamps();\n        let min = Number.POSITIVE_INFINITY;\n        let max = Number.NEGATIVE_INFINITY;\n        if (arr.length) {\n            min = arr[0];\n            max = arr[arr.length - 1];\n        }\n        return {\n            min,\n            max\n        };\n    }\n buildTicks() {\n        const options = this.options;\n        const timeOpts = options.time;\n        const tickOpts = options.ticks;\n        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n        if (options.bounds === 'ticks' && timestamps.length) {\n            this.min = this._userMin || timestamps[0];\n            this.max = this._userMax || timestamps[timestamps.length - 1];\n        }\n        const min = this.min;\n        const max = this.max;\n        const ticks = _filterBetween(timestamps, min, max);\n        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n        this.initOffsets(timestamps);\n        if (options.reverse) {\n            ticks.reverse();\n        }\n        return ticksFromTimestamps(this, ticks, this._majorUnit);\n    }\n    afterAutoSkip() {\n        if (this.options.offsetAfterAutoskip) {\n            this.initOffsets(this.ticks.map((tick)=>+tick.value));\n        }\n    }\n initOffsets(timestamps = []) {\n        let start = 0;\n        let end = 0;\n        let first, last;\n        if (this.options.offset && timestamps.length) {\n            first = this.getDecimalForValue(timestamps[0]);\n            if (timestamps.length === 1) {\n                start = 1 - first;\n            } else {\n                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n            }\n            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n            if (timestamps.length === 1) {\n                end = last;\n            } else {\n                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n            }\n        }\n        const limit = timestamps.length < 3 ? 0.5 : 0.25;\n        start = _limitValue(start, 0, limit);\n        end = _limitValue(end, 0, limit);\n        this._offsets = {\n            start,\n            end,\n            factor: 1 / (start + 1 + end)\n        };\n    }\n _generate() {\n        const adapter = this._adapter;\n        const min = this.min;\n        const max = this.max;\n        const options = this.options;\n        const timeOpts = options.time;\n        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n        const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n        const hasWeekday = isNumber(weekday) || weekday === true;\n        const ticks = {};\n        let first = min;\n        let time, count;\n        if (hasWeekday) {\n            first = +adapter.startOf(first, 'isoWeek', weekday);\n        }\n        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n        if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n        }\n        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n            addTick(ticks, time, timestamps);\n        }\n        if (time === max || options.bounds === 'ticks' || count === 1) {\n            addTick(ticks, time, timestamps);\n        }\n        return Object.keys(ticks).sort(sorter).map((x)=>+x);\n    }\n getLabelForValue(value) {\n        const adapter = this._adapter;\n        const timeOpts = this.options.time;\n        if (timeOpts.tooltipFormat) {\n            return adapter.format(value, timeOpts.tooltipFormat);\n        }\n        return adapter.format(value, timeOpts.displayFormats.datetime);\n    }\n format(value, format) {\n        const options = this.options;\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const fmt = format || formats[unit];\n        return this._adapter.format(value, fmt);\n    }\n _tickFormatFunction(time, index, ticks, format) {\n        const options = this.options;\n        const formatter = options.ticks.callback;\n        if (formatter) {\n            return callback(formatter, [\n                time,\n                index,\n                ticks\n            ], this);\n        }\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const majorUnit = this._majorUnit;\n        const minorFormat = unit && formats[unit];\n        const majorFormat = majorUnit && formats[majorUnit];\n        const tick = ticks[index];\n        const major = majorUnit && majorFormat && tick && tick.major;\n        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    }\n generateTickLabels(ticks) {\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            tick.label = this._tickFormatFunction(tick.value, i, ticks);\n        }\n    }\n getDecimalForValue(value) {\n        return value === null ? NaN : (value - this.min) / (this.max - this.min);\n    }\n getPixelForValue(value) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForValue(value);\n        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return this.min + pos * (this.max - this.min);\n    }\n _getLabelSize(label) {\n        const ticksOpts = this.options.ticks;\n        const tickLabelWidth = this.ctx.measureText(label).width;\n        const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n        const cosRotation = Math.cos(angle);\n        const sinRotation = Math.sin(angle);\n        const tickFontSize = this._resolveTickFontOptions(0).size;\n        return {\n            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n        };\n    }\n _getLabelCapacity(exampleTime) {\n        const timeOpts = this.options.time;\n        const displayFormats = timeOpts.displayFormats;\n        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n            exampleTime\n        ], this._majorUnit), format);\n        const size = this._getLabelSize(exampleLabel);\n        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n        return capacity > 0 ? capacity : 1;\n    }\n getDataTimestamps() {\n        let timestamps = this._cache.data || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const metas = this.getMatchingVisibleMetas();\n        if (this._normalized && metas.length) {\n            return this._cache.data = metas[0].controller.getAllParsedValues(this);\n        }\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n        }\n        return this._cache.data = this.normalize(timestamps);\n    }\n getLabelTimestamps() {\n        const timestamps = this._cache.labels || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const labels = this.getLabels();\n        for(i = 0, ilen = labels.length; i < ilen; ++i){\n            timestamps.push(parse(this, labels[i]));\n        }\n        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n    }\n normalize(values) {\n        return _arrayUnique(values.sort(sorter));\n    }\n}\n\nfunction interpolate(table, val, reverse) {\n    let lo = 0;\n    let hi = table.length - 1;\n    let prevSource, nextSource, prevTarget, nextTarget;\n    if (reverse) {\n        if (val >= table[lo].pos && val <= table[hi].pos) {\n            ({ lo , hi  } = _lookupByKey(table, 'pos', val));\n        }\n        ({ pos: prevSource , time: prevTarget  } = table[lo]);\n        ({ pos: nextSource , time: nextTarget  } = table[hi]);\n    } else {\n        if (val >= table[lo].time && val <= table[hi].time) {\n            ({ lo , hi  } = _lookupByKey(table, 'time', val));\n        }\n        ({ time: prevSource , pos: prevTarget  } = table[lo]);\n        ({ time: nextSource , pos: nextTarget  } = table[hi]);\n    }\n    const span = nextSource - prevSource;\n    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n    static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n        super(props);\n         this._table = [];\n         this._minPos = undefined;\n         this._tableRange = undefined;\n    }\n initOffsets() {\n        const timestamps = this._getTimestampsForTable();\n        const table = this._table = this.buildLookupTable(timestamps);\n        this._minPos = interpolate(table, this.min);\n        this._tableRange = interpolate(table, this.max) - this._minPos;\n        super.initOffsets(timestamps);\n    }\n buildLookupTable(timestamps) {\n        const { min , max  } = this;\n        const items = [];\n        const table = [];\n        let i, ilen, prev, curr, next;\n        for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n            curr = timestamps[i];\n            if (curr >= min && curr <= max) {\n                items.push(curr);\n            }\n        }\n        if (items.length < 2) {\n            return [\n                {\n                    time: min,\n                    pos: 0\n                },\n                {\n                    time: max,\n                    pos: 1\n                }\n            ];\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            next = items[i + 1];\n            prev = items[i - 1];\n            curr = items[i];\n            if (Math.round((next + prev) / 2) !== curr) {\n                table.push({\n                    time: curr,\n                    pos: i / (ilen - 1)\n                });\n            }\n        }\n        return table;\n    }\n _generate() {\n        const min = this.min;\n        const max = this.max;\n        let timestamps = super.getDataTimestamps();\n        if (!timestamps.includes(min) || !timestamps.length) {\n            timestamps.splice(0, 0, min);\n        }\n        if (!timestamps.includes(max) || timestamps.length === 1) {\n            timestamps.push(max);\n        }\n        return timestamps.sort((a, b)=>a - b);\n    }\n _getTimestampsForTable() {\n        let timestamps = this._cache.all || [];\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const data = this.getDataTimestamps();\n        const label = this.getLabelTimestamps();\n        if (data.length && label.length) {\n            timestamps = this.normalize(data.concat(label));\n        } else {\n            timestamps = data.length ? data : label;\n        }\n        timestamps = this._cache.all = timestamps;\n        return timestamps;\n    }\n getDecimalForValue(value) {\n        return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n    }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n    controllers,\n    elements,\n    plugins,\n    scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import { jsx } from 'react/jsx-runtime';\nimport { forwardRef, useRef, useEffect } from 'react';\nimport { Chart as Chart$1, LineController, BarController, RadarController, DoughnutController, PolarAreaController, BubbleController, PieController, ScatterController } from 'chart.js';\n\nconst defaultDatasetIdKey = 'label';\nfunction reforwardRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    } else if (ref) {\n        ref.current = value;\n    }\n}\nfunction setOptions(chart, nextOptions) {\n    const options = chart.options;\n    if (options && nextOptions) {\n        Object.assign(options, nextOptions);\n    }\n}\nfunction setLabels(currentData, nextLabels) {\n    currentData.labels = nextLabels;\n}\nfunction setDatasets(currentData, nextDatasets, datasetIdKey = defaultDatasetIdKey) {\n    const addedDatasets = [];\n    currentData.datasets = nextDatasets.map((nextDataset)=>{\n        // given the new set, find it's current match\n        const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n        // There is no original to update, so simply add new one\n        if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n            return {\n                ...nextDataset\n            };\n        }\n        addedDatasets.push(currentDataset);\n        Object.assign(currentDataset, nextDataset);\n        return currentDataset;\n    });\n}\nfunction cloneData(data, datasetIdKey = defaultDatasetIdKey) {\n    const nextData = {\n        labels: [],\n        datasets: []\n    };\n    setLabels(nextData, data.labels);\n    setDatasets(nextData, data.datasets, datasetIdKey);\n    return nextData;\n}\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getDatasetAtEvent(chart, event) {\n    return chart.getElementsAtEventForMode(event.nativeEvent, 'dataset', {\n        intersect: true\n    }, false);\n}\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementAtEvent(chart, event) {\n    return chart.getElementsAtEventForMode(event.nativeEvent, 'nearest', {\n        intersect: true\n    }, false);\n}\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementsAtEvent(chart, event) {\n    return chart.getElementsAtEventForMode(event.nativeEvent, 'index', {\n        intersect: true\n    }, false);\n}\n\nfunction ChartComponent(props, ref) {\n    const { height = 150, width = 300, redraw = false, datasetIdKey, type, data, options, plugins = [], fallbackContent, updateMode, ...canvasProps } = props;\n    const canvasRef = useRef(null);\n    const chartRef = useRef(null);\n    const renderChart = ()=>{\n        if (!canvasRef.current) return;\n        chartRef.current = new Chart$1(canvasRef.current, {\n            type,\n            data: cloneData(data, datasetIdKey),\n            options: options && {\n                ...options\n            },\n            plugins\n        });\n        reforwardRef(ref, chartRef.current);\n    };\n    const destroyChart = ()=>{\n        reforwardRef(ref, null);\n        if (chartRef.current) {\n            chartRef.current.destroy();\n            chartRef.current = null;\n        }\n    };\n    useEffect(()=>{\n        if (!redraw && chartRef.current && options) {\n            setOptions(chartRef.current, options);\n        }\n    }, [\n        redraw,\n        options\n    ]);\n    useEffect(()=>{\n        if (!redraw && chartRef.current) {\n            setLabels(chartRef.current.config.data, data.labels);\n        }\n    }, [\n        redraw,\n        data.labels\n    ]);\n    useEffect(()=>{\n        if (!redraw && chartRef.current && data.datasets) {\n            setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n        }\n    }, [\n        redraw,\n        data.datasets\n    ]);\n    useEffect(()=>{\n        if (!chartRef.current) return;\n        if (redraw) {\n            destroyChart();\n            setTimeout(renderChart);\n        } else {\n            chartRef.current.update(updateMode);\n        }\n    }, [\n        redraw,\n        options,\n        data.labels,\n        data.datasets,\n        updateMode\n    ]);\n    useEffect(()=>{\n        if (!chartRef.current) return;\n        destroyChart();\n        setTimeout(renderChart);\n    }, [\n        type\n    ]);\n    useEffect(()=>{\n        renderChart();\n        return ()=>destroyChart();\n    }, []);\n    return /*#__PURE__*/ jsx(\"canvas\", {\n        ref: canvasRef,\n        role: \"img\",\n        height: height,\n        width: width,\n        ...canvasProps,\n        children: fallbackContent\n    });\n}\nconst Chart = /*#__PURE__*/ forwardRef(ChartComponent);\n\nfunction createTypedChart(type, registerables) {\n    Chart$1.register(registerables);\n    return /*#__PURE__*/ forwardRef((props, ref)=>/*#__PURE__*/ jsx(Chart, {\n            ...props,\n            ref: ref,\n            type: type\n        }));\n}\nconst Line = /* #__PURE__ */ createTypedChart('line', LineController);\nconst Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\nconst Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\nconst Doughnut = /* #__PURE__ */ createTypedChart('doughnut', DoughnutController);\nconst PolarArea = /* #__PURE__ */ createTypedChart('polarArea', PolarAreaController);\nconst Bubble = /* #__PURE__ */ createTypedChart('bubble', BubbleController);\nconst Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\nconst Scatter = /* #__PURE__ */ createTypedChart('scatter', ScatterController);\n\nexport { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };\n//# sourceMappingURL=index.js.map\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n    status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n    function init(inst, def) {\n        var _a;\n        Object.defineProperty(inst, \"_zod\", {\n            value: inst._zod ?? {},\n            enumerable: false,\n        });\n        (_a = inst._zod).traits ?? (_a.traits = new Set());\n        inst._zod.traits.add(name);\n        initializer(inst, def);\n        // support prototype modifications\n        for (const k in _.prototype) {\n            if (!(k in inst))\n                Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n        }\n        inst._zod.constr = _;\n        inst._zod.def = def;\n    }\n    // doesn't work if Parent has a constructor with arguments\n    const Parent = params?.Parent ?? Object;\n    class Definition extends Parent {\n    }\n    Object.defineProperty(Definition, \"name\", { value: name });\n    function _(def) {\n        var _a;\n        const inst = params?.Parent ? new Definition() : this;\n        init(inst, def);\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        for (const fn of inst._zod.deferred) {\n            fn();\n        }\n        return inst;\n    }\n    Object.defineProperty(_, \"init\", { value: init });\n    Object.defineProperty(_, Symbol.hasInstance, {\n        value: (inst) => {\n            if (params?.Parent && inst instanceof params.Parent)\n                return true;\n            return inst?._zod?.traits?.has(name);\n        },\n    });\n    Object.defineProperty(_, \"name\", { value: name });\n    return _;\n}\n//////////////////////////////   UTILITIES   ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n    constructor() {\n        super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n    }\n}\nexport class $ZodEncodeError extends Error {\n    constructor(name) {\n        super(`Encountered unidirectional transform during encode: ${name}`);\n        this.name = \"ZodEncodeError\";\n    }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n    if (newConfig)\n        Object.assign(globalConfig, newConfig);\n    return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n    return val;\n}\nexport function assertNotEqual(val) {\n    return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n    throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n    const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n    const values = Object.entries(entries)\n        .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n        .map(([_, v]) => v);\n    return values;\n}\nexport function joinValues(array, separator = \"|\") {\n    return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n    if (typeof value === \"bigint\")\n        return value.toString();\n    return value;\n}\nexport function cached(getter) {\n    const set = false;\n    return {\n        get value() {\n            if (!set) {\n                const value = getter();\n                Object.defineProperty(this, \"value\", { value });\n                return value;\n            }\n            throw new Error(\"cached value already set\");\n        },\n    };\n}\nexport function nullish(input) {\n    return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n    const start = source.startsWith(\"^\") ? 1 : 0;\n    const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n    return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepString = step.toString();\n    let stepDecCount = (stepString.split(\".\")[1] || \"\").length;\n    if (stepDecCount === 0 && /\\d?e-\\d?/.test(stepString)) {\n        const match = stepString.match(/\\d?e-(\\d?)/);\n        if (match?.[1]) {\n            stepDecCount = Number.parseInt(match[1]);\n        }\n    }\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / 10 ** decCount;\n}\nconst EVALUATING = Symbol(\"evaluating\");\nexport function defineLazy(object, key, getter) {\n    let value = undefined;\n    Object.defineProperty(object, key, {\n        get() {\n            if (value === EVALUATING) {\n                // Circular reference detected, return undefined to break the cycle\n                return undefined;\n            }\n            if (value === undefined) {\n                value = EVALUATING;\n                value = getter();\n            }\n            return value;\n        },\n        set(v) {\n            Object.defineProperty(object, key, {\n                value: v,\n                // configurable: true,\n            });\n            // object[key] = v;\n        },\n        configurable: true,\n    });\n}\nexport function objectClone(obj) {\n    return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nexport function assignProp(target, prop, value) {\n    Object.defineProperty(target, prop, {\n        value,\n        writable: true,\n        enumerable: true,\n        configurable: true,\n    });\n}\nexport function mergeDefs(...defs) {\n    const mergedDescriptors = {};\n    for (const def of defs) {\n        const descriptors = Object.getOwnPropertyDescriptors(def);\n        Object.assign(mergedDescriptors, descriptors);\n    }\n    return Object.defineProperties({}, mergedDescriptors);\n}\nexport function cloneDef(schema) {\n    return mergeDefs(schema._zod.def);\n}\nexport function getElementAtPath(obj, path) {\n    if (!path)\n        return obj;\n    return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n    const keys = Object.keys(promisesObj);\n    const promises = keys.map((key) => promisesObj[key]);\n    return Promise.all(promises).then((results) => {\n        const resolvedObj = {};\n        for (let i = 0; i < keys.length; i++) {\n            resolvedObj[keys[i]] = results[i];\n        }\n        return resolvedObj;\n    });\n}\nexport function randomString(length = 10) {\n    const chars = \"abcdefghijklmnopqrstuvwxyz\";\n    let str = \"\";\n    for (let i = 0; i < length; i++) {\n        str += chars[Math.floor(Math.random() * chars.length)];\n    }\n    return str;\n}\nexport function esc(str) {\n    return JSON.stringify(str);\n}\nexport const captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nexport function isObject(data) {\n    return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n    // @ts-ignore\n    if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n        return false;\n    }\n    try {\n        const F = Function;\n        new F(\"\");\n        return true;\n    }\n    catch (_) {\n        return false;\n    }\n});\nexport function isPlainObject(o) {\n    if (isObject(o) === false)\n        return false;\n    // modified constructor\n    const ctor = o.constructor;\n    if (ctor === undefined)\n        return true;\n    // modified prototype\n    const prot = ctor.prototype;\n    if (isObject(prot) === false)\n        return false;\n    // ctor doesn't have static `isPrototypeOf`\n    if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n        return false;\n    }\n    return true;\n}\nexport function shallowClone(o) {\n    if (isPlainObject(o))\n        return { ...o };\n    if (Array.isArray(o))\n        return [...o];\n    return o;\n}\nexport function numKeys(data) {\n    let keyCount = 0;\n    for (const key in data) {\n        if (Object.prototype.hasOwnProperty.call(data, key)) {\n            keyCount++;\n        }\n    }\n    return keyCount;\n}\nexport const getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return \"undefined\";\n        case \"string\":\n            return \"string\";\n        case \"number\":\n            return Number.isNaN(data) ? \"nan\" : \"number\";\n        case \"boolean\":\n            return \"boolean\";\n        case \"function\":\n            return \"function\";\n        case \"bigint\":\n            return \"bigint\";\n        case \"symbol\":\n            return \"symbol\";\n        case \"object\":\n            if (Array.isArray(data)) {\n                return \"array\";\n            }\n            if (data === null) {\n                return \"null\";\n            }\n            if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n                return \"promise\";\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return \"map\";\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return \"set\";\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return \"date\";\n            }\n            // @ts-ignore\n            if (typeof File !== \"undefined\" && data instanceof File) {\n                return \"file\";\n            }\n            return \"object\";\n        default:\n            throw new Error(`Unknown data type: ${t}`);\n    }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n    return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n    const cl = new inst._zod.constr(def ?? inst._zod.def);\n    if (!def || params?.parent)\n        cl._zod.parent = inst;\n    return cl;\n}\nexport function normalizeParams(_params) {\n    const params = _params;\n    if (!params)\n        return {};\n    if (typeof params === \"string\")\n        return { error: () => params };\n    if (params?.message !== undefined) {\n        if (params?.error !== undefined)\n            throw new Error(\"Cannot specify both `message` and `error` params\");\n        params.error = params.message;\n    }\n    delete params.message;\n    if (typeof params.error === \"string\")\n        return { ...params, error: () => params.error };\n    return params;\n}\nexport function createTransparentProxy(getter) {\n    let target;\n    return new Proxy({}, {\n        get(_, prop, receiver) {\n            target ?? (target = getter());\n            return Reflect.get(target, prop, receiver);\n        },\n        set(_, prop, value, receiver) {\n            target ?? (target = getter());\n            return Reflect.set(target, prop, value, receiver);\n        },\n        has(_, prop) {\n            target ?? (target = getter());\n            return Reflect.has(target, prop);\n        },\n        deleteProperty(_, prop) {\n            target ?? (target = getter());\n            return Reflect.deleteProperty(target, prop);\n        },\n        ownKeys(_) {\n            target ?? (target = getter());\n            return Reflect.ownKeys(target);\n        },\n        getOwnPropertyDescriptor(_, prop) {\n            target ?? (target = getter());\n            return Reflect.getOwnPropertyDescriptor(target, prop);\n        },\n        defineProperty(_, prop, descriptor) {\n            target ?? (target = getter());\n            return Reflect.defineProperty(target, prop, descriptor);\n        },\n    });\n}\nexport function stringifyPrimitive(value) {\n    if (typeof value === \"bigint\")\n        return value.toString() + \"n\";\n    if (typeof value === \"string\")\n        return `\"${value}\"`;\n    return `${value}`;\n}\nexport function optionalKeys(shape) {\n    return Object.keys(shape).filter((k) => {\n        return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n    });\n}\nexport const NUMBER_FORMAT_RANGES = {\n    safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n    int32: [-2147483648, 2147483647],\n    uint32: [0, 4294967295],\n    float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n    float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n    int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n    uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = {};\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                newShape[key] = currDef.shape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function omit(schema, mask) {\n    const currDef = schema._zod.def;\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const newShape = { ...schema._zod.def.shape };\n            for (const key in mask) {\n                if (!(key in currDef.shape)) {\n                    throw new Error(`Unrecognized key: \"${key}\"`);\n                }\n                if (!mask[key])\n                    continue;\n                delete newShape[key];\n            }\n            assignProp(this, \"shape\", newShape); // self-caching\n            return newShape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function extend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to extend: expected a plain object\");\n    }\n    const checks = schema._zod.def.checks;\n    const hasChecks = checks && checks.length > 0;\n    if (hasChecks) {\n        throw new Error(\"Object schemas containing refinements cannot be extended. Use `.safeExtend()` instead.\");\n    }\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function safeExtend(schema, shape) {\n    if (!isPlainObject(shape)) {\n        throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n    }\n    const def = {\n        ...schema._zod.def,\n        get shape() {\n            const _shape = { ...schema._zod.def.shape, ...shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        checks: schema._zod.def.checks,\n    };\n    return clone(schema, def);\n}\nexport function merge(a, b) {\n    const def = mergeDefs(a._zod.def, {\n        get shape() {\n            const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n            assignProp(this, \"shape\", _shape); // self-caching\n            return _shape;\n        },\n        get catchall() {\n            return b._zod.def.catchall;\n        },\n        checks: [], // delete existing checks\n    });\n    return clone(a, def);\n}\nexport function partial(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in oldShape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // if (oldShape[key]!._zod.optin === \"optional\") continue;\n                    shape[key] = Class\n                        ? new Class({\n                            type: \"optional\",\n                            innerType: oldShape[key],\n                        })\n                        : oldShape[key];\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\nexport function required(Class, schema, mask) {\n    const def = mergeDefs(schema._zod.def, {\n        get shape() {\n            const oldShape = schema._zod.def.shape;\n            const shape = { ...oldShape };\n            if (mask) {\n                for (const key in mask) {\n                    if (!(key in shape)) {\n                        throw new Error(`Unrecognized key: \"${key}\"`);\n                    }\n                    if (!mask[key])\n                        continue;\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            else {\n                for (const key in oldShape) {\n                    // overwrite with non-optional\n                    shape[key] = new Class({\n                        type: \"nonoptional\",\n                        innerType: oldShape[key],\n                    });\n                }\n            }\n            assignProp(this, \"shape\", shape); // self-caching\n            return shape;\n        },\n        checks: [],\n    });\n    return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nexport function aborted(x, startIndex = 0) {\n    if (x.aborted === true)\n        return true;\n    for (let i = startIndex; i < x.issues.length; i++) {\n        if (x.issues[i]?.continue !== true) {\n            return true;\n        }\n    }\n    return false;\n}\nexport function prefixIssues(path, issues) {\n    return issues.map((iss) => {\n        var _a;\n        (_a = iss).path ?? (_a.path = []);\n        iss.path.unshift(path);\n        return iss;\n    });\n}\nexport function unwrapMessage(message) {\n    return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n    const full = { ...iss, path: iss.path ?? [] };\n    // for backwards compatibility\n    if (!iss.message) {\n        const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n            unwrapMessage(ctx?.error?.(iss)) ??\n            unwrapMessage(config.customError?.(iss)) ??\n            unwrapMessage(config.localeError?.(iss)) ??\n            \"Invalid input\";\n        full.message = message;\n    }\n    // delete (full as any).def;\n    delete full.inst;\n    delete full.continue;\n    if (!ctx?.reportInput) {\n        delete full.input;\n    }\n    return full;\n}\nexport function getSizableOrigin(input) {\n    if (input instanceof Set)\n        return \"set\";\n    if (input instanceof Map)\n        return \"map\";\n    // @ts-ignore\n    if (input instanceof File)\n        return \"file\";\n    return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n    if (Array.isArray(input))\n        return \"array\";\n    if (typeof input === \"string\")\n        return \"string\";\n    return \"unknown\";\n}\nexport function issue(...args) {\n    const [iss, input, inst] = args;\n    if (typeof iss === \"string\") {\n        return {\n            message: iss,\n            code: \"custom\",\n            input,\n            inst,\n        };\n    }\n    return { ...iss };\n}\nexport function cleanEnum(obj) {\n    return Object.entries(obj)\n        .filter(([k, _]) => {\n        // return true if NaN, meaning it's not a number, thus a string key\n        return Number.isNaN(Number.parseInt(k, 10));\n    })\n        .map((el) => el[1]);\n}\n// Codec utility functions\nexport function base64ToUint8Array(base64) {\n    const binaryString = atob(base64);\n    const bytes = new Uint8Array(binaryString.length);\n    for (let i = 0; i < binaryString.length; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes;\n}\nexport function uint8ArrayToBase64(bytes) {\n    let binaryString = \"\";\n    for (let i = 0; i < bytes.length; i++) {\n        binaryString += String.fromCharCode(bytes[i]);\n    }\n    return btoa(binaryString);\n}\nexport function base64urlToUint8Array(base64url) {\n    const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n    const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n    return base64ToUint8Array(base64 + padding);\n}\nexport function uint8ArrayToBase64url(bytes) {\n    return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nexport function hexToUint8Array(hex) {\n    const cleanHex = hex.replace(/^0x/, \"\");\n    if (cleanHex.length % 2 !== 0) {\n        throw new Error(\"Invalid hex string length\");\n    }\n    const bytes = new Uint8Array(cleanHex.length / 2);\n    for (let i = 0; i < cleanHex.length; i += 2) {\n        bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n    }\n    return bytes;\n}\nexport function uint8ArrayToHex(bytes) {\n    return Array.from(bytes)\n        .map((b) => b.toString(16).padStart(2, \"0\"))\n        .join(\"\");\n}\n// instanceof\nexport class Class {\n    constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n    inst.name = \"$ZodError\";\n    Object.defineProperty(inst, \"_zod\", {\n        value: inst._zod,\n        enumerable: false,\n    });\n    Object.defineProperty(inst, \"issues\", {\n        value: def,\n        enumerable: false,\n    });\n    inst.message = JSON.stringify(def, util.jsonStringifyReplacer, 2);\n    Object.defineProperty(inst, \"toString\", {\n        value: () => inst.message,\n        enumerable: false,\n    });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = {};\n    const formErrors = [];\n    for (const sub of error.issues) {\n        if (sub.path.length > 0) {\n            fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n            fieldErrors[sub.path[0]].push(mapper(sub));\n        }\n        else {\n            formErrors.push(mapper(sub));\n        }\n    }\n    return { formErrors, fieldErrors };\n}\nexport function formatError(error, mapper = (issue) => issue.message) {\n    const fieldErrors = { _errors: [] };\n    const processError = (error) => {\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                issue.errors.map((issues) => processError({ issues }));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues });\n            }\n            else if (issue.path.length === 0) {\n                fieldErrors._errors.push(mapper(issue));\n            }\n            else {\n                let curr = fieldErrors;\n                let i = 0;\n                while (i < issue.path.length) {\n                    const el = issue.path[i];\n                    const terminal = i === issue.path.length - 1;\n                    if (!terminal) {\n                        curr[el] = curr[el] || { _errors: [] };\n                    }\n                    else {\n                        curr[el] = curr[el] || { _errors: [] };\n                        curr[el]._errors.push(mapper(issue));\n                    }\n                    curr = curr[el];\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return fieldErrors;\n}\nexport function treeifyError(error, mapper = (issue) => issue.message) {\n    const result = { errors: [] };\n    const processError = (error, path = []) => {\n        var _a, _b;\n        for (const issue of error.issues) {\n            if (issue.code === \"invalid_union\" && issue.errors.length) {\n                // regular union error\n                issue.errors.map((issues) => processError({ issues }, issue.path));\n            }\n            else if (issue.code === \"invalid_key\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else if (issue.code === \"invalid_element\") {\n                processError({ issues: issue.issues }, issue.path);\n            }\n            else {\n                const fullpath = [...path, ...issue.path];\n                if (fullpath.length === 0) {\n                    result.errors.push(mapper(issue));\n                    continue;\n                }\n                let curr = result;\n                let i = 0;\n                while (i < fullpath.length) {\n                    const el = fullpath[i];\n                    const terminal = i === fullpath.length - 1;\n                    if (typeof el === \"string\") {\n                        curr.properties ?? (curr.properties = {});\n                        (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n                        curr = curr.properties[el];\n                    }\n                    else {\n                        curr.items ?? (curr.items = []);\n                        (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n                        curr = curr.items[el];\n                    }\n                    if (terminal) {\n                        curr.errors.push(mapper(issue));\n                    }\n                    i++;\n                }\n            }\n        }\n    };\n    processError(error);\n    return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n *   issues: [\n *     {\n *       expected: 'string',\n *       code: 'invalid_type',\n *       path: [ 'username' ],\n *       message: 'Invalid input: expected string'\n *     },\n *     {\n *       expected: 'number',\n *       code: 'invalid_type',\n *       path: [ 'favoriteNumbers', 1 ],\n *       message: 'Invalid input: expected number'\n *     }\n *   ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n *   ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n *   ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(_path) {\n    const segs = [];\n    const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n    for (const seg of path) {\n        if (typeof seg === \"number\")\n            segs.push(`[${seg}]`);\n        else if (typeof seg === \"symbol\")\n            segs.push(`[${JSON.stringify(String(seg))}]`);\n        else if (/[^\\w$]/.test(seg))\n            segs.push(`[${JSON.stringify(seg)}]`);\n        else {\n            if (segs.length)\n                segs.push(\".\");\n            segs.push(seg);\n        }\n    }\n    return segs.join(\"\");\n}\nexport function prettifyError(error) {\n    const lines = [];\n    // sort by path length\n    const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n    // Process each issue\n    for (const issue of issues) {\n        lines.push(`✖ ${issue.message}`);\n        if (issue.path?.length)\n            lines.push(`  → at ${toDotPath(issue.path)}`);\n    }\n    // Convert Map to formatted string\n    return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    if (result.issues.length) {\n        const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, _params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    if (result.issues.length) {\n        const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n        util.captureStackTrace(e, params?.callee);\n        throw e;\n    }\n    return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n    const result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise) {\n        throw new core.$ZodAsyncError();\n    }\n    return result.issues.length\n        ? {\n            success: false,\n            error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n    let result = schema._zod.run({ value, issues: [] }, ctx);\n    if (result instanceof Promise)\n        result = await result;\n    return result.issues.length\n        ? {\n            success: false,\n            error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n        }\n        : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\nexport const _encode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parse(_Err)(schema, value, ctx);\n};\nexport const encode = /* @__PURE__*/ _encode(errors.$ZodRealError);\nexport const _decode = (_Err) => (schema, value, _ctx) => {\n    return _parse(_Err)(schema, value, _ctx);\n};\nexport const decode = /* @__PURE__*/ _decode(errors.$ZodRealError);\nexport const _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _parseAsync(_Err)(schema, value, ctx);\n};\nexport const encodeAsync = /* @__PURE__*/ _encodeAsync(errors.$ZodRealError);\nexport const _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _parseAsync(_Err)(schema, value, _ctx);\n};\nexport const decodeAsync = /* @__PURE__*/ _decodeAsync(errors.$ZodRealError);\nexport const _safeEncode = (_Err) => (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParse(_Err)(schema, value, ctx);\n};\nexport const safeEncode = /* @__PURE__*/ _safeEncode(errors.$ZodRealError);\nexport const _safeDecode = (_Err) => (schema, value, _ctx) => {\n    return _safeParse(_Err)(schema, value, _ctx);\n};\nexport const safeDecode = /* @__PURE__*/ _safeDecode(errors.$ZodRealError);\nexport const _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n    const ctx = _ctx ? Object.assign(_ctx, { direction: \"backward\" }) : { direction: \"backward\" };\n    return _safeParseAsync(_Err)(schema, value, ctx);\n};\nexport const safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(errors.$ZodRealError);\nexport const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n    return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nexport const safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(errors.$ZodRealError);\n","export const cuid = /^[cC][^\\s-]{8,}$/;\nexport const cuid2 = /^[0-9a-z]+$/;\nexport const ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nexport const xid = /^[0-9a-vA-V]{20}$/;\nexport const ksuid = /^[A-Za-z0-9]{27}$/;\nexport const nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nexport const duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nexport const extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nexport const guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nexport const uuid = (version) => {\n    if (!version)\n        return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n    return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nexport const uuid4 = /*@__PURE__*/ uuid(4);\nexport const uuid6 = /*@__PURE__*/ uuid(6);\nexport const uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nexport const email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nexport const html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nexport const rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nexport const unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nexport const idnEmail = unicodeEmail;\nexport const browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nexport function emoji() {\n    return new RegExp(_emoji, \"u\");\n}\nexport const ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nexport const ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nexport const cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nexport const cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nexport const base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nexport const base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nexport const hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nexport const domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\nexport const e164 = /^\\+(?:[0-9]){6,14}[0-9]$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nexport const date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n    const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n    const regex = typeof args.precision === \"number\"\n        ? args.precision === -1\n            ? `${hhmm}`\n            : args.precision === 0\n                ? `${hhmm}:[0-5]\\\\d`\n                : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n        : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n    return regex;\n}\nexport function time(args) {\n    return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nexport function datetime(args) {\n    const time = timeSource({ precision: args.precision });\n    const opts = [\"Z\"];\n    if (args.local)\n        opts.push(\"\");\n    // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n    if (args.offset)\n        opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n    const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n    return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nexport const string = (params) => {\n    const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n    return new RegExp(`^${regex}$`);\n};\nexport const bigint = /^-?\\d+n?$/;\nexport const integer = /^-?\\d+$/;\nexport const number = /^-?\\d+(?:\\.\\d+)?/;\nexport const boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\nexport { _null as null };\nconst _undefined = /^undefined$/i;\nexport { _undefined as undefined };\n// regex for string with no uppercase letters\nexport const lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nexport const uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nexport const hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n    return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n    return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nexport const md5_hex = /^[0-9a-fA-F]{32}$/;\nexport const md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nexport const md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nexport const sha1_hex = /^[0-9a-fA-F]{40}$/;\nexport const sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nexport const sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nexport const sha256_hex = /^[0-9a-fA-F]{64}$/;\nexport const sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nexport const sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nexport const sha384_hex = /^[0-9a-fA-F]{96}$/;\nexport const sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nexport const sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nexport const sha512_hex = /^[0-9a-fA-F]{128}$/;\nexport const sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nexport const sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n","// import { $ZodType } from \"./schemas.js\";\nimport * as core from \"./core.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nexport const $ZodCheck = /*@__PURE__*/ core.$constructor(\"$ZodCheck\", (inst, def) => {\n    var _a;\n    inst._zod ?? (inst._zod = {});\n    inst._zod.def = def;\n    (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n    number: \"number\",\n    bigint: \"bigint\",\n    object: \"date\",\n};\nexport const $ZodCheckLessThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n        if (def.value < curr) {\n            if (def.inclusive)\n                bag.maximum = def.value;\n            else\n                bag.exclusiveMaximum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckGreaterThan = /*@__PURE__*/ core.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const origin = numericOriginMap[typeof def.value];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n        if (def.value > curr) {\n            if (def.inclusive)\n                bag.minimum = def.value;\n            else\n                bag.exclusiveMinimum = def.value;\n        }\n    });\n    inst._zod.check = (payload) => {\n        if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n            return;\n        }\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.value,\n            input: payload.value,\n            inclusive: def.inclusive,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMultipleOf = \n/*@__PURE__*/ core.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        var _a;\n        (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n    });\n    inst._zod.check = (payload) => {\n        if (typeof payload.value !== typeof def.value)\n            throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n        const isMultiple = typeof payload.value === \"bigint\"\n            ? payload.value % def.value === BigInt(0)\n            : util.floatSafeRemainder(payload.value, def.value) === 0;\n        if (isMultiple)\n            return;\n        payload.issues.push({\n            origin: typeof payload.value,\n            code: \"not_multiple_of\",\n            divisor: def.value,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    def.format = def.format || \"float64\";\n    const isInt = def.format?.includes(\"int\");\n    const origin = isInt ? \"int\" : \"number\";\n    const [minimum, maximum] = util.NUMBER_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n        if (isInt)\n            bag.pattern = regexes.integer;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (isInt) {\n            if (!Number.isInteger(input)) {\n                // invalid_format issue\n                // payload.issues.push({\n                //   expected: def.format,\n                //   format: def.format,\n                //   code: \"invalid_format\",\n                //   input,\n                //   inst,\n                // });\n                // invalid_type issue\n                payload.issues.push({\n                    expected: origin,\n                    format: def.format,\n                    code: \"invalid_type\",\n                    continue: false,\n                    input,\n                    inst,\n                });\n                return;\n                // not_multiple_of issue\n                // payload.issues.push({\n                //   code: \"not_multiple_of\",\n                //   origin: \"number\",\n                //   input,\n                //   inst,\n                //   divisor: 1,\n                // });\n            }\n            if (!Number.isSafeInteger(input)) {\n                if (input > 0) {\n                    // too_big\n                    payload.issues.push({\n                        input,\n                        code: \"too_big\",\n                        maximum: Number.MAX_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                else {\n                    // too_small\n                    payload.issues.push({\n                        input,\n                        code: \"too_small\",\n                        minimum: Number.MIN_SAFE_INTEGER,\n                        note: \"Integers must be within the safe integer range.\",\n                        inst,\n                        origin,\n                        continue: !def.abort,\n                    });\n                }\n                return;\n            }\n        }\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_small\",\n                minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"number\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n    $ZodCheck.init(inst, def); // no format checks\n    const [minimum, maximum] = util.BIGINT_FORMAT_RANGES[def.format];\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        bag.minimum = minimum;\n        bag.maximum = maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        if (input < minimum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_small\",\n                minimum: minimum,\n                inclusive: true,\n                inst,\n                continue: !def.abort,\n            });\n        }\n        if (input > maximum) {\n            payload.issues.push({\n                origin: \"bigint\",\n                input,\n                code: \"too_big\",\n                maximum,\n                inst,\n            });\n        }\n    };\n});\nexport const $ZodCheckMaxSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size <= def.maximum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinSize = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size >= def.minimum)\n            return;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckSizeEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.size !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.size;\n        bag.maximum = def.size;\n        bag.size = def.size;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const size = input.size;\n        if (size === def.size)\n            return;\n        const tooBig = size > def.size;\n        payload.issues.push({\n            origin: util.getSizableOrigin(input),\n            ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMaxLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n        if (def.maximum < curr)\n            inst._zod.bag.maximum = def.maximum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length <= def.maximum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_big\",\n            maximum: def.maximum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckMinLength = /*@__PURE__*/ core.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n        if (def.minimum > curr)\n            inst._zod.bag.minimum = def.minimum;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length >= def.minimum)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        payload.issues.push({\n            origin,\n            code: \"too_small\",\n            minimum: def.minimum,\n            inclusive: true,\n            input,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLengthEquals = /*@__PURE__*/ core.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n    var _a;\n    $ZodCheck.init(inst, def);\n    (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n        const val = payload.value;\n        return !util.nullish(val) && val.length !== undefined;\n    });\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.minimum = def.length;\n        bag.maximum = def.length;\n        bag.length = def.length;\n    });\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const length = input.length;\n        if (length === def.length)\n            return;\n        const origin = util.getLengthableOrigin(input);\n        const tooBig = length > def.length;\n        payload.issues.push({\n            origin,\n            ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n            inclusive: true,\n            exact: true,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n    var _a, _b;\n    $ZodCheck.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = def.format;\n        if (def.pattern) {\n            bag.patterns ?? (bag.patterns = new Set());\n            bag.patterns.add(def.pattern);\n        }\n    });\n    if (def.pattern)\n        (_a = inst._zod).check ?? (_a.check = (payload) => {\n            def.pattern.lastIndex = 0;\n            if (def.pattern.test(payload.value))\n                return;\n            payload.issues.push({\n                origin: \"string\",\n                code: \"invalid_format\",\n                format: def.format,\n                input: payload.value,\n                ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n                inst,\n                continue: !def.abort,\n            });\n        });\n    else\n        (_b = inst._zod).check ?? (_b.check = () => { });\n});\nexport const $ZodCheckRegex = /*@__PURE__*/ core.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n    $ZodCheckStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        def.pattern.lastIndex = 0;\n        if (def.pattern.test(payload.value))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"regex\",\n            input: payload.value,\n            pattern: def.pattern.toString(),\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckLowerCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.lowercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckUpperCase = /*@__PURE__*/ core.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.uppercase);\n    $ZodCheckStringFormat.init(inst, def);\n});\nexport const $ZodCheckIncludes = /*@__PURE__*/ core.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const escapedRegex = util.escapeRegex(def.includes);\n    const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n    def.pattern = pattern;\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.includes(def.includes, def.position))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"includes\",\n            includes: def.includes,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckStartsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`^${util.escapeRegex(def.prefix)}.*`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.startsWith(def.prefix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"starts_with\",\n            prefix: def.prefix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckEndsWith = /*@__PURE__*/ core.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const pattern = new RegExp(`.*${util.escapeRegex(def.suffix)}$`);\n    def.pattern ?? (def.pattern = pattern);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.patterns ?? (bag.patterns = new Set());\n        bag.patterns.add(pattern);\n    });\n    inst._zod.check = (payload) => {\n        if (payload.value.endsWith(def.suffix))\n            return;\n        payload.issues.push({\n            origin: \"string\",\n            code: \"invalid_format\",\n            format: \"ends_with\",\n            suffix: def.suffix,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n///////////////////////////////////\n/////    $ZodCheckProperty    /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n    if (result.issues.length) {\n        payload.issues.push(...util.prefixIssues(property, result.issues));\n    }\n}\nexport const $ZodCheckProperty = /*@__PURE__*/ core.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        const result = def.schema._zod.run({\n            value: payload.value[def.property],\n            issues: [],\n        }, {});\n        if (result instanceof Promise) {\n            return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n        }\n        handleCheckPropertyResult(result, payload, def.property);\n        return;\n    };\n});\nexport const $ZodCheckMimeType = /*@__PURE__*/ core.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    const mimeSet = new Set(def.mime);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.mime = def.mime;\n    });\n    inst._zod.check = (payload) => {\n        if (mimeSet.has(payload.value.type))\n            return;\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.mime,\n            input: payload.value.type,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCheckOverwrite = /*@__PURE__*/ core.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n    $ZodCheck.init(inst, def);\n    inst._zod.check = (payload) => {\n        payload.value = def.tx(payload.value);\n    };\n});\n","export class Doc {\n    constructor(args = []) {\n        this.content = [];\n        this.indent = 0;\n        if (this)\n            this.args = args;\n    }\n    indented(fn) {\n        this.indent += 1;\n        fn(this);\n        this.indent -= 1;\n    }\n    write(arg) {\n        if (typeof arg === \"function\") {\n            arg(this, { execution: \"sync\" });\n            arg(this, { execution: \"async\" });\n            return;\n        }\n        const content = arg;\n        const lines = content.split(\"\\n\").filter((x) => x);\n        const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n        const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n        for (const line of dedented) {\n            this.content.push(line);\n        }\n    }\n    compile() {\n        const F = Function;\n        const args = this?.args;\n        const content = this?.content ?? [``];\n        const lines = [...content.map((x) => `  ${x}`)];\n        // console.log(lines.join(\"\\n\"));\n        return new F(...args, lines.join(\"\\n\"));\n    }\n}\n","export const version = {\n    major: 4,\n    minor: 1,\n    patch: 12,\n};\n","import * as checks from \"./checks.js\";\nimport * as core from \"./core.js\";\nimport { Doc } from \"./doc.js\";\nimport { parse, parseAsync, safeParse, safeParseAsync } from \"./parse.js\";\nimport * as regexes from \"./regexes.js\";\nimport * as util from \"./util.js\";\nimport { version } from \"./versions.js\";\nexport const $ZodType = /*@__PURE__*/ core.$constructor(\"$ZodType\", (inst, def) => {\n    var _a;\n    inst ?? (inst = {});\n    inst._zod.def = def; // set _def property\n    inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n    inst._zod.version = version;\n    const checks = [...(inst._zod.def.checks ?? [])];\n    // if inst is itself a checks.$ZodCheck, run it as a check\n    if (inst._zod.traits.has(\"$ZodCheck\")) {\n        checks.unshift(inst);\n    }\n    for (const ch of checks) {\n        for (const fn of ch._zod.onattach) {\n            fn(inst);\n        }\n    }\n    if (checks.length === 0) {\n        // deferred initializer\n        // inst._zod.parse is not yet defined\n        (_a = inst._zod).deferred ?? (_a.deferred = []);\n        inst._zod.deferred?.push(() => {\n            inst._zod.run = inst._zod.parse;\n        });\n    }\n    else {\n        const runChecks = (payload, checks, ctx) => {\n            let isAborted = util.aborted(payload);\n            let asyncResult;\n            for (const ch of checks) {\n                if (ch._zod.def.when) {\n                    const shouldRun = ch._zod.def.when(payload);\n                    if (!shouldRun)\n                        continue;\n                }\n                else if (isAborted) {\n                    continue;\n                }\n                const currLen = payload.issues.length;\n                const _ = ch._zod.check(payload);\n                if (_ instanceof Promise && ctx?.async === false) {\n                    throw new core.$ZodAsyncError();\n                }\n                if (asyncResult || _ instanceof Promise) {\n                    asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n                        await _;\n                        const nextLen = payload.issues.length;\n                        if (nextLen === currLen)\n                            return;\n                        if (!isAborted)\n                            isAborted = util.aborted(payload, currLen);\n                    });\n                }\n                else {\n                    const nextLen = payload.issues.length;\n                    if (nextLen === currLen)\n                        continue;\n                    if (!isAborted)\n                        isAborted = util.aborted(payload, currLen);\n                }\n            }\n            if (asyncResult) {\n                return asyncResult.then(() => {\n                    return payload;\n                });\n            }\n            return payload;\n        };\n        // const handleChecksResult = (\n        //   checkResult: ParsePayload,\n        //   originalResult: ParsePayload,\n        //   ctx: ParseContextInternal\n        // ): util.MaybeAsync<ParsePayload> => {\n        //   // if the checks mutated the value && there are no issues, re-parse the result\n        //   if (checkResult.value !== originalResult.value && !checkResult.issues.length)\n        //     return inst._zod.parse(checkResult, ctx);\n        //   return originalResult;\n        // };\n        const handleCanaryResult = (canary, payload, ctx) => {\n            // abort if the canary is aborted\n            if (util.aborted(canary)) {\n                canary.aborted = true;\n                return canary;\n            }\n            // run checks first, then\n            const checkResult = runChecks(payload, checks, ctx);\n            if (checkResult instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n            }\n            return inst._zod.parse(checkResult, ctx);\n        };\n        inst._zod.run = (payload, ctx) => {\n            if (ctx.skipChecks) {\n                return inst._zod.parse(payload, ctx);\n            }\n            if (ctx.direction === \"backward\") {\n                // run canary\n                // initial pass (no checks)\n                const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n                if (canary instanceof Promise) {\n                    return canary.then((canary) => {\n                        return handleCanaryResult(canary, payload, ctx);\n                    });\n                }\n                return handleCanaryResult(canary, payload, ctx);\n            }\n            // forward\n            const result = inst._zod.parse(payload, ctx);\n            if (result instanceof Promise) {\n                if (ctx.async === false)\n                    throw new core.$ZodAsyncError();\n                return result.then((result) => runChecks(result, checks, ctx));\n            }\n            return runChecks(result, checks, ctx);\n        };\n    }\n    inst[\"~standard\"] = {\n        validate: (value) => {\n            try {\n                const r = safeParse(inst, value);\n                return r.success ? { value: r.data } : { issues: r.error?.issues };\n            }\n            catch (_) {\n                return safeParseAsync(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n            }\n        },\n        vendor: \"zod\",\n        version: 1,\n    };\n});\nexport { clone } from \"./util.js\";\nexport const $ZodString = /*@__PURE__*/ core.$constructor(\"$ZodString\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? regexes.string(inst._zod.bag);\n    inst._zod.parse = (payload, _) => {\n        if (def.coerce)\n            try {\n                payload.value = String(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"string\")\n            return payload;\n        payload.issues.push({\n            expected: \"string\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodStringFormat\", (inst, def) => {\n    // check initialization must come first\n    checks.$ZodCheckStringFormat.init(inst, def);\n    $ZodString.init(inst, def);\n});\nexport const $ZodGUID = /*@__PURE__*/ core.$constructor(\"$ZodGUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.guid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodUUID = /*@__PURE__*/ core.$constructor(\"$ZodUUID\", (inst, def) => {\n    if (def.version) {\n        const versionMap = {\n            v1: 1,\n            v2: 2,\n            v3: 3,\n            v4: 4,\n            v5: 5,\n            v6: 6,\n            v7: 7,\n            v8: 8,\n        };\n        const v = versionMap[def.version];\n        if (v === undefined)\n            throw new Error(`Invalid UUID version: \"${def.version}\"`);\n        def.pattern ?? (def.pattern = regexes.uuid(v));\n    }\n    else\n        def.pattern ?? (def.pattern = regexes.uuid());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodEmail = /*@__PURE__*/ core.$constructor(\"$ZodEmail\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.email);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodURL = /*@__PURE__*/ core.$constructor(\"$ZodURL\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        try {\n            // Trim whitespace from input\n            const trimmed = payload.value.trim();\n            // @ts-ignore\n            const url = new URL(trimmed);\n            if (def.hostname) {\n                def.hostname.lastIndex = 0;\n                if (!def.hostname.test(url.hostname)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid hostname\",\n                        pattern: regexes.hostname.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            if (def.protocol) {\n                def.protocol.lastIndex = 0;\n                if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n                    payload.issues.push({\n                        code: \"invalid_format\",\n                        format: \"url\",\n                        note: \"Invalid protocol\",\n                        pattern: def.protocol.source,\n                        input: payload.value,\n                        inst,\n                        continue: !def.abort,\n                    });\n                }\n            }\n            // Set the output value based on normalize flag\n            if (def.normalize) {\n                // Use normalized URL\n                payload.value = url.href;\n            }\n            else {\n                // Preserve the original input (trimmed)\n                payload.value = trimmed;\n            }\n            return;\n        }\n        catch (_) {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"url\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodEmoji = /*@__PURE__*/ core.$constructor(\"$ZodEmoji\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.emoji());\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodNanoID = /*@__PURE__*/ core.$constructor(\"$ZodNanoID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.nanoid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID = /*@__PURE__*/ core.$constructor(\"$ZodCUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCUID2 = /*@__PURE__*/ core.$constructor(\"$ZodCUID2\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cuid2);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodULID = /*@__PURE__*/ core.$constructor(\"$ZodULID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ulid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodXID = /*@__PURE__*/ core.$constructor(\"$ZodXID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.xid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodKSUID = /*@__PURE__*/ core.$constructor(\"$ZodKSUID\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ksuid);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODateTime = /*@__PURE__*/ core.$constructor(\"$ZodISODateTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.datetime(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODate = /*@__PURE__*/ core.$constructor(\"$ZodISODate\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.date);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISOTime = /*@__PURE__*/ core.$constructor(\"$ZodISOTime\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.time(def));\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodISODuration = /*@__PURE__*/ core.$constructor(\"$ZodISODuration\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.duration);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodIPv4 = /*@__PURE__*/ core.$constructor(\"$ZodIPv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv4);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv4`;\n    });\n});\nexport const $ZodIPv6 = /*@__PURE__*/ core.$constructor(\"$ZodIPv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.ipv6);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        const bag = inst._zod.bag;\n        bag.format = `ipv6`;\n    });\n    inst._zod.check = (payload) => {\n        try {\n            // @ts-ignore\n            new URL(`http://[${payload.value}]`);\n            // return;\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"ipv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\nexport const $ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv4);\n    $ZodStringFormat.init(inst, def);\n});\nexport const $ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.cidrv6); // not used for validation\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        const parts = payload.value.split(\"/\");\n        try {\n            if (parts.length !== 2)\n                throw new Error();\n            const [address, prefix] = parts;\n            if (!prefix)\n                throw new Error();\n            const prefixNum = Number(prefix);\n            if (`${prefixNum}` !== prefix)\n                throw new Error();\n            if (prefixNum < 0 || prefixNum > 128)\n                throw new Error();\n            // @ts-ignore\n            new URL(`http://[${address}]`);\n        }\n        catch {\n            payload.issues.push({\n                code: \"invalid_format\",\n                format: \"cidrv6\",\n                input: payload.value,\n                inst,\n                continue: !def.abort,\n            });\n        }\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64(data) {\n    if (data === \"\")\n        return true;\n    if (data.length % 4 !== 0)\n        return false;\n    try {\n        // @ts-ignore\n        atob(data);\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodBase64 = /*@__PURE__*/ core.$constructor(\"$ZodBase64\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\n//////////////////////////////   ZodBase64   //////////////////////////////\nexport function isValidBase64URL(data) {\n    if (!regexes.base64url.test(data))\n        return false;\n    const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n    const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n    return isValidBase64(padded);\n}\nexport const $ZodBase64URL = /*@__PURE__*/ core.$constructor(\"$ZodBase64URL\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.base64url);\n    $ZodStringFormat.init(inst, def);\n    inst._zod.onattach.push((inst) => {\n        inst._zod.bag.contentEncoding = \"base64url\";\n    });\n    inst._zod.check = (payload) => {\n        if (isValidBase64URL(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"base64url\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodE164 = /*@__PURE__*/ core.$constructor(\"$ZodE164\", (inst, def) => {\n    def.pattern ?? (def.pattern = regexes.e164);\n    $ZodStringFormat.init(inst, def);\n});\n//////////////////////////////   ZodJWT   //////////////////////////////\nexport function isValidJWT(token, algorithm = null) {\n    try {\n        const tokensParts = token.split(\".\");\n        if (tokensParts.length !== 3)\n            return false;\n        const [header] = tokensParts;\n        if (!header)\n            return false;\n        // @ts-ignore\n        const parsedHeader = JSON.parse(atob(header));\n        if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n            return false;\n        if (!parsedHeader.alg)\n            return false;\n        if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n            return false;\n        return true;\n    }\n    catch {\n        return false;\n    }\n}\nexport const $ZodJWT = /*@__PURE__*/ core.$constructor(\"$ZodJWT\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (isValidJWT(payload.value, def.alg))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: \"jwt\",\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n    $ZodStringFormat.init(inst, def);\n    inst._zod.check = (payload) => {\n        if (def.fn(payload.value))\n            return;\n        payload.issues.push({\n            code: \"invalid_format\",\n            format: def.format,\n            input: payload.value,\n            inst,\n            continue: !def.abort,\n        });\n    };\n});\nexport const $ZodNumber = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = inst._zod.bag.pattern ?? regexes.number;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Number(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n            return payload;\n        }\n        const received = typeof input === \"number\"\n            ? Number.isNaN(input)\n                ? \"NaN\"\n                : !Number.isFinite(input)\n                    ? \"Infinity\"\n                    : undefined\n            : undefined;\n        payload.issues.push({\n            expected: \"number\",\n            code: \"invalid_type\",\n            input,\n            inst,\n            ...(received ? { received } : {}),\n        });\n        return payload;\n    };\n});\nexport const $ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"$ZodNumber\", (inst, def) => {\n    checks.$ZodCheckNumberFormat.init(inst, def);\n    $ZodNumber.init(inst, def); // no format checksp\n});\nexport const $ZodBoolean = /*@__PURE__*/ core.$constructor(\"$ZodBoolean\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.boolean;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = Boolean(payload.value);\n            }\n            catch (_) { }\n        const input = payload.value;\n        if (typeof input === \"boolean\")\n            return payload;\n        payload.issues.push({\n            expected: \"boolean\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigInt = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.bigint;\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce)\n            try {\n                payload.value = BigInt(payload.value);\n            }\n            catch (_) { }\n        if (typeof payload.value === \"bigint\")\n            return payload;\n        payload.issues.push({\n            expected: \"bigint\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"$ZodBigInt\", (inst, def) => {\n    checks.$ZodCheckBigIntFormat.init(inst, def);\n    $ZodBigInt.init(inst, def); // no format checks\n});\nexport const $ZodSymbol = /*@__PURE__*/ core.$constructor(\"$ZodSymbol\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"symbol\")\n            return payload;\n        payload.issues.push({\n            expected: \"symbol\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodUndefined = /*@__PURE__*/ core.$constructor(\"$ZodUndefined\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.undefined;\n    inst._zod.values = new Set([undefined]);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"undefined\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodNull = /*@__PURE__*/ core.$constructor(\"$ZodNull\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.pattern = regexes.null;\n    inst._zod.values = new Set([null]);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (input === null)\n            return payload;\n        payload.issues.push({\n            expected: \"null\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodAny = /*@__PURE__*/ core.$constructor(\"$ZodAny\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodUnknown = /*@__PURE__*/ core.$constructor(\"$ZodUnknown\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload) => payload;\n});\nexport const $ZodNever = /*@__PURE__*/ core.$constructor(\"$ZodNever\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        payload.issues.push({\n            expected: \"never\",\n            code: \"invalid_type\",\n            input: payload.value,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodVoid = /*@__PURE__*/ core.$constructor(\"$ZodVoid\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (typeof input === \"undefined\")\n            return payload;\n        payload.issues.push({\n            expected: \"void\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodDate = /*@__PURE__*/ core.$constructor(\"$ZodDate\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (def.coerce) {\n            try {\n                payload.value = new Date(payload.value);\n            }\n            catch (_err) { }\n        }\n        const input = payload.value;\n        const isDate = input instanceof Date;\n        const isValidDate = isDate && !Number.isNaN(input.getTime());\n        if (isValidDate)\n            return payload;\n        payload.issues.push({\n            expected: \"date\",\n            code: \"invalid_type\",\n            input,\n            ...(isDate ? { received: \"Invalid Date\" } : {}),\n            inst,\n        });\n        return payload;\n    };\n});\nfunction handleArrayResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodArray = /*@__PURE__*/ core.$constructor(\"$ZodArray\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                expected: \"array\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = Array(input.length);\n        const proms = [];\n        for (let i = 0; i < input.length; i++) {\n            const item = input[i];\n            const result = def.element._zod.run({\n                value: item,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n            }\n            else {\n                handleArrayResult(result, payload, i);\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload; //handleArrayResultsAsync(parseResults, final);\n    };\n});\nfunction handlePropertyResult(result, final, key, input) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(key, result.issues));\n    }\n    if (result.value === undefined) {\n        if (key in input) {\n            final.value[key] = undefined;\n        }\n    }\n    else {\n        final.value[key] = result.value;\n    }\n}\nfunction normalizeDef(def) {\n    const keys = Object.keys(def.shape);\n    for (const k of keys) {\n        if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n            throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n        }\n    }\n    const okeys = util.optionalKeys(def.shape);\n    return {\n        ...def,\n        keys,\n        keySet: new Set(keys),\n        numKeys: keys.length,\n        optionalKeys: new Set(okeys),\n    };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n    const unrecognized = [];\n    // iterate over input keys\n    const keySet = def.keySet;\n    const _catchall = def.catchall._zod;\n    const t = _catchall.def.type;\n    for (const key of Object.keys(input)) {\n        if (keySet.has(key))\n            continue;\n        if (t === \"never\") {\n            unrecognized.push(key);\n            continue;\n        }\n        const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n        if (r instanceof Promise) {\n            proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n        }\n        else {\n            handlePropertyResult(r, payload, key, input);\n        }\n    }\n    if (unrecognized.length) {\n        payload.issues.push({\n            code: \"unrecognized_keys\",\n            keys: unrecognized,\n            input,\n            inst,\n        });\n    }\n    if (!proms.length)\n        return payload;\n    return Promise.all(proms).then(() => {\n        return payload;\n    });\n}\nexport const $ZodObject = /*@__PURE__*/ core.$constructor(\"$ZodObject\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodType.init(inst, def);\n    // const sh = def.shape;\n    const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n    if (!desc?.get) {\n        const sh = def.shape;\n        Object.defineProperty(def, \"shape\", {\n            get: () => {\n                const newSh = { ...sh };\n                Object.defineProperty(def, \"shape\", {\n                    value: newSh,\n                });\n                return newSh;\n            },\n        });\n    }\n    const _normalized = util.cached(() => normalizeDef(def));\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const shape = def.shape;\n        const propValues = {};\n        for (const key in shape) {\n            const field = shape[key]._zod;\n            if (field.values) {\n                propValues[key] ?? (propValues[key] = new Set());\n                for (const v of field.values)\n                    propValues[key].add(v);\n            }\n        }\n        return propValues;\n    });\n    const isObject = util.isObject;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        payload.value = {};\n        const proms = [];\n        const shape = value.shape;\n        for (const key of value.keys) {\n            const el = shape[key];\n            const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n            if (r instanceof Promise) {\n                proms.push(r.then((r) => handlePropertyResult(r, payload, key, input)));\n            }\n            else {\n                handlePropertyResult(r, payload, key, input);\n            }\n        }\n        if (!catchall) {\n            return proms.length ? Promise.all(proms).then(() => payload) : payload;\n        }\n        return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n    };\n});\nexport const $ZodObjectJIT = /*@__PURE__*/ core.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n    // requires cast because technically $ZodObject doesn't extend\n    $ZodObject.init(inst, def);\n    const superParse = inst._zod.parse;\n    const _normalized = util.cached(() => normalizeDef(def));\n    const generateFastpass = (shape) => {\n        const doc = new Doc([\"shape\", \"payload\", \"ctx\"]);\n        const normalized = _normalized.value;\n        const parseStr = (key) => {\n            const k = util.esc(key);\n            return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n        };\n        doc.write(`const input = payload.value;`);\n        const ids = Object.create(null);\n        let counter = 0;\n        for (const key of normalized.keys) {\n            ids[key] = `key_${counter++}`;\n        }\n        // A: preserve key order {\n        doc.write(`const newResult = {};`);\n        for (const key of normalized.keys) {\n            const id = ids[key];\n            const k = util.esc(key);\n            doc.write(`const ${id} = ${parseStr(key)};`);\n            doc.write(`\n        if (${id}.issues.length) {\n          payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n            ...iss,\n            path: iss.path ? [${k}, ...iss.path] : [${k}]\n          })));\n        }\n        \n        \n        if (${id}.value === undefined) {\n          if (${k} in input) {\n            newResult[${k}] = undefined;\n          }\n        } else {\n          newResult[${k}] = ${id}.value;\n        }\n        \n      `);\n        }\n        doc.write(`payload.value = newResult;`);\n        doc.write(`return payload;`);\n        const fn = doc.compile();\n        return (payload, ctx) => fn(shape, payload, ctx);\n    };\n    let fastpass;\n    const isObject = util.isObject;\n    const jit = !core.globalConfig.jitless;\n    const allowsEval = util.allowsEval;\n    const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n    const catchall = def.catchall;\n    let value;\n    inst._zod.parse = (payload, ctx) => {\n        value ?? (value = _normalized.value);\n        const input = payload.value;\n        if (!isObject(input)) {\n            payload.issues.push({\n                expected: \"object\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n            // always synchronous\n            if (!fastpass)\n                fastpass = generateFastpass(def.shape);\n            payload = fastpass(payload, ctx);\n            if (!catchall)\n                return payload;\n            return handleCatchall([], input, payload, ctx, value, inst);\n        }\n        return superParse(payload, ctx);\n    };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n    for (const result of results) {\n        if (result.issues.length === 0) {\n            final.value = result.value;\n            return final;\n        }\n    }\n    const nonaborted = results.filter((r) => !util.aborted(r));\n    if (nonaborted.length === 1) {\n        final.value = nonaborted[0].value;\n        return nonaborted[0];\n    }\n    final.issues.push({\n        code: \"invalid_union\",\n        input: final.value,\n        inst,\n        errors: results.map((result) => result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n    });\n    return final;\n}\nexport const $ZodUnion = /*@__PURE__*/ core.$constructor(\"$ZodUnion\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n    util.defineLazy(inst._zod, \"values\", () => {\n        if (def.options.every((o) => o._zod.values)) {\n            return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n        }\n        return undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        if (def.options.every((o) => o._zod.pattern)) {\n            const patterns = def.options.map((o) => o._zod.pattern);\n            return new RegExp(`^(${patterns.map((p) => util.cleanRegex(p.source)).join(\"|\")})$`);\n        }\n        return undefined;\n    });\n    const single = def.options.length === 1;\n    const first = def.options[0]._zod.run;\n    inst._zod.parse = (payload, ctx) => {\n        if (single) {\n            return first(payload, ctx);\n        }\n        let async = false;\n        const results = [];\n        for (const option of def.options) {\n            const result = option._zod.run({\n                value: payload.value,\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                results.push(result);\n                async = true;\n            }\n            else {\n                if (result.issues.length === 0)\n                    return result;\n                results.push(result);\n            }\n        }\n        if (!async)\n            return handleUnionResults(results, payload, inst, ctx);\n        return Promise.all(results).then((results) => {\n            return handleUnionResults(results, payload, inst, ctx);\n        });\n    };\n});\nexport const $ZodDiscriminatedUnion = \n/*@__PURE__*/\ncore.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n    $ZodUnion.init(inst, def);\n    const _super = inst._zod.parse;\n    util.defineLazy(inst._zod, \"propValues\", () => {\n        const propValues = {};\n        for (const option of def.options) {\n            const pv = option._zod.propValues;\n            if (!pv || Object.keys(pv).length === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n            for (const [k, v] of Object.entries(pv)) {\n                if (!propValues[k])\n                    propValues[k] = new Set();\n                for (const val of v) {\n                    propValues[k].add(val);\n                }\n            }\n        }\n        return propValues;\n    });\n    const disc = util.cached(() => {\n        const opts = def.options;\n        const map = new Map();\n        for (const o of opts) {\n            const values = o._zod.propValues?.[def.discriminator];\n            if (!values || values.size === 0)\n                throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n            for (const v of values) {\n                if (map.has(v)) {\n                    throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n                }\n                map.set(v, o);\n            }\n        }\n        return map;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isObject(input)) {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"object\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const opt = disc.value.get(input?.[def.discriminator]);\n        if (opt) {\n            return opt._zod.run(payload, ctx);\n        }\n        if (def.unionFallback) {\n            return _super(payload, ctx);\n        }\n        // no matching discriminator\n        payload.issues.push({\n            code: \"invalid_union\",\n            errors: [],\n            note: \"No matching discriminator\",\n            discriminator: def.discriminator,\n            input,\n            path: [def.discriminator],\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodIntersection = /*@__PURE__*/ core.$constructor(\"$ZodIntersection\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n        const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n        const async = left instanceof Promise || right instanceof Promise;\n        if (async) {\n            return Promise.all([left, right]).then(([left, right]) => {\n                return handleIntersectionResults(payload, left, right);\n            });\n        }\n        return handleIntersectionResults(payload, left, right);\n    };\n});\nfunction mergeValues(a, b) {\n    // const aType = parse.t(a);\n    // const bType = parse.t(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    if (a instanceof Date && b instanceof Date && +a === +b) {\n        return { valid: true, data: a };\n    }\n    if (util.isPlainObject(a) && util.isPlainObject(b)) {\n        const bKeys = Object.keys(b);\n        const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    if (Array.isArray(a) && Array.isArray(b)) {\n        if (a.length !== b.length) {\n            return { valid: false, mergeErrorPath: [] };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return {\n                    valid: false,\n                    mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n                };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n    if (left.issues.length) {\n        result.issues.push(...left.issues);\n    }\n    if (right.issues.length) {\n        result.issues.push(...right.issues);\n    }\n    if (util.aborted(result))\n        return result;\n    const merged = mergeValues(left.value, right.value);\n    if (!merged.valid) {\n        throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n    }\n    result.value = merged.data;\n    return result;\n}\nexport const $ZodTuple = /*@__PURE__*/ core.$constructor(\"$ZodTuple\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const items = def.items;\n    const optStart = items.length - [...items].reverse().findIndex((item) => item._zod.optin !== \"optional\");\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!Array.isArray(input)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"tuple\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        payload.value = [];\n        const proms = [];\n        if (!def.rest) {\n            const tooBig = input.length > items.length;\n            const tooSmall = input.length < optStart - 1;\n            if (tooBig || tooSmall) {\n                payload.issues.push({\n                    ...(tooBig ? { code: \"too_big\", maximum: items.length } : { code: \"too_small\", minimum: items.length }),\n                    input,\n                    inst,\n                    origin: \"array\",\n                });\n                return payload;\n            }\n        }\n        let i = -1;\n        for (const item of items) {\n            i++;\n            if (i >= input.length)\n                if (i >= optStart)\n                    continue;\n            const result = item._zod.run({\n                value: input[i],\n                issues: [],\n            }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n            }\n            else {\n                handleTupleResult(result, payload, i);\n            }\n        }\n        if (def.rest) {\n            const rest = input.slice(items.length);\n            for (const el of rest) {\n                i++;\n                const result = def.rest._zod.run({\n                    value: el,\n                    issues: [],\n                }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => handleTupleResult(result, payload, i)));\n                }\n                else {\n                    handleTupleResult(result, payload, i);\n                }\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleTupleResult(result, final, index) {\n    if (result.issues.length) {\n        final.issues.push(...util.prefixIssues(index, result.issues));\n    }\n    final.value[index] = result.value;\n}\nexport const $ZodRecord = /*@__PURE__*/ core.$constructor(\"$ZodRecord\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!util.isPlainObject(input)) {\n            payload.issues.push({\n                expected: \"record\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        if (def.keyType._zod.values) {\n            const values = def.keyType._zod.values;\n            payload.value = {};\n            for (const key of values) {\n                if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n                    const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                    if (result instanceof Promise) {\n                        proms.push(result.then((result) => {\n                            if (result.issues.length) {\n                                payload.issues.push(...util.prefixIssues(key, result.issues));\n                            }\n                            payload.value[key] = result.value;\n                        }));\n                    }\n                    else {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[key] = result.value;\n                    }\n                }\n            }\n            let unrecognized;\n            for (const key in input) {\n                if (!values.has(key)) {\n                    unrecognized = unrecognized ?? [];\n                    unrecognized.push(key);\n                }\n            }\n            if (unrecognized && unrecognized.length > 0) {\n                payload.issues.push({\n                    code: \"unrecognized_keys\",\n                    input,\n                    inst,\n                    keys: unrecognized,\n                });\n            }\n        }\n        else {\n            payload.value = {};\n            for (const key of Reflect.ownKeys(input)) {\n                if (key === \"__proto__\")\n                    continue;\n                const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n                if (keyResult instanceof Promise) {\n                    throw new Error(\"Async schemas not supported in object keys currently\");\n                }\n                if (keyResult.issues.length) {\n                    payload.issues.push({\n                        code: \"invalid_key\",\n                        origin: \"record\",\n                        issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        input: key,\n                        path: [key],\n                        inst,\n                    });\n                    payload.value[keyResult.value] = keyResult.value;\n                    continue;\n                }\n                const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n                if (result instanceof Promise) {\n                    proms.push(result.then((result) => {\n                        if (result.issues.length) {\n                            payload.issues.push(...util.prefixIssues(key, result.issues));\n                        }\n                        payload.value[keyResult.value] = result.value;\n                    }));\n                }\n                else {\n                    if (result.issues.length) {\n                        payload.issues.push(...util.prefixIssues(key, result.issues));\n                    }\n                    payload.value[keyResult.value] = result.value;\n                }\n            }\n        }\n        if (proms.length) {\n            return Promise.all(proms).then(() => payload);\n        }\n        return payload;\n    };\n});\nexport const $ZodMap = /*@__PURE__*/ core.$constructor(\"$ZodMap\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Map)) {\n            payload.issues.push({\n                expected: \"map\",\n                code: \"invalid_type\",\n                input,\n                inst,\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Map();\n        for (const [key, value] of input) {\n            const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n            const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n            if (keyResult instanceof Promise || valueResult instanceof Promise) {\n                proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n                    handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n                }));\n            }\n            else {\n                handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n            }\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n    if (keyResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, keyResult.issues));\n        }\n        else {\n            final.issues.push({\n                code: \"invalid_key\",\n                origin: \"map\",\n                input,\n                inst,\n                issues: keyResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    if (valueResult.issues.length) {\n        if (util.propertyKeyTypes.has(typeof key)) {\n            final.issues.push(...util.prefixIssues(key, valueResult.issues));\n        }\n        else {\n            final.issues.push({\n                origin: \"map\",\n                code: \"invalid_element\",\n                input,\n                inst,\n                key: key,\n                issues: valueResult.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n            });\n        }\n    }\n    final.value.set(keyResult.value, valueResult.value);\n}\nexport const $ZodSet = /*@__PURE__*/ core.$constructor(\"$ZodSet\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        const input = payload.value;\n        if (!(input instanceof Set)) {\n            payload.issues.push({\n                input,\n                inst,\n                expected: \"set\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        const proms = [];\n        payload.value = new Set();\n        for (const item of input) {\n            const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n            if (result instanceof Promise) {\n                proms.push(result.then((result) => handleSetResult(result, payload)));\n            }\n            else\n                handleSetResult(result, payload);\n        }\n        if (proms.length)\n            return Promise.all(proms).then(() => payload);\n        return payload;\n    };\n});\nfunction handleSetResult(result, final) {\n    if (result.issues.length) {\n        final.issues.push(...result.issues);\n    }\n    final.value.add(result.value);\n}\nexport const $ZodEnum = /*@__PURE__*/ core.$constructor(\"$ZodEnum\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const values = util.getEnumValues(def.entries);\n    const valuesSet = new Set(values);\n    inst._zod.values = valuesSet;\n    inst._zod.pattern = new RegExp(`^(${values\n        .filter((k) => util.propertyKeyTypes.has(typeof k))\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o.toString()))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (valuesSet.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodLiteral = /*@__PURE__*/ core.$constructor(\"$ZodLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    if (def.values.length === 0) {\n        throw new Error(\"Cannot create literal schema with no valid values\");\n    }\n    inst._zod.values = new Set(def.values);\n    inst._zod.pattern = new RegExp(`^(${def.values\n        .map((o) => (typeof o === \"string\" ? util.escapeRegex(o) : o ? util.escapeRegex(o.toString()) : String(o)))\n        .join(\"|\")})$`);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        if (inst._zod.values.has(input)) {\n            return payload;\n        }\n        payload.issues.push({\n            code: \"invalid_value\",\n            values: def.values,\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodFile = /*@__PURE__*/ core.$constructor(\"$ZodFile\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        const input = payload.value;\n        // @ts-ignore\n        if (input instanceof File)\n            return payload;\n        payload.issues.push({\n            expected: \"file\",\n            code: \"invalid_type\",\n            input,\n            inst,\n        });\n        return payload;\n    };\n});\nexport const $ZodTransform = /*@__PURE__*/ core.$constructor(\"$ZodTransform\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        const _out = def.transform(payload.value, payload);\n        if (ctx.async) {\n            const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        if (_out instanceof Promise) {\n            throw new core.$ZodAsyncError();\n        }\n        payload.value = _out;\n        return payload;\n    };\n});\nfunction handleOptionalResult(result, input) {\n    if (result.issues.length && input === undefined) {\n        return { issues: [], value: undefined };\n    }\n    return result;\n}\nexport const $ZodOptional = /*@__PURE__*/ core.$constructor(\"$ZodOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    inst._zod.optout = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n    });\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)})?$`) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        if (def.innerType._zod.optin === \"optional\") {\n            const result = def.innerType._zod.run(payload, ctx);\n            if (result instanceof Promise)\n                return result.then((r) => handleOptionalResult(r, payload.value));\n            return handleOptionalResult(result, payload.value);\n        }\n        if (payload.value === undefined) {\n            return payload;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNullable = /*@__PURE__*/ core.$constructor(\"$ZodNullable\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"pattern\", () => {\n        const pattern = def.innerType._zod.pattern;\n        return pattern ? new RegExp(`^(${util.cleanRegex(pattern.source)}|null)$`) : undefined;\n    });\n    util.defineLazy(inst._zod, \"values\", () => {\n        return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        // Forward direction (decode): allow null to pass through\n        if (payload.value === null)\n            return payload;\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodDefault = /*@__PURE__*/ core.$constructor(\"$ZodDefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // inst._zod.qin = \"true\";\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply defaults for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n            /**\n             * $ZodDefault returns the default value immediately in forward direction.\n             * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe.   */\n            return payload;\n        }\n        // Forward direction: continue with default handling\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleDefaultResult(result, def));\n        }\n        return handleDefaultResult(result, def);\n    };\n});\nfunction handleDefaultResult(payload, def) {\n    if (payload.value === undefined) {\n        payload.value = def.defaultValue;\n    }\n    return payload;\n}\nexport const $ZodPrefault = /*@__PURE__*/ core.$constructor(\"$ZodPrefault\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.optin = \"optional\";\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply prefault for undefined input\n        if (payload.value === undefined) {\n            payload.value = def.defaultValue;\n        }\n        return def.innerType._zod.run(payload, ctx);\n    };\n});\nexport const $ZodNonOptional = /*@__PURE__*/ core.$constructor(\"$ZodNonOptional\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => {\n        const v = def.innerType._zod.values;\n        return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n    });\n    inst._zod.parse = (payload, ctx) => {\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => handleNonOptionalResult(result, inst));\n        }\n        return handleNonOptionalResult(result, inst);\n    };\n});\nfunction handleNonOptionalResult(payload, inst) {\n    if (!payload.issues.length && payload.value === undefined) {\n        payload.issues.push({\n            code: \"invalid_type\",\n            expected: \"nonoptional\",\n            input: payload.value,\n            inst,\n        });\n    }\n    return payload;\n}\nexport const $ZodSuccess = /*@__PURE__*/ core.$constructor(\"$ZodSuccess\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(\"ZodSuccess\");\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.issues.length === 0;\n                return payload;\n            });\n        }\n        payload.value = result.issues.length === 0;\n        return payload;\n    };\n});\nexport const $ZodCatch = /*@__PURE__*/ core.$constructor(\"$ZodCatch\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        // Forward direction (decode): apply catch logic\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then((result) => {\n                payload.value = result.value;\n                if (result.issues.length) {\n                    payload.value = def.catchValue({\n                        ...payload,\n                        error: {\n                            issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                        },\n                        input: payload.value,\n                    });\n                    payload.issues = [];\n                }\n                return payload;\n            });\n        }\n        payload.value = result.value;\n        if (result.issues.length) {\n            payload.value = def.catchValue({\n                ...payload,\n                error: {\n                    issues: result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())),\n                },\n                input: payload.value,\n            });\n            payload.issues = [];\n        }\n        return payload;\n    };\n});\nexport const $ZodNaN = /*@__PURE__*/ core.$constructor(\"$ZodNaN\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"nan\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodPipe = /*@__PURE__*/ core.$constructor(\"$ZodPipe\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handlePipeResult(right, def.in, ctx));\n            }\n            return handlePipeResult(right, def.in, ctx);\n        }\n        const left = def.in._zod.run(payload, ctx);\n        if (left instanceof Promise) {\n            return left.then((left) => handlePipeResult(left, def.out, ctx));\n        }\n        return handlePipeResult(left, def.out, ctx);\n    };\n});\nfunction handlePipeResult(left, next, ctx) {\n    if (left.issues.length) {\n        // prevent further checks\n        left.aborted = true;\n        return left;\n    }\n    return next._zod.run({ value: left.value, issues: left.issues }, ctx);\n}\nexport const $ZodCodec = /*@__PURE__*/ core.$constructor(\"$ZodCodec\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n    util.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n    inst._zod.parse = (payload, ctx) => {\n        const direction = ctx.direction || \"forward\";\n        if (direction === \"forward\") {\n            const left = def.in._zod.run(payload, ctx);\n            if (left instanceof Promise) {\n                return left.then((left) => handleCodecAResult(left, def, ctx));\n            }\n            return handleCodecAResult(left, def, ctx);\n        }\n        else {\n            const right = def.out._zod.run(payload, ctx);\n            if (right instanceof Promise) {\n                return right.then((right) => handleCodecAResult(right, def, ctx));\n            }\n            return handleCodecAResult(right, def, ctx);\n        }\n    };\n});\nfunction handleCodecAResult(result, def, ctx) {\n    if (result.issues.length) {\n        // prevent further checks\n        result.aborted = true;\n        return result;\n    }\n    const direction = ctx.direction || \"forward\";\n    if (direction === \"forward\") {\n        const transformed = def.transform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.out, ctx);\n    }\n    else {\n        const transformed = def.reverseTransform(result.value, result);\n        if (transformed instanceof Promise) {\n            return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n        }\n        return handleCodecTxResult(result, transformed, def.in, ctx);\n    }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n    // Check if transform added any issues\n    if (left.issues.length) {\n        left.aborted = true;\n        return left;\n    }\n    return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nexport const $ZodReadonly = /*@__PURE__*/ core.$constructor(\"$ZodReadonly\", (inst, def) => {\n    $ZodType.init(inst, def);\n    util.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n    util.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n    util.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n    inst._zod.parse = (payload, ctx) => {\n        if (ctx.direction === \"backward\") {\n            return def.innerType._zod.run(payload, ctx);\n        }\n        const result = def.innerType._zod.run(payload, ctx);\n        if (result instanceof Promise) {\n            return result.then(handleReadonlyResult);\n        }\n        return handleReadonlyResult(result);\n    };\n});\nfunction handleReadonlyResult(payload) {\n    payload.value = Object.freeze(payload.value);\n    return payload;\n}\nexport const $ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n    $ZodType.init(inst, def);\n    const regexParts = [];\n    for (const part of def.parts) {\n        if (typeof part === \"object\" && part !== null) {\n            // is Zod schema\n            if (!part._zod.pattern) {\n                // if (!source)\n                throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n            }\n            const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n            if (!source)\n                throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n            const start = source.startsWith(\"^\") ? 1 : 0;\n            const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n            regexParts.push(source.slice(start, end));\n        }\n        else if (part === null || util.primitiveTypes.has(typeof part)) {\n            regexParts.push(util.escapeRegex(`${part}`));\n        }\n        else {\n            throw new Error(`Invalid template literal part: ${part}`);\n        }\n    }\n    inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"string\") {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                expected: \"template_literal\",\n                code: \"invalid_type\",\n            });\n            return payload;\n        }\n        inst._zod.pattern.lastIndex = 0;\n        if (!inst._zod.pattern.test(payload.value)) {\n            payload.issues.push({\n                input: payload.value,\n                inst,\n                code: \"invalid_format\",\n                format: def.format ?? \"template_literal\",\n                pattern: inst._zod.pattern.source,\n            });\n            return payload;\n        }\n        return payload;\n    };\n});\nexport const $ZodFunction = /*@__PURE__*/ core.$constructor(\"$ZodFunction\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._def = def;\n    inst._zod.def = def;\n    inst.implement = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implement() must be called with a function\");\n        }\n        return function (...args) {\n            const parsedArgs = inst._def.input ? parse(inst._def.input, args) : args;\n            const result = Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return parse(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst.implementAsync = (func) => {\n        if (typeof func !== \"function\") {\n            throw new Error(\"implementAsync() must be called with a function\");\n        }\n        return async function (...args) {\n            const parsedArgs = inst._def.input ? await parseAsync(inst._def.input, args) : args;\n            const result = await Reflect.apply(func, this, parsedArgs);\n            if (inst._def.output) {\n                return await parseAsync(inst._def.output, result);\n            }\n            return result;\n        };\n    };\n    inst._zod.parse = (payload, _ctx) => {\n        if (typeof payload.value !== \"function\") {\n            payload.issues.push({\n                code: \"invalid_type\",\n                expected: \"function\",\n                input: payload.value,\n                inst,\n            });\n            return payload;\n        }\n        // Check if output is a promise type to determine if we should use async implementation\n        const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n        if (hasPromiseOutput) {\n            payload.value = inst.implementAsync(payload.value);\n        }\n        else {\n            payload.value = inst.implement(payload.value);\n        }\n        return payload;\n    };\n    inst.input = (...args) => {\n        const F = inst.constructor;\n        if (Array.isArray(args[0])) {\n            return new F({\n                type: \"function\",\n                input: new $ZodTuple({\n                    type: \"tuple\",\n                    items: args[0],\n                    rest: args[1],\n                }),\n                output: inst._def.output,\n            });\n        }\n        return new F({\n            type: \"function\",\n            input: args[0],\n            output: inst._def.output,\n        });\n    };\n    inst.output = (output) => {\n        const F = inst.constructor;\n        return new F({\n            type: \"function\",\n            input: inst._def.input,\n            output,\n        });\n    };\n    return inst;\n});\nexport const $ZodPromise = /*@__PURE__*/ core.$constructor(\"$ZodPromise\", (inst, def) => {\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, ctx) => {\n        return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n    };\n});\nexport const $ZodLazy = /*@__PURE__*/ core.$constructor(\"$ZodLazy\", (inst, def) => {\n    $ZodType.init(inst, def);\n    // let _innerType!: any;\n    // util.defineLazy(def, \"getter\", () => {\n    //   if (!_innerType) {\n    //     _innerType = def.getter();\n    //   }\n    //   return () => _innerType;\n    // });\n    util.defineLazy(inst._zod, \"innerType\", () => def.getter());\n    util.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType._zod.pattern);\n    util.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType._zod.propValues);\n    util.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType._zod.optin ?? undefined);\n    util.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType._zod.optout ?? undefined);\n    inst._zod.parse = (payload, ctx) => {\n        const inner = inst._zod.innerType;\n        return inner._zod.run(payload, ctx);\n    };\n});\nexport const $ZodCustom = /*@__PURE__*/ core.$constructor(\"$ZodCustom\", (inst, def) => {\n    checks.$ZodCheck.init(inst, def);\n    $ZodType.init(inst, def);\n    inst._zod.parse = (payload, _) => {\n        return payload;\n    };\n    inst._zod.check = (payload) => {\n        const input = payload.value;\n        const r = def.fn(input);\n        if (r instanceof Promise) {\n            return r.then((r) => handleRefineResult(r, payload, input, inst));\n        }\n        handleRefineResult(r, payload, input, inst);\n        return;\n    };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n    if (!result) {\n        const _iss = {\n            code: \"custom\",\n            input,\n            inst, // incorporates params.error into issue reporting\n            path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n            continue: !inst._zod.def.abort,\n            // params: inst._zod.def.params,\n        };\n        if (inst._zod.def.params)\n            _iss.params = inst._zod.def.params;\n        payload.issues.push(util.issue(_iss));\n    }\n}\n","export const $output = Symbol(\"ZodOutput\");\nexport const $input = Symbol(\"ZodInput\");\nexport class $ZodRegistry {\n    constructor() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n    }\n    add(schema, ..._meta) {\n        const meta = _meta[0];\n        this._map.set(schema, meta);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            if (this._idmap.has(meta.id)) {\n                throw new Error(`ID ${meta.id} already exists in the registry`);\n            }\n            this._idmap.set(meta.id, schema);\n        }\n        return this;\n    }\n    clear() {\n        this._map = new WeakMap();\n        this._idmap = new Map();\n        return this;\n    }\n    remove(schema) {\n        const meta = this._map.get(schema);\n        if (meta && typeof meta === \"object\" && \"id\" in meta) {\n            this._idmap.delete(meta.id);\n        }\n        this._map.delete(schema);\n        return this;\n    }\n    get(schema) {\n        // return this._map.get(schema) as any;\n        // inherit metadata\n        const p = schema._zod.parent;\n        if (p) {\n            const pm = { ...(this.get(p) ?? {}) };\n            delete pm.id; // do not inherit id\n            const f = { ...pm, ...this._map.get(schema) };\n            return Object.keys(f).length ? f : undefined;\n        }\n        return this._map.get(schema);\n    }\n    has(schema) {\n        return this._map.has(schema);\n    }\n}\n// registries\nexport function registry() {\n    return new $ZodRegistry();\n}\nexport const globalRegistry = /*@__PURE__*/ registry();\n","import * as checks from \"./checks.js\";\nimport * as schemas from \"./schemas.js\";\nimport * as util from \"./util.js\";\nexport function _string(Class, params) {\n    return new Class({\n        type: \"string\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedString(Class, params) {\n    return new Class({\n        type: \"string\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _email(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"email\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _guid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"guid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v4\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v6\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uuidv7(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"uuid\",\n        check: \"string_format\",\n        abort: false,\n        version: \"v7\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _emoji(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"emoji\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nanoid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"nanoid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cuid2(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cuid2\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ulid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ulid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _xid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"xid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ksuid(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ksuid\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _ipv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"ipv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv4(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv4\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _cidrv6(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"cidrv6\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _base64url(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"base64url\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _e164(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"e164\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _jwt(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"jwt\",\n        check: \"string_format\",\n        abort: false,\n        ...util.normalizeParams(params),\n    });\n}\nexport const TimePrecision = {\n    Any: null,\n    Minute: -1,\n    Second: 0,\n    Millisecond: 3,\n    Microsecond: 6,\n};\nexport function _isoDateTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"datetime\",\n        check: \"string_format\",\n        offset: false,\n        local: false,\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDate(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"date\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoTime(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"time\",\n        check: \"string_format\",\n        precision: null,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _isoDuration(Class, params) {\n    return new Class({\n        type: \"string\",\n        format: \"duration\",\n        check: \"string_format\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _number(Class, params) {\n    return new Class({\n        type: \"number\",\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedNumber(Class, params) {\n    return new Class({\n        type: \"number\",\n        coerce: true,\n        checks: [],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"safeint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _float64(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"float64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"int32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint32(Class, params) {\n    return new Class({\n        type: \"number\",\n        check: \"number_format\",\n        abort: false,\n        format: \"uint32\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _boolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBoolean(Class, params) {\n    return new Class({\n        type: \"boolean\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _bigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedBigint(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _int64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"int64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uint64(Class, params) {\n    return new Class({\n        type: \"bigint\",\n        check: \"bigint_format\",\n        abort: false,\n        format: \"uint64\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _symbol(Class, params) {\n    return new Class({\n        type: \"symbol\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _undefined(Class, params) {\n    return new Class({\n        type: \"undefined\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _null(Class, params) {\n    return new Class({\n        type: \"null\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _any(Class) {\n    return new Class({\n        type: \"any\",\n    });\n}\nexport function _unknown(Class) {\n    return new Class({\n        type: \"unknown\",\n    });\n}\nexport function _never(Class, params) {\n    return new Class({\n        type: \"never\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _void(Class, params) {\n    return new Class({\n        type: \"void\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _date(Class, params) {\n    return new Class({\n        type: \"date\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _coercedDate(Class, params) {\n    return new Class({\n        type: \"date\",\n        coerce: true,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _nan(Class, params) {\n    return new Class({\n        type: \"nan\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lt(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _lte(value, params) {\n    return new checks.$ZodCheckLessThan({\n        check: \"less_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.lte()` instead. */\n_lte as _max, };\nexport function _gt(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: false,\n    });\n}\nexport function _gte(value, params) {\n    return new checks.$ZodCheckGreaterThan({\n        check: \"greater_than\",\n        ...util.normalizeParams(params),\n        value,\n        inclusive: true,\n    });\n}\nexport { \n/** @deprecated Use `z.gte()` instead. */\n_gte as _min, };\nexport function _positive(params) {\n    return _gt(0, params);\n}\n// negative\nexport function _negative(params) {\n    return _lt(0, params);\n}\n// nonpositive\nexport function _nonpositive(params) {\n    return _lte(0, params);\n}\n// nonnegative\nexport function _nonnegative(params) {\n    return _gte(0, params);\n}\nexport function _multipleOf(value, params) {\n    return new checks.$ZodCheckMultipleOf({\n        check: \"multiple_of\",\n        ...util.normalizeParams(params),\n        value,\n    });\n}\nexport function _maxSize(maximum, params) {\n    return new checks.$ZodCheckMaxSize({\n        check: \"max_size\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n}\nexport function _minSize(minimum, params) {\n    return new checks.$ZodCheckMinSize({\n        check: \"min_size\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _size(size, params) {\n    return new checks.$ZodCheckSizeEquals({\n        check: \"size_equals\",\n        ...util.normalizeParams(params),\n        size,\n    });\n}\nexport function _maxLength(maximum, params) {\n    const ch = new checks.$ZodCheckMaxLength({\n        check: \"max_length\",\n        ...util.normalizeParams(params),\n        maximum,\n    });\n    return ch;\n}\nexport function _minLength(minimum, params) {\n    return new checks.$ZodCheckMinLength({\n        check: \"min_length\",\n        ...util.normalizeParams(params),\n        minimum,\n    });\n}\nexport function _length(length, params) {\n    return new checks.$ZodCheckLengthEquals({\n        check: \"length_equals\",\n        ...util.normalizeParams(params),\n        length,\n    });\n}\nexport function _regex(pattern, params) {\n    return new checks.$ZodCheckRegex({\n        check: \"string_format\",\n        format: \"regex\",\n        ...util.normalizeParams(params),\n        pattern,\n    });\n}\nexport function _lowercase(params) {\n    return new checks.$ZodCheckLowerCase({\n        check: \"string_format\",\n        format: \"lowercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _uppercase(params) {\n    return new checks.$ZodCheckUpperCase({\n        check: \"string_format\",\n        format: \"uppercase\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _includes(includes, params) {\n    return new checks.$ZodCheckIncludes({\n        check: \"string_format\",\n        format: \"includes\",\n        ...util.normalizeParams(params),\n        includes,\n    });\n}\nexport function _startsWith(prefix, params) {\n    return new checks.$ZodCheckStartsWith({\n        check: \"string_format\",\n        format: \"starts_with\",\n        ...util.normalizeParams(params),\n        prefix,\n    });\n}\nexport function _endsWith(suffix, params) {\n    return new checks.$ZodCheckEndsWith({\n        check: \"string_format\",\n        format: \"ends_with\",\n        ...util.normalizeParams(params),\n        suffix,\n    });\n}\nexport function _property(property, schema, params) {\n    return new checks.$ZodCheckProperty({\n        check: \"property\",\n        property,\n        schema,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _mime(types, params) {\n    return new checks.$ZodCheckMimeType({\n        check: \"mime_type\",\n        mime: types,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _overwrite(tx) {\n    return new checks.$ZodCheckOverwrite({\n        check: \"overwrite\",\n        tx,\n    });\n}\n// normalize\nexport function _normalize(form) {\n    return _overwrite((input) => input.normalize(form));\n}\n// trim\nexport function _trim() {\n    return _overwrite((input) => input.trim());\n}\n// toLowerCase\nexport function _toLowerCase() {\n    return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\nexport function _toUpperCase() {\n    return _overwrite((input) => input.toUpperCase());\n}\nexport function _array(Class, element, params) {\n    return new Class({\n        type: \"array\",\n        element,\n        // get element() {\n        //   return element;\n        // },\n        ...util.normalizeParams(params),\n    });\n}\nexport function _union(Class, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _discriminatedUnion(Class, discriminator, options, params) {\n    return new Class({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _intersection(Class, left, right) {\n    return new Class({\n        type: \"intersection\",\n        left,\n        right,\n    });\n}\n// export function _tuple(\n//   Class: util.SchemaClass<schemas.$ZodTuple>,\n//   items: [],\n//   params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\nexport function _tuple(Class, items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof schemas.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new Class({\n        type: \"tuple\",\n        items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _record(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"record\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _map(Class, keyType, valueType, params) {\n    return new Class({\n        type: \"map\",\n        keyType,\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _set(Class, valueType, params) {\n    return new Class({\n        type: \"set\",\n        valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _enum(Class, values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    // if (Array.isArray(values)) {\n    //   for (const value of values) {\n    //     entries[value] = value;\n    //   }\n    // } else {\n    //   Object.assign(entries, values);\n    // }\n    // const entries: util.EnumLike = {};\n    // for (const val of values) {\n    //   entries[val] = val;\n    // }\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function _nativeEnum(Class, entries, params) {\n    return new Class({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _literal(Class, value, params) {\n    return new Class({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport function _file(Class, params) {\n    return new Class({\n        type: \"file\",\n        ...util.normalizeParams(params),\n    });\n}\nexport function _transform(Class, fn) {\n    return new Class({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport function _optional(Class, innerType) {\n    return new Class({\n        type: \"optional\",\n        innerType,\n    });\n}\nexport function _nullable(Class, innerType) {\n    return new Class({\n        type: \"nullable\",\n        innerType,\n    });\n}\nexport function _default(Class, innerType, defaultValue) {\n    return new Class({\n        type: \"default\",\n        innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport function _nonoptional(Class, innerType, params) {\n    return new Class({\n        type: \"nonoptional\",\n        innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _success(Class, innerType) {\n    return new Class({\n        type: \"success\",\n        innerType,\n    });\n}\nexport function _catch(Class, innerType, catchValue) {\n    return new Class({\n        type: \"catch\",\n        innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport function _pipe(Class, in_, out) {\n    return new Class({\n        type: \"pipe\",\n        in: in_,\n        out,\n    });\n}\nexport function _readonly(Class, innerType) {\n    return new Class({\n        type: \"readonly\",\n        innerType,\n    });\n}\nexport function _templateLiteral(Class, parts, params) {\n    return new Class({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport function _lazy(Class, getter) {\n    return new Class({\n        type: \"lazy\",\n        getter,\n    });\n}\nexport function _promise(Class, innerType) {\n    return new Class({\n        type: \"promise\",\n        innerType,\n    });\n}\nexport function _custom(Class, fn, _params) {\n    const norm = util.normalizeParams(_params);\n    norm.abort ?? (norm.abort = true); // default to abort:false\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...norm,\n    });\n    return schema;\n}\n// same as _custom but defaults to abort:false\nexport function _refine(Class, fn, _params) {\n    const schema = new Class({\n        type: \"custom\",\n        check: \"custom\",\n        fn: fn,\n        ...util.normalizeParams(_params),\n    });\n    return schema;\n}\nexport function _superRefine(fn) {\n    const ch = _check((payload) => {\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, ch._zod.def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = ch);\n                _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        return fn(payload.value, payload);\n    });\n    return ch;\n}\nexport function _check(fn, params) {\n    const ch = new checks.$ZodCheck({\n        check: \"custom\",\n        ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function _stringbool(Classes, _params) {\n    const params = util.normalizeParams(_params);\n    let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n    let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n    if (params.case !== \"sensitive\") {\n        truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n        falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n    }\n    const truthySet = new Set(truthyArray);\n    const falsySet = new Set(falsyArray);\n    const _Codec = Classes.Codec ?? schemas.$ZodCodec;\n    const _Boolean = Classes.Boolean ?? schemas.$ZodBoolean;\n    const _String = Classes.String ?? schemas.$ZodString;\n    const stringSchema = new _String({ type: \"string\", error: params.error });\n    const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n    const codec = new _Codec({\n        type: \"pipe\",\n        in: stringSchema,\n        out: booleanSchema,\n        transform: ((input, payload) => {\n            let data = input;\n            if (params.case !== \"sensitive\")\n                data = data.toLowerCase();\n            if (truthySet.has(data)) {\n                return true;\n            }\n            else if (falsySet.has(data)) {\n                return false;\n            }\n            else {\n                payload.issues.push({\n                    code: \"invalid_value\",\n                    expected: \"stringbool\",\n                    values: [...truthySet, ...falsySet],\n                    input: payload.value,\n                    inst: codec,\n                    continue: false,\n                });\n                return {};\n            }\n        }),\n        reverseTransform: ((input, _payload) => {\n            if (input === true) {\n                return truthyArray[0] || \"true\";\n            }\n            else {\n                return falsyArray[0] || \"false\";\n            }\n        }),\n        error: params.error,\n    });\n    return codec;\n}\nexport function _stringFormat(Class, format, fnOrRegex, _params = {}) {\n    const params = util.normalizeParams(_params);\n    const def = {\n        ...util.normalizeParams(_params),\n        check: \"string_format\",\n        type: \"string\",\n        format,\n        fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n        ...params,\n    };\n    if (fnOrRegex instanceof RegExp) {\n        def.pattern = fnOrRegex;\n    }\n    const inst = new Class(def);\n    return inst;\n}\n","import * as core from \"../core/index.js\";\nimport * as schemas from \"./schemas.js\";\nexport const ZodISODateTime = /*@__PURE__*/ core.$constructor(\"ZodISODateTime\", (inst, def) => {\n    core.$ZodISODateTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function datetime(params) {\n    return core._isoDateTime(ZodISODateTime, params);\n}\nexport const ZodISODate = /*@__PURE__*/ core.$constructor(\"ZodISODate\", (inst, def) => {\n    core.$ZodISODate.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function date(params) {\n    return core._isoDate(ZodISODate, params);\n}\nexport const ZodISOTime = /*@__PURE__*/ core.$constructor(\"ZodISOTime\", (inst, def) => {\n    core.$ZodISOTime.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function time(params) {\n    return core._isoTime(ZodISOTime, params);\n}\nexport const ZodISODuration = /*@__PURE__*/ core.$constructor(\"ZodISODuration\", (inst, def) => {\n    core.$ZodISODuration.init(inst, def);\n    schemas.ZodStringFormat.init(inst, def);\n});\nexport function duration(params) {\n    return core._isoDuration(ZodISODuration, params);\n}\n","import * as core from \"../core/index.js\";\nimport { $ZodError } from \"../core/index.js\";\nimport * as util from \"../core/util.js\";\nconst initializer = (inst, issues) => {\n    $ZodError.init(inst, issues);\n    inst.name = \"ZodError\";\n    Object.defineProperties(inst, {\n        format: {\n            value: (mapper) => core.formatError(inst, mapper),\n            // enumerable: false,\n        },\n        flatten: {\n            value: (mapper) => core.flattenError(inst, mapper),\n            // enumerable: false,\n        },\n        addIssue: {\n            value: (issue) => {\n                inst.issues.push(issue);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        addIssues: {\n            value: (issues) => {\n                inst.issues.push(...issues);\n                inst.message = JSON.stringify(inst.issues, util.jsonStringifyReplacer, 2);\n            },\n            // enumerable: false,\n        },\n        isEmpty: {\n            get() {\n                return inst.issues.length === 0;\n            },\n            // enumerable: false,\n        },\n    });\n    // Object.defineProperty(inst, \"isEmpty\", {\n    //   get() {\n    //     return inst.issues.length === 0;\n    //   },\n    // });\n};\nexport const ZodError = core.$constructor(\"ZodError\", initializer);\nexport const ZodRealError = core.$constructor(\"ZodError\", initializer, {\n    Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n","import * as core from \"../core/index.js\";\nimport { ZodRealError } from \"./errors.js\";\nexport const parse = /* @__PURE__ */ core._parse(ZodRealError);\nexport const parseAsync = /* @__PURE__ */ core._parseAsync(ZodRealError);\nexport const safeParse = /* @__PURE__ */ core._safeParse(ZodRealError);\nexport const safeParseAsync = /* @__PURE__ */ core._safeParseAsync(ZodRealError);\n// Codec functions\nexport const encode = /* @__PURE__ */ core._encode(ZodRealError);\nexport const decode = /* @__PURE__ */ core._decode(ZodRealError);\nexport const encodeAsync = /* @__PURE__ */ core._encodeAsync(ZodRealError);\nexport const decodeAsync = /* @__PURE__ */ core._decodeAsync(ZodRealError);\nexport const safeEncode = /* @__PURE__ */ core._safeEncode(ZodRealError);\nexport const safeDecode = /* @__PURE__ */ core._safeDecode(ZodRealError);\nexport const safeEncodeAsync = /* @__PURE__ */ core._safeEncodeAsync(ZodRealError);\nexport const safeDecodeAsync = /* @__PURE__ */ core._safeDecodeAsync(ZodRealError);\n","import * as core from \"../core/index.js\";\nimport { util } from \"../core/index.js\";\nimport * as checks from \"./checks.js\";\nimport * as iso from \"./iso.js\";\nimport * as parse from \"./parse.js\";\nexport const ZodType = /*@__PURE__*/ core.$constructor(\"ZodType\", (inst, def) => {\n    core.$ZodType.init(inst, def);\n    inst.def = def;\n    inst.type = def.type;\n    Object.defineProperty(inst, \"_def\", { value: def });\n    // base methods\n    inst.check = (...checks) => {\n        return inst.clone(util.mergeDefs(def, {\n            checks: [\n                ...(def.checks ?? []),\n                ...checks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n            ],\n        }));\n    };\n    inst.clone = (def, params) => core.clone(inst, def, params);\n    inst.brand = () => inst;\n    inst.register = ((reg, meta) => {\n        reg.add(inst, meta);\n        return inst;\n    });\n    // parsing\n    inst.parse = (data, params) => parse.parse(inst, data, params, { callee: inst.parse });\n    inst.safeParse = (data, params) => parse.safeParse(inst, data, params);\n    inst.parseAsync = async (data, params) => parse.parseAsync(inst, data, params, { callee: inst.parseAsync });\n    inst.safeParseAsync = async (data, params) => parse.safeParseAsync(inst, data, params);\n    inst.spa = inst.safeParseAsync;\n    // encoding/decoding\n    inst.encode = (data, params) => parse.encode(inst, data, params);\n    inst.decode = (data, params) => parse.decode(inst, data, params);\n    inst.encodeAsync = async (data, params) => parse.encodeAsync(inst, data, params);\n    inst.decodeAsync = async (data, params) => parse.decodeAsync(inst, data, params);\n    inst.safeEncode = (data, params) => parse.safeEncode(inst, data, params);\n    inst.safeDecode = (data, params) => parse.safeDecode(inst, data, params);\n    inst.safeEncodeAsync = async (data, params) => parse.safeEncodeAsync(inst, data, params);\n    inst.safeDecodeAsync = async (data, params) => parse.safeDecodeAsync(inst, data, params);\n    // refinements\n    inst.refine = (check, params) => inst.check(refine(check, params));\n    inst.superRefine = (refinement) => inst.check(superRefine(refinement));\n    inst.overwrite = (fn) => inst.check(checks.overwrite(fn));\n    // wrappers\n    inst.optional = () => optional(inst);\n    inst.nullable = () => nullable(inst);\n    inst.nullish = () => optional(nullable(inst));\n    inst.nonoptional = (params) => nonoptional(inst, params);\n    inst.array = () => array(inst);\n    inst.or = (arg) => union([inst, arg]);\n    inst.and = (arg) => intersection(inst, arg);\n    inst.transform = (tx) => pipe(inst, transform(tx));\n    inst.default = (def) => _default(inst, def);\n    inst.prefault = (def) => prefault(inst, def);\n    // inst.coalesce = (def, params) => coalesce(inst, def, params);\n    inst.catch = (params) => _catch(inst, params);\n    inst.pipe = (target) => pipe(inst, target);\n    inst.readonly = () => readonly(inst);\n    // meta\n    inst.describe = (description) => {\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, { description });\n        return cl;\n    };\n    Object.defineProperty(inst, \"description\", {\n        get() {\n            return core.globalRegistry.get(inst)?.description;\n        },\n        configurable: true,\n    });\n    inst.meta = (...args) => {\n        if (args.length === 0) {\n            return core.globalRegistry.get(inst);\n        }\n        const cl = inst.clone();\n        core.globalRegistry.add(cl, args[0]);\n        return cl;\n    };\n    // helpers\n    inst.isOptional = () => inst.safeParse(undefined).success;\n    inst.isNullable = () => inst.safeParse(null).success;\n    return inst;\n});\n/** @internal */\nexport const _ZodString = /*@__PURE__*/ core.$constructor(\"_ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    ZodType.init(inst, def);\n    const bag = inst._zod.bag;\n    inst.format = bag.format ?? null;\n    inst.minLength = bag.minimum ?? null;\n    inst.maxLength = bag.maximum ?? null;\n    // validations\n    inst.regex = (...args) => inst.check(checks.regex(...args));\n    inst.includes = (...args) => inst.check(checks.includes(...args));\n    inst.startsWith = (...args) => inst.check(checks.startsWith(...args));\n    inst.endsWith = (...args) => inst.check(checks.endsWith(...args));\n    inst.min = (...args) => inst.check(checks.minLength(...args));\n    inst.max = (...args) => inst.check(checks.maxLength(...args));\n    inst.length = (...args) => inst.check(checks.length(...args));\n    inst.nonempty = (...args) => inst.check(checks.minLength(1, ...args));\n    inst.lowercase = (params) => inst.check(checks.lowercase(params));\n    inst.uppercase = (params) => inst.check(checks.uppercase(params));\n    // transforms\n    inst.trim = () => inst.check(checks.trim());\n    inst.normalize = (...args) => inst.check(checks.normalize(...args));\n    inst.toLowerCase = () => inst.check(checks.toLowerCase());\n    inst.toUpperCase = () => inst.check(checks.toUpperCase());\n});\nexport const ZodString = /*@__PURE__*/ core.$constructor(\"ZodString\", (inst, def) => {\n    core.$ZodString.init(inst, def);\n    _ZodString.init(inst, def);\n    inst.email = (params) => inst.check(core._email(ZodEmail, params));\n    inst.url = (params) => inst.check(core._url(ZodURL, params));\n    inst.jwt = (params) => inst.check(core._jwt(ZodJWT, params));\n    inst.emoji = (params) => inst.check(core._emoji(ZodEmoji, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.uuid = (params) => inst.check(core._uuid(ZodUUID, params));\n    inst.uuidv4 = (params) => inst.check(core._uuidv4(ZodUUID, params));\n    inst.uuidv6 = (params) => inst.check(core._uuidv6(ZodUUID, params));\n    inst.uuidv7 = (params) => inst.check(core._uuidv7(ZodUUID, params));\n    inst.nanoid = (params) => inst.check(core._nanoid(ZodNanoID, params));\n    inst.guid = (params) => inst.check(core._guid(ZodGUID, params));\n    inst.cuid = (params) => inst.check(core._cuid(ZodCUID, params));\n    inst.cuid2 = (params) => inst.check(core._cuid2(ZodCUID2, params));\n    inst.ulid = (params) => inst.check(core._ulid(ZodULID, params));\n    inst.base64 = (params) => inst.check(core._base64(ZodBase64, params));\n    inst.base64url = (params) => inst.check(core._base64url(ZodBase64URL, params));\n    inst.xid = (params) => inst.check(core._xid(ZodXID, params));\n    inst.ksuid = (params) => inst.check(core._ksuid(ZodKSUID, params));\n    inst.ipv4 = (params) => inst.check(core._ipv4(ZodIPv4, params));\n    inst.ipv6 = (params) => inst.check(core._ipv6(ZodIPv6, params));\n    inst.cidrv4 = (params) => inst.check(core._cidrv4(ZodCIDRv4, params));\n    inst.cidrv6 = (params) => inst.check(core._cidrv6(ZodCIDRv6, params));\n    inst.e164 = (params) => inst.check(core._e164(ZodE164, params));\n    // iso\n    inst.datetime = (params) => inst.check(iso.datetime(params));\n    inst.date = (params) => inst.check(iso.date(params));\n    inst.time = (params) => inst.check(iso.time(params));\n    inst.duration = (params) => inst.check(iso.duration(params));\n});\nexport function string(params) {\n    return core._string(ZodString, params);\n}\nexport const ZodStringFormat = /*@__PURE__*/ core.$constructor(\"ZodStringFormat\", (inst, def) => {\n    core.$ZodStringFormat.init(inst, def);\n    _ZodString.init(inst, def);\n});\nexport const ZodEmail = /*@__PURE__*/ core.$constructor(\"ZodEmail\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmail.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function email(params) {\n    return core._email(ZodEmail, params);\n}\nexport const ZodGUID = /*@__PURE__*/ core.$constructor(\"ZodGUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodGUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function guid(params) {\n    return core._guid(ZodGUID, params);\n}\nexport const ZodUUID = /*@__PURE__*/ core.$constructor(\"ZodUUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodUUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function uuid(params) {\n    return core._uuid(ZodUUID, params);\n}\nexport function uuidv4(params) {\n    return core._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nexport function uuidv6(params) {\n    return core._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nexport function uuidv7(params) {\n    return core._uuidv7(ZodUUID, params);\n}\nexport const ZodURL = /*@__PURE__*/ core.$constructor(\"ZodURL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodURL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function url(params) {\n    return core._url(ZodURL, params);\n}\nexport function httpUrl(params) {\n    return core._url(ZodURL, {\n        protocol: /^https?$/,\n        hostname: core.regexes.domain,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEmoji = /*@__PURE__*/ core.$constructor(\"ZodEmoji\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodEmoji.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function emoji(params) {\n    return core._emoji(ZodEmoji, params);\n}\nexport const ZodNanoID = /*@__PURE__*/ core.$constructor(\"ZodNanoID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodNanoID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function nanoid(params) {\n    return core._nanoid(ZodNanoID, params);\n}\nexport const ZodCUID = /*@__PURE__*/ core.$constructor(\"ZodCUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid(params) {\n    return core._cuid(ZodCUID, params);\n}\nexport const ZodCUID2 = /*@__PURE__*/ core.$constructor(\"ZodCUID2\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCUID2.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cuid2(params) {\n    return core._cuid2(ZodCUID2, params);\n}\nexport const ZodULID = /*@__PURE__*/ core.$constructor(\"ZodULID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodULID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ulid(params) {\n    return core._ulid(ZodULID, params);\n}\nexport const ZodXID = /*@__PURE__*/ core.$constructor(\"ZodXID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodXID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function xid(params) {\n    return core._xid(ZodXID, params);\n}\nexport const ZodKSUID = /*@__PURE__*/ core.$constructor(\"ZodKSUID\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodKSUID.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ksuid(params) {\n    return core._ksuid(ZodKSUID, params);\n}\nexport const ZodIPv4 = /*@__PURE__*/ core.$constructor(\"ZodIPv4\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv4(params) {\n    return core._ipv4(ZodIPv4, params);\n}\nexport const ZodIPv6 = /*@__PURE__*/ core.$constructor(\"ZodIPv6\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodIPv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function ipv6(params) {\n    return core._ipv6(ZodIPv6, params);\n}\nexport const ZodCIDRv4 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv4\", (inst, def) => {\n    core.$ZodCIDRv4.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv4(params) {\n    return core._cidrv4(ZodCIDRv4, params);\n}\nexport const ZodCIDRv6 = /*@__PURE__*/ core.$constructor(\"ZodCIDRv6\", (inst, def) => {\n    core.$ZodCIDRv6.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function cidrv6(params) {\n    return core._cidrv6(ZodCIDRv6, params);\n}\nexport const ZodBase64 = /*@__PURE__*/ core.$constructor(\"ZodBase64\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64(params) {\n    return core._base64(ZodBase64, params);\n}\nexport const ZodBase64URL = /*@__PURE__*/ core.$constructor(\"ZodBase64URL\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodBase64URL.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function base64url(params) {\n    return core._base64url(ZodBase64URL, params);\n}\nexport const ZodE164 = /*@__PURE__*/ core.$constructor(\"ZodE164\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodE164.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function e164(params) {\n    return core._e164(ZodE164, params);\n}\nexport const ZodJWT = /*@__PURE__*/ core.$constructor(\"ZodJWT\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodJWT.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function jwt(params) {\n    return core._jwt(ZodJWT, params);\n}\nexport const ZodCustomStringFormat = /*@__PURE__*/ core.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n    // ZodStringFormat.init(inst, def);\n    core.$ZodCustomStringFormat.init(inst, def);\n    ZodStringFormat.init(inst, def);\n});\nexport function stringFormat(format, fnOrRegex, _params = {}) {\n    return core._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nexport function hostname(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hostname\", core.regexes.hostname, _params);\n}\nexport function hex(_params) {\n    return core._stringFormat(ZodCustomStringFormat, \"hex\", core.regexes.hex, _params);\n}\nexport function hash(alg, params) {\n    const enc = params?.enc ?? \"hex\";\n    const format = `${alg}_${enc}`;\n    const regex = core.regexes[format];\n    if (!regex)\n        throw new Error(`Unrecognized hash format: ${format}`);\n    return core._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nexport const ZodNumber = /*@__PURE__*/ core.$constructor(\"ZodNumber\", (inst, def) => {\n    core.$ZodNumber.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.int = (params) => inst.check(int(params));\n    inst.safe = (params) => inst.check(int(params));\n    inst.positive = (params) => inst.check(checks.gt(0, params));\n    inst.nonnegative = (params) => inst.check(checks.gte(0, params));\n    inst.negative = (params) => inst.check(checks.lt(0, params));\n    inst.nonpositive = (params) => inst.check(checks.lte(0, params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    inst.step = (value, params) => inst.check(checks.multipleOf(value, params));\n    // inst.finite = (params) => inst.check(core.finite(params));\n    inst.finite = () => inst;\n    const bag = inst._zod.bag;\n    inst.minValue =\n        Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n    inst.maxValue =\n        Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n    inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n    inst.isFinite = true;\n    inst.format = bag.format ?? null;\n});\nexport function number(params) {\n    return core._number(ZodNumber, params);\n}\nexport const ZodNumberFormat = /*@__PURE__*/ core.$constructor(\"ZodNumberFormat\", (inst, def) => {\n    core.$ZodNumberFormat.init(inst, def);\n    ZodNumber.init(inst, def);\n});\nexport function int(params) {\n    return core._int(ZodNumberFormat, params);\n}\nexport function float32(params) {\n    return core._float32(ZodNumberFormat, params);\n}\nexport function float64(params) {\n    return core._float64(ZodNumberFormat, params);\n}\nexport function int32(params) {\n    return core._int32(ZodNumberFormat, params);\n}\nexport function uint32(params) {\n    return core._uint32(ZodNumberFormat, params);\n}\nexport const ZodBoolean = /*@__PURE__*/ core.$constructor(\"ZodBoolean\", (inst, def) => {\n    core.$ZodBoolean.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function boolean(params) {\n    return core._boolean(ZodBoolean, params);\n}\nexport const ZodBigInt = /*@__PURE__*/ core.$constructor(\"ZodBigInt\", (inst, def) => {\n    core.$ZodBigInt.init(inst, def);\n    ZodType.init(inst, def);\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.gt = (value, params) => inst.check(checks.gt(value, params));\n    inst.gte = (value, params) => inst.check(checks.gte(value, params));\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.lt = (value, params) => inst.check(checks.lt(value, params));\n    inst.lte = (value, params) => inst.check(checks.lte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    inst.positive = (params) => inst.check(checks.gt(BigInt(0), params));\n    inst.negative = (params) => inst.check(checks.lt(BigInt(0), params));\n    inst.nonpositive = (params) => inst.check(checks.lte(BigInt(0), params));\n    inst.nonnegative = (params) => inst.check(checks.gte(BigInt(0), params));\n    inst.multipleOf = (value, params) => inst.check(checks.multipleOf(value, params));\n    const bag = inst._zod.bag;\n    inst.minValue = bag.minimum ?? null;\n    inst.maxValue = bag.maximum ?? null;\n    inst.format = bag.format ?? null;\n});\nexport function bigint(params) {\n    return core._bigint(ZodBigInt, params);\n}\nexport const ZodBigIntFormat = /*@__PURE__*/ core.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n    core.$ZodBigIntFormat.init(inst, def);\n    ZodBigInt.init(inst, def);\n});\n// int64\nexport function int64(params) {\n    return core._int64(ZodBigIntFormat, params);\n}\n// uint64\nexport function uint64(params) {\n    return core._uint64(ZodBigIntFormat, params);\n}\nexport const ZodSymbol = /*@__PURE__*/ core.$constructor(\"ZodSymbol\", (inst, def) => {\n    core.$ZodSymbol.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function symbol(params) {\n    return core._symbol(ZodSymbol, params);\n}\nexport const ZodUndefined = /*@__PURE__*/ core.$constructor(\"ZodUndefined\", (inst, def) => {\n    core.$ZodUndefined.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _undefined(params) {\n    return core._undefined(ZodUndefined, params);\n}\nexport { _undefined as undefined };\nexport const ZodNull = /*@__PURE__*/ core.$constructor(\"ZodNull\", (inst, def) => {\n    core.$ZodNull.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _null(params) {\n    return core._null(ZodNull, params);\n}\nexport { _null as null };\nexport const ZodAny = /*@__PURE__*/ core.$constructor(\"ZodAny\", (inst, def) => {\n    core.$ZodAny.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function any() {\n    return core._any(ZodAny);\n}\nexport const ZodUnknown = /*@__PURE__*/ core.$constructor(\"ZodUnknown\", (inst, def) => {\n    core.$ZodUnknown.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function unknown() {\n    return core._unknown(ZodUnknown);\n}\nexport const ZodNever = /*@__PURE__*/ core.$constructor(\"ZodNever\", (inst, def) => {\n    core.$ZodNever.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function never(params) {\n    return core._never(ZodNever, params);\n}\nexport const ZodVoid = /*@__PURE__*/ core.$constructor(\"ZodVoid\", (inst, def) => {\n    core.$ZodVoid.init(inst, def);\n    ZodType.init(inst, def);\n});\nfunction _void(params) {\n    return core._void(ZodVoid, params);\n}\nexport { _void as void };\nexport const ZodDate = /*@__PURE__*/ core.$constructor(\"ZodDate\", (inst, def) => {\n    core.$ZodDate.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (value, params) => inst.check(checks.gte(value, params));\n    inst.max = (value, params) => inst.check(checks.lte(value, params));\n    const c = inst._zod.bag;\n    inst.minDate = c.minimum ? new Date(c.minimum) : null;\n    inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nexport function date(params) {\n    return core._date(ZodDate, params);\n}\nexport const ZodArray = /*@__PURE__*/ core.$constructor(\"ZodArray\", (inst, def) => {\n    core.$ZodArray.init(inst, def);\n    ZodType.init(inst, def);\n    inst.element = def.element;\n    inst.min = (minLength, params) => inst.check(checks.minLength(minLength, params));\n    inst.nonempty = (params) => inst.check(checks.minLength(1, params));\n    inst.max = (maxLength, params) => inst.check(checks.maxLength(maxLength, params));\n    inst.length = (len, params) => inst.check(checks.length(len, params));\n    inst.unwrap = () => inst.element;\n});\nexport function array(element, params) {\n    return core._array(ZodArray, element, params);\n}\n// .keyof\nexport function keyof(schema) {\n    const shape = schema._zod.def.shape;\n    return _enum(Object.keys(shape));\n}\nexport const ZodObject = /*@__PURE__*/ core.$constructor(\"ZodObject\", (inst, def) => {\n    core.$ZodObjectJIT.init(inst, def);\n    ZodType.init(inst, def);\n    util.defineLazy(inst, \"shape\", () => {\n        return def.shape;\n    });\n    inst.keyof = () => _enum(Object.keys(inst._zod.def.shape));\n    inst.catchall = (catchall) => inst.clone({ ...inst._zod.def, catchall: catchall });\n    inst.passthrough = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.loose = () => inst.clone({ ...inst._zod.def, catchall: unknown() });\n    inst.strict = () => inst.clone({ ...inst._zod.def, catchall: never() });\n    inst.strip = () => inst.clone({ ...inst._zod.def, catchall: undefined });\n    inst.extend = (incoming) => {\n        return util.extend(inst, incoming);\n    };\n    inst.safeExtend = (incoming) => {\n        return util.safeExtend(inst, incoming);\n    };\n    inst.merge = (other) => util.merge(inst, other);\n    inst.pick = (mask) => util.pick(inst, mask);\n    inst.omit = (mask) => util.omit(inst, mask);\n    inst.partial = (...args) => util.partial(ZodOptional, inst, args[0]);\n    inst.required = (...args) => util.required(ZodNonOptional, inst, args[0]);\n});\nexport function object(shape, params) {\n    const def = {\n        type: \"object\",\n        shape: shape ?? {},\n        ...util.normalizeParams(params),\n    };\n    return new ZodObject(def);\n}\n// strictObject\nexport function strictObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: never(),\n        ...util.normalizeParams(params),\n    });\n}\n// looseObject\nexport function looseObject(shape, params) {\n    return new ZodObject({\n        type: \"object\",\n        shape,\n        catchall: unknown(),\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodUnion = /*@__PURE__*/ core.$constructor(\"ZodUnion\", (inst, def) => {\n    core.$ZodUnion.init(inst, def);\n    ZodType.init(inst, def);\n    inst.options = def.options;\n});\nexport function union(options, params) {\n    return new ZodUnion({\n        type: \"union\",\n        options: options,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodDiscriminatedUnion = /*@__PURE__*/ core.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n    ZodUnion.init(inst, def);\n    core.$ZodDiscriminatedUnion.init(inst, def);\n});\nexport function discriminatedUnion(discriminator, options, params) {\n    // const [options, params] = args;\n    return new ZodDiscriminatedUnion({\n        type: \"union\",\n        options,\n        discriminator,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodIntersection = /*@__PURE__*/ core.$constructor(\"ZodIntersection\", (inst, def) => {\n    core.$ZodIntersection.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function intersection(left, right) {\n    return new ZodIntersection({\n        type: \"intersection\",\n        left: left,\n        right: right,\n    });\n}\nexport const ZodTuple = /*@__PURE__*/ core.$constructor(\"ZodTuple\", (inst, def) => {\n    core.$ZodTuple.init(inst, def);\n    ZodType.init(inst, def);\n    inst.rest = (rest) => inst.clone({\n        ...inst._zod.def,\n        rest: rest,\n    });\n});\nexport function tuple(items, _paramsOrRest, _params) {\n    const hasRest = _paramsOrRest instanceof core.$ZodType;\n    const params = hasRest ? _params : _paramsOrRest;\n    const rest = hasRest ? _paramsOrRest : null;\n    return new ZodTuple({\n        type: \"tuple\",\n        items: items,\n        rest,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodRecord = /*@__PURE__*/ core.$constructor(\"ZodRecord\", (inst, def) => {\n    core.$ZodRecord.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function record(keyType, valueType, params) {\n    return new ZodRecord({\n        type: \"record\",\n        keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nexport function partialRecord(keyType, valueType, params) {\n    const k = core.clone(keyType);\n    k._zod.values = undefined;\n    return new ZodRecord({\n        type: \"record\",\n        keyType: k,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodMap = /*@__PURE__*/ core.$constructor(\"ZodMap\", (inst, def) => {\n    core.$ZodMap.init(inst, def);\n    ZodType.init(inst, def);\n    inst.keyType = def.keyType;\n    inst.valueType = def.valueType;\n});\nexport function map(keyType, valueType, params) {\n    return new ZodMap({\n        type: \"map\",\n        keyType: keyType,\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSet = /*@__PURE__*/ core.$constructor(\"ZodSet\", (inst, def) => {\n    core.$ZodSet.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (...args) => inst.check(core._minSize(...args));\n    inst.nonempty = (params) => inst.check(core._minSize(1, params));\n    inst.max = (...args) => inst.check(core._maxSize(...args));\n    inst.size = (...args) => inst.check(core._size(...args));\n});\nexport function set(valueType, params) {\n    return new ZodSet({\n        type: \"set\",\n        valueType: valueType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodEnum = /*@__PURE__*/ core.$constructor(\"ZodEnum\", (inst, def) => {\n    core.$ZodEnum.init(inst, def);\n    ZodType.init(inst, def);\n    inst.enum = def.entries;\n    inst.options = Object.values(def.entries);\n    const keys = new Set(Object.keys(def.entries));\n    inst.extract = (values, params) => {\n        const newEntries = {};\n        for (const value of values) {\n            if (keys.has(value)) {\n                newEntries[value] = def.entries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n    inst.exclude = (values, params) => {\n        const newEntries = { ...def.entries };\n        for (const value of values) {\n            if (keys.has(value)) {\n                delete newEntries[value];\n            }\n            else\n                throw new Error(`Key ${value} not found in enum`);\n        }\n        return new ZodEnum({\n            ...def,\n            checks: [],\n            ...util.normalizeParams(params),\n            entries: newEntries,\n        });\n    };\n});\nfunction _enum(values, params) {\n    const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport { _enum as enum };\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nexport function nativeEnum(entries, params) {\n    return new ZodEnum({\n        type: \"enum\",\n        entries,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLiteral = /*@__PURE__*/ core.$constructor(\"ZodLiteral\", (inst, def) => {\n    core.$ZodLiteral.init(inst, def);\n    ZodType.init(inst, def);\n    inst.values = new Set(def.values);\n    Object.defineProperty(inst, \"value\", {\n        get() {\n            if (def.values.length > 1) {\n                throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n            }\n            return def.values[0];\n        },\n    });\n});\nexport function literal(value, params) {\n    return new ZodLiteral({\n        type: \"literal\",\n        values: Array.isArray(value) ? value : [value],\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodFile = /*@__PURE__*/ core.$constructor(\"ZodFile\", (inst, def) => {\n    core.$ZodFile.init(inst, def);\n    ZodType.init(inst, def);\n    inst.min = (size, params) => inst.check(core._minSize(size, params));\n    inst.max = (size, params) => inst.check(core._maxSize(size, params));\n    inst.mime = (types, params) => inst.check(core._mime(Array.isArray(types) ? types : [types], params));\n});\nexport function file(params) {\n    return core._file(ZodFile, params);\n}\nexport const ZodTransform = /*@__PURE__*/ core.$constructor(\"ZodTransform\", (inst, def) => {\n    core.$ZodTransform.init(inst, def);\n    ZodType.init(inst, def);\n    inst._zod.parse = (payload, _ctx) => {\n        if (_ctx.direction === \"backward\") {\n            throw new core.$ZodEncodeError(inst.constructor.name);\n        }\n        payload.addIssue = (issue) => {\n            if (typeof issue === \"string\") {\n                payload.issues.push(util.issue(issue, payload.value, def));\n            }\n            else {\n                // for Zod 3 backwards compatibility\n                const _issue = issue;\n                if (_issue.fatal)\n                    _issue.continue = false;\n                _issue.code ?? (_issue.code = \"custom\");\n                _issue.input ?? (_issue.input = payload.value);\n                _issue.inst ?? (_issue.inst = inst);\n                // _issue.continue ??= true;\n                payload.issues.push(util.issue(_issue));\n            }\n        };\n        const output = def.transform(payload.value, payload);\n        if (output instanceof Promise) {\n            return output.then((output) => {\n                payload.value = output;\n                return payload;\n            });\n        }\n        payload.value = output;\n        return payload;\n    };\n});\nexport function transform(fn) {\n    return new ZodTransform({\n        type: \"transform\",\n        transform: fn,\n    });\n}\nexport const ZodOptional = /*@__PURE__*/ core.$constructor(\"ZodOptional\", (inst, def) => {\n    core.$ZodOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function optional(innerType) {\n    return new ZodOptional({\n        type: \"optional\",\n        innerType: innerType,\n    });\n}\nexport const ZodNullable = /*@__PURE__*/ core.$constructor(\"ZodNullable\", (inst, def) => {\n    core.$ZodNullable.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nullable(innerType) {\n    return new ZodNullable({\n        type: \"nullable\",\n        innerType: innerType,\n    });\n}\n// nullish\nexport function nullish(innerType) {\n    return optional(nullable(innerType));\n}\nexport const ZodDefault = /*@__PURE__*/ core.$constructor(\"ZodDefault\", (inst, def) => {\n    core.$ZodDefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeDefault = inst.unwrap;\n});\nexport function _default(innerType, defaultValue) {\n    return new ZodDefault({\n        type: \"default\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodPrefault = /*@__PURE__*/ core.$constructor(\"ZodPrefault\", (inst, def) => {\n    core.$ZodPrefault.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function prefault(innerType, defaultValue) {\n    return new ZodPrefault({\n        type: \"prefault\",\n        innerType: innerType,\n        get defaultValue() {\n            return typeof defaultValue === \"function\" ? defaultValue() : util.shallowClone(defaultValue);\n        },\n    });\n}\nexport const ZodNonOptional = /*@__PURE__*/ core.$constructor(\"ZodNonOptional\", (inst, def) => {\n    core.$ZodNonOptional.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function nonoptional(innerType, params) {\n    return new ZodNonOptional({\n        type: \"nonoptional\",\n        innerType: innerType,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodSuccess = /*@__PURE__*/ core.$constructor(\"ZodSuccess\", (inst, def) => {\n    core.$ZodSuccess.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function success(innerType) {\n    return new ZodSuccess({\n        type: \"success\",\n        innerType: innerType,\n    });\n}\nexport const ZodCatch = /*@__PURE__*/ core.$constructor(\"ZodCatch\", (inst, def) => {\n    core.$ZodCatch.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n    inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n    return new ZodCatch({\n        type: \"catch\",\n        innerType: innerType,\n        catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n    });\n}\nexport { _catch as catch };\nexport const ZodNaN = /*@__PURE__*/ core.$constructor(\"ZodNaN\", (inst, def) => {\n    core.$ZodNaN.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function nan(params) {\n    return core._nan(ZodNaN, params);\n}\nexport const ZodPipe = /*@__PURE__*/ core.$constructor(\"ZodPipe\", (inst, def) => {\n    core.$ZodPipe.init(inst, def);\n    ZodType.init(inst, def);\n    inst.in = def.in;\n    inst.out = def.out;\n});\nexport function pipe(in_, out) {\n    return new ZodPipe({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        // ...util.normalizeParams(params),\n    });\n}\nexport const ZodCodec = /*@__PURE__*/ core.$constructor(\"ZodCodec\", (inst, def) => {\n    ZodPipe.init(inst, def);\n    core.$ZodCodec.init(inst, def);\n});\nexport function codec(in_, out, params) {\n    return new ZodCodec({\n        type: \"pipe\",\n        in: in_,\n        out: out,\n        transform: params.decode,\n        reverseTransform: params.encode,\n    });\n}\nexport const ZodReadonly = /*@__PURE__*/ core.$constructor(\"ZodReadonly\", (inst, def) => {\n    core.$ZodReadonly.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function readonly(innerType) {\n    return new ZodReadonly({\n        type: \"readonly\",\n        innerType: innerType,\n    });\n}\nexport const ZodTemplateLiteral = /*@__PURE__*/ core.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n    core.$ZodTemplateLiteral.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function templateLiteral(parts, params) {\n    return new ZodTemplateLiteral({\n        type: \"template_literal\",\n        parts,\n        ...util.normalizeParams(params),\n    });\n}\nexport const ZodLazy = /*@__PURE__*/ core.$constructor(\"ZodLazy\", (inst, def) => {\n    core.$ZodLazy.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.getter();\n});\nexport function lazy(getter) {\n    return new ZodLazy({\n        type: \"lazy\",\n        getter: getter,\n    });\n}\nexport const ZodPromise = /*@__PURE__*/ core.$constructor(\"ZodPromise\", (inst, def) => {\n    core.$ZodPromise.init(inst, def);\n    ZodType.init(inst, def);\n    inst.unwrap = () => inst._zod.def.innerType;\n});\nexport function promise(innerType) {\n    return new ZodPromise({\n        type: \"promise\",\n        innerType: innerType,\n    });\n}\nexport const ZodFunction = /*@__PURE__*/ core.$constructor(\"ZodFunction\", (inst, def) => {\n    core.$ZodFunction.init(inst, def);\n    ZodType.init(inst, def);\n});\nexport function _function(params) {\n    return new ZodFunction({\n        type: \"function\",\n        input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n        output: params?.output ?? unknown(),\n    });\n}\nexport { _function as function };\nexport const ZodCustom = /*@__PURE__*/ core.$constructor(\"ZodCustom\", (inst, def) => {\n    core.$ZodCustom.init(inst, def);\n    ZodType.init(inst, def);\n});\n// custom checks\nexport function check(fn) {\n    const ch = new core.$ZodCheck({\n        check: \"custom\",\n        // ...util.normalizeParams(params),\n    });\n    ch._zod.check = fn;\n    return ch;\n}\nexport function custom(fn, _params) {\n    return core._custom(ZodCustom, fn ?? (() => true), _params);\n}\nexport function refine(fn, _params = {}) {\n    return core._refine(ZodCustom, fn, _params);\n}\n// superRefine\nexport function superRefine(fn) {\n    return core._superRefine(fn);\n}\nfunction _instanceof(cls, params = {\n    error: `Input not instance of ${cls.name}`,\n}) {\n    const inst = new ZodCustom({\n        type: \"custom\",\n        check: \"custom\",\n        fn: (data) => data instanceof cls,\n        abort: true,\n        ...util.normalizeParams(params),\n    });\n    inst._zod.bag.Class = cls;\n    return inst;\n}\nexport { _instanceof as instanceof };\n// stringbool\nexport const stringbool = (...args) => core._stringbool({\n    Codec: ZodCodec,\n    Boolean: ZodBoolean,\n    String: ZodString,\n}, ...args);\nexport function json(params) {\n    const jsonSchema = lazy(() => {\n        return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n    });\n    return jsonSchema;\n}\n// preprocess\n// /** @deprecated Use `z.pipe()` and `z.transform()` instead. */\nexport function preprocess(fn, schema) {\n    return pipe(transform(fn), schema);\n}\n","import * as zod from 'zod';\n\nexport const chartJsSchema = zod.object({\n  type: zod.enum([\n    'pie',\n    'bar',\n    'line',\n    'bubble',\n    'doughnut',\n    'polarArea',\n    'radar',\n    'scatter',\n  ]),\n  data: zod.object({\n    labels: zod.array(zod.union([zod.string(), zod.number()])).optional(),\n    xLabels: zod.array(zod.union([zod.string(), zod.number()])).optional(),\n    yLabels: zod.array(zod.union([zod.string(), zod.number()])).optional(),\n    datasets: zod.array(\n      zod.object({\n        label: zod.string().optional(),\n        data: zod.array(\n          zod.union([\n            zod.number(),\n            zod.object({\n              x: zod.number(),\n              y: zod.number(),\n              r: zod.number().optional(), // for bubble charts\n            }),\n          ]),\n        ),\n        backgroundColor: zod\n          .union([zod.string(), zod.array(zod.string())])\n          .optional(),\n        borderColor: zod\n          .union([zod.string(), zod.array(zod.string())])\n          .optional(),\n        borderWidth: zod.number().optional(),\n        fill: zod.boolean().optional(),\n        tension: zod.number().optional(), // for line charts\n        pointRadius: zod.number().optional(),\n        pointBackgroundColor: zod\n          .union([zod.string(), zod.array(zod.string())])\n          .optional(),\n        hoverBackgroundColor: zod\n          .union([zod.string(), zod.array(zod.string())])\n          .optional(),\n        hoverBorderColor: zod\n          .union([zod.string(), zod.array(zod.string())])\n          .optional(),\n      }),\n    ),\n  }),\n});\n","import { type ComponentProps, useMemo } from 'react';\nimport {\n  ArcElement,\n  BarElement,\n  CategoryScale,\n  Chart as ChartJS,\n  Legend,\n  LinearScale,\n  LineElement,\n  PointElement,\n  Title as TitlePlugin,\n  Tooltip,\n} from 'chart.js';\nimport {\n  Bar,\n  Bubble,\n  Doughnut,\n  Line,\n  Pie,\n  PolarArea,\n  Radar,\n  Scatter,\n} from 'react-chartjs-2';\nimport type { ToolComponentProps } from '../../ai-markdown';\nimport { chartJsSchema } from './chartJsSchema';\n\nChartJS.register(\n  ArcElement,\n  Tooltip,\n  Legend,\n  CategoryScale,\n  LinearScale,\n  BarElement,\n  LineElement,\n  PointElement,\n  TitlePlugin,\n);\n\nconst components = {\n  pie: Pie,\n  bar: Bar,\n  line: Line,\n  bubble: Bubble,\n  doughnut: Doughnut,\n  polarArea: PolarArea,\n  radar: Radar,\n  scatter: Scatter,\n  unknown: () => <div>Unknown chart type</div>,\n} as const;\n\nconst Chart = ({ data, fallback }: ToolComponentProps) => {\n  const parsedDataOrError = useMemo(() => {\n    try {\n      return chartJsSchema.parse(JSON.parse(data));\n    } catch (error) {\n      if (error instanceof Error) {\n        error.message = `Error occured while parsing Chart.js data: ${error.message}`;\n        return error;\n      }\n      return new Error('Unknown error occured while parsing Chart.js data');\n    }\n  }, [data]);\n\n  if (parsedDataOrError instanceof Error) {\n    return fallback;\n  }\n\n  const Component =\n    components[parsedDataOrError.type as keyof typeof components] ??\n    components.unknown;\n\n  return (\n    <div className=\"aicr__chart\">\n      <Component data={parsedDataOrError.data} options={{ responsive: true }} />\n    </div>\n  );\n};\n\nexport type ChartProps = ComponentProps<typeof Chart>;\n\nexport default Chart;\n\n// Context for usage:\n// the application rendering these messages is capable of rendering charts using Chart.js, to render a chart return a markdown code block with language \"chartjs\" which contains JSON of Chart.js compatible data\n"],"names":["interpolate","clone","color","isObject","merge","array","object","set","callback","defaults","_descriptors","string","resolve","descriptors","date","draw","from","to","duration","config","cached","xid","names","i","inRange","layouts","positions","validIndex","registry","version","listener","Chart","alpha","skip","parse","round","time","map","Chart$1","jsx","initializer","_a","util.jsonStringifyReplacer","issue","error","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","errors.$ZodError","safeParse","errors.$ZodRealError","safeParseAsync","_emoji","datetime","number","boolean","core.$constructor","inst","util.floatSafeRemainder","util.NUMBER_FORMAT_RANGES","regexes.integer","util.nullish","util.getLengthableOrigin","regexes.lowercase","regexes.uppercase","util.escapeRegex","checks","util.aborted","checkResult","canary","result","regexes.string","_","checks.$ZodCheckStringFormat","regexes.guid","regexes.uuid","regexes.email","regexes.hostname","regexes.emoji","regexes.nanoid","regexes.cuid","regexes.cuid2","regexes.ulid","regexes.xid","regexes.ksuid","regexes.datetime","regexes.date","regexes.time","regexes.duration","regexes.ipv4","regexes.ipv6","regexes.cidrv4","regexes.cidrv6","regexes.base64","regexes.base64url","base64","regexes.e164","regexes.number","checks.$ZodCheckNumberFormat","regexes.boolean","util.prefixIssues","util.optionalKeys","r","util.cached","util.defineLazy","util.isObject","util.esc","core.globalConfig","allowsEval","util.allowsEval","util.cleanRegex","results","left","right","util.isPlainObject","util.getEnumValues","util.propertyKeyTypes","core.$ZodEncodeError","output","checks.$ZodCheck","util.issue","util.normalizeParams","checks.$ZodCheckLessThan","checks.$ZodCheckGreaterThan","checks.$ZodCheckMultipleOf","checks.$ZodCheckMaxLength","checks.$ZodCheckMinLength","checks.$ZodCheckLengthEquals","checks.$ZodCheckRegex","checks.$ZodCheckLowerCase","checks.$ZodCheckUpperCase","checks.$ZodCheckIncludes","checks.$ZodCheckStartsWith","checks.$ZodCheckEndsWith","checks.$ZodCheckOverwrite","core.$ZodISODateTime","schemas.ZodStringFormat","core._isoDateTime","core.$ZodISODate","core._isoDate","core.$ZodISOTime","core._isoTime","core.$ZodISODuration","core._isoDuration","core.formatError","core.flattenError","issues","core._parse","core._parseAsync","core._safeParse","core._safeParseAsync","core._encode","core._decode","core._encodeAsync","core._decodeAsync","core._safeEncode","core._safeDecode","core._safeEncodeAsync","core._safeDecodeAsync","core.$ZodType","util.mergeDefs","def","core.clone","parse.parse","parse.safeParse","parse.parseAsync","parse.safeParseAsync","parse.encode","parse.decode","parse.encodeAsync","parse.decodeAsync","parse.safeEncode","parse.safeDecode","parse.safeEncodeAsync","parse.safeDecodeAsync","checks.overwrite","core.globalRegistry","core.$ZodString","checks.regex","checks.includes","checks.startsWith","checks.endsWith","checks.minLength","checks.maxLength","checks.length","checks.lowercase","checks.uppercase","checks.trim","checks.normalize","checks.toLowerCase","checks.toUpperCase","core._email","core._url","core._jwt","core._emoji","core._guid","core._uuid","core._uuidv4","core._uuidv6","core._uuidv7","core._nanoid","core._cuid","core._cuid2","core._ulid","core._base64","core._base64url","core._xid","core._ksuid","core._ipv4","core._ipv6","core._cidrv4","core._cidrv6","core._e164","iso.datetime","iso.date","iso.time","iso.duration","core._string","core.$ZodStringFormat","core.$ZodEmail","core.$ZodGUID","core.$ZodUUID","core.$ZodURL","core.$ZodEmoji","core.$ZodNanoID","core.$ZodCUID","core.$ZodCUID2","core.$ZodULID","core.$ZodXID","core.$ZodKSUID","core.$ZodIPv4","core.$ZodIPv6","core.$ZodCIDRv4","core.$ZodCIDRv6","core.$ZodBase64","core.$ZodBase64URL","core.$ZodE164","core.$ZodJWT","core.$ZodNumber","checks.gt","checks.gte","checks.lt","checks.lte","checks.multipleOf","core._number","core.$ZodNumberFormat","core._int","core.$ZodBoolean","core._boolean","core.$ZodUnknown","core._unknown","core.$ZodNever","core._never","core.$ZodArray","core._array","core.$ZodObjectJIT","util.extend","util.safeExtend","util.merge","util.pick","util.omit","util.partial","util.required","core.$ZodUnion","core.$ZodIntersection","core.$ZodEnum","core.$ZodTransform","core.$ZodOptional","core.$ZodNullable","core.$ZodDefault","util.shallowClone","core.$ZodPrefault","core.$ZodNonOptional","core.$ZodCatch","core.$ZodPipe","core.$ZodReadonly","core.$ZodCustom","core._refine","core._superRefine","zod.object","zod.enum","zod.array","zod.union","zod.string","zod.number","zod.boolean","ChartJS","Tooltip","Legend","TitlePlugin"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18]}