{"version":3,"file":"index.umd.cjs","sources":["../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/area.js","../../../node_modules/d3-shape/src/descending.js","../../../node_modules/d3-shape/src/identity.js","../../../node_modules/d3-shape/src/pie.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../../node_modules/d3-axis/src/array.js","../../../node_modules/d3-axis/src/identity.js","../../../node_modules/d3-axis/src/axis.js","../src/Axis.ts","../src/XYAxis.ts","../src/Scatter.ts","../src/Area.ts","../src/Column.ts","../src/Bar.ts","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/array.js","../node_modules/d3-hierarchy/src/pack/enclose.js","../node_modules/d3-hierarchy/src/pack/siblings.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/constant.js","../node_modules/d3-hierarchy/src/pack/index.js","../src/Bubble.ts","../src/BubbleXY.ts","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3v4-bullet/src/bullet.js","../src/Bullet.ts","../../../node_modules/d3-contour/src/array.js","../../../node_modules/d3-contour/src/ascending.js","../../../node_modules/d3-contour/src/area.js","../../../node_modules/d3-contour/src/constant.js","../../../node_modules/d3-contour/src/contains.js","../../../node_modules/d3-contour/src/noop.js","../../../node_modules/d3-contour/src/contours.js","../../../node_modules/d3-contour/src/blur.js","../../../node_modules/d3-contour/src/density.js","../../../node_modules/d3-geo/src/adder.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../../../node_modules/d3-geo/src/path/index.js","../src/Contour.ts","../src/Gantt.ts","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/constant.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/math.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/arc.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/point.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/line.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/noop.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-svg-annotation/indexRollupNext.js","../src/Gauge.ts","../src/Pie.ts","../src/HalfPie.ts","../src/Heat.ts","../../../node_modules/d3-hexbin/src/hexbin.js","../src/HexBin.ts","../src/Line.ts","../src/QuarterPie.ts","../src/QuartileCandlestick.ts","../src/Radar.ts","../src/RadialBar.ts","../src/StatChart.ts","../src/Step.ts","../src/Summary.ts","../src/SummaryC.ts","../src/D3Cloud.ts","../src/WordCloud.ts","../src/timeFormats.ts","../src/__package__.ts"],"sourcesContent":["var pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction Path() {\n  this._x0 = this._y0 = // start of current subpath\n  this._x1 = this._y1 = null; // end of current subpath\n  this._ = \"\";\n}\n\nfunction path() {\n  return new Path;\n}\n\nPath.prototype = path.prototype = {\n  constructor: Path,\n  moveTo: function(x, y) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n  },\n  closePath: function() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._ += \"Z\";\n    }\n  },\n  lineTo: function(x, y) {\n    this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  quadraticCurveTo: function(x1, y1, x, y) {\n    this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n    this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n  },\n  arcTo: function(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n    var x0 = this._x1,\n        y0 = this._y1,\n        x21 = x2 - x1,\n        y21 = y2 - y1,\n        x01 = x0 - x1,\n        y01 = y0 - y1,\n        l01_2 = x01 * x01 + y01 * y01;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n    else if (!(l01_2 > epsilon));\n\n    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n    // Equivalently, is (x1,y1) coincident with (x2,y2)?\n    // Or, is the radius zero? Line to (x1,y1).\n    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n      this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      var x20 = x2 - x0,\n          y20 = y2 - y0,\n          l21_2 = x21 * x21 + y21 * y21,\n          l20_2 = x20 * x20 + y20 * y20,\n          l21 = Math.sqrt(l21_2),\n          l01 = Math.sqrt(l01_2),\n          l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n          t01 = l / l01,\n          t21 = l / l21;\n\n      // If the start tangent is not coincident with (x0,y0), line to.\n      if (Math.abs(t01 - 1) > epsilon) {\n        this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n      }\n\n      this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n    }\n  },\n  arc: function(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n    var dx = r * Math.cos(a0),\n        dy = r * Math.sin(a0),\n        x0 = x + dx,\n        y0 = y + dy,\n        cw = 1 ^ ccw,\n        da = ccw ? a0 - a1 : a1 - a0;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(\"negative radius: \" + r);\n\n    // Is this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._ += \"M\" + x0 + \",\" + y0;\n    }\n\n    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n      this._ += \"L\" + x0 + \",\" + y0;\n    }\n\n    // Is this arc empty? We’re done.\n    if (!r) return;\n\n    // Does the angle go the wrong way? Flip the direction.\n    if (da < 0) da = da % tau + tau;\n\n    // Is this a complete circle? Draw two arcs to complete the circle.\n    if (da > tauEpsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n    }\n\n    // Is this arc non-empty? Draw an arc!\n    else if (da > epsilon) {\n      this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n    }\n  },\n  rect: function(x, y, w, h) {\n    this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n  },\n  toString: function() {\n    return this._;\n  }\n};\n\nexport default path;\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = y32 * x10 - x32 * y10;\n  if (t * t < epsilon) return;\n  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * cos(a0), r1 * sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * cos(a1), r0 * sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n          rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * sin(ap)),\n            p1 = asin(rp / r1 * sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * cos(a01),\n          y01 = r1 * sin(a01),\n          x10 = r0 * cos(a10),\n          y10 = r0 * sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * cos(a11),\n            y11 = r1 * sin(a11),\n            x00 = r0 * cos(a00),\n            y00 = r0 * sin(a00),\n            oc;\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n          var ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n              lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = min(rc, (r0 - lc) / (kc - 1));\n          rc1 = min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [cos(a) * r, sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n  var x0 = pointX,\n      x1 = null,\n      y0 = constant(0),\n      y1 = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer,\n        x0z = new Array(n),\n        y0z = new Array(n);\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) {\n          j = i;\n          output.areaStart();\n          output.lineStart();\n        } else {\n          output.lineEnd();\n          output.lineStart();\n          for (k = i - 1; k >= j; --k) {\n            output.point(x0z[k], y0z[k]);\n          }\n          output.lineEnd();\n          output.areaEnd();\n        }\n      }\n      if (defined0) {\n        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n      }\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  function arealine() {\n    return line().defined(defined).curve(curve).context(context);\n  }\n\n  area.x = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n  };\n\n  area.x0 = function(_) {\n    return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n  };\n\n  area.x1 = function(_) {\n    return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n  };\n\n  area.y = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n  };\n\n  area.y0 = function(_) {\n    return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n  };\n\n  area.y1 = function(_) {\n    return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n  };\n\n  area.lineX0 =\n  area.lineY0 = function() {\n    return arealine().x(x0).y(y0);\n  };\n\n  area.lineY1 = function() {\n    return arealine().x(x0).y(y1);\n  };\n\n  area.lineX1 = function() {\n    return arealine().x(x1).y(y0);\n  };\n\n  area.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n  };\n\n  area.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n  };\n\n  area.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n  };\n\n  return area;\n}\n","export default function(a, b) {\n  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n}\n","export default function(d) {\n  return d;\n}\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n  var value = identity,\n      sortValues = descending,\n      sort = null,\n      startAngle = constant(0),\n      endAngle = constant(tau),\n      padAngle = constant(0);\n\n  function pie(data) {\n    var i,\n        n = data.length,\n        j,\n        k,\n        sum = 0,\n        index = new Array(n),\n        arcs = new Array(n),\n        a0 = +startAngle.apply(this, arguments),\n        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n        a1,\n        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n        pa = p * (da < 0 ? -1 : 1),\n        v;\n\n    for (i = 0; i < n; ++i) {\n      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n        sum += v;\n      }\n    }\n\n    // Optionally sort the arcs by previously-computed values or by data.\n    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n    // Compute the arcs! They are stored in the original data's order.\n    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n        data: data[j],\n        index: i,\n        value: v,\n        startAngle: a0,\n        endAngle: a1,\n        padAngle: p\n      };\n    }\n\n    return arcs;\n  }\n\n  pie.value = function(_) {\n    return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n  };\n\n  pie.sortValues = function(_) {\n    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n  };\n\n  pie.sort = function(_) {\n    return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n  };\n\n  pie.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n  };\n\n  pie.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n  };\n\n  pie.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n  };\n\n  return pie;\n}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","function Natural(context) {\n  this._context = context;\n}\n\nNatural.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        n = x.length;\n\n    if (n) {\n      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n      if (n === 2) {\n        this._context.lineTo(x[1], y[1]);\n      } else {\n        var px = controlPoints(x),\n            py = controlPoints(y);\n        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n        }\n      }\n    }\n\n    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n    this._x = this._y = null;\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n  var i,\n      n = x.length - 1,\n      m,\n      a = new Array(n),\n      b = new Array(n),\n      r = new Array(n);\n  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n  a[n - 1] = r[n - 1] / b[n - 1];\n  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n  b[n - 1] = (x[n] + a[n - 1]) / 2;\n  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n  return [a, b];\n}\n\nexport default function(context) {\n  return new Natural(context);\n}\n","function Step(context, t) {\n  this._context = context;\n  this._t = t;\n}\n\nStep.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x = this._y = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: {\n        if (this._t <= 0) {\n          this._context.lineTo(this._x, y);\n          this._context.lineTo(x, y);\n        } else {\n          var x1 = this._x * (1 - this._t) + x * this._t;\n          this._context.lineTo(x1, this._y);\n          this._context.lineTo(x1, y);\n        }\n        break;\n      }\n    }\n    this._x = x, this._y = y;\n  }\n};\n\nexport default function(context) {\n  return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n  return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n  return new Step(context, 1);\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n  return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n    right = 2,\n    bottom = 3,\n    left = 4,\n    epsilon = 1e-6;\n\nfunction translateX(x) {\n  return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n  return function(d) {\n    return +scale(d);\n  };\n}\n\nfunction center(scale) {\n  var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n  if (scale.round()) offset = Math.round(offset);\n  return function(d) {\n    return +scale(d) + offset;\n  };\n}\n\nfunction entering() {\n  return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n  var tickArguments = [],\n      tickValues = null,\n      tickFormat = null,\n      tickSizeInner = 6,\n      tickSizeOuter = 6,\n      tickPadding = 3,\n      k = orient === top || orient === left ? -1 : 1,\n      x = orient === left || orient === right ? \"x\" : \"y\",\n      transform = orient === top || orient === bottom ? translateX : translateY;\n\n  function axis(context) {\n    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n        spacing = Math.max(tickSizeInner, 0) + tickPadding,\n        range = scale.range(),\n        range0 = +range[0] + 0.5,\n        range1 = +range[range.length - 1] + 0.5,\n        position = (scale.bandwidth ? center : number)(scale.copy()),\n        selection = context.selection ? context.selection() : context,\n        path = selection.selectAll(\".domain\").data([null]),\n        tick = selection.selectAll(\".tick\").data(values, scale).order(),\n        tickExit = tick.exit(),\n        tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n        line = tick.select(\"line\"),\n        text = tick.select(\"text\");\n\n    path = path.merge(path.enter().insert(\"path\", \".tick\")\n        .attr(\"class\", \"domain\")\n        .attr(\"stroke\", \"currentColor\"));\n\n    tick = tick.merge(tickEnter);\n\n    line = line.merge(tickEnter.append(\"line\")\n        .attr(\"stroke\", \"currentColor\")\n        .attr(x + \"2\", k * tickSizeInner));\n\n    text = text.merge(tickEnter.append(\"text\")\n        .attr(\"fill\", \"currentColor\")\n        .attr(x, k * spacing)\n        .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n    if (context !== selection) {\n      path = path.transition(context);\n      tick = tick.transition(context);\n      line = line.transition(context);\n      text = text.transition(context);\n\n      tickExit = tickExit.transition(context)\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n      tickEnter\n          .attr(\"opacity\", epsilon)\n          .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient == right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d)); });\n\n    line\n        .attr(x + \"2\", k * tickSizeInner);\n\n    text\n        .attr(x, k * spacing)\n        .text(format);\n\n    selection.filter(entering)\n        .attr(\"fill\", \"none\")\n        .attr(\"font-size\", 10)\n        .attr(\"font-family\", \"sans-serif\")\n        .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n    selection\n        .each(function() { this.__axis = position; });\n  }\n\n  axis.scale = function(_) {\n    return arguments.length ? (scale = _, axis) : scale;\n  };\n\n  axis.ticks = function() {\n    return tickArguments = slice.call(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n  };\n\n  axis.tickFormat = function(_) {\n    return arguments.length ? (tickFormat = _, axis) : tickFormat;\n  };\n\n  axis.tickSize = function(_) {\n    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeInner = function(_) {\n    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n  };\n\n  axis.tickSizeOuter = function(_) {\n    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n  };\n\n  axis.tickPadding = function(_) {\n    return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","import { SVGWidget } from \"@hpcc-js/common\";\nimport { axisBottom as d3AxisBottom, axisLeft as d3AxisLeft, axisRight as d3AxisRight, axisTop as d3AxisTop } from \"d3-axis\";\nimport { format as d3Format } from \"d3-format\";\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleTime as d3ScaleTime } from \"d3-scale\";\nimport { select as d3Select } from \"d3-selection\";\nimport { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\n\nimport \"../src/Axis.css\";\n\nexport interface IOverflow {\n    left: number;\n    top: number;\n    right: number;\n    bottom: number;\n    depth: number;\n    tickOverlapModulus: number;\n}\n\nexport class Axis extends SVGWidget {\n    _origType;\n    _origTimePattern;\n\n    protected parser;\n    protected parserInvert;\n    protected formatter: ((d: Date | any) => string) | null;\n    protected d3Scale;\n    protected d3Axis;\n    protected d3Guides;\n    protected _guideElement;\n    protected svg;\n    protected svgAxis;\n    protected svgGuides;\n    protected _tickFormatFunc?: (d: any) => string;\n\n    constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n        super();\n        this._drawStartPos = drawStartPosition;\n\n        this.updateScale();\n    }\n\n    lowValue() {\n        return this.parse(this.low());\n    }\n\n    highValue() {\n        return this.parse(this.high());\n    }\n\n    parse(d, forceNumeric?) {\n        if (d instanceof Array) {\n            return d.map(function (d2) {\n                return this.parse(d2);\n            }, this);\n        }\n        if (d !== undefined && d !== null) {\n            if (this.parser) {\n                return this.parser(typeof d === \"number\" ? d.toString() : d);\n            }\n            if (forceNumeric && typeof d === \"string\") {\n                return +d;\n            }\n        }\n        return d;\n    }\n\n    parseInvert(d) {\n        if (d instanceof Array) {\n            return d.map(function (d2) {\n                return this.parseInvert(d2);\n            }, this);\n        }\n        if (this.parserInvert && d) {\n            return this.parserInvert(d);\n        }\n        return d;\n    }\n\n    format(d) {\n        if (d instanceof Array) {\n            return d.map(function (d2) {\n                return this.format(d2);\n            }, this);\n        }\n        if (d !== undefined && d !== null && this.formatter) {\n            return this.formatter(d);\n        }\n        return d;\n    }\n\n    parseFormat(d) {\n        return this.format(this.parse(d));\n    }\n\n    tickFormatFunc(fn: (d: any) => string): this;\n    tickFormatFunc(): ((d: any) => string) | undefined;\n    tickFormatFunc(fn?: (d: any) => string): this | ((d: any) => string) | undefined {\n        if (!arguments.length) return this._tickFormatFunc;\n        this._tickFormatFunc = fn;\n        this.updateScale();\n        return this;\n    }\n\n    scalePos(d) {\n        let retVal = this.d3Scale(this.parse(d));\n        if (this.type() === \"ordinal\") {\n            retVal += this.bandwidth() / 2;\n        }\n        return retVal;\n    }\n\n    bandwidth() {\n        return this.d3Scale.bandwidth ? this.d3Scale.bandwidth() : 0;\n    }\n\n    isHorizontal() {\n        switch (this.orientation()) {\n            case \"left\":\n            case \"right\":\n                return false;\n            default:\n        }\n        return true;\n    }\n\n    domain(_?) {\n        if (!arguments.length) return this.d3Scale.domain();\n        this.d3Scale.domain(_);\n        return this;\n    }\n\n    range(_?) {\n        if (!arguments.length) {\n            if (this.d3Scale.rangeRoundBands) {\n                return this.d3Scale.rangeExtent();\n            } else if (this.d3Scale.rangeRound) {\n                return this.d3Scale.range();\n            }\n        }\n        if (this.d3Scale.rangeRoundBands) {\n            this.d3Scale.rangeRoundBands(_, 0.1);\n        } else if (this.d3Scale.rangeRound) {\n            this.d3Scale.range(_);\n        }\n        return this;\n    }\n\n    invert(pos) {\n        return this.d3Scale.invert(pos);\n    }\n\n    guideTarget(_) {\n        this._guideElement = d3Select(_)\n            .attr(\"class\", this._class)\n            ;\n        return this;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this.svg = element.append(\"g\");\n        this.svgAxis = this.svg.append(\"g\")\n            .attr(\"class\", \"axis\")\n            ;\n        this.svgGuides = (this._guideElement || element).append(\"g\")\n            .attr(\"class\", \"guide\")\n            ;\n    }\n\n    protected _prevOrientation;\n    updateScale(): this {\n        switch (this.type()) {\n            case \"ordinal\":\n                this.d3Scale = d3ScaleBand()\n                    .paddingInner(this.ordinalPaddingInner())\n                    .paddingOuter(this.ordinalPaddingOuter())\n                    ;\n                if (this.ordinals_exists()) {\n                    this.d3Scale.domain(this.ordinals());\n                }\n                this.parser = null;\n                if (this.ordinalMappings_exists()) {\n                    const mappings = this.ordinalMappings();\n                    this.formatter = (_: any) => mappings[_] || _;\n                } else {\n                    this.formatter = null;\n                }\n                break;\n            case \"linear\":\n                this.d3Scale = d3ScaleLinear();\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = null;\n                this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n                break;\n            case \"pow\":\n                this.d3Scale = d3ScalePow()\n                    .exponent(this.powExponent())\n                    ;\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = null;\n                this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n                break;\n            case \"log\":\n                this.d3Scale = d3ScaleLog()\n                    .base(this.logBase())\n                    ;\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = null;\n                this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n                break;\n            case \"time\":\n                this.d3Scale = d3ScaleTime();\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = this.timePattern_exists() ? d3TimeParse(this.timePattern()) : null;\n                this.parserInvert = this.timePattern_exists() ? d3TimeFormat(this.timePattern()) : null;\n                if (this._tickFormatFunc) {\n                    this.formatter = this._tickFormatFunc;\n                } else {\n                    this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\n                }\n                break;\n            default:\n        }\n        if (this._prevOrientation !== this.orientation()) {\n            switch (this.orientation()) {\n                case \"left\":\n                    this.d3Axis = d3AxisLeft(this.d3Scale);\n                    this.d3Guides = d3AxisLeft(this.d3Scale);\n                    break;\n                case \"top\":\n                    this.d3Axis = d3AxisTop(this.d3Scale);\n                    this.d3Guides = d3AxisTop(this.d3Scale);\n                    break;\n                case \"right\":\n                    this.d3Axis = d3AxisRight(this.d3Scale);\n                    this.d3Guides = d3AxisRight(this.d3Scale);\n                    break;\n                case \"bottom\":\n                default:\n                    this.d3Axis = d3AxisBottom(this.d3Scale);\n                    this.d3Guides = d3AxisBottom(this.d3Scale);\n                    break;\n            }\n            this._prevOrientation = this.orientation();\n            if (this.svgAxis) {\n                this.svgAxis.html(\"\");\n            }\n            if (this.svgGuides) {\n                this.svgGuides.html(\"\");\n            }\n        }\n\n        if (this.extend()) {\n            switch (this.type()) {\n                case \"ordinal\":\n                    break;\n                default:\n                    let length;\n                    let delta;\n                    let low;\n                    let high;\n                    let newLow;\n                    let newHigh;\n                    if (this.isHorizontal()) {\n                        length = this.width();\n                        this.d3Scale.range([0, length]);\n                        delta = length * this.extend() / 100;\n                        low = this.d3Scale.invert(0);\n                        newLow = this.d3Scale.invert(-delta);\n                        high = this.d3Scale.invert(length);\n                        newHigh = this.d3Scale.invert(length + delta);\n                    } else {\n                        length = this.height();\n                        this.d3Scale.range([length, 0]);\n                        delta = length * this.extend() / 100;\n                        low = this.d3Scale.invert(length);\n                        newLow = this.d3Scale.invert(length + delta);\n                        high = this.d3Scale.invert(0);\n                        newHigh = this.d3Scale.invert(-delta);\n                    }\n                    if (newLow === low) { //  Edge case when there is only one item in the domain  ---\n                        newLow = low - low * this.extend() / 100;\n                    }\n                    if (newHigh === high) { //  Edge case when there is only one item in the domain  ---\n                        newHigh = high + high * this.extend() / 100;\n                    }\n                    if ((Math as any).sign(low) !== (Math as any).sign(newLow)) {\n                        newLow = 0;\n                    }\n                    if ((Math as any).sign(high) !== (Math as any).sign(newHigh)) {\n                        newHigh = 0;\n                    }\n                    this.d3Scale.domain([newLow, newHigh]);\n                    break;\n            }\n        }\n\n        this.d3Axis\n            .scale(this.d3Scale)\n            .tickFormat(this.formatter)\n            .ticks(this.tickCount())\n            ;\n        this.d3Guides\n            .scale(this.d3Scale)\n            .tickSize(this.tickLength_exists() ? -this.tickLength() : 0)\n            .tickFormat(\"\")\n            .ticks(this.tickCount())\n            ;\n        const customTicks = this.ticks();\n        if (customTicks.length) {\n            this.d3Axis\n                .tickValues(customTicks.map(d => this.parse(d.value)))\n                .tickFormat((_d, i) => {\n                    return customTicks[i].label;\n                });\n            this.d3Guides\n                .tickValues(customTicks.map(d => this.parse(d.value)));\n        }\n        return this;\n    }\n\n    adjustText(svg, tickOverlapModulus) {\n        const isHoriztontal = this.isHorizontal();\n        const isLeft = this.orientation() === \"left\";\n        const isBottom = this.orientation() === \"bottom\";\n        const context = this;\n        const textSelection = svg.selectAll(\".tick > text\")\n            .style(\"font-family\", this.fontFamily())\n            .style(\"font-size\", this.fontSize_exists() ? this.fontSize() + \"px\" : null)\n            ;\n        if (this.overlapMode() === \"linebreak\") {\n            if (this.type() === \"ordinal\") {\n                textSelection\n                    .call(function () {\n                        return context.linebreak.apply(context, arguments);\n                    }, this.bandwidth())\n                    ;\n            }\n        } else if (this.overlapMode() === \"wrap\") {\n            if (this.type() === \"ordinal\") {\n                textSelection\n                    .call(function () {\n                        return context.wrap.apply(context, arguments);\n                    }, this.bandwidth())\n                    ;\n            }\n        } else {\n            switch (isHoriztontal ? this.overlapMode() : \"none\") {\n                case \"stagger\":\n                    textSelection\n                        .style(\"text-anchor\", \"middle\")\n                        .attr(\"dy\", function (_d, i) { return (isBottom ? 1 : -1) * ((isBottom ? 0.71 : 0) + i % tickOverlapModulus) + \"em\"; })\n                        .attr(\"dx\", 0)\n                        .attr(\"visibility\", null)\n                        .attr(\"transform\", \"rotate(0)\")\n                        ;\n                    break;\n                case \"hide\":\n                    textSelection\n                        .style(\"text-anchor\", \"middle\")\n                        .attr(\"dy\", (isBottom ? 0.71 : 0) + \"em\")\n                        .attr(\"dx\", 0)\n                        .attr(\"visibility\", function (_d, i) { return i % tickOverlapModulus ? \"hidden\" : null; })\n                        .attr(\"transform\", \"rotate(0)\")\n                        ;\n                    break;\n                case \"rotate\":\n                    const deg = -(this.labelRotation()) || 0;\n                    if (deg !== 0 && tickOverlapModulus > 1) {\n                        textSelection\n                            .each(function () {\n                                const elm = d3Select(this);\n                                const bbox = elm.node().getBBox();\n                                const dyOff = (isBottom ? 1 : -1) * Math.sin(Math.PI * (-Math.abs(deg) / 180));\n                                elm\n                                    .style(\"text-anchor\", deg > 0 ? (isBottom ? \"start\" : \"end\") : (isBottom ? \"end\" : \"start\"))\n                                    .attr(\"dy\", (bbox.height / 2 * dyOff) + \"px\")\n                                    .attr(\"dx\", deg > 0 ? (isBottom ? \"0.71em\" : \"-0.71em\") : (isBottom ? \"-0.71em\" : \"0.71em\"))\n                                    .attr(\"transform\", \"rotate(\" + deg + \")\")\n                                    .attr(\"visibility\", null)\n                                    ;\n                            })\n                            ;\n                        break;\n                    }\n                /* falls through */\n                default:\n                    textSelection\n                        .style(\"text-anchor\", isHoriztontal ? \"middle\" : isLeft ? \"end\" : \"start\")\n                        .attr(\"dy\", isHoriztontal ? ((isBottom ? 0.71 : 0) + \"em\") : \"0.32em\")\n                        .attr(\"dx\", 0)\n                        .attr(\"visibility\", null)\n                        .attr(\"transform\", \"rotate(0)\")\n                        ;\n            }\n        }\n    }\n\n    calcTickOverlapModulus(element) {\n        let retVal = 1;\n        switch (this.overlapMode()) {\n            case \"rotate\":\n            case \"stagger\":\n            case \"hide\":\n                const bboxArr = [];\n                element.selectAll(\".tick > text\").each(function () {\n                    const bbox = this.getBoundingClientRect();\n                    for (let i = bboxArr.length - 1; i >= 0; --i) {\n                        if (bboxArr[i].right < bbox.left) {\n                            break;\n                        }\n                        if (bboxArr.length + 1 - i > retVal) {\n                            retVal = bboxArr.length + 1 - i;\n                        }\n                    }\n                    bboxArr.push(bbox);\n                });\n                break;\n            default:\n        }\n        return retVal;\n    }\n\n    calcOverflow(element, ignoreText?): IOverflow {\n        this.updateScale();\n        if (this.hidden()) {\n            return {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0,\n                depth: 0,\n                tickOverlapModulus: 1\n            };\n        }\n        const isHorizontal = this.isHorizontal();\n        this.range(isHorizontal ? [0, this.width()] : [this.height(), 0]);\n        const tmpSvg = element.append(\"g\").attr(\"class\", this.classID());\n        const tmpSvgG = tmpSvg.append(\"g\");\n        tmpSvgG\n            .attr(\"class\", isHorizontal ? \"x\" : \"y\")\n            .call(this.d3Axis)\n            ;\n        if (ignoreText) {\n            element.selectAll(\".tick > text\").remove();\n        }\n\n        const retVal: IOverflow = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0,\n            depth: 0,\n            tickOverlapModulus: this.calcTickOverlapModulus(tmpSvgG)\n        };\n        this.adjustText(tmpSvgG, retVal.tickOverlapModulus);\n\n        const bbox = tmpSvgG.node().getBBox();\n        retVal.depth = isHorizontal ? bbox.height : bbox.width;\n        switch (this.shrinkToFit()) {\n            case \"low\":\n            case \"both\":\n                retVal.left = isHorizontal ? -bbox.x : 0;\n                retVal.bottom = isHorizontal ? 0 : -(this.height() - (bbox.height + bbox.y));\n                break;\n            default:\n        }\n        switch (this.shrinkToFit()) {\n            case \"high\":\n            case \"both\":\n                retVal.top = isHorizontal ? 0 : -bbox.y;\n                retVal.right = isHorizontal ? -(this.width() - bbox.x - bbox.width) : 0;\n                break;\n            default:\n        }\n        tmpSvg.remove();\n\n        return retVal;\n    }\n\n    wrap(_text, bandSize, re) {\n        re = re || /\\s+/;\n        const context = this;\n        _text.each(function () {\n            const text = d3Select(this);\n            const words = text.text().split(re).reverse();\n            let line = [];\n            let lineNumber = 0;\n            const lineHeight = 1.1;\n            const x = text.attr(\"x\");\n            const y = text.attr(\"y\");\n            const fs = parseFloat(text.style(\"font-size\")) || 10;\n            const maxLinesPerBand = Math.floor(bandSize / (fs * lineHeight)) - 1;\n            const minWordsPerLine = context.isHorizontal() ? 1 : Math.ceil(words.length / maxLinesPerBand);\n            const dy = parseFloat(text.attr(\"dy\"))\n                ;\n            let tspan = text.text(null).append(\"tspan\")\n                .attr(\"x\", x)\n                .attr(\"y\", y)\n                .attr(\"dy\", dy + \"em\")\n                ;\n            let wordsOnLine = 0;\n            let word = words.pop();\n            while (word) {\n                line.push(word);\n                tspan.text(line.join(\" \"));\n                wordsOnLine++;\n                if ((tspan.node() as any).getComputedTextLength() > bandSize && wordsOnLine >= minWordsPerLine) {\n                    line.pop();\n                    tspan.text(line.join(\" \"));\n                    line = [word];\n                    tspan = text.append(\"tspan\").attr(\"x\", x).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n                    wordsOnLine = 0;\n                }\n                word = words.pop();\n            }\n            if (!context.isHorizontal()) {\n                text.selectAll(\"tspan\")\n                    .attr(\"y\", (-lineNumber / 2) + \"em\")\n                    ;\n            }\n        });\n    }\n\n    linebreak(text, bandSize) {\n        this.wrap(text, bandSize, \"\\n\");\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n\n        this.svg.style(\"display\", this.hidden() ? \"none\" : null);\n\n        const overlap = this.calcOverflow(element);\n\n        const lowerPos: number = this.isHorizontal() ? overlap.left : this.height() - overlap.top - overlap.bottom;\n        const upperPos: number = this.isHorizontal() ? this.width() - overlap.right - this.padding() : 0 + this.padding();\n\n        this.range(this.reverse() ? [upperPos, lowerPos] : [lowerPos, upperPos]);\n\n        const context = this;\n        function doPosition(element) {\n            element.attr(\"transform\", function () {\n                switch (context.orientation()) {\n                    case \"left\":\n                        return \"translate(\" + overlap.depth + \", \" + overlap.top + \")\";\n                    case \"top\":\n                        return \"translate(0,\" + overlap.depth + \")\";\n                    case \"right\":\n                        return \"translate(\" + (context.width() - overlap.depth) + \", \" + overlap.top + \")\";\n                    case \"bottom\":\n                        return \"translate(0,\" + (context.height() - overlap.depth) + \")\";\n                    default:\n                }\n                return \"translate(0,0)\";\n            });\n        }\n        this.svg\n            // .attr(\"class\", this.isHorizontal() ? \"x\" : \"y\")\n            .style(\"visibility\", this.type() === \"none\" ? \"hidden\" : null)\n            .transition()\n            .call(doPosition)\n            ;\n        if (this._guideElement) {\n            this.svgGuides\n                .transition()\n                .call(doPosition)\n                ;\n        }\n        this.svgAxis\n            .call(this.d3Axis)\n            ;\n        this.adjustText(this.svgAxis, overlap.tickOverlapModulus);\n\n        const svgLineBBox = {\n            x: this.pos().x,\n            width: this.width()\n        };\n        const svgText = this.svgAxis.selectAll(\".axisTitle\").data(this.title() ? [this.title()] : []);\n        const svgTextUpdate = svgText.enter().append(\"text\")\n            .attr(\"class\", \"axisTitle\")\n            .merge(svgText)\n            ;\n        const svgTitleTransition = svgTextUpdate.transition()\n            .attr(\"dx\", null)\n            .style(\"text-anchor\", \"end\")\n            ;\n        switch (this.orientation()) {\n            case \"left\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(-90)\")\n                    .attr(\"x\", -2)\n                    .attr(\"y\", 2)\n                    .attr(\"dy\", \".71em\")\n                    ;\n                break;\n            case \"right\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(-90)\")\n                    .attr(\"x\", -2)\n                    .attr(\"y\", 4)\n                    .attr(\"dx\", null)\n                    .attr(\"dy\", \"-.71em\")\n                    ;\n                break;\n            case \"top\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(0)\")\n                    .attr(\"x\", svgLineBBox.width - 2)\n                    .attr(\"y\", 2)\n                    .attr(\"dx\", null)\n                    .attr(\"dy\", \".71em\")\n                    ;\n                break;\n            case \"bottom\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(0)\")\n                    .attr(\"x\", svgLineBBox.width - 2)\n                    .attr(\"y\", -2)\n                    .attr(\"dy\", null)\n                    ;\n                break;\n            default:\n        }\n        svgTitleTransition\n            .text(this.title_exists() ? this.title() : \"\")\n            ;\n        svgText.exit().remove();\n        this.svgGuides\n            .call(this.d3Guides)\n            .selectAll(\".tick\").classed(\"guide-0\", d => d === 0 && this.low() < 0)\n            ;\n    }\n\n    rerender() {\n        this.svgAxis.call(this.d3Axis);\n        this.svgGuides.call(this.d3Guides);\n    }\n\n    postUpdate(domNode, element) {\n        super.postUpdate(domNode, element);\n        if (this._guideElement) {\n            this._guideElement\n                .attr(\"transform\", this._element.attr(\"transform\"))\n                ;\n        }\n    }\n}\nAxis.prototype._class += \" chart_Axis\";\n\nexport interface Axis {\n    type(): string;\n    type(_: string): this;\n    type_exists(): boolean;\n    timePattern(): string;\n    timePattern(_: string): this;\n    timePattern_exists(): boolean;\n    reverse(): boolean;\n    reverse(_: boolean): this;\n\n    title(): string;\n    title(_: string): this;\n    title_exists(): boolean;\n    orientation(): string;\n    orientation(_: string): this;\n    orientation_default(): string;\n    orientation_default(_: string): this;\n    powExponent(): number;\n    powExponent(_: number): this;\n    logBase(): number;\n    logBase(_: number): this;\n    ordinals(): string[];\n    ordinals(_: string[]): this;\n    ordinals_exists(): boolean;\n    fontSize(): number;\n    fontSize(_: number): this;\n    fontSize_exists(): boolean;\n    fontFamily(): string;\n    fontFamily(_: string): this;\n    tickCount(): number;\n    tickCount(_: number): this;\n    tickFormat(): string;\n    tickFormat(_: string): this;\n    tickFormat_exists(): boolean;\n    tickFormat_reset(): void;\n    tickFormatFunc(fn: (d: any) => string): this;\n    tickFormatFunc(): ((d: any) => string) | undefined;\n    tickLength(): number;\n    tickLength(_: number): this;\n    tickLength_exists(): boolean;\n    ticks(): Array<{ value: string, label: string }>;\n    ticks(_: Array<{ value: string, label: string }>): this;\n    low(): any;\n    low(_: any): this;\n    low_exists(): boolean;\n    high(): any;\n    high(_: any): this;\n    high_exists(): boolean;\n    overlapMode(): string;\n    overlapMode(_: string): this;\n    overlapMode_default(): string;\n    overlapMode_default(_: string): this;\n    labelRotation(): number;\n    labelRotation(_: number): this;\n    shrinkToFit(): string;\n    shrinkToFit(_: string): this;\n    shrinkToFit_default(): string;\n    shrinkToFit_default(_: string): this;\n    extend(): number;\n    extend(_: number): this;\n    extend_default(): number;\n    extend_default(_: number): this;\n    hidden(): boolean;\n    hidden(_: boolean): this;\n\n    ordinalPaddingInner(): number;\n    ordinalPaddingInner(_: number): this;\n    ordinalPaddingOuter(): number;\n    ordinalPaddingOuter(_: number): this;\n    ordinalMappings(_: { [key: string]: string }): this;\n    ordinalMappings(): { [key: string]: string };\n    ordinalMappings_exists(): boolean;\n    padding(): number;\n    padding(_: number): this;\n}\n\nAxis.prototype.publish(\"type\", \"linear\", \"set\", \"Type\", [\"none\", \"ordinal\", \"linear\", \"pow\", \"log\", \"time\"]);\nAxis.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"Time Series Pattern\", null, { disable: (w: any) => w.type() !== \"time\" });\nAxis.prototype.publish(\"reverse\", false, \"boolean\", \"Reverse\");\n\nAxis.prototype.publish(\"title\", null, \"string\", \"Title\");\nAxis.prototype.publish(\"orientation\", \"bottom\", \"set\", \"Placement/orientation of the axis\", [\"left\", \"top\", \"right\", \"bottom\"]);\nAxis.prototype.publish(\"powExponent\", 2, \"number\", \"Power exponent (disabled when type is not 'pow')\", null, { disable: (w: any) => w.type() !== \"pow\" });\nAxis.prototype.publish(\"logBase\", 10, \"number\", \"Logarithmic base (disabled when type is not 'log')\", null, { disable: (w: any) => w.type() !== \"log\" });\nAxis.prototype.publish(\"ordinals\", [], \"array\", \"Array of ordinal values to display (disabled when type is not 'ordinal')\", null, { disable: (w: any) => w.type() !== \"ordinal\" });\nAxis.prototype.publish(\"fontSize\", null, \"number\", \"Size of tick label font (pixels)\", null, { optional: true });\nAxis.prototype.publish(\"fontFamily\", null, \"string\", \"Font family of tick labels\", null, { optional: true });\nAxis.prototype.publish(\"tickCount\", null, \"number\", \"Number of ticks to display (disabled when type is 'ordinal')\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"tickFormat\", null, \"string\", \"Format rules for tick text (disabled when type is 'ordinal')\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"tickLength\", null, \"number\", \"Height (or width for left/right orientations) of the axis ticks (in pixels)\", null, { optional: true });\nAxis.prototype.publish(\"ticks\", [], \"array\", \"Custom tick labels\", null, { optional: true }); // TODO: What does this control?\nAxis.prototype.publish(\"low\", null, \"any\", \"Minimum tick value (disabled when type is ordinal)\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"high\", null, \"any\", \"Maximum tick value (disabled when type is ordinal)\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"overlapMode\", \"none\", \"set\", \"Specifies the behavior when tick labels overlap\", [\"none\", \"stagger\", \"hide\", \"rotate\", \"linebreak\", \"wrap\"]);\nAxis.prototype.publish(\"labelRotation\", 33, \"number\", \"Angle of rotation for tick labels (disabled when overlapMode is not 'rotate')\", null, { optional: true, disable: (w: any) => w.overlapMode() !== \"rotate\" });\nAxis.prototype.publish(\"shrinkToFit\", \"both\", \"set\", \"shrinkToFit\", [\"none\", \"low\", \"high\", \"both\"]); // TODO: What does this control?\nAxis.prototype.publish(\"extend\", 5, \"number\", \"Extend the axis range by this % beyond what is needed to display the data (disabled when type is 'ordinal')\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"hidden\", false, \"boolean\", \"Hides axis when 'true'\");\n\nAxis.prototype.publish(\"ordinalPaddingInner\", 0.1, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\", null, { disable: (w: Axis) => w.type() !== \"ordinal\" });\nAxis.prototype.publish(\"ordinalPaddingOuter\", 0.1, \"number\", \"Determines the ratio of the range that is reserved for blank space before the first band and after the last band (0->1)\", null, { disable: (w: Axis) => w.type() !== \"ordinal\" });\nAxis.prototype.publish(\"ordinalMappings\", null, \"object\", \"Alternative label mappings (icons)\", null, { optional: true });\nAxis.prototype.publish(\"padding\", 0, \"number\", \"Padding space at top of axis (pixels)\", null, { optional: true });\n\nAxis.prototype._origType = Axis.prototype.type;\nAxis.prototype.type = function (_?: string) {\n    const retVal = Axis.prototype._origType.apply(this, arguments);\n    if (_ !== undefined) {\n        this._type = _;\n        this.updateScale();\n    }\n    return retVal;\n};\n\nAxis.prototype._origTimePattern = Axis.prototype.timePattern;\nAxis.prototype.timePattern = function (_?: string) {\n    const retVal = Axis.prototype._origTimePattern.apply(this, arguments);\n    if (_ !== undefined) {\n        this._timePattern = _;\n        this.updateScale();\n    }\n    return retVal;\n};\n","import { d3Event, select as d3Select, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { max as d3Max, min as d3Min } from \"d3-array\";\nimport { brush as d3Brush, brushSelection as d3BrushSelection, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\";\nimport { hsl as d3Hsl } from \"d3-color\";\nimport { Axis } from \"./Axis.ts\";\n\nimport \"../src/XYAxis.css\";\n\nexport class XYAxis extends SVGWidget {\n    protected domainAxis: Axis;\n    protected valueAxis: Axis;\n    protected xAxis: Axis;\n    protected yAxis: Axis;\n    protected xyBrush;\n    protected xBrush;\n    protected yBrush;\n    protected margin;\n    protected focusChart: XYAxis;\n\n    constructor() {\n        super();\n        Utility.SimpleSelectionMixin.call(this);\n\n        this._drawStartPos = \"origin\";\n\n        this.domainAxis = new Axis()\n            .classed({ domain: true })\n            .orientation_default(\"bottom\")\n            .type(\"ordinal\")\n            .overlapMode_default(\"stagger\")\n            .shrinkToFit_default(\"high\")\n            .extend_default(0)\n            ;\n        this.valueAxis = new Axis()\n            .classed({ value: true })\n            .orientation_default(\"left\")\n            .type(\"linear\")\n            .shrinkToFit_default(\"high\")\n            ;\n\n        this.xyBrush = d3Brush()\n            .on(\"end\", () => {\n                return this.brushMoved();\n            })\n            .on(\"start.handle brush.handle end.handle\", () => {\n                return this.brushMoved2();\n            })\n            ;\n        this.xBrush = d3BrushX()\n            .on(\"end\", () => {\n                return this.brushMoved();\n            })\n            .on(\"start.handle brush.handle end.handle\", () => {\n                return this.brushMoved2();\n            })\n            ;\n        this.yBrush = d3BrushY()\n            .on(\"end\", () => {\n                return this.brushMoved();\n            })\n            .on(\"start.handle brush.handle end.handle\", () => {\n                return this.brushMoved2();\n            })\n            ;\n    }\n\n    protected _prevBrush;\n    resetSelection() {\n        this._prevBrush = null;\n        return this;\n    }\n\n    parseData(d) {\n        return this.domainAxis.parse(d);\n    }\n\n    parseValue(d) {\n        return this.valueAxis.parse(d, true);\n    }\n\n    formatData(d) {\n        return this.domainAxis.format(d);\n    }\n\n    formatValue(d) {\n        return this.valueAxis.format(d);\n    }\n\n    parsedData() {\n        const retVal = this.data().map(function (row) {\n            let prevValue = 0;\n            return row.map(function (cell, idx) {\n                if (idx === 0) {\n                    return this.parseData(cell);\n                }\n                if (idx >= this.columns().length) {\n                    return cell;\n                }\n                const _retVal = this.yAxisStacked() ? [prevValue, prevValue + this.parseValue(cell)] : this.parseValue(cell);\n                prevValue += this.parseValue(cell);\n                return _retVal;\n            }, this);\n        }, this);\n        return retVal;\n    }\n\n    bandwidth() {\n        return this.domainAxis.bandwidth();\n    }\n\n    protected svg;\n    protected svgRegions;\n    protected svgDomainGuide;\n    protected svgValueGuide;\n    protected svgData;\n    protected svgDataClipRect;\n    protected svgFocus;\n    protected svgBrush;\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this.svg = element.append(\"g\");\n        this.svgRegions = element.append(\"g\");\n        this.svgDomainGuide = this.svg.append(\"g\");\n        this.svgValueGuide = this.svg.append(\"g\");\n        this.svgData = this.svg.append(\"g\");\n\n        this.svgDataClipRect = this.svg.append(\"clipPath\")\n            .attr(\"id\", this.id() + \"_clippath\")\n            .append(\"rect\")\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            ;\n        this.svgData = this.svg.append(\"g\")\n            .attr(\"clip-path\", \"url(#\" + this.id() + \"_clippath)\")\n            ;\n        this._selection.widgetElement(this.svgData);\n\n        this.svgFocus = element.append(\"g\");\n\n        this.domainAxis\n            .target(this.svg.node())\n            .guideTarget(this.svgDomainGuide.node())\n            ;\n\n        this.valueAxis\n            .target(this.svg.node())\n            .guideTarget(this.svgValueGuide.node())\n            ;\n\n        this.svgBrush = element.append(\"g\")\n            .attr(\"class\", \"brush\")\n            ;\n        this.chartsEnter(this, this.svgData, 250);\n    }\n\n    resizeBrushHandle(d, width, height) {\n        let e;\n        let x;\n        let y;\n        if (d.type === \"e\" || d.type === \"w\") {\n            e = +(d.type === \"e\");\n            x = e ? 1 : -1;\n            y = height / 3;\n            return \"M\" + (0.5 * x) + \",\" + y +\n                \"A6,6 0 0 \" + e + \" \" + (6.5 * x) + \",\" + (y + 6) +\n                \"V\" + (2 * y - 6) +\n                \"A6,6 0 0 \" + e + \" \" + (0.5 * x) + \",\" + (2 * y) +\n                \"Z\" +\n                \"M\" + (2.5 * x) + \",\" + (y + 8) +\n                \"V\" + (2 * y - 8) +\n                \"M\" + (4.5 * x) + \",\" + (y + 8) +\n                \"V\" + (2 * y - 8);\n        } else {\n            e = +(d.type === \"s\");\n            y = e ? 1 : -1;\n            x = width / 3;\n            return \"M\" + x + \", \" + (0.5 * y) +\n                \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (x + 6) + \",\" + (6.5 * y) +\n                \"H\" + (2 * x - 6) +\n                \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (2 * x) + \",\" + (0.5 * y) +\n                \"Z\" +\n                \"M\" + (x + 8) + \",\" + (2.5 * y) +\n                \"H\" + (2 * x - 8) +\n                \"M\" + (x + 8) + \",\" + (4.5 * y) +\n                \"H\" + (2 * x - 8);\n        }\n    }\n\n    private _skipSelection = false;\n    skipSelection(): boolean;\n    skipSelection(_: boolean): this;\n    skipSelection(_?: boolean): boolean | this {\n        if (!arguments.length) return this._skipSelection;\n        this._skipSelection = _;\n        return this;\n    }\n\n    brushMoved() {\n        if (this._skipSelection) return;\n        let selected = [];\n        const context = this;\n        const currSel: any = d3BrushSelection(this.svgBrush.node());\n        if (currSel) {\n            selected = this.data().filter(function (d) {\n                const pos = context.dataPos(d[0]);\n                if (context.use2dSelection()) {\n                    const pos2 = context.valuePos(d[1]) + context.valueAxis.bandwidth() / 2;\n                    return pos >= currSel[0][0] && pos <= currSel[1][0] && pos2 >= currSel[0][1] && pos2 <= currSel[1][1];\n                } else {\n                    return pos >= currSel[0] && pos <= currSel[1];\n                }\n            });\n        }\n        this.selection(selected);\n    }\n\n    brushMoved2() {\n        const isHorizontal = this.orientation() === \"horizontal\";\n        const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n        const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n        const s = d3Event()?.selection;\n        if (s == null) {\n            handlePath.attr(\"display\", \"none\");\n        } else if (isHorizontal) {\n            handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + s[i] + \",\" + 0 + \")\");\n        } else {\n            handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + 0 + \", \" + s[i] + \")\");\n        }\n    }\n\n    dataPos(d) {\n        return this.domainAxis.scalePos(d);\n    }\n\n    valuePos(d) {\n        return this.valueAxis.scalePos(d);\n    }\n\n    getAxisSize(host: XYAxis): { width: number, height: number } {\n        return {\n            width: !this.xAxis ? host.xAxis.width() : this.xAxis.width(),\n            height: !this.yAxis ? host.yAxis.width() : this.yAxis.height()\n        };\n    }\n\n    calcMargin(_domNode, element, isHorizontal) {\n        const margin = {\n            top: !isHorizontal && this.selectionMode() ? 10 : 2,\n            right: isHorizontal && (this.selectionMode() || this.xAxisFocus()) ? 10 : 2,\n            bottom: (this.xAxisFocus() ? this.xAxisFocusHeight() : 0) + 2,\n            left: 2\n        };\n        const width = this.width() - margin.left - margin.right;\n        const height = this.height() - margin.top - margin.bottom;\n\n        let xRight = 0;\n        let xHeight = 30;\n        let yTop = 0;\n        let yWidth = 30;\n        for (let i = 0; i < 10; ++i) {\n            this.xAxis.width(width - yWidth).height(0);\n            const xAxisOverlap = this.xAxis.calcOverflow(element);\n            const newXHeight = xAxisOverlap.depth;\n\n            this.yAxis.width(0).height(height - xHeight);\n            const yAxisOverlap = this.yAxis.calcOverflow(element);\n            const newYWidth = yAxisOverlap.depth;\n\n            xRight = xAxisOverlap.right;\n            yTop = yAxisOverlap.top;\n\n            if (newXHeight === xHeight && newYWidth === yWidth) {\n                break;\n            }\n            xHeight = newXHeight;\n            yWidth = newYWidth;\n        }\n        this.xAxis\n            .x(width / 2 + yWidth / 2 + margin.left)\n            .y(height + margin.top)\n            .width(width - yWidth)\n            ;\n        this.yAxis\n            .x(margin.left)\n            .y(height / 2 - xHeight / 2 + margin.top)\n            .height(height - xHeight)\n            ;\n        margin.left += yWidth;\n        margin.top += yTop;\n        margin.right += xRight;\n        margin.bottom += xHeight;\n        return margin;\n    }\n\n    updateRegions(_domNode, _element, isHorizontal) {\n        const context = this;\n\n        const regions = this.svgRegions.selectAll(\".region\").data(this.regions());\n        regions.enter().append(\"rect\")\n            .attr(\"class\", \"region\")\n            ;\n        if (isHorizontal) {\n            regions\n                .attr(\"x\", function (d) { return context.dataPos(d.x0); })\n                .attr(\"y\", 0)\n                .attr(\"width\", function (d) { return context.dataPos(d.x1) - context.dataPos(d.x0); })\n                .attr(\"height\", this.height())\n                .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n                .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n                ;\n        } else {\n            regions\n                .attr(\"x\", 0)\n                .attr(\"y\", function (d) { return context.dataPos(d.x0); })\n                .attr(\"width\", this.width())\n                .attr(\"height\", function (d) { return context.dataPos(d.x0) - context.dataPos(d.x1); })\n                .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n                .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n                ;\n        }\n        regions.exit().remove();\n    }\n\n    protected _prevXAxisType;\n    update(domNode, element) {\n        this.selectionGlow(!this.tabNavigation());\n        super.update(domNode, element);\n        const context = this;\n\n        const isHorizontal = this.orientation() === \"horizontal\";\n        this.updateRegions(domNode, element, isHorizontal);\n\n        this.domainAxis\n            .orientation(isHorizontal ? \"bottom\" : \"left\")\n            .title(this.xAxisTitle_exists() ? this.xAxisTitle() : this.columns()[0])\n            ;\n        this.valueAxis\n            .orientation(isHorizontal ? \"left\" : \"bottom\")\n            ;\n        this.xAxis = isHorizontal ? this.domainAxis : this.valueAxis;\n        this.yAxis = isHorizontal ? this.valueAxis : this.domainAxis;\n\n        //  Update Domain  ---\n        switch (this.xAxisType()) {\n            case \"ordinal\":\n                const colLen = this.columns().length;\n                const ordinalMappings = {};\n                this.domainAxis\n                    .ordinals(this.data().map(function (d) {\n                        ordinalMappings[d[0]] = context.xAxisOrdinalMapping(d, d[colLen]);\n                        return d[0];\n                    }))\n                    .ordinalMappings(ordinalMappings)\n                    ;\n\n                break;\n            default:\n                const domainMin = this.xAxisDomainLow() ? this.xAxisDomainLow() : this.domainAxis.parseInvert(d3Min(this.parsedData(), function (data) {\n                    return data[0];\n                }));\n                const domainMax = this.xAxisDomainHigh() ? this.xAxisDomainHigh() : this.domainAxis.parseInvert(d3Max(this.parsedData(), function (data) {\n                    return data[0];\n                }));\n                if (domainMin !== undefined && domainMax !== undefined) {\n                    this.domainAxis\n                        .low(domainMin)\n                        .high(domainMax)\n                        ;\n                }\n                break;\n        }\n\n        const min = this.yAxisDomainLow() ? this.yAxisDomainLow() : this.valueAxis.parseInvert(d3Min(this.parsedData(), function (data: any[]) {\n            return d3Min(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[0] : d; });\n        }));\n        const max = this.yAxisDomainHigh() ? this.yAxisDomainHigh() : this.valueAxis.parseInvert(d3Max(this.parsedData(), function (data: any[]) {\n            return d3Max(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[1] : d; });\n        }));\n        this.valueAxis\n            .low(min)\n            .high(max)\n            ;\n\n        //  Calculate Margins  ---\n        this.margin = this.calcMargin(domNode, element, isHorizontal);\n\n        //  Update Range  ---\n        let width = this.width() - this.margin.left - this.margin.right;\n        if (width < 0) width = 0;\n        let height = this.height() - this.margin.top - this.margin.bottom;\n        if (height < 0) height = 0;\n        const maxCurrExtent = isHorizontal ? width : height;\n        const maxOtherExtent = isHorizontal ? height : width;\n\n        //  Render  ---\n        this.domainAxis\n            .tickLength(this.xAxisGuideLines() ? maxOtherExtent : 0)\n            .render()\n            ;\n        this.valueAxis\n            .tickLength(this.yAxisGuideLines() ? maxCurrExtent : 0)\n            .render()\n            ;\n\n        this.svgDataClipRect\n            .attr(\"width\", width)\n            .attr(\"height\", height)\n            ;\n        this.svgData.transition()\n            .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\")\n            ;\n\n        this.updateBrush(width, height, maxCurrExtent, isHorizontal);\n        this.updateFocusChart(domNode, element, this.margin, width, height, isHorizontal);\n        this.chartsUpdate(width, height, 250);\n        if (this.selectionMode()) {\n            return this.brushMoved();\n        }\n    }\n\n    updateBrush(width, height, maxCurrExtent, isHorizontal) {\n        const currBrush = this.use2dSelection() ? this.xyBrush : isHorizontal ? this.xBrush : this.yBrush;\n        const prevBrushSel: any = d3BrushSelection(this.svgBrush.node());\n        currBrush.extent([[0, 0], [width, height]]);\n        this.svgBrush\n            .attr(\"transform\", \"translate(\" + this.margin.left + \", \" + this.margin.top + \")\")\n            .style(\"display\", this.selectionMode() ? null : \"none\")\n            .call(currBrush)\n            ;\n        const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n        const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n        handlePath.enter().append(\"path\")\n            .attr(\"class\", \"handle--custom\")\n            .merge(handlePath)\n            .attr(\"cursor\", isHorizontal ? \"ew-resize\" : \"ns-resize\")\n            .attr(\"d\", (d) => this.resizeBrushHandle(d, width, height))\n            ;\n\n        if (this.selectionMode()) {\n            if (this._prevXAxisType !== this.xAxisType()) {\n                this._prevXAxisType = this.xAxisType();\n                this._prevBrush = null;\n            }\n            if (this._prevBrush) {\n                if (prevBrushSel) {\n                    if (this._prevBrush.orientation !== this.orientation()) {\n                        const tmp = prevBrushSel[0];\n                        prevBrushSel[0] = this._prevBrush.maxCurrExtent - prevBrushSel[1];\n                        prevBrushSel[1] = this._prevBrush.maxCurrExtent - tmp;\n                    }\n                    const ratio = maxCurrExtent / this._prevBrush.maxCurrExtent;\n                    if (ratio !== 1) {\n                        this.svgBrush.transition()\n                            .on(\"start\", function () {\n                                currBrush.on(\"end\", null);\n                            })\n                            .call(currBrush.move, [prevBrushSel[0] * ratio, prevBrushSel[1] * ratio])\n                            .on(\"end\", () => {\n                                currBrush.on(\"end\", () => {\n                                    return this.brushMoved();\n                                });\n                            })\n                            ;\n                    }\n                }\n            } else {\n                this.svgBrush\n                    .call(currBrush.move, [0, maxCurrExtent])\n                    ;\n            }\n            this._prevBrush = {\n                orientation: this.orientation(),\n                maxCurrExtent\n            };\n        }\n    }\n\n    updateFocusChart(domNode, element, margin, width, height, isHorizontal) {\n        const context: XYAxis = this;\n        const focusChart = this.svgFocus.selectAll(\"#\" + this.id() + \"_focusChart\").data(this.xAxisFocus() ? [true] : []);\n        focusChart.enter().append(\"g\")\n            .attr(\"id\", this.id() + \"_focusChart\")\n            .attr(\"class\", \"focus\")\n            .each(function () {\n                context.focusChart = new (context.constructor as any)()\n                    .target(this)\n                    ;\n                context.focusChart.xBrush\n                    .on(\"brush.focus\", function () {\n                        context.syncAxis(width);\n                        context.chartsUpdate(width, height, 0);\n                    })\n                    ;\n                context.focusChart\n                    .layers(context.layers().map((w: any) => new w.constructor()))\n                    ;\n            })\n            .merge(focusChart)\n            .each(function (this: SVGElement) {\n                context.copyPropsTo(context.focusChart, [\"layers\"]);\n                let layerIdx = 0;\n                for (const layer of context.layers()) {\n                    layer.copyPropsTo(context.focusChart.layers()[layerIdx]);\n                    layerIdx++;\n                }\n                context.focusChart\n                    .xAxisFocus(false)\n                    .selectionMode(true)\n                    .skipSelection(true)\n                    .orientation(\"horizontal\")\n                    .xAxisGuideLines(false)\n                    .xAxisDomainLow(null)\n                    .xAxisDomainHigh(null)\n                    .yAxisGuideLines(false)\n                    .x(context.width() / 2)\n                    .y(context.height() - context.xAxisFocusHeight() / 2)\n                    .width(context.width())\n                    .height(context.xAxisFocusHeight())\n                    .columns(context.columns())\n                    .data(context.data())\n                    .render()\n                    ;\n                context.syncAxis(width);\n            })\n            ;\n        focusChart.exit()\n            .each(function () {\n                if (context.focusChart) {\n                    context.focusChart\n                        .target(null)\n                        ;\n                    delete context.focusChart;\n                }\n            })\n            .remove()\n            ;\n    }\n\n    syncAxis(width: number) {\n        const currSel = d3BrushSelection(this.focusChart.svgBrush.node()) as [number, number];\n        if (currSel) {\n            if (this.focusChart.xAxisType() !== \"ordinal\") {\n                this.xAxis.domain([this.focusChart.xAxis.invert(currSel[0]), this.focusChart.xAxis.invert(currSel[1])]);\n            } else {\n                const brushWidth = currSel[1] - currSel[0];\n                const scale = brushWidth / width;\n                this.xAxis.range([-currSel[0] / scale, (width - currSel[0]) / scale]);\n            }\n            this.xAxis.rerender();\n        }\n    }\n\n    //  Layers  ---\n    layerColumns(host: XYAxis): string[] {\n        const masterColumns = host.columns();\n        const retVal = super.columns().filter(col => col !== masterColumns[0]);\n        if (!retVal.length) {\n            return masterColumns;\n        }\n        return [masterColumns[0], ...retVal];\n    }\n\n    layerColumnIndices(host: XYAxis): number[] {\n        const masterColumns = host.columns();\n        const layerColumns = this.layerColumns(host);\n        return layerColumns.map(col => masterColumns.indexOf(col));\n    }\n\n    layerColumnIndex(host: XYAxis, column: string): number {\n        const masterColumns = host.columns();\n        return masterColumns.indexOf(column);\n    }\n\n    layerData(host?: XYAxis): any[][] {\n        if (arguments.length === 1) {\n            const indices = this.layerColumnIndices(host);\n            return host.data().map(row => {\n                const retVal = indices.map(idx => row[idx]);\n                (retVal as any).__hpcc_origRow = row;\n                return retVal;\n            });\n        }\n        throw new Error(\"Setting data on XYAxisLayer is not supported.\");\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n    }\n\n    layerExit(host: XYAxis, element, duration: number = 250) {\n    }\n\n    chartsEnter(host: XYAxis, element, duration: number = 250) {\n        this.layerEnter(this, element, duration);\n        for (const w of this.layers()) {\n            w[\"__xyAxisElement\"] = element.append(\"g\")\n                .attr(\"class\", w.class())\n                ;\n            w\n                .target(w[\"__xyAxisElement\"].node() as SVGElement)\n                .layerEnter(this, element, duration)\n                ;\n        }\n    }\n\n    chartsUpdate(width, height, duration): void {\n        this.layerUpdate(this, this.svgData, duration);\n        for (const w of this.layers()) {\n            w\n                .resize({ width, height })\n                .layerUpdate(this, w[\"__xyAxisElement\"], duration)\n                ;\n        }\n    }\n\n    exit(domNode, element) {\n        this.valueAxis.target(null);\n        this.domainAxis.target(null);\n        super.exit(domNode, element);\n    }\n\n    selection(_selected) {\n        const context = this;\n        this._selection.widgetElement().selectAll(\".selected,.deselected\")\n            .each(function (d) {\n                const selected = _selected.indexOf(d.origRow) >= 0;\n                d3Select(this)\n                    .classed(\"selected\", selected)\n                    .classed(\"deselected\", !selected)\n                    .attr(\"filter\", context._selection.svgGlowID() && selected ? `url(#${context._selection.svgGlowID()})` : null)\n                    ;\n            })\n            ;\n\n        const selRows = _selected.map(d => {\n            return this.rowToObj(d);\n        });\n        setTimeout(() => {\n            this.click(selRows, \"\", true);\n        }, 0);\n    }\n\n    //  XYAxis  ---\n    xAxisOrdinalMapping(origRow, lparam) {\n        return origRow[0];\n    }\n\n    //  Events  ---\n    click(row, column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n    }\n\n    //  Selection  ---\n    _selection: Utility.SimpleSelection;\n}\nXYAxis.prototype._class += \" chart_XYAxis\";\nXYAxis.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface XYAxis {\n    _palette;\n    orientation(): \"horizontal\" | \"vertical\";\n    orientation(_: \"horizontal\" | \"vertical\"): this;\n    orientation_default(_: string);\n    pointSizeColumn(): string;\n    pointSizeColumn(_: string): this;\n    pointSizeColumn_exists(): boolean;\n    minPointSize(): number;\n    minPointSize(_: number): this;\n    maxPointSize(): number;\n    maxPointSize(_: number): this;\n    use2dSelection(): boolean;\n    use2dSelection(_: boolean): this;\n    selectionMode(): boolean;\n    selectionMode(_: boolean): this;\n    xAxisTitle(): string;\n    xAxisTitle(_: string): this;\n    xAxisTitle_exists(): boolean;\n    xAxisTickCount(): number;\n    xAxisTickCount(_: number): this;\n    xAxisTickFormat(): string;\n    xAxisTickFormat(_: string): this;\n    xAxisTicks(): Array<{ value: string, label: string }>;\n    xAxisTicks(_: Array<{ value: string, label: string }>): this;\n    xAxisType(): \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\";\n    xAxisType(_: \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\"): this;\n    xAxisType_default(_: string);\n    xAxisTypeTimePattern(): string;\n    xAxisTypeTimePattern(_: string): this;\n    xAxisDomainLow(): number | string;\n    xAxisDomainLow(_: number | string): this;\n    xAxisDomainHigh(): number | string;\n    xAxisDomainHigh(_: number | string): this;\n    xAxisFontSize(): number | string;\n    xAxisFontSize(_: number | string): this;\n    xAxisFontFamily(): string;\n    xAxisFontFamily(_: string): this;\n    xAxisOrdinalPaddingInner(): number;\n    xAxisOrdinalPaddingInner(_: number): this;\n    xAxisOrdinalPaddingOuter(): number;\n    xAxisOrdinalPaddingOuter(_: number): this;\n    xAxisOverlapMode(): \"none\" | \"stagger\" | \"hide\" | \"rotate\" | \"linebreak\" | \"wrap\";\n    xAxisOverlapMode(_: \"none\" | \"stagger\" | \"hide\" | \"rotate\" | \"linebreak\" | \"wrap\"): this;\n    xAxisLabelRotation(): number;\n    xAxisLabelRotation(_: number): this;\n    xAxisDomainPadding(): number;\n    xAxisDomainPadding(_: number): this;\n    xAxisGuideLines(): boolean;\n    xAxisGuideLines(_: boolean): this;\n    xAxisGuideLines_default(_: boolean);\n    xAxisFocus(): boolean;\n    xAxisFocus(_: boolean): this;\n    xAxisFocusHeight(): number;\n    xAxisFocusHeight(_: number): this;\n    xAxisHidden(): boolean;\n    xAxisHidden(_: boolean): this;\n    xAxisHidden_default(_: boolean);\n    yAxisTitle(): string;\n    yAxisTitle(_: string): this;\n    yAxisTickCount(): number;\n    yAxisTickCount(_: number): this;\n    yAxisTickFormat(): string;\n    yAxisTickFormat(_: string): this;\n    yAxisTicks(): Array<{ value: string, label: string }>;\n    yAxisTicks(_: Array<{ value: string, label: string }>): this;\n    yAxisType(): \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\";\n    yAxisType(_: \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\"): this;\n    yAxisType_default(_: string);\n    yAxisTypeTimePattern(): string;\n    yAxisTypeTimePattern(_: string): this;\n    yAxisTypePowExponent(): number;\n    yAxisTypePowExponent(_: number): this;\n    yAxisTypeLogBase(): number;\n    yAxisTypeLogBase(_: number): this;\n    yAxisStacked(): boolean;\n    yAxisStacked(_: boolean): this;\n    yAxisDomainLow(): number | string;\n    yAxisDomainLow(_: number | string): this;\n    yAxisDomainHigh(): number | string;\n    yAxisDomainHigh(_: number | string): this;\n    yAxisDomainPadding(): number;\n    yAxisDomainPadding(_: number): this;\n    yAxisGuideLines(): boolean;\n    yAxisGuideLines(_: boolean): this;\n    yAxisGuideLines_default(_: boolean);\n    yAxisHidden(): boolean;\n    yAxisHidden(_: boolean): this;\n    yAxisHidden_default(_: boolean);\n    regions(): object[];\n    regions(_: object[]): this;\n    layers(): XYAxis[];\n    layers(_: XYAxis[]): this;\n    xAxisPadding(): number;\n    xAxisPadding(_: number): this;\n    yAxisPadding(): number;\n    yAxisPadding(_: number): this;\n\n    //  Tab Navigation\n    tabNavigation(): boolean;\n    tabNavigation(_: boolean): this;\n}\n\nXYAxis.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Selects orientation for the axis\", [\"horizontal\", \"vertical\"]);\nXYAxis.prototype.publish(\"pointSizeColumn\", null, \"string\", \"pointSizeColumn\", null, { optional: true });\nXYAxis.prototype.publish(\"minPointSize\", 6, \"number\", \"minPointSize\");\nXYAxis.prototype.publish(\"maxPointSize\", 26, \"number\", \"maxPointSize\");\nXYAxis.prototype.publish(\"use2dSelection\", false, \"boolean\", \"2D Range Selector\");\nXYAxis.prototype.publish(\"selectionMode\", false, \"boolean\", \"Range Selector\");\nXYAxis.prototype.publishProxy(\"xAxisTitle\", \"domainAxis\", \"title\");\nXYAxis.prototype.publishProxy(\"xAxisTickCount\", \"domainAxis\", \"tickCount\");\nXYAxis.prototype.publishProxy(\"xAxisTickFormat\", \"domainAxis\", \"tickFormat\");\nXYAxis.prototype.publishProxy(\"xAxisTicks\", \"domainAxis\", \"ticks\");\nXYAxis.prototype.publishProxy(\"xAxisType\", \"domainAxis\", \"type\");\nXYAxis.prototype.publishProxy(\"xAxisTypeTimePattern\", \"domainAxis\", \"timePattern\");\nXYAxis.prototype.publish(\"xAxisDomainLow\", null, \"string\", \"X-Axis Low\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\nXYAxis.prototype.publish(\"xAxisDomainHigh\", null, \"string\", \"X-Axis High\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\nXYAxis.prototype.publishProxy(\"xAxisFontSize\", \"domainAxis\", \"fontSize\");\nXYAxis.prototype.publishProxy(\"xAxisFontFamily\", \"domainAxis\", \"fontFamily\");\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingInner\", \"domainAxis\", \"ordinalPaddingInner\");\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingOuter\", \"domainAxis\", \"ordinalPaddingOuter\");\nXYAxis.prototype.publishProxy(\"xAxisOverlapMode\", \"domainAxis\", \"overlapMode\");\nXYAxis.prototype.publishProxy(\"xAxisLabelRotation\", \"domainAxis\", \"labelRotation\");\nXYAxis.prototype.publishProxy(\"xAxisDomainPadding\", \"domainAxis\", \"extend\");\nXYAxis.prototype.publish(\"xAxisGuideLines\", false, \"boolean\", \"Y-Axis Guide Lines\");\nXYAxis.prototype.publish(\"xAxisFocus\", false, \"boolean\", \"X-Axis Focus\", null, { disable: (w: any) => w.orientation() !== \"horizontal\" });\nXYAxis.prototype.publish(\"xAxisFocusHeight\", 80, \"number\", \"X-Axis Focus Height\", null, { disable: (w: any) => !w.xAxisFocus() });\nXYAxis.prototype.publishProxy(\"xAxisHidden\", \"domainAxis\", \"hidden\");\nXYAxis.prototype.publishProxy(\"yAxisFontSize\", \"valueAxis\", \"fontSize\");\nXYAxis.prototype.publishProxy(\"yAxisFontFamily\", \"valueAxis\", \"fontFamily\");\nXYAxis.prototype.publishProxy(\"yAxisTitle\", \"valueAxis\", \"title\");\nXYAxis.prototype.publishProxy(\"yAxisTickCount\", \"valueAxis\", \"tickCount\");\nXYAxis.prototype.publishProxy(\"yAxisTickFormat\", \"valueAxis\", \"tickFormat\");\nXYAxis.prototype.publishProxy(\"yAxisTicks\", \"valueAxis\", \"ticks\");\nXYAxis.prototype.publishProxy(\"yAxisType\", \"valueAxis\", \"type\");\nXYAxis.prototype.publishProxy(\"yAxisTypeTimePattern\", \"valueAxis\", \"timePattern\");\nXYAxis.prototype.publishProxy(\"yAxisTypePowExponent\", \"valueAxis\", \"powExponent\");\nXYAxis.prototype.publishProxy(\"yAxisTypeLogBase\", \"valueAxis\", \"logBase\");\nXYAxis.prototype.publish(\"yAxisStacked\", false, \"boolean\", \"Stacked Chart\", null, { tags: [\"Basic\"], disable: (w: any) => w.xAxisType() !== \"ordinal\" || w._class.indexOf(\"chart_Column\") < 0 });\nXYAxis.prototype.publish(\"yAxisDomainLow\", null, \"string\", \"Y-Axis Low\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\nXYAxis.prototype.publish(\"yAxisDomainHigh\", null, \"string\", \"Y-Axis High\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\nXYAxis.prototype.publishProxy(\"yAxisDomainPadding\", \"valueAxis\", \"extend\");\nXYAxis.prototype.publish(\"yAxisGuideLines\", true, \"boolean\", \"Y-Axis Guide Lines\");\nXYAxis.prototype.publishProxy(\"yAxisHidden\", \"valueAxis\", \"hidden\");\nXYAxis.prototype.publish(\"regions\", [], \"array\", \"Regions\");\nXYAxis.prototype.publish(\"layers\", [], \"widgetArray\", \"Layers\", null, { render: false });\nXYAxis.prototype.publishProxy(\"xAxisPadding\", \"domainAxis\", \"padding\");\nXYAxis.prototype.publishProxy(\"yAxisPadding\", \"valueAxis\", \"padding\");\nXYAxis.prototype.publish(\"tabNavigation\", false, \"boolean\", \"Enable or disable tab navigation\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, InputField } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\nimport { select as d3Select } from \"d3-selection\";\nimport {\n    area as d3Area,\n    curveBasis as d3CurveBasis, curveBundle as d3CurveBundle, curveCardinal as d3CurveCardinal, curveCatmullRom as d3curveCatmullRom, curveLinear as d3CurveLinear,\n    curveMonotoneX as d3CurveMonotoneX, curveNatural as d3CurveNatural, curveStep as d3CurveStep, curveStepAfter as d3CurveStepAfter, curveStepBefore as d3CurveStepBefore,\n    line as d3Line\n} from \"d3-shape\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nimport \"../src/Scatter.css\";\n\nexport class Scatter extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"any\"\n    }, {\n        id: \"values\",\n        type: \"number\",\n        multi: true\n    }];\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n        this\n            .xAxisGuideLines_default(true)\n            .yAxisGuideLines_default(true)\n            ;\n    }\n\n    xPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n    }\n\n    yPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n    }\n\n    private curve(): any {\n        switch (this.interpolate()) {\n            case \"linear\":\n                return d3CurveLinear;\n            case \"step\":\n                return d3CurveStep;\n            case \"step-before\":\n                return d3CurveStepBefore;\n            case \"step-after\":\n                return d3CurveStepAfter;\n            case \"basis\":\n                return d3CurveBasis;\n            case \"bundle\":\n                return d3CurveBundle;\n            case \"cardinal\":\n                return d3CurveCardinal;\n            case \"catmullRom\":\n                return d3curveCatmullRom;\n            case \"natural\":\n                return d3CurveNatural;\n            case \"monotone\":\n            default:\n                return d3CurveMonotoneX;\n        }\n    }\n\n    private getScale() {\n        switch (this.pointSizeScale()) {\n            case \"linear\":\n                return d3ScaleLinear();\n            case \"pow\":\n                return d3ScalePow().exponent(2);\n            case \"log\":\n                return d3ScaleLog();\n            case \"sqrt\":\n                return d3ScaleSqrt();\n        }\n    }\n\n    protected pointColor(row, col, value, origRow) {\n        if (this.interpolate() && this.pointDarken()) {\n            return this.strokeColor(row, col, value, origRow);\n        }\n        return this.fillColor(row, col, value, origRow);\n    }\n\n    protected lineColor(row, col, value, origRow) {\n        if (this.interpolateFill() && this.interpolateDarken()) {\n            return this.strokeColor(row, col, value, origRow);\n        }\n        return this.fillColor(row, col, value, origRow);\n    }\n\n    protected areaColor(row, col, value, origRow) {\n        return this.fillColor(row, col, value, origRow);\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n        const context = this;\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d.label,\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(column),\n                                    value: context.data()[d.rowIdx][i + 1]\n                                };\n                            })\n                        });\n                    default:\n                        return context.tooltipFormat({ label: d.label, series: d.column, value: d.value });\n                }\n            })\n            ;\n    }\n\n    protected _prevPointShape;\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element);\n        const isHorizontal = host.orientation() === \"horizontal\";\n        const height = isHorizontal ? this.height() : this.width();\n        const context = this;\n\n        if (this.tabNavigation() && host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", \"0\")\n                .attr(\"role\", \"group\")\n                .attr(\"aria-label\", `${this.columns()[0] || \"Chart\"} data`);\n        } else if (host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", null)\n                .attr(\"role\", null)\n                .attr(\"aria-label\", null);\n        }\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n\n        if (this._prevPointShape !== this.pointShape()) {\n            element.selectAll(\".data\").remove();\n            this._prevPointShape = this.pointShape();\n        }\n\n        function mapShape(shape) {\n            switch (shape) {\n                case \"rectangle\":\n                    return \"rect\";\n                case \"circle\":\n                    return \"circle\";\n                case \"cross\":\n                    return \"path\";\n                default:\n            }\n        }\n        const usePointSizeColumn = this.pointSizeColumn_exists();\n        let pointSizeColumnIdx;\n        let extent;\n        let scale;\n        if (usePointSizeColumn) {\n            pointSizeColumnIdx = this.columns().indexOf(this.pointSizeColumn());\n            extent = d3Extent(this.data(), d => d[pointSizeColumnIdx]);\n            scale = this.getScale().domain(extent);\n        }\n        const layerColumns = this.layerColumns(host);\n        const layerData = this.layerData(host);\n        const flatData = this.flattenData(layerColumns, layerData).map(function (d) {\n            d.shape = mapShape(context.pointShape());\n            d.column = layerColumns[d.colIdx];\n            d.row = layerData[d.rowIdx];\n            d.origRow = (layerData[d.rowIdx] as any).__hpcc_origRow;\n            if (extent) {\n                d.size = scale(d.row[pointSizeColumnIdx]) * (context.maxPointSize() - context.minPointSize()) + context.minPointSize();\n                return d.column === context.pointSizeColumn() ? false : d;\n            } else {\n                d.size = context.pointSize();\n                return d;\n            }\n\n        }).filter(d => d);\n\n        const areas = element.selectAll(\".area\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && context.interpolateFill() && idx > 0; }));\n        const areasEnter = areas.enter().append(\"path\");\n        const area = d3Area()\n            .curve(this.curve())\n            ;\n        if (isHorizontal) {\n            area\n                .x(function (d) { return context.xPos(host, d); })\n                .y0(Math.min(height, this.yPos(host, { value: 0 })))\n                .y1(function (d) { return context.yPos(host, d); })\n                ;\n        } else {\n            area\n                .y(function (d) { return context.yPos(host, d); })\n                .x0(Math.max(0, this.xPos(host, { value: 0 })))\n                .x1(function (d) { return context.xPos(host, d); })\n                ;\n        }\n        areasEnter.merge(areas)\n            .attr(\"class\", d => \"area series series-\" + this.cssTag(d))\n            .each(function (_d, idx) {\n                const element = d3Select(this);\n                element\n                    .attr(\"d\", area(flatData.filter(function (d2) { return d2.colIdx === idx + 1; })))\n                    .style(\"opacity\", context.interpolateFillOpacity())\n                    .style(\"stroke\", \"none\")\n                    .style(\"fill\", context.areaColor([], _d, undefined, []))\n                    ;\n            });\n        areas.exit().remove();\n\n        const lines = element.selectAll(\".line\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && idx > 0; }));\n        const linesEnter = lines.enter().append(\"path\");\n        const line = d3Line()\n            .x(function (d) { return context.xPos(host, d); })\n            .y(function (d) { return context.yPos(host, d); })\n            .curve(this.curve())\n            ;\n        linesEnter.merge(lines)\n            .attr(\"class\", d => \"line series series-\" + this.cssTag(d))\n            .each(function (_d, idx) {\n                const element = d3Select(this);\n                const data2 = flatData.filter(function (d2) { return d2.colIdx === idx + 1; });\n                element\n                    .attr(\"d\", line(data2))\n                    .style(\"stroke\", context.lineColor([], _d, undefined, []))\n                    .style(\"fill\", \"none\")\n                    ;\n            });\n        lines.exit().remove();\n\n        const points = element.selectAll(\".point\").data(flatData, function (d, idx) { return d.shape + \"_\" + idx; });\n        points.enter().append(\"g\")\n            .each(function (this: SVGElement, d2) {\n                const element = d3Select(this);\n                element\n                    .append(d2.shape)\n                    .attr(\"class\", \"pointShape\")\n                    ;\n                element\n                    .append(\"text\")\n                    .attr(\"class\", \"pointValue\")\n                    .style(\"display\", \"none\")\n                    .attr(\"text-anchor\", context.valueAnchor())\n                    .attr(\"alignment-baseline\", context.valueBaseline())\n                    .attr(\"fill\", function (d: any, _idx) {\n                        const useTextColor = context.valueBaseline() === \"middle\" || context.valueBaseline() === \"central\";\n                        return useTextColor ? context.textColor(d.row, d.column, d.value, d.origRow) : null;\n                    })\n                    ;\n                element\n                    .append(\"circle\")\n                    .attr(\"class\", \"pointSelection\")\n                    .on(\"mouseout.tooltip\", context.tooltip.hide)\n                    .on(\"mousemove.tooltip\", context.tooltip.show)\n                    .call(host._selection.enter.bind(host._selection))\n                    .on(\"click\", function (d: any, _idx) {\n                        context.click(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n                    })\n                    .on(\"dblclick\", function (d: any, _idx) {\n                        context.dblclick(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n                    })\n                    .on(\"keydown\", function (evt, d: any) {\n                        if (context.tabNavigation()) {\n                            const event = d3Event();\n                            if (event.code === \"Space\" || event.key === \"Enter\") {\n                                event.preventDefault();\n                                host._selection.click(this);\n                            }\n                        }\n                    })\n                    ;\n            })\n            .merge(points)\n            .attr(\"class\", d => \"point series series-\" + this.cssTag(d.column))\n            .each(function (this: SVGElement, d2) {\n                const textSelection = d3Select(this).select(\".pointValue\");\n                textSelection\n                    .attr(\"x\", function (d) { return context.xPos(host, d); })\n                    .attr(\"y\", function (d) { return context.yPos(host, d); })\n                    .style(\"display\", context.showValue() ? \"block\" : \"none\")\n                    .attr(\"text-anchor\", context.valueAnchor())\n                    .attr(\"alignment-baseline\", context.valueBaseline())\n                    .text(function (d) {\n                        return d[\"value\"];\n                    })\n                    ;\n                const elementSelection = d3Select(this).select(\".pointSelection\");\n                elementSelection\n                    .attr(\"cx\", function (d) { return context.xPos(host, d); })\n                    .attr(\"cy\", function (d) { return context.yPos(host, d); })\n                    .attr(\"r\", d2.size)\n                    .attr(\"tabindex\", context.tabNavigation() ? 0 : null)\n                    .attr(\"role\", context.tabNavigation() ? \"button\" : null)\n                    .attr(\"aria-label\", context.tabNavigation() ? (d: any) => `${d.column || \"Value\"}: ${d.value} @ ${d.label}` : null)\n                    ;\n\n                const element = d3Select(this).select(\".pointShape\");\n                switch (d2.shape) {\n                    case \"rect\":\n                        element\n                            .attr(\"x\", function (d) { return context.xPos(host, d) - d2.size / 2; })\n                            .attr(\"y\", function (d) { return context.yPos(host, d) - d2.size / 2; })\n                            .attr(\"width\", d2.size)\n                            .attr(\"height\", d2.size)\n                            .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n                            ;\n                        break;\n                    case \"circle\":\n                        element\n                            .attr(\"cx\", function (d) { return context.xPos(host, d); })\n                            .attr(\"cy\", function (d) { return context.yPos(host, d); })\n                            .attr(\"r\", d2.size * 0.9)\n                            .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n                            ;\n                        break;\n                    case \"path\":\n                        element\n                            .attr(\"d\", function (d: any) {\n                                return \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2) + \" \" +\n                                    \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n                                    \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n                                    \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2);\n                            })\n                            .style(\"stroke\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n                            ;\n                        break;\n                    default:\n                }\n            })\n            ;\n        points.exit().remove();\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n}\nScatter.prototype._class += \" chart_Scatter\";\nScatter.prototype.implements(INDChart.prototype);\nScatter.prototype.implements(ITooltip.prototype);\n\nexport interface Scatter {\n\n    valueAnchor(): string;\n    valueAnchor(_: string): this;\n    valueBaseline(): string;\n    valueBaseline(_: string): this;\n    showValue(): boolean;\n    showValue(_: boolean): this;\n    pointDarken(): boolean;\n    pointDarken(_: boolean): this;\n    interpolateDarken(): boolean;\n    interpolateDarken(_: boolean): this;\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    pointSizeScale(): string;\n    pointSizeScale(_: string): this;\n    pointShape(): string;\n    pointShape(_: string): this;\n    pointSize(): number;\n    pointSize(_: number): this;\n    interpolate(): string;\n    interpolate(_: string): this;\n    interpolate_default(): string;\n    interpolate_default(_: string): this;\n    interpolateFill(): boolean;\n    interpolateFill(_: boolean): this;\n    interpolateFill_default(): boolean;\n    interpolateFill_default(_: boolean): this;\n    interpolateFillOpacity(): number;\n    interpolateFillOpacity(_: number): this;\n\n    //  INDChart\n    fillColor(row, column, value, origRow): string;\n    strokeColor(row, column, value, origRow): string;\n    textColor(row, column, value, origRow): string;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n    tooltipStyle(_: \"default\" | \"none\" | \"series-table\"): this;\n}\nScatter.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Scatter.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nScatter.prototype.publish(\"pointSizeScale\", \"linear\", \"set\", \"pointSizeScale\", [\"linear\", \"pow\", \"log\", \"sqrt\"]);\nScatter.prototype.publish(\"pointShape\", \"cross\", \"set\", \"Shape of the data points\", [\"circle\", \"rectangle\", \"cross\"]);\nScatter.prototype.publish(\"pointSize\", 6, \"number\", \"Point Size\", null, { range: { min: 1, step: 1, max: 200 } });\nScatter.prototype.publish(\"interpolate\", \"\", \"set\", \"Interpolate Data\", [\"\", \"linear\", \"step\", \"step-before\", \"step-after\", \"basis\", \"bundle\", \"cardinal\", \"catmullRom\", \"natural\", \"monotone\"]);\nScatter.prototype.publish(\"pointDarken\", true, \"boolean\", \"If true, and interpolate is set, then points will have a slightly darker color than their assigned palette color\", null, { disable: w => !w.interpolate() });\nScatter.prototype.publish(\"interpolateDarken\", true, \"boolean\", \"If true, and interpolateFill is true, then lines will have a slightly darker color than their assigned palette color\", null, { disable: w => !w.interpolateFill() });\nScatter.prototype.publish(\"interpolateFill\", false, \"boolean\", \"If true, the area between the line and zero will be filled\");\nScatter.prototype.publish(\"interpolateFillOpacity\", 0.66, \"number\", \"Fill interpolation Opacity\", null, { range: { min: 0, step: 0.01, max: 1 } });\nScatter.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nScatter.prototype.publish(\"showValue\", false, \"boolean\");\nScatter.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nScatter.prototype.publish(\"valueBaseline\", \"ideographic\", \"set\", \"alignment-baseline for shown value text\", [\"auto\", \"baseline\", \"before-edge\", \"text-before-edge\", \"middle\", \"central\", \"after-edge\", \"text-after-edge\", \"ideographic\", \"alphabetic\", \"hanging\", \"mathematical\", \"inherit\"]);\n","import { Scatter } from \"./Scatter.ts\";\n\nexport class Area extends Scatter {\n    constructor() {\n        super();\n        this\n            .interpolate_default(\"linear\")\n            .interpolateFill_default(true)\n            ;\n    }\n}\nArea.prototype._class += \" chart_Area\";\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, InputField, Text } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { scaleBand as d3ScaleBand } from \"d3-scale\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nimport \"../src/Column.css\";\n\nexport class Column extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"string\"\n    }, {\n        id: \"values\",\n        type: \"number\",\n        multi: true\n    }];\n\n    protected _linearGap: number;\n    private textLocal = d3Local<Text>();\n    private stackedTextLocal = d3Local<Text>();\n    private isHorizontal: boolean;\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n\n        this._selection.skipBringToTop(true);\n\n        this._linearGap = 25.0;\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n\n        const context = this;\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d.row[0],\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(column),\n                                    value: d.row[i + 1]\n                                };\n                            })\n                        });\n                    default:\n                        let value = d.row[d.idx];\n                        if (value instanceof Array) {\n                            value = value[1] - value[0];\n                        }\n                        return context.tooltipFormat({ label: d.row[0], series: context.layerColumns(host)[d.idx], value });\n                }\n            })\n            ;\n    }\n\n    adjustedData(host: XYAxis) {\n        const retVal = this.layerData(host).map(row => {\n            let prevValue = 0;\n            return row.map((cell, idx) => {\n                if (idx === 0) {\n                    return cell;\n                }\n                if (idx >= this.layerColumns(host).length) {\n                    return cell;\n                }\n                const retVal2 = host.yAxisStacked() ? [prevValue, prevValue + cell] : cell;\n                prevValue += cell;\n                return retVal2;\n            }, this);\n        }, this);\n        return retVal;\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element, duration);\n        const isHorizontal = host.orientation() === \"horizontal\";\n        this.isHorizontal = isHorizontal;\n        const context = this;\n\n        if (this.tabNavigation() && host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", \"0\")\n                .attr(\"role\", \"group\")\n                .attr(\"aria-label\", `${this.columns()[0] || \"Chart\"} data`);\n        } else if (host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", null)\n                .attr(\"role\", null)\n                .attr(\"aria-label\", null);\n        }\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n        const formatPct = d3Format(context.showValueAsPercentFormat());\n\n        let dataLen = 10;\n        let offset = 0;\n        switch (host.xAxisType()) {\n            case \"ordinal\":\n                dataLen = host.bandwidth();\n                offset = -dataLen / 2;\n                break;\n            case \"linear\":\n            case \"time\":\n                dataLen = Math.max(Math.abs(host.dataPos(2) - host.dataPos(1)) * (100 - this._linearGap) / 100, dataLen);\n                offset = -dataLen / 2;\n                break;\n            default:\n        }\n\n        this.tooltip.direction(isHorizontal ? \"n\" : \"e\");\n\n        const columnScale = d3ScaleBand()\n            .domain(context.layerColumns(host).filter(function (_d, idx) { return idx > 0; }))\n            .rangeRound(isHorizontal ? [0, dataLen] : [dataLen, 0])\n            .paddingInner(Math.max(this.xAxisSeriesPaddingInner(), 0.05))\n            .paddingOuter(0)\n            ;\n        let domainSums = [];\n        const seriesSums = [];\n        const columnLength = this.columns().length;\n        const rowData = this.data();\n        if (this.showValue() && this.showValueAsPercent() === \"series\") {\n            rowData.forEach((row) => {\n                row.filter((_, idx) => idx > 0 && idx < columnLength).forEach((col, idx) => {\n                    if (seriesSums[idx + 1] === undefined) {\n                        seriesSums[idx + 1] = 0;\n                    }\n                    seriesSums[idx + 1] += col;\n                });\n            });\n        }\n\n        if (this.showDomainTotal() || (this.showValue() && this.showValueAsPercent() === \"domain\")) {\n            domainSums = rowData.map(row => {\n                return row.filter((cell, idx) => idx > 0 && idx < columnLength).reduce((sum, cell) => {\n                    return sum + cell;\n                }, 0);\n            });\n        }\n\n        const column = element.selectAll(\".dataRow\")\n            .data(this.adjustedData(host))\n            ;\n        const hostData = host.data();\n        const axisSize = this.getAxisSize(host);\n        column.enter().append(\"g\")\n            .attr(\"class\", \"dataRow\")\n            .merge(column)\n            .each(function (dataRow, dataRowIdx) {\n                const element = d3Select(this);\n\n                const columnGRect = element.selectAll(\".dataCell\").data(dataRow.filter(function (_d, i) { return i < context.layerColumns(host).length; }).map(function (d, i) {\n                    return {\n                        column: context.layerColumns(host)[i],\n                        row: dataRow,\n                        origRow: hostData[dataRowIdx],\n                        value: d,\n                        idx: i\n                    };\n                }).filter(function (d) { return d.value !== null && d.idx > 0; }), (d: any) => d.column);\n\n                const columnGEnter = columnGRect\n                    .enter().append(\"g\")\n                    .attr(\"class\", \"dataCell\")\n                    .on(\"mouseout.tooltip\", function (d: any) {\n                        if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n                            context.tooltip.hide.apply(context, arguments);\n                        }\n                    })\n                    .on(\"mousemove.tooltip\", function (d: any) {\n                        if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n                            context.tooltip.show.apply(context, arguments);\n                        }\n                    })\n                    .call(host._selection.enter.bind(host._selection))\n                    .on(\"click\", function (d: any) {\n                        context.click(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n                    })\n                    .on(\"dblclick\", function (d: any) {\n                        context.dblclick(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n                    })\n                    .on(\"keydown\", function (evt, d: any) {\n                        if (context.tabNavigation()) {\n                            const event = d3Event();\n                            if (event.code === \"Space\" || event.key === \"Enter\") {\n                                event.preventDefault();\n                                host._selection.click(this);\n                            }\n                        }\n                    })\n                    .style(\"opacity\", 0)\n                    .each(function (this: SVGElement, d: any) {\n                        const element = d3Select(this);\n                        element.append(\"rect\")\n                            .attr(\"class\", \"columnRect series series-\" + context.cssTag(d.column))\n                            ;\n                        element.append(\"text\")\n                            .attr(\"class\", \"columnRectText\")\n                            .style(\"stroke\", \"transparent\")\n                            ;\n                    })\n                    ;\n                columnGEnter.transition().duration(duration)\n                    .style(\"opacity\", 1)\n                    ;\n                const domainLength = host.yAxisStacked() ? dataLen : columnScale.bandwidth();\n                columnGEnter.merge(columnGRect as any)\n                    .attr(\"tabindex\", context.tabNavigation() ? 0 : null) // Tabster Groupper manages these inner focusables\n                    .attr(\"role\", context.tabNavigation() ? \"button\" : null) // ARIA role for accessibility\n                    .attr(\"aria-label\", context.tabNavigation() ? (d: any) => `${d.origRow[0]} - ${d.column}: ${d.value instanceof Array ? d.value[1] - d.value[0] : d.value}` : null)\n                    .each(function (this: SVGElement, d: any) {\n                        const element = d3Select(this);\n                        const domainPos = host.dataPos(dataRow[0]) + (host.yAxisStacked() ? 0 : columnScale(d.column)) + offset;\n                        const upperValue = d.value instanceof Array ? d.value[1] : d.value;\n                        let valueText = d.origRow[d.idx];\n                        if (context.showValue()) {\n                            const dm = context.dataMeta();\n                            switch (context.showValueAsPercent()) {\n                                case \"series\":\n                                    const seriesSum = typeof dm.sum !== \"undefined\" ? dm.sum : seriesSums[d.idx];\n                                    valueText = formatPct(valueText / seriesSum);\n                                    break;\n                                case \"domain\":\n                                    const domainSum = typeof dm.sum !== \"undefined\" ? dm.sum : domainSums[dataRowIdx];\n                                    valueText = formatPct(valueText / domainSum);\n                                    break;\n                                case null:\n                                default:\n                                    valueText = d3Format(context.showValueFormat())(valueText);\n                                    break;\n                            }\n                        }\n                        const upperValuePos = host.valuePos(upperValue);\n                        const lowerValuePos = host.valuePos(d.value instanceof Array ? d.value[0] : 0);\n                        const valuePos = Math.min(lowerValuePos, upperValuePos);\n                        const valueLength = Math.abs(upperValuePos - lowerValuePos);\n\n                        const innerTextHeight = context.innerTextFontSize();\n                        const innerTextPadding = context.innerTextPadding_exists() ? context.innerTextPadding() : innerTextHeight / 2.5;\n\n                        const dataRect = context.intersectRectRect(\n                            {\n                                x: isHorizontal ? domainPos : valuePos,\n                                y: isHorizontal ? valuePos : domainPos,\n                                width: isHorizontal ? domainLength : valueLength,\n                                height: isHorizontal ? valueLength : domainLength\n                            },\n                            {\n                                x: 0,\n                                y: 0,\n                                width: axisSize.width,\n                                height: axisSize.height\n                            }\n                        );\n\n                        const _rects = element.select(\"rect\").transition().duration(duration)\n                            .style(\"fill\", (d: any) => context.fillColor(d.row, d.column, d.value, d.origRow))\n                            ;\n\n                        if (isHorizontal) {\n                            _rects\n                                .attr(\"x\", domainPos)\n                                .attr(\"y\", valuePos)\n                                .attr(\"width\", domainLength)\n                                .attr(\"height\", valueLength)\n                                ;\n                        } else {\n                            _rects\n                                .attr(\"y\", domainPos)\n                                .attr(\"x\", valuePos)\n                                .attr(\"height\", domainLength)\n                                .attr(\"width\", valueLength)\n                                ;\n                        }\n                        const _texts = element.select(\"text\").transition().duration(duration)\n                            .style(\"font-size\", innerTextHeight + \"px\")\n                            .style(\"fill\", (d: any) => context.textColor(d.row, d.column, d.value, d.origRow))\n                            ;\n\n                        _texts.style(\"font-family\", context.innerTextFontFamily_exists() ? context.innerTextFontFamily() : null);\n\n                        const padding = context.innerTextPadding_exists() ? context.innerTextPadding() : 8;\n\n                        const textHeightOffset = innerTextHeight / 2.7;\n\n                        if (isHorizontal) { // Column\n                            const y = dataRect.y + dataRect.height - innerTextPadding;\n                            _texts\n                                .attr(\"x\", domainPos + (domainLength / 2))\n                                .attr(\"y\", y + textHeightOffset)\n                                .attr(\"transform\", `rotate(-90, ${domainPos + (domainLength / 2)}, ${y})`)\n                                ;\n                        } else { // Bar\n                            _texts\n                                .attr(\"x\", dataRect.x + padding)\n                                .attr(\"y\", domainPos + (domainLength / 2) + textHeightOffset)\n                                ;\n                        }\n                        _texts\n                            .attr(\"height\", domainLength)\n                            .attr(\"width\", valueLength)\n                            ;\n                        if (context.showInnerText()) {\n                            _texts\n                                .text((d: any) => {\n                                    const innerText = context.innerText(d.origRow, d.origRow[columnLength], d.idx);\n                                    if (innerText) {\n                                        const clippedValueLength = isHorizontal ? dataRect.height : dataRect.width;\n                                        const innerTextObj = context.calcInnerText(clippedValueLength, innerText, valueText);\n                                        d.innerTextObj = innerTextObj;\n\n                                        return innerTextObj.text;\n                                    }\n                                    return \"\";\n                                })\n                                ;\n                        }\n                        const dataText = element.selectAll(\".dataText\").data(context.showValue() ? [`${upperValue}`] : []);\n                        const dataTextEnter = dataText.enter().append(\"g\")\n                            .attr(\"class\", \"dataText\")\n                            .each(function (this: SVGElement, d) {\n                                context.textLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\n                            });\n                        dataTextEnter.merge(dataText as any)\n                            .each(function (this: SVGElement) {\n                                const pos = { x: 0, y: 0 };\n                                const valueFontFamily = context.valueFontFamily();\n                                const valueFontSize = context.valueFontSize();\n                                const textSize = context.textSize(valueText, valueFontFamily, valueFontSize);\n\n                                const isPositive = parseFloat(valueText) >= 0;\n\n                                let valueAnchor = context.valueAnchor() ? context.valueAnchor() : isHorizontal ? \"middle\" : \"start\";\n\n                                const leftSpace = dataRect.x;\n                                const rightSpace = axisSize.width - (dataRect.x + dataRect.width);\n                                const topSpace = dataRect.y;\n                                const bottomSpace = axisSize.height - (dataRect.y + dataRect.height);\n\n                                let noRoomInside;\n                                let isOutside;\n                                let noRoomOnExpectedSide;\n\n                                if (d.innerTextObj) {\n                                    const { padding, valueTextWidth } = d.innerTextObj;\n                                    isOutside = false;\n                                    if (isHorizontal) { // Column\n                                        valueAnchor = \"middle\";\n                                        pos.x = domainPos + (domainLength / 2);\n\n                                        if (d.innerTextObj.category === 4) {\n                                            isOutside = true;\n                                            pos.y = valuePos - padding - (valueFontSize / 2);\n                                        } else {\n                                            pos.y = valuePos + padding + (valueFontSize / 2);\n                                        }\n                                    } else { // Bar\n                                        valueAnchor = \"start\";\n                                        if (d.innerTextObj.category === 4) {\n                                            isOutside = true;\n                                            pos.x = (valueLength + valuePos) + padding;\n                                        } else {\n                                            pos.x = (valueLength + valuePos) - valueTextWidth - padding;\n                                        }\n                                        pos.y = domainPos + (domainLength / 2);\n                                    }\n                                } else {\n                                    /*\n                                    IF this.valueCentered() and NO ROOM INSIDE\n                                        ...then ASSUME THERES ROOM OUTSIDE\n                                        IF NO ROOM OUTSIDE ON EXPECTED SIDE\n                                            ...then ASSUME THERES ROOM ON THE OPPOSITE SIDE\n                                    */\n                                    if (isHorizontal) { // Column\n                                        noRoomInside = dataRect.height < textSize.height;\n                                        isOutside = !context.valueCentered() || noRoomInside;\n\n                                        pos.x = dataRect.x + (dataRect.width / 2);\n\n                                        if (isOutside) {\n                                            if (isPositive) {\n                                                noRoomOnExpectedSide = topSpace < textSize.height + padding;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (!noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.y = dataRect.y + (dataRect.height / 2);\n                                                    } else {\n                                                        pos.y = dataRect.y + dataRect.height + textSize.height;\n                                                    }\n                                                } else {\n                                                    pos.y = dataRect.y - (textSize.height / 2) - padding;\n                                                }\n                                            } else {\n                                                noRoomOnExpectedSide = bottomSpace < textSize.height;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (!noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.y = dataRect.y + (dataRect.height / 2);\n                                                    } else {\n                                                        pos.y = dataRect.y - (textSize.height / 2) - padding;\n                                                    }\n                                                } else {\n                                                    pos.y = dataRect.y + textSize.height + padding;\n                                                }\n                                            }\n                                        } else {\n                                            pos.y = dataRect.y + (dataRect.height / 2);\n                                        }\n                                    } else { // Bar\n                                        noRoomInside = dataRect.width < textSize.width;\n                                        isOutside = !context.valueCentered() || noRoomInside;\n\n                                        pos.y = dataRect.y + (dataRect.height / 2);\n\n                                        if (isOutside) {\n                                            if (isPositive) {\n                                                noRoomOnExpectedSide = rightSpace < textSize.width + padding;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (context.showInnerText() || !noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.x = dataRect.x + (dataRect.width / 2);\n                                                    } else {\n                                                        pos.x = dataRect.x - (textSize.width - padding);\n                                                    }\n                                                } else {\n                                                    pos.x = dataRect.x + dataRect.width + (textSize.width / 2) + padding;\n                                                }\n                                            } else {\n                                                noRoomOnExpectedSide = leftSpace < textSize.width;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (context.showInnerText() || !noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.x = dataRect.x + (dataRect.width / 2);\n                                                    } else {\n                                                        pos.x = dataRect.x + dataRect.width + (textSize.width - padding);\n                                                    }\n                                                } else {\n                                                    pos.x = dataRect.x - (textSize.width - padding);\n                                                }\n                                            }\n                                        } else {\n                                            pos.x = dataRect.x + (dataRect.width / 2);\n                                        }\n                                    }\n                                }\n                                const textColor = isOutside ? null : context.textColor(d.row, d.column, d.value, d.origRow);\n\n                                //  Prevent overlapping labels on stacked columns\n                                const columns = context.columns();\n                                const hideValue = (context.yAxisStacked() && noRoomInside) ||\n                                    (isOutside && context.yAxisStacked() && columns.indexOf(d.column) !== columns.length - 1);\n                                context.textLocal.get(this)\n                                    .pos(pos)\n                                    .anchor(valueAnchor)\n                                    .fontFamily(valueFontFamily)\n                                    .fontSize(valueFontSize)\n                                    .text(`${valueText}`)\n                                    .colorFill(textColor)\n                                    .visible(context.showValue() && !hideValue)\n                                    .render()\n                                    ;\n\n                            });\n                        dataText.exit()\n                            .each(function (this: SVGElement, d) {\n                                context.textLocal.get(this).target(null);\n                            })\n                            .remove()\n                            ;\n                    });\n                columnGRect.exit().transition().duration(duration)\n                    .style(\"opacity\", 0)\n                    .remove()\n                    ;\n\n                const value4pos = host.yAxisStacked() ? domainSums[dataRowIdx] : Math.max(...dataRow.filter((_, idx) => idx > 0 && idx < columnLength));\n                const stackedTotalText = element.selectAll(\".stackedTotalText\").data(context.showDomainTotal() ? [domainSums[dataRowIdx]] : []);\n                const stackedTotalTextEnter = stackedTotalText.enter().append(\"g\")\n                    .attr(\"class\", \"stackedTotalText\")\n                    .each(function (this: SVGElement, d) {\n                        context.stackedTextLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\n                    });\n                stackedTotalTextEnter.merge(stackedTotalText as any)\n                    .each(function (this: SVGElement, d: any) {\n                        const pos = { x: 0, y: 0 };\n                        const domainPos = host.dataPos(dataRow[0]);\n                        const valuePos = host.valuePos(value4pos);\n\n                        const valueFontFamily = context.valueFontFamily();\n                        const valueFontSize = context.valueFontSize();\n                        const textSize = context.textSize(d, valueFontFamily, valueFontSize);\n\n                        const isPositive = parseFloat(d) >= 0;\n                        let valueAnchor: \"start\" | \"middle\" | \"end\" = \"middle\";\n                        if (isHorizontal) {\n                            pos.x = domainPos;\n                            if (isPositive) {\n                                pos.y = valuePos - textSize.height / 2;\n                            } else {\n                                pos.y = valuePos + textSize.height / 2;\n                            }\n                        } else {\n                            valueAnchor = \"start\";\n                            pos.y = domainPos;\n                            if (isPositive) {\n                                pos.x = valuePos + textSize.width / 2;\n                            } else {\n                                pos.x = valuePos - textSize.width / 2;\n                            }\n                        }\n\n                        context.stackedTextLocal.get(this)\n                            .pos(pos)\n                            .anchor(valueAnchor)\n                            .fontFamily(valueFontFamily)\n                            .fontSize(valueFontSize)\n                            .text(d)\n                            .render()\n                            ;\n\n                    });\n                stackedTotalText.exit()\n                    .each(function (this: SVGElement, d) {\n                        context.textLocal.get(this).target(null);\n                    })\n                    .remove()\n                    ;\n            });\n        column.exit().transition().duration(duration)\n            .remove()\n            ;\n    }\n\n    calcInnerText(offset, innerText, valueText) {\n        const fontFamily = this.innerTextFontFamily_exists() ? this.innerTextFontFamily() : \"Verdana\";\n        const fontSize = this.innerTextFontSize();\n        const valueFontFamily = this.valueFontFamily_exists() ? this.valueFontFamily() : \"Verdana\";\n        const valueFontSize = this.valueFontSize();\n        const padding = this.innerTextPadding_exists() ? this.innerTextPadding() : fontSize / 2.5;\n        const valueTextWidth = this.isHorizontal ? valueFontSize : this.textSize(valueText, valueFontFamily, valueFontSize).width;\n        const ellipsisWidth = this.textSize(\"...\", fontFamily, fontSize).width;\n        const innerTextWidth = this.textSize(innerText, fontFamily, fontSize).width;\n        const origInnerText = innerText;\n\n        const fullWidth = (padding * 3) + innerTextWidth + valueTextWidth;\n        const fullWidth2 = (padding * 3) + ellipsisWidth + valueTextWidth;\n        const fullWidth3 = (padding * 1) + valueTextWidth;\n        /*\n        Categories:\n            1) room to display inner text (with padding) AND value text (with padding)\n            2) room to display ellipsis (with padding) AND value text (with padding)\n            3) room to display value text only (with padding)\n            4) no room to display any text except value on the outside\n        */\n        let category = 4;\n        if (fullWidth < offset) {\n            category = 1;\n        } else if (fullWidth2 < offset) {\n            const excessWidth = offset - fullWidth2;\n            let _text = \"\";\n            for (const letter of innerText) {\n                if (this.textSize(_text + letter, fontFamily, fontSize).width > excessWidth) {\n                    innerText = _text + \"...\";\n                    break;\n                } else {\n                    _text += letter;\n                }\n            }\n            category = 2;\n        } else if (fullWidth3 < offset) {\n            innerText = \"\";\n            category = 3;\n        } else {\n            innerText = \"\";\n        }\n\n        return {\n            text: innerText,\n            isTruncated: origInnerText !== innerText,\n            padding,\n            category,\n            valueTextWidth\n        };\n    }\n\n    innerText(origRow, lparam, idx): string {\n        return origRow[0];\n    }\n}\nColumn.prototype._class += \" chart_Column\";\nColumn.prototype.implements(INDChart.prototype);\nColumn.prototype.implements(ITooltip.prototype);\n\nexport interface Column {\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    showValue(): boolean;\n    showValue(_: boolean): this;\n    showInnerText(): boolean;\n    showInnerText(_: boolean): this;\n    showValueFormat(): string;\n    showValueFormat(_: string): this;\n    showValueAsPercent(): null | \"series\" | \"domain\";\n    showValueAsPercent(_: null | \"series\" | \"domain\"): this;\n    showValueAsPercentFormat(): string;\n    showValueAsPercentFormat(_: string): this;\n    showDomainTotal(): boolean;\n    showDomainTotal(_: boolean): this;\n    valueCentered(): boolean;\n    valueCentered(_: boolean): this;\n    valueAnchor(): \"start\" | \"middle\" | \"end\";\n    valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n    valueFontFamily(): string;\n    valueFontFamily(_: string): this;\n    valueFontFamily_exists(): boolean;\n    valueFontSize(): number;\n    valueFontSize(_: number): this;\n    xAxisSeriesPaddingInner(): number;\n    xAxisSeriesPaddingInner(_: number): this;\n    innerTextFontFamily(): string;\n    innerTextFontFamily(_: string): this;\n    innerTextFontFamily_exists(): boolean;\n    innerTextFontSize(): number;\n    innerTextFontSize(_: number): this;\n    innerTextPadding(): number;\n    innerTextPadding(_: number): this;\n    innerTextPadding_exists(): boolean;\n    tooltipInnerTextEllipsedOnly(): boolean;\n    tooltipInnerTextEllipsedOnly(_: boolean): this;\n\n    //  INDChart  ---\n    fillColor(row, column, value, origRow): string;\n    textColor(row, column, value, origRow): string;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip  ---\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n    tooltipStyle(_: \"default\" | \"none\" | \"series-table\"): this;\n}\n\nColumn.prototype.publish(\"valueFontFamily\", null, \"string\", \"Font family of value text\", null, { optional: true });\nColumn.prototype.publish(\"valueFontSize\", 12, \"number\", \"Height of value text (pixels)\");\nColumn.prototype.publish(\"innerTextFontFamily\", null, \"string\", \"Font family of inner text\", null, { optional: true });\nColumn.prototype.publish(\"innerTextPadding\", 8, \"number\", \"Offset of inner text (pixels)\", null, { optional: true });\nColumn.prototype.publish(\"innerTextFontSize\", 12, \"number\", \"Height of inner text (pixels)\");\nColumn.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", () => Column.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nColumn.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nColumn.prototype.publish(\"showValue\", false, \"boolean\", \"Show Value in column\");\nColumn.prototype.publish(\"showInnerText\", false, \"boolean\", \"Show Label in column\");\nColumn.prototype.publish(\"showValueFormat\", \",\", \"string\", \"D3 Format for Value\", null, { disable: (w: Column) => !w.showValue() || !!w.showValueAsPercent() });\nColumn.prototype.publish(\"showValueAsPercent\", null, \"set\", \"If showValue is true, optionally show value as a percentage by Series or Domain\", [null, \"series\", \"domain\"], { disable: w => !w.showValue(), optional: true });\nColumn.prototype.publish(\"showValueAsPercentFormat\", \".0%\", \"string\", \"D3 Format for %\", null, { disable: (w: Column) => !w.showValue() || !w.showValueAsPercent() });\nColumn.prototype.publish(\"showDomainTotal\", false, \"boolean\", \"Show Total Value for Stacked Columns\", null);\nColumn.prototype.publish(\"valueCentered\", false, \"boolean\", \"Show Value in center of column\");\nColumn.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nColumn.prototype.publish(\"xAxisSeriesPaddingInner\", 0.0, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\");\nColumn.prototype.publish(\"tooltipInnerTextEllipsedOnly\", false, \"boolean\", \"Show tooltip only when inner text is truncated with an ellipsis\");\n\n/*\nconst origUseClonedPalette = Column.prototype.useClonedPalette;\nColumn.prototype.useClonedPalette = function (this: Column, _?) {\n    const retVal = origUseClonedPalette.apply(this, arguments);\n    if (arguments.length) {\n        this._useClonedPalette = _;\n    }\n    return retVal;;\n}\n*/\n","import { Column } from \"./Column.ts\";\n\nexport class Bar extends Column {\n    constructor() {\n        super();\n        this.orientation_default(\"vertical\");\n    }\n}\nBar.prototype._class += \" chart_Bar\";\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","export default function(callback) {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      callback(node), children = node.children;\n      if (children) for (i = 0, n = children.length; i < n; ++i) {\n        next.push(children[i]);\n      }\n    }\n  } while (next.length);\n  return this;\n}\n","export default function(callback) {\n  var node = this, nodes = [node], children, i;\n  while (node = nodes.pop()) {\n    callback(node), children = node.children;\n    if (children) for (i = children.length - 1; i >= 0; --i) {\n      nodes.push(children[i]);\n    }\n  }\n  return this;\n}\n","export default function(callback) {\n  var node = this, nodes = [node], next = [], children, i, n;\n  while (node = nodes.pop()) {\n    next.push(node), children = node.children;\n    if (children) for (i = 0, n = children.length; i < n; ++i) {\n      nodes.push(children[i]);\n    }\n  }\n  while (node = next.pop()) {\n    callback(node);\n  }\n  return this;\n}\n","export default function(value) {\n  return this.eachAfter(function(node) {\n    var sum = +value(node.data) || 0,\n        children = node.children,\n        i = children && children.length;\n    while (--i >= 0) sum += children[i].value;\n    node.value = sum;\n  });\n}\n","export default function(compare) {\n  return this.eachBefore(function(node) {\n    if (node.children) {\n      node.children.sort(compare);\n    }\n  });\n}\n","export default function(end) {\n  var start = this,\n      ancestor = leastCommonAncestor(start, end),\n      nodes = [start];\n  while (start !== ancestor) {\n    start = start.parent;\n    nodes.push(start);\n  }\n  var k = nodes.length;\n  while (end !== ancestor) {\n    nodes.splice(k, 0, end);\n    end = end.parent;\n  }\n  return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n  if (a === b) return a;\n  var aNodes = a.ancestors(),\n      bNodes = b.ancestors(),\n      c = null;\n  a = aNodes.pop();\n  b = bNodes.pop();\n  while (a === b) {\n    c = a;\n    a = aNodes.pop();\n    b = bNodes.pop();\n  }\n  return c;\n}\n","export default function() {\n  var node = this, nodes = [node];\n  while (node = node.parent) {\n    nodes.push(node);\n  }\n  return nodes;\n}\n","export default function() {\n  var nodes = [];\n  this.each(function(node) {\n    nodes.push(node);\n  });\n  return nodes;\n}\n","export default function() {\n  var leaves = [];\n  this.eachBefore(function(node) {\n    if (!node.children) {\n      leaves.push(node);\n    }\n  });\n  return leaves;\n}\n","export default function() {\n  var root = this, links = [];\n  root.each(function(node) {\n    if (node !== root) { // Don’t include the root’s parent, if any.\n      links.push({source: node.parent, target: node});\n    }\n  });\n  return links;\n}\n","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n  var root = new Node(data),\n      valued = +data.value && (root.value = data.value),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  if (children == null) children = defaultChildren;\n\n  while (node = nodes.pop()) {\n    if (valued) node.value = +node.data.value;\n    if ((childs = children(node.data)) && (n = childs.length)) {\n      node.children = new Array(n);\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = node.children[i] = new Node(childs[i]));\n        child.parent = node;\n        child.depth = node.depth + 1;\n      }\n    }\n  }\n\n  return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n  return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n  return d.children;\n}\n\nfunction copyData(node) {\n  node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n  var height = 0;\n  do node.height = height;\n  while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n  this.data = data;\n  this.depth =\n  this.height = 0;\n  this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n  constructor: Node,\n  count: node_count,\n  each: node_each,\n  eachAfter: node_eachAfter,\n  eachBefore: node_eachBefore,\n  sum: node_sum,\n  sort: node_sort,\n  path: node_path,\n  ancestors: node_ancestors,\n  descendants: node_descendants,\n  leaves: node_leaves,\n  links: node_links,\n  copy: node_copy\n};\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n  var m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = Math.random() * m-- | 0;\n    t = array[m];\n    array[m] = array[i];\n    array[i] = t;\n  }\n\n  return array;\n}\n","import {shuffle, slice} from \"../array.js\";\n\nexport default function(circles) {\n  var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n  while (i < n) {\n    p = circles[i];\n    if (e && enclosesWeak(e, p)) ++i;\n    else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n  }\n\n  return e;\n}\n\nfunction extendBasis(B, p) {\n  var i, j;\n\n  if (enclosesWeakAll(p, B)) return [p];\n\n  // If we get here then B must have at least one element.\n  for (i = 0; i < B.length; ++i) {\n    if (enclosesNot(p, B[i])\n        && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n      return [B[i], p];\n    }\n  }\n\n  // If we get here then B must have at least two elements.\n  for (i = 0; i < B.length - 1; ++i) {\n    for (j = i + 1; j < B.length; ++j) {\n      if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n          && enclosesNot(encloseBasis2(B[i], p), B[j])\n          && enclosesNot(encloseBasis2(B[j], p), B[i])\n          && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n        return [B[i], B[j], p];\n      }\n    }\n  }\n\n  // If we get here then something is very wrong.\n  throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n  var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n  return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n  var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n  for (var i = 0; i < B.length; ++i) {\n    if (!enclosesWeak(a, B[i])) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction encloseBasis(B) {\n  switch (B.length) {\n    case 1: return encloseBasis1(B[0]);\n    case 2: return encloseBasis2(B[0], B[1]);\n    case 3: return encloseBasis3(B[0], B[1], B[2]);\n  }\n}\n\nfunction encloseBasis1(a) {\n  return {\n    x: a.x,\n    y: a.y,\n    r: a.r\n  };\n}\n\nfunction encloseBasis2(a, b) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n      l = Math.sqrt(x21 * x21 + y21 * y21);\n  return {\n    x: (x1 + x2 + x21 / l * r21) / 2,\n    y: (y1 + y2 + y21 / l * r21) / 2,\n    r: (l + r1 + r2) / 2\n  };\n}\n\nfunction encloseBasis3(a, b, c) {\n  var x1 = a.x, y1 = a.y, r1 = a.r,\n      x2 = b.x, y2 = b.y, r2 = b.r,\n      x3 = c.x, y3 = c.y, r3 = c.r,\n      a2 = x1 - x2,\n      a3 = x1 - x3,\n      b2 = y1 - y2,\n      b3 = y1 - y3,\n      c2 = r2 - r1,\n      c3 = r3 - r1,\n      d1 = x1 * x1 + y1 * y1 - r1 * r1,\n      d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n      d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n      ab = a3 * b2 - a2 * b3,\n      xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n      xb = (b3 * c2 - b2 * c3) / ab,\n      ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n      yb = (a2 * c3 - a3 * c2) / ab,\n      A = xb * xb + yb * yb - 1,\n      B = 2 * (r1 + xa * xb + ya * yb),\n      C = xa * xa + ya * ya - r1 * r1,\n      r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n  return {\n    x: x1 + xa + xb * r,\n    y: y1 + ya + yb * r,\n    r: r\n  };\n}\n","import enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n  var dx = b.x - a.x, x, a2,\n      dy = b.y - a.y, y, b2,\n      d2 = dx * dx + dy * dy;\n  if (d2) {\n    a2 = a.r + c.r, a2 *= a2;\n    b2 = b.r + c.r, b2 *= b2;\n    if (a2 > b2) {\n      x = (d2 + b2 - a2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n      c.x = b.x - x * dx - y * dy;\n      c.y = b.y - x * dy + y * dx;\n    } else {\n      x = (d2 + a2 - b2) / (2 * d2);\n      y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n      c.x = a.x + x * dx - y * dy;\n      c.y = a.y + x * dy + y * dx;\n    }\n  } else {\n    c.x = a.x + c.r;\n    c.y = a.y;\n  }\n}\n\nfunction intersects(a, b) {\n  var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n  return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n  var a = node._,\n      b = node.next._,\n      ab = a.r + b.r,\n      dx = (a.x * b.r + b.x * a.r) / ab,\n      dy = (a.y * b.r + b.y * a.r) / ab;\n  return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n  this._ = circle;\n  this.next = null;\n  this.previous = null;\n}\n\nexport function packEnclose(circles) {\n  if (!(n = circles.length)) return 0;\n\n  var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n  // Place the first circle.\n  a = circles[0], a.x = 0, a.y = 0;\n  if (!(n > 1)) return a.r;\n\n  // Place the second circle.\n  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n  if (!(n > 2)) return a.r + b.r;\n\n  // Place the third circle.\n  place(b, a, c = circles[2]);\n\n  // Initialize the front-chain using the first three circles a, b and c.\n  a = new Node(a), b = new Node(b), c = new Node(c);\n  a.next = c.previous = b;\n  b.next = a.previous = c;\n  c.next = b.previous = a;\n\n  // Attempt to place each remaining circle…\n  pack: for (i = 3; i < n; ++i) {\n    place(a._, b._, c = circles[i]), c = new Node(c);\n\n    // Find the closest intersecting circle on the front-chain, if any.\n    // “Closeness” is determined by linear distance along the front-chain.\n    // “Ahead” or “behind” is likewise determined by linear distance.\n    j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n    do {\n      if (sj <= sk) {\n        if (intersects(j._, c._)) {\n          b = j, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sj += j._.r, j = j.next;\n      } else {\n        if (intersects(k._, c._)) {\n          a = k, a.next = b, b.previous = a, --i;\n          continue pack;\n        }\n        sk += k._.r, k = k.previous;\n      }\n    } while (j !== k.next);\n\n    // Success! Insert the new circle c between a and b.\n    c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n    // Compute the new closest circle pair to the centroid.\n    aa = score(a);\n    while ((c = c.next) !== b) {\n      if ((ca = score(c)) < aa) {\n        a = c, aa = ca;\n      }\n    }\n    b = a.next;\n  }\n\n  // Compute the enclosing circle of the front chain.\n  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n  // Translate the circles to put the enclosing circle around the origin.\n  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n  return c.r;\n}\n\nexport default function(circles) {\n  packEnclose(circles);\n  return circles;\n}\n","export function optional(f) {\n  return f == null ? null : required(f);\n}\n\nexport function required(f) {\n  if (typeof f !== \"function\") throw new Error;\n  return f;\n}\n","export function constantZero() {\n  return 0;\n}\n\nexport default function(x) {\n  return function() {\n    return x;\n  };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n  return Math.sqrt(d.value);\n}\n\nexport default function() {\n  var radius = null,\n      dx = 1,\n      dy = 1,\n      padding = constantZero;\n\n  function pack(root) {\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildren(padding, 0.5))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildren(constantZero, 1))\n          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n    }\n    return root;\n  }\n\n  pack.radius = function(x) {\n    return arguments.length ? (radius = optional(x), pack) : radius;\n  };\n\n  pack.size = function(x) {\n    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n  };\n\n  pack.padding = function(x) {\n    return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n  };\n\n  return pack;\n}\n\nfunction radiusLeaf(radius) {\n  return function(node) {\n    if (!node.children) {\n      node.r = Math.max(0, +radius(node) || 0);\n    }\n  };\n}\n\nfunction packChildren(padding, k) {\n  return function(node) {\n    if (children = node.children) {\n      var children,\n          i,\n          n = children.length,\n          r = padding(node) * k || 0,\n          e;\n\n      if (r) for (i = 0; i < n; ++i) children[i].r += r;\n      e = packEnclose(children);\n      if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n      node.r = e + r;\n    }\n  };\n}\n\nfunction translateChild(k) {\n  return function(node) {\n    var parent = node.parent;\n    node.r *= k;\n    if (parent) {\n      node.x = parent.x + k * node.x;\n      node.y = parent.y + k * node.y;\n    }\n  };\n}\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { FAChar, InputField, ISize, SVGWidget, Text, Utility } from \"@hpcc-js/common\";\nimport { hierarchy as d3Hierarchy, pack as d3Pack } from \"d3-hierarchy\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Bubble.css\";\n\nexport class Bubble extends SVGWidget {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"string\"\n    }, {\n        id: \"value\",\n        type: \"number\"\n    }];\n\n    labelWidgets;\n    d3Pack;\n\n    constructor() {\n        super();\n        I2DChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n\n        this._drawStartPos = \"origin\";\n\n        this.labelWidgets = {};\n\n        this.d3Pack = d3Pack()\n            .size([this.width(), this.height()])\n            .padding(1.5)\n            ;\n    }\n\n    size(): ISize;\n    size(_): this;\n    size(_?): ISize | this {\n        const retVal = super.size.apply(this, arguments);\n        if (arguments.length) {\n            this.d3Pack\n                .size([this.width(), this.height()])\n                ;\n        }\n        return retVal;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection.widgetElement(element);\n        const context = this;\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d[0],\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(d[0]),\n                                    value: d[1]\n                                };\n                            })\n                        });\n                    default:\n                        return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n                }\n            })\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        const context = this;\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n\n        const root = d3Hierarchy({ children: this.cloneData() })\n            .sum(function (d) { return d[1]; })\n            .sort(function (b, a) {\n                return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;\n            })\n            ;\n        this.d3Pack(root);\n\n        const node = element.selectAll(\".node\").data(root.children || [], d => d.data[0]);\n\n        //  Enter  ---\n        node.enter().append(\"g\")\n            .attr(\"class\", (d, i) => \"node series series-\" + this.cssTag(d.data[0]))\n            .attr(\"opacity\", 0)\n            .call(this._selection.enter.bind(this._selection))\n            .on(\"click\", function (d) {\n                context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d) {\n                context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n            })\n            .each(function (d) {\n                const element2 = d3Select(this);\n                const pos = { x: d.x, y: d.y };\n                element2.append(\"circle\")\n                    .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\n                    .attr(\"r\", 0)\n                    .on(\"mouseout.tooltip\", context.tooltip.hide)\n                    .on(\"mousemove.tooltip\", context.tooltip.show)\n                    ;\n                if (d.__viz_faChar) {\n                    context.labelWidgets[d.data[0]] = new FAChar()\n                        .char(d.__viz_faChar)\n                        .target(this)\n                        .render()\n                        ;\n                } else {\n                    context.labelWidgets[d.data[0]] = new Text()\n                        .text(d.data[0])\n                        .target(this)\n                        .render()\n                        ;\n                }\n            })\n            .merge(node).transition()\n            .attr(\"opacity\", 1)\n            .each(function (d) {\n                const element2 = d3Select(this);\n                const pos = { x: d.x, y: d.y };\n                element2.select(\"circle\").transition()\n                    .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\n                    .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n                    .attr(\"r\", d.r)\n                    .select(\"title\")\n                    .text(d.data[0] + \" (\" + d.data[1] + \")\")\n                    ;\n                if (d.__viz_faChar) {\n                    context.labelWidgets[d.data[0]]\n                        .pos(pos)\n                        .render()\n                        ;\n                } else {\n                    context.labelWidgets[d.data[0]]\n                        .pos(pos)\n                        .colorFill_default(context.textColor(d.data, context.columns()[1], d.data[1]))\n                        .width(d.r * 2)\n                        .text(d.data[0])\n                        .render()\n                        ;\n                }\n            })\n            ;\n\n        //  Exit  ---\n        node.exit().transition()\n            .style(\"opacity\", 0)\n            .remove()\n            ;\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n\n}\nBubble.prototype._class += \" chart_Bubble\";\nBubble.prototype.implements(I2DChart.prototype);\nBubble.prototype.implements(ITooltip.prototype);\nBubble.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface Bubble {\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n\n    //  I2DChart\n    _palette;\n    fillColor(row: any[], column: string, value: number): string;\n    textColor(row: any[], column: string, value: number): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n\n    //  SimpleSelectionMixin\n    _selection;\n}\n\nBubble.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Bubble.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nBubble.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\n","import { Scatter } from \"./Scatter.ts\";\n\nexport class BubbleXY extends Scatter {\n    constructor() {\n        super();\n    }\n    enter(domNode, element) {\n        if (!this.pointSizeColumn_exists()) {\n            this.pointSizeColumn(this.columns()[this.columns().length - 1]);\n        }\n        super.enter(domNode, element);\n    }\n}\nBubbleXY.prototype._class += \" chart_BubbleXY\";\n","var frame = 0, // is an animation frame pending?\n    timeout = 0, // is a timeout pending?\n    interval = 0, // are any timers active?\n    pokeDelay = 1000, // how frequently we check for clock skew\n    taskHead,\n    taskTail,\n    clockLast = 0,\n    clockNow = 0,\n    clockSkew = 0,\n    clock = typeof performance === \"object\" && performance.now ? performance : Date,\n    setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n  clockNow = 0;\n}\n\nexport function Timer() {\n  this._call =\n  this._time =\n  this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n  constructor: Timer,\n  restart: function(callback, delay, time) {\n    if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n    if (!this._next && taskTail !== this) {\n      if (taskTail) taskTail._next = this;\n      else taskHead = this;\n      taskTail = this;\n    }\n    this._call = callback;\n    this._time = time;\n    sleep();\n  },\n  stop: function() {\n    if (this._call) {\n      this._call = null;\n      this._time = Infinity;\n      sleep();\n    }\n  }\n};\n\nexport function timer(callback, delay, time) {\n  var t = new Timer;\n  t.restart(callback, delay, time);\n  return t;\n}\n\nexport function timerFlush() {\n  now(); // Get the current time, if not already set.\n  ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n  var t = taskHead, e;\n  while (t) {\n    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n    t = t._next;\n  }\n  --frame;\n}\n\nfunction wake() {\n  clockNow = (clockLast = clock.now()) + clockSkew;\n  frame = timeout = 0;\n  try {\n    timerFlush();\n  } finally {\n    frame = 0;\n    nap();\n    clockNow = 0;\n  }\n}\n\nfunction poke() {\n  var now = clock.now(), delay = now - clockLast;\n  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n  var t0, t1 = taskHead, t2, time = Infinity;\n  while (t1) {\n    if (t1._call) {\n      if (time > t1._time) time = t1._time;\n      t0 = t1, t1 = t1._next;\n    } else {\n      t2 = t1._next, t1._next = null;\n      t1 = t0 ? t0._next = t2 : taskHead = t2;\n    }\n  }\n  taskTail = t0;\n  sleep(time);\n}\n\nfunction sleep(time) {\n  if (frame) return; // Soonest alarm already set, or will be.\n  if (timeout) timeout = clearTimeout(timeout);\n  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n  if (delay > 24) {\n    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n    if (interval) interval = clearInterval(interval);\n  } else {\n    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n    frame = 1, setFrame(wake);\n  }\n}\n","import { descending as d3Descending } from \"d3-array\";\r\nimport { axisLeft as d3AxisLeft } from \"d3-axis\";\r\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { timerFlush as d3TimerFlush } from \"d3-timer\";\r\nimport \"d3-transition\";\r\n\r\nexport default function () {\r\n    var orient = \"left\",\r\n        reverse = false,\r\n        vertical = false,\r\n        ranges = bulvarRanges,\r\n        markers = bulvarMarkers,\r\n        measures = bulvarMeasures,\r\n        width = 380,\r\n        height = 30,\r\n        xAxis = d3AxisLeft();\r\n\r\n    // For each small multiple…\r\n    function bulvar(g) {\r\n        g.each(function (d, i) {\r\n            var rangez = ranges.call(this, d, i).slice().sort(d3Descending),\r\n                markerz = markers.call(this, d, i).slice().sort(d3Descending),\r\n                measurez = measures.call(this, d, i).slice().sort(d3Descending),\r\n                g2 = d3Select(this),\r\n                extentX,\r\n                extentY;\r\n\r\n            var wrap = g2.select(\"g.wrap\");\r\n            if (wrap.empty()) wrap = g2.append(\"g\").attr(\"class\", \"wrap\");\r\n\r\n            if (vertical) {\r\n                extentX = height, extentY = width;\r\n                wrap.attr(\"transform\", \"rotate(90)translate(0,\" + -width + \")\");\r\n            } else {\r\n                extentX = width, extentY = height;\r\n                wrap.attr(\"transform\", null);\r\n            }\r\n\r\n            // Compute the new x-scale.\r\n            var x1 = d3ScaleLinear()\r\n                .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])\r\n                .range(reverse ? [extentX, 0] : [0, extentX]);\r\n\r\n            // Retrieve the old x-scale, if this is an update.\r\n            var x0 = this.__chart__ || d3ScaleLinear()\r\n                .domain([0, Infinity])\r\n                .range(x1.range());\r\n\r\n            // Stash the new scale.\r\n            this.__chart__ = x1;\r\n\r\n            // Derive width-scales from the x-scales.\r\n            var w0 = bulvarWidth(x0),\r\n                w1 = bulvarWidth(x1);\r\n\r\n            // Update the range rects.\r\n            var range = wrap.selectAll(\"rect.range\")\r\n                .data(rangez);\r\n\r\n            range.enter().append(\"rect\")\r\n                .attr(\"class\", function (_d, i2) { return \"range s\" + i2; })\r\n                .attr(\"width\", w0)\r\n                .attr(\"height\", extentY)\r\n                .attr(\"x\", reverse ? x0 : 0)\r\n                .merge(range)\r\n                .transition(range)\r\n                .attr(\"x\", reverse ? x1 : 0)\r\n                .attr(\"width\", w1)\r\n                .attr(\"height\", extentY);\r\n\r\n            // Update the measure rects.\r\n            var measure = wrap.selectAll(\"rect.measure\")\r\n                .data(measurez);\r\n\r\n            measure.enter().append(\"rect\")\r\n                .attr(\"class\", function (_d, i2) { return \"measure s\" + i2; })\r\n                .attr(\"width\", w0)\r\n                .attr(\"height\", extentY / 3)\r\n                .attr(\"x\", reverse ? x0 : 0)\r\n                .attr(\"y\", extentY / 3)\r\n                .merge(measure)\r\n                .transition(measure)\r\n                .attr(\"width\", w1)\r\n                .attr(\"height\", extentY / 3)\r\n                .attr(\"x\", reverse ? x1 : 0)\r\n                .attr(\"y\", extentY / 3);\r\n\r\n            // Update the marker lines.\r\n            var marker = wrap.selectAll(\"line.marker\")\r\n                .data(markerz);\r\n\r\n            marker.enter().append(\"line\")\r\n                .attr(\"class\", \"marker\")\r\n                .attr(\"x1\", x0)\r\n                .attr(\"x2\", x0)\r\n                .attr(\"y1\", extentY / 6)\r\n                .attr(\"y2\", extentY * 5 / 6)\r\n                .merge(marker)\r\n                .transition(marker)\r\n                .attr(\"x1\", x1)\r\n                .attr(\"x2\", x1)\r\n                .attr(\"y1\", extentY / 6)\r\n                .attr(\"y2\", extentY * 5 / 6);\r\n\r\n            var axis = g2.selectAll(\"g.axis\").data([0]);\r\n            axis.enter().append(\"g\").attr(\"class\", \"axis\");\r\n            axis.attr(\"transform\", vertical ? null : \"translate(0,\" + extentY + \")\")\r\n                .call(xAxis.scale(x1));\r\n        });\r\n        d3TimerFlush();\r\n    }\r\n\r\n    // left, right, top, bottom\r\n    bulvar.orient = function (_) {\r\n        if (!arguments.length) return orient;\r\n        orient = _ + \"\";\r\n        reverse = orient === \"right\" || orient === \"bottom\";\r\n        xAxis.orient((vertical = orient === \"top\" || orient === \"bottom\") ? \"left\" : \"bottom\"); // eslint-disable-line\r\n        return bulvar;\r\n    };\r\n\r\n    // ranges (bad, satisfactory, good)\r\n    bulvar.ranges = function (_) {\r\n        if (!arguments.length) return ranges;\r\n        ranges = _;\r\n        return bulvar;\r\n    };\r\n\r\n    // markers (previous, goal)\r\n    bulvar.markers = function (_) {\r\n        if (!arguments.length) return markers;\r\n        markers = _;\r\n        return bulvar;\r\n    };\r\n\r\n    // measures (actual, forecast)\r\n    bulvar.measures = function (_) {\r\n        if (!arguments.length) return measures;\r\n        measures = _;\r\n        return bulvar;\r\n    };\r\n\r\n    bulvar.width = function (_) {\r\n        if (!arguments.length) return width;\r\n        width = +_;\r\n        return bulvar;\r\n    };\r\n\r\n    bulvar.height = function (_) {\r\n        if (!arguments.length) return height;\r\n        height = +_;\r\n        return bulvar;\r\n    };\r\n\r\n    bulvar.tickFormat = function (_) {\r\n        if (!arguments.length) return xAxis.tickFormat();\r\n        xAxis.tickFormat(_);\r\n        return bulvar;\r\n    };\r\n\r\n    return bulvar;\r\n}\r\n\r\nfunction bulvarRanges(d) {\r\n    return d.ranges;\r\n}\r\n\r\nfunction bulvarMarkers(d) {\r\n    return d.markers;\r\n}\r\n\r\nfunction bulvarMeasures(d) {\r\n    return d.measures;\r\n}\r\n\r\nfunction bulvarWidth(x) {\r\n    var x0 = x(0);\r\n    return function (d) {\r\n        return Math.abs(x(d) - x0);\r\n    };\r\n}\r\n","import { HTMLWidget, Utility } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport { bullet as d3Bullet } from \"d3v4-bullet\";\n\nimport \"../src/Bullet.css\";\n\nexport class Bullet extends HTMLWidget {\n\n    private _hiddenColumns = {};\n\n    constructor() {\n        super();\n        Utility.SimpleSelectionMixin.call(this, true);\n    }\n\n    bulletData() {\n        const context = this;\n        this._hiddenColumns = {};\n        const columns = this.columns();\n        return this.data().map(function (row) {\n            return {\n                title: valueOf(row, this.titleColumn()),\n                subtitle: valueOf(row, this.subtitleColumn()),\n                ranges: valueOf(row, this.rangesColumn(), \"range\"),\n                measures: valueOf(row, this.measuresColumn(), \"measure\"),\n                markers: valueOf(row, this.markersColumn(), \"marker\"),\n                origRow: row\n            };\n        }, this);\n\n        function valueOf(row, column, columnType?) {\n            const colIdx = columns.indexOf(column);\n            if (colIdx >= 0) {\n                if (row[colIdx] instanceof Array) {\n                    return row[colIdx];\n                }\n                return [row[colIdx]];\n            }\n            if (columnType) {\n                context._hiddenColumns[columnType] = true;\n            }\n            return [0];\n        }\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        d3Select(domNode.parentNode).style(\"overflow\", \"auto\");\n        this._selection.widgetElement(element);\n    }\n\n    update(_domNode, element) {\n        super.update(_domNode, element);\n        const context = this;\n\n        element.selectAll(\".axis\")\n            .style(\"display\", \"none\")\n            ;\n        element.selectAll(\".range,.measure,.marker\")\n            .style(\"display\", null)\n            ;\n\n        const margin = { left: 2, top: 8, right: 2, bottom: 8 };\n        const width = this.width() - margin.left - margin.right;\n        const height = 40 - margin.top - margin.bottom;\n\n        const svg = element.selectAll(\"svg\").data(this.bulletData());\n        const svgUpdate = svg.enter().append(\"svg\")\n            .attr(\"class\", \"bullet\")\n            .call(this._selection.enter.bind(this._selection))\n            .on(\"click\", function (d) {\n                context.click(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d) {\n                context.dblclick(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n            })\n            .each(function () {\n                const element2 = d3Select(this);\n                const bulletBar = element2.append(\"g\")\n                    .attr(\"class\", (d, i) => \"bulletBar series series-\" + context.cssTag(context.titleColumn()))\n                    ;\n                const bulletTitle = bulletBar.append(\"g\")\n                    .attr(\"class\", \"bulletTitle\")\n                    ;\n                bulletTitle.append(\"text\")\n                    .attr(\"class\", \"title\")\n                    ;\n                bulletTitle.append(\"text\")\n                    .attr(\"class\", \"subtitle\")\n                    .attr(\"dy\", \"1em\")\n                    ;\n            })\n            .merge(svg)\n            ;\n\n        //  Title ---\n        const title = svgUpdate.select(\".bulletTitle\")\n            .style(\"text-anchor\", \"end\")\n            .attr(\"transform\", \"translate(-6,\" + height / 2 + \")\")\n            ;\n        title.select(\".title\")\n            .text(function (d) { return d.title; })\n            ;\n        title.select(\".subtitle\")\n            .text(function (d) { return d.subtitle; })\n            ;\n\n        let titleWidth = 0;\n        title.each(function () {\n            const bbox = this.getBBox();\n            if (bbox.width > titleWidth) {\n                titleWidth = bbox.width;\n            }\n        });\n\n        //  Bullet Chart ---\n        const chart = d3Bullet()\n            .width(width - titleWidth - 6)\n            .height(height)\n            ;\n        svgUpdate\n            .attr(\"width\", width)\n            .attr(\"height\", height + margin.top + margin.bottom)\n            .style(\"margin-left\", `${margin.left}px`)\n            ;\n        svgUpdate.select(\".bulletBar\")\n            .attr(\"transform\", \"translate(\" + (titleWidth + 6) + \",\" + margin.top + \")\")\n            .call(chart)\n            ;\n\n        svg.exit().remove();\n\n        if (Object.keys(this._hiddenColumns).length > 0) {\n            element.selectAll(`.${Object.keys(this._hiddenColumns).join(\",.\")}`)\n                .style(\"display\", \"none\")\n                ;\n        }\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n\n    //  Events ---\n    click(row, column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n    }\n\n    dblclick(row, column, selected) {\n        // console.log(\"Double click:  \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\n    }\n\n    //  SimpleSelectionMixin\n    _selection;\n}\nBullet.prototype._class += \" chart_Bullet\";\n\nexport interface Bullet {\n    titleColumn(): string;\n    titleColumn(_: string): this;\n    subtitleColumn(): string;\n    subtitleColumn(_: string): this;\n    rangesColumn(): string;\n    rangesColumn(_: string): this;\n    measuresColumn(): string;\n    measuresColumn(_: string): this;\n    markersColumn(): string;\n    markersColumn(_: string): this;\n}\n\nBullet.prototype.publish(\"titleColumn\", null, \"set\", \"Title Column\", function () { return this.columns(); }, { optional: true });\nBullet.prototype.publish(\"subtitleColumn\", null, \"set\", \"Subtitle Column\", function () { return this.columns(); }, { optional: true });\nBullet.prototype.publish(\"rangesColumn\", null, \"set\", \"Ranges Column\", function () { return this.columns(); }, { optional: true });\nBullet.prototype.publish(\"measuresColumn\", null, \"set\", \"Measures Column\", function () { return this.columns(); }, { optional: true });\nBullet.prototype.publish(\"markersColumn\", null, \"set\", \"Markers Column\", function () { return this.columns(); }, { optional: true });\n\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n  return a - b;\n}\n","export default function(ring) {\n  var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n  while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n  return area;\n}\n","export default function(x) {\n  return function() {\n    return x;\n  };\n}\n","export default function(ring, hole) {\n  var i = -1, n = hole.length, c;\n  while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n  return 0;\n}\n\nfunction ringContains(ring, point) {\n  var x = point[0], y = point[1], contains = -1;\n  for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n    var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n    if (segmentContains(pi, pj, point)) return 0;\n    if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n  }\n  return contains;\n}\n\nfunction segmentContains(a, b, c) {\n  var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n  return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n  return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n  [],\n  [[[1.0, 1.5], [0.5, 1.0]]],\n  [[[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [0.5, 1.0]]],\n  [[[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n  [[[1.0, 0.5], [1.0, 1.5]]],\n  [[[1.0, 0.5], [0.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 0.5]]],\n  [[[1.0, 1.5], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n  [[[1.5, 1.0], [1.0, 0.5]]],\n  [[[0.5, 1.0], [1.5, 1.0]]],\n  [[[1.0, 1.5], [1.5, 1.0]]],\n  [[[0.5, 1.0], [1.0, 1.5]]],\n  []\n];\n\nexport default function() {\n  var dx = 1,\n      dy = 1,\n      threshold = thresholdSturges,\n      smooth = smoothLinear;\n\n  function contours(values) {\n    var tz = threshold(values);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var domain = extent(values), start = domain[0], stop = domain[1];\n      tz = tickStep(start, stop, tz);\n      tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n    } else {\n      tz = tz.slice().sort(ascending);\n    }\n\n    return tz.map(function(value) {\n      return contour(values, value);\n    });\n  }\n\n  // Accumulate, smooth contour rings, assign holes to exterior rings.\n  // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n  function contour(values, value) {\n    var polygons = [],\n        holes = [];\n\n    isorings(values, value, function(ring) {\n      smooth(ring, values, value);\n      if (area(ring) > 0) polygons.push([ring]);\n      else holes.push(ring);\n    });\n\n    holes.forEach(function(hole) {\n      for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n        if (contains((polygon = polygons[i])[0], hole) !== -1) {\n          polygon.push(hole);\n          return;\n        }\n      }\n    });\n\n    return {\n      type: \"MultiPolygon\",\n      value: value,\n      coordinates: polygons\n    };\n  }\n\n  // Marching squares with isolines stitched into rings.\n  // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n  function isorings(values, value, callback) {\n    var fragmentByStart = new Array,\n        fragmentByEnd = new Array,\n        x, y, t0, t1, t2, t3;\n\n    // Special case for the first row (y = -1, t2 = t3 = 0).\n    x = y = -1;\n    t1 = values[0] >= value;\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = values[x + 1] >= value;\n      cases[t0 | t1 << 1].forEach(stitch);\n    }\n    cases[t1 << 0].forEach(stitch);\n\n    // General case for the intermediate rows.\n    while (++y < dy - 1) {\n      x = -1;\n      t1 = values[y * dx + dx] >= value;\n      t2 = values[y * dx] >= value;\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n        t3 = t2, t2 = values[y * dx + x + 1] >= value;\n        cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n      }\n      cases[t1 | t2 << 3].forEach(stitch);\n    }\n\n    // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n    x = -1;\n    t2 = values[y * dx] >= value;\n    cases[t2 << 2].forEach(stitch);\n    while (++x < dx - 1) {\n      t3 = t2, t2 = values[y * dx + x + 1] >= value;\n      cases[t2 << 2 | t3 << 3].forEach(stitch);\n    }\n    cases[t2 << 3].forEach(stitch);\n\n    function stitch(line) {\n      var start = [line[0][0] + x, line[0][1] + y],\n          end = [line[1][0] + x, line[1][1] + y],\n          startIndex = index(start),\n          endIndex = index(end),\n          f, g;\n      if (f = fragmentByEnd[startIndex]) {\n        if (g = fragmentByStart[endIndex]) {\n          delete fragmentByEnd[f.end];\n          delete fragmentByStart[g.start];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n          }\n        } else {\n          delete fragmentByEnd[f.end];\n          f.ring.push(end);\n          fragmentByEnd[f.end = endIndex] = f;\n        }\n      } else if (f = fragmentByStart[endIndex]) {\n        if (g = fragmentByEnd[startIndex]) {\n          delete fragmentByStart[f.start];\n          delete fragmentByEnd[g.end];\n          if (f === g) {\n            f.ring.push(end);\n            callback(f.ring);\n          } else {\n            fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n          }\n        } else {\n          delete fragmentByStart[f.start];\n          f.ring.unshift(start);\n          fragmentByStart[f.start = startIndex] = f;\n        }\n      } else {\n        fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n      }\n    }\n  }\n\n  function index(point) {\n    return point[0] * 2 + point[1] * (dx + 1) * 4;\n  }\n\n  function smoothLinear(ring, values, value) {\n    ring.forEach(function(point) {\n      var x = point[0],\n          y = point[1],\n          xt = x | 0,\n          yt = y | 0,\n          v0,\n          v1 = values[yt * dx + xt];\n      if (x > 0 && x < dx && xt === x) {\n        v0 = values[yt * dx + xt - 1];\n        point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n      }\n      if (y > 0 && y < dy && yt === y) {\n        v0 = values[(yt - 1) * dx + xt];\n        point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, contours;\n  };\n\n  contours.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n  };\n\n  contours.smooth = function(_) {\n    return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n  };\n\n  return contours;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var j = 0; j < m; ++j) {\n    for (var i = 0, sr = 0; i < n + r; ++i) {\n      if (i < n) {\n        sr += source.data[i + j * n];\n      }\n      if (i >= r) {\n        if (i >= w) {\n          sr -= source.data[i - w + j * n];\n        }\n        target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n      }\n    }\n  }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n  var n = source.width,\n      m = source.height,\n      w = (r << 1) + 1;\n  for (var i = 0; i < n; ++i) {\n    for (var j = 0, sr = 0; j < m + r; ++j) {\n      if (j < m) {\n        sr += source.data[i + j * n];\n      }\n      if (j >= r) {\n        if (j >= w) {\n          sr -= source.data[i + (j - w) * n];\n        }\n        target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n      }\n    }\n  }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n  return d[0];\n}\n\nfunction defaultY(d) {\n  return d[1];\n}\n\nfunction defaultWeight() {\n  return 1;\n}\n\nexport default function() {\n  var x = defaultX,\n      y = defaultY,\n      weight = defaultWeight,\n      dx = 960,\n      dy = 500,\n      r = 20, // blur radius\n      k = 2, // log2(grid cell size)\n      o = r * 3, // grid offset, to pad for blur\n      n = (dx + o * 2) >> k, // grid width\n      m = (dy + o * 2) >> k, // grid height\n      threshold = constant(20);\n\n  function density(data) {\n    var values0 = new Float32Array(n * m),\n        values1 = new Float32Array(n * m);\n\n    data.forEach(function(d, i, data) {\n      var xi = (+x(d, i, data) + o) >> k,\n          yi = (+y(d, i, data) + o) >> k,\n          wi = +weight(d, i, data);\n      if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        values0[xi + yi * n] += wi;\n      }\n    });\n\n    // TODO Optimize.\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n    blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n    blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n    var tz = threshold(values0);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      var stop = max(values0);\n      tz = tickStep(0, stop, tz);\n      tz = range(0, Math.floor(stop / tz) * tz, tz);\n      tz.shift();\n    }\n\n    return contours()\n        .thresholds(tz)\n        .size([n, m])\n      (values0)\n        .map(transform);\n  }\n\n  function transform(geometry) {\n    geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n    geometry.coordinates.forEach(transformPolygon);\n    return geometry;\n  }\n\n  function transformPolygon(coordinates) {\n    coordinates.forEach(transformRing);\n  }\n\n  function transformRing(coordinates) {\n    coordinates.forEach(transformPoint);\n  }\n\n  // TODO Optimize.\n  function transformPoint(coordinates) {\n    coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n    coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n  }\n\n  function resize() {\n    o = r * 3;\n    n = (dx + o * 2) >> k;\n    m = (dy + o * 2) >> k;\n    return density;\n  }\n\n  density.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n  };\n\n  density.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n  };\n\n  density.weight = function(_) {\n    return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n  };\n\n  density.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n    if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n    return dx = _0, dy = _1, resize();\n  };\n\n  density.cellSize = function(_) {\n    if (!arguments.length) return 1 << k;\n    if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n    return k = Math.floor(Math.log(_) / Math.LN2), resize();\n  };\n\n  density.thresholds = function(_) {\n    return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n  };\n\n  density.bandwidth = function(_) {\n    if (!arguments.length) return Math.sqrt(r * (r + 1));\n    if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n    return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n  };\n\n  return density;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n  return new Adder;\n}\n\nfunction Adder() {\n  this.reset();\n}\n\nAdder.prototype = {\n  constructor: Adder,\n  reset: function() {\n    this.s = // rounded value\n    this.t = 0; // exact error\n  },\n  add: function(y) {\n    add(temp, y, this.t);\n    add(this, temp.s, this.s);\n    if (this.s) this.t += temp.t;\n    else this.s = temp.t;\n  },\n  valueOf: function() {\n    return this.s;\n  }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n  var x = adder.s = a + b,\n      bv = x - a,\n      av = x - bv;\n  adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n  return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n  return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n    streamGeometryType[geometry.type](geometry, stream);\n  }\n}\n\nvar streamObjectType = {\n  Feature: function(object, stream) {\n    streamGeometry(object.geometry, stream);\n  },\n  FeatureCollection: function(object, stream) {\n    var features = object.features, i = -1, n = features.length;\n    while (++i < n) streamGeometry(features[i].geometry, stream);\n  }\n};\n\nvar streamGeometryType = {\n  Sphere: function(object, stream) {\n    stream.sphere();\n  },\n  Point: function(object, stream) {\n    object = object.coordinates;\n    stream.point(object[0], object[1], object[2]);\n  },\n  MultiPoint: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n  },\n  LineString: function(object, stream) {\n    streamLine(object.coordinates, stream, 0);\n  },\n  MultiLineString: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamLine(coordinates[i], stream, 0);\n  },\n  Polygon: function(object, stream) {\n    streamPolygon(object.coordinates, stream);\n  },\n  MultiPolygon: function(object, stream) {\n    var coordinates = object.coordinates, i = -1, n = coordinates.length;\n    while (++i < n) streamPolygon(coordinates[i], stream);\n  },\n  GeometryCollection: function(object, stream) {\n    var geometries = object.geometries, i = -1, n = geometries.length;\n    while (++i < n) streamGeometry(geometries[i], stream);\n  }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n  var i = -1, n = coordinates.length - closed, coordinate;\n  stream.lineStart();\n  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n  stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n  var i = -1, n = coordinates.length;\n  stream.polygonStart();\n  while (++i < n) streamLine(coordinates[i], stream, 1);\n  stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n  if (object && streamObjectType.hasOwnProperty(object.type)) {\n    streamObjectType[object.type](object, stream);\n  } else {\n    streamGeometry(object, stream);\n  }\n}\n","export default function(x) {\n  return x;\n}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n    areaRingSum = adder(),\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar areaStream = {\n  point: noop,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: function() {\n    areaStream.lineStart = areaRingStart;\n    areaStream.lineEnd = areaRingEnd;\n  },\n  polygonEnd: function() {\n    areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n    areaSum.add(abs(areaRingSum));\n    areaRingSum.reset();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum.reset();\n    return area;\n  }\n};\n\nfunction areaRingStart() {\n  areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n  areaStream.point = areaPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n  areaRingSum.add(y0 * x - x0 * y);\n  x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n  areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n    y0 = x0,\n    x1 = -x0,\n    y1 = x1;\n\nvar boundsStream = {\n  point: boundsPoint,\n  lineStart: noop,\n  lineEnd: noop,\n  polygonStart: noop,\n  polygonEnd: noop,\n  result: function() {\n    var bounds = [[x0, y0], [x1, y1]];\n    x1 = y1 = -(y0 = x0 = Infinity);\n    return bounds;\n  }\n};\n\nfunction boundsPoint(x, y) {\n  if (x < x0) x0 = x;\n  if (x > x1) x1 = x;\n  if (y < y0) y0 = y;\n  if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n    Y0 = 0,\n    Z0 = 0,\n    X1 = 0,\n    Y1 = 0,\n    Z1 = 0,\n    X2 = 0,\n    Y2 = 0,\n    Z2 = 0,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar centroidStream = {\n  point: centroidPoint,\n  lineStart: centroidLineStart,\n  lineEnd: centroidLineEnd,\n  polygonStart: function() {\n    centroidStream.lineStart = centroidRingStart;\n    centroidStream.lineEnd = centroidRingEnd;\n  },\n  polygonEnd: function() {\n    centroidStream.point = centroidPoint;\n    centroidStream.lineStart = centroidLineStart;\n    centroidStream.lineEnd = centroidLineEnd;\n  },\n  result: function() {\n    var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n        : Z1 ? [X1 / Z1, Y1 / Z1]\n        : Z0 ? [X0 / Z0, Y0 / Z0]\n        : [NaN, NaN];\n    X0 = Y0 = Z0 =\n    X1 = Y1 = Z1 =\n    X2 = Y2 = Z2 = 0;\n    return centroid;\n  }\n};\n\nfunction centroidPoint(x, y) {\n  X0 += x;\n  Y0 += y;\n  ++Z0;\n}\n\nfunction centroidLineStart() {\n  centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n  centroidStream.point = centroidPointLine;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n  var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n  centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n  centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n  centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n  centroidStream.point = centroidPointRing;\n  centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n  var dx = x - x0,\n      dy = y - y0,\n      z = sqrt(dx * dx + dy * dy);\n\n  X1 += z * (x0 + x) / 2;\n  Y1 += z * (y0 + y) / 2;\n  Z1 += z;\n\n  z = y0 * x - x0 * y;\n  X2 += z * (x0 + x);\n  Y2 += z * (y0 + y);\n  Z2 += z * 3;\n  centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n  this._context = context;\n}\n\nPathContext.prototype = {\n  _radius: 4.5,\n  pointRadius: function(_) {\n    return this._radius = _, this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._context.closePath();\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._context.moveTo(x, y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._context.lineTo(x, y);\n        break;\n      }\n      default: {\n        this._context.moveTo(x + this._radius, y);\n        this._context.arc(x, y, this._radius, 0, tau);\n        break;\n      }\n    }\n  },\n  result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n    lengthRing,\n    x00,\n    y00,\n    x0,\n    y0;\n\nvar lengthStream = {\n  point: noop,\n  lineStart: function() {\n    lengthStream.point = lengthPointFirst;\n  },\n  lineEnd: function() {\n    if (lengthRing) lengthPoint(x00, y00);\n    lengthStream.point = noop;\n  },\n  polygonStart: function() {\n    lengthRing = true;\n  },\n  polygonEnd: function() {\n    lengthRing = null;\n  },\n  result: function() {\n    var length = +lengthSum;\n    lengthSum.reset();\n    return length;\n  }\n};\n\nfunction lengthPointFirst(x, y) {\n  lengthStream.point = lengthPoint;\n  x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n  x0 -= x, y0 -= y;\n  lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n  x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n  this._string = [];\n}\n\nPathString.prototype = {\n  _radius: 4.5,\n  _circle: circle(4.5),\n  pointRadius: function(_) {\n    if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n    return this;\n  },\n  polygonStart: function() {\n    this._line = 0;\n  },\n  polygonEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line === 0) this._string.push(\"Z\");\n    this._point = NaN;\n  },\n  point: function(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._string.push(\"M\", x, \",\", y);\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._string.push(\"L\", x, \",\", y);\n        break;\n      }\n      default: {\n        if (this._circle == null) this._circle = circle(this._radius);\n        this._string.push(\"M\", x, \",\", y, this._circle);\n        break;\n      }\n    }\n  },\n  result: function() {\n    if (this._string.length) {\n      var result = this._string.join(\"\");\n      this._string = [];\n      return result;\n    } else {\n      return null;\n    }\n  }\n};\n\nfunction circle(radius) {\n  return \"m0,\" + radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n      + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n      + \"z\";\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n  var pointRadius = 4.5,\n      projectionStream,\n      contextStream;\n\n  function path(object) {\n    if (object) {\n      if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n      stream(object, projectionStream(contextStream));\n    }\n    return contextStream.result();\n  }\n\n  path.area = function(object) {\n    stream(object, projectionStream(pathArea));\n    return pathArea.result();\n  };\n\n  path.measure = function(object) {\n    stream(object, projectionStream(pathMeasure));\n    return pathMeasure.result();\n  };\n\n  path.bounds = function(object) {\n    stream(object, projectionStream(pathBounds));\n    return pathBounds.result();\n  };\n\n  path.centroid = function(object) {\n    stream(object, projectionStream(pathCentroid));\n    return pathCentroid.result();\n  };\n\n  path.projection = function(_) {\n    return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n    if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n    return path;\n  };\n\n  path.pointRadius = function(_) {\n    if (!arguments.length) return pointRadius;\n    pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n    return path;\n  };\n\n  return path.projection(projection).context(context);\n}\n","import { I1DChart } from \"@hpcc-js/api\";\nimport { InputField } from \"@hpcc-js/common\";\nimport { contourDensity as d3ContourDensity } from \"d3-contour\";\nimport { geoPath } from \"d3-geo\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nexport class Contour extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"x\",\n        type: \"any\"\n    }, {\n        id: \"y\",\n        type: \"number\"\n    }];\n\n    protected _dataMinWeight;\n    protected _dataMaxWeight;\n    constructor() {\n        super();\n        this\n            .xAxisGuideLines_default(false)\n            .yAxisGuideLines_default(false)\n            .xAxisType_default(\"linear\")\n            ;\n    }\n\n    xPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n    }\n\n    yPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element, duration);\n\n        this._palette = this._palette.switch(this.paletteID());\n\n        const data = this.flattenData(this.layerColumns(host), this.layerData(host));\n        const contourData = d3ContourDensity()\n            .x(d => this.xPos(host, d))\n            .y(d => this.yPos(host, d))\n            .size([this.width(), this.height()])\n            .bandwidth(this.contourBandwidth())(data)\n            ;\n        const _vals = contourData.map(d => d.value);\n        const minValue = Math.min.apply(this, _vals);\n        const maxValue = Math.max.apply(this, _vals);\n        this._dataMinWeight = minValue;\n        this._dataMaxWeight = maxValue;\n        const lines = element.selectAll(\"path\").data(contourData);\n        lines.enter().append(\"path\")\n            .merge(lines)\n            .attr(\"d\", geoPath())\n            .attr(\"fill\", d => this.showContourFill() ? this._palette(d.value, minValue, maxValue) : \"none\")\n            .attr(\"stroke\", this.contourStrokeColor())\n            .attr(\"stroke-linejoin\", \"round\")\n            .attr(\"stroke-width\", this.contourStrokeWidth())\n            ;\n        lines.exit().remove();\n    }\n\n    exit(_domNode, _element) {\n        super.exit(_domNode, _element);\n    }\n}\nContour.prototype._class += \" chart_Contour\";\nContour.prototype.implements(I1DChart.prototype);\n\nexport interface Contour {\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    showContourFill(): boolean;\n    showContourFill(_: boolean): this;\n    showContour(): boolean;\n    showContour(_: boolean): this;\n    contourBandwidth(): number;\n    contourBandwidth(_: number): this;\n    contourStrokeColor(): string;\n    contourStrokeColor(_: string): this;\n    contourStrokeWidth(): number;\n    contourStrokeWidth(_: number): this;\n}\nContour.prototype.publish(\"paletteID\", \"YlGnBu\", \"string\", \"Color palette for this widget\");\nContour.prototype.publish(\"useClonedPalette\", true, \"boolean\", \"Enable or disable using a cloned palette\");\nContour.prototype.publish(\"showContourFill\", true, \"boolean\", \"Show/hide the contour background colors\");\nContour.prototype.publish(\"showContour\", true, \"boolean\", \"Show/hide the contour border lines\");\nContour.prototype.publish(\"contourBandwidth\", 40, \"number\", \"Controls the sensitivity of the contour grouping algorithm\");\nContour.prototype.publish(\"contourStrokeColor\", \"#2C3A47\", \"html-color\", \"Color of the contour border lines\");\nContour.prototype.publish(\"contourStrokeWidth\", 1, \"number\", \"Width of the contour border lines\");\n","import { Bar } from \"./Bar.ts\";\n\nexport class Gantt extends Bar {\n    constructor() {\n        super();\n\n        this\n            .orientation_default(\"vertical\")\n            .xAxisType_default(\"ordinal\")\n            .yAxisType_default(\"time\")\n            ;\n    }\n}\nGantt.prototype._class += \" chart_Gantt\";\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {epsilon, pi, halfPi, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n  return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n  return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n  return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n  return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n  return d && d.padAngle; // Note: optional!\n}\n\nfunction asin(x) {\n  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n  var x10 = x1 - x0, y10 = y1 - y0,\n      x32 = x3 - x2, y32 = y3 - y2,\n      t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n  return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n  var x01 = x0 - x1,\n      y01 = y0 - y1,\n      lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),\n      ox = lo * y01,\n      oy = -lo * x01,\n      x11 = x0 + ox,\n      y11 = y0 + oy,\n      x10 = x1 + ox,\n      y10 = y1 + oy,\n      x00 = (x11 + x10) / 2,\n      y00 = (y11 + y10) / 2,\n      dx = x10 - x11,\n      dy = y10 - y11,\n      d2 = dx * dx + dy * dy,\n      r = r1 - rc,\n      D = x11 * y10 - x10 * y11,\n      d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),\n      cx0 = (D * dy - dx * d) / d2,\n      cy0 = (-D * dx - dy * d) / d2,\n      cx1 = (D * dy + dx * d) / d2,\n      cy1 = (-D * dx + dy * d) / d2,\n      dx0 = cx0 - x00,\n      dy0 = cy0 - y00,\n      dx1 = cx1 - x00,\n      dy1 = cy1 - y00;\n\n  // Pick the closer of the two intersection points.\n  // TODO Is there a faster way to determine which intersection to use?\n  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n  return {\n    cx: cx0,\n    cy: cy0,\n    x01: -ox,\n    y01: -oy,\n    x11: cx0 * (r1 / r - 1),\n    y11: cy0 * (r1 / r - 1)\n  };\n}\n\nexport default function() {\n  var innerRadius = arcInnerRadius,\n      outerRadius = arcOuterRadius,\n      cornerRadius = constant(0),\n      padRadius = null,\n      startAngle = arcStartAngle,\n      endAngle = arcEndAngle,\n      padAngle = arcPadAngle,\n      context = null;\n\n  function arc() {\n    var buffer,\n        r,\n        r0 = +innerRadius.apply(this, arguments),\n        r1 = +outerRadius.apply(this, arguments),\n        a0 = startAngle.apply(this, arguments) - halfPi,\n        a1 = endAngle.apply(this, arguments) - halfPi,\n        da = Math.abs(a1 - a0),\n        cw = a1 > a0;\n\n    if (!context) context = buffer = path();\n\n    // Ensure that the outer radius is always larger than the inner radius.\n    if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n    // Is it a point?\n    if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n    // Or is it a circle or annulus?\n    else if (da > tau - epsilon) {\n      context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));\n      context.arc(0, 0, r1, a0, a1, !cw);\n      if (r0 > epsilon) {\n        context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));\n        context.arc(0, 0, r0, a1, a0, cw);\n      }\n    }\n\n    // Or is it a circular or annular sector?\n    else {\n      var a01 = a0,\n          a11 = a1,\n          a00 = a0,\n          a10 = a1,\n          da0 = da,\n          da1 = da,\n          ap = padAngle.apply(this, arguments) / 2,\n          rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),\n          rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n          rc0 = rc,\n          rc1 = rc,\n          t0,\n          t1;\n\n      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n      if (rp > epsilon) {\n        var p0 = asin(rp / r0 * Math.sin(ap)),\n            p1 = asin(rp / r1 * Math.sin(ap));\n        if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n        else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n        if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n        else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n      }\n\n      var x01 = r1 * Math.cos(a01),\n          y01 = r1 * Math.sin(a01),\n          x10 = r0 * Math.cos(a10),\n          y10 = r0 * Math.sin(a10);\n\n      // Apply rounded corners?\n      if (rc > epsilon) {\n        var x11 = r1 * Math.cos(a11),\n            y11 = r1 * Math.sin(a11),\n            x00 = r0 * Math.cos(a00),\n            y00 = r0 * Math.sin(a00);\n\n        // Restrict the corner radius according to the sector angle.\n        if (da < pi) {\n          var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n              ax = x01 - oc[0],\n              ay = y01 - oc[1],\n              bx = x11 - oc[0],\n              by = y11 - oc[1],\n              kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),\n              lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n        }\n      }\n\n      // Is the sector collapsed to a line?\n      if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n      // Does the sector’s outer ring have rounded corners?\n      else if (rc1 > epsilon) {\n        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n          context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the outer ring just a circular arc?\n      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n      // Is there no inner ring, and it’s a circular sector?\n      // Or perhaps it’s an annular sector collapsed due to padding?\n      if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n      // Does the sector’s inner ring (or point) have rounded corners?\n      else if (rc0 > epsilon) {\n        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n        // Have the corners merged?\n        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n        // Otherwise, draw the two corners and the ring.\n        else {\n          context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n          context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n          context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n        }\n      }\n\n      // Or is the inner ring just a circular arc?\n      else context.arc(0, 0, r0, a10, a00, cw);\n    }\n\n    context.closePath();\n\n    if (buffer) return context = null, buffer + \"\" || null;\n  }\n\n  arc.centroid = function() {\n    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n    return [Math.cos(a) * r, Math.sin(a) * r];\n  };\n\n  arc.innerRadius = function(_) {\n    return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n  };\n\n  arc.outerRadius = function(_) {\n    return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n  };\n\n  arc.cornerRadius = function(_) {\n    return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n  };\n\n  arc.padRadius = function(_) {\n    return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n  };\n\n  arc.startAngle = function(_) {\n    return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n  };\n\n  arc.endAngle = function(_) {\n    return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n  };\n\n  arc.padAngle = function(_) {\n    return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n  };\n\n  arc.context = function(_) {\n    return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n  };\n\n  return arc;\n}\n","function Linear(context) {\n  this._context = context;\n}\n\nLinear.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; // proceed\n      default: this._context.lineTo(x, y); break;\n    }\n  }\n};\n\nexport default function(context) {\n  return new Linear(context);\n}\n","export function x(p) {\n  return p[0];\n}\n\nexport function y(p) {\n  return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n  var x = pointX,\n      y = pointY,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null;\n\n  function line(data) {\n    var i,\n        n = data.length,\n        d,\n        defined0 = false,\n        buffer;\n\n    if (context == null) output = curve(buffer = path());\n\n    for (i = 0; i <= n; ++i) {\n      if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n        if (defined0 = !defined0) output.lineStart();\n        else output.lineEnd();\n      }\n      if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n    }\n\n    if (buffer) return output = null, buffer + \"\" || null;\n  }\n\n  line.x = function(_) {\n    return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n  };\n\n  line.y = function(_) {\n    return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n  };\n\n  line.defined = function(_) {\n    return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n  };\n\n  line.curve = function(_) {\n    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n  };\n\n  line.context = function(_) {\n    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n  };\n\n  return line;\n}\n","export default function() {}\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    (2 * that._x0 + that._x1) / 3,\n    (2 * that._y0 + that._y1) / 3,\n    (that._x0 + 2 * that._x1) / 3,\n    (that._y0 + 2 * that._y1) / 3,\n    (that._x0 + 4 * that._x1 + x) / 6,\n    (that._y0 + 4 * that._y1 + y) / 6\n  );\n}\n\nexport function Basis(context) {\n  this._context = context;\n}\n\nBasis.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 3: point(this, this._x1, this._y1); // proceed\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n  }\n};\n\nexport default function(context) {\n  return new Basis(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n  this._basis = new Basis(context);\n  this._beta = beta;\n}\n\nBundle.prototype = {\n  lineStart: function() {\n    this._x = [];\n    this._y = [];\n    this._basis.lineStart();\n  },\n  lineEnd: function() {\n    var x = this._x,\n        y = this._y,\n        j = x.length - 1;\n\n    if (j > 0) {\n      var x0 = x[0],\n          y0 = y[0],\n          dx = x[j] - x0,\n          dy = y[j] - y0,\n          i = -1,\n          t;\n\n      while (++i <= j) {\n        t = i / j;\n        this._basis.point(\n          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n        );\n      }\n    }\n\n    this._x = this._y = null;\n    this._basis.lineEnd();\n  },\n  point: function(x, y) {\n    this._x.push(+x);\n    this._y.push(+y);\n  }\n};\n\nexport default (function custom(beta) {\n\n  function bundle(context) {\n    return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n  }\n\n  bundle.beta = function(beta) {\n    return custom(+beta);\n  };\n\n  return bundle;\n})(0.85);\n","export function point(that, x, y) {\n  that._context.bezierCurveTo(\n    that._x1 + that._k * (that._x2 - that._x0),\n    that._y1 + that._k * (that._y2 - that._y0),\n    that._x2 + that._k * (that._x1 - x),\n    that._y2 + that._k * (that._y1 - y),\n    that._x2,\n    that._y2\n  );\n}\n\nexport function Cardinal(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: point(this, this._x1, this._y1); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new Cardinal(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalClosed(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n  this._context = context;\n  this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(tension) {\n\n  function cardinal(context) {\n    return new CardinalOpen(context, tension);\n  }\n\n  cardinal.tension = function(tension) {\n    return custom(+tension);\n  };\n\n  return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n  var x1 = that._x1,\n      y1 = that._y1,\n      x2 = that._x2,\n      y2 = that._y2;\n\n  if (that._l01_a > epsilon) {\n    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n        n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n  }\n\n  if (that._l23_a > epsilon) {\n    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n        m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n  }\n\n  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x2, this._y2); break;\n      case 3: this.point(this._x2, this._y2); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n  areaStart: noop,\n  areaEnd: noop,\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 1: {\n        this._context.moveTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 2: {\n        this._context.lineTo(this._x3, this._y3);\n        this._context.closePath();\n        break;\n      }\n      case 3: {\n        this.point(this._x3, this._y3);\n        this.point(this._x4, this._y4);\n        this.point(this._x5, this._y5);\n        break;\n      }\n    }\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n  this._context = context;\n  this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 = this._x2 =\n    this._y0 = this._y1 = this._y2 = NaN;\n    this._l01_a = this._l12_a = this._l23_a =\n    this._l01_2a = this._l12_2a = this._l23_2a =\n    this._point = 0;\n  },\n  lineEnd: function() {\n    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    x = +x, y = +y;\n\n    if (this._point) {\n      var x23 = this._x2 - x,\n          y23 = this._y2 - y;\n      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n    }\n\n    switch (this._point) {\n      case 0: this._point = 1; break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n      case 3: this._point = 4; // proceed\n      default: point(this, x, y); break;\n    }\n\n    this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n  }\n};\n\nexport default (function custom(alpha) {\n\n  function catmullRom(context) {\n    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n  }\n\n  catmullRom.alpha = function(alpha) {\n    return custom(+alpha);\n  };\n\n  return catmullRom;\n})(0.5);\n","function sign(x) {\n  return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n  var h0 = that._x1 - that._x0,\n      h1 = x2 - that._x1,\n      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n      p = (s0 * h1 + s1 * h0) / (h0 + h1);\n  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n  var h = that._x1 - that._x0;\n  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n  var x0 = that._x0,\n      y0 = that._y0,\n      x1 = that._x1,\n      y1 = that._y1,\n      dx = (x1 - x0) / 3;\n  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n  this._context = context;\n}\n\nMonotoneX.prototype = {\n  areaStart: function() {\n    this._line = 0;\n  },\n  areaEnd: function() {\n    this._line = NaN;\n  },\n  lineStart: function() {\n    this._x0 = this._x1 =\n    this._y0 = this._y1 =\n    this._t0 = NaN;\n    this._point = 0;\n  },\n  lineEnd: function() {\n    switch (this._point) {\n      case 2: this._context.lineTo(this._x1, this._y1); break;\n      case 3: point(this, this._t0, slope2(this, this._t0)); break;\n    }\n    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n    this._line = 1 - this._line;\n  },\n  point: function(x, y) {\n    var t1 = NaN;\n\n    x = +x, y = +y;\n    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n    switch (this._point) {\n      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n      case 1: this._point = 2; break;\n      case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n      default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n    }\n\n    this._x0 = this._x1, this._x1 = x;\n    this._y0 = this._y1, this._y1 = y;\n    this._t0 = t1;\n  }\n}\n\nfunction MonotoneY(context) {\n  this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n  MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n  this._context = context;\n}\n\nReflectContext.prototype = {\n  moveTo: function(x, y) { this._context.moveTo(y, x); },\n  closePath: function() { this._context.closePath(); },\n  lineTo: function(x, y) { this._context.lineTo(y, x); },\n  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n  return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n  return new MonotoneY(context);\n}\n","import { event, select } from 'd3-selection';\nimport { drag } from 'd3-drag';\nimport { arc, curveCatmullRom, curveLinear, line } from 'd3-shape';\nimport { dispatch } from 'd3-dispatch';\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar classCallCheck = function (instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar get = function get(object, property, receiver) {\n  if (object === null) object = Function.prototype;\n  var desc = Object.getOwnPropertyDescriptor(object, property);\n\n  if (desc === undefined) {\n    var parent = Object.getPrototypeOf(object);\n\n    if (parent === null) {\n      return undefined;\n    } else {\n      return get(parent, property, receiver);\n    }\n  } else if (\"value\" in desc) {\n    return desc.value;\n  } else {\n    var getter = desc.get;\n\n    if (getter === undefined) {\n      return undefined;\n    }\n\n    return getter.call(receiver);\n  }\n};\n\nvar inherits = function (subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n};\n\n\n\n\n\n\n\n\n\n\n\nvar possibleConstructorReturn = function (self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar toConsumableArray = function (arr) {\n  if (Array.isArray(arr)) {\n    for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];\n\n    return arr2;\n  } else {\n    return Array.from(arr);\n  }\n};\n\nvar Annotation = function () {\n  function Annotation(_ref) {\n    var _ref$x = _ref.x,\n        x = _ref$x === undefined ? 0 : _ref$x,\n        _ref$y = _ref.y,\n        y = _ref$y === undefined ? 0 : _ref$y,\n        nx = _ref.nx,\n        ny = _ref.ny,\n        _ref$dy = _ref.dy,\n        dy = _ref$dy === undefined ? 0 : _ref$dy,\n        _ref$dx = _ref.dx,\n        dx = _ref$dx === undefined ? 0 : _ref$dx,\n        _ref$color = _ref.color,\n        color = _ref$color === undefined ? \"grey\" : _ref$color,\n        data = _ref.data,\n        type = _ref.type,\n        subject = _ref.subject,\n        connector = _ref.connector,\n        note = _ref.note,\n        disable = _ref.disable,\n        id = _ref.id,\n        className = _ref.className;\n    classCallCheck(this, Annotation);\n\n    this._dx = nx !== undefined ? nx - x : dx;\n    this._dy = ny !== undefined ? ny - y : dy;\n    this._x = x;\n    this._y = y;\n    this._color = color;\n    this.id = id;\n    this._className = className || \"\";\n\n    this._type = type || \"\";\n    this.data = data;\n\n    this.note = note || {};\n    this.connector = connector || {};\n    this.subject = subject || {};\n\n    this.disable = disable || [];\n  }\n\n  createClass(Annotation, [{\n    key: \"updatePosition\",\n    value: function updatePosition() {\n      if (this.type.setPosition) {\n        this.type.setPosition();\n        if (this.type.subject && this.type.subject.selectAll(\":not(.handle)\").nodes().length !== 0) {\n          this.type.redrawSubject();\n        }\n      }\n    }\n  }, {\n    key: \"clearComponents\",\n    value: function clearComponents() {\n      this.type.clearComponents && this.type.clearComponents();\n    }\n  }, {\n    key: \"updateOffset\",\n    value: function updateOffset() {\n      if (this.type.setOffset) {\n        this.type.setOffset();\n\n        if (this.type.connector.selectAll(\":not(.handle)\").nodes().length !== 0) {\n          this.type.redrawConnector();\n        }\n\n        this.type.redrawNote();\n      }\n    }\n  }, {\n    key: \"className\",\n    get: function get$$1() {\n      return this._className;\n    },\n    set: function set$$1(className) {\n      this._className = className;\n      if (this.type.setClassName) this.type.setClassName();\n    }\n  }, {\n    key: \"type\",\n    get: function get$$1() {\n      return this._type;\n    },\n    set: function set$$1(type) {\n      this._type = type;\n      this.clearComponents();\n    }\n  }, {\n    key: \"x\",\n    get: function get$$1() {\n      return this._x;\n    },\n    set: function set$$1(x) {\n      this._x = x;\n      this.updatePosition();\n    }\n  }, {\n    key: \"y\",\n    get: function get$$1() {\n      return this._y;\n    },\n    set: function set$$1(y) {\n      this._y = y;\n      this.updatePosition();\n    }\n  }, {\n    key: \"color\",\n    get: function get$$1() {\n      return this._color;\n    },\n    set: function set$$1(color) {\n      this._color = color;\n      this.updatePosition();\n    }\n  }, {\n    key: \"dx\",\n    get: function get$$1() {\n      return this._dx;\n    },\n    set: function set$$1(dx) {\n      this._dx = dx;\n      this.updateOffset();\n    }\n  }, {\n    key: \"dy\",\n    get: function get$$1() {\n      return this._dy;\n    },\n    set: function set$$1(dy) {\n      this._dy = dy;\n      this.updateOffset();\n    }\n  }, {\n    key: \"nx\",\n    set: function set$$1(nx) {\n      this._dx = nx - this._x;\n      this.updateOffset();\n    }\n  }, {\n    key: \"ny\",\n    set: function set$$1(ny) {\n      this._dy = ny - this._y;\n      this.updateOffset();\n    }\n  }, {\n    key: \"offset\",\n    get: function get$$1() {\n      return { x: this._dx, y: this._dy };\n    },\n    set: function set$$1(_ref2) {\n      var x = _ref2.x,\n          y = _ref2.y;\n\n      this._dx = x;\n      this._dy = y;\n      this.updateOffset();\n    }\n  }, {\n    key: \"position\",\n    get: function get$$1() {\n      return { x: this._x, y: this._y };\n    },\n    set: function set$$1(_ref3) {\n      var x = _ref3.x,\n          y = _ref3.y;\n\n      this._x = x;\n      this._y = y;\n      this.updatePosition();\n    }\n  }, {\n    key: \"translation\",\n    get: function get$$1() {\n      return {\n        x: this._x + this._dx,\n        y: this._y + this._dy\n      };\n    }\n  }, {\n    key: \"json\",\n    get: function get$$1() {\n      var json = {\n        x: this._x,\n        y: this._y,\n        dx: this._dx,\n        dy: this._dy\n      };\n\n      if (this.data && Object.keys(this.data).length > 0) json.data = this.data;\n      if (this.type) json.type = this.type;\n      if (this._className) json.className = this._className;\n\n      if (Object.keys(this.connector).length > 0) json.connector = this.connector;\n      if (Object.keys(this.subject).length > 0) json.subject = this.subject;\n      if (Object.keys(this.note).length > 0) json.note = this.note;\n\n      return json;\n    }\n  }]);\n  return Annotation;\n}();\n\nvar AnnotationCollection = function () {\n  function AnnotationCollection(_ref) {\n    var annotations = _ref.annotations,\n        accessors = _ref.accessors,\n        accessorsInverse = _ref.accessorsInverse;\n    classCallCheck(this, AnnotationCollection);\n\n    this.accessors = accessors;\n    this.accessorsInverse = accessorsInverse;\n    this.annotations = annotations;\n  }\n\n  createClass(AnnotationCollection, [{\n    key: \"clearTypes\",\n    value: function clearTypes(newSettings) {\n      this.annotations.forEach(function (d) {\n        d.type = undefined;\n        d.subject = newSettings && newSettings.subject || d.subject;\n        d.connector = newSettings && newSettings.connector || d.connector;\n        d.note = newSettings && newSettings.note || d.note;\n      });\n    }\n  }, {\n    key: \"setPositionWithAccessors\",\n    value: function setPositionWithAccessors() {\n      var _this = this;\n\n      this.annotations.forEach(function (d) {\n        d.type.setPositionWithAccessors(_this.accessors);\n      });\n    }\n  }, {\n    key: \"editMode\",\n    value: function editMode(_editMode) {\n      this.annotations.forEach(function (a) {\n        if (a.type) {\n          a.type.editMode = _editMode;\n          a.type.updateEditMode();\n        }\n      });\n    }\n  }, {\n    key: \"updateDisable\",\n    value: function updateDisable(disable) {\n      this.annotations.forEach(function (a) {\n        a.disable = disable;\n        if (a.type) {\n          disable.forEach(function (d) {\n            if (a.type[d]) {\n              a.type[d].remove && a.type[d].remove();\n              a.type[d] = undefined;\n            }\n          });\n        }\n      });\n    }\n  }, {\n    key: \"updateTextWrap\",\n    value: function updateTextWrap(textWrap) {\n      this.annotations.forEach(function (a) {\n        if (a.type && a.type.updateTextWrap) {\n          a.type.updateTextWrap(textWrap);\n        }\n      });\n    }\n  }, {\n    key: \"updateText\",\n    value: function updateText() {\n      this.annotations.forEach(function (a) {\n        if (a.type && a.type.drawText) {\n          a.type.drawText();\n        }\n      });\n    }\n  }, {\n    key: \"updateNotePadding\",\n    value: function updateNotePadding(notePadding) {\n      this.annotations.forEach(function (a) {\n        if (a.type) {\n          a.type.notePadding = notePadding;\n        }\n      });\n    }\n  }, {\n    key: \"json\",\n    get: function get$$1() {\n      var _this2 = this;\n\n      return this.annotations.map(function (a) {\n        var json = a.json;\n        if (_this2.accessorsInverse && a.data) {\n          json.data = {};\n          Object.keys(_this2.accessorsInverse).forEach(function (k) {\n            json.data[k] = _this2.accessorsInverse[k]({ x: a.x, y: a.y });\n\n            //TODO make this feasible to map back to data for other types of subjects\n          });\n        }\n        return json;\n      });\n    }\n  }, {\n    key: \"noteNodes\",\n    get: function get$$1() {\n      return this.annotations.map(function (a) {\n        return _extends({}, a.type.getNoteBBoxOffset(), { positionX: a.x, positionY: a.y });\n      });\n    }\n\n    //TODO: come back and rethink if a.x and a.y are applicable in all situations\n    // get connectorNodes() {\n    //   return this.annotations.map(a => ({ ...a.type.getConnectorBBox(), startX: a.x, startY: a.y}))\n    // }\n\n    // get subjectNodes() {\n    //   return this.annotations.map(a => ({ ...a.type.getSubjectBBox(), startX: a.x, startY: a.y}))\n    // }\n\n    // get annotationNodes() {\n    //   return this.annotations.map(a => ({ ...a.type.getAnnotationBBox(), startX: a.x, startY: a.y}))\n    // }\n\n  }]);\n  return AnnotationCollection;\n}();\n\nvar pointHandle = function pointHandle(_ref) {\n  var _ref$cx = _ref.cx,\n      cx = _ref$cx === undefined ? 0 : _ref$cx,\n      _ref$cy = _ref.cy,\n      cy = _ref$cy === undefined ? 0 : _ref$cy;\n\n  return { move: { x: cx, y: cy } };\n};\n\nvar circleHandles = function circleHandles(_ref2) {\n  var _ref2$cx = _ref2.cx,\n      cx = _ref2$cx === undefined ? 0 : _ref2$cx,\n      _ref2$cy = _ref2.cy,\n      cy = _ref2$cy === undefined ? 0 : _ref2$cy,\n      r1 = _ref2.r1,\n      r2 = _ref2.r2,\n      padding = _ref2.padding;\n\n  var h = { move: { x: cx, y: cy } };\n\n  if (r1 !== undefined) {\n    h.r1 = { x: cx + r1 / Math.sqrt(2), y: cy + r1 / Math.sqrt(2) };\n  }\n\n  if (r2 !== undefined) {\n    h.r2 = { x: cx + r2 / Math.sqrt(2), y: cy + r2 / Math.sqrt(2) };\n  }\n\n  if (padding !== undefined) {\n    h.padding = { x: cx + r1 + padding, y: cy };\n  }\n\n  return h;\n};\n\n\n\n\n\n//arc handles\nvar addHandles = function addHandles(_ref5) {\n  var group = _ref5.group,\n      handles = _ref5.handles,\n      _ref5$r = _ref5.r,\n      r = _ref5$r === undefined ? 10 : _ref5$r;\n\n  //give it a group and x,y to draw handles\n  //then give it instructions on what the handles change\n  var h = group.selectAll(\"circle.handle\").data(handles);\n\n  h.enter().append(\"circle\").attr(\"class\", \"handle\").attr(\"fill\", \"grey\").attr(\"fill-opacity\", 0.1).attr(\"cursor\", \"move\").attr(\"stroke-dasharray\", 5).attr(\"stroke\", \"grey\").call(drag().container(select(\"g.annotations\").node()).on(\"start\", function (d) {\n    return d.start && d.start(d);\n  }).on(\"drag\", function (d) {\n    return d.drag && d.drag(d);\n  }).on(\"end\", function (d) {\n    return d.end && d.end(d);\n  }));\n\n  group.selectAll(\"circle.handle\").attr(\"cx\", function (d) {\n    return d.x;\n  }).attr(\"cy\", function (d) {\n    return d.y;\n  }).attr(\"r\", function (d) {\n    return d.r || r;\n  }).attr(\"class\", function (d) {\n    return \"handle \" + (d.className || \"\");\n  });\n\n  h.exit().remove();\n};\n\nvar leftRightDynamic = function leftRightDynamic(align, y) {\n  if (align === \"dynamic\" || align === \"left\" || align === \"right\") {\n    if (y < 0) {\n      align = \"top\";\n    } else {\n      align = \"bottom\";\n    }\n  }\n  return align;\n};\n\nvar topBottomDynamic = function topBottomDynamic(align, x) {\n  if (align === \"dynamic\" || align === \"top\" || align === \"bottom\") {\n    if (x < 0) {\n      align = \"right\";\n    } else {\n      align = \"left\";\n    }\n  }\n  return align;\n};\n\nvar orientationTopBottom = [\"topBottom\", \"top\", \"bottom\"];\nvar orientationLeftRight = [\"leftRight\", \"left\", \"right\"];\n\nvar noteAlignment = (function (_ref) {\n  var _ref$padding = _ref.padding,\n      padding = _ref$padding === undefined ? 0 : _ref$padding,\n      _ref$bbox = _ref.bbox,\n      bbox = _ref$bbox === undefined ? { x: 0, y: 0, width: 0, height: 0 } : _ref$bbox,\n      align = _ref.align,\n      orientation = _ref.orientation,\n      _ref$offset = _ref.offset,\n      offset = _ref$offset === undefined ? { x: 0, y: 0 } : _ref$offset;\n\n  var x = -bbox.x;\n  var y = 0; //-bbox.y\n  if (orientationTopBottom.indexOf(orientation) !== -1) {\n    align = topBottomDynamic(align, offset.x);\n    if (offset.y < 0 && orientation === \"topBottom\" || orientation === \"top\") {\n      y -= bbox.height + padding;\n    } else {\n      y += padding;\n    }\n\n    if (align === \"middle\") {\n      x -= bbox.width / 2;\n    } else if (align === \"right\") {\n      x -= bbox.width;\n    }\n  } else if (orientationLeftRight.indexOf(orientation) !== -1) {\n    align = leftRightDynamic(align, offset.y);\n    if (offset.x < 0 && orientation === \"leftRight\" || orientation === \"left\") {\n      x -= bbox.width + padding;\n    } else {\n      x += padding;\n    }\n\n    if (align === \"middle\") {\n      y -= bbox.height / 2;\n    } else if (align === \"top\") {\n      y -= bbox.height;\n    }\n  }\n\n  return { x: x, y: y };\n});\n\nvar lineBuilder = function lineBuilder(_ref) {\n  var data = _ref.data,\n      _ref$curve = _ref.curve,\n      curve = _ref$curve === undefined ? curveLinear : _ref$curve,\n      canvasContext = _ref.canvasContext,\n      className = _ref.className,\n      classID = _ref.classID;\n\n  var lineGen = line().curve(curve);\n\n  var builder = {\n    type: 'path',\n    className: className,\n    classID: classID,\n    data: data\n  };\n\n  if (canvasContext) {\n    lineGen.context(canvasContext);\n    builder.pathMethods = lineGen;\n  } else {\n    builder.attrs = {\n      d: lineGen(data)\n    };\n  }\n\n  return builder;\n};\n\nvar arcBuilder = function arcBuilder(_ref2) {\n  var data = _ref2.data,\n      canvasContext = _ref2.canvasContext,\n      className = _ref2.className,\n      classID = _ref2.classID;\n\n\n  var builder = {\n    type: 'path',\n    className: className,\n    classID: classID,\n    data: data\n  };\n\n  var arcShape = arc().innerRadius(data.innerRadius || 0).outerRadius(data.outerRadius || data.radius || 2).startAngle(data.startAngle || 0).endAngle(data.endAngle || 2 * Math.PI);\n\n  if (canvasContext) {\n    arcShape.context(canvasContext);\n    builder.pathMethods = lineGen;\n  } else {\n\n    builder.attrs = {\n      d: arcShape()\n    };\n  }\n\n  return builder;\n};\n\nvar noteVertical = (function (_ref) {\n  var align = _ref.align,\n      _ref$x = _ref.x,\n      x = _ref$x === undefined ? 0 : _ref$x,\n      _ref$y = _ref.y,\n      y = _ref$y === undefined ? 0 : _ref$y,\n      bbox = _ref.bbox,\n      offset = _ref.offset;\n\n  align = leftRightDynamic(align, offset.y);\n\n  if (align === \"top\") {\n    y -= bbox.height;\n  } else if (align === \"middle\") {\n    y -= bbox.height / 2;\n  }\n\n  var data = [[x, y], [x, y + bbox.height]];\n  return { components: [lineBuilder({ data: data, className: \"note-line\" })] };\n});\n\nvar noteHorizontal = (function (_ref) {\n  var align = _ref.align,\n      _ref$x = _ref.x,\n      x = _ref$x === undefined ? 0 : _ref$x,\n      _ref$y = _ref.y,\n      y = _ref$y === undefined ? 0 : _ref$y,\n      offset = _ref.offset,\n      bbox = _ref.bbox;\n\n  align = topBottomDynamic(align, offset.x);\n\n  if (align === \"right\") {\n    x -= bbox.width;\n  } else if (align === \"middle\") {\n    x -= bbox.width / 2;\n  }\n\n  var data = [[x, y], [x + bbox.width, y]];\n  return { components: [lineBuilder({ data: data, className: \"note-line\" })] };\n});\n\nvar lineSetup = function lineSetup(_ref) {\n  var type = _ref.type,\n      subjectType = _ref.subjectType;\n\n  var annotation = type.annotation;\n  var offset = annotation.position;\n\n  var x1 = annotation.x - offset.x,\n      x2 = x1 + annotation.dx,\n      y1 = annotation.y - offset.y,\n      y2 = y1 + annotation.dy;\n\n  var subjectData = annotation.subject;\n\n  if (subjectType === \"circle\" && (subjectData.outerRadius || subjectData.radius)) {\n    var h = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));\n    var angle = Math.asin(-y2 / h);\n    var r = subjectData.outerRadius || subjectData.radius + (subjectData.radiusPadding || 0);\n\n    x1 = Math.abs(Math.cos(angle) * r) * (x2 < 0 ? -1 : 1);\n    y1 = Math.abs(Math.sin(angle) * r) * (y2 < 0 ? -1 : 1);\n  }\n\n  if (subjectType === \"rect\") {\n    var width = subjectData.width,\n        height = subjectData.height;\n\n\n    if (width > 0 && annotation.dx > 0 || width < 0 && annotation.dx < 0) {\n      if (Math.abs(width) > Math.abs(annotation.dx)) x1 = width / 2;else x1 = width;\n    }\n    if (height > 0 && annotation.dy > 0 || height < 0 && annotation.dy < 0) {\n      if (Math.abs(height) > Math.abs(annotation.dy)) y1 = height / 2;else y1 = height;\n    }\n    if (x1 === width / 2 && y1 === height / 2) {\n      x1 = x2;y1 = y2;\n    }\n  }\n\n  return [[x1, y1], [x2, y2]];\n};\n\nvar connectorLine = (function (connectorData) {\n  var data = lineSetup(connectorData);\n  return { components: [lineBuilder({ data: data, className: \"connector\" })] };\n});\n\nvar connectorElbow = (function (_ref) {\n  var type = _ref.type,\n      subjectType = _ref.subjectType;\n\n\n  var annotation = type.annotation;\n  var offset = annotation.position;\n\n  var x1 = annotation.x - offset.x,\n      x2 = x1 + annotation.dx,\n      y1 = annotation.y - offset.y,\n      y2 = y1 + annotation.dy;\n\n  var subjectData = annotation.subject;\n\n  if (subjectType === \"rect\") {\n    var width = subjectData.width,\n        height = subjectData.height;\n\n\n    if (width > 0 && annotation.dx > 0 || width < 0 && annotation.dx < 0) {\n      if (Math.abs(width) > Math.abs(annotation.dx)) x1 = width / 2;else x1 = width;\n    }\n    if (height > 0 && annotation.dy > 0 || height < 0 && annotation.dy < 0) {\n      if (Math.abs(height) > Math.abs(annotation.dy)) y1 = height / 2;else y1 = height;\n    }\n    if (x1 === width / 2 && y1 === height / 2) {\n      x1 = x2;y1 = y2;\n    }\n  }\n\n  var data = [[x1, y1], [x2, y2]];\n\n  var diffY = y2 - y1;\n  var diffX = x2 - x1;\n  var xe = x2;\n  var ye = y2;\n  var opposite = y2 < y1 && x2 > x1 || x2 < x1 && y2 > y1 ? -1 : 1;\n\n  if (Math.abs(diffX) < Math.abs(diffY)) {\n    xe = x2;\n    ye = y1 + diffX * opposite;\n  } else {\n    ye = y2;\n    xe = x1 + diffY * opposite;\n  }\n\n  if (subjectType === \"circle\" && (subjectData.outerRadius || subjectData.radius)) {\n    var r = (subjectData.outerRadius || subjectData.radius) + (subjectData.radiusPadding || 0);\n    var length = r / Math.sqrt(2);\n\n    if (Math.abs(diffX) > length && Math.abs(diffY) > length) {\n      x1 = length * (x2 < 0 ? -1 : 1);\n      y1 = length * (y2 < 0 ? -1 : 1);\n      data = [[x1, y1], [xe, ye], [x2, y2]];\n    } else if (Math.abs(diffX) > Math.abs(diffY)) {\n      var angle = Math.asin(-y2 / r);\n      x1 = Math.abs(Math.cos(angle) * r) * (x2 < 0 ? -1 : 1);\n      data = [[x1, y2], [x2, y2]];\n    } else {\n      var _angle = Math.acos(x2 / r);\n      y1 = Math.abs(Math.sin(_angle) * r) * (y2 < 0 ? -1 : 1);\n      data = [[x2, y1], [x2, y2]];\n    }\n  } else {\n    data = [[x1, y1], [xe, ye], [x2, y2]];\n  }\n\n  return { components: [lineBuilder({ data: data, className: \"connector\" })] };\n});\n\nvar connectorCurve = (function (_ref) {\n  var type = _ref.type,\n      connectorData = _ref.connectorData,\n      subjectType = _ref.subjectType;\n\n\n  if (!connectorData) {\n    connectorData = {};\n  }\n  if (!connectorData.points || typeof connectorData.points === \"number\") {\n    connectorData.points = createPoints(type.annotation.offset, connectorData.points);\n  }\n  if (!connectorData.curve) {\n    connectorData.curve = curveCatmullRom;\n  }\n\n  var handles = [];\n\n  if (type.editMode) {\n    var cHandles = connectorData.points.map(function (c, i) {\n      return _extends({}, pointHandle({ cx: c[0], cy: c[1] }), { index: i });\n    });\n\n    var updatePoint = function updatePoint(index) {\n      connectorData.points[index][0] += event.dx;\n      connectorData.points[index][1] += event.dy;\n      type.redrawConnector();\n    };\n\n    handles = type.mapHandles(cHandles.map(function (h) {\n      return _extends({}, h.move, { drag: updatePoint.bind(type, h.index) });\n    }));\n  }\n\n  var data = lineSetup({ type: type, subjectType: subjectType });\n  data = [data[0]].concat(toConsumableArray(connectorData.points), [data[1]]);\n  var components = [lineBuilder({ data: data, curve: connectorData.curve, className: \"connector\" })];\n\n  return { components: components, handles: handles };\n});\n\nvar createPoints = function createPoints(offset) {\n  var anchors = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n\n  var diff = { x: offset.x / (anchors + 1), y: offset.y / (anchors + 1) };\n  var p = [];\n\n  var i = 1;\n  for (; i <= anchors; i++) {\n    p.push([diff.x * i + i % 2 * 20, diff.y * i - i % 2 * 20]);\n  }\n  return p;\n};\n\nvar connectorArrow = (function (_ref) {\n  var annotation = _ref.annotation,\n      start = _ref.start,\n      end = _ref.end,\n      _ref$scale = _ref.scale,\n      scale = _ref$scale === undefined ? 1 : _ref$scale;\n\n  var offset = annotation.position;\n  if (!start) {\n    start = [annotation.dx, annotation.dy];\n  } else {\n    start = [-end[0] + start[0], -end[1] + start[1]];\n  }\n  if (!end) {\n    end = [annotation.x - offset.x, annotation.y - offset.y];\n  }\n\n  var x1 = end[0],\n      y1 = end[1];\n\n  var dx = start[0];\n  var dy = start[1];\n\n  var size = 10 * scale;\n  var angleOffset = 16 / 180 * Math.PI;\n  var angle = Math.atan(dy / dx);\n\n  if (dx < 0) {\n    angle += Math.PI;\n  }\n\n  var data = [[x1, y1], [Math.cos(angle + angleOffset) * size + x1, Math.sin(angle + angleOffset) * size + y1], [Math.cos(angle - angleOffset) * size + x1, Math.sin(angle - angleOffset) * size + y1], [x1, y1]];\n\n  //TODO add in reverse\n  // if (canvasContext.arrowReverse){\n  //   data = [[x1, y1],\n  //   [Math.cos(angle + angleOffset)*size, Math.sin(angle + angleOffset)*size],\n  //   [Math.cos(angle - angleOffset)*size, Math.sin(angle - angleOffset)*size],\n  //   [x1, y1]\n  //   ]\n  // } else {\n  //   data = [[x1, y1],\n  //   [Math.cos(angle + angleOffset)*size, Math.sin(angle + angleOffset)*size],\n  //   [Math.cos(angle - angleOffset)*size, Math.sin(angle - angleOffset)*size],\n  //   [x1, y1]\n  //   ]\n  // }\n\n  return {\n    components: [lineBuilder({\n      data: data,\n      className: \"connector-end connector-arrow\",\n      classID: \"connector-end\"\n    })]\n  };\n});\n\nvar connectorDot = (function (_ref) {\n  var line$$1 = _ref.line,\n      _ref$scale = _ref.scale,\n      scale = _ref$scale === undefined ? 1 : _ref$scale;\n\n  var dot = arcBuilder({\n    className: \"connector-end connector-dot\",\n    classID: \"connector-end\",\n    data: { radius: 3 * Math.sqrt(scale) }\n  });\n  dot.attrs.transform = \"translate(\" + line$$1.data[0][0] + \", \" + line$$1.data[0][1] + \")\";\n\n  return { components: [dot] };\n});\n\nvar subjectCircle = (function (_ref) {\n  var subjectData = _ref.subjectData,\n      type = _ref.type;\n\n  if (!subjectData.radius && !subjectData.outerRadius) {\n    subjectData.radius = 20;\n  }\n\n  var handles = [];\n  var c = arcBuilder({ data: subjectData, className: \"subject\" });\n  if (type.editMode) {\n    var h = circleHandles({\n      r1: c.data.outerRadius || c.data.radius,\n      r2: c.data.innerRadius,\n      padding: subjectData.radiusPadding\n    });\n\n    var updateRadius = function updateRadius(attr) {\n      var r = subjectData[attr] + event.dx * Math.sqrt(2);\n      subjectData[attr] = r;\n      type.redrawSubject();\n      type.redrawConnector();\n    };\n\n    var cHandles = [_extends({}, h.r1, {\n      drag: updateRadius.bind(type, subjectData.outerRadius !== undefined ? \"outerRadius\" : \"radius\")\n    })];\n\n    if (subjectData.innerRadius) {\n      cHandles.push(_extends({}, h.r2, { drag: updateRadius.bind(type, \"innerRadius\") }));\n    }\n    handles = type.mapHandles(cHandles);\n  }\n\n  c.attrs[\"fill-opacity\"] = 0;\n\n  return { components: [c], handles: handles };\n});\n\nvar subjectRect = (function (_ref) {\n  var subjectData = _ref.subjectData,\n      type = _ref.type;\n\n  if (!subjectData.width) {\n    subjectData.width = 100;\n  }\n  if (!subjectData.height) {\n    subjectData.height = 100;\n  }\n\n  var handles = [];\n  var width = subjectData.width,\n      height = subjectData.height;\n\n\n  var data = [[0, 0], [width, 0], [width, height], [0, height], [0, 0]];\n  var rect = lineBuilder({ data: data, className: \"subject\" });\n\n  if (type.editMode) {\n    var updateWidth = function updateWidth() {\n      subjectData.width = event.x;\n      type.redrawSubject();\n      type.redrawConnector();\n    };\n\n    var updateHeight = function updateHeight() {\n      subjectData.height = event.y;\n      type.redrawSubject();\n      type.redrawConnector();\n    };\n\n    var rHandles = [{ x: width, y: height / 2, drag: updateWidth.bind(type) }, { x: width / 2, y: height, drag: updateHeight.bind(type) }];\n\n    handles = type.mapHandles(rHandles);\n  }\n  rect.attrs[\"fill-opacity\"] = 0.1;\n  return { components: [rect], handles: handles };\n});\n\nvar subjectThreshold = (function (_ref) {\n  var subjectData = _ref.subjectData,\n      type = _ref.type;\n\n  var offset = type.annotation.position;\n\n  var x1 = (subjectData.x1 !== undefined ? subjectData.x1 : offset.x) - offset.x,\n      x2 = (subjectData.x2 !== undefined ? subjectData.x2 : offset.x) - offset.x,\n      y1 = (subjectData.y1 !== undefined ? subjectData.y1 : offset.y) - offset.y,\n      y2 = (subjectData.y2 !== undefined ? subjectData.y2 : offset.y) - offset.y;\n\n  var data = [[x1, y1], [x2, y2]];\n  return { components: [lineBuilder({ data: data, className: 'subject' })] };\n});\n\nvar subjectBadge = (function (_ref) {\n  var _ref$subjectData = _ref.subjectData,\n      subjectData = _ref$subjectData === undefined ? {} : _ref$subjectData,\n      _ref$type = _ref.type,\n      type = _ref$type === undefined ? {} : _ref$type;\n  var annotation = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  var typeSettings = type.typeSettings && type.typeSettings.subject;\n\n  if (!subjectData.radius) {\n    if (typeSettings && typeSettings.radius) {\n      subjectData.radius = typeSettings.radius;\n    } else {\n      subjectData.radius = 14;\n    }\n  }\n  if (!subjectData.x) {\n    if (typeSettings && typeSettings.x) {\n      subjectData.x = typeSettings.x;\n    }\n  }\n  if (!subjectData.y) {\n    if (typeSettings && typeSettings.y) {\n      subjectData.y = typeSettings.y;\n    }\n  }\n\n  var handles = [];\n  var components = [];\n  var radius = subjectData.radius;\n  var innerRadius = radius * 0.7;\n  var x = 0;\n  var y = 0;\n\n  var notCornerOffset = Math.sqrt(2) * radius;\n  var placement = {\n    xleftcorner: -radius,\n    xrightcorner: radius,\n    ytopcorner: -radius,\n    ybottomcorner: radius,\n    xleft: -notCornerOffset,\n    xright: notCornerOffset,\n    ytop: -notCornerOffset,\n    ybottom: notCornerOffset\n  };\n\n  if (subjectData.x && !subjectData.y) {\n    x = placement[\"x\" + subjectData.x];\n  } else if (subjectData.y && !subjectData.x) {\n    y = placement[\"y\" + subjectData.y];\n  } else if (subjectData.x && subjectData.y) {\n    x = placement[\"x\" + subjectData.x + \"corner\"];\n    y = placement[\"y\" + subjectData.y + \"corner\"];\n  }\n\n  var transform = \"translate(\" + x + \", \" + y + \")\";\n  var circlebg = arcBuilder({ className: \"subject\", data: { radius: radius } });\n  circlebg.attrs.transform = transform;\n  circlebg.attrs.fill = annotation.color;\n  circlebg.attrs[\"stroke-linecap\"] = \"round\";\n  circlebg.attrs[\"stroke-width\"] = \"3px\";\n\n  var circle = arcBuilder({\n    className: \"subject-ring\",\n    data: { outerRadius: radius, innerRadius: innerRadius }\n  });\n\n  circle.attrs.transform = transform;\n  // circle.attrs.fill = annotation.color\n  circle.attrs[\"stroke-width\"] = \"3px\";\n  circle.attrs.fill = \"white\";\n\n  var pointer = void 0;\n  if (x && y || !x && !y) {\n    pointer = lineBuilder({\n      className: \"subject-pointer\",\n      data: [[0, 0], [x || 0, 0], [0, y || 0], [0, 0]]\n    });\n  } else if (x || y) {\n    var notCornerPointerXY = function notCornerPointerXY(v) {\n      var sign = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n      return v && v / Math.sqrt(2) / Math.sqrt(2) || sign * radius / Math.sqrt(2);\n    };\n\n    pointer = lineBuilder({\n      className: \"subject-pointer\",\n      data: [[0, 0], [notCornerPointerXY(x), notCornerPointerXY(y)], [notCornerPointerXY(x, -1), notCornerPointerXY(y, -1)], [0, 0]]\n    });\n  }\n\n  if (pointer) {\n    pointer.attrs.fill = annotation.color;\n    pointer.attrs[\"stroke-linecap\"] = \"round\";\n    pointer.attrs[\"stroke-width\"] = \"3px\";\n    components.push(pointer);\n  }\n\n  if (type.editMode) {\n    var dragBadge = function dragBadge() {\n      subjectData.x = event.x < -radius * 2 ? \"left\" : event.x > radius * 2 ? \"right\" : undefined;\n      subjectData.y = event.y < -radius * 2 ? \"top\" : event.y > radius * 2 ? \"bottom\" : undefined;\n\n      type.redrawSubject();\n    };\n\n    var bHandles = { x: x * 2, y: y * 2, drag: dragBadge.bind(type) };\n    if (!bHandles.x && !bHandles.y) {\n      bHandles.y = -radius;\n    }\n\n    handles = type.mapHandles([bHandles]);\n  }\n\n  var text = void 0;\n  if (subjectData.text) {\n    text = {\n      type: \"text\",\n      className: \"badge-text\",\n      attrs: {\n        fill: \"white\",\n        stroke: \"none\",\n        \"font-size\": \".7em\",\n        text: subjectData.text,\n        \"text-anchor\": \"middle\",\n        dy: \".25em\",\n        x: x,\n        y: y\n      }\n    };\n  }\n\n  components.push(circlebg);\n  components.push(circle);\n  components.push(text);\n\n  return { components: components, handles: handles };\n});\n\n//Note options\n//Connector options\n//Subject options\nvar Type = function () {\n  function Type(_ref) {\n    var a = _ref.a,\n        annotation = _ref.annotation,\n        editMode = _ref.editMode,\n        dispatcher = _ref.dispatcher,\n        notePadding = _ref.notePadding,\n        accessors = _ref.accessors;\n    classCallCheck(this, Type);\n\n    this.a = a;\n\n    this.note = annotation.disable.indexOf(\"note\") === -1 && a.select(\"g.annotation-note\");\n    this.noteContent = this.note && a.select(\"g.annotation-note-content\");\n    this.connector = annotation.disable.indexOf(\"connector\") === -1 && a.select(\"g.annotation-connector\");\n    this.subject = annotation.disable.indexOf(\"subject\") === -1 && a.select(\"g.annotation-subject\");\n    this.dispatcher = dispatcher;\n\n    if (dispatcher) {\n      var handler = addHandlers.bind(null, dispatcher, annotation);\n      handler({ component: this.note, name: \"note\" });\n      handler({ component: this.connector, name: \"connector\" });\n      handler({ component: this.subject, name: \"subject\" });\n    }\n\n    this.annotation = annotation;\n    this.editMode = annotation.editMode || editMode;\n    this.notePadding = notePadding !== undefined ? notePadding : 3;\n    this.offsetCornerX = 0;\n    this.offsetCornerY = 0;\n\n    if (accessors && annotation.data) {\n      this.init(accessors);\n    }\n  }\n\n  createClass(Type, [{\n    key: \"init\",\n    value: function init(accessors) {\n      if (!this.annotation.x) {\n        this.mapX(accessors);\n      }\n      if (!this.annotation.y) {\n        this.mapY(accessors);\n      }\n    }\n  }, {\n    key: \"mapY\",\n    value: function mapY(accessors) {\n      if (accessors.y) {\n        this.annotation.y = accessors.y(this.annotation.data);\n      }\n    }\n  }, {\n    key: \"mapX\",\n    value: function mapX(accessors) {\n      if (accessors.x) {\n        this.annotation.x = accessors.x(this.annotation.data);\n      }\n    }\n  }, {\n    key: \"updateEditMode\",\n    value: function updateEditMode() {\n      this.a.selectAll(\"circle.handle\").remove();\n    }\n  }, {\n    key: \"drawOnSVG\",\n    value: function drawOnSVG(component, builders) {\n      var _this = this;\n\n      if (!Array.isArray(builders)) {\n        builders = [builders];\n      }\n\n      builders.filter(function (b) {\n        return b;\n      }).forEach(function (_ref2) {\n        var type = _ref2.type,\n            className = _ref2.className,\n            attrs = _ref2.attrs,\n            handles = _ref2.handles,\n            classID = _ref2.classID;\n\n        if (type === \"handle\") {\n          addHandles({ group: component, r: attrs && attrs.r, handles: handles });\n        } else {\n          newWithClass(component, [_this.annotation], type, className, classID);\n          var el = component.select(type + \".\" + (classID || className));\n          var addAttrs = Object.keys(attrs);\n          var removeAttrs = [];\n\n          var currentAttrs = el.node().attributes;\n          for (var i = currentAttrs.length - 1; i >= 0; i--) {\n            var name = currentAttrs[i].name;\n            if (addAttrs.indexOf(name) === -1 && name !== \"class\") removeAttrs.push(name);\n          }\n\n          addAttrs.forEach(function (attr) {\n            if (attr === \"text\") {\n              el.text(attrs[attr]);\n            } else {\n              el.attr(attr, attrs[attr]);\n            }\n          });\n\n          removeAttrs.forEach(function (attr) {\n            return el.attr(attr, null);\n          });\n        }\n      });\n    }\n\n    //TODO: how to extend this to a drawOnCanvas mode?\n\n  }, {\n    key: \"getNoteBBox\",\n    value: function getNoteBBox() {\n      return bboxWithoutHandles(this.note, \".annotation-note-content text\");\n    }\n  }, {\n    key: \"getNoteBBoxOffset\",\n    value: function getNoteBBoxOffset() {\n      var bbox = bboxWithoutHandles(this.note, \".annotation-note-content\");\n      var transform = this.noteContent.attr(\"transform\").split(/\\(|\\,|\\)/g);\n      bbox.offsetCornerX = parseFloat(transform[1]) + this.annotation.dx;\n      bbox.offsetCornerY = parseFloat(transform[2]) + this.annotation.dy;\n      bbox.offsetX = this.annotation.dx;\n      bbox.offsetY = this.annotation.dy;\n      return bbox;\n    }\n  }, {\n    key: \"drawSubject\",\n    value: function drawSubject() {\n      var _this2 = this;\n\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      var subjectData = this.annotation.subject;\n      var type = context.type;\n      var subjectParams = { type: this, subjectData: subjectData };\n\n      var subject = {};\n      if (type === \"circle\") subject = subjectCircle(subjectParams);else if (type === \"rect\") subject = subjectRect(subjectParams);else if (type === \"threshold\") subject = subjectThreshold(subjectParams);else if (type === \"badge\") subject = subjectBadge(subjectParams, this.annotation);\n\n      var _subject = subject,\n          _subject$components = _subject.components,\n          components = _subject$components === undefined ? [] : _subject$components,\n          _subject$handles = _subject.handles,\n          handles = _subject$handles === undefined ? [] : _subject$handles;\n\n      components.forEach(function (c) {\n        if (c && c.attrs && !c.attrs.stroke) {\n          c.attrs.stroke = _this2.annotation.color;\n        }\n      });\n\n      if (this.editMode) {\n        handles = handles.concat(this.mapHandles([{ drag: this.dragSubject.bind(this) }]));\n        components.push({ type: \"handle\", handles: handles });\n      }\n\n      return components;\n    }\n  }, {\n    key: \"drawConnector\",\n    value: function drawConnector() {\n      var _this3 = this;\n\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      var connectorData = this.annotation.connector;\n      var type = connectorData.type || context.type;\n      var connectorParams = { type: this, connectorData: connectorData };\n      connectorParams.subjectType = this.typeSettings && this.typeSettings.subject && this.typeSettings.subject.type;\n\n      var connector = {};\n      if (type === \"curve\") connector = connectorCurve(connectorParams);else if (type === \"elbow\") connector = connectorElbow(connectorParams);else connector = connectorLine(connectorParams);\n      var _connector = connector,\n          _connector$components = _connector.components,\n          components = _connector$components === undefined ? [] : _connector$components,\n          _connector$handles = _connector.handles,\n          handles = _connector$handles === undefined ? [] : _connector$handles;\n\n      var line$$1 = components[0];\n      //TODO: genericize this into fill t/f stroke t/f\n      if (line$$1) {\n        line$$1.attrs.stroke = this.annotation.color;\n        line$$1.attrs.fill = \"none\";\n      }\n      var endType = connectorData.end || context.end;\n      var end = {};\n      if (endType === \"arrow\") {\n        var s = line$$1.data[1];\n        var e = line$$1.data[0];\n        var distance = Math.sqrt(Math.pow(s[0] - e[0], 2) + Math.pow(s[1] - e[1], 2));\n        if (distance < 5 && line$$1.data[2]) {\n          s = line$$1.data[2];\n        }\n        end = connectorArrow({\n          annotation: this.annotation,\n          start: s,\n          end: e,\n          scale: connectorData.endScale\n        });\n      } else if (endType === \"dot\") {\n        end = connectorDot({ line: line$$1, scale: connectorData.endScale });\n      } else if (!endType || endType === \"none\") {\n        this.connector && this.connector.select(\".connector-end\").remove();\n      }\n\n      if (end.components) {\n        end.components.forEach(function (c) {\n          c.attrs.fill = _this3.annotation.color;\n          c.attrs.stroke = _this3.annotation.color;\n        });\n        components = components.concat(end.components);\n      }\n\n      if (this.editMode) {\n        if (handles.length !== 0) components.push({ type: \"handle\", handles: handles });\n      }\n      return components;\n    }\n  }, {\n    key: \"drawNote\",\n    value: function drawNote() {\n      var _this4 = this;\n\n      var context = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n      var noteData = this.annotation.note;\n      var align = noteData.align || context.align || \"dynamic\";\n      var noteParams = {\n        bbox: context.bbox,\n        align: align,\n        offset: this.annotation.offset\n      };\n      var lineType = noteData.lineType || context.lineType;\n      var note = {};\n      if (lineType === \"vertical\") note = noteVertical(noteParams);else if (lineType === \"horizontal\") note = noteHorizontal(noteParams);\n\n      var _note = note,\n          _note$components = _note.components,\n          components = _note$components === undefined ? [] : _note$components,\n          _note$handles = _note.handles,\n          handles = _note$handles === undefined ? [] : _note$handles;\n\n      components.forEach(function (c) {\n        c.attrs.stroke = _this4.annotation.color;\n      });\n\n      if (this.editMode) {\n        handles = this.mapHandles([{ x: 0, y: 0, drag: this.dragNote.bind(this) }]);\n        components.push({ type: \"handle\", handles: handles });\n\n        var dragging = this.dragNote.bind(this),\n            start = this.dragstarted.bind(this),\n            end = this.dragended.bind(this);\n        this.note.call(drag().container(select(\"g.annotations\").node()).on(\"start\", function (d) {\n          return start(d);\n        }).on(\"drag\", function (d) {\n          return dragging(d);\n        }).on(\"end\", function (d) {\n          return end(d);\n        }));\n      } else {\n        this.note.on(\"mousedown.drag\", null);\n      }\n      return components;\n    }\n  }, {\n    key: \"drawNoteContent\",\n    value: function drawNoteContent(context) {\n      var noteData = this.annotation.note;\n      var padding = noteData.padding !== undefined ? noteData.padding : this.notePadding;\n      var orientation = noteData.orientation || context.orientation || \"topBottom\";\n      var lineType = noteData.lineType || context.lineType;\n      var align = noteData.align || context.align || \"dynamic\";\n\n      if (lineType === \"vertical\") orientation = \"leftRight\";else if (lineType === \"horizontal\") orientation = \"topBottom\";\n\n      var noteParams = {\n        padding: padding,\n        bbox: context.bbox,\n        offset: this.annotation.offset,\n        orientation: orientation,\n        align: align\n      };\n\n      var _noteAlignment = noteAlignment(noteParams),\n          x = _noteAlignment.x,\n          y = _noteAlignment.y;\n\n      this.offsetCornerX = x + this.annotation.dx;\n      this.offsetCornerY = y + this.annotation.dy;\n      this.note && this.noteContent.attr(\"transform\", \"translate(\" + x + \", \" + y + \")\");\n\n      return [];\n    }\n  }, {\n    key: \"drawOnScreen\",\n    value: function drawOnScreen(component, drawFunction) {\n      return this.drawOnSVG(component, drawFunction);\n    }\n  }, {\n    key: \"redrawSubject\",\n    value: function redrawSubject() {\n      this.subject && this.drawOnScreen(this.subject, this.drawSubject());\n    }\n  }, {\n    key: \"redrawConnector\",\n    value: function redrawConnector() {\n      this.connector && this.drawOnScreen(this.connector, this.drawConnector());\n    }\n  }, {\n    key: \"redrawNote\",\n    value: function redrawNote() {\n      var bbox = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getNoteBBox();\n\n      this.noteContent && this.drawOnScreen(this.noteContent, this.drawNoteContent({ bbox: bbox }));\n      this.note && this.drawOnScreen(this.note, this.drawNote({ bbox: bbox }));\n    }\n  }, {\n    key: \"setPosition\",\n    value: function setPosition() {\n      var position = this.annotation.position;\n      this.a.attr(\"transform\", \"translate(\" + position.x + \", \" + position.y + \")\");\n    }\n  }, {\n    key: \"clearComponents\",\n    value: function clearComponents() {\n      this.subject && this.subject.select(\"*\").remove();\n      this.connector && this.connector.select(\"*\").remove();\n      // this.note && this.note.select(\"*\").remove()\n    }\n  }, {\n    key: \"setOffset\",\n    value: function setOffset() {\n      if (this.note) {\n        var offset = this.annotation.offset;\n        this.note.attr(\"transform\", \"translate(\" + offset.x + \", \" + offset.y + \")\");\n      }\n    }\n  }, {\n    key: \"setPositionWithAccessors\",\n    value: function setPositionWithAccessors(accessors) {\n      if (accessors && this.annotation.data) {\n        this.mapX(accessors);\n        this.mapY(accessors);\n      }\n      this.setPosition();\n    }\n  }, {\n    key: \"setClassName\",\n    value: function setClassName() {\n      this.a.attr(\"class\", \"annotation \" + (this.className && this.className()) + \" \" + (this.editMode ? \"editable\" : \"\") + \" \" + (this.annotation.className || \"\"));\n    }\n  }, {\n    key: \"draw\",\n    value: function draw() {\n      this.setClassName();\n      this.setPosition();\n      this.setOffset();\n      this.redrawSubject();\n      this.redrawConnector();\n      this.redrawNote();\n    }\n  }, {\n    key: \"dragstarted\",\n    value: function dragstarted() {\n      event.sourceEvent.stopPropagation();\n      this.dispatcher && this.dispatcher.call(\"dragstart\", this.a, this.annotation);\n      this.a.classed(\"dragging\", true);\n      this.a.selectAll(\"circle.handle\").style(\"pointer-events\", \"none\");\n    }\n  }, {\n    key: \"dragended\",\n    value: function dragended() {\n      this.dispatcher && this.dispatcher.call(\"dragend\", this.a, this.annotation);\n      this.a.classed(\"dragging\", false);\n      this.a.selectAll(\"circle.handle\").style(\"pointer-events\", \"all\");\n    }\n  }, {\n    key: \"dragSubject\",\n    value: function dragSubject() {\n      var position = this.annotation.position;\n      position.x += event.dx;\n      position.y += event.dy;\n      this.annotation.position = position;\n    }\n  }, {\n    key: \"dragNote\",\n    value: function dragNote() {\n      var offset = this.annotation.offset;\n      offset.x += event.dx;\n      offset.y += event.dy;\n      this.annotation.offset = offset;\n    }\n  }, {\n    key: \"mapHandles\",\n    value: function mapHandles(handles) {\n      var _this5 = this;\n\n      return handles.map(function (h) {\n        return _extends({}, h, {\n          start: _this5.dragstarted.bind(_this5),\n          end: _this5.dragended.bind(_this5)\n        });\n      });\n    }\n  }]);\n  return Type;\n}();\n\nvar customType = function customType(initialType, typeSettings, _init) {\n  return function (_initialType) {\n    inherits(customType, _initialType);\n\n    function customType(settings) {\n      classCallCheck(this, customType);\n\n      var _this6 = possibleConstructorReturn(this, (customType.__proto__ || Object.getPrototypeOf(customType)).call(this, settings));\n\n      _this6.typeSettings = typeSettings;\n\n      if (typeSettings.disable) {\n        typeSettings.disable.forEach(function (d) {\n          _this6[d] && _this6[d].remove();\n\n          _this6[d] = undefined;\n          if (d === \"note\") {\n            _this6.noteContent = undefined;\n          }\n        });\n      }\n      return _this6;\n    }\n\n    createClass(customType, [{\n      key: \"className\",\n      value: function className() {\n        return \"\" + (typeSettings.className || get(customType.prototype.__proto__ || Object.getPrototypeOf(customType.prototype), \"className\", this) && get(customType.prototype.__proto__ || Object.getPrototypeOf(customType.prototype), \"className\", this).call(this) || \"\");\n      }\n    }, {\n      key: \"drawSubject\",\n      value: function drawSubject(context) {\n        this.typeSettings.subject = _extends({}, typeSettings.subject, this.typeSettings.subject);\n        return get(customType.prototype.__proto__ || Object.getPrototypeOf(customType.prototype), \"drawSubject\", this).call(this, _extends({}, context, this.typeSettings.subject));\n      }\n    }, {\n      key: \"drawConnector\",\n      value: function drawConnector(context) {\n        this.typeSettings.connector = _extends({}, typeSettings.connector, this.typeSettings.connector);\n        return get(customType.prototype.__proto__ || Object.getPrototypeOf(customType.prototype), \"drawConnector\", this).call(this, _extends({}, context, typeSettings.connector, this.typeSettings.connector));\n      }\n    }, {\n      key: \"drawNote\",\n      value: function drawNote(context) {\n        this.typeSettings.note = _extends({}, typeSettings.note, this.typeSettings.note);\n        return get(customType.prototype.__proto__ || Object.getPrototypeOf(customType.prototype), \"drawNote\", this).call(this, _extends({}, context, typeSettings.note, this.typeSettings.note));\n      }\n    }, {\n      key: \"drawNoteContent\",\n      value: function drawNoteContent(context) {\n        return get(customType.prototype.__proto__ || Object.getPrototypeOf(customType.prototype), \"drawNoteContent\", this).call(this, _extends({}, context, typeSettings.note, this.typeSettings.note));\n      }\n    }], [{\n      key: \"init\",\n      value: function init(annotation, accessors) {\n        get(customType.__proto__ || Object.getPrototypeOf(customType), \"init\", this).call(this, annotation, accessors);\n        if (_init) {\n          annotation = _init(annotation, accessors);\n        }\n        return annotation;\n      }\n    }]);\n    return customType;\n  }(initialType);\n};\n\nvar d3NoteText = function (_Type) {\n  inherits(d3NoteText, _Type);\n\n  function d3NoteText(params) {\n    classCallCheck(this, d3NoteText);\n\n    var _this7 = possibleConstructorReturn(this, (d3NoteText.__proto__ || Object.getPrototypeOf(d3NoteText)).call(this, params));\n\n    _this7.textWrap = params.textWrap || 120;\n    _this7.drawText();\n    return _this7;\n  }\n\n  createClass(d3NoteText, [{\n    key: \"updateTextWrap\",\n    value: function updateTextWrap(textWrap) {\n      this.textWrap = textWrap;\n      this.drawText();\n    }\n\n    //TODO: add update text functionality\n\n  }, {\n    key: \"drawText\",\n    value: function drawText() {\n      if (this.note) {\n        newWithClass(this.note, [this.annotation], \"g\", \"annotation-note-content\");\n\n        var noteContent = this.note.select(\"g.annotation-note-content\");\n        newWithClass(noteContent, [this.annotation], \"rect\", \"annotation-note-bg\");\n        newWithClass(noteContent, [this.annotation], \"text\", \"annotation-note-label\");\n        newWithClass(noteContent, [this.annotation], \"text\", \"annotation-note-title\");\n\n        var titleBBox = { height: 0 };\n        var label = this.a.select(\"text.annotation-note-label\");\n        var wrapLength = this.annotation.note && this.annotation.note.wrap || this.typeSettings && this.typeSettings.note && this.typeSettings.note.wrap || this.textWrap;\n\n        var wrapSplitter = this.annotation.note && this.annotation.note.wrapSplitter || this.typeSettings && this.typeSettings.note && this.typeSettings.note.wrapSplitter;\n\n        var bgPadding = this.annotation.note && this.annotation.note.bgPadding || this.typeSettings && this.typeSettings.note && this.typeSettings.note.bgPadding;\n\n        var bgPaddingFinal = { top: 0, bottom: 0, left: 0, right: 0 };\n        if (typeof bgPadding === \"number\") {\n          bgPaddingFinal = {\n            top: bgPadding,\n            bottom: bgPadding,\n            left: bgPadding,\n            right: bgPadding\n          };\n        } else if (bgPadding && (typeof bgPadding === \"undefined\" ? \"undefined\" : _typeof(bgPadding)) === \"object\") {\n          bgPaddingFinal = _extends(bgPaddingFinal, bgPadding);\n        }\n\n        if (this.annotation.note.title) {\n          var title = this.a.select(\"text.annotation-note-title\");\n          title.text(this.annotation.note.title);\n          title.attr(\"fill\", this.annotation.color);\n          title.attr(\"font-weight\", \"bold\");\n          title.call(wrap, wrapLength, wrapSplitter);\n          titleBBox = title.node().getBBox();\n        }\n\n        label.text(this.annotation.note.label).attr(\"dx\", \"0\");\n        label.call(wrap, wrapLength, wrapSplitter);\n\n        label.attr(\"y\", titleBBox.height * 1.1 || 0);\n        label.attr(\"fill\", this.annotation.color);\n\n        var bbox = this.getNoteBBox();\n\n        this.a.select(\"rect.annotation-note-bg\").attr(\"width\", bbox.width + bgPaddingFinal.left + bgPaddingFinal.right).attr(\"height\", bbox.height + bgPaddingFinal.top + bgPaddingFinal.bottom).attr(\"x\", bbox.x - bgPaddingFinal.left).attr(\"y\", -bgPaddingFinal.top).attr(\"fill\", \"white\").attr(\"fill-opacity\", 0);\n      }\n    }\n  }]);\n  return d3NoteText;\n}(Type);\n\nvar d3Label = customType(d3NoteText, {\n  className: \"label\",\n  note: { align: \"middle\" }\n});\n\nvar d3Callout = customType(d3NoteText, {\n  className: \"callout\",\n  note: { lineType: \"horizontal\" }\n});\n\nvar d3CalloutElbow = customType(d3Callout, {\n  className: \"callout elbow\",\n  connector: { type: \"elbow\" }\n});\n\nvar d3CalloutCurve = customType(d3Callout, {\n  className: \"callout curve\",\n  connector: { type: \"curve\" }\n});\n\nvar d3Badge = customType(Type, {\n  className: \"badge\",\n  subject: { type: \"badge\" },\n  disable: [\"connector\", \"note\"]\n});\n\nvar d3CalloutCircle = customType(d3NoteText, {\n  className: \"callout circle\",\n  subject: { type: \"circle\" },\n  note: { lineType: \"horizontal\" },\n  connector: { type: \"elbow\" }\n});\n\nvar d3CalloutRect = customType(d3NoteText, {\n  className: \"callout rect\",\n  subject: { type: \"rect\" },\n  note: { lineType: \"horizontal\" },\n  connector: { type: \"elbow\" }\n});\n\nvar ThresholdMap = function (_d3Callout) {\n  inherits(ThresholdMap, _d3Callout);\n\n  function ThresholdMap() {\n    classCallCheck(this, ThresholdMap);\n    return possibleConstructorReturn(this, (ThresholdMap.__proto__ || Object.getPrototypeOf(ThresholdMap)).apply(this, arguments));\n  }\n\n  createClass(ThresholdMap, [{\n    key: \"mapY\",\n    value: function mapY(accessors) {\n      get(ThresholdMap.prototype.__proto__ || Object.getPrototypeOf(ThresholdMap.prototype), \"mapY\", this).call(this, accessors);\n      var a = this.annotation;\n      if ((a.subject.x1 || a.subject.x2) && a.data && accessors.y) {\n        a.y = accessors.y(a.data);\n      }\n      if ((a.subject.x1 || a.subject.x2) && !a.x) {\n        a.x = a.subject.x1 || a.subject.x2;\n      }\n    }\n  }, {\n    key: \"mapX\",\n    value: function mapX(accessors) {\n      get(ThresholdMap.prototype.__proto__ || Object.getPrototypeOf(ThresholdMap.prototype), \"mapX\", this).call(this, accessors);\n      var a = this.annotation;\n      if ((a.subject.y1 || a.subject.y2) && a.data && accessors.x) {\n        a.x = accessors.x(a.data);\n      }\n      if ((a.subject.y1 || a.subject.y2) && !a.y) {\n        a.y = a.subject.y1 || a.subject.y2;\n      }\n    }\n  }]);\n  return ThresholdMap;\n}(d3Callout);\n\nvar d3XYThreshold = customType(ThresholdMap, {\n  className: \"callout xythreshold\",\n  subject: { type: \"threshold\" }\n});\n\nvar newWithClass = function newWithClass(a, d, type, className, classID) {\n  var group = a.selectAll(type + \".\" + (classID || className)).data(d);\n  group.enter().append(type).merge(group).attr(\"class\", className);\n\n  group.exit().remove();\n  return a;\n};\n\nvar addHandlers = function addHandlers(dispatcher, annotation, _ref3) {\n  var component = _ref3.component,\n      name = _ref3.name;\n\n  if (component) {\n    component.on(\"mouseover.annotations\", function () {\n      dispatcher.call(name + \"over\", component, annotation);\n    }).on(\"mouseout.annotations\", function () {\n      return dispatcher.call(name + \"out\", component, annotation);\n    }).on(\"click.annotations\", function () {\n      return dispatcher.call(name + \"click\", component, annotation);\n    });\n  }\n};\n\n//Text wrapping code adapted from Mike Bostock\nvar wrap = function wrap(text, width, wrapSplitter) {\n  var lineHeight = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1.2;\n\n  text.each(function () {\n    var text = select(this),\n        words = text.text().split(wrapSplitter || /[ \\t\\r\\n]+/).reverse().filter(function (w) {\n      return w !== \"\";\n    });\n    var word = void 0,\n        line$$1 = [],\n        tspan = text.text(null).append(\"tspan\").attr(\"x\", 0).attr(\"dy\", 0.8 + \"em\");\n\n    while (word = words.pop()) {\n      line$$1.push(word);\n      tspan.text(line$$1.join(\" \"));\n      if (tspan.node().getComputedTextLength() > width && line$$1.length > 1) {\n        line$$1.pop();\n        tspan.text(line$$1.join(\" \"));\n        line$$1 = [word];\n        tspan = text.append(\"tspan\").attr(\"x\", 0).attr(\"dy\", lineHeight + \"em\").text(word);\n      }\n    }\n  });\n};\n\nvar bboxWithoutHandles = function bboxWithoutHandles(selection) {\n  var selector = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : \":not(.handle)\";\n\n  if (!selection) {\n    return { x: 0, y: 0, width: 0, height: 0 };\n  }\n\n  return selection.selectAll(selector).nodes().reduce(function (p, c) {\n    var bbox = c.getBBox();\n    p.x = Math.min(p.x, bbox.x);\n    p.y = Math.min(p.y, bbox.y);\n    p.width = Math.max(p.width, bbox.width);\n\n    var yOffset = c && c.attributes && c.attributes.y;\n    p.height = Math.max(p.height, (yOffset && parseFloat(yOffset.value) || 0) + bbox.height);\n    return p;\n  }, { x: 0, y: 0, width: 0, height: 0 });\n};\n\nfunction annotation() {\n  var annotations = [],\n      collection = void 0,\n      context = void 0,\n      //TODO: add canvas functionality\n  disable = [],\n      accessors = {},\n      accessorsInverse = {},\n      editMode = false,\n      ids = void 0,\n      type = d3Callout,\n      textWrap = void 0,\n      notePadding = void 0,\n      annotationDispatcher = dispatch(\"subjectover\", \"subjectout\", \"subjectclick\", \"connectorover\", \"connectorout\", \"connectorclick\", \"noteover\", \"noteout\", \"noteclick\", \"dragend\", \"dragstart\"),\n      sel = void 0;\n\n  var annotation = function annotation(selection) {\n    sel = selection;\n    //TODO: check to see if this is still needed\n    if (!editMode) {\n      selection.selectAll(\"circle.handle\").remove();\n    }\n\n    var translatedAnnotations = annotations.map(function (a) {\n      if (!a.type) {\n        a.type = type;\n      }\n      if (!a.disable) {\n        a.disable = disable;\n      }\n      return new Annotation(a);\n    });\n\n    collection = collection || new AnnotationCollection({\n      annotations: translatedAnnotations,\n      accessors: accessors,\n      accessorsInverse: accessorsInverse,\n      ids: ids\n    });\n\n    var annotationG = selection.selectAll(\"g\").data([collection]);\n    annotationG.enter().append(\"g\").attr(\"class\", \"annotations\");\n\n    var group = selection.select(\"g.annotations\");\n    newWithClass(group, collection.annotations, \"g\", \"annotation\");\n\n    var annotation = group.selectAll(\"g.annotation\");\n\n    annotation.each(function (d) {\n      var a = select(this);\n\n      a.attr(\"class\", \"annotation\");\n\n      newWithClass(a, [d], \"g\", \"annotation-connector\");\n      newWithClass(a, [d], \"g\", \"annotation-subject\");\n      newWithClass(a, [d], \"g\", \"annotation-note\");\n      newWithClass(a.select(\"g.annotation-note\"), [d], \"g\", \"annotation-note-content\");\n      d.type = d.type.toString() === \"[object Object]\" ? d.type : new d.type({\n        a: a,\n        annotation: d,\n        textWrap: textWrap,\n        notePadding: notePadding,\n        editMode: editMode,\n        dispatcher: annotationDispatcher,\n        accessors: accessors\n      });\n      d.type.draw();\n      d.type.drawText && d.type.drawText();\n    });\n  };\n\n  annotation.json = function () {\n    /* eslint-disable no-console */\n    console.log(\"Annotations JSON was copied to your clipboard. Please note the annotation type is not JSON compatible. It appears in the objects array in the console, but not in the copied JSON.\", collection.json);\n    /* eslint-enable no-console */\n    window.copy(JSON.stringify(collection.json.map(function (a) {\n      delete a.type;\n      return a;\n    })));\n    return annotation;\n  };\n\n  annotation.update = function () {\n    if (annotations && collection) {\n      annotations = collection.annotations.map(function (a) {\n        a.type.draw();\n        return a;\n      });\n    }\n    return annotation;\n  };\n\n  annotation.updateText = function () {\n    if (collection) {\n      collection.updateText(textWrap);\n      annotations = collection.annotations;\n    }\n    return annotation;\n  };\n\n  annotation.updatedAccessors = function () {\n    collection.setPositionWithAccessors();\n    annotations = collection.annotations;\n    return annotation;\n  };\n\n  annotation.disable = function (_) {\n    if (!arguments.length) return disable;\n    disable = _;\n    if (collection) {\n      collection.updateDisable(disable);\n      annotations = collection.annotations;\n    }\n    return annotation;\n  };\n\n  annotation.textWrap = function (_) {\n    if (!arguments.length) return textWrap;\n    textWrap = _;\n    if (collection) {\n      collection.updateTextWrap(textWrap);\n      annotations = collection.annotations;\n    }\n    return annotation;\n  };\n\n  annotation.notePadding = function (_) {\n    if (!arguments.length) return notePadding;\n    notePadding = _;\n    if (collection) {\n      collection.updateNotePadding(notePadding);\n      annotations = collection.annotations;\n    }\n    return annotation;\n  };\n  //todo think of how to handle when undefined is sent\n  annotation.type = function (_, settings) {\n    if (!arguments.length) return type;\n    type = _;\n    if (collection) {\n      collection.annotations.map(function (a) {\n        a.type.note && a.type.note.selectAll(\"*:not(.annotation-note-content)\").remove();\n        a.type.noteContent && a.type.noteContent.selectAll(\"*\").remove();\n        a.type.subject && a.type.subject.selectAll(\"*\").remove();\n        a.type.connector && a.type.connector.selectAll(\"*\").remove();\n        a.type.typeSettings = {};\n        a.type = type;\n\n        a.subject = settings && settings.subject || a.subject;\n        a.connector = settings && settings.connector || a.connector;\n        a.note = settings && settings.note || a.note;\n      });\n\n      annotations = collection.annotations;\n    }\n    return annotation;\n  };\n\n  annotation.annotations = function (_) {\n    if (!arguments.length) return collection && collection.annotations || annotations;\n    annotations = _;\n\n    if (collection && collection.annotations) {\n      var rerun = annotations.some(function (d) {\n        return !d.type || d.type.toString() !== \"[object Object]\";\n      });\n\n      if (rerun) {\n        collection = null;\n        annotation(sel);\n      } else {\n        collection.annotations = annotations;\n      }\n    }\n    return annotation;\n  };\n\n  annotation.context = function (_) {\n    if (!arguments.length) return context;\n    context = _;\n    return annotation;\n  };\n\n  annotation.accessors = function (_) {\n    if (!arguments.length) return accessors;\n    accessors = _;\n    return annotation;\n  };\n\n  annotation.accessorsInverse = function (_) {\n    if (!arguments.length) return accessorsInverse;\n    accessorsInverse = _;\n    return annotation;\n  };\n\n  annotation.ids = function (_) {\n    if (!arguments.length) return ids;\n    ids = _;\n    return annotation;\n  };\n\n  annotation.editMode = function (_) {\n    if (!arguments.length) return editMode;\n    editMode = _;\n\n    if (sel) {\n      sel.selectAll(\"g.annotation\").classed(\"editable\", editMode);\n    }\n\n    if (collection) {\n      collection.editMode(editMode);\n      annotations = collection.annotations;\n    }\n    return annotation;\n  };\n\n  annotation.collection = function (_) {\n    if (!arguments.length) return collection;\n    collection = _;\n    return annotation;\n  };\n\n  annotation.on = function () {\n    var value = annotationDispatcher.on.apply(annotationDispatcher, arguments);\n    return value === annotationDispatcher ? annotation : value;\n  };\n\n  return annotation;\n}\n\nvar index = {\n  annotation: annotation,\n  annotationTypeBase: Type,\n  annotationLabel: d3Label,\n  annotationCallout: d3Callout,\n  annotationCalloutCurve: d3CalloutCurve,\n  annotationCalloutElbow: d3CalloutElbow,\n  annotationCalloutCircle: d3CalloutCircle,\n  annotationCalloutRect: d3CalloutRect,\n  annotationXYThreshold: d3XYThreshold,\n  annotationBadge: d3Badge,\n  annotationCustomType: customType\n};\n\nexport { annotation, Type as annotationTypeBase, d3Label as annotationLabel, d3Callout as annotationCallout, d3CalloutCurve as annotationCalloutCurve, d3CalloutElbow as annotationCalloutElbow, d3CalloutCircle as annotationCalloutCircle, d3CalloutRect as annotationCalloutRect, d3XYThreshold as annotationXYThreshold, d3Badge as annotationBadge, customType as annotationCustomType };export default index;\n//# sourceMappingURL=indexRollupNext.js.map\n","import { SVGWidget } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { interpolate as d3Interpolate, interpolateHcl as d3InterpolateHcl } from \"d3-interpolate\";\nimport { scaleLinear } from \"d3-scale\";\nimport { Arc, arc as d3Arc, DefaultArcObject } from \"d3-shape\";\nimport { annotation as d3Annotation, annotationCalloutElbow } from \"d3-svg-annotation\";\n\nfunction value2Angle(value: number): number {\n    return (value - 0.5) * .65 * 2 * Math.PI;\n}\n\nfunction pointOnArc(angle: number, radius: number): { x: number, y: number } {\n    return {\n        x: Math.cos(angle - Math.PI / 2) * radius,\n        y: Math.sin(angle - Math.PI / 2) * radius\n    };\n}\n\nfunction indicatorTranslate(angle: number, radius: number, inner: boolean = false) {\n    const point = pointOnArc(angle, radius);\n    const rotation = angle * 180 / Math.PI + (inner === true ? 180 : 0);\n    return `translate(${point.x}, ${point.y}) rotate(${rotation})`;\n}\n\ntype IndicatorDatum = { angle: number };\nfunction indicatorTween(newAngle: number, radius: number, inner: boolean = false) {\n    return function (d: IndicatorDatum) {\n        const interpolate = d3Interpolate(d.angle, newAngle);\n        d.angle = newAngle;\n        return function (t: number) {\n            return indicatorTranslate(interpolate(t), radius, inner);\n        };\n    };\n}\n\nfunction arcTween(startAngle: number, endAngle: number, arc: Arc<any, DefaultArcObject>) {\n    return function (d: DefaultArcObject) {\n        const startInterpolate = d3Interpolate(d.startAngle, startAngle);\n        const endInterpolate = d3Interpolate(d.endAngle, endAngle);\n        return function (t: number): string {\n            d.startAngle = startInterpolate(t);\n            d.endAngle = endInterpolate(t);\n            return arc(d)!;\n        };\n    };\n}\n\nexport class Gauge extends SVGWidget {\n\n    private _d3Arc: Arc<any, DefaultArcObject> = d3Arc()\n        .innerRadius(85)\n        .outerRadius(100)\n        ;\n    private _colorScale = scaleLinear<string, string>()\n        .interpolate(d3InterpolateHcl)\n        ;\n\n    protected _usageArc: any;\n    protected _meanArc: any;\n    protected _freeArc: any;\n    protected _indInner: any;\n    protected _indOuter: any;\n    protected _centerTextG: any;\n    protected _centerText: any;\n    protected _bottomText: any;\n    protected _tooltipG: any;\n    protected _mainTooltip: any;\n\n    constructor() {\n        super();\n    }\n\n    protected tip(d: any) {\n        if (d === null || d.label === \"\") {\n            this._tooltipG\n                .transition()\n                .style(\"opacity\", 0)\n                .on(\"interrupt end\", () => {\n                    this._tooltipG\n                        .selectAll(\"g\")\n                        .remove()\n                        ;\n                })\n                ;\n        } else {\n            this._tooltipG\n                .interrupt()\n                .style(\"opacity\", 1)\n                ;\n            d.w = (this._centerText.datum() as any).w + 10;\n            let lineType = \"horizontal\";\n            let xOffset = 0;\n            let yOffset = 5;\n            let padding: number | undefined = 5;\n            if (d.y >= 5 && d.y <= 25) {\n                xOffset = d.x < 0 ? -d.w / 2 : d.w / 2;\n                yOffset = 12.5;\n                padding = undefined;\n                lineType = \"vertical\";\n            } else if (d.y > 25) {\n                yOffset = 25;\n                padding = 0;\n            }\n            const annotationtip = d3Annotation()\n                .type(annotationCalloutElbow)\n                .annotations([{\n                    data: d,\n                    dx: -d.x + xOffset,\n                    dy: -d.y + yOffset,\n                    color: \"black\",\n                    note: {\n                        label: d.label,\n                        lineType,\n                        padding,\n                        align: \"middle\"\n                    }\n                }])\n                .accessors({ x: (d2: any) => d2.x, y: (d2: any) => d2.y });\n            this._tooltipG.call(annotationtip as any);\n        }\n    }\n\n    protected calcSize(textElement, width: number, height: number): { width: number, height: number, scale: number } {\n        const bb = (textElement.node() as any).getBBox();\n        const widthTransform = width / bb.width;\n        const heightTransform = height / bb.height;\n        const scale = widthTransform < heightTransform ? widthTransform : heightTransform;\n        return {\n            width: bb.width,\n            height: bb.height,\n            scale\n        };\n    }\n\n    protected updateText(textElement, x: number, y: number, w: number, h: number) {\n        textElement\n            .datum({ x, y, w, h })\n            .attr(\"transform\", null)\n            ;\n        const size = this.calcSize(textElement, w, h);\n        const x2 = x + w / 2 - size.width / 2 * size.scale;\n        const y2 = y + h / 2 - size.height / 2 * size.scale;\n        textElement.attr(\"transform\", `translate(${x2}, ${y2}) scale(${size.scale})`);\n    }\n\n    calcWidth(): number {\n        return Math.min(this.width(), this.height(), this.maxDiameter());\n    }\n\n    enter(domNode: HTMLElement, element) {\n        super.enter(domNode, element);\n\n        element.on(\"click\", (d: Gauge) => {\n            this.click(d);\n        });\n\n        this._usageArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\n            .style(\"fill\", \"green\")\n            .on(\"mousemove\", (d: any) => {\n                const [x, y] = this._d3Arc.centroid(d);\n                this.tip({ x, y, label: this.valueDescription() });\n            })\n            .on(\"mouseout\", (d: any) => {\n                this.tip(null);\n            })\n            ;\n        this._freeArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(1) })\n            .style(\"fill\", \"lightGrey\")\n            ;\n        this._meanArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\n            .style(\"fill\", \"black\")\n            .on(\"mousemove\", (d: any) => {\n                const [x, y] = this._d3Arc.centroid(d);\n                this.tip({ x, y, label: this.tickValueDescription() });\n            })\n            .on(\"mouseout\", (d: any) => {\n                this.tip(null);\n            })\n            ;\n\n        this._mainTooltip = element.append(\"title\");\n\n        const context = this;\n        function appendIndicator() {\n            return element.append(\"path\").datum({ angle: value2Angle(0) })\n                .style(\"fill\", \"black\")\n                .style(\"stroke\", \"black\")\n                .attr(\"d\", \"M  0 0 l -3 -3 l 6 0 z\")\n                .on(\"mousemove\", (d: any) => {\n                    const [x, y] = context._d3Arc.centroid(context._meanArc.datum() as any);\n                    context.tip({ x, y, label: context.tickValueDescription() });\n                })\n                .on(\"mouseout\", (d: any) => {\n                    context.tip(null);\n                })\n                ;\n        }\n        this._indInner = appendIndicator();\n        this._indOuter = appendIndicator();\n        this._centerText = element.append(\"text\")\n            .attr(\"dy\", \".66em\")\n            .style(\"fill\", \"green\")\n            .on(\"mousemove\", (d: any) => {\n                this.tip({ x: 0, y: 0, label: this.valueDescription() });\n            })\n            .on(\"mouseout\", (d: any) => {\n                this.tip(null);\n            })\n            ;\n        this._bottomText = element.append(\"text\")\n            .attr(\"dy\", \".66em\")\n            .on(\"mousemove\", (d: any) => {\n                this.tip({ x: 0, y: d.y, label: this.titleDescription() });\n            })\n            .on(\"mouseout\", (d: any) => {\n                this.tip(null);\n            })\n            ;\n\n        this._tooltipG = element.append(\"g\")\n            .attr(\"class\", \"annotation-tip\")\n            ;\n    }\n\n    update(domNode: HTMLElement, element) {\n        super.update(domNode, element);\n\n        this._colorScale\n            .domain(this.colorDomain())\n            .range(this.colorRange())\n            ;\n        element\n            .attr(\"title\", this.tooltip())\n            .style(\"cursor\", this.click !== Gauge.prototype.click ? \"pointer\" : null)\n            ;\n\n        const innerRadius = this.calcWidth() / 3;\n        const outerRadius = this.calcWidth() / 2 - 5;\n        this._d3Arc\n            .innerRadius(innerRadius)\n            .outerRadius(outerRadius)\n            ;\n\n        const val = this.value();\n        const tickVal = this.tickValue();\n\n        this._usageArc\n            .style(\"fill\", this._colorScale(val))\n            .transition()\n            .duration(750)\n            .attrTween(\"d\", arcTween(value2Angle(0), value2Angle(val), this._d3Arc))\n            ;\n\n        this._freeArc\n            .style(\"fill\", this.emptyColor())\n            .transition()\n            .duration(750)\n            .attrTween(\"d\", arcTween(value2Angle(val), value2Angle(1), this._d3Arc))\n            ;\n\n        this._meanArc\n            .style(\"fill\", this.tickColor())\n            .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n            .transition()\n            .duration(750)\n            .attrTween(\"d\", arcTween(value2Angle(tickVal - 0.001), value2Angle(tickVal + 0.001), this._d3Arc))\n            ;\n\n        this._indInner\n            .style(\"fill\", this.tickColor())\n            .style(\"stroke\", this.tickColor())\n            .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n            .transition()\n            .duration(750)\n            .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), innerRadius, true))\n            ;\n\n        this._indOuter\n            .style(\"fill\", this.tickColor())\n            .style(\"stroke\", this.tickColor())\n            .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n            .transition()\n            .duration(750)\n            .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), outerRadius))\n            ;\n\n        this._centerText\n            .style(\"fill\", this._colorScale(val))\n            .text(d3Format(\".0%\")(val))\n            ;\n\n        this._bottomText\n            .style(\"fill\", this.click !== Gauge.prototype.click ? this.titleClickColor() : this.titleColor())\n            .style(\"text-decoration\", this.click !== Gauge.prototype.click ? \"underline\" : null)\n            .text(this.title())\n            ;\n\n        //  Update Text  ---\n        const point = pointOnArc(value2Angle(1), innerRadius - 8);\n        this.updateText(this._centerText, -point.x, -point.y, 2 * point.x, 2 * point.y);\n\n        const point2 = pointOnArc(value2Angle(1), outerRadius);\n        point2.y += 5;\n        const width = this.calcWidth() - 20;\n        const height = this.calcWidth() / 2 - point2.y - 5;\n        this.updateText(this._bottomText, -width / 2, point2.y, width, height);\n\n        this._mainTooltip.text(this.tooltip());\n    }\n\n    // Events  ---\n    click(w: Gauge) {\n    }\n}\nGauge.prototype._class += \" chart_Gauge\";\n\nexport interface Gauge {\n    title(): string;\n    title(_: string): this;\n    titleDescription(): string;\n    titleDescription(_: string): this;\n    titleColor(): string;\n    titleColor(_: string): this;\n    titleClickColor(): string;\n    titleClickColor(_: string): this;\n\n    maxDiameter(): number;\n    maxDiameter(_: number): this;\n    value(): number;\n    value(_: number): this;\n    valueDescription(): string;\n    valueDescription(_: string): this;\n    showTick(): boolean;\n    showTick(_: boolean): this;\n    tickValue(): number;\n    tickValue(_: number): this;\n    tickValueDescription(): string;\n    tickValueDescription(_: string): this;\n    tooltip(): string;\n    tooltip(_: string): this;\n\n    tickColor(): string;\n    tickColor(_: string): this;\n    emptyColor(): string;\n    emptyColor(_: string): this;\n    colorDomain(): number[];\n    colorDomain(_: number[]): this;\n    colorRange(): string[];\n    colorRange(_: string[]): this;\n}\n\nGauge.prototype.publish(\"title\", \"\", \"string\", \"Title\");\nGauge.prototype.publish(\"titleDescription\", \"\", \"string\", \"Title Description\");\nGauge.prototype.publish(\"titleColor\", \"black\", \"html-color\", \"Color of the title text\");\nGauge.prototype.publish(\"titleClickColor\", \"blue\", \"html-color\", \"Color of the title text when clickable\");\n\nGauge.prototype.publish(\"maxDiameter\", 128, \"number\", \"Max Diameter\");\nGauge.prototype.publish(\"value\", 0, \"number\", \"Value\");\nGauge.prototype.publish(\"valueDescription\", \"\", \"string\", \"Value Description\");\nGauge.prototype.publish(\"showTick\", false, \"boolean\", \"Show Tick\");\nGauge.prototype.publish(\"tickValue\", 0, \"number\", \"Tick Value\");\nGauge.prototype.publish(\"tickValueDescription\", \"\", \"string\", \"Tick Value Description\");\nGauge.prototype.publish(\"tooltip\", \"\", \"string\", \"Tooltip\");\n\nGauge.prototype.publish(\"colorRange\", [\"green\", \"green\", \"green\", \"green\", \"green\", \"green\", \"green\", \"green\", \"orange\", \"red\", \"red\"], \"array\", \"Array of colors for the filled gauge portion. The fill color will be relative to the gauge value.\");\nGauge.prototype.publish(\"colorDomain\", [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1], \"array\", \"This array augments the mapping of the value to the fill colorRange.\");\nGauge.prototype.publish(\"emptyColor\", \"lightgrey\", \"html-color\", \"Color of the empty portion of the gauge\");\nGauge.prototype.publish(\"tickColor\", \"black\", \"html-color\", \"Color of the tick\");\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, InputField, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { degreesToRadians, normalizeRadians } from \"@hpcc-js/util\";\nimport { format as d3Format } from \"d3-format\";\nimport { interpolate as d3Interpolate } from \"d3-interpolate\";\nimport { select as d3Select } from \"d3-selection\";\nimport { arc as d3Arc, pie as d3Pie } from \"d3-shape\";\n\nimport \"../src/Pie.css\";\n\nconst sortAscending = (a, b) => a[1] - b[1] > 0 ? 1 : -1;\nconst sortDescending = (a, b) => a[1] - b[1] > 0 ? -1 : 1;\n\nexport class Pie extends SVGWidget {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"string\"\n    }, {\n        id: \"value\",\n        type: \"number\"\n    }];\n\n    protected _totalValue: number;\n\n    d3Pie;\n    d3Arc;\n    d3LabelArc;\n    private _labelPositions;\n    private _smallValueLabelHeight;\n    private _labelWidthLimit: number;\n    private _quadIdxArr;\n    private _minLabelTop = 0;\n    private _maxLabelBottom = 0;\n    private _seriesValueFormatter;\n    private _seriesPercentageFormatter;\n\n    constructor() {\n        super();\n        I2DChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n\n        this.d3Pie = d3Pie();\n\n        this.d3Arc = d3Arc();\n        this.d3LabelArc = d3Arc();\n        this\n            .tooltipTick_default(false)\n            .tooltipOffset_default(0)\n            ;\n    }\n\n    intersection(pointA, pointB) {\n        return this.intersectCircle(this.calcOuterRadius(), pointA, pointB);\n    }\n\n    calcInnerRadius() {\n        return this.innerRadius_exists() ? this.calcOuterRadius() * (this.innerRadius() as number) / 100 : 0;\n    }\n\n    calcOuterRadius() {\n        const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d }, false)), \"Verdana\", 12).width;\n        const horizontalLimit = this._size.width - (this.showLabels() ? maxTextWidth * 2 : 0) - 20;\n        const verticalLimit = this._size.height - 12 * 3 - (this.showLabels() ? this._smallValueLabelHeight : 0);\n        const outerRadius = Math.min(horizontalLimit, verticalLimit) / 2 - 2;\n        if ((horizontalLimit / 2) - 2 < this.minOuterRadius()) {\n            this._labelWidthLimit = maxTextWidth - (this.minOuterRadius() - ((horizontalLimit / 2) - 2));\n        } else {\n            this._labelWidthLimit = maxTextWidth;\n        }\n        if (outerRadius < this.minOuterRadius()) {\n            return this.minOuterRadius();\n        }\n        return outerRadius;\n    }\n\n    calcSmallValueLabelHeight() {\n        const smallDef = 0.1;\n        const totalVal = this.data().reduce((acc, n) => acc + n[1], 0);\n        let smallCount = 0;\n        this.data().forEach(row => {\n            if (row[1] / totalVal < smallDef) {\n                smallCount++;\n            }\n        });\n        return this.labelHeight() * smallCount;\n    }\n\n    calcTotalValue(): number {\n        return this.data().reduce((acc, d) => {\n            return acc + d[1];\n        }, 0);\n    }\n\n    calcPadAngleRadians(): number {\n        const paddingValue = this.slicePadding();\n        return paddingValue > 0 ? Math.min(paddingValue, 0.05) : 0;\n    }\n\n    getLabelText(d, truncate?) {\n        let len;\n        let label = d.data[0];\n        if (typeof this._labelWidthLimit !== \"undefined\" && truncate) {\n            const labelWidth = this.textSize(label, \"Verdana\", this.labelHeight()).width;\n            if (this._labelWidthLimit < labelWidth) {\n                len = label.length * (this._labelWidthLimit / labelWidth) - 3;\n                label = len < label.length ? label.slice(0, len) + \"...\" : label;\n            }\n        }\n        if (this.showSeriesValue()) {\n            label += ` : ${this._seriesValueFormatter(d.data[1])}`;\n        }\n        if (this.showSeriesPercentage()) {\n            let sum = this._totalValue;\n            const dm = this.dataMeta();\n            if (typeof dm.sum !== \"undefined\") {\n                sum = dm.sum;\n            }\n            const perc = (d.data[1] / sum) * 100;\n            label += ` : ${this._seriesPercentageFormatter(perc)}%`;\n        }\n        return label;\n    }\n\n    selection(): any[]; // any[] === single row\n    selection(_: any[]): this;\n    selection(_?: any[]): any[] | this {\n        if (!arguments.length) {\n            try {\n                return this._selection.selection2()[0]?.data;\n            } catch (e) {\n                return undefined;\n            }\n        }\n        //  Stringify to enable a deep equal\n        const strRow = JSON.stringify(_);\n        this._selection.selection2(d => strRow === JSON.stringify(d.data));\n    }\n\n    selectByLabel(_: string) {\n        const row = this.data().filter(row => row[0] === _)[0];\n        if (row) {\n            this.selection(row);\n        }\n    }\n\n    _slices;\n    _labels;\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection\n            .widgetElement(element)\n            .skipBringToTop(true)\n            ;\n\n        this._slices = element.append(\"g\");\n        this._labels = element.append(\"g\");\n\n        const context = this;\n\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d.data[0],\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(d.data[0]),\n                                    value: d.data[i + 1]\n                                };\n                            })\n                        });\n                    default:\n                        return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n                }\n            })\n            ;\n    }\n\n    update(_domNode, element) {\n        this.selectionGlow(!this.tabNavigation());\n        super.update(_domNode, element);\n        const context = this;\n\n        this.updateD3Pie();\n        this._palette = this._palette.switch(this.paletteID());\n        this._seriesValueFormatter = d3Format(this.seriesValueFormat() as string);\n        this._seriesPercentageFormatter = d3Format(this.seriesPercentageFormat() as string);\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n        this._smallValueLabelHeight = this.calcSmallValueLabelHeight();\n        this._totalValue = this.calcTotalValue();\n        const outerRadius = this.calcOuterRadius();\n        const innerRadius = Math.max(this.calcInnerRadius(), Math.min(outerRadius / 30, 6));\n        const labelRadius = outerRadius + 12;\n\n        this.d3Arc\n            .innerRadius(innerRadius)\n            .padRadius(outerRadius)\n            .outerRadius(outerRadius)\n            .padAngle(this.calcPadAngleRadians())\n            ;\n\n        this._quadIdxArr = [[], [], [], []];\n        const data = [...this.data()];\n        switch (this.sortDataByValue()) {\n            case \"ascending\":\n                data.sort(sortAscending);\n                break;\n            case \"descending\":\n                data.sort(sortDescending);\n                break;\n        }\n        const arc = this._slices.selectAll(\".arc\").data(this.d3Pie(data), d => d.data[0]);\n\n        this._labelPositions = [];\n\n        //  Enter  ---\n        arc.enter().append(\"g\")\n            .attr(\"class\", (d, i) => \"arc series series-\" + this.cssTag(d.data[0]))\n            .attr(\"opacity\", 0)\n            .call(this._selection.enter.bind(this._selection))\n            .on(\"click\", function (d) {\n                context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d) {\n                context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n            })\n            .on(\"keydown\", function (evt, d) {\n                const event = d3Event();\n                if (context.tabNavigation() && (event.code === \"Space\" || event.key === \"Enter\")) {\n                    event.preventDefault();\n                    context._selection.click(this);\n                }\n            })\n            .each(function (d, i) {\n                d3Select(this).append(\"path\")\n                    .on(\"mouseout.tooltip\", context.tooltip.hide)\n                    .on(\"mousemove.tooltip\", context.tooltip.show)\n                    .on(\"mouseover\", arcTween(0, 0))\n                    .on(\"mouseout\", arcTween(-5, 150))\n                    ;\n            })\n            .merge(arc).transition()\n            .attr(\"opacity\", 1)\n            .attr(\"tabindex\", context.tabNavigation() ? \"0\" : null)\n            .attr(\"role\", context.tabNavigation() ? \"button\" : null)\n            .attr(\"aria-label\", context.tabNavigation() ? (d: any) => `${d.data[0]}: ${d.data[1]}` : null)\n            .each(function (d, i) {\n                const quad = context.getQuadrant(midAngle(d));\n                context._quadIdxArr[quad].push(i);\n                d.outerRadius = outerRadius - 5;\n                const element2 = d3Select(this);\n                element2.select(\"path\").transition()\n                    .attr(\"d\", context.d3Arc)\n                    .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n                    ;\n            })\n            ;\n\n        //  Exit  ---\n        arc.exit().transition()\n            .style(\"opacity\", 0)\n            .remove()\n            ;\n        //  Labels  ---\n        this.d3LabelArc\n            .innerRadius(labelRadius)\n            .outerRadius(labelRadius)\n            ;\n        const text = this._labels.selectAll(\"text\").data(this.showLabels() ? this.d3Pie(data) : [], d => d.data[0]);\n\n        const mergedText = text.enter().append(\"text\")\n            .on(\"mouseout.tooltip\", context.tooltip.hide)\n            .on(\"mousemove.tooltip\", context.tooltip.show)\n            .attr(\"dy\", \".5em\")\n            .on(\"click\", function (d) {\n                context._slices.selectAll(\"g\").filter(function (d2) {\n                    if (d.data === d2.data) {\n                        context._selection.click(this);\n                        context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n                    }\n                });\n            })\n            .on(\"dblclick\", function (d) {\n                context._slices.selectAll(\"g\").filter(function (d2) {\n                    if (d.data === d2.data) {\n                        context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n                    }\n                });\n            })\n            .merge(text)\n            .text(d => this.getLabelText(d, true))\n            .each(function (d, i) {\n                const pos = context.d3LabelArc.centroid(d);\n                const mid_angle = midAngle(d);\n                pos[0] = labelRadius * (context.isLeftSide(mid_angle) ? 1 : -1);\n                context._labelPositions.push({\n                    top: pos[1],\n                    bottom: pos[1] + context.labelHeight()\n                });\n            });\n        if (this.showLabels()) {\n            this.adjustForOverlap();\n            mergedText.transition()\n                .style(\"font-size\", this.labelHeight() + \"px\")\n                .attr(\"transform\", (d, i) => {\n                    const pos = context.d3LabelArc.centroid(d);\n                    pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n                    pos[1] = context._labelPositions[i].top;\n                    return \"translate(\" + pos + \")\";\n                })\n                .style(\"text-anchor\", d => this.isLeftSide(midAngle(d)) ? \"start\" : \"end\");\n        }\n\n        text.exit()\n            .remove();\n\n        const polyline = this._labels.selectAll(\"polyline\").data(this.showLabels() ? this.d3Pie(data) : [], d => this.getLabelText(d, true));\n\n        polyline.enter()\n            .append(\"polyline\")\n            .merge(polyline).transition()\n            .attr(\"points\", function (d, i) {\n                const pos = context.d3LabelArc.centroid(d);\n                const pos1 = context.d3Arc.centroid(d);\n                const pos2 = [...pos];\n                pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n                pos[1] = context._labelPositions[i].top;\n                return [pos1, pos2, pos];\n            });\n\n        polyline.exit()\n            .remove();\n\n        if (this.showLabels()) {\n            this.centerOnLabels();\n        }\n        function midAngle(d) {\n            return d.startAngle + (d.endAngle - d.startAngle) / 2;\n        }\n\n        function arcTween(outerRadiusDelta, delay) {\n            return function () {\n                d3Select(this).transition().delay(delay).attrTween(\"d\", function (d: any) {\n                    const i = d3Interpolate(d.outerRadius, outerRadius + outerRadiusDelta);\n                    return function (t) { d.outerRadius = i(t); return context.d3Arc(d); };\n                });\n            };\n        }\n    }\n\n    isLeftSide(midAngle) {\n        midAngle = normalizeRadians(midAngle);\n        const isLeft = midAngle > Math.PI * 2 ? midAngle : midAngle < Math.PI && midAngle > 0;\n        return isLeft;\n    }\n\n    getQuadrant(radians) {\n        let quad = 0;\n        const rad = normalizeRadians(radians);\n        quad = rad <= Math.PI * 1.0 && rad >= Math.PI * 0.5 ? 3 : quad;\n        quad = rad <= Math.PI * 0.5 && rad >= Math.PI * 0.0 ? 2 : quad;\n        quad = rad <= Math.PI * 0.0 && rad >= Math.PI * -0.5 ? 1 : quad;\n        return quad;\n    }\n\n    centerOnLabels() {\n        const gY = this.pos().y;\n        const gY2 = gY * 2;\n        const radius = this.calcOuterRadius();\n        const top = Math.min(this._minLabelTop, -radius);\n        const bottom = Math.max(this._maxLabelBottom, radius);\n        const h = bottom - top;\n        const heightDiff = gY2 - h;\n        const absTop = Math.abs(this._minLabelTop);\n        let yShift = 0;\n        if (bottom > gY) {\n            yShift = gY - bottom + (this.labelHeight() / 2);\n            yShift -= heightDiff / 2;\n        } else if (top < 0 && absTop > gY) {\n            yShift = absTop - gY + (this.labelHeight() / 2);\n            yShift += heightDiff / 2;\n        }\n        const pos = this.pos();\n        this.pos({\n            y: pos.y + yShift,\n            x: pos.x\n        });\n    }\n\n    adjustForOverlap() {\n        const labelHeight = this.labelHeight();\n        this._quadIdxArr.forEach((arr, quad) => {\n            this._quadIdxArr[quad].sort((a, b) => {\n                if (quad === 1 || quad === 2) {\n                    return this._labelPositions[a].top > this._labelPositions[b].top ? -1 : 1;\n                } else if (quad === 0 || quad === 3) {\n                    return this._labelPositions[a].top > this._labelPositions[b].top ? 1 : -1;\n                }\n            });\n            let prevTop;\n            this._quadIdxArr[quad].forEach((n, i) => {\n                if (i > 0) {\n                    if (quad === 1 || quad === 2) {\n                        if (prevTop < this._labelPositions[n].bottom) {\n                            const overlap = this._labelPositions[n].bottom - prevTop;\n                            this._labelPositions[n].top -= overlap;\n                            this._labelPositions[n].bottom -= overlap;\n                        }\n                    } else if (quad === 0 || quad === 3) {\n                        if (prevTop + labelHeight > this._labelPositions[n].top) {\n                            const overlap = Math.abs(this._labelPositions[n].top) - Math.abs(prevTop + labelHeight);\n                            this._labelPositions[n].top -= overlap;\n                            this._labelPositions[n].bottom -= overlap;\n                        }\n                    }\n                }\n                prevTop = this._labelPositions[n].top;\n            });\n        });\n        this._minLabelTop = 0;\n        this._maxLabelBottom = 0;\n        this._quadIdxArr.forEach((arr, quad) => {\n            this._quadIdxArr[quad].forEach((n, i) => {\n                if (this._minLabelTop > this._labelPositions[n].top) {\n                    this._minLabelTop = this._labelPositions[n].top;\n                }\n                if (this._maxLabelBottom < this._labelPositions[n].bottom) {\n                    this._maxLabelBottom = this._labelPositions[n].bottom;\n                }\n            });\n        });\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n\n    updateD3Pie() {\n        const startAngle = normalizeRadians(degreesToRadians(this.startAngle()));\n\n        switch (this.sortDataByValue()) {\n            case \"ascending\":\n                this.d3Pie.sort(sortAscending);\n                break;\n            case \"descending\":\n                this.d3Pie.sort(sortDescending);\n                break;\n            default:\n                this.d3Pie.sort(null);\n        }\n\n        this.d3Pie\n            .padAngle(this.calcPadAngleRadians())\n            .startAngle(startAngle)\n            .endAngle(2 * Math.PI + startAngle)\n            .value(function (d) {\n                return d[1];\n            })\n            ;\n    }\n}\nPie.prototype._class += \" chart_Pie\";\nPie.prototype.implements(I2DChart.prototype);\nPie.prototype.implements(ITooltip.prototype);\nPie.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface Pie {\n    showSeriesValue(): boolean;\n    showSeriesValue(_: boolean): this;\n    seriesValueFormat(): string;\n    seriesValueFormat(_: string): this;\n    showSeriesPercentage(): boolean;\n    showSeriesPercentage(_: boolean): this;\n    minOuterRadius(): number;\n    minOuterRadius(_: number): this;\n    startAngle(): number;\n    startAngle(_: number): this;\n    labelHeight(): number;\n    labelHeight(_: number): this;\n    slicePadding(): number;\n    slicePadding(_: number): this;\n    seriesPercentageFormat(): string;\n    seriesPercentageFormat(_: string): this;\n    showLabels(): boolean;\n    showLabels(_: boolean): this;\n    sortDataByValue(): \"none\" | \"ascending\" | \"descending\";\n    sortDataByValue(_: \"none\" | \"ascending\" | \"descending\"): this;\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    outerText(): boolean;\n    outerText(_: boolean): this;\n    innerRadius(): number;\n    innerRadius(_: number): this;\n    innerRadius_exists(): boolean;\n\n    //  I2DChart\n    _palette;\n    fillColor(row: any[], column: string, value: number): string;\n    textColor(row: any[], column: string, value: number): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n    tooltipTick(): boolean;\n    tooltipTick(_: boolean): Pie;\n    tooltipTick_default(): boolean;\n    tooltipTick_default(_: boolean): Pie;\n    tooltipOffset(): number;\n    tooltipOffset(_: number): Pie;\n    tooltipOffset_default(): number;\n    tooltipOffset_default(_: number): Pie;\n\n    //  SimpleSelectionMixin\n    _selection: Utility.SimpleSelection;\n\n    // Tab Navigation\n    tabNavigation(): boolean;\n    tabNavigation(_: boolean): this;\n}\nPie.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, wedge labels will display\");\nPie.prototype.publish(\"showSeriesValue\", false, \"boolean\", \"Append data series value next to label\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"seriesValueFormat\", \",.0f\", \"string\", \"Number format used for formatting series values\", null, { disable: w => !w.showSeriesValue() });\nPie.prototype.publish(\"showSeriesPercentage\", false, \"boolean\", \"Append data series percentage next to label\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"seriesPercentageFormat\", \",.0f\", \"string\", \"Number format used for formatting series percentages\", null, { disable: w => !w.showSeriesPercentage() });\nPie.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Pie.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nPie.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nPie.prototype.publish(\"innerRadius\", 0, \"number\", \"Sets inner pie hole radius as a percentage of the radius of the pie chart\", null, { tags: [\"Basic\"], range: { min: 0, step: 1, max: 100 } });\nPie.prototype.publish(\"minOuterRadius\", 20, \"number\", \"Minimum outer radius (pixels)\");\nPie.prototype.publish(\"startAngle\", 0, \"number\", \"Starting angle of the first (and largest) wedge (degrees)\");\nPie.prototype.publish(\"labelHeight\", 12, \"number\", \"Font size of labels (pixels)\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"slicePadding\", 0.01, \"number\", \"Padding between pie slices (converted to pixels)\", null, { tags: [\"Basic\"], range: { min: 0, step: 0.01, max: 0.2 } });\nPie.prototype.publish(\"sortDataByValue\", \"descending\", \"set\", \"Sort data by value\", [\"none\", \"ascending\", \"descending\"]);\nPie.prototype.publish(\"tabNavigation\", false, \"boolean\", \"Enable or disable tab navigation\");\n","import { Pie } from \"./Pie.ts\";\n\nexport class HalfPie extends Pie {\n    constructor() {\n        super();\n    }\n    postUpdate(domNode, element) {\n        super.postUpdate(domNode, element);\n        let x = this._pos.x;\n        let y = this._pos.y;\n        if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\n            x -= this._size.width / 2;\n            y -= this._size.height / 2;\n        }\n        y += (this._size.height / 4);\n        this._element.attr(\"transform\", \"translate(\" + x + \",\" + y + \")scale(\" + this._widgetScale + \")\");\n    }\n    updateD3Pie() {\n        super.updateD3Pie();\n        this.d3Pie\n            .startAngle(-Math.PI / 2)\n            .endAngle(Math.PI / 2)\n            ;\n    }\n}\nHalfPie.prototype._class += \" chart_HalfPie\";\n","import { max, Palette } from \"@hpcc-js/common\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nexport class Heat extends XYAxis {\n\n    protected _domForeignObject;\n    protected _domCanvas;\n    protected _heat;\n\n    constructor() {\n        super();\n        this\n            .xAxisGuideLines_default(true)\n            .yAxisGuideLines_default(true)\n            ;\n    }\n\n    radius(r: number): this {\n        this.radiusX(r);\n        this.radiusY(r);\n        return this;\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n        this._domForeignObject = this.svg.insert(\"foreignObject\", `#${this.id() + \"_clippath\"}`);\n        this._domCanvas = this._domForeignObject.append(\"xhtml:body\")\n            .style(\"margin\", \"0px\")\n            .style(\"padding\", \"0px\")\n            .style(\"background-color\", \"transparent\")\n            .append(\"canvas\")\n            ;\n        this._heat = simpleheat(this._domCanvas.node());\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element);\n\n        this._palette = this._palette.switch(this.paletteID());\n\n        let width = this.width() - this.margin.left - this.margin.right;\n        if (width < 0) width = 0;\n        let height = this.height() - this.margin.top - this.margin.bottom;\n        if (height < 0) height = 0;\n\n        this._domForeignObject\n            .attr(\"x\", this.margin.left)\n            .attr(\"y\", this.margin.top)\n            .attr(\"width\", width)\n            .attr(\"height\", height)\n            ;\n        this._domCanvas\n            .attr(\"width\", width)\n            .attr(\"height\", height)\n            ;\n\n        const data = host.orientation() === \"horizontal\" ?\n            this.data().map(r => [host.dataPos(r[0]), host.valuePos(r[1]), r[2]]) :\n            this.data().map(r => [host.valuePos(r[1]), host.dataPos(r[0]), r[2]])\n            ;\n\n        const maxWeight = this.maxWeight_exists() ? this.maxWeight() : max(data, r => r[2]);\n\n        if (this.paletteID() !== \"default\") {\n            const gradient = {};\n            const count = 8;\n            const reverse = this.reversePalette();\n            for (let i = 0; i < count; ++i) {\n                gradient[i / count] = this._palette((reverse ? count - i : i) / count, 0, 1);\n            }\n            this._heat.gradient(gradient);\n        } else {\n            this._heat.gradient(this._heat.defaultGradient);\n        }\n\n        this._heat.resize();\n\n        const radiusX = this.radiusAsPercent() ? this.radiusX() * width / 100 : this.radiusX();\n        const radiusY = this.radiusAsPercent() ? this.radiusY() * height / 100 : this.radiusY();\n\n        this._heat\n            .clear()\n            .radius(radiusX, radiusY, this.blur())\n            .max(maxWeight)\n            .data(data)\n            .draw(this.minOpacity())\n            ;\n    }\n}\n\nHeat.prototype._class += \" chart_Heat\";\nHeat.prototype._palette = Palette.rainbow(\"default\");\n\nexport interface Heat {\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    reversePalette(): boolean;\n    reversePalette(_: boolean): this;\n\n    radiusX(): number;\n    radiusX(_: number): this;\n    radiusY(): number;\n    radiusY(_: number): this;\n    radiusAsPercent(): boolean;\n    radiusAsPercent(_: boolean): this;\n    blur(): number;\n    blur(_: number): this;\n\n    maxWeight(): number;\n    maxWeight(_: number): this;\n    maxWeight_exists(): boolean;\n\n    minOpacity(): number;\n    minOpacity(_: number): this;\n}\n\nHeat.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Heat.prototype._palette.switch(), { tags: [\"Basic\"] });\nHeat.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nHeat.prototype.publish(\"reversePalette\", false, \"boolean\", \"Reverse Palette Colors\", null, { disable: w => w.paletteID() === \"default\" });\n\nHeat.prototype.publish(\"radiusX\", 25, \"number\", \"Point X radius (25 by default)\");\nHeat.prototype.publish(\"radiusY\", 25, \"number\", \"Point Y radius (25 by default)\");\nHeat.prototype.publish(\"radiusAsPercent\", false, \"boolean\", \"Calculate RadiusX + RadiusY as % of size\");\nHeat.prototype.publish(\"blur\", 15, \"number\", \"Point blur radius (15 by default)\");\n\nHeat.prototype.publish(\"maxWeight\", undefined, \"number\", \"Clamp max weight to value (optional), omitting uses max data point\", undefined, { optional: true });\nHeat.prototype.publish(\"minOpacity\", 0.05, \"number\", \"Minimum point opacity (0.05 by default)\");\n\n//  The following code is a modified version of \n//   - https://github.com/mourner/simpleheat\n//   - Licensed under BSD-2-Clause - https://github.com/mourner/simpleheat/blob/gh-pages/LICENSE\n//  Changes:\n//    *  Fixed TS syntax issues\n//    *  Added support for eliptical shapes instead of circles\n\nfunction simpleheat(canvas): void {\n    if (!(this instanceof simpleheat)) return new simpleheat(canvas);\n\n    this._canvas = canvas = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\n\n    this._ctx = canvas.getContext(\"2d\");\n    this._width = canvas.width;\n    this._height = canvas.height;\n\n    this._max = 1;\n    this._data = [];\n}\n\nsimpleheat.prototype = {\n\n    defaultRadius: 25,\n\n    defaultGradient: {\n        0.4: \"blue\",\n        0.6: \"cyan\",\n        0.7: \"lime\",\n        0.8: \"yellow\",\n        1.0: \"red\"\n    },\n\n    data: function (data) {\n        this._data = data;\n        return this;\n    },\n\n    max: function (max) {\n        this._max = max;\n        return this;\n    },\n\n    add: function (point) {\n        this._data.push(point);\n        return this;\n    },\n\n    clear: function () {\n        this._data = [];\n        return this;\n    },\n\n    radius: function (rX, rY, blur) {\n        blur = blur === undefined ? 15 : blur;\n\n        // create a grayscale blurred ellipse image that we'll use for drawing points\n        const ellipse = this._ellipse = this._createCanvas();\n        const ctx = ellipse.getContext(\"2d\");\n        const rX2 = this._r = rX + blur;\n        const rY2 = this._r = rY + blur;\n\n        ellipse.width = rX2 * 2;\n        ellipse.height = rY2 * 2;\n\n        ctx.shadowOffsetX = ctx.shadowOffsetY = rX2 * 2;\n        ctx.shadowOffsetY = ctx.shadowOffsetY = rY2 * 2;\n        ctx.shadowBlur = blur;\n        ctx.shadowColor = \"black\";\n\n        ctx.beginPath();\n        ctx.ellipse(-rX2, -rY2, rX, rY, 0, 0, Math.PI * 2, true);\n        ctx.closePath();\n        ctx.fill();\n\n        return this;\n    },\n\n    resize: function () {\n        this._width = this._canvas.width;\n        this._height = this._canvas.height;\n    },\n\n    gradient: function (grad) {\n        // create a 256x1 gradient that we'll use to turn a grayscale heatmap into a colored one\n        const canvas = this._createCanvas(),\n            ctx = canvas.getContext(\"2d\"),\n            gradient = ctx.createLinearGradient(0, 0, 0, 256);\n\n        canvas.width = 1;\n        canvas.height = 256;\n\n        for (const i in grad) {\n            gradient.addColorStop(+i, grad[i]);\n        }\n\n        ctx.fillStyle = gradient;\n        ctx.fillRect(0, 0, 1, 256);\n\n        this._grad = ctx.getImageData(0, 0, 1, 256).data;\n\n        return this;\n    },\n\n    draw: function (minOpacity) {\n        if (!this._ellipse) this.radius(this.defaultRadius, this.defaultRadius);\n        if (!this._grad) this.gradient(this.defaultGradient);\n\n        const ctx = this._ctx;\n\n        ctx.clearRect(0, 0, this._width, this._height);\n\n        // draw a grayscale heatmap by putting a blurred ellipse at each data point\n        for (let i = 0, len = this._data.length, p; i < len; i++) {\n            p = this._data[i];\n            if (p[2] < 0) {\n                p[2] = 0;\n            } else if (p[2] > this._max) {\n                p[2] = this._max;\n            }\n            ctx.globalAlpha = Math.max(p[2] / this._max, minOpacity === undefined ? 0.05 : minOpacity);\n            ctx.drawImage(this._ellipse, p[0] - this._r, p[1] - this._r);\n        }\n\n        // colorize the heatmap, using opacity value of each pixel to get the right color from our gradient\n        const colored = ctx.getImageData(0, 0, this._width, this._height);\n        this._colorize(colored.data, this._grad);\n        ctx.putImageData(colored, 0, 0);\n\n        return this;\n    },\n\n    _colorize: function (pixels, gradient) {\n        for (let i = 0, len = pixels.length, j; i < len; i += 4) {\n            j = pixels[i + 3] * 4; // get gradient color from opacity value\n\n            if (j) {\n                pixels[i] = gradient[j];\n                pixels[i + 1] = gradient[j + 1];\n                pixels[i + 2] = gradient[j + 2];\n            }\n        }\n    },\n\n    _createCanvas: function () {\n        if (typeof document !== \"undefined\") {\n            return document.createElement(\"canvas\");\n        } else {\n            // create a new canvas instance in node.js\n            // the canvas class needs to have a default constructor without any parameter\n            return new this._canvas.constructor();\n        }\n    }\n};\n","var thirdPi = Math.PI / 3,\n    angles = [0, thirdPi, 2 * thirdPi, 3 * thirdPi, 4 * thirdPi, 5 * thirdPi];\n\nfunction pointX(d) {\n  return d[0];\n}\n\nfunction pointY(d) {\n  return d[1];\n}\n\nexport default function() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 1,\n      y1 = 1,\n      x = pointX,\n      y = pointY,\n      r,\n      dx,\n      dy;\n\n  function hexbin(points) {\n    var binsById = {}, bins = [], i, n = points.length;\n\n    for (i = 0; i < n; ++i) {\n      if (isNaN(px = +x.call(null, point = points[i], i, points))\n          || isNaN(py = +y.call(null, point, i, points))) continue;\n\n      var point,\n          px,\n          py,\n          pj = Math.round(py = py / dy),\n          pi = Math.round(px = px / dx - (pj & 1) / 2),\n          py1 = py - pj;\n\n      if (Math.abs(py1) * 3 > 1) {\n        var px1 = px - pi,\n            pi2 = pi + (px < pi ? -1 : 1) / 2,\n            pj2 = pj + (py < pj ? -1 : 1),\n            px2 = px - pi2,\n            py2 = py - pj2;\n        if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;\n      }\n\n      var id = pi + \"-\" + pj, bin = binsById[id];\n      if (bin) bin.push(point);\n      else {\n        bins.push(bin = binsById[id] = [point]);\n        bin.x = (pi + (pj & 1) / 2) * dx;\n        bin.y = pj * dy;\n      }\n    }\n\n    return bins;\n  }\n\n  function hexagon(radius) {\n    var x0 = 0, y0 = 0;\n    return angles.map(function(angle) {\n      var x1 = Math.sin(angle) * radius,\n          y1 = -Math.cos(angle) * radius,\n          dx = x1 - x0,\n          dy = y1 - y0;\n      x0 = x1, y0 = y1;\n      return [dx, dy];\n    });\n  }\n\n  hexbin.hexagon = function(radius) {\n    return \"m\" + hexagon(radius == null ? r : +radius).join(\"l\") + \"z\";\n  };\n\n  hexbin.centers = function() {\n    var centers = [],\n        j = Math.round(y0 / dy),\n        i = Math.round(x0 / dx);\n    for (var y = j * dy; y < y1 + r; y += dy, ++j) {\n      for (var x = i * dx + (j & 1) * dx / 2; x < x1 + dx / 2; x += dx) {\n        centers.push([x, y]);\n      }\n    }\n    return centers;\n  };\n\n  hexbin.mesh = function() {\n    var fragment = hexagon(r).slice(0, 4).join(\"l\");\n    return hexbin.centers().map(function(p) { return \"M\" + p + \"m\" + fragment; }).join(\"\");\n  };\n\n  hexbin.x = function(_) {\n    return arguments.length ? (x = _, hexbin) : x;\n  };\n\n  hexbin.y = function(_) {\n    return arguments.length ? (y = _, hexbin) : y;\n  };\n\n  hexbin.radius = function(_) {\n    return arguments.length ? (r = +_, dx = r * 2 * Math.sin(thirdPi), dy = r * 1.5, hexbin) : r;\n  };\n\n  hexbin.size = function(_) {\n    return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], hexbin) : [x1 - x0, y1 - y0];\n  };\n\n  hexbin.extent = function(_) {\n    return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], hexbin) : [[x0, y0], [x1, y1]];\n  };\n\n  return hexbin.radius(1);\n}\n","import { I2DAggrChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField } from \"@hpcc-js/common\";\nimport { extent as d3Extent, max as d3Max, min as d3Min } from \"d3-array\";\nimport { hexbin as d3HexBin } from \"d3-hexbin\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nimport \"../src/HexBin.css\";\n\nexport class HexBin extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"x\",\n        type: \"any\"\n    }, {\n        id: \"y\",\n        type: \"number\"\n    }];\n\n    protected _hexbin;\n    protected _dataMinWeight;\n    protected _dataMaxWeight;\n    constructor() {\n        super();\n        I2DAggrChart.call(this);\n        this.tooltipValueFormat_default(\",.0f\");\n        ITooltip.call(this);\n        this.tooltipHTML(d => {\n            const seriesExtent = d3Extent<{ label: any, value: any }>(d, d => d.label);\n            const labelExtent = d3Extent<{ label: any, value: any }>(d, d => d.value);\n            return this.tooltipFormat({\n                series: seriesExtent[0] === seriesExtent[1] ? seriesExtent[0] : `${seriesExtent[0]} -> ${seriesExtent[1]}`,\n                label: labelExtent[0] === labelExtent[1] ? labelExtent[0] : `${labelExtent[0]} -> ${labelExtent[1]}`,\n                value: d.length\n            });\n        });\n        this._hexbin = d3HexBin()\n            .x(d => d.x)\n            .y(d => d.y)\n            ;\n        this\n            .xAxisGuideLines_default(false)\n            .yAxisGuideLines_default(false)\n            .xAxisType_default(\"linear\")\n            ;\n    }\n\n    xPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n    }\n\n    yPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element, duration);\n        const context = this;\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n\n        this._hexbin\n            .extent([0, 0], [this.width(), this.height()])\n            .radius(this.binSize())\n            ;\n\n        const flatData = this.flattenData();\n        const dataPoints = flatData.map(d => {\n            return {\n                x: context.xPos(host, d),\n                y: context.yPos(host, d),\n                label: host.parseData(d.label),\n                value: host.parseValue(d.value),\n                origRow: d\n            };\n        });\n        const hexBinPoints = this._hexbin(dataPoints);\n        const minBinPoints = d3Min(hexBinPoints, function (d: any) { return d.length; });\n        const maxBinPoints = d3Max(hexBinPoints, function (d: any) { return d.length; });\n        this._dataMinWeight = minBinPoints;\n        this._dataMaxWeight = maxBinPoints;\n\n        const points = element.selectAll(\".hexagon\").data(hexBinPoints, function (d) { return d.i + \"_\" + d.j; });\n        points.enter().append(\"path\")\n            .attr(\"class\", \"hexagon\")\n            .call(host._selection.enter.bind(host._selection))\n            .on(\"click\", function (d: any) {\n                const data = context.data();\n                context.click(d.map(row => host.rowToObj(data[row.origRow.rowIdx])), context.columns()[1], host._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d: any) {\n                const data = context.data();\n                context.dblclick(d.map(row => host.rowToObj(data[row.origRow.rowIdx])), context.columns()[1], host._selection.selected(this));\n            })\n            .on(\"mouseout.tooltip\", context.tooltip.hide)\n            .on(\"mousemove.tooltip\", context.tooltip.show)\n            .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(0)\"; })\n            .merge(points).transition().duration(duration)\n            .attr(\"d\", this._hexbin.hexagon())\n            .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(1)\"; })\n            .style(\"fill\", function (d) { return context._palette(d.length, minBinPoints, maxBinPoints); })\n            ;\n        points.exit().transition().duration(duration)\n            .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(0)\"; })\n            .remove()\n            ;\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n\n    //  Events  ---\n    click(row: object[], column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n    }\n    dblclick(row: object[], column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n    }\n}\nHexBin.prototype._class += \" chart_HexBin\";\nHexBin.prototype.implements(I2DAggrChart.prototype);\nHexBin.prototype.implements(ITooltip.prototype);\n\nexport interface HexBin {\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipValueFormat(_): string;\n    tooltipValueFormat_default(_): string;\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    binSize(): number;\n    binSize(_: number): this;\n}\n\nHexBin.prototype.publish(\"paletteID\", \"Blues\", \"set\", \"Color palette for this widget\", HexBin.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nHexBin.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nHexBin.prototype.publish(\"binSize\", 20, \"number\", \"Bin radius\", null, { range: { min: 1, max: 300, step: 1 } });\n","import { Scatter } from \"./Scatter.ts\";\n\nimport \"../src/Line.css\";\n\nexport class Line extends Scatter {\n    constructor() {\n        super();\n\n        this\n            .interpolate_default(\"linear\")\n            ;\n    }\n}\nLine.prototype._class += \" chart_Line\";\n","import { Pie } from \"./Pie.ts\";\n\nexport class QuarterPie extends Pie {\n    constructor() {\n        super();\n    }\n    postUpdate(domNode, element) {\n        super.postUpdate(domNode, element);\n        let x = this.orientation() === \"left\" ? 0 : this._size.width;\n        let y = this._size.height;\n        if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\n            x -= this._size.width / 2;\n            y -= this._size.height / 2;\n        }\n        this._element.attr(\"transform\", \"translate(\" + x + \",\" + y + \")scale(\" + this._widgetScale + \")\");\n    }\n    updateD3Pie() {\n        super.updateD3Pie();\n        this.d3Pie\n            .startAngle(this.orientation() === \"left\" ? 0 : -Math.PI / 2)\n            .endAngle(this.orientation() === \"left\" ? Math.PI / 2 : 0)\n            ;\n    }\n    calcOuterRadius() {\n        const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d })), \"Verdana\", 12).width;\n        return Math.min(this._size.width - maxTextWidth - 10, this._size.height - 12 * 3) - 2;\n    }\n}\nQuarterPie.prototype._class += \" chart_QuarterPie\";\n\nexport interface QuarterPie {\n    orientation(): string;\n    orientation(_: string): this;\n}\nQuarterPie.prototype.publish(\"orientation\", \"left\", \"set\", \"Determines the placement and start/end angle.\", [\"left\", \"right\"]);\n","import { SVGWidget } from \"@hpcc-js/common\";\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\n\nexport class QuartileCandlestick extends SVGWidget {\n    protected _g;\n    protected _leftLine;\n    protected _rightLine;\n    protected _midLine;\n    protected _midOuterRect;\n    protected _midInnerRect1;\n    protected _midInnerRect2;\n    protected _q0text;\n    protected _q1text;\n    protected _q2text;\n    protected _q3text;\n    protected _q4text;\n    protected _q0val;\n    protected _q1val;\n    protected _q2val;\n    protected _q3val;\n    protected _q4val;\n    constructor() {\n        super();\n    }\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._g = element.append(\"g\");\n        this._leftLine = this._g.append(\"rect\");\n        this._rightLine = this._g.append(\"rect\");\n        this._midLine = this._g.append(\"rect\");\n        this._midOuterRect = this._g.append(\"rect\");\n        this._midInnerRect1 = this._g.append(\"rect\");\n        this._midInnerRect2 = this._g.append(\"rect\");\n        this._q0text = this._g.append(\"text\");\n        this._q1text = this._g.append(\"text\");\n        this._q2text = this._g.append(\"text\");\n        this._q3text = this._g.append(\"text\");\n        this._q4text = this._g.append(\"text\");\n        this._q0val = this._g.append(\"text\");\n        this._q1val = this._g.append(\"text\");\n        this._q2val = this._g.append(\"text\");\n        this._q3val = this._g.append(\"text\");\n        this._q4val = this._g.append(\"text\");\n    }\n    update(domNode, element) {\n        super.update(domNode, element);\n        const valueSize = (this.orientation() === \"horizontal\" ? this.width() : this.height()) - this.lineWidth();\n        const domainSize = this.orientation() === \"horizontal\" ? this.height() : this.width();\n        const scale = d3ScaleLinear()\n            .domain([\n                this.data()[0],\n                this.data()[4]\n            ])\n            .range([\n                this.edgePadding(),\n                valueSize - this.edgePadding()\n            ])\n            ;\n        const candleWidth = this.candleWidth_exists() ? this.candleWidth() : domainSize;\n        const lineWidth = this.lineWidth();\n        const lineColor = this.lineColor();\n        const roundedCorners = this.roundedCorners();\n        const q0x = this.edgePadding();\n        let q1x = scale(this.data()[1]);\n        let q2x = scale(this.data()[2]);\n        let q3x = scale(this.data()[3]);\n        const dataTop = -candleWidth / 2;\n        const dataBottom = candleWidth / 2;\n        const upperTextRotation = this.upperTextRotation();\n        const lowerTextRotation = this.lowerTextRotation();\n        const padding = this.textPadding();\n        const labelFontSize = this.labelFontSize();\n        const valueFontSize = this.valueFontSize();\n        const sz = Math.max(labelFontSize, valueFontSize);\n        const q4x = valueSize - q0x;\n        if (sz > 0) {\n            while (q1x - q0x < sz) {\n                q1x += sz;\n            }\n            while (q2x - q1x < sz) {\n                q2x += sz;\n            }\n            while (q3x - q2x < sz) {\n                q3x += sz;\n            }\n            while (q4x - q3x < sz) {\n                q3x -= sz;\n            }\n            while (q3x - q2x < sz) {\n                q2x -= sz;\n            }\n            while (q2x - q1x < sz) {\n                q1x -= sz;\n            }\n        }\n        let transX = (-valueSize / 2) - (this.lineWidth() / 2);\n        let transY = 0;\n        let rotate = 0;\n        const s = 1;\n        let textScale = 1;\n        let labelAnchor = \"start\";\n        let valueAnchor = \"end\";\n        if (this.orientation() === \"vertical\") {\n            transX = 0;\n            transY = valueSize / 2 + (this.lineWidth() / 2);\n            rotate = -90;\n            labelAnchor = \"end\";\n            valueAnchor = \"start\";\n            textScale = -1;\n        }\n        this._g\n            .style(\"shape-rendering\", \"crispEdges\")\n            .attr(\"transform\", `translate(${transX},${transY})rotate(${rotate})scale(${s})`)\n            ;\n        this._leftLine\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", lineWidth)\n            .attr(\"x\", q0x)\n            .attr(\"y\", dataTop)\n            .attr(\"rx\", roundedCorners)\n            .attr(\"ry\", roundedCorners)\n            ;\n        this._rightLine\n            .attr(\"class\", \"right-line\")\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", lineWidth)\n            .attr(\"x\", q4x)\n            .attr(\"y\", dataTop)\n            .attr(\"rx\", roundedCorners)\n            .attr(\"ry\", roundedCorners)\n            ;\n        this._midLine\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", lineWidth)\n            .attr(\"width\", q4x - q0x)\n            .attr(\"x\", q0x)\n            .attr(\"y\", -lineWidth / 2)\n            ;\n        this._midOuterRect\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"x\", q1x)\n            .attr(\"y\", dataTop)\n            .attr(\"rx\", roundedCorners)\n            .attr(\"ry\", roundedCorners)\n            ;\n        this._midInnerRect1\n            .attr(\"fill\", this.innerRectColor())\n            .attr(\"height\", candleWidth - (lineWidth * 2))\n            .attr(\"width\", q2x - (q1x + (lineWidth * 2)))\n            .attr(\"x\", q1x + lineWidth)\n            .attr(\"y\", lineWidth - (candleWidth / 2))\n            .attr(\"rx\", roundedCorners * 0.618)\n            .attr(\"ry\", roundedCorners * 0.618)\n            ;\n        this._midInnerRect2\n            .attr(\"fill\", this.innerRectColor())\n            .attr(\"height\", candleWidth - (lineWidth * 2))\n            .attr(\"width\", q3x - q2x - lineWidth)\n            .attr(\"x\", q2x)\n            .attr(\"y\", lineWidth - (candleWidth / 2))\n            .attr(\"rx\", roundedCorners * 0.618)\n            .attr(\"ry\", roundedCorners * 0.618)\n            ;\n        this._q0text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q0x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"hanging\")\n            .text(this.columns()[0])\n            ;\n        this._q1text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q1x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.columns()[1])\n            ;\n        this._q2text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q2x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.columns()[2])\n            ;\n        this._q3text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q3x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.columns()[3])\n            ;\n        this._q4text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q4x + lineWidth}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"baseline\")\n            .text(this.columns()[4])\n            ;\n        this._q0val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q0x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"hanging\")\n            .text(this.data()[0])\n            ;\n        this._q1val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q1x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.data()[1])\n            ;\n        this._q2val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q2x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.data()[2])\n            ;\n        this._q3val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q3x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.data()[3])\n            ;\n        this._q4val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q4x + lineWidth}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"baseline\")\n            .text(this.data()[4])\n            ;\n    }\n}\nQuartileCandlestick.prototype._class += \" chart_QuartileCandlestick\";\n\nexport interface QuartileCandlestick {\n    orientation(): \"horizontal\" | \"vertical\";\n    orientation(_: \"horizontal\" | \"vertical\"): this;\n    textPadding(): number;\n    textPadding(_: number): this;\n    edgePadding(): number;\n    edgePadding(_: number): this;\n    candleWidth(): number;\n    candleWidth(_: number): this;\n    candleWidth_exists(): boolean;\n    lineWidth(): number;\n    lineWidth(_: number): this;\n    lineColor(): string;\n    lineColor(_: string): this;\n    innerRectColor(): string;\n    innerRectColor(_: string): this;\n    lowerTextRotation(): number;\n    lowerTextRotation(_: number): this;\n    upperTextRotation(): number;\n    upperTextRotation(_: number): this;\n    roundedCorners(): number;\n    roundedCorners(_: number): this;\n    labelFontSize(): number;\n    labelFontSize(_: number): this;\n    valueFontSize(): number;\n    valueFontSize(_: number): this;\n    textColor(): string;\n    textColor(_: string): this;\n    showLabels(): boolean;\n    showLabels(_: boolean): this;\n    showValues(): boolean;\n    showValues(_: boolean): this;\n}\nQuartileCandlestick.prototype.publish(\"textColor\", \"black\", \"html-color\", \"Color of label and value text\");\nQuartileCandlestick.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, labels will be shown\");\nQuartileCandlestick.prototype.publish(\"showValues\", true, \"boolean\", \"If true, values will be shown\");\nQuartileCandlestick.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Determines layout\", [\"horizontal\", \"vertical\"]);\nQuartileCandlestick.prototype.publish(\"valueFontSize\", 12, \"number\", \"Font size of value text (pixels)\");\nQuartileCandlestick.prototype.publish(\"labelFontSize\", 12, \"number\", \"Font size of label text (pixels)\");\nQuartileCandlestick.prototype.publish(\"roundedCorners\", 8, \"number\", \"Radius of rounded rect corners (pixels)\");\nQuartileCandlestick.prototype.publish(\"lineWidth\", 4, \"number\", \"Width of lines (pixels)\");\nQuartileCandlestick.prototype.publish(\"candleWidth\", null, \"number\", \"Height of outer rect (pixels)\", null, {optional: true});\nQuartileCandlestick.prototype.publish(\"textPadding\", 8, \"number\", \"Padding between outer rect and text (pixels)\");\nQuartileCandlestick.prototype.publish(\"edgePadding\", 30, \"number\", \"Padding between outer rect and left/right sides (pixels)\");\nQuartileCandlestick.prototype.publish(\"lineColor\", \"#333\", \"html-color\", \"Color of outer rect and lines\");\nQuartileCandlestick.prototype.publish(\"innerRectColor\", \"white\", \"html-color\", \"Color of the inner rects\");\nQuartileCandlestick.prototype.publish(\"upperTextRotation\", -60, \"number\", \"Rotation of label text (degrees)\");\nQuartileCandlestick.prototype.publish(\"lowerTextRotation\", -60, \"number\", \"Rotation of value text (degrees)\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Radar.css\";\nexport class Radar extends SVGWidget {\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n    }\n\n    mapShape(shape) {\n        switch (shape) {\n            case \"rectangle\":\n                return \"rect\";\n            case \"circle\":\n                return \"circle\";\n            case \"cross\":\n                return \"path\";\n            default:\n        }\n    }\n    setPointAttributes(element, x, y) {\n        const shape = this.mapShape(this.pointShape());\n        const context = this;\n        switch (shape) {\n            case \"rect\":\n                element\n                    .attr(\"width\", context.pointSize())\n                    .attr(\"height\", context.pointSize())\n                    .style(\"fill\", d => this.strokeColor(d.data, d.column, d.value))\n                    ;\n                break;\n            case \"circle\":\n                element\n                    .attr(\"r\", context.pointSize() / 2)\n                    .attr(\"cx\", x)\n                    .attr(\"cy\", y)\n                    .style(\"fill\", d => this.strokeColor(d.data, d.column, d.value))\n                    ;\n                break;\n            case \"path\":\n                const half_size = context.pointSize() / 2;\n                element\n                    .attr(\"d\", function (d: any) {\n                        return \"M\" + (x - half_size) + \" \" + (y - half_size) + \" \" +\n                            \"L\" + (x + half_size) + \" \" + (y + half_size) + \" \" +\n                            \"M\" + (x - half_size) + \" \" + (y + half_size) + \" \" +\n                            \"L\" + (x + half_size) + \" \" + (y - half_size);\n                    })\n                    .style(\"stroke\", d => this.strokeColor(d.data, d.column, d.value))\n                    ;\n                break;\n            default:\n        }\n    }\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection.widgetElement(element);\n\n        this\n            .tooltipHTML(d => {\n                return this.tooltipFormat({ label: d.label, series: d.column, value: d.value });\n            })\n            ;\n    }\n    update(domNode, element) {\n        super.update(domNode, element);\n        this._palette = this._palette.switch(this.paletteID());\n        const context = this;\n        const h = this.height();\n        const w = this.width();\n        const half_h = (h / 2);\n        const half_w = (w / 2);\n\n        const columns = this.columns();\n        const data = this.data();\n        const flatData = this.flattenData(columns, data).map((d: any, idx: number) => {\n            d.shape = this.mapShape(this.pointShape());\n            d.column = columns[d.colIdx];\n            d.row = data[idx];\n            return d;\n        });\n        const domain_points = [];\n        const arc = this.degrees2radians(360 / this.data().length);\n        const max_label_h = this.fontSize();\n        let max_label_w = 0;\n        flatData.filter(n => n.colIdx === 1).forEach(n => {\n            const isize = super.textSize(n.label, `${this.fontFamily()}`, this.fontSize());\n            if (max_label_w < isize.width) max_label_w = isize.width;\n        });\n        const radius = Math.min(half_h - max_label_h, half_w - max_label_w);\n        const labels = element\n            .selectAll(\".label\")\n            .data(flatData.filter(n => n.colIdx === 1))\n            ;\n        const max_val = Math.max.apply(context, flatData.map(n => n.value));\n        labels.enter()\n            .append(\"text\")\n            .attr(\"class\", \"label\")\n            .attr(\"text-anchor\", \"middle\")\n            .merge(labels)\n            .attr(\"font-size\", this.fontSize())\n            .attr(\"font-family\", this.fontFamily())\n            .each(function (this: SVGElement, n, i) {\n                const xy = context.polar2cartesian(radius, (i * arc) - (Math.PI / 2));\n                domain_points.push(xy.map(n => n * context.labelPaddingRatio()));\n                let text_anchor = \"middle\";\n                const _x = Math.round(xy[0]);\n                text_anchor = _x > 0 ? \"start\" : text_anchor;\n                text_anchor = _x < 0 ? \"end\" : text_anchor;\n                d3Select(this)\n                    .attr(\"text-anchor\", text_anchor)\n                    .attr(\"x\", xy[0])\n                    .attr(\"y\", xy[1])\n                    ;\n            })\n            .text(n => n.label)\n            ;\n        labels.exit().remove();\n        const domains = element\n            .selectAll(\".domain\")\n            .data(flatData.filter(n => n.colIdx === 1));\n        domains.enter()\n            .append(\"line\")\n            .classed(\"domain\", true)\n            .style(\"stroke\", \"#000\")\n            .style(\"stroke-opacity\", \"0.75\")\n            .style(\"stroke-width\", \"1px\")\n            .merge(domains)\n            .attr(\"x1\", 0)\n            .attr(\"y1\", 0)\n            .attr(\"x2\", (n, i) => domain_points[i][0])\n            .attr(\"y2\", (n, i) => domain_points[i][1]);\n        domains.exit().remove();\n        const value_guides = element\n            .selectAll(\".value_guide\")\n            .data(this.valueGuideRatios())\n            ;\n        value_guides.enter()\n            .append(\"polygon\")\n            .classed(\"value_guide\", true)\n            .style(\"stroke\", \"grey\")\n            .style(\"stroke-opacity\", \"0.75\")\n            .style(\"stroke-width\", \"0.3px\")\n            .merge(value_guides)\n            .each(function (mult, i) {\n                const poly_points = [];\n                domain_points.forEach((domain_point, row_idx) => {\n                    poly_points.push([\n                        domain_point[0] * mult,\n                        domain_point[1] * mult\n                    ]);\n                });\n                d3Select(this)\n                    .attr(\"points\", poly_points.join(\" \"))\n                    .attr(\"stroke\", \"rgb(0, 0, 0)\")\n                    .attr(\"stroke-opacity\", 0.75)\n                    .attr(\"stroke-width\", 0.3)\n                    .attr(\"fill-opacity\", 0)\n                    ;\n            })\n            ;\n        value_guides.exit().remove();\n\n        const value_guide_text = element\n            .selectAll(\".value_guide_text\")\n            .data(this.valueGuideRatios())\n            ;\n        value_guide_text.enter()\n            .append(\"text\")\n            .attr(\"class\", \"value_guide_text\")\n            .attr(\"text-anchor\", \"start\")\n            .attr(\"font-size\", this.fontSize())\n            .attr(\"font-family\", this.fontFamily())\n            .merge(value_guide_text)\n            .attr(\"x\", 2)\n            .attr(\"y\", mult => domain_points[0][1] * mult)\n            .text((mult, i) => Math.round(mult * max_val))\n            ;\n        value_guides.exit().remove();\n\n        //  Polygon shapes  ---\n        const series_polygons = element\n            .selectAll(\".area\")\n            .data(columns.filter((n, i) => i > 0));\n        series_polygons.enter()\n            .append(\"polygon\")\n            .attr(\"class\", \"area\")\n            .style(\"stroke-opacity\", \"0.75\")\n            .style(\"stroke-width\", \"0.3px\")\n            .merge(series_polygons)\n            .style(\"stroke\", d => this.strokeColor([], d, 0))\n            .style(\"fill\", d => this.fillColor([], d, 0))\n            .style(\"fill-opacity\", this.fillOpacity())\n            .attr(\"points\", (d, col_idx) => {\n                return domain_points.map((domain_point, row_idx) => {\n                    const val = data[row_idx][col_idx + 1];\n                    const val_mult = val === 0 ? 0 : val / max_val;\n                    return domain_point[0] * val_mult + \",\" + domain_point[1] * val_mult;\n                }).join(\" \");\n            });\n        series_polygons.exit().remove();\n\n        //  Points  ---\n        const point_elm = element\n            .selectAll(\".point\")\n            .data(flatData);\n        point_elm.enter()\n            .append(\"g\")\n            .attr(\"class\", \"point\")\n            .on(\"mouseout.tooltip\", context.tooltip.hide)\n            .on(\"mousemove.tooltip\", context.tooltip.show)\n            .on(\"click\", function (d: any, _idx) {\n                const data_row = context.data()[d.rowIdx];\n                const row_obj = context.rowToObj(data_row);\n                const selected = context._selection.selected(this);\n                context.click(row_obj, context.columns()[d.colIdx], selected);\n            })\n            .on(\"dblclick\", function (d: any, _idx) {\n                context.dblclick(context.rowToObj(context.data()[d.rowIdx]), d.column, context._selection.selected(this));\n            })\n            .each(function (d) {\n                const element = d3Select(this);\n                element.append(\"circle\")\n                    .attr(\"class\", \"pointSelection\")\n                    .attr(\"r\", context.pointSize())\n                    .call(context._selection.enter.bind(context._selection))\n                    ;\n                element.append(context.mapShape(context.pointShape()))\n                    .attr(\"class\", \"pointShape\")\n                    ;\n            })\n            .merge(point_elm)\n            .each(function (d) {\n                const element = d3Select(this);\n                const val_mult = d.value === 0 ? 0 : d.value / max_val;\n                const x = domain_points[d.rowIdx][0] * val_mult;\n                const y = domain_points[d.rowIdx][1] * val_mult;\n                element.select(\".pointSelection\")\n                    .attr(\"cx\", x)\n                    .attr(\"cy\", y)\n                    ;\n\n                const pointElement = element.select(\".pointShape\")\n                    .style(\"stroke\", context.strokeColor(d.row, d.column, d.value))\n                    .style(\"fill\", context.fillColor(d.row, d.column, d.value))\n                    ;\n                context.setPointAttributes(pointElement, x, y);\n            })\n            ;\n        point_elm.exit().remove();\n    }\n\n    polar2cartesian(r, theta) {\n        return [r * Math.cos(theta), r * Math.sin(theta)];\n    }\n    cartesian2polar(x, y) {\n        return [Math.atan2(y, x), Math.sqrt(x * x + y * y)];\n    }\n    degrees2radians(d) {\n        return d / 57.295779513;\n    }\n    radians2degrees(r) {\n        return r * 57.295779513;\n    }\n    point_in_polygon(point, vs) {\n        const x = point[0];\n        const y = point[1];\n        let inside = false;\n        for (let i = 0, j = vs.length - 1; i < vs.length; j = i++) {\n            const xi = vs[i][0];\n            const yi = vs[i][1];\n            const xj = vs[j][0];\n            const yj = vs[j][1];\n            const intersect = ((yi > y) !== (yj > y))\n                && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n            if (intersect) inside = !inside;\n        }\n        return inside;\n    }\n}\nRadar.prototype._class += \" chart_Radar\";\nRadar.prototype.implements(INDChart.prototype);\nRadar.prototype.implements(ITooltip.prototype);\nRadar.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface Radar {\n    labelPaddingRatio(): number;\n    labelPaddingRatio(_: number): this;\n    fillOpacity(): number;\n    fillOpacity(_: number): this;\n    fontFamily(): string;\n    fontFamily(_: string): this;\n    fontSize(): number;\n    fontSize(_: number): this;\n    valueGuideRatios(): any;\n    valueGuideRatios(_: any): this;\n    valueGuideFontSize(): number;\n    valueGuideFontSize(_: number): this;\n    valueGuideFontFamily(): string;\n    valueGuideFontFamily(_: string): this;\n    paletteID(): string;\n    paletteID(_: string): this;\n    pointShape(): string;\n    pointShape(_: string): this;\n    pointSize(): number;\n    pointSize(_: number): this;\n\n    //  INDChart\n    _palette;\n    fillColor(row, column, value): string;\n    strokeColor(row, column, value): string;\n    textColor(row, column, value): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n\n    _selection;\n}\n\nRadar.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Radar.prototype._palette.switch());\nRadar.prototype.publish(\"pointShape\", \"cross\", \"set\", \"pointShape\", [\"circle\", \"rectangle\", \"cross\"]);\nRadar.prototype.publish(\"pointSize\", 6, \"number\", \"Point Size\", null, { range: { min: 1, step: 1, max: 200 } });\nRadar.prototype.publish(\"valueGuideRatios\", [0.2, 0.4, 0.6, 0.8, 1], \"array\", \"Array of values between 0 and 1 that are multiplied by the widget radius to produce guide lines\");\nRadar.prototype.publish(\"fillOpacity\", 0.66, \"number\", \"Opacity of the data polygon(s)\");\nRadar.prototype.publish(\"fontFamily\", \"\", \"string\", \"fontFamily\");\nRadar.prototype.publish(\"fontSize\", 16, \"number\", \"fontSize\");\nRadar.prototype.publish(\"labelPaddingRatio\", 0.9, \"number\", \"labelPaddingRatio\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { interpolate as d3Interpolate } from \"d3-interpolate\";\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear } from \"d3-scale\";\nimport { arc as d3Arc } from \"d3-shape\";\n\nimport \"../src/RadialBar.css\";\n\nexport class RadialBar extends SVGWidget {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"any\"\n    }, {\n        id: \"values\",\n        type: \"number\"\n    }];\n\n    private _domainScale = d3ScaleBand();\n    private _valueScale = d3ScaleLinear();\n    private _d3Arc = d3Arc<[string, number]>()\n        .startAngle(0)\n        .endAngle((d) => this._valueScale(d[1]))\n        ;\n\n    protected _arcs;\n    protected _axialAxis;\n    protected _radialAxis;\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection.widgetElement(element);\n        this.tooltipHTML(d => {\n            return this.tooltipFormat({ label: d[0], value: d[1] });\n        });\n\n        this._radialAxis = element.append(\"g\")\n            .attr(\"class\", \"r axis\")\n            ;\n        this._axialAxis = element.append(\"g\")\n            .attr(\"class\", \"a axis\")\n            ;\n        this._arcs = element.append(\"g\")\n            .attr(\"class\", \"data\")\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        const context = this;\n        const maxValue = Math.max(this.valueDomainHigh_exists() ? this.valueDomainHigh() : 0, ...this.data().map(d => d[1]));\n\n        this._valueScale\n            .domain([0, maxValue])\n            .range([0, this.radians(this.valueMaxAngle())])\n            ;\n\n        const ticks = this._valueScale.ticks(this.tickCount());\n\n        const maxTextWidth = this.textSize(ticks.map(d => \"\" + d), \"Verdana\", 12).width;\n        const chartRadius = (Math.min(this.width() - (10 + maxTextWidth) * 2, this.height() - (10 + 12) * 2) / 2);\n\n        //  Domain Axis (x-axis)  ---\n        const domainData = this.data().map(d => d[0]);\n\n        this._domainScale\n            .domain(domainData)\n            .range([0, chartRadius])\n            .padding(this.domainPadding())\n            ;\n        const domainPadding = this._domainScale.step() * this._domainScale.padding();\n\n        const domainCircles = this._radialAxis.selectAll(\"circle\").data(domainData);\n        domainCircles.enter().append(\"circle\")\n            .attr(\"fill\", \"transparent\")\n            .merge(domainCircles)\n            .attr(\"r\", d => this._domainScale(d) + this._domainScale.step() - domainPadding / 2)\n            ;\n        domainCircles.exit().remove();\n\n        const domainText = this._radialAxis.selectAll(\".arc-text\").data(domainData);\n        domainText.enter().append(\"text\")\n            .attr(\"class\", \"arc-text\")\n            .attr(\"x\", -4)\n            .attr(\"alignment-baseline\", \"middle\")\n            .attr(\"text-anchor\", \"end\")\n            .merge(domainText)\n            .attr(\"y\", d => -this._domainScale(d) - this._domainScale.bandwidth() / 2)\n            .text(d => d);\n        domainText.exit().remove();\n\n        //  Value Axis (y-axis)  ---\n        const valueLines = this._axialAxis.selectAll(\"line\").data(ticks);\n        valueLines.enter().append(\"line\")\n            .merge(valueLines)\n            .attr(\"x2\", d => chartRadius * Math.cos(this._valueScale(d) - this.radians(90)))\n            .attr(\"y2\", d => chartRadius * Math.sin(this._valueScale(d) - this.radians(90)))\n            ;\n        valueLines.exit().remove();\n\n        const valueText = this._axialAxis.selectAll(\"text\").data(ticks);\n        valueText.enter().append(\"text\")\n            .style(\"dominant-baseline\", \"central\")\n            .merge(valueText)\n            .attr(\"x\", d => (chartRadius + 10) * Math.cos(this._valueScale(d) - this.radians(90)))\n            .attr(\"y\", d => (chartRadius + 10) * Math.sin(this._valueScale(d) - this.radians(90)))\n            .style(\"text-anchor\", d => {\n                const middleZone = 20;\n                const angle = this.degrees(this._valueScale(d));\n                if (angle >= 0 && angle <= middleZone ||\n                    angle >= 180 - middleZone && angle <= 180 + middleZone ||\n                    angle >= 360 - middleZone && angle <= 360\n                ) {\n                    return \"middle\";\n                } else if (angle >= 180 && angle <= 360) {\n                    return \"end\";\n                } else {\n                    return null;\n                }\n            })\n            .text(d => d)\n            ;\n        valueText.exit().remove();\n\n        const valueColumn = this.columns().length > 1 ? this.columns()[1] : \"\";\n        //  Data (arcs) ---\n        this._d3Arc\n            .innerRadius(d => this._domainScale(d[0]))\n            .outerRadius(d => this._domainScale(d[0]) + this._domainScale.bandwidth())\n            ;\n        const arcs = this._arcs.selectAll(\"path\").data(this.data(), d => d[0]);\n        arcs.enter().append(\"path\")\n            .attr(\"class\", \"arc\")\n            .call(this._selection.enter.bind(this._selection))\n            .on(\"mouseout.tooltip\", this.tooltip.hide)\n            .on(\"mousemove.tooltip\", this.tooltip.show)\n            .on(\"click\", function (d: any, _idx) {\n                context.click(context.rowToObj(d), valueColumn, context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d: any, _idx) {\n                context.dblclick(context.rowToObj(d), valueColumn, context._selection.selected(this));\n            })\n            .merge(arcs)\n            .style(\"fill\", (d, i) => this.fillColor(d, d[0], d[1]))\n            .transition()\n            .delay((d, i) => i * this.transitionDelay())\n            .duration(this.transitionDuration())\n            .attrTween(\"d\", (d, indx) => {\n                const interpolate = d3Interpolate(d._current || 0, d[1]);\n                d._current = d[1];\n                return t => this._d3Arc([d[0], interpolate(t)], indx);\n            })\n            ;\n        arcs.exit().remove();\n    }\n\n    degrees(radians) {\n        return radians * 180 / Math.PI;\n    }\n\n    radians(degrees) {\n        return degrees * Math.PI / 180;\n    }\n\n}\nRadialBar.prototype._class += \" chart_RadialBar\";\nRadialBar.prototype.implements(INDChart.prototype);\nRadialBar.prototype.implements(ITooltip.prototype);\nRadialBar.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface RadialBar {\n    paletteID(): string;\n    paletteID(_: string): this;\n    tickCount(): number;\n    tickCount(_: number): this;\n    domainPadding(): number;\n    domainPadding(_: number): this;\n    valueMaxAngle(): number;\n    valueMaxAngle(_: number): this;\n    valueDomainHigh(): number;\n    valueDomainHigh(_: number): this;\n    valueDomainHigh_exists(): boolean;\n    transitionDelay(): number;\n    transitionDelay(_: number): this;\n    transitionDuration(): number;\n    transitionDuration(_: number): this;\n\n    //  INDChart\n    _palette;\n    fillColor(row, column, value): string;\n    strokeColor(row, column, value): string;\n    textColor(row, column, value): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n\n    //  SimpleSelectionMixin\n    _selection;\n}\n\nRadialBar.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", RadialBar.prototype._palette.switch());\nRadialBar.prototype.publish(\"tickCount\", 10, \"number\", \"Number of ticks to display\");\nRadialBar.prototype.publish(\"domainPadding\", 0.25, \"number\", \"Padding between chart edge and container edge (0..1)\");\nRadialBar.prototype.publish(\"valueMaxAngle\", 270, \"number\", \"Maximum angular length of a bar (degrees)\");\nRadialBar.prototype.publish(\"valueDomainHigh\", null, \"number\", \"Value domain high\", undefined, { optional: true });\nRadialBar.prototype.publish(\"transitionDelay\", 100, \"number\", \"Delay between the start of each row animation (ms)\");\nRadialBar.prototype.publish(\"transitionDuration\", 750, \"number\", \"Duration of a row's animation (ms)\");\n","import { format as d3Format, HTMLWidget, Palette } from \"@hpcc-js/common\";\nimport { QuartileCandlestick } from \"./QuartileCandlestick.ts\";\nimport { Scatter } from \"./Scatter.ts\";\n\nconst rainbow = Palette.rainbow(\"Blues\");\nconst palette = Palette.ordinal(\"Quartile\", [rainbow(100, 0, 100), rainbow(50, 0, 100), rainbow(50, 0, 100), rainbow(75, 0, 100)]);\npalette(\"Std. Dev.\");\npalette(\"MinMax\");\npalette(\"25%\");\npalette(\"50%\");\n\ntype View = \"min_max\" | \"25_75\" | \"normal\";\ntype Tick = { label: string, value: number };\ntype Ticks = Tick[];\ntype AxisTick = { label: string, value: string };\ntype AxisTicks = AxisTick[];\n\nfunction myFormatter(format: string): (num: number) => string {\n    const formatter = d3Format(format);\n    return function (num: number) {\n        const strVal = (Math.round(num * 100) / 100).toString();\n        if (strVal.length <= 4) return strVal;\n        return formatter(num);\n    };\n}\n\nexport type StatChartView = \"min_max\" | \"25_75\" | \"normal\";\nexport type Quartiles = [number, number, number, number, number];\nexport type Data = [[number, number, number, number, number, number, number]];\n\nexport class StatChart extends HTMLWidget {\n\n    protected _selectElement: any;\n    protected _tickFormatter: (_: number) => string;\n\n    protected _bellCurve: Scatter = new Scatter()\n        .columns([\"\", \"Std. Dev.\"])\n        .paletteID(\"Quartile\")\n        .interpolate_default(\"basis\")\n        .pointSize(0)\n        .xAxisType(\"linear\")\n        .xAxisOverlapMode(\"none\")\n        .xAxisTickFormat(\",\")\n        .yAxisHidden(true)\n        .yAxisDomainLow(0)\n        .yAxisDomainHigh(110)\n        .yAxisGuideLines(false) as Scatter\n        ;\n\n    protected _candle = new QuartileCandlestick()\n        .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\"])\n        .edgePadding(0)\n        .roundedCorners(1)\n        .lineWidth(1)\n        .upperTextRotation(-90)\n        .lowerTextRotation(-90)\n        .labelFontSize(0)\n        .valueFontSize(0)\n        .lineColor(rainbow(90, 0, 100))\n        .innerRectColor(rainbow(10, 0, 100))\n        ;\n\n    constructor() {\n        super();\n        this\n            .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\", \"Mean\", \"Std. Dev.\"])\n            ;\n    }\n\n    protected stdDev(degrees: number): number {\n        return this.mean() + degrees * this.standardDeviation();\n    }\n\n    protected formatStdDev(degrees: number): string {\n        return this._tickFormatter(this.stdDev(degrees));\n    }\n\n    protected quartile(q: 0 | 1 | 2 | 3 | 4): number {\n        return this.quartiles()[q];\n    }\n\n    protected formatQ(q: 0 | 1 | 2 | 3 | 4): string {\n        return this._tickFormatter(this.quartile(q));\n    }\n\n    protected domain(mode: View): [number, number] {\n        switch (mode) {\n            case \"25_75\":\n                return [this.quartile(1), this.quartile(3)];\n            case \"normal\":\n                return [this.stdDev(-4), this.stdDev(4)];\n            case \"min_max\":\n            default:\n                return [this.quartile(0), this.quartile(4)];\n        }\n    }\n\n    protected min(): number {\n        return this.quartile(0);\n    }\n\n    protected max(): number {\n        return this.quartile(4);\n    }\n\n    data(): Data;\n    data(_: Data): this;\n    data(_?: Data): Data | this {\n        if (!arguments.length) return [[...this.quartiles(), this.mean(), this.standardDeviation()]];\n        const row = _[0];\n        this.quartiles([row[0], row[1], row[2], row[3], row[4]]);\n        this.mean(row[5]);\n        this.standardDeviation(row[6]);\n        return this;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n\n        this._bellCurve.target(element.append(\"div\").node());\n\n        this._candle.target(element.append(\"div\").node());\n\n        this._selectElement = element.append(\"div\")\n            .style(\"position\", \"absolute\")\n            .style(\"top\", \"0px\")\n            .style(\"right\", \"0px\").append(\"select\")\n            .on(\"change\", () => {\n                this.view(this._selectElement.node().value);\n                this.lazyRender();\n            })\n            ;\n        this._selectElement.append(\"option\").attr(\"value\", \"min_max\").text(\"Min / Max\");\n        this._selectElement.append(\"option\").attr(\"value\", \"25_75\").text(\"25% / 75%\");\n        this._selectElement.append(\"option\").attr(\"value\", \"normal\").text(\"Normal\");\n    }\n\n    protected bellTicks(mode: View): AxisTicks {\n        let ticks: Ticks;\n        switch (mode) {\n            case \"25_75\":\n                ticks = [\n                    { label: this.formatQ(1), value: this.quartile(1) },\n                    { label: this.formatQ(2), value: this.quartile(2) },\n                    { label: this.formatQ(3), value: this.quartile(3) }\n                ];\n                break;\n            case \"normal\":\n                ticks = [\n                    { label: this.formatStdDev(-4), value: this.stdDev(-4) },\n                    { label: \"-3σ\", value: this.stdDev(-3) },\n                    { label: \"-2σ\", value: this.stdDev(-2) },\n                    { label: \"-1σ\", value: this.stdDev(-1) },\n                    { label: this.formatStdDev(0), value: this.stdDev(0) },\n                    { label: \"+1σ\", value: this.stdDev(1) },\n                    { label: \"+2σ\", value: this.stdDev(2) },\n                    { label: \"+3σ\", value: this.stdDev(3) },\n                    { label: this.formatStdDev(4), value: this.stdDev(4) }\n                ];\n                break;\n            case \"min_max\":\n            default:\n                ticks = [\n                    { label: this.formatQ(0), value: this.quartile(0) },\n                    { label: this.formatQ(1), value: this.quartile(1) },\n                    { label: this.formatQ(2), value: this.quartile(2) },\n                    { label: this.formatQ(3), value: this.quartile(3) },\n                    { label: this.formatQ(4), value: this.quartile(4) }\n                ];\n        }\n\n        const [domainLow, domainHigh] = this.domain(this._selectElement.node().value);\n        return ticks\n            .filter(sd => sd.value >= domainLow && sd.value <= domainHigh)\n            .map(sd => ({ label: sd.label, value: sd.value.toString() }))\n            ;\n    }\n\n    updateScatter() {\n        const mode = this._selectElement.node().value;\n        const [domainLow, domainHigh] = this.domain(mode);\n        const padding = (domainHigh - domainLow) * (this.domainPadding() / 100);\n\n        this._bellCurve\n            .xAxisDomainLow(domainLow - padding)\n            .xAxisDomainHigh(domainHigh + padding)\n            .xAxisTicks(this.bellTicks(mode))\n            .data([\n                [this.stdDev(-4), 0],\n                [this.stdDev(-3), 0.3],\n                [this.stdDev(-2), 5],\n                [this.stdDev(-1), 68],\n                [this.stdDev(0), 100],\n                [this.stdDev(1), 68],\n                [this.stdDev(2), 5],\n                [this.stdDev(3), 0.3],\n                [this.stdDev(4), 0]\n            ])\n            .resize({ width: this.width(), height: this.height() - this.candleHeight() })\n            .render()\n            ;\n    }\n\n    updateCandle() {\n        const candleX = this._bellCurve.dataPos(this.quartile(0));\n        const candleW = this._bellCurve.dataPos(this.quartile(4)) - candleX;\n        this._candle\n            .resize({ width: this.width(), height: this.candleHeight() })\n            .pos({ x: (candleX + candleW / 2) + 2, y: this.candleHeight() / 2 })\n            .width(candleW)\n            .candleWidth(this.candleHeight())\n            .data(this.quartiles())\n            .render()\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        this._tickFormatter = myFormatter(this.tickFormat());\n        this._selectElement.node().value = this.view();\n        this.updateScatter();\n        this.updateCandle();\n    }\n\n    exit(domNode, element) {\n        this._bellCurve.target(null);\n        this._candle.target(null);\n        this._selectElement.remove();\n\n        super.exit(domNode, element);\n    }\n}\nStatChart.prototype._class += \" chart_StatChart\";\n\nexport interface StatChart {\n    view(): StatChartView;\n    view(_: StatChartView): this;\n\n    tickFormat(): string;\n    tickFormat(_: string): this;\n    candleHeight(): number;\n    candleHeight(_: number): this;\n    domainPadding(): number;\n    domainPadding(_: number): this;\n\n    mean(): number;\n    mean(_: number): this;\n    standardDeviation(): number;\n    standardDeviation(_: number): this;\n    quartiles(): Quartiles;\n    quartiles(_: Quartiles): this;\n}\nStatChart.prototype.publish(\"view\", \"min_max\", \"set\", \"View\", [\"min_max\", \"25_75\", \"normal\"]);\n\nStatChart.prototype.publish(\"tickFormat\", \".2e\", \"string\", \"X-Axis Tick Format\");\nStatChart.prototype.publish(\"candleHeight\", 20, \"number\", \"Height of candle widget (pixels)\");\nStatChart.prototype.publish(\"domainPadding\", 10, \"number\", \"Domain value padding\");\n\nStatChart.prototype.publish(\"mean\", .5, \"number\", \"Mean\");\nStatChart.prototype.publish(\"standardDeviation\", .125, \"number\", \"Standard Deviation (σ)\");\nStatChart.prototype.publish(\"quartiles\", [0, .25, .5, .75, 1], \"object\", \"Quartiles (Min, 25%, 50%, 75%, Max)\");\n","import { Scatter } from \"./Scatter.ts\";\n\nexport class Step extends Scatter {\n    constructor() {\n        super();\n\n        this\n            .interpolate_default(\"step\")\n            ;\n    }\n}\nStep.prototype._class += \" chart_Step\";\n","import { I2DChart } from \"@hpcc-js/api\";\nimport { HTMLWidget } from \"@hpcc-js/common\";\nimport { rgb as d3Rgb } from \"d3-color\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Summary.css\";\n\nconst TEXT = \"text\";\nconst HTML = \"html\";\n\nexport class Summary extends HTMLWidget {\n    protected _playIntervalIdx = 0;\n    protected _mainDiv;\n    protected _headerDiv;\n    protected _textDiv;\n\n    constructor() {\n        super();\n        this._tag = \"div\";\n\n        this._drawStartPos = \"center\";\n        this.playInterval(this.playInterval());\n    }\n\n    lookupFieldIdx(propID, defaultIdx?: number) {\n        let retVal = defaultIdx;\n        if (this[propID + \"_exists\"]()) {\n            retVal = this.columns().indexOf(this[propID]());\n            if (retVal < 0) {\n                return undefined;\n            }\n        }\n        return retVal;\n    }\n\n    lookupFieldText(propID, defaultIdx?: number) {\n        if (this[propID + \"_exists\"]()) {\n            return this[propID]();\n        }\n        if (defaultIdx !== undefined) {\n            return this.columns()[defaultIdx] || \"\";\n        }\n        return \"\";\n    }\n\n    currentRow() {\n        return this.data()[this._playIntervalIdx];\n    }\n\n    summaryData() {\n        let labelFieldIdx;  //  undefined\n        if (!this.hideLabel()) {\n            labelFieldIdx = this.lookupFieldIdx(\"labelColumn\", 0);\n        }\n        const iconFieldIdx = this.lookupFieldIdx(\"iconColumn\");\n        const valueFieldIdx = this.lookupFieldIdx(\"valueColumn\", 1);\n        let moreIconIdx;  //  undefined\n        let moreTextIdx;  //  undefined\n        if (!this.hideMore()) {\n            moreIconIdx = this.lookupFieldIdx(\"moreIconColumn\");\n            moreTextIdx = this.lookupFieldIdx(\"moreTextColumn\");\n        }\n        const colorFillIdx = this.lookupFieldIdx(\"colorFillColumn\");\n        const colorStrokeIdx = this.lookupFieldIdx(\"colorStrokeColumn\");\n        return this.formattedData().map(function (row) {\n            return {\n                icon: iconFieldIdx === undefined ? this.icon() : row[iconFieldIdx],\n                label: labelFieldIdx === undefined ? \"\" : row[labelFieldIdx],\n                value: row[valueFieldIdx],\n                moreIcon: moreIconIdx === undefined ? (this.hideMore() ? \"\" : this.moreIcon()) : row[moreIconIdx],\n                moreText: moreTextIdx === undefined ? (this.hideMore() ? \"\" : this.moreText()) : row[moreTextIdx],\n                fill: colorFillIdx === undefined ? this.colorFill() : row[colorFillIdx],\n                stroke: colorStrokeIdx === undefined ? this.colorStroke() : row[colorStrokeIdx]\n            };\n        }, this);\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._mainDiv = element.append(\"div\")\n            ;\n        const context = this;\n        this._headerDiv = this._mainDiv.append(\"h2\")\n            .on(\"click\", function () {\n                context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"valueColumn\", 1), true);\n            })\n            .on(\"dblclick\", function () {\n                context.dblclick(context.rowToObj(context.currentRow()), context.lookupFieldText(\"valueColumn\", 1), true);\n            })\n            ;\n        this._textDiv = this._mainDiv.append(\"div\")\n            .attr(\"class\", \"text\")\n            .on(\"click\", function () {\n                context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"labelColumn\", 0), true);\n            })\n            .on(\"dblclick\", function () {\n                context.dblclick(context.rowToObj(context.currentRow()), context.lookupFieldText(\"labelColumn\", 0), true);\n            })\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        if (this.data().length) {\n\n        }\n        const data = this.summaryData();\n        if (this._playIntervalIdx >= data.length) {\n            this._playIntervalIdx = 0;\n        }\n        const row: any = this._playIntervalIdx < data.length ? data[this._playIntervalIdx] : [\"\", \"\"];\n        element\n            .style(\"width\", this.fixedSize() ? this.minWidth_exists() ? this.minWidth() + \"px\" : null : \"100%\")\n            .style(\"height\", this.fixedSize() ? this.minHeight_exists() ? this.minHeight() + \"px\" : null : \"100%\")\n            ;\n        this._mainDiv\n            .attr(\"class\", \"content bgIcon \" + row.icon)\n            .transition()\n            .style(\"background-color\", row.fill)\n            .style(\"color\", row.stroke)\n            .style(\"min-width\", this.minWidth_exists() ? this.minWidth() + \"px\" : null)\n            .style(\"min-height\", this.minHeight_exists() ? this.minHeight() + \"px\" : null)\n            .style(\"font-size\", this.iconFontSize() + \"px\")\n            ;\n        this._headerDiv\n            .transition()\n            .style(\"color\", row.stroke)\n            .style(\"font-size\", this.headerFontSize() + \"px\")\n        [this.valueHTML() ? HTML : TEXT](row.value)\n            ;\n        this._textDiv\n            .style(\"font-size\", this.textFontSize() + \"px\")\n        [this.labelHTML() ? HTML : TEXT](row.label)\n            ;\n        const context = this;\n        const moreDivs = this._mainDiv.selectAll(\".more\").data([row]);\n        const moreDivsEnter = moreDivs.enter()\n            .append(\"div\")\n            .attr(\"class\", \"more\")\n            .on(\"click\", function (d) {\n                context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"moreTextColumn\") || \"more\", true);\n            })\n            .each(function () {\n                const element2 = d3Select(this);\n                element2.append(\"i\");\n                element2.append(\"span\");\n            })\n            ;\n        const moreDivsUpdate = moreDivsEnter\n            .merge(moreDivs)\n            .style(\"display\", this.hideMoreWrapper() ? \"none\" : null)\n            .style(\"font-size\", this.moreFontSize() + \"px\")\n            .style(\"height\", this.moreWrapperHeight_exists() ? this.moreWrapperHeight() + \"px\" : null)\n            .transition()\n            .style(\"background-color\", d3Rgb(row.fill).darker(0.75).toString())\n            ;\n        moreDivsUpdate\n            .select(\"i\")\n            .attr(\"class\", function (d) {\n                return \"fa \" + d.moreIcon;\n            })\n            ;\n        if (this.moreTextHTML()) {\n            moreDivsUpdate.select(\"span\")\n                .each(function (d) {\n                    this.innerHTML = d.moreText;\n                });\n        } else {\n            moreDivsUpdate.select(\"span\").text(d => d.moreText);\n        }\n        moreDivs.exit().remove();\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n}\nSummary.prototype._class += \" chart_Summary\";\nSummary.prototype.implements(I2DChart.prototype);\n\nexport interface Summary {\n    iconColumn(): string;\n    iconColumn(_: string): this;\n    iconColumn_exists(): boolean;\n    icon(): string;\n    icon(_: string): this;\n    icon_exists(): boolean;\n\n    headerFontSize(): number;\n    headerFontSize(_: number): this;\n    textFontSize(): number;\n    textFontSize(_: number): this;\n    moreFontSize(): number;\n    moreFontSize(_: number): this;\n    iconFontSize(): number;\n    iconFontSize(_: number): this;\n\n    hideLabel(): boolean;\n    hideLabel(_: boolean): this;\n    hideLabel_exists(): boolean;\n    labelColumn(): string;\n    labelColumn(_: string): this;\n    labelColumn_exists(): boolean;\n    labelHTML(): boolean;\n    labelHTML(_: boolean): this;\n    labelHTML_exists(): boolean;\n\n    valueColumn(): string;\n    valueColumn(_: string): this;\n    valueColumn_exists(): boolean;\n    valueHTML(): boolean;\n    valueHTML(_: boolean): this;\n    valueHTML_exists(): boolean;\n\n    hideMore(): boolean;\n    hideMore(_: boolean): this;\n    hideMore_exists(): boolean;\n    hideMoreWrapper(): boolean;\n    hideMoreWrapper(_: boolean): this;\n    moreWrapperHeight(): number;\n    moreWrapperHeight(_: number): this;\n    moreWrapperHeight_exists(): boolean;\n    moreIconColumn(): string;\n    moreIconColumn(_: string): this;\n    moreIconColumn_exists(): boolean;\n    moreIcon(): string;\n    moreIcon(_: string): this;\n    moreIcon_exists(): boolean;\n    moreTextColumn(): string;\n    moreTextColumn(_: string): this;\n    moreTextColumn_exists(): boolean;\n    moreText(): string;\n    moreText(_: string): this;\n    moreText_exists(): boolean;\n    moreTextHTML(): boolean;\n    moreTextHTML(_: boolean): this;\n    moreTextHTML_exists(): boolean;\n\n    colorFillColumn(): string;\n    colorFillColumn(_: string): this;\n    colorFillColumn_exists(): boolean;\n    colorFill(): string;\n    colorFill(_: string): this;\n    colorFill_exists(): boolean;\n    colorStrokeColumn(): string;\n    colorStrokeColumn(_: string): this;\n    colorStrokeColumn_exists(): boolean;\n    colorStroke(): string;\n    colorStroke(_: string): this;\n    colorStroke_exists(): boolean;\n\n    fixedSize(): boolean;\n    fixedSize(_: boolean): this;\n    fixedSize_exists(): boolean;\n    minWidth(): number;\n    minWidth(_: number): this;\n    minWidth_exists(): boolean;\n    minHeight(): number;\n    minHeight(_: number): this;\n    minHeight_exists(): boolean;\n    playInterval(): number;\n    playInterval(_: number): this;\n    playInterval_exists(): boolean;\n\n    //  I2DChart  ---\n    click(row, column, selected);\n    dblclick(row, column, selected);\n}\n\nSummary.prototype.publish(\"iconColumn\", null, \"set\", \"Select Icon Column\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"icon\", \"fa-briefcase\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.iconColumn() });\n\nSummary.prototype.publish(\"headerFontSize\", null, \"number\", \"headerFontSize\");\nSummary.prototype.publish(\"textFontSize\", null, \"number\", \"textFontSize\");\nSummary.prototype.publish(\"moreFontSize\", null, \"number\", \"moreFontSize\");\nSummary.prototype.publish(\"iconFontSize\", null, \"number\", \"iconFontSize\");\n\nSummary.prototype.publish(\"hideLabel\", false, \"boolean\", \"Hide label column\");\nSummary.prototype.publish(\"labelColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideLabel() });\nSummary.prototype.publish(\"labelHTML\", false, \"boolean\", \"Allow HTML\", null, { disable: (w) => w.hideLabel() });\n\nSummary.prototype.publish(\"valueColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"valueHTML\", false, \"boolean\", \"Allow HTML\");\n\nSummary.prototype.publish(\"hideMore\", false, \"boolean\", \"Hide More Information\");\nSummary.prototype.publish(\"hideMoreWrapper\", false, \"boolean\", \"Hide More Information Wrapper\");\nSummary.prototype.publish(\"moreWrapperHeight\", null, \"number\", \"Height of the 'more' text wrapper (pixels)\");\nSummary.prototype.publish(\"moreIconColumn\", null, \"set\", \"Select More Icon Column\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideMore() });\nSummary.prototype.publish(\"moreIcon\", \"fa-info-circle\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.hideMore() || w.moreIconColumn() });\nSummary.prototype.publish(\"moreTextColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideMore() });\nSummary.prototype.publish(\"moreText\", \"More Info\", \"string\", \"More text\", null, { disable: (w) => w.hideMore() || w.moreTextColumn() });\nSummary.prototype.publish(\"moreTextHTML\", false, \"boolean\", \"Allow HTML\", null, { disable: (w) => w.hideMore() });\n\nSummary.prototype.publish(\"colorFillColumn\", null, \"set\", \"Column for color\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"colorFill\", \"#3498db\", \"html-color\", \"Fill Color\", null, { disable: (w) => w.colorFillColumn() });\nSummary.prototype.publish(\"colorStrokeColumn\", null, \"set\", \"Column for color\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"colorStroke\", \"#ffffff\", \"html-color\", \"Fill Color\", null, { disable: (w) => w.colorStrokeColumn() });\n\nSummary.prototype.publish(\"fixedSize\", true, \"boolean\", \"Fix Size to Min Width/Height\");\nSummary.prototype.publish(\"minWidth\", 225, \"number\", \"Minimum Width\");\nSummary.prototype.publish(\"minHeight\", 150, \"number\", \"Minimum Height\");\nSummary.prototype.publish(\"playInterval\", null, \"number\", \"Play Interval\", null, { optional: true });\n\nconst playInterval = Summary.prototype.playInterval;\nSummary.prototype.playInterval = function (_?: number): number | any {\n    const retVal = playInterval.apply(this, arguments);\n    if (arguments.length) {\n        if (this._playIntervalHandle) {\n            clearInterval(this._playIntervalHandle);\n        }\n        const context = this;\n        if (_) {\n            this._playIntervalHandle = setInterval(function () {\n                context._playIntervalIdx++;\n                if (context._renderCount && context.data().length) {\n                    context.render();\n                }\n            }, _);\n        }\n    }\n    return retVal;\n};\n","import { I2DChart } from \"@hpcc-js/api\";\nimport { CanvasWidget, Utility } from \"@hpcc-js/common\";\n\nexport class SummaryC extends CanvasWidget {\n    protected _playIntervalIdx = 0;\n\n    constructor() {\n        super();\n        I2DChart.call(this);\n        this.playInterval(this.playInterval());\n    }\n\n    currentRow() {\n        return this.data()[this._playIntervalIdx];\n    }\n\n    enter(domNode, element) {\n        super.enter.apply(this, arguments);\n        const { width, height } = this.size();\n        domNode.height = height;\n        domNode.width = width;\n    }\n\n    update(domNode, element) {\n        super.update.apply(this, arguments);\n        const context = this;\n        if (this._playIntervalIdx >= this.data().length) {\n            this._playIntervalIdx = 0;\n        }\n        const size = this.size();\n        const minDimension = Math.min(size.width, size.height);\n        const sizeRatio = this.fontSizeRatio();\n        const labelIdx = this.columns().indexOf(this.labelColumn());\n        const valueIdx = this.columns().indexOf(this.valueColumn());\n        const bgColorIdx = this.columns().indexOf(this.colorFillColumn());\n        const fontColorIdx = this.columns().indexOf(this.colorStrokeColumn());\n        const iconIdx = this.columns().indexOf(this.iconColumn());\n        const icon = iconIdx !== -1 ? this.currentRow()[iconIdx] : this.icon();\n        const label = labelIdx !== -1 ? this.currentRow()[labelIdx] : \"\";\n        const value = valueIdx !== -1 ? this.currentRow()[valueIdx] : \"\";\n        const bgColor = bgColorIdx !== -1 ? this.currentRow()[bgColorIdx] : this.colorFill();\n        const fontColor = fontColorIdx !== -1 ? this.currentRow()[fontColorIdx] : this.colorStroke();\n\n        let mainFontSize = size.height * (sizeRatio - this.paddingSizeRatio());\n        const subFontSize = size.height * (1 - sizeRatio - this.paddingSizeRatio());\n        const iconSize = size.height * (this.iconSizeRatio() - this.paddingSizeRatio());\n        const p = minDimension * this.paddingSizeRatio();\n        const ctx = domNode.getContext(\"2d\");\n\n        ctx.clearRect(0, 0, size.width, size.height);\n\n        const fontFamily = context.fontFamily();\n\n        ctx.fillStyle = bgColor;\n        ctx.fillRect(0, 0, size.width, size.height);\n\n        ctx.globalAlpha = this.iconOpacity();\n        drawIcon(Utility.faChar(icon), iconSize, context.iconAnchor());\n\n        ctx.globalAlpha = this.valueOpacity();\n        mainFontSize = drawText(value, p, mainFontSize, context.valueAnchor());\n\n        ctx.globalAlpha = this.labelOpacity();\n        drawText(label, mainFontSize + p, subFontSize, context.labelAnchor());\n\n        function drawText(text, y, fontSize, anchorMode) {\n            ctx.textBaseline = \"top\";\n            ctx.font = `${fontSize}px ${fontFamily}`;\n            ctx.fillStyle = fontColor;\n            let measurement = ctx.measureText(text);\n            if (measurement.width > (size.width - (p * 2))) {\n                const fontSizeMult = (size.width - (p * 2)) / measurement.width;\n                fontSize = fontSize * fontSizeMult;\n                ctx.font = `${fontSize}px ${fontFamily}`;\n                measurement = ctx.measureText(text);\n            }\n            const x = getTextOffsetX(measurement.width, anchorMode);\n            ctx.fillText(text, x, y);\n            return fontSize;\n        }\n\n        function drawIcon(text, fontSize, anchorMode) {\n            if (typeof text === \"undefined\") return;\n            ctx.textBaseline = context.iconBaseline();\n            ctx.font = `${fontSize}px FontAwesome`;\n            ctx.fillStyle = fontColor;\n            let measurement = ctx.measureText(text);\n            if (measurement.width > (size.width - (p * 2))) {\n                const fontSizeMult = (size.width - (p * 2)) / measurement.width;\n                ctx.font = `${fontSize * fontSizeMult}px FontAwesome`;\n                measurement = ctx.measureText(text);\n            }\n            const x = getTextOffsetX(measurement.width, anchorMode);\n            const y = getTextOffsetY(context.iconBaseline());\n            ctx.fillText(text, x, y);\n        }\n\n        function getTextOffsetX(width, anchorMode) {\n            switch (anchorMode) {\n                case \"start\":\n                    return p;\n                case \"middle\":\n                    return (size.width / 2) - (width / 2);\n                case \"end\":\n                    return size.width - width - p;\n            }\n        }\n        function getTextOffsetY(anchorMode) {\n            switch (anchorMode) {\n                case \"top\":\n                    return p;\n                case \"middle\":\n                    return size.height / 2;\n                case \"bottom\":\n                    return size.height - p;\n            }\n        }\n    }\n}\nSummaryC.prototype._class += \" chart_SummaryC\";\nSummaryC.prototype.implements(I2DChart.prototype);\n\nexport interface SummaryC {\n    iconColumn(): string;\n    iconColumn(_: string): this;\n    iconColumn_exists(): boolean;\n    icon(): string;\n    icon(_: string): this;\n    icon_exists(): boolean;\n    iconOpacity(): number;\n    iconOpacity(_: number): this;\n\n    fontFamily(): string;\n    fontFamily(_: string): this;\n\n    labelColumn(): string;\n    labelColumn(_: string): this;\n    labelColumn_exists(): boolean;\n    labelOpacity(): number;\n    labelOpacity(_: number): this;\n\n    valueColumn(): string;\n    valueColumn(_: string): this;\n    valueColumn_exists(): boolean;\n    valueOpacity(): number;\n    valueOpacity(_: number): this;\n\n    fontSizeRatio(): number;\n    fontSizeRatio(_: number): this;\n\n    colorFillColumn(): string;\n    colorFillColumn(_: string): this;\n    colorFillColumn_exists(): boolean;\n    colorFill(): string;\n    colorFill(_: string): this;\n    colorFill_exists(): boolean;\n    colorStrokeColumn(): string;\n    colorStrokeColumn(_: string): this;\n    colorStrokeColumn_exists(): boolean;\n    colorStroke(): string;\n    colorStroke(_: string): this;\n    colorStroke_exists(): boolean;\n\n    fixedSize(): boolean;\n    fixedSize(_: boolean): this;\n    fixedSize_exists(): boolean;\n    minWidth(): number;\n    minWidth(_: number): this;\n    minWidth_exists(): boolean;\n    minHeight(): number;\n    minHeight(_: number): this;\n    minHeight_exists(): boolean;\n    playInterval(): number;\n    playInterval(_: number): this;\n    playInterval_exists(): boolean;\n    paddingSizeRatio(): number;\n    paddingSizeRatio(_: number): this;\n    iconSizeRatio(): number;\n    iconSizeRatio(_: number): this;\n\n    iconAnchor(): \"start\" | \"middle\" | \"end\";\n    iconAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n    labelAnchor(): \"start\" | \"middle\" | \"end\";\n    labelAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n    valueAnchor(): \"start\" | \"middle\" | \"end\";\n    valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n\n    iconBaseline(): \"top\" | \"middle\" | \"bottom\";\n    iconBaseline(_: \"top\" | \"middle\" | \"bottom\"): this;\n}\n\nSummaryC.prototype.publish(\"iconBaseline\", \"bottom\", \"string\", \"Text baseline for the icon\", [\"top\", \"middle\", \"bottom\"]);\nSummaryC.prototype.publish(\"iconAnchor\", \"end\", \"set\", \"Anchors the icon either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\nSummaryC.prototype.publish(\"valueAnchor\", \"start\", \"set\", \"Anchors the value either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\nSummaryC.prototype.publish(\"labelAnchor\", \"start\", \"set\", \"Anchors the label either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\nSummaryC.prototype.publish(\"iconColumn\", null, \"set\", \"Select Icon Column\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"icon\", \"fa-briefcase\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.iconColumn() });\n\nSummaryC.prototype.publish(\"fontFamily\", \"Arial\", \"string\", \"Font Family\");\n\nSummaryC.prototype.publish(\"labelColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"valueColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\n\nSummaryC.prototype.publish(\"colorFillColumn\", null, \"set\", \"Column for background color\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"colorFill\", \"#0097e6\", \"html-color\", \"Background Color\", null, { disable: (w) => w.colorFillColumn() });\nSummaryC.prototype.publish(\"colorStrokeColumn\", null, \"set\", \"Column for font color\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"colorStroke\", \"#2f3640\", \"html-color\", \"Font Color\", null, { disable: (w) => w.colorStrokeColumn() });\n\nSummaryC.prototype.publish(\"fixedSize\", true, \"boolean\", \"Fix Size to Min Width/Height\");\nSummaryC.prototype.publish(\"minWidth\", 225, \"number\", \"Minimum Width\");\nSummaryC.prototype.publish(\"minHeight\", 150, \"number\", \"Minimum Height\");\nSummaryC.prototype.publish(\"playInterval\", null, \"number\", \"Play Interval\", null, { optional: true });\n\nSummaryC.prototype.publish(\"fontSizeRatio\", 0.618, \"number\", \"Ratio between widget height and value font size\");\nSummaryC.prototype.publish(\"valueOpacity\", 1, \"number\", \"Opacity of value text (0..1)\");\nSummaryC.prototype.publish(\"labelOpacity\", 0.9, \"number\", \"Opacity of label text (0..1)\");\nSummaryC.prototype.publish(\"iconOpacity\", 0.3, \"number\", \"Opacity of icon text (0..1)\");\n\nSummaryC.prototype.publish(\"paddingSizeRatio\", 0.1, \"number\", \"Ratio of the smallest dimension for edge padding (0..1)\");\nSummaryC.prototype.publish(\"iconSizeRatio\", 0.9, \"number\", \"Ratio of the height for icon size (0..1)\");\n\nconst playInterval = SummaryC.prototype.playInterval;\nSummaryC.prototype.playInterval = function (_?: number): number | any {\n    const retVal = playInterval.apply(this, arguments);\n    if (arguments.length) {\n        if (this._playIntervalHandle) {\n            clearInterval(this._playIntervalHandle);\n        }\n        const context = this;\n        if (_) {\n            this._playIntervalHandle = setInterval(function () {\n                context._playIntervalIdx++;\n                if (context._renderCount && context.data().length) {\n                    context.render();\n                }\n            }, _);\n        }\n    }\n    return retVal;\n};\n","// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nimport { dispatch } from \"d3-dispatch\";\n\nconst cloudRadians = Math.PI / 180;\nconst cw = 1 << 11 >> 5;\nconst ch = 1 << 11;\n\nexport function d3Cloud() {\n    const event = dispatch(\"word\", \"end\");\n    const cloud: any = {};\n\n    let size = [256, 256];\n    let text = cloudText;\n    let font = cloudFont;\n    let fontSize = cloudFontSize;\n    let fontStyle = cloudFontNormal;\n    let fontWeight = cloudFontNormal;\n    let rotate = cloudRotate;\n    let padding = cloudPadding;\n    let words = [];\n    let spiral = archimedeanSpiral;\n    let timeInterval = Infinity;\n    let timer = null;\n    let random = Math.random;\n    let canvas = cloudCanvas;\n\n    cloud.canvas = function (_?) {\n        return arguments.length ? (canvas = functor(_), cloud) : canvas;\n    };\n\n    cloud.start = function () {\n        const contextAndRatio = getContext(canvas());\n        const board = zeroArray((size[0] >> 5) * size[1]);\n        let bounds = null;\n        const n = words.length;\n        let i = -1;\n        const tags = [];\n        const data = words.map(function (d, i) {\n            d.text = text.call(this, d, i);\n            d.font = font.call(this, d, i);\n            d.style = fontStyle.call(this, d, i);\n            d.weight = fontWeight.call(this, d, i);\n            d.rotate = rotate.call(this, d, i);\n            d.size = ~~fontSize.call(this, d, i);\n            d.padding = padding.call(this, d, i);\n            return d;\n        }).sort(function (a, b) { return b.size - a.size; });\n\n        if (timer) clearInterval(timer);\n        timer = setInterval(step, 0);\n        step();\n\n        return cloud;\n\n        function step() {\n            const start = Date.now();\n            while (Date.now() - start < timeInterval && ++i < n && timer) {\n                const d = data[i];\n                d.x = (size[0] * (random() + .5)) >> 1;\n                d.y = (size[1] * (random() + .5)) >> 1;\n                cloudSprite(contextAndRatio, d, data, i);\n                if (d.hasText && place(board, d, bounds)) {\n                    tags.push(d);\n                    event.call(\"word\", cloud, d);\n                    if (bounds) cloudBounds(bounds, d);\n                    else bounds = [{ x: d.x + d.x0, y: d.y + d.y0 }, { x: d.x + d.x1, y: d.y + d.y1 }];\n                    // Temporary hack\n                    d.x -= size[0] >> 1;\n                    d.y -= size[1] >> 1;\n                }\n            }\n            if (i >= n) {\n                cloud.stop();\n                event.call(\"end\", cloud, tags, bounds);\n            }\n        }\n    };\n\n    cloud.stop = function () {\n        if (timer) {\n            clearInterval(timer);\n            timer = null;\n        }\n        return cloud;\n    };\n\n    function getContext(canvas) {\n        canvas.width = canvas.height = 1;\n        const ratio = Math.sqrt(canvas.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\n        canvas.width = (cw << 5) / ratio;\n        canvas.height = ch / ratio;\n\n        const context = canvas.getContext(\"2d\");\n        context.fillStyle = context.strokeStyle = \"red\";\n        context.textAlign = \"center\";\n\n        return { context, ratio };\n    }\n\n    function place(board, tag, bounds) {\n        const startX = tag.x;\n        const startY = tag.y;\n        const maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]);\n        const s = spiral(size);\n        const dt = random() < .5 ? 1 : -1;\n        let t = -dt;\n        let dxdy;\n        let dx;\n        let dy;\n\n        // eslint-disable-next-line no-cond-assign\n        while (dxdy = s(t += dt)) {\n            dx = ~~dxdy[0];\n            dy = ~~dxdy[1];\n\n            if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n\n            tag.x = startX + dx;\n            tag.y = startY + dy;\n\n            if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\n                tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n            // TODO only check for collisions within current bounds.\n            if (!bounds || !cloudCollide(tag, board, size[0])) {\n                if (!bounds || collideRects(tag, bounds)) {\n                    const sprite = tag.sprite;\n                    const w = tag.width >> 5;\n                    const sw = size[0] >> 5;\n                    const lx = tag.x - (w << 4);\n                    const sx = lx & 0x7f;\n                    const msx = 32 - sx;\n                    const h = tag.y1 - tag.y0;\n                    let x = (tag.y + tag.y0) * sw + (lx >> 5);\n                    let last;\n                    for (let j = 0; j < h; j++) {\n                        last = 0;\n                        for (let i = 0; i <= w; i++) {\n                            board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n                        }\n                        x += sw;\n                    }\n                    delete tag.sprite;\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    cloud.timeInterval = function (_?) {\n        return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval;\n    };\n\n    cloud.words = function (_?) {\n        return arguments.length ? (words = _, cloud) : words;\n    };\n\n    cloud.size = function (_?) {\n        return arguments.length ? (size = [+_[0], +_[1]], cloud) : size;\n    };\n\n    cloud.font = function (_?) {\n        return arguments.length ? (font = functor(_), cloud) : font;\n    };\n\n    cloud.fontStyle = function (_?) {\n        return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle;\n    };\n\n    cloud.fontWeight = function (_?) {\n        return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight;\n    };\n\n    cloud.rotate = function (_?) {\n        return arguments.length ? (rotate = functor(_), cloud) : rotate;\n    };\n\n    cloud.text = function (_?) {\n        return arguments.length ? (text = functor(_), cloud) : text;\n    };\n\n    cloud.spiral = function (_?) {\n        return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral;\n    };\n\n    cloud.fontSize = function (_?) {\n        return arguments.length ? (fontSize = functor(_), cloud) : fontSize;\n    };\n\n    cloud.padding = function (_?) {\n        return arguments.length ? (padding = functor(_), cloud) : padding;\n    };\n\n    cloud.random = function (_?) {\n        return arguments.length ? (random = _, cloud) : random;\n    };\n\n    cloud.on = function () {\n        const value = event.on.apply(event, arguments);\n        return value === event ? cloud : value;\n    };\n\n    return cloud;\n}\n\nfunction cloudText(d) {\n    return d.text;\n}\n\nfunction cloudFont() {\n    return \"serif\";\n}\n\nfunction cloudFontNormal() {\n    return \"normal\";\n}\n\nfunction cloudFontSize(d) {\n    return Math.sqrt(d.value);\n}\n\nfunction cloudRotate() {\n    return (~~(Math.random() * 6) - 3) * 30;\n}\n\nfunction cloudPadding() {\n    return 1;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n    if (d.sprite) return;\n    const c = contextAndRatio.context;\n    const ratio = contextAndRatio.ratio;\n\n    c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n    let x = 0;\n    let y = 0;\n    let maxh = 0;\n    const n = data.length;\n    --di;\n    while (++di < n) {\n        d = data[di];\n        c.save();\n        c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\n        let w = c.measureText(d.text + \"m\").width * ratio;\n        let h = d.size << 1;\n        if (d.rotate) {\n            const sr = Math.sin(d.rotate * cloudRadians);\n            const cr = Math.cos(d.rotate * cloudRadians);\n            const wcr = w * cr;\n            const wsr = w * sr;\n            const hcr = h * cr;\n            const hsr = h * sr;\n            w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\n            h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n        } else {\n            w = (w + 0x1f) >> 5 << 5;\n        }\n        if (h > maxh) maxh = h;\n        if (x + w >= (cw << 5)) {\n            x = 0;\n            y += maxh;\n            maxh = 0;\n        }\n        if (y + h >= ch) break;\n        c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n        if (d.rotate) c.rotate(d.rotate * cloudRadians);\n        c.fillText(d.text, 0, 0);\n        if (d.padding) {\n            c.lineWidth = 2 * d.padding;\n            c.strokeText(d.text, 0, 0);\n        }\n        c.restore();\n        d.width = w;\n        d.height = h;\n        d.xoff = x;\n        d.yoff = y;\n        d.x1 = w >> 1;\n        d.y1 = h >> 1;\n        d.x0 = -d.x1;\n        d.y0 = -d.y1;\n        d.hasText = true;\n        x += w;\n    }\n    const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;\n    const sprite = [];\n    while (--di >= 0) {\n        d = data[di];\n        if (!d.hasText) continue;\n        const w = d.width;\n        const w32 = w >> 5;\n        let h = d.y1 - d.y0;\n        // Zero the buffer\n        for (let i = 0; i < h * w32; i++) sprite[i] = 0;\n        x = d.xoff;\n        if (x == null) return;\n        y = d.yoff;\n        let seen = 0;\n        let seenRow = -1;\n        for (let j = 0; j < h; j++) {\n            for (let i = 0; i < w; i++) {\n                const k = w32 * j + (i >> 5);\n                const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n                sprite[k] |= m;\n                seen |= m;\n            }\n            if (seen) seenRow = j;\n            else {\n                d.y0++;\n                h--;\n                j--;\n                y++;\n            }\n        }\n        d.y1 = d.y0 + seenRow;\n        d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n    }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n    sw >>= 5;\n    const sprite = tag.sprite;\n    const w = tag.width >> 5;\n    const lx = tag.x - (w << 4);\n    const sx = lx & 0x7f;\n    const msx = 32 - sx;\n    const h = tag.y1 - tag.y0;\n    let x = (tag.y + tag.y0) * sw + (lx >> 5);\n    let last;\n    for (let j = 0; j < h; j++) {\n        last = 0;\n        for (let i = 0; i <= w; i++) {\n            if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n                & board[x + i]) return true;\n        }\n        x += sw;\n    }\n    return false;\n}\n\nfunction cloudBounds(bounds, d) {\n    const b0 = bounds[0];\n    const b1 = bounds[1];\n    if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n    if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n    if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n    if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n    return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n    const e = size[0] / size[1];\n    return function (t) {\n        return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n    };\n}\n\nfunction rectangularSpiral(size) {\n    const dy = 4;\n    const dx = dy * size[0] / size[1];\n    let x = 0;\n    let y = 0;\n    return function (t) {\n        const sign = t < 0 ? -1 : 1;\n        // See triangular numbers: T_n = n * (n + 1) / 2.\n        switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n            case 0: x += dx; break;\n            case 1: y += dy; break;\n            case 2: x -= dx; break;\n            default: y -= dy; break;\n        }\n        return [x, y];\n    };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n    const a = [];\n    let i = -1;\n    while (++i < n) a[i] = 0;\n    return a;\n}\n\nfunction cloudCanvas() {\n    return document.createElement(\"canvas\");\n}\n\nfunction functor(d) {\n    return typeof d === \"function\" ? d : function () { return d; };\n}\n\nconst spirals = {\n    archimedean: archimedeanSpiral,\n    rectangular: rectangularSpiral\n};\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, InputField, SVGWidget, Utility, zoom as d3Zoom } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\nimport { d3Cloud } from \"./D3Cloud.ts\";\n\nimport \"../src/WordCloud.css\";\n\nexport class WordCloud extends SVGWidget {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"string\"\n    }, {\n        id: \"value\",\n        type: \"number\"\n    }];\n\n    private _prevOffsetX;\n    private _prevOffsetY;\n    private _prevZoom;\n    private _root;\n    private _canvas;\n    private _d3Cloud;\n    private _d3Zoom;\n\n    constructor() {\n        super();\n        I2DChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n\n        this._prevOffsetX = this.offsetX();\n        this._prevOffsetY = this.offsetY();\n        this._prevZoom = this.zoom();\n    }\n\n    calcData() {\n        return this.data().map(row => {\n            return {\n                __viz_label: row[0],\n                __viz_weight: row[1],\n                __viz_row: row\n            };\n        });\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection.widgetElement(element);\n\n        this._root = element.append(\"g\");\n        this._canvas = document.createElement(\"canvas\");\n\n        const context = this;\n        this._d3Zoom = d3Zoom()\n            .scaleExtent([0.1, 10])\n            ;\n        this._d3Zoom\n            .on(\"zoom\", function (evt) {\n                const event = d3Event();\n                if (event && event.transform) {\n                    context.zoomed(context._d3Zoom, [event.transform.x, event.transform.y], event.transform.k);\n                }\n            })\n            ;\n        element.call(this._d3Zoom);\n\n        this\n            .tooltipHTML(function (d) {\n                const columns = context.columns();\n                const series = columns && columns.length ? columns[0] : \"Word\";\n                return context.tooltipFormat({ label: d.__viz_label, series, value: d.__viz_weight });\n            })\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n\n        this._d3Cloud = d3Cloud()\n            .canvas(() => this._canvas)\n            ;\n\n        this.zoomed(this, [this.offsetX(), this.offsetY()], this.zoom());\n\n        const data = this.calcData();\n        const context = this;\n        const extent = d3Extent(data, function (d: any) { return d.__viz_weight; });\n        let scaler;\n        switch (this.scaleMode()) {\n            case \"log\":\n                scaler = d3ScaleLog;\n                break;\n            case \"sqrt\":\n                scaler = d3ScaleSqrt;\n                break;\n            case \"pow\":\n                scaler = d3ScalePow;\n                break;\n            case \"linear\":\n            default:\n                scaler = d3ScaleLinear;\n                break;\n        }\n        const scale = scaler().domain(extent).range([this.fontSizeFrom(), this.fontSizeTo()]);\n        const angleDomain = d3ScaleLinear().domain([0, context.angleCount() - 1]).range([context.angleFrom(), context.angleTo()]);\n\n        this._d3Cloud.stop()\n            .size([this.width(), this.height()])\n            .words(data)\n            .font(this.fontFamily())\n            .padding(this.padding())\n            .spiral(this.spiral())\n            .text(function (d) {\n                return d.__viz_label.trim();\n            })\n            .fontSize(function (d) {\n                return scale(d.__viz_weight);\n            })\n            .rotate((d, i) => angleDomain(i % context.angleCount()))\n            .on(\"word\", w => {\n            })\n            .on(\"end\", draw)\n            .start()\n            ;\n\n        function draw(data, bounds) {\n            const text = context._root.selectAll(\"text\")\n                .data(data, function (d) { return d.__viz_label ? d.__viz_label.toLowerCase() : \"\"; })\n                ;\n            text.enter().append(\"text\")\n                .attr(\"text-anchor\", \"middle\")\n                .call(context._selection.enter.bind(context._selection))\n                .text(function (d) { return d.__viz_label; })\n                .on(\"click\", function (d) {\n                    context.click(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n                })\n                .on(\"dblclick\", function (d) {\n                    context.dblclick(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n                })\n                .on(\"mouseout.tooltip\", context.tooltip.hide)\n                .on(\"mousemove.tooltip\", context.tooltip.show)\n                .style(\"opacity\", 1e-6)\n                .merge(text)\n                .style(\"font-size\", function (d) { return scale(d.__viz_weight) + \"px\"; })\n                .style(\"font-family\", context.fontFamily())\n                .transition().duration(1000)\n                .attr(\"transform\", function (d) { return \"translate(\" + [d.x, d.y] + \")rotate(\" + d.rotate + \")\"; })\n                .style(\"fill\", function (d) { return context._palette(d.__viz_label ? d.__viz_label.toLowerCase() : \"\"); })\n                .style(\"opacity\", 1)\n                ;\n            text.exit().transition().duration(1000)\n                .style(\"opacity\", 1e-4)\n                .remove()\n                ;\n        }\n    }\n\n    zoomed(source, translate, scale) {\n        if (translate[0] !== this._prevOffsetX || translate[1] !== this._prevOffsetY || scale !== this._prevZoom) {\n            this._root.attr(\"transform\", translate);\n            switch (source) {\n                case this:\n                    /*\n                        this._d3Zoom\n                            .scale(scale)\n                            .translate(translate)\n                            ;\n                    */\n                    break;\n                case this._d3Zoom:\n                    this.offsetX(translate[0]);\n                    this.offsetY(translate[1]);\n                    this.zoom(scale);\n                    break;\n            }\n            this._prevOffsetX = translate[0];\n            this._prevOffsetY = translate[1];\n            this._prevZoom = scale;\n        }\n    }\n}\nWordCloud.prototype._class += \" chart_WordCloud\";\nWordCloud.prototype.implements(I2DChart.prototype);\nWordCloud.prototype.implements(ITooltip.prototype);\nWordCloud.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface WordCloud {\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    fontFamily(): string;\n    fontFamily(_: string): this;\n    fontSizeFrom(): number;\n    fontSizeFrom(_: number): this;\n    fontSizeTo(): number;\n    fontSizeTo(_: number): this;\n    angleFrom(): number;\n    angleFrom(_: number): this;\n    angleTo(): number;\n    angleTo(_: number): this;\n    angleCount(): number;\n    angleCount(_: number): this;\n    padding(): number;\n    padding(_: number): this;\n    scaleMode(): string;\n    scaleMode(_: string): this;\n    spiral(): string;\n    spiral(_: string): this;\n    offsetX(): number;\n    offsetX(_: number): this;\n    offsetY(): number;\n    offsetY(_: number): this;\n    zoom(): number;\n    zoom(_: number): this;\n    zoom_exists(): boolean;\n\n    //  I2DChart\n    _palette;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip  ---\n    tooltip;\n    tooltipHTML(_?): any;\n    tooltipFormat(opts): any;\n    tooltipStyle(): string;\n    tooltipStyle(_: string): this;\n    tooltipValueFormat(): string;\n    tooltipValueFormat(_: string): this;\n    tooltipSeriesColor(): string;\n    tooltipSeriesColor(_: string): this;\n    tooltipLabelColor(): string;\n    tooltipLabelColor(_: string): this;\n    tooltipValueColor(): string;\n    tooltipValueColor(_: string): this;\n    tooltipTick(): boolean;\n    tooltipTick(_: boolean): this;\n    tooltipOffset(): number;\n    tooltipOffset(_: number): this;\n    tooltipOffset_exists(): boolean;\n\n    //  SimpleSelectionMixin\n    _selection: Utility.SimpleSelection;\n}\n\nWordCloud.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", WordCloud.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nWordCloud.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\n\nWordCloud.prototype.publish(\"fontFamily\", \"Impact\", \"string\", \"Font Name\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"fontSizeFrom\", 6, \"number\", \"Minimum font size (pixels)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"fontSizeTo\", 48, \"number\", \"Maximum font size (pixels)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"angleFrom\", -60, \"number\", \"Minimum angle (degrees)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"angleTo\", 60, \"number\", \"Maximum angle (degrees)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"angleCount\", 5, \"number\", \"Number of different angles\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"padding\", 0, \"number\", \"Padding between words (pixels)\", null, { tags: [\"Intermediate\"] });\nWordCloud.prototype.publish(\"scaleMode\", \"linear\", \"set\", \"Text scaling mode\", [\"linear\", \"log\", \"sqrt\", \"pow\"], { tags: [\"Intermediate\"] });\nWordCloud.prototype.publish(\"spiral\", \"archimedean\", \"set\", \"Text scaling mode\", [\"archimedean\", \"rectangular\"], { tags: [\"Intermediate\"] });\nWordCloud.prototype.publish(\"offsetX\", 0, \"number\", \"X offset\", null, { tags: [\"Advanced\"] });\nWordCloud.prototype.publish(\"offsetY\", 0, \"number\", \"Y offset\", null, { tags: [\"Advanced\"] });\nWordCloud.prototype.publish(\"zoom\", 1, \"number\", \"Zoom\", null, { tags: [\"Advanced\"] });\n","import { timeFormat } from \"d3-time-format\";\n\n/**\n * Adaptive 24-hour multi-scale tick formatter.\n * Order of precedence (first predicate that matches):\n *  milliseconds -> seconds -> minutes -> hours -> day -> month -> year.\n */\nexport function multiScale24Hours(): (d: Date) => string {\n    const fmtMs = timeFormat(\".%L\");\n    const fmtSec = timeFormat(\":%S\");\n    const fmtMin = timeFormat(\"%H:%M\");\n    const fmtHour = timeFormat(\"%H:00\");\n    const fmtDay = timeFormat(\"%b %d\");\n    const fmtMonth = timeFormat(\"%b\");\n    const fmtYear = timeFormat(\"%Y\");\n\n    return (d: Date): string => {\n        if (d.getMilliseconds() !== 0) return fmtMs(d);\n        if (d.getSeconds() !== 0) return fmtSec(d);\n        if (d.getMinutes() !== 0) return fmtMin(d);\n        if (d.getHours() !== 0) return fmtHour(d);\n        if (d.getDate() !== 1) return fmtDay(d);\n        if (d.getMonth() !== 0) return fmtMonth(d);\n        return fmtYear(d);\n    };\n}\n","export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n"],"names":["pi","Math","PI","tau","epsilon","tauEpsilon","Path","this","_x0","_y0","_x1","_y1","_","path","constant$3","x","__name","prototype","constructor","moveTo","y","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","r","x0","y0","x21","y21","x01","y01","l01_2","Error","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","l","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","atan2","max","min","halfPi","asin","arcInnerRadius","d","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","t","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","d3Arc","cornerRadius","constant","padRadius","context","buffer","r0","apply","arguments","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","a","length","Linear","_context","d3CurveLinear","p","d3Line","pointX","pointY","defined","curve","curveLinear","output","line","data","i","n","defined0","lineStart","lineEnd","point","d3Area","area","j","k","x0z","Array","y0z","areaStart","areaEnd","arealine","lineX0","lineY0","lineY1","lineX1","descending","b","NaN","identity$2","d3Pie","value","identity","sortValues","sort","pie","v","sum","index","arcs","pa","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","_line","_point","_x","_y","push","d3CurveBundle","custom","bundle","_k","_x2","_y2","Cardinal","tension","d3CurveCardinal","cardinal","_l01_a","_l01_2a","_l12_a","_l12_2a","_l23_a","_l23_2a","m","CatmullRom","alpha","_alpha","x23","y23","pow","d3curveCatmullRom","catmullRom","sign","slope3","h0","h1","s0","s1","slope2","MonotoneX","monotoneX","Natural","controlPoints","d3CurveNatural","Step","_t","d3CurveStep","stepBefore","stepAfter","_t0","Object","create","call","px","py","i0","i1","slice","identity$1","translateX","translateY","number","scale","center","offset","bandwidth","round","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","transform","values","ticks","domain","format","spacing","range","range0","range1","position","copy","selection","selectAll","tick","order","tickExit","exit","tickEnter","enter","append","attr","select","text","merge","insert","transition","isFinite","getAttribute","parentNode","remove","filter","each","tickSize","axisTop","axisRight","axisBottom","axisLeft","_Axis","SVGWidget","_origType","_origTimePattern","parser","parserInvert","formatter","d3Scale","d3Axis","d3Guides","_guideElement","svg","svgAxis","svgGuides","_tickFormatFunc","drawStartPosition","super","_drawStartPos","updateScale","lowValue","parse","low","highValue","high","forceNumeric","map","parseInvert","parseFormat","tickFormatFunc","fn","scalePos","retVal","type","isHorizontal","orientation","rangeRoundBands","rangeExtent","rangeRound","invert","pos","guideTarget","d3Select","_class","domNode","element","_prevOrientation","d3ScaleBand","paddingInner","ordinalPaddingInner","paddingOuter","ordinalPaddingOuter","ordinals_exists","ordinals","ordinalMappings_exists","mappings","ordinalMappings","d3ScaleLinear","low_exists","high_exists","tickFormat_exists","d3Format","d3ScalePow","exponent","powExponent","d3ScaleLog","base","logBase","d3ScaleTime","timePattern_exists","d3TimeParse","timePattern","d3TimeFormat","d3AxisLeft","d3AxisTop","d3AxisRight","d3AxisBottom","html","extend","delta","newLow","newHigh","width","height","tickCount","tickLength_exists","tickLength","customTicks","_d","label","adjustText","tickOverlapModulus","isHoriztontal","isLeft","isBottom","textSelection","style","fontFamily","fontSize_exists","fontSize","overlapMode","linebreak","wrap","deg","labelRotation","elm","bbox","node","getBBox","dyOff","calcTickOverlapModulus","bboxArr","getBoundingClientRect","right","left","calcOverflow","ignoreText","hidden","top","bottom","depth","tmpSvg","classID","tmpSvgG","shrinkToFit","_text","bandSize","re","words","split","reverse","lineNumber","fs","parseFloat","maxLinesPerBand","floor","minWordsPerLine","ceil","tspan","wordsOnLine","word","pop","join","getComputedTextLength","update","overlap","lowerPos","upperPos","padding","doPosition","svgLineBBox","svgText","title","svgTitleTransition","title_exists","classed","rerender","postUpdate","_element","Axis","publish","disable","optional","_type","_timePattern","_XYAxis","domainAxis","valueAxis","xAxis","yAxis","xyBrush","xBrush","yBrush","margin","focusChart","Utility","SimpleSelectionMixin","orientation_default","overlapMode_default","shrinkToFit_default","extend_default","d3Brush","on","brushMoved","brushMoved2","d3BrushX","d3BrushY","_prevBrush","resetSelection","parseData","parseValue","formatData","formatValue","parsedData","row","prevValue","cell","idx","columns","_retVal","yAxisStacked","svgRegions","svgDomainGuide","svgValueGuide","svgData","svgDataClipRect","svgFocus","svgBrush","id","_selection","widgetElement","target","chartsEnter","resizeBrushHandle","e","_skipSelection","skipSelection","selected","currSel","d3BrushSelection","dataPos","use2dSelection","pos2","valuePos","handleTypes","handlePath","s","d3Event","getAxisSize","host","calcMargin","_domNode","selectionMode","xAxisFocus","xAxisFocusHeight","xRight","xHeight","yTop","yWidth","xAxisOverlap","newXHeight","yAxisOverlap","newYWidth","updateRegions","regions","_palette","colorID","d3Hsl","brighter","_prevXAxisType","selectionGlow","tabNavigation","xAxisTitle_exists","xAxisTitle","xAxisType","colLen","xAxisOrdinalMapping","domainMin","xAxisDomainLow","d3Min","domainMax","xAxisDomainHigh","d3Max","yAxisDomainLow","indexOf","yAxisDomainHigh","maxCurrExtent","maxOtherExtent","xAxisGuideLines","render","yAxisGuideLines","updateBrush","updateFocusChart","chartsUpdate","currBrush","prevBrushSel","extent","tmp","ratio","move","syncAxis","layers","copyPropsTo","layerIdx","layer","layerColumns","masterColumns","col","layerColumnIndices","layerColumnIndex","column","layerData","indices","__hpcc_origRow","layerEnter","duration","layerUpdate","layerExit","class","resize","_selected","origRow","svgGlowID","selRows","rowToObj","setTimeout","click","lparam","XYAxis","mixin","publishProxy","tags","yAxisType","_Scatter","INDChart","ITooltip","xAxisGuideLines_default","yAxisGuideLines_default","xPos","yPos","interpolate","d3CurveStepBefore","d3CurveStepAfter","d3CurveMonotoneX","getScale","pointSizeScale","d3ScaleSqrt","pointColor","pointDarken","strokeColor","fillColor","lineColor","interpolateFill","interpolateDarken","areaColor","tooltipHTML","tooltipStyle","tooltipFormat","arr","color","rowIdx","series","_prevPointShape","mapShape","shape","parentRelativeDiv","switch","paletteID","useClonedPalette","cloneNotExists","pointShape","pointSizeColumnIdx","pointSizeColumn_exists","pointSizeColumn","d3Extent","flatData","flattenData","colIdx","size","maxPointSize","minPointSize","pointSize","areas","areasEnter","cssTag","interpolateFillOpacity","lines","linesEnter","data2","points","valueAnchor","valueBaseline","_idx","textColor","tooltip","hide","show","bind","dblclick","evt","event","code","key","preventDefault","showValue","__publicField","multi","Scatter","implements","step","_Area","interpolate_default","interpolateFill_default","Area","_Column","_linearGap","textLocal","d3Local","stackedTextLocal","skipBringToTop","adjustedData","retVal2","formatPct","showValueAsPercentFormat","dataLen","direction","columnScale","xAxisSeriesPaddingInner","domainSums","seriesSums","columnLength","rowData","showValueAsPercent","forEach","showDomainTotal","reduce","hostData","axisSize","dataRow","dataRowIdx","columnGRect","columnGEnter","tooltipInnerTextEllipsedOnly","innerTextObj","isTruncated","domainLength","domainPos","upperValue","valueText","dm","dataMeta","seriesSum","domainSum","showValueFormat","upperValuePos","lowerValuePos","valueLength","innerTextHeight","innerTextFontSize","innerTextPadding","innerTextPadding_exists","dataRect","intersectRectRect","_rects","_texts","innerTextFontFamily_exists","innerTextFontFamily","textHeightOffset","showInnerText","innerText","clippedValueLength","calcInnerText","dataText","set","Text","colorStroke_default","valueFontFamily","valueFontSize","textSize","isPositive","leftSpace","rightSpace","topSpace","bottomSpace","noRoomInside","isOutside","noRoomOnExpectedSide","valueTextWidth","category","valueCentered","hideValue","get","anchor","colorFill","visible","value4pos","stackedTotalText","valueFontFamily_exists","origInnerText","fullWidth2","fullWidth3","excessWidth","letter","Column","_Bar","Bar","count","children","node_count","eachAfter","node_each","callback","current","next","node_eachBefore","nodes","node_eachAfter","node_sum","node_sort","compare","eachBefore","node_path","end","start","ancestor","leastCommonAncestor","parent","splice","aNodes","ancestors","bNodes","c","node_ancestors","node_descendants","node_leaves","leaves","node_links","root","links","source","hierarchy","child","childs","Node","valued","defaultChildren","computeHeight","node_copy","copyData","descendants","shuffle","array","random","enclose","circles","B","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","encloseBasis1","r2","r21","r3","a2","a3","b2","b3","c2","c3","d1","d3","ab","xa","xb","ya","yb","A","C","place","intersects","score","circle","previous","packEnclose","aa","ca","sj","sk","pack","f","required","constantZero","constant$2","defaultRadius","d3Pack","radius","radiusLeaf","packChildren","translateChild","_Bubble","labelWidgets","I2DChart","d3Hierarchy","cloneData","element2","__viz_faChar","FAChar","char","colorFill_default","Bubble","_BubbleXY","BubbleXY","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","window","requestAnimationFrame","clearNow","Timer","_call","_time","_next","timerFlush","wake","nap","poke","delay","t2","time","Infinity","sleep","clearTimeout","clearInterval","setInterval","d3Bullet","vertical","ranges","bulvarRanges","markers","bulvarMarkers","measures","bulvarMeasures","bulvar","g","extentX","extentY","rangez","d3Descending","markerz","measurez","g2","empty","__chart__","w0","bulvarWidth","w1","i2","measure","marker","d3TimerFlush","restart","TypeError","stop","_Bullet","HTMLWidget","_hiddenColumns","bulletData","valueOf","titleColumn","subtitle","subtitleColumn","rangesColumn","measuresColumn","markersColumn","columnType","svgUpdate","bulletTitle","titleWidth","chart","keys","Bullet","ascending","ring","constant$1","contains","hole","ringContains","xi","yi","pj","xj","yj","segmentContains","collinear","within","q","noop$2","cases","contours","threshold","thresholdSturges","smooth","smoothLinear","tz","isArray","tickStep","contour","polygons","holes","isorings","polygon","coordinates","t3","fragmentByStart","fragmentByEnd","stitch","startIndex","endIndex","concat","unshift","v0","xt","yt","v1","_0","_1","thresholds","noop","blurX","sr","blurY","defaultX","defaultY","defaultWeight","d3ContourDensity","weight","o","density","values0","Float32Array","values1","wi","shift","geometry","transformPolygon","transformRing","transformPoint","cellSize","log","LN2","adder","Adder","reset","add","temp","bv","av","streamGeometry","stream","streamGeometryType","hasOwnProperty","streamObjectType","Feature","object","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","polygonStart","polygonEnd","geoStream","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","result","areaPointFirst","areaPoint","boundsStream","boundsPoint","bounds","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointFirstLine","centroidPointLine","z","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","geoPath","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","_circle","_Contour","_dataMinWeight","_dataMaxWeight","xAxisType_default","contourData","contourBandwidth","_vals","minValue","maxValue","showContourFill","contourStrokeColor","contourStrokeWidth","Contour","I1DChart","_Gantt","yAxisType_default","Gantt","CardinalClosed","CardinalOpen","_x3","_x4","_x5","_y3","_y4","_y5","curveCatmullRom","CatmullRomClosed","CatmullRomOpen","_typeof","Symbol","iterator","obj","classCallCheck","instance","Constructor","createClass","defineProperties","props","descriptor","enumerable","configurable","writable","defineProperty","protoProps","staticProps","_extends","assign","property","receiver","Function","desc","getOwnPropertyDescriptor","getPrototypeOf","getter","inherits","subClass","superClass","setPrototypeOf","__proto__","possibleConstructorReturn","self","ReferenceError","toConsumableArray","arr2","from","Annotation","_ref","_ref$x","_ref$y","nx","ny","_ref$dy","_ref$dx","_ref$color","subject","connector","note","className","_dx","_dy","_color","_className","setPosition","redrawSubject","clearComponents","setOffset","redrawConnector","redrawNote","setClassName","updatePosition","updateOffset","_ref2","_ref3","json","AnnotationCollection","annotations","accessors","accessorsInverse","newSettings","_this","setPositionWithAccessors","_editMode","editMode","updateEditMode","textWrap","updateTextWrap","drawText","notePadding","_this2","getNoteBBoxOffset","positionX","positionY","pointHandle","_ref$cx","_ref$cy","circleHandles","_ref2$cx","_ref2$cy","addHandles","_ref5","group","handles","_ref5$r","drag","container","leftRightDynamic","align","topBottomDynamic","orientationTopBottom","orientationLeftRight","noteAlignment","_ref$padding","_ref$bbox","_ref$offset","lineBuilder","_ref$curve","canvasContext","lineGen","builder","pathMethods","attrs","arcBuilder","arcShape","noteVertical","components","noteHorizontal","lineSetup","subjectType","annotation","subjectData","angle","radiusPadding","connectorLine","connectorData","connectorElbow","diffY","diffX","xe","ye","opposite","_angle","connectorCurve","createPoints","cHandles","updatePoint","mapHandles","anchors","diff","connectorArrow","_ref$scale","angleOffset","atan","connectorDot","line$$1","dot","subjectCircle","updateRadius","subjectRect","updateWidth","updateHeight","rHandles","subjectThreshold","subjectBadge","_ref$subjectData","_ref$type","typeSettings","notCornerOffset","placement","xleftcorner","xrightcorner","ytopcorner","ybottomcorner","xleft","xright","ytop","ybottom","circlebg","fill","pointer","notCornerPointerXY","bHandles","stroke","Type","dispatcher","noteContent","handler","addHandlers","component","name","offsetCornerX","offsetCornerY","init","mapX","mapY","builders","newWithClass","el","addAttrs","removeAttrs","currentAttrs","attributes","bboxWithoutHandles","offsetX","offsetY","subjectParams","_subject","_subject$components","_subject$handles","dragSubject","_this3","connectorParams","_connector","_connector$components","_connector$handles","endType","endScale","_this4","noteData","noteParams","lineType","_note","_note$components","_note$handles","dragNote","dragging","dragstarted","dragended","_noteAlignment","drawFunction","drawOnSVG","drawOnScreen","drawSubject","drawConnector","getNoteBBox","drawNoteContent","drawNote","sourceEvent","stopPropagation","_this5","customType","initialType","_init","_initialType","settings","_this6","d3NoteText","_Type","params","_this7","titleBBox","wrapLength","wrapSplitter","bgPadding","bgPaddingFinal","d3Callout","d3CalloutElbow","ThresholdMap","_d3Callout","lineHeight","selector","yOffset","collection","ids","annotationDispatcher","dispatch","sel","translatedAnnotations","draw","console","JSON","stringify","updateText","updatedAccessors","updateDisable","updateNotePadding","some","value2Angle","pointOnArc","indicatorTranslate","inner","rotation","indicatorTween","newAngle","d3Interpolate","arcTween","startInterpolate","endInterpolate","_Gauge","_d3Arc","_colorScale","scaleLinear","d3InterpolateHcl","_usageArc","_meanArc","_freeArc","_indInner","_indOuter","_centerTextG","_centerText","_bottomText","_tooltipG","_mainTooltip","tip","interrupt","datum","xOffset","annotationtip","d3Annotation","annotationCalloutElbow","calcSize","textElement","bb","widthTransform","heightTransform","calcWidth","maxDiameter","valueDescription","tickValueDescription","appendIndicator","titleDescription","colorDomain","colorRange","val","tickVal","tickValue","attrTween","emptyColor","tickColor","showTick","titleClickColor","titleColor","point2","Gauge","sortAscending","sortDescending","_Pie","_totalValue","d3LabelArc","_labelPositions","_smallValueLabelHeight","_labelWidthLimit","_quadIdxArr","_minLabelTop","_maxLabelBottom","_seriesValueFormatter","_seriesPercentageFormatter","tooltipTick_default","tooltipOffset_default","intersection","pointA","pointB","intersectCircle","calcOuterRadius","calcInnerRadius","innerRadius_exists","maxTextWidth","getLabelText","horizontalLimit","_size","showLabels","verticalLimit","minOuterRadius","calcSmallValueLabelHeight","totalVal","acc","smallCount","labelHeight","calcTotalValue","calcPadAngleRadians","paddingValue","slicePadding","truncate","len","labelWidth","showSeriesValue","showSeriesPercentage","perc","selection2","strRow","selectByLabel","_slices","_labels","updateD3Pie","seriesValueFormat","seriesPercentageFormat","labelRadius","sortDataByValue","quad","getQuadrant","midAngle","mergedText","mid_angle","isLeftSide","adjustForOverlap","polyline","outerRadiusDelta","pos1","centerOnLabels","normalizeRadians","radians","rad","gY","gY2","heightDiff","absTop","yShift","prevTop","degreesToRadians","Pie","_HalfPie","_pos","_target","SVGElement","_widgetScale","HalfPie","_Heat","_domForeignObject","_domCanvas","_heat","radiusX","radiusY","simpleheat","maxWeight","maxWeight_exists","gradient","reversePalette","defaultGradient","radiusAsPercent","clear","blur","minOpacity","Heat","canvas","_canvas","document","getElementById","_ctx","getContext","_width","_height","_max","_data","Palette","rainbow","rX","rY","ellipse","_ellipse","_createCanvas","ctx","rX2","_r","rY2","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","beginPath","grad","createLinearGradient","addColorStop","fillStyle","fillRect","_grad","getImageData","clearRect","globalAlpha","drawImage","colored","_colorize","putImageData","pixels","createElement","thirdPi","angles","d3HexBin","hexbin","binsById","bins","isNaN","py1","px1","pi2","pj2","px2","py2","bin","hexagon","centers","mesh","fragment","_HexBin","_hexbin","I2DAggrChart","tooltipValueFormat_default","seriesExtent","labelExtent","binSize","dataPoints","hexBinPoints","minBinPoints","maxBinPoints","HexBin","_Line","Line","_QuarterPie","QuarterPie","_QuartileCandlestick","_g","_leftLine","_rightLine","_midLine","_midOuterRect","_midInnerRect1","_midInnerRect2","_q0text","_q1text","_q2text","_q3text","_q4text","_q0val","_q1val","_q2val","_q3val","_q4val","valueSize","lineWidth","domainSize","edgePadding","candleWidth","candleWidth_exists","roundedCorners","q0x","q1x","q2x","q3x","dataTop","dataBottom","upperTextRotation","lowerTextRotation","textPadding","labelFontSize","sz","q4x","transX","transY","rotate","textScale","labelAnchor","innerRectColor","showValues","QuartileCandlestick","_Radar","setPointAttributes","half_size","half_h","half_w","domain_points","degrees2radians","max_label_h","max_label_w","isize","labels","max_val","xy","polar2cartesian","labelPaddingRatio","text_anchor","domains","value_guides","valueGuideRatios","mult","poly_points","domain_point","row_idx","value_guide_text","series_polygons","fillOpacity","col_idx","val_mult","point_elm","data_row","row_obj","pointElement","theta","cartesian2polar","radians2degrees","point_in_polygon","vs","inside","Radar","_RadialBar","_domainScale","_valueScale","_arcs","_axialAxis","_radialAxis","valueDomainHigh_exists","valueDomainHigh","valueMaxAngle","chartRadius","domainData","domainPadding","domainCircles","domainText","valueLines","degrees","valueColumn","transitionDelay","transitionDuration","indx","_current","RadialBar","palette","ordinal","myFormatter","num","strVal","_StatChart","_selectElement","_tickFormatter","_bellCurve","xAxisOverlapMode","xAxisTickFormat","yAxisHidden","_candle","stdDev","mean","standardDeviation","formatStdDev","quartile","quartiles","formatQ","mode","view","lazyRender","bellTicks","domainLow","domainHigh","sd","updateScatter","xAxisTicks","candleHeight","updateCandle","candleX","candleW","StatChart","_Step","TEXT","HTML","_Summary","_playIntervalIdx","_mainDiv","_headerDiv","_textDiv","_tag","playInterval","lookupFieldIdx","propID","defaultIdx","lookupFieldText","currentRow","summaryData","labelFieldIdx","hideLabel","iconFieldIdx","valueFieldIdx","moreIconIdx","moreTextIdx","hideMore","colorFillIdx","colorStrokeIdx","formattedData","icon","moreIcon","moreText","colorStroke","fixedSize","minWidth_exists","minWidth","minHeight_exists","minHeight","iconFontSize","headerFontSize","valueHTML","textFontSize","labelHTML","moreDivs","moreDivsUpdate","hideMoreWrapper","moreFontSize","moreWrapperHeight_exists","moreWrapperHeight","d3Rgb","darker","moreTextHTML","innerHTML","Summary","iconColumn","moreIconColumn","moreTextColumn","colorFillColumn","colorStrokeColumn","_playIntervalHandle","_renderCount","_SummaryC","CanvasWidget","minDimension","sizeRatio","fontSizeRatio","labelIdx","labelColumn","valueIdx","bgColorIdx","fontColorIdx","iconIdx","bgColor","fontColor","mainFontSize","paddingSizeRatio","subFontSize","iconSize","iconSizeRatio","anchorMode","textBaseline","font","measurement","measureText","getTextOffsetX","fillText","drawIcon","iconBaseline","fontSizeMult","getTextOffsetY","iconOpacity","faChar","iconAnchor","valueOpacity","labelOpacity","SummaryC","cloudRadians","ch","d3Cloud","cloud","cloudText","cloudFont","cloudFontSize","fontStyle","cloudFontNormal","fontWeight","cloudRotate","cloudPadding","spiral","archimedeanSpiral","timeInterval","timer","cloudCanvas","strokeStyle","textAlign","board","tag","startX","startY","maxDelta","dt","dxdy","cloudCollide","collideRects","sprite","sw","lx","sx","msx","last","functor","contextAndRatio","zeroArray","cloudSprite","hasText","cloudBounds","spirals","di","maxh","save","cr","wcr","wsr","hcr","hsr","translate","strokeText","restore","xoff","yoff","w32","seen","seenRow","b0","b1","rectangularSpiral","archimedean","rectangular","_WordCloud","_prevOffsetX","_prevOffsetY","_prevZoom","_root","_d3Cloud","_d3Zoom","zoom","calcData","__viz_label","__viz_weight","__viz_row","d3Zoom","scaleExtent","zoomed","scaler","scaleMode","fontSizeFrom","fontSizeTo","angleDomain","angleCount","angleFrom","angleTo","toLowerCase","trim","WordCloud","multiScale24Hours","fmtMs","timeFormat","fmtSec","fmtMin","fmtHour","fmtDay","fmtMonth","fmtYear","getMilliseconds","getSeconds","getMinutes","getHours","getDate","getMonth"],"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,19,20,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,47,48,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,94]}