@hpcc-js/chart 3.5.0 → 3.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8683 -8918
- package/dist/index.js.map +1 -1
- package/dist/index.umd.cjs +3 -2
- package/dist/index.umd.cjs.map +1 -1
- package/package.json +6 -6
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["pi","tau","epsilon","x","y","x1","y1","x0","y0","cw","x","abs","max","min","sqrt","epsilon","pi","halfPi","tau","x","asin","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","x1","x0","y1","y0","cornerTangents","cw","sqrt","x00","y00","max","constant","halfPi","abs","path","tau","min","asin","pi","a","Linear","x","y","x","y","x","pointX","y","pointY","constant","curveLinear","path","x0","pointX","x1","y0","constant","y1","pointY","curveLinear","k","path","line","a","identity","descending","constant","tau","k","i","j","point","x","y","Basis","Bundle","Basis","x","y","x0","y0","beta","point","x","y","Cardinal","tension","point","x1","y1","a","x","y","CatmullRom","Cardinal","alpha","sign","x","slope3","slope2","point","x0","y0","x1","y1","MonotoneX","y","MonotoneY","ReflectContext","Natural","x","y","controlPoints","a","Step","x","y","x1","slice","x","epsilon","x","y","k","axis","format","identity","range","path","slice","retVal: IOverflow","lowerPos: number","upperPos: number","currSel: any","prevBrushSel: any","context: XYAxis","valueAnchor: \"start\" | \"middle\" | \"end\"","k","a","c","Node","node_count","node_each","node_eachAfter","node_eachBefore","node_sum","node_sort","node_path","node_ancestors","node_descendants","node_leaves","node_links","slice","array","slice","a","x1","y1","c","a","x","y","c","circle","k","enclose","x","x","constant","k","now","d3AxisLeft","d3Descending","d3Select","wrap","x1","d3ScaleLinear","x0","range","axis","x","slice","a","x","c","x","point","y","pi","a","ascending","area","contains","x","y","point","constant","slice","noop","x","y","k","constant","data","contours","slice","y","x","a","pi","halfPi","tau","x","adder","x00","y00","x0","y0","x","y","x0","y0","x","y","x00","y00","x0","y0","x","y","x","y","tau","adder","x","y","x","y","path","pathArea","pathMeasure","pathBounds","pathCentroid","identity","x","x","x1","x0","y1","y0","cw","x00","y00","constant","path","a","x","y","x","pointX","y","pointY","constant","curveLinear","path","curveLinear","a","point","x","y","noop","x","y","x","y","x0","y0","x","y","x0","y0","beta","point","x","y","tension","noop","x","y","tension","x","y","tension","point","x1","y1","a","x","y","alpha","noop","x","y","alpha","x","y","alpha","noop","x","y","x","x0","y0","x1","y1","y","x","y","a","Step","x","y","x1","get","Annotation","x","y","AnnotationCollection","a","k","pointHandle","circleHandles","addHandles","leftRightDynamic","topBottomDynamic","lineBuilder","curveLinear","lineGen","line","arcBuilder","arc","lineSetup","annotation","x1","y1","curveCatmullRom","c","updatePoint","createPoints","updateRadius","circle","notCornerPointerXY","sign","Type","s","customType","d3NoteText","newWithClass","addHandlers","wrap","text","bboxWithoutHandles","padding: number | undefined","x0","y0","x1","y1","x","y","point","pi","dx","dy","ticks: Ticks","row: any","cloud: any"],"sources":["../src/__package__.ts","../../../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/curve/radial.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/symbol/diamond.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/symbol/star.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/symbol/triangle.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/symbol/wye.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/basisClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/basisOpen.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/linearClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/step.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/array.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"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","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: (date: Date) => string;\n protected d3Scale;\n protected d3Axis;\n protected d3Guides;\n protected _guideElement;\n protected svg;\n protected svgAxis;\n protected svgGuides;\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 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 this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\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 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 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\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\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { 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 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 ;\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 ;\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}\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 { 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 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 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(this.xAxisSeriesPaddingInner())\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 .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).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\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, \"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","import curveLinear from \"./linear\";\n\nexport var curveRadialLinear = curveRadial(curveLinear);\n\nfunction Radial(curve) {\n this._curve = curve;\n}\n\nRadial.prototype = {\n areaStart: function() {\n this._curve.areaStart();\n },\n areaEnd: function() {\n this._curve.areaEnd();\n },\n lineStart: function() {\n this._curve.lineStart();\n },\n lineEnd: function() {\n this._curve.lineEnd();\n },\n point: function(a, r) {\n this._curve.point(r * Math.sin(a), r * -Math.cos(a));\n }\n};\n\nexport default function curveRadial(curve) {\n\n function radial(context) {\n return new Radial(curve(context));\n }\n\n radial._curve = curve;\n\n return radial;\n}\n","var tan30 = Math.sqrt(1 / 3),\n tan30_2 = tan30 * 2;\n\nexport default {\n draw: function(context, size) {\n var y = Math.sqrt(size / tan30_2),\n x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {pi, tau} from \"../math\";\n\nvar ka = 0.89081309152928522810,\n kr = Math.sin(pi / 10) / Math.sin(7 * pi / 10),\n kx = Math.sin(tau / 10) * kr,\n ky = -Math.cos(tau / 10) * kr;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size * ka),\n x = kx * r,\n y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (var i = 1; i < 5; ++i) {\n var a = tau * i / 5,\n c = Math.cos(a),\n s = Math.sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","var sqrt3 = Math.sqrt(3);\n\nexport default {\n draw: function(context, size) {\n var y = -Math.sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","var c = -0.5,\n s = Math.sqrt(3) / 2,\n k = 1 / Math.sqrt(12),\n a = (k / 2 + 1) * 3;\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / a),\n x0 = r / 2,\n y0 = r * k,\n x1 = x0,\n y1 = r * k + r,\n x2 = -x1,\n y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\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 noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\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._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\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 BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.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 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; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // 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 BasisOpen(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","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\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","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 { 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 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 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 enter(_domNode, element) {\n super.enter(_domNode, element);\n this._selection.widgetElement(element);\n this._slices = element.append(\"g\");\n this._labels = element.append(\"g\");\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.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 super.update(_domNode, element);\n const context = this;\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 innerRadius = this.calcInnerRadius();\n const outerRadius = this.calcOuterRadius();\n const labelRadius = outerRadius + 12;\n this.d3Arc\n .innerRadius(innerRadius)\n .padRadius(outerRadius)\n .outerRadius(outerRadius)\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 .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 .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(0.0025)\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 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): string | Pie;\n useClonedPalette(_?: boolean): boolean | Pie;\n outerText(_?: boolean): boolean | Pie;\n innerRadius(): number;\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}\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(\"sortDataByValue\", \"descending\", \"set\", \"Sort data by value\", [\"none\", \"ascending\", \"descending\"]);\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"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,48,49,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,106],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/__package__.ts","../../../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"],"sourcesContent":["export const PKG_NAME = \"__PACKAGE_NAME__\";\nexport const PKG_VERSION = \"__PACKAGE_VERSION__\";\nexport const BUILD_VERSION = \"__BUILD_VERSION__\";\n","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: (date: Date) => string;\n protected d3Scale;\n protected d3Axis;\n protected d3Guides;\n protected _guideElement;\n protected svg;\n protected svgAxis;\n protected svgGuides;\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 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 this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\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 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 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\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\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { 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 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 ;\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 ;\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}\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 { 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 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 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(this.xAxisSeriesPaddingInner())\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 .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).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\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, \"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 { 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 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 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 enter(_domNode, element) {\n super.enter(_domNode, element);\n this._selection.widgetElement(element);\n this._slices = element.append(\"g\");\n this._labels = element.append(\"g\");\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.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 super.update(_domNode, element);\n const context = this;\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 innerRadius = this.calcInnerRadius();\n const outerRadius = this.calcOuterRadius();\n const labelRadius = outerRadius + 12;\n this.d3Arc\n .innerRadius(innerRadius)\n .padRadius(outerRadius)\n .outerRadius(outerRadius)\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 .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 .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(0.0025)\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 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): string | Pie;\n useClonedPalette(_?: boolean): boolean | Pie;\n outerText(_?: boolean): boolean | Pie;\n innerRadius(): number;\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}\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(\"sortDataByValue\", \"descending\", \"set\", \"Sort data by value\", [\"none\", \"ascending\", \"descending\"]);\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"],"names":["pi","tau","epsilon","x","y","x1","y1","x0","y0","cw","constant","abs","sqrt","halfPi","asin","arcInnerRadius","arcOuterRadius","arcStartAngle","arcEndAngle","arcPadAngle","intersect","cornerTangents","x00","y00","arc","Linear","pointX","pointY","curveLinear","line","area","identity","i","j","point","Basis","Bundle","beta","Cardinal","custom","tension","x2","y2","CatmullRom","alpha","sign","slope3","slope2","MonotoneX","Step","slice","axis","format","range","path","d3Select","d3ScaleBand","d3ScaleLinear","d3Format","d3ScalePow","d3ScaleLog","d3ScaleTime","d3TimeParse","d3TimeFormat","d3AxisLeft","d3AxisTop","d3AxisRight","d3AxisBottom","element","d3Brush","d3BrushX","d3BrushY","d3BrushSelection","d3Hsl","d3Min","d3Max","min","max","d3CurveStepBefore","d3CurveStepAfter","d3CurveMonotoneX","d3ScaleSqrt","extent","d3Extent","d3Local","d","padding","Node","array","circle","d3Hierarchy","now","d3Descending","wrap","d3TimerFlush","contains","contours","noop","data","adder","stream","pathArea","pathMeasure","pathBounds","pathCentroid","get","Annotation","AnnotationCollection","pointHandle","circleHandles","addHandles","leftRightDynamic","topBottomDynamic","lineBuilder","lineGen","arcBuilder","lineSetup","annotation","updatePoint","createPoints","updateRadius","updateWidth","updateHeight","notCornerPointerXY","dragBadge","Type","customType","d3NoteText","ThresholdMap","newWithClass","addHandlers","text","bboxWithoutHandles","interpolate","d3Interpolate","d3InterpolateHcl","d3Annotation","annotationCalloutElbow","point2","row","arcTween","top","bottom","count","pi2","dx","dy","n","d3Rgb","playInterval","event","place","canvas","d3Zoom"],"mappings":"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","x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,48,49,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,95]}
|