{"version":3,"file":"index.umd.cjs","names":["abs","max","sqrt","epsilon","pi","halfPi","tau","pi","tau","epsilon","append","appendRound","sqrt","max","constant","halfPi","abs","tau","pi","slice","constant","curveLinear","x","pointX","y","pointY","array","constant","curveLinear","pointX","pointY","array","line","identity","descending","constant","tau","array","point","point","point","Step","identity","SVGWidget","d3Select","d3ScaleBand","d3ScaleLinear","d3Format","d3ScalePow","d3ScaleLog","d3ScaleTime","d3TimeParse","d3TimeFormat","d3AxisLeft","d3AxisTop","d3AxisRight","d3AxisBottom","SVGWidget","d3Brush","d3BrushX","d3BrushY","d3BrushSelection","d3Hsl","d3Min","d3Max","Utility","d3CurveLinear","d3CurveStep","d3CurveStepBefore","d3CurveStepAfter","d3CurveBasis","d3CurveBundle","d3CurveCardinal","d3curveCatmullRom","d3CurveNatural","d3CurveMonotoneX","d3ScaleLinear","d3ScalePow","d3ScaleLog","d3ScaleSqrt","d3Extent","d3Area","d3Select","d3Line","INDChart","ITooltip","d3Local","d3Format","d3ScaleBand","d3Select","Text","INDChart","ITooltip","Node","node_count","node_each","node_eachAfter","node_eachBefore","node_find","node_sum","node_sort","node_path","node_ancestors","node_descendants","node_leaves","node_links","node_iterator","array","lcg","constant","SVGWidget","d3Pack","d3Hierarchy","d3Select","FAChar","Text","I2DChart","ITooltip","Utility","HTMLWidget","d3Select","d3Bullet","thresholdSturges","extent","ticks","nice","ascending","area","contains","constant","noop","constant","ticks","max","Contours","Adder","x00","y00","x0","y0","x0","y0","x00","y00","x0","y0","Adder","pathArea","pathMeasure","pathBounds","pathCentroid","identity","d3ContourDensity","geoPath","I1DChart","d3Interpolate","SVGWidget","d3Arc","scaleLinear","d3InterpolateHcl","d3Annotation","annotationCalloutElbow","d3Format","SVGWidget","d3Pie","d3Arc","d3Format","d3Select","d3Interpolate","normalizeRadians","degreesToRadians","I2DChart","ITooltip","Utility","max","Palette","d3Extent","d3HexBin","d3Min","d3Max","I2DAggrChart","ITooltip","SVGWidget","d3ScaleLinear","SVGWidget","d3Select","INDChart","ITooltip","Utility","SVGWidget","d3ScaleBand","d3ScaleLinear","d3Arc","d3Interpolate","INDChart","ITooltip","Utility","Palette","d3Format","HTMLWidget","HTMLWidget","d3Select","d3Rgb","I2DChart","playInterval","CanvasWidget","Utility","I2DChart","dispatch","SVGWidget","d3Zoom","d3Extent","d3ScaleLog","d3ScaleSqrt","d3ScalePow","d3ScaleLinear","I2DChart","ITooltip","Utility","timeFormat","factory","global","exports","__defProp","target","PKG_NAME","PKG_VERSION","BUILD_VERSION","x","abs$1","atan2","cos","max$2","min","sin","sqrt$1","pi$2","halfPi$1","tau$2","pi$1","tau$1","epsilon$1","tauEpsilon","strings","i","d","digits","k","n","y","x1","y1","x2","y2","r","x0","y0","x21","y21","x01","y01","l01_2","x20","y20","l21_2","l20_2","l21","l01","l","t01","t21","ccw","dx","a0","dy","cw","da","a1","w","h","_","shape","x10","y10","x32","x3","y32","y3","t","lo","rc","ox","oy","x11","y11","x00","y00","d2","r1","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","innerRadius","outerRadius","cornerRadius","padRadius","startAngle","endAngle","padAngle","context","path","buffer","r0","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","t0","t1","p0","p1","oc","ax","ay","bx","by","kc","lc","a","p","defined","curve","output","x$1","y$1","data","defined0","j","x0z","y0z","b","value","sortValues","sort","sum","index","arcs","pa","v","that","beta","bundle_default","tension","cardinal_default","m","alpha","x23","y23","catmullRom_default","h0","h1","s0","s1","px","py","i0","i1","top","right","bottom","left","epsilon","scale","offset","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","orient","transform","values","format","spacing","range","range0","range1","position","selection","tick","tickExit","tickEnter","line","text","_hpcc_js_common","drawStartPosition","forceNumeric","fn","retVal","pos","domNode","element","mappings","length","delta","low","high","newLow","newHigh","customTicks","isHoriztontal","isLeft","isBottom","textSelection","svg","tickOverlapModulus","deg","elm","bbox","dyOff","bboxArr","isHorizontal","tmpSvg","tmpSvgG","ignoreText","_text","words","re","lineNumber","lineHeight","fs","maxLinesPerBand","bandSize","minWordsPerLine","tspan","wordsOnLine","word","overlap","lowerPos","upperPos","svgLineBBox","svgText","svgTitleTransition","event","prevValue","row","idx","cell","_retVal","e","height","width","selected","currSel","pos2","handleTypes","handlePath","s","host","margin","xRight","xHeight","yTop","yWidth","xAxisOverlap","newXHeight","yAxisOverlap","newYWidth","regions","colLen","ordinalMappings","domainMin","domainMax","max","maxCurrExtent","maxOtherExtent","currBrush","prevBrushSel","tmp","ratio","focusChart","layerIdx","layer","masterColumns","col","column","indices","duration","\"__xyAxisElement\"","_selected","selRows","origRow","_hpcc_js_api","usePointSizeColumn","pointSizeColumnIdx","extent","layerColumns","layerData","flatData","areas","areasEnter","area","_d","lines","linesEnter","data2","points","\"value\"","retVal2","formatPct","dataLen","columnScale","domainSums","seriesSums","columnLength","rowData","hostData","axisSize","columnGRect","dataRow","dataRowIdx","columnGEnter","domainLength","domainPos","upperValue","valueText","dm","seriesSum","domainSum","upperValuePos","lowerValuePos","valuePos","valueLength","innerTextHeight","innerTextPadding","dataRect","_rects","_texts","padding","textHeightOffset","innerText","clippedValueLength","innerTextObj","dataText","valueFontFamily","valueFontSize","textSize","isPositive","valueAnchor","leftSpace","rightSpace","topSpace","bottomSpace","noRoomInside","isOutside","noRoomOnExpectedSide","valueTextWidth","textColor","columns","hideValue","value4pos","stackedTotalText","fontFamily","fontSize","ellipsisWidth","innerTextWidth","origInnerText","fullWidth","fullWidth2","fullWidth3","category","excessWidth","letter","children","node","callback","nodes","next","compare","start","ancestor","end","aNodes","bNodes","c","leaves","root","links","current","child","childs","f","array","random","circles","B","dr","r2","r21","r3","a2","a3","b2","b3","c2","c3","d1","d3","ab","xa","xb","ya","yb","A","C","circle","aa","ca","sj","sk","radius","parent","element2","colIdx","columnType","_domNode","svgUpdate","bulletTitle","title","titleWidth","chart","_hpcc_js_d3_bullet","slice","ring","constant_default","hole","point","contains","pi","xi","yi","pj","xj","yj","q","cases","threshold","smooth","tz","polygons","holes","polygon","fragmentByStart","fragmentByEnd","t2","t3","startIndex","endIndex","g","xt","yt","v1","_0","_1","v0","weight","o","pow2k","wi","pow4k","contours","geometry","coordinates","tau","abs","sqrt","streamGeometryType","stream","streamObjectType","object","features","geometries","closed","coordinate","identity_default","areaSum","areaRingSum","x00$2","y00$2","x0$3","y0$3","areaStream","x0$2","y0$2","boundsStream","bounds","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","x00$1","y00$1","x0$1","y0$1","centroidStream","centroid","z","lengthSum","lengthRing","lengthStream","cacheDigits","cacheAppend","cacheRadius","cacheCircle","result","pointRadius","projectionStream","contextStream","projection","contourData","_vals","minValue","maxValue","_element","angle","rotation","inner","interpolate","newAngle","startInterpolate","endInterpolate","arc","Gauge","lineType","xOffset","yOffset","annotationtip","_hpcc_js_d3_annotation","bb","textElement","widthTransform","heightTransform","size","val","tickVal","point2","pointA","pointB","maxTextWidth","horizontalLimit","verticalLimit","totalVal","acc","smallCount","paddingValue","len","label","truncate","labelWidth","perc","strRow","labelRadius","quad","mergedText","mid_angle","polyline","pos1","delay","outerRadiusDelta","_hpcc_js_util","midAngle","rad","radians","gY","gY2","heightDiff","absTop","yShift","labelHeight","prevTop","maxWeight","gradient","reverse","radiusX","radiusY","canvas","blur","ellipse","ctx","rX2","rX","rY2","rY","grad","minOpacity","colored","pixels","thirdPi","angles","binsById","bins","py1","px1","pi2","pj2","px2","py2","id","bin","centers","fragment","seriesExtent","labelExtent","dataPoints","hexBinPoints","minBinPoints","maxBinPoints","valueSize","domainSize","candleWidth","lineWidth","lineColor","roundedCorners","q0x","q1x","q2x","q3x","dataTop","dataBottom","upperTextRotation","lowerTextRotation","labelFontSize","sz","q4x","transX","transY","rotate","textScale","labelAnchor","half_size","half_h","half_w","domain_points","max_label_h","max_label_w","isize","labels","max_val","xy","text_anchor","_x","domains","value_guides","poly_points","domain_point","mult","value_guide_text","series_polygons","row_idx","col_idx","val_mult","point_elm","data_row","row_obj","pointElement","theta","inside","vs","ticks","chartRadius","domainData","domainPadding","domainCircles","domainText","valueLines","valueColumn","indx","degrees","rainbow","palette","formatter","strVal","num","mode","domainLow","domainHigh","sd","candleX","candleW","TEXT","HTML","defaultIdx","propID","labelFieldIdx","iconFieldIdx","valueFieldIdx","moreIconIdx","moreTextIdx","colorFillIdx","colorStrokeIdx","moreDivs","moreDivsUpdate","playInterval$1","minDimension","sizeRatio","labelIdx","valueIdx","bgColorIdx","fontColorIdx","iconIdx","icon","bgColor","fontColor","mainFontSize","subFontSize","iconSize","measurement","fontSizeMult","anchorMode","playInterval","cloudRadians","ch","cloud","font","fontStyle","fontWeight","spiral","timeInterval","timer","contextAndRatio","board","tags","startX","tag","startY","maxDelta","dt","dxdy","sprite","sw","lx","sx","msx","last","spirals","maxh","di","sr","cr","wcr","wsr","hcr","hsr","w32","seen","seenRow","b0","b1","sign","series","scaler","angleDomain","translate","source","fmtMs","fmtSec","fmtMin","fmtHour","fmtDay","fmtMonth","fmtYear"],"sources":["../src/__package__.ts","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/path.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/array.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/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/find.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/iterator.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/lcg.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/pack/index.js","../src/Bubble.ts","../src/BubbleXY.ts","../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/density.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","../src/Gauge.ts","../src/Pie.ts","../src/HalfPie.ts","../src/Heat.ts","../../../node_modules/d3-hexbin/src/hexbin.js","../src/HexBin.ts","../src/Line.ts","../src/QuarterPie.ts","../src/QuartileCandlestick.ts","../src/Radar.ts","../src/RadialBar.ts","../src/StatChart.ts","../src/Step.ts","../src/Summary.ts","../src/SummaryC.ts","../src/D3Cloud.ts","../src/WordCloud.ts","../src/timeFormats.ts"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/chart\";\nexport const PKG_VERSION = \"3.11.3\";\nexport const BUILD_VERSION = \"3.38.1\";\n","export default function(x) {\n  return function constant() {\n    return x;\n  };\n}\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const 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","const pi = Math.PI,\n    tau = 2 * pi,\n    epsilon = 1e-6,\n    tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n  this._ += strings[0];\n  for (let i = 1, n = strings.length; i < n; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  let d = Math.floor(digits);\n  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  const k = 10 ** d;\n  return function(strings) {\n    this._ += strings[0];\n    for (let i = 1, n = strings.length; i < n; ++i) {\n      this._ += Math.round(arguments[i] * k) / k + strings[i];\n    }\n  };\n}\n\nexport class Path {\n  constructor(digits) {\n    this._x0 = this._y0 = // start of current subpath\n    this._x1 = this._y1 = null; // end of current subpath\n    this._ = \"\";\n    this._append = digits == null ? append : appendRound(digits);\n  }\n  moveTo(x, y) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n  }\n  closePath() {\n    if (this._x1 !== null) {\n      this._x1 = this._x0, this._y1 = this._y0;\n      this._append`Z`;\n    }\n  }\n  lineTo(x, y) {\n    this._append`L${this._x1 = +x},${this._y1 = +y}`;\n  }\n  quadraticCurveTo(x1, y1, x, y) {\n    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  bezierCurveTo(x1, y1, x2, y2, x, y) {\n    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n  }\n  arcTo(x1, y1, x2, y2, r) {\n    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x1,y1).\n    if (this._x1 === null) {\n      this._append`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._append`L${this._x1 = x1},${this._y1 = y1}`;\n    }\n\n    // Otherwise, draw an arc!\n    else {\n      let 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._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n      }\n\n      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n    }\n  }\n  arc(x, y, r, a0, a1, ccw) {\n    x = +x, y = +y, r = +r, ccw = !!ccw;\n\n    // Is the radius negative? Error.\n    if (r < 0) throw new Error(`negative radius: ${r}`);\n\n    let 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 this path empty? Move to (x0,y0).\n    if (this._x1 === null) {\n      this._append`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._append`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._append`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._append`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(x, y, w, h) {\n    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n  }\n  toString() {\n    return this._;\n  }\n}\n\nexport function path() {\n  return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n  return new Path(+digits);\n}\n","import {Path} from \"d3-path\";\n\nexport function withPath(shape) {\n  let digits = 3;\n\n  shape.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) {\n      digits = null;\n    } else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    return shape;\n  };\n\n  return () => new Path(digits);\n}\n","import constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\nimport {withPath} from \"./path.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      path = withPath(arc);\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. If this\n        // intersection fails, it’s probably because the arc is too small, so\n        // disable the corner radius entirely.\n        if (da < pi) {\n          if (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          } else {\n            rc0 = rc1 = 0;\n          }\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","export var slice = Array.prototype.slice;\n\nexport default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\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; // falls through\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 array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x, y) {\n  var defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(line);\n\n  x = typeof x === \"function\" ? x : (x === undefined) ? pointX : constant(x);\n  y = typeof y === \"function\" ? y : (y === undefined) ? pointY : constant(y);\n\n  function line(data) {\n    var i,\n        n = (data = array(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 array from \"./array.js\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {withPath} from \"./path.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function(x0, y0, y1) {\n  var x1 = null,\n      defined = constant(true),\n      context = null,\n      curve = curveLinear,\n      output = null,\n      path = withPath(area);\n\n  x0 = typeof x0 === \"function\" ? x0 : (x0 === undefined) ? pointX : constant(+x0);\n  y0 = typeof y0 === \"function\" ? y0 : (y0 === undefined) ? constant(0) : constant(+y0);\n  y1 = typeof y1 === \"function\" ? y1 : (y1 === undefined) ? pointY : constant(+y1);\n\n  function area(data) {\n    var i,\n        j,\n        k,\n        n = (data = array(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 array from \"./array.js\";\nimport 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 = array(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); // falls through\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); // falls through\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; // falls through\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; // falls through\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; // falls through\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 default function(x) {\n  return x;\n}\n","import identity from \"./identity.js\";\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)\";\n}\n\nfunction translateY(y) {\n  return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n  return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n  if (scale.round()) offset = Math.round(offset);\n  return d => +scale(d) + offset;\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      offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\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] + offset,\n        range1 = +range[range.length - 1] + offset,\n        position = (scale.bandwidth ? center : number)(scale.copy(), offset),\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 + offset) : 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)) + offset); });\n    }\n\n    tickExit.remove();\n\n    path\n        .attr(\"d\", orient === left || orient === right\n            ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n            : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n    tick\n        .attr(\"opacity\", 1)\n        .attr(\"transform\", function(d) { return transform(position(d) + offset); });\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 = Array.from(arguments), axis;\n  };\n\n  axis.tickArguments = function(_) {\n    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n  };\n\n  axis.tickValues = function(_) {\n    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), 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  axis.offset = function(_) {\n    return arguments.length ? (offset = +_, axis) : offset;\n  };\n\n  return axis;\n}\n\nexport function axisTop(scale) {\n  return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n  return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n  return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n  return axis(left, scale);\n}\n","import { SVGWidget } from \"@hpcc-js/common\";\nimport { axisBottom as d3AxisBottom, axisLeft as d3AxisLeft, axisRight as d3AxisRight, axisTop as d3AxisTop } from \"d3-axis\";\nimport { format as d3Format } from \"d3-format\";\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleTime as d3ScaleTime } from \"d3-scale\";\nimport { select as d3Select } from \"d3-selection\";\nimport { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\n\nimport \"../src/Axis.css\";\n\nexport interface IOverflow {\n    left: number;\n    top: number;\n    right: number;\n    bottom: number;\n    depth: number;\n    tickOverlapModulus: number;\n}\n\nexport class Axis extends SVGWidget {\n    _origType;\n    _origTimePattern;\n\n    protected parser;\n    protected parserInvert;\n    protected formatter: ((d: Date | any) => string) | null;\n    protected d3Scale;\n    protected d3Axis;\n    protected d3Guides;\n    protected _guideElement;\n    protected svg;\n    protected svgAxis;\n    protected svgGuides;\n    protected _tickFormatFunc?: (d: any) => string;\n\n    constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n        super();\n        this._drawStartPos = drawStartPosition;\n\n        this.updateScale();\n    }\n\n    lowValue() {\n        return this.parse(this.low());\n    }\n\n    highValue() {\n        return this.parse(this.high());\n    }\n\n    parse(d, forceNumeric?) {\n        if (d instanceof Array) {\n            return d.map(function (d2) {\n                return this.parse(d2);\n            }, this);\n        }\n        if (d !== undefined && d !== null) {\n            if (this.parser) {\n                return this.parser(typeof d === \"number\" ? d.toString() : d);\n            }\n            if (forceNumeric && typeof d === \"string\") {\n                return +d;\n            }\n        }\n        return d;\n    }\n\n    parseInvert(d) {\n        if (d instanceof Array) {\n            return d.map(function (d2) {\n                return this.parseInvert(d2);\n            }, this);\n        }\n        if (this.parserInvert && d) {\n            return this.parserInvert(d);\n        }\n        return d;\n    }\n\n    format(d) {\n        if (d instanceof Array) {\n            return d.map(function (d2) {\n                return this.format(d2);\n            }, this);\n        }\n        if (d !== undefined && d !== null && this.formatter) {\n            return this.formatter(d);\n        }\n        return d;\n    }\n\n    parseFormat(d) {\n        return this.format(this.parse(d));\n    }\n\n    tickFormatFunc(fn: (d: any) => string): this;\n    tickFormatFunc(): ((d: any) => string) | undefined;\n    tickFormatFunc(fn?: (d: any) => string): this | ((d: any) => string) | undefined {\n        if (!arguments.length) return this._tickFormatFunc;\n        this._tickFormatFunc = fn;\n        this.updateScale();\n        return this;\n    }\n\n    scalePos(d) {\n        let retVal = this.d3Scale(this.parse(d));\n        if (this.type() === \"ordinal\") {\n            retVal += this.bandwidth() / 2;\n        }\n        return retVal;\n    }\n\n    bandwidth() {\n        return this.d3Scale.bandwidth ? this.d3Scale.bandwidth() : 0;\n    }\n\n    isHorizontal() {\n        switch (this.orientation()) {\n            case \"left\":\n            case \"right\":\n                return false;\n            default:\n        }\n        return true;\n    }\n\n    domain(_?) {\n        if (!arguments.length) return this.d3Scale.domain();\n        this.d3Scale.domain(_);\n        return this;\n    }\n\n    range(_?) {\n        if (!arguments.length) {\n            if (this.d3Scale.rangeRoundBands) {\n                return this.d3Scale.rangeExtent();\n            } else if (this.d3Scale.rangeRound) {\n                return this.d3Scale.range();\n            }\n        }\n        if (this.d3Scale.rangeRoundBands) {\n            this.d3Scale.rangeRoundBands(_, 0.1);\n        } else if (this.d3Scale.rangeRound) {\n            this.d3Scale.range(_);\n        }\n        return this;\n    }\n\n    invert(pos) {\n        return this.d3Scale.invert(pos);\n    }\n\n    guideTarget(_) {\n        this._guideElement = d3Select(_)\n            .attr(\"class\", this._class)\n            ;\n        return this;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this.svg = element.append(\"g\");\n        this.svgAxis = this.svg.append(\"g\")\n            .attr(\"class\", \"axis\")\n            ;\n        this.svgGuides = (this._guideElement || element).append(\"g\")\n            .attr(\"class\", \"guide\")\n            ;\n    }\n\n    protected _prevOrientation;\n    updateScale(): this {\n        switch (this.type()) {\n            case \"ordinal\":\n                this.d3Scale = d3ScaleBand()\n                    .paddingInner(this.ordinalPaddingInner())\n                    .paddingOuter(this.ordinalPaddingOuter())\n                    ;\n                if (this.ordinals_exists()) {\n                    this.d3Scale.domain(this.ordinals());\n                }\n                this.parser = null;\n                if (this.ordinalMappings_exists()) {\n                    const mappings = this.ordinalMappings();\n                    this.formatter = (_: any) => mappings[_] || _;\n                } else {\n                    this.formatter = null;\n                }\n                break;\n            case \"linear\":\n                this.d3Scale = d3ScaleLinear();\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = null;\n                this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n                break;\n            case \"pow\":\n                this.d3Scale = d3ScalePow()\n                    .exponent(this.powExponent())\n                    ;\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = null;\n                this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n                break;\n            case \"log\":\n                this.d3Scale = d3ScaleLog()\n                    .base(this.logBase())\n                    ;\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = null;\n                this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n                break;\n            case \"time\":\n                this.d3Scale = d3ScaleTime();\n                if (this.low_exists() && this.high_exists()) {\n                    this.d3Scale.domain([this.lowValue(), this.highValue()]);\n                }\n                this.parser = this.timePattern_exists() ? d3TimeParse(this.timePattern()) : null;\n                this.parserInvert = this.timePattern_exists() ? d3TimeFormat(this.timePattern()) : null;\n                if (this._tickFormatFunc) {\n                    this.formatter = this._tickFormatFunc;\n                } else {\n                    this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\n                }\n                break;\n            default:\n        }\n        if (this._prevOrientation !== this.orientation()) {\n            switch (this.orientation()) {\n                case \"left\":\n                    this.d3Axis = d3AxisLeft(this.d3Scale);\n                    this.d3Guides = d3AxisLeft(this.d3Scale);\n                    break;\n                case \"top\":\n                    this.d3Axis = d3AxisTop(this.d3Scale);\n                    this.d3Guides = d3AxisTop(this.d3Scale);\n                    break;\n                case \"right\":\n                    this.d3Axis = d3AxisRight(this.d3Scale);\n                    this.d3Guides = d3AxisRight(this.d3Scale);\n                    break;\n                case \"bottom\":\n                default:\n                    this.d3Axis = d3AxisBottom(this.d3Scale);\n                    this.d3Guides = d3AxisBottom(this.d3Scale);\n                    break;\n            }\n            this._prevOrientation = this.orientation();\n            if (this.svgAxis) {\n                this.svgAxis.html(\"\");\n            }\n            if (this.svgGuides) {\n                this.svgGuides.html(\"\");\n            }\n        }\n\n        if (this.extend()) {\n            switch (this.type()) {\n                case \"ordinal\":\n                    break;\n                default:\n                    let length;\n                    let delta;\n                    let low;\n                    let high;\n                    let newLow;\n                    let newHigh;\n                    if (this.isHorizontal()) {\n                        length = this.width();\n                        this.d3Scale.range([0, length]);\n                        delta = length * this.extend() / 100;\n                        low = this.d3Scale.invert(0);\n                        newLow = this.d3Scale.invert(-delta);\n                        high = this.d3Scale.invert(length);\n                        newHigh = this.d3Scale.invert(length + delta);\n                    } else {\n                        length = this.height();\n                        this.d3Scale.range([length, 0]);\n                        delta = length * this.extend() / 100;\n                        low = this.d3Scale.invert(length);\n                        newLow = this.d3Scale.invert(length + delta);\n                        high = this.d3Scale.invert(0);\n                        newHigh = this.d3Scale.invert(-delta);\n                    }\n                    if (newLow === low) { //  Edge case when there is only one item in the domain  ---\n                        newLow = low - low * this.extend() / 100;\n                    }\n                    if (newHigh === high) { //  Edge case when there is only one item in the domain  ---\n                        newHigh = high + high * this.extend() / 100;\n                    }\n                    if ((Math as any).sign(low) !== (Math as any).sign(newLow)) {\n                        newLow = 0;\n                    }\n                    if ((Math as any).sign(high) !== (Math as any).sign(newHigh)) {\n                        newHigh = 0;\n                    }\n                    this.d3Scale.domain([newLow, newHigh]);\n                    break;\n            }\n        }\n\n        this.d3Axis\n            .scale(this.d3Scale)\n            .tickFormat(this.formatter)\n            .ticks(this.tickCount())\n            ;\n        this.d3Guides\n            .scale(this.d3Scale)\n            .tickSize(this.tickLength_exists() ? -this.tickLength() : 0)\n            .tickFormat(\"\")\n            .ticks(this.tickCount())\n            ;\n        const customTicks = this.ticks();\n        if (customTicks.length) {\n            this.d3Axis\n                .tickValues(customTicks.map(d => this.parse(d.value)))\n                .tickFormat((_d, i) => {\n                    return customTicks[i].label;\n                });\n            this.d3Guides\n                .tickValues(customTicks.map(d => this.parse(d.value)));\n        }\n        return this;\n    }\n\n    adjustText(svg, tickOverlapModulus) {\n        const isHoriztontal = this.isHorizontal();\n        const isLeft = this.orientation() === \"left\";\n        const isBottom = this.orientation() === \"bottom\";\n        const context = this;\n        const textSelection = svg.selectAll(\".tick > text\")\n            .style(\"font-family\", this.fontFamily())\n            .style(\"font-size\", this.fontSize_exists() ? this.fontSize() + \"px\" : null)\n            ;\n        if (this.overlapMode() === \"linebreak\") {\n            if (this.type() === \"ordinal\") {\n                textSelection\n                    .call(function () {\n                        return context.linebreak.apply(context, arguments);\n                    }, this.bandwidth())\n                    ;\n            }\n        } else if (this.overlapMode() === \"wrap\") {\n            if (this.type() === \"ordinal\") {\n                textSelection\n                    .call(function () {\n                        return context.wrap.apply(context, arguments);\n                    }, this.bandwidth())\n                    ;\n            }\n        } else {\n            switch (isHoriztontal ? this.overlapMode() : \"none\") {\n                case \"stagger\":\n                    textSelection\n                        .style(\"text-anchor\", \"middle\")\n                        .attr(\"dy\", function (_d, i) { return (isBottom ? 1 : -1) * ((isBottom ? 0.71 : 0) + i % tickOverlapModulus) + \"em\"; })\n                        .attr(\"dx\", 0)\n                        .attr(\"visibility\", null)\n                        .attr(\"transform\", \"rotate(0)\")\n                        ;\n                    break;\n                case \"hide\":\n                    textSelection\n                        .style(\"text-anchor\", \"middle\")\n                        .attr(\"dy\", (isBottom ? 0.71 : 0) + \"em\")\n                        .attr(\"dx\", 0)\n                        .attr(\"visibility\", function (_d, i) { return i % tickOverlapModulus ? \"hidden\" : null; })\n                        .attr(\"transform\", \"rotate(0)\")\n                        ;\n                    break;\n                case \"rotate\":\n                    const deg = -(this.labelRotation()) || 0;\n                    if (deg !== 0 && tickOverlapModulus > 1) {\n                        textSelection\n                            .each(function () {\n                                const elm = d3Select(this);\n                                const bbox = elm.node().getBBox();\n                                const dyOff = (isBottom ? 1 : -1) * Math.sin(Math.PI * (-Math.abs(deg) / 180));\n                                elm\n                                    .style(\"text-anchor\", deg > 0 ? (isBottom ? \"start\" : \"end\") : (isBottom ? \"end\" : \"start\"))\n                                    .attr(\"dy\", (bbox.height / 2 * dyOff) + \"px\")\n                                    .attr(\"dx\", deg > 0 ? (isBottom ? \"0.71em\" : \"-0.71em\") : (isBottom ? \"-0.71em\" : \"0.71em\"))\n                                    .attr(\"transform\", \"rotate(\" + deg + \")\")\n                                    .attr(\"visibility\", null)\n                                    ;\n                            })\n                            ;\n                        break;\n                    }\n                /* falls through */\n                default:\n                    textSelection\n                        .style(\"text-anchor\", isHoriztontal ? \"middle\" : isLeft ? \"end\" : \"start\")\n                        .attr(\"dy\", isHoriztontal ? ((isBottom ? 0.71 : 0) + \"em\") : \"0.32em\")\n                        .attr(\"dx\", 0)\n                        .attr(\"visibility\", null)\n                        .attr(\"transform\", \"rotate(0)\")\n                        ;\n            }\n        }\n    }\n\n    calcTickOverlapModulus(element) {\n        let retVal = 1;\n        switch (this.overlapMode()) {\n            case \"rotate\":\n            case \"stagger\":\n            case \"hide\":\n                const bboxArr = [];\n                element.selectAll(\".tick > text\").each(function () {\n                    const bbox = this.getBoundingClientRect();\n                    for (let i = bboxArr.length - 1; i >= 0; --i) {\n                        if (bboxArr[i].right < bbox.left) {\n                            break;\n                        }\n                        if (bboxArr.length + 1 - i > retVal) {\n                            retVal = bboxArr.length + 1 - i;\n                        }\n                    }\n                    bboxArr.push(bbox);\n                });\n                break;\n            default:\n        }\n        return retVal;\n    }\n\n    calcOverflow(element, ignoreText?): IOverflow {\n        this.updateScale();\n        if (this.hidden()) {\n            return {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0,\n                depth: 0,\n                tickOverlapModulus: 1\n            };\n        }\n        const isHorizontal = this.isHorizontal();\n        this.range(isHorizontal ? [0, this.width()] : [this.height(), 0]);\n        const tmpSvg = element.append(\"g\").attr(\"class\", this.classID());\n        const tmpSvgG = tmpSvg.append(\"g\");\n        tmpSvgG\n            .attr(\"class\", isHorizontal ? \"x\" : \"y\")\n            .call(this.d3Axis)\n            ;\n        if (ignoreText) {\n            element.selectAll(\".tick > text\").remove();\n        }\n\n        const retVal: IOverflow = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0,\n            depth: 0,\n            tickOverlapModulus: this.calcTickOverlapModulus(tmpSvgG)\n        };\n        this.adjustText(tmpSvgG, retVal.tickOverlapModulus);\n\n        const bbox = tmpSvgG.node().getBBox();\n        retVal.depth = isHorizontal ? bbox.height : bbox.width;\n        switch (this.shrinkToFit()) {\n            case \"low\":\n            case \"both\":\n                retVal.left = isHorizontal ? -bbox.x : 0;\n                retVal.bottom = isHorizontal ? 0 : -(this.height() - (bbox.height + bbox.y));\n                break;\n            default:\n        }\n        switch (this.shrinkToFit()) {\n            case \"high\":\n            case \"both\":\n                retVal.top = isHorizontal ? 0 : -bbox.y;\n                retVal.right = isHorizontal ? -(this.width() - bbox.x - bbox.width) : 0;\n                break;\n            default:\n        }\n        tmpSvg.remove();\n\n        return retVal;\n    }\n\n    wrap(_text, bandSize, re) {\n        re = re || /\\s+/;\n        const context = this;\n        _text.each(function () {\n            const text = d3Select(this);\n            const words = text.text().split(re).reverse();\n            let line = [];\n            let lineNumber = 0;\n            const lineHeight = 1.1;\n            const x = text.attr(\"x\");\n            const y = text.attr(\"y\");\n            const fs = parseFloat(text.style(\"font-size\")) || 10;\n            const maxLinesPerBand = Math.floor(bandSize / (fs * lineHeight)) - 1;\n            const minWordsPerLine = context.isHorizontal() ? 1 : Math.ceil(words.length / maxLinesPerBand);\n            const dy = parseFloat(text.attr(\"dy\"))\n                ;\n            let tspan = text.text(null).append(\"tspan\")\n                .attr(\"x\", x)\n                .attr(\"y\", y)\n                .attr(\"dy\", dy + \"em\")\n                ;\n            let wordsOnLine = 0;\n            let word = words.pop();\n            while (word) {\n                line.push(word);\n                tspan.text(line.join(\" \"));\n                wordsOnLine++;\n                if ((tspan.node() as any).getComputedTextLength() > bandSize && wordsOnLine >= minWordsPerLine) {\n                    line.pop();\n                    tspan.text(line.join(\" \"));\n                    line = [word];\n                    tspan = text.append(\"tspan\").attr(\"x\", x).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n                    wordsOnLine = 0;\n                }\n                word = words.pop();\n            }\n            if (!context.isHorizontal()) {\n                text.selectAll(\"tspan\")\n                    .attr(\"y\", (-lineNumber / 2) + \"em\")\n                    ;\n            }\n        });\n    }\n\n    linebreak(text, bandSize) {\n        this.wrap(text, bandSize, \"\\n\");\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n\n        this.svg.style(\"display\", this.hidden() ? \"none\" : null);\n\n        const overlap = this.calcOverflow(element);\n\n        const lowerPos: number = this.isHorizontal() ? overlap.left : this.height() - overlap.top - overlap.bottom;\n        const upperPos: number = this.isHorizontal() ? this.width() - overlap.right - this.padding() : 0 + this.padding();\n\n        this.range(this.reverse() ? [upperPos, lowerPos] : [lowerPos, upperPos]);\n\n        const context = this;\n        function doPosition(element) {\n            element.attr(\"transform\", function () {\n                switch (context.orientation()) {\n                    case \"left\":\n                        return \"translate(\" + overlap.depth + \", \" + overlap.top + \")\";\n                    case \"top\":\n                        return \"translate(0,\" + overlap.depth + \")\";\n                    case \"right\":\n                        return \"translate(\" + (context.width() - overlap.depth) + \", \" + overlap.top + \")\";\n                    case \"bottom\":\n                        return \"translate(0,\" + (context.height() - overlap.depth) + \")\";\n                    default:\n                }\n                return \"translate(0,0)\";\n            });\n        }\n        this.svg\n            // .attr(\"class\", this.isHorizontal() ? \"x\" : \"y\")\n            .style(\"visibility\", this.type() === \"none\" ? \"hidden\" : null)\n            .transition()\n            .call(doPosition)\n            ;\n        if (this._guideElement) {\n            this.svgGuides\n                .transition()\n                .call(doPosition)\n                ;\n        }\n        this.svgAxis\n            .call(this.d3Axis)\n            ;\n        this.adjustText(this.svgAxis, overlap.tickOverlapModulus);\n\n        const svgLineBBox = {\n            x: this.pos().x,\n            width: this.width()\n        };\n        const svgText = this.svgAxis.selectAll(\".axisTitle\").data(this.title() ? [this.title()] : []);\n        const svgTextUpdate = svgText.enter().append(\"text\")\n            .attr(\"class\", \"axisTitle\")\n            .merge(svgText)\n            ;\n        const svgTitleTransition = svgTextUpdate.transition()\n            .attr(\"dx\", null)\n            .style(\"text-anchor\", \"end\")\n            ;\n        switch (this.orientation()) {\n            case \"left\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(-90)\")\n                    .attr(\"x\", -2)\n                    .attr(\"y\", 2)\n                    .attr(\"dy\", \".71em\")\n                    ;\n                break;\n            case \"right\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(-90)\")\n                    .attr(\"x\", -2)\n                    .attr(\"y\", 4)\n                    .attr(\"dx\", null)\n                    .attr(\"dy\", \"-.71em\")\n                    ;\n                break;\n            case \"top\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(0)\")\n                    .attr(\"x\", svgLineBBox.width - 2)\n                    .attr(\"y\", 2)\n                    .attr(\"dx\", null)\n                    .attr(\"dy\", \".71em\")\n                    ;\n                break;\n            case \"bottom\":\n                svgTitleTransition\n                    .attr(\"transform\", \"rotate(0)\")\n                    .attr(\"x\", svgLineBBox.width - 2)\n                    .attr(\"y\", -2)\n                    .attr(\"dy\", null)\n                    ;\n                break;\n            default:\n        }\n        svgTitleTransition\n            .text(this.title_exists() ? this.title() : \"\")\n            ;\n        svgText.exit().remove();\n        this.svgGuides\n            .call(this.d3Guides)\n            .selectAll(\".tick\").classed(\"guide-0\", d => d === 0 && this.low() < 0)\n            ;\n    }\n\n    rerender() {\n        this.svgAxis.call(this.d3Axis);\n        this.svgGuides.call(this.d3Guides);\n    }\n\n    postUpdate(domNode, element) {\n        super.postUpdate(domNode, element);\n        if (this._guideElement) {\n            this._guideElement\n                .attr(\"transform\", this._element.attr(\"transform\"))\n                ;\n        }\n    }\n}\nAxis.prototype._class += \" chart_Axis\";\n\nexport interface Axis {\n    type(): string;\n    type(_: string): this;\n    type_exists(): boolean;\n    timePattern(): string;\n    timePattern(_: string): this;\n    timePattern_exists(): boolean;\n    reverse(): boolean;\n    reverse(_: boolean): this;\n\n    title(): string;\n    title(_: string): this;\n    title_exists(): boolean;\n    orientation(): string;\n    orientation(_: string): this;\n    orientation_default(): string;\n    orientation_default(_: string): this;\n    powExponent(): number;\n    powExponent(_: number): this;\n    logBase(): number;\n    logBase(_: number): this;\n    ordinals(): string[];\n    ordinals(_: string[]): this;\n    ordinals_exists(): boolean;\n    fontSize(): number;\n    fontSize(_: number): this;\n    fontSize_exists(): boolean;\n    fontFamily(): string;\n    fontFamily(_: string): this;\n    tickCount(): number;\n    tickCount(_: number): this;\n    tickFormat(): string;\n    tickFormat(_: string): this;\n    tickFormat_exists(): boolean;\n    tickFormat_reset(): void;\n    tickFormatFunc(fn: (d: any) => string): this;\n    tickFormatFunc(): ((d: any) => string) | undefined;\n    tickLength(): number;\n    tickLength(_: number): this;\n    tickLength_exists(): boolean;\n    ticks(): Array<{ value: string, label: string }>;\n    ticks(_: Array<{ value: string, label: string }>): this;\n    low(): any;\n    low(_: any): this;\n    low_exists(): boolean;\n    high(): any;\n    high(_: any): this;\n    high_exists(): boolean;\n    overlapMode(): string;\n    overlapMode(_: string): this;\n    overlapMode_default(): string;\n    overlapMode_default(_: string): this;\n    labelRotation(): number;\n    labelRotation(_: number): this;\n    shrinkToFit(): string;\n    shrinkToFit(_: string): this;\n    shrinkToFit_default(): string;\n    shrinkToFit_default(_: string): this;\n    extend(): number;\n    extend(_: number): this;\n    extend_default(): number;\n    extend_default(_: number): this;\n    hidden(): boolean;\n    hidden(_: boolean): this;\n\n    ordinalPaddingInner(): number;\n    ordinalPaddingInner(_: number): this;\n    ordinalPaddingOuter(): number;\n    ordinalPaddingOuter(_: number): this;\n    ordinalMappings(_: { [key: string]: string }): this;\n    ordinalMappings(): { [key: string]: string };\n    ordinalMappings_exists(): boolean;\n    padding(): number;\n    padding(_: number): this;\n}\n\nAxis.prototype.publish(\"type\", \"linear\", \"set\", \"Type\", [\"none\", \"ordinal\", \"linear\", \"pow\", \"log\", \"time\"]);\nAxis.prototype.publish(\"timePattern\", \"%Y-%m-%d\", \"string\", \"Time Series Pattern\", null, { disable: (w: any) => w.type() !== \"time\" });\nAxis.prototype.publish(\"reverse\", false, \"boolean\", \"Reverse\");\n\nAxis.prototype.publish(\"title\", null, \"string\", \"Title\");\nAxis.prototype.publish(\"orientation\", \"bottom\", \"set\", \"Placement/orientation of the axis\", [\"left\", \"top\", \"right\", \"bottom\"]);\nAxis.prototype.publish(\"powExponent\", 2, \"number\", \"Power exponent (disabled when type is not 'pow')\", null, { disable: (w: any) => w.type() !== \"pow\" });\nAxis.prototype.publish(\"logBase\", 10, \"number\", \"Logarithmic base (disabled when type is not 'log')\", null, { disable: (w: any) => w.type() !== \"log\" });\nAxis.prototype.publish(\"ordinals\", [], \"array\", \"Array of ordinal values to display (disabled when type is not 'ordinal')\", null, { disable: (w: any) => w.type() !== \"ordinal\" });\nAxis.prototype.publish(\"fontSize\", null, \"number\", \"Size of tick label font (pixels)\", null, { optional: true });\nAxis.prototype.publish(\"fontFamily\", null, \"string\", \"Font family of tick labels\", null, { optional: true });\nAxis.prototype.publish(\"tickCount\", null, \"number\", \"Number of ticks to display (disabled when type is 'ordinal')\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"tickFormat\", null, \"string\", \"Format rules for tick text (disabled when type is 'ordinal')\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"tickLength\", null, \"number\", \"Height (or width for left/right orientations) of the axis ticks (in pixels)\", null, { optional: true });\nAxis.prototype.publish(\"ticks\", [], \"array\", \"Custom tick labels\", null, { optional: true }); // TODO: What does this control?\nAxis.prototype.publish(\"low\", null, \"any\", \"Minimum tick value (disabled when type is ordinal)\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"high\", null, \"any\", \"Maximum tick value (disabled when type is ordinal)\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"overlapMode\", \"none\", \"set\", \"Specifies the behavior when tick labels overlap\", [\"none\", \"stagger\", \"hide\", \"rotate\", \"linebreak\", \"wrap\"]);\nAxis.prototype.publish(\"labelRotation\", 33, \"number\", \"Angle of rotation for tick labels (disabled when overlapMode is not 'rotate')\", null, { optional: true, disable: (w: any) => w.overlapMode() !== \"rotate\" });\nAxis.prototype.publish(\"shrinkToFit\", \"both\", \"set\", \"shrinkToFit\", [\"none\", \"low\", \"high\", \"both\"]); // TODO: What does this control?\nAxis.prototype.publish(\"extend\", 5, \"number\", \"Extend the axis range by this % beyond what is needed to display the data (disabled when type is 'ordinal')\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\nAxis.prototype.publish(\"hidden\", false, \"boolean\", \"Hides axis when 'true'\");\n\nAxis.prototype.publish(\"ordinalPaddingInner\", 0.1, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\", null, { disable: (w: Axis) => w.type() !== \"ordinal\" });\nAxis.prototype.publish(\"ordinalPaddingOuter\", 0.1, \"number\", \"Determines the ratio of the range that is reserved for blank space before the first band and after the last band (0->1)\", null, { disable: (w: Axis) => w.type() !== \"ordinal\" });\nAxis.prototype.publish(\"ordinalMappings\", null, \"object\", \"Alternative label mappings (icons)\", null, { optional: true });\nAxis.prototype.publish(\"padding\", 0, \"number\", \"Padding space at top of axis (pixels)\", null, { optional: true });\n\nAxis.prototype._origType = Axis.prototype.type;\nAxis.prototype.type = function (_?: string) {\n    const retVal = Axis.prototype._origType.apply(this, arguments);\n    if (_ !== undefined) {\n        this._type = _;\n        this.updateScale();\n    }\n    return retVal;\n};\n\nAxis.prototype._origTimePattern = Axis.prototype.timePattern;\nAxis.prototype.timePattern = function (_?: string) {\n    const retVal = Axis.prototype._origTimePattern.apply(this, arguments);\n    if (_ !== undefined) {\n        this._timePattern = _;\n        this.updateScale();\n    }\n    return retVal;\n};\n","import { 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\", (event) => {\n                return this.brushMoved2(event);\n            })\n            ;\n        this.xBrush = d3BrushX()\n            .on(\"end\", () => {\n                return this.brushMoved();\n            })\n            .on(\"start.handle brush.handle end.handle\", (event) => {\n                return this.brushMoved2(event);\n            })\n            ;\n        this.yBrush = d3BrushY()\n            .on(\"end\", () => {\n                return this.brushMoved();\n            })\n            .on(\"start.handle brush.handle end.handle\", (event) => {\n                return this.brushMoved2(event);\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(event) {\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 = event.selection;\n        if (s == null) {\n            handlePath.attr(\"display\", \"none\");\n        } else if (isHorizontal) {\n            handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + s[i] + \",\" + 0 + \")\");\n        } else {\n            handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + 0 + \", \" + s[i] + \")\");\n        }\n    }\n\n    dataPos(d) {\n        return this.domainAxis.scalePos(d);\n    }\n\n    valuePos(d) {\n        return this.valueAxis.scalePos(d);\n    }\n\n    getAxisSize(host: XYAxis): { width: number, height: number } {\n        return {\n            width: !this.xAxis ? host.xAxis.width() : this.xAxis.width(),\n            height: !this.yAxis ? host.yAxis.width() : this.yAxis.height()\n        };\n    }\n\n    calcMargin(_domNode, element, isHorizontal) {\n        const margin = {\n            top: !isHorizontal && this.selectionMode() ? 10 : 2,\n            right: isHorizontal && (this.selectionMode() || this.xAxisFocus()) ? 10 : 2,\n            bottom: (this.xAxisFocus() ? this.xAxisFocusHeight() : 0) + 2,\n            left: 2\n        };\n        const width = this.width() - margin.left - margin.right;\n        const height = this.height() - margin.top - margin.bottom;\n\n        let xRight = 0;\n        let xHeight = 30;\n        let yTop = 0;\n        let yWidth = 30;\n        for (let i = 0; i < 10; ++i) {\n            this.xAxis.width(width - yWidth).height(0);\n            const xAxisOverlap = this.xAxis.calcOverflow(element);\n            const newXHeight = xAxisOverlap.depth;\n\n            this.yAxis.width(0).height(height - xHeight);\n            const yAxisOverlap = this.yAxis.calcOverflow(element);\n            const newYWidth = yAxisOverlap.depth;\n\n            xRight = xAxisOverlap.right;\n            yTop = yAxisOverlap.top;\n\n            if (newXHeight === xHeight && newYWidth === yWidth) {\n                break;\n            }\n            xHeight = newXHeight;\n            yWidth = newYWidth;\n        }\n        this.xAxis\n            .x(width / 2 + yWidth / 2 + margin.left)\n            .y(height + margin.top)\n            .width(width - yWidth)\n            ;\n        this.yAxis\n            .x(margin.left)\n            .y(height / 2 - xHeight / 2 + margin.top)\n            .height(height - xHeight)\n            ;\n        margin.left += yWidth;\n        margin.top += yTop;\n        margin.right += xRight;\n        margin.bottom += xHeight;\n        return margin;\n    }\n\n    updateRegions(_domNode, _element, isHorizontal) {\n        const context = this;\n\n        const regions = this.svgRegions.selectAll(\".region\").data(this.regions());\n        regions.enter().append(\"rect\")\n            .attr(\"class\", \"region\")\n            ;\n        if (isHorizontal) {\n            regions\n                .attr(\"x\", function (d) { return context.dataPos(d.x0); })\n                .attr(\"y\", 0)\n                .attr(\"width\", function (d) { return context.dataPos(d.x1) - context.dataPos(d.x0); })\n                .attr(\"height\", this.height())\n                .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n                .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n                ;\n        } else {\n            regions\n                .attr(\"x\", 0)\n                .attr(\"y\", function (d) { return context.dataPos(d.x0); })\n                .attr(\"width\", this.width())\n                .attr(\"height\", function (d) { return context.dataPos(d.x0) - context.dataPos(d.x1); })\n                .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n                .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n                ;\n        }\n        regions.exit().remove();\n    }\n\n    protected _prevXAxisType;\n    update(domNode, element) {\n        this.selectionGlow(!this.tabNavigation());\n        super.update(domNode, element);\n        const context = this;\n\n        const isHorizontal = this.orientation() === \"horizontal\";\n        this.updateRegions(domNode, element, isHorizontal);\n\n        this.domainAxis\n            .orientation(isHorizontal ? \"bottom\" : \"left\")\n            .title(this.xAxisTitle_exists() ? this.xAxisTitle() : this.columns()[0])\n            ;\n        this.valueAxis\n            .orientation(isHorizontal ? \"left\" : \"bottom\")\n            ;\n        this.xAxis = isHorizontal ? this.domainAxis : this.valueAxis;\n        this.yAxis = isHorizontal ? this.valueAxis : this.domainAxis;\n\n        //  Update Domain  ---\n        switch (this.xAxisType()) {\n            case \"ordinal\":\n                const colLen = this.columns().length;\n                const ordinalMappings = {};\n                this.domainAxis\n                    .ordinals(this.data().map(function (d) {\n                        ordinalMappings[d[0]] = context.xAxisOrdinalMapping(d, d[colLen]);\n                        return d[0];\n                    }))\n                    .ordinalMappings(ordinalMappings)\n                    ;\n\n                break;\n            default:\n                const domainMin = this.xAxisDomainLow() ? this.xAxisDomainLow() : this.domainAxis.parseInvert(d3Min(this.parsedData(), function (data) {\n                    return data[0];\n                }));\n                const domainMax = this.xAxisDomainHigh() ? this.xAxisDomainHigh() : this.domainAxis.parseInvert(d3Max(this.parsedData(), function (data) {\n                    return data[0];\n                }));\n                if (domainMin !== undefined && domainMax !== undefined) {\n                    this.domainAxis\n                        .low(domainMin)\n                        .high(domainMax)\n                        ;\n                }\n                break;\n        }\n\n        const min = this.yAxisDomainLow() ? this.yAxisDomainLow() : this.valueAxis.parseInvert(d3Min(this.parsedData(), function (data: any[]) {\n            return d3Min(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[0] : d; });\n        }));\n        const max = this.yAxisDomainHigh() ? this.yAxisDomainHigh() : this.valueAxis.parseInvert(d3Max(this.parsedData(), function (data: any[]) {\n            return d3Max(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[1] : d; });\n        }));\n        this.valueAxis\n            .low(min)\n            .high(max)\n            ;\n\n        //  Calculate Margins  ---\n        this.margin = this.calcMargin(domNode, element, isHorizontal);\n\n        //  Update Range  ---\n        let width = this.width() - this.margin.left - this.margin.right;\n        if (width < 0) width = 0;\n        let height = this.height() - this.margin.top - this.margin.bottom;\n        if (height < 0) height = 0;\n        const maxCurrExtent = isHorizontal ? width : height;\n        const maxOtherExtent = isHorizontal ? height : width;\n\n        //  Render  ---\n        this.domainAxis\n            .tickLength(this.xAxisGuideLines() ? maxOtherExtent : 0)\n            .render()\n            ;\n        this.valueAxis\n            .tickLength(this.yAxisGuideLines() ? maxCurrExtent : 0)\n            .render()\n            ;\n\n        this.svgDataClipRect\n            .attr(\"width\", width)\n            .attr(\"height\", height)\n            ;\n        this.svgData.transition()\n            .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\")\n            ;\n\n        this.updateBrush(width, height, maxCurrExtent, isHorizontal);\n        this.updateFocusChart(domNode, element, this.margin, width, height, isHorizontal);\n        this.chartsUpdate(width, height, 250);\n        if (this.selectionMode()) {\n            return this.brushMoved();\n        }\n    }\n\n    updateBrush(width, height, maxCurrExtent, isHorizontal) {\n        const currBrush = this.use2dSelection() ? this.xyBrush : isHorizontal ? this.xBrush : this.yBrush;\n        const prevBrushSel: any = d3BrushSelection(this.svgBrush.node());\n        currBrush.extent([[0, 0], [width, height]]);\n        this.svgBrush\n            .attr(\"transform\", \"translate(\" + this.margin.left + \", \" + this.margin.top + \")\")\n            .style(\"display\", this.selectionMode() ? null : \"none\")\n            .call(currBrush)\n            ;\n        const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n        const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n        handlePath.enter().append(\"path\")\n            .attr(\"class\", \"handle--custom\")\n            .merge(handlePath)\n            .attr(\"cursor\", isHorizontal ? \"ew-resize\" : \"ns-resize\")\n            .attr(\"d\", (d) => this.resizeBrushHandle(d, width, height))\n            ;\n\n        if (this.selectionMode()) {\n            if (this._prevXAxisType !== this.xAxisType()) {\n                this._prevXAxisType = this.xAxisType();\n                this._prevBrush = null;\n            }\n            if (this._prevBrush) {\n                if (prevBrushSel) {\n                    if (this._prevBrush.orientation !== this.orientation()) {\n                        const tmp = prevBrushSel[0];\n                        prevBrushSel[0] = this._prevBrush.maxCurrExtent - prevBrushSel[1];\n                        prevBrushSel[1] = this._prevBrush.maxCurrExtent - tmp;\n                    }\n                    const ratio = maxCurrExtent / this._prevBrush.maxCurrExtent;\n                    if (ratio !== 1) {\n                        this.svgBrush.transition()\n                            .on(\"start\", function () {\n                                currBrush.on(\"end\", null);\n                            })\n                            .call(currBrush.move, [prevBrushSel[0] * ratio, prevBrushSel[1] * ratio])\n                            .on(\"end\", () => {\n                                currBrush.on(\"end\", () => {\n                                    return this.brushMoved();\n                                });\n                            })\n                            ;\n                    }\n                }\n            } else {\n                this.svgBrush\n                    .call(currBrush.move, [0, maxCurrExtent])\n                    ;\n            }\n            this._prevBrush = {\n                orientation: this.orientation(),\n                maxCurrExtent\n            };\n        }\n    }\n\n    updateFocusChart(domNode, element, margin, width, height, isHorizontal) {\n        const context: XYAxis = this;\n        const focusChart = this.svgFocus.selectAll(\"#\" + this.id() + \"_focusChart\").data(this.xAxisFocus() ? [true] : []);\n        focusChart.enter().append(\"g\")\n            .attr(\"id\", this.id() + \"_focusChart\")\n            .attr(\"class\", \"focus\")\n            .each(function () {\n                context.focusChart = new (context.constructor as any)()\n                    .target(this)\n                    ;\n                context.focusChart.xBrush\n                    .on(\"brush.focus\", function () {\n                        context.syncAxis(width);\n                        context.chartsUpdate(width, height, 0);\n                    })\n                    ;\n                context.focusChart\n                    .layers(context.layers().map((w: any) => new w.constructor()))\n                    ;\n            })\n            .merge(focusChart)\n            .each(function (this: SVGElement) {\n                context.copyPropsTo(context.focusChart, [\"layers\"]);\n                let layerIdx = 0;\n                for (const layer of context.layers()) {\n                    layer.copyPropsTo(context.focusChart.layers()[layerIdx]);\n                    layerIdx++;\n                }\n                context.focusChart\n                    .xAxisFocus(false)\n                    .selectionMode(true)\n                    .skipSelection(true)\n                    .orientation(\"horizontal\")\n                    .xAxisGuideLines(false)\n                    .xAxisDomainLow(null)\n                    .xAxisDomainHigh(null)\n                    .yAxisGuideLines(false)\n                    .x(context.width() / 2)\n                    .y(context.height() - context.xAxisFocusHeight() / 2)\n                    .width(context.width())\n                    .height(context.xAxisFocusHeight())\n                    .columns(context.columns())\n                    .data(context.data())\n                    .render()\n                    ;\n                context.syncAxis(width);\n            })\n            ;\n        focusChart.exit()\n            .each(function () {\n                if (context.focusChart) {\n                    context.focusChart\n                        .target(null)\n                        ;\n                    delete context.focusChart;\n                }\n            })\n            .remove()\n            ;\n    }\n\n    syncAxis(width: number) {\n        const currSel = d3BrushSelection(this.focusChart.svgBrush.node()) as [number, number];\n        if (currSel) {\n            if (this.focusChart.xAxisType() !== \"ordinal\") {\n                this.xAxis.domain([this.focusChart.xAxis.invert(currSel[0]), this.focusChart.xAxis.invert(currSel[1])]);\n            } else {\n                const brushWidth = currSel[1] - currSel[0];\n                const scale = brushWidth / width;\n                this.xAxis.range([-currSel[0] / scale, (width - currSel[0]) / scale]);\n            }\n            this.xAxis.rerender();\n        }\n    }\n\n    //  Layers  ---\n    layerColumns(host: XYAxis): string[] {\n        const masterColumns = host.columns();\n        const retVal = super.columns().filter(col => col !== masterColumns[0]);\n        if (!retVal.length) {\n            return masterColumns;\n        }\n        return [masterColumns[0], ...retVal];\n    }\n\n    layerColumnIndices(host: XYAxis): number[] {\n        const masterColumns = host.columns();\n        const layerColumns = this.layerColumns(host);\n        return layerColumns.map(col => masterColumns.indexOf(col));\n    }\n\n    layerColumnIndex(host: XYAxis, column: string): number {\n        const masterColumns = host.columns();\n        return masterColumns.indexOf(column);\n    }\n\n    layerData(host?: XYAxis): any[][] {\n        if (arguments.length === 1) {\n            const indices = this.layerColumnIndices(host);\n            return host.data().map(row => {\n                const retVal = indices.map(idx => row[idx]);\n                (retVal as any).__hpcc_origRow = row;\n                return retVal;\n            });\n        }\n        throw new Error(\"Setting data on XYAxisLayer is not supported.\");\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n    }\n\n    layerExit(host: XYAxis, element, duration: number = 250) {\n    }\n\n    chartsEnter(host: XYAxis, element, duration: number = 250) {\n        this.layerEnter(this, element, duration);\n        for (const w of this.layers()) {\n            w[\"__xyAxisElement\"] = element.append(\"g\")\n                .attr(\"class\", w.class())\n                ;\n            w\n                .target(w[\"__xyAxisElement\"].node() as SVGElement)\n                .layerEnter(this, element, duration)\n                ;\n        }\n    }\n\n    chartsUpdate(width, height, duration): void {\n        this.layerUpdate(this, this.svgData, duration);\n        for (const w of this.layers()) {\n            w\n                .resize({ width, height })\n                .layerUpdate(this, w[\"__xyAxisElement\"], duration)\n                ;\n        }\n    }\n\n    exit(domNode, element) {\n        this.valueAxis.target(null);\n        this.domainAxis.target(null);\n        super.exit(domNode, element);\n    }\n\n    selection(_selected) {\n        const context = this;\n        this._selection.widgetElement().selectAll(\".selected,.deselected\")\n            .each(function (d) {\n                const selected = _selected.indexOf(d.origRow) >= 0;\n                d3Select(this)\n                    .classed(\"selected\", selected)\n                    .classed(\"deselected\", !selected)\n                    .attr(\"filter\", context._selection.svgGlowID() && selected ? `url(#${context._selection.svgGlowID()})` : null)\n                    ;\n            })\n            ;\n\n        const selRows = _selected.map(d => {\n            return this.rowToObj(d);\n        });\n        setTimeout(() => {\n            this.click(selRows, \"\", true);\n        }, 0);\n    }\n\n    //  XYAxis  ---\n    xAxisOrdinalMapping(origRow, lparam) {\n        return origRow[0];\n    }\n\n    //  Events  ---\n    click(row, column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n    }\n\n    //  Selection  ---\n    _selection: Utility.SimpleSelection;\n}\nXYAxis.prototype._class += \" chart_XYAxis\";\nXYAxis.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface XYAxis {\n    _palette;\n    orientation(): \"horizontal\" | \"vertical\";\n    orientation(_: \"horizontal\" | \"vertical\"): this;\n    orientation_default(_: string);\n    pointSizeColumn(): string;\n    pointSizeColumn(_: string): this;\n    pointSizeColumn_exists(): boolean;\n    minPointSize(): number;\n    minPointSize(_: number): this;\n    maxPointSize(): number;\n    maxPointSize(_: number): this;\n    use2dSelection(): boolean;\n    use2dSelection(_: boolean): this;\n    selectionMode(): boolean;\n    selectionMode(_: boolean): this;\n    xAxisTitle(): string;\n    xAxisTitle(_: string): this;\n    xAxisTitle_exists(): boolean;\n    xAxisTickCount(): number;\n    xAxisTickCount(_: number): this;\n    xAxisTickFormat(): string;\n    xAxisTickFormat(_: string): this;\n    xAxisTicks(): Array<{ value: string, label: string }>;\n    xAxisTicks(_: Array<{ value: string, label: string }>): this;\n    xAxisType(): \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\";\n    xAxisType(_: \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\"): this;\n    xAxisType_default(_: string);\n    xAxisTypeTimePattern(): string;\n    xAxisTypeTimePattern(_: string): this;\n    xAxisDomainLow(): number | string;\n    xAxisDomainLow(_: number | string): this;\n    xAxisDomainHigh(): number | string;\n    xAxisDomainHigh(_: number | string): this;\n    xAxisFontSize(): number | string;\n    xAxisFontSize(_: number | string): this;\n    xAxisFontFamily(): string;\n    xAxisFontFamily(_: string): this;\n    xAxisOrdinalPaddingInner(): number;\n    xAxisOrdinalPaddingInner(_: number): this;\n    xAxisOrdinalPaddingOuter(): number;\n    xAxisOrdinalPaddingOuter(_: number): this;\n    xAxisOverlapMode(): \"none\" | \"stagger\" | \"hide\" | \"rotate\" | \"linebreak\" | \"wrap\";\n    xAxisOverlapMode(_: \"none\" | \"stagger\" | \"hide\" | \"rotate\" | \"linebreak\" | \"wrap\"): this;\n    xAxisLabelRotation(): number;\n    xAxisLabelRotation(_: number): this;\n    xAxisDomainPadding(): number;\n    xAxisDomainPadding(_: number): this;\n    xAxisGuideLines(): boolean;\n    xAxisGuideLines(_: boolean): this;\n    xAxisGuideLines_default(_: boolean);\n    xAxisFocus(): boolean;\n    xAxisFocus(_: boolean): this;\n    xAxisFocusHeight(): number;\n    xAxisFocusHeight(_: number): this;\n    xAxisHidden(): boolean;\n    xAxisHidden(_: boolean): this;\n    xAxisHidden_default(_: boolean);\n    yAxisTitle(): string;\n    yAxisTitle(_: string): this;\n    yAxisTickCount(): number;\n    yAxisTickCount(_: number): this;\n    yAxisTickFormat(): string;\n    yAxisTickFormat(_: string): this;\n    yAxisTicks(): Array<{ value: string, label: string }>;\n    yAxisTicks(_: Array<{ value: string, label: string }>): this;\n    yAxisType(): \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\";\n    yAxisType(_: \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\"): this;\n    yAxisType_default(_: string);\n    yAxisTypeTimePattern(): string;\n    yAxisTypeTimePattern(_: string): this;\n    yAxisTypePowExponent(): number;\n    yAxisTypePowExponent(_: number): this;\n    yAxisTypeLogBase(): number;\n    yAxisTypeLogBase(_: number): this;\n    yAxisStacked(): boolean;\n    yAxisStacked(_: boolean): this;\n    yAxisDomainLow(): number | string;\n    yAxisDomainLow(_: number | string): this;\n    yAxisDomainHigh(): number | string;\n    yAxisDomainHigh(_: number | string): this;\n    yAxisDomainPadding(): number;\n    yAxisDomainPadding(_: number): this;\n    yAxisGuideLines(): boolean;\n    yAxisGuideLines(_: boolean): this;\n    yAxisGuideLines_default(_: boolean);\n    yAxisHidden(): boolean;\n    yAxisHidden(_: boolean): this;\n    yAxisHidden_default(_: boolean);\n    regions(): object[];\n    regions(_: object[]): this;\n    layers(): XYAxis[];\n    layers(_: XYAxis[]): this;\n    xAxisPadding(): number;\n    xAxisPadding(_: number): this;\n    yAxisPadding(): number;\n    yAxisPadding(_: number): this;\n\n    //  Tab Navigation\n    tabNavigation(): boolean;\n    tabNavigation(_: boolean): this;\n}\n\nXYAxis.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Selects orientation for the axis\", [\"horizontal\", \"vertical\"]);\nXYAxis.prototype.publish(\"pointSizeColumn\", null, \"string\", \"pointSizeColumn\", null, { optional: true });\nXYAxis.prototype.publish(\"minPointSize\", 6, \"number\", \"minPointSize\");\nXYAxis.prototype.publish(\"maxPointSize\", 26, \"number\", \"maxPointSize\");\nXYAxis.prototype.publish(\"use2dSelection\", false, \"boolean\", \"2D Range Selector\");\nXYAxis.prototype.publish(\"selectionMode\", false, \"boolean\", \"Range Selector\");\nXYAxis.prototype.publishProxy(\"xAxisTitle\", \"domainAxis\", \"title\");\nXYAxis.prototype.publishProxy(\"xAxisTickCount\", \"domainAxis\", \"tickCount\");\nXYAxis.prototype.publishProxy(\"xAxisTickFormat\", \"domainAxis\", \"tickFormat\");\nXYAxis.prototype.publishProxy(\"xAxisTicks\", \"domainAxis\", \"ticks\");\nXYAxis.prototype.publishProxy(\"xAxisType\", \"domainAxis\", \"type\");\nXYAxis.prototype.publishProxy(\"xAxisTypeTimePattern\", \"domainAxis\", \"timePattern\");\nXYAxis.prototype.publish(\"xAxisDomainLow\", null, \"string\", \"X-Axis Low\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\nXYAxis.prototype.publish(\"xAxisDomainHigh\", null, \"string\", \"X-Axis High\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\nXYAxis.prototype.publishProxy(\"xAxisFontSize\", \"domainAxis\", \"fontSize\");\nXYAxis.prototype.publishProxy(\"xAxisFontFamily\", \"domainAxis\", \"fontFamily\");\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingInner\", \"domainAxis\", \"ordinalPaddingInner\");\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingOuter\", \"domainAxis\", \"ordinalPaddingOuter\");\nXYAxis.prototype.publishProxy(\"xAxisOverlapMode\", \"domainAxis\", \"overlapMode\");\nXYAxis.prototype.publishProxy(\"xAxisLabelRotation\", \"domainAxis\", \"labelRotation\");\nXYAxis.prototype.publishProxy(\"xAxisDomainPadding\", \"domainAxis\", \"extend\");\nXYAxis.prototype.publish(\"xAxisGuideLines\", false, \"boolean\", \"Y-Axis Guide Lines\");\nXYAxis.prototype.publish(\"xAxisFocus\", false, \"boolean\", \"X-Axis Focus\", null, { disable: (w: any) => w.orientation() !== \"horizontal\" });\nXYAxis.prototype.publish(\"xAxisFocusHeight\", 80, \"number\", \"X-Axis Focus Height\", null, { disable: (w: any) => !w.xAxisFocus() });\nXYAxis.prototype.publishProxy(\"xAxisHidden\", \"domainAxis\", \"hidden\");\nXYAxis.prototype.publishProxy(\"yAxisFontSize\", \"valueAxis\", \"fontSize\");\nXYAxis.prototype.publishProxy(\"yAxisFontFamily\", \"valueAxis\", \"fontFamily\");\nXYAxis.prototype.publishProxy(\"yAxisTitle\", \"valueAxis\", \"title\");\nXYAxis.prototype.publishProxy(\"yAxisTickCount\", \"valueAxis\", \"tickCount\");\nXYAxis.prototype.publishProxy(\"yAxisTickFormat\", \"valueAxis\", \"tickFormat\");\nXYAxis.prototype.publishProxy(\"yAxisTicks\", \"valueAxis\", \"ticks\");\nXYAxis.prototype.publishProxy(\"yAxisType\", \"valueAxis\", \"type\");\nXYAxis.prototype.publishProxy(\"yAxisTypeTimePattern\", \"valueAxis\", \"timePattern\");\nXYAxis.prototype.publishProxy(\"yAxisTypePowExponent\", \"valueAxis\", \"powExponent\");\nXYAxis.prototype.publishProxy(\"yAxisTypeLogBase\", \"valueAxis\", \"logBase\");\nXYAxis.prototype.publish(\"yAxisStacked\", false, \"boolean\", \"Stacked Chart\", null, { tags: [\"Basic\"], disable: (w: any) => w.xAxisType() !== \"ordinal\" || w._class.indexOf(\"chart_Column\") < 0 });\nXYAxis.prototype.publish(\"yAxisDomainLow\", null, \"string\", \"Y-Axis Low\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\nXYAxis.prototype.publish(\"yAxisDomainHigh\", null, \"string\", \"Y-Axis High\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\nXYAxis.prototype.publishProxy(\"yAxisDomainPadding\", \"valueAxis\", \"extend\");\nXYAxis.prototype.publish(\"yAxisGuideLines\", true, \"boolean\", \"Y-Axis Guide Lines\");\nXYAxis.prototype.publishProxy(\"yAxisHidden\", \"valueAxis\", \"hidden\");\nXYAxis.prototype.publish(\"regions\", [], \"array\", \"Regions\");\nXYAxis.prototype.publish(\"layers\", [], \"widgetArray\", \"Layers\", null, { render: false });\nXYAxis.prototype.publishProxy(\"xAxisPadding\", \"domainAxis\", \"padding\");\nXYAxis.prototype.publishProxy(\"yAxisPadding\", \"valueAxis\", \"padding\");\nXYAxis.prototype.publish(\"tabNavigation\", false, \"boolean\", \"Enable or disable tab navigation\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\nimport { select as d3Select } from \"d3-selection\";\nimport {\n    area as d3Area,\n    curveBasis as d3CurveBasis, curveBundle as d3CurveBundle, curveCardinal as d3CurveCardinal, curveCatmullRom as d3curveCatmullRom, curveLinear as d3CurveLinear,\n    curveMonotoneX as d3CurveMonotoneX, curveNatural as d3CurveNatural, curveStep as d3CurveStep, curveStepAfter as d3CurveStepAfter, curveStepBefore as d3CurveStepBefore,\n    line as d3Line\n} from \"d3-shape\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nimport \"../src/Scatter.css\";\n\nexport class Scatter extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"any\"\n    }, {\n        id: \"values\",\n        type: \"number\",\n        multi: true\n    }];\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n        this\n            .xAxisGuideLines_default(true)\n            .yAxisGuideLines_default(true)\n            ;\n    }\n\n    xPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n    }\n\n    yPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n    }\n\n    private curve(): any {\n        switch (this.interpolate()) {\n            case \"linear\":\n                return d3CurveLinear;\n            case \"step\":\n                return d3CurveStep;\n            case \"step-before\":\n                return d3CurveStepBefore;\n            case \"step-after\":\n                return d3CurveStepAfter;\n            case \"basis\":\n                return d3CurveBasis;\n            case \"bundle\":\n                return d3CurveBundle;\n            case \"cardinal\":\n                return d3CurveCardinal;\n            case \"catmullRom\":\n                return d3curveCatmullRom;\n            case \"natural\":\n                return d3CurveNatural;\n            case \"monotone\":\n            default:\n                return d3CurveMonotoneX;\n        }\n    }\n\n    private getScale() {\n        switch (this.pointSizeScale()) {\n            case \"linear\":\n                return d3ScaleLinear();\n            case \"pow\":\n                return d3ScalePow().exponent(2);\n            case \"log\":\n                return d3ScaleLog();\n            case \"sqrt\":\n                return d3ScaleSqrt();\n        }\n    }\n\n    protected pointColor(row, col, value, origRow) {\n        if (this.interpolate() && this.pointDarken()) {\n            return this.strokeColor(row, col, value, origRow);\n        }\n        return this.fillColor(row, col, value, origRow);\n    }\n\n    protected lineColor(row, col, value, origRow) {\n        if (this.interpolateFill() && this.interpolateDarken()) {\n            return this.strokeColor(row, col, value, origRow);\n        }\n        return this.fillColor(row, col, value, origRow);\n    }\n\n    protected areaColor(row, col, value, origRow) {\n        return this.fillColor(row, col, value, origRow);\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n        const context = this;\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d.label,\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(column),\n                                    value: context.data()[d.rowIdx][i + 1]\n                                };\n                            })\n                        });\n                    default:\n                        return context.tooltipFormat({ label: d.label, series: d.column, value: d.value });\n                }\n            })\n            ;\n    }\n\n    protected _prevPointShape;\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element);\n        const isHorizontal = host.orientation() === \"horizontal\";\n        const height = isHorizontal ? this.height() : this.width();\n        const context = this;\n\n        if (this.tabNavigation() && host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", \"0\")\n                .attr(\"role\", \"group\")\n                .attr(\"aria-label\", `${this.columns()[0] || \"Chart\"} data`);\n        } else if (host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", null)\n                .attr(\"role\", null)\n                .attr(\"aria-label\", null);\n        }\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n\n        if (this._prevPointShape !== this.pointShape()) {\n            element.selectAll(\".data\").remove();\n            this._prevPointShape = this.pointShape();\n        }\n\n        function mapShape(shape) {\n            switch (shape) {\n                case \"rectangle\":\n                    return \"rect\";\n                case \"circle\":\n                    return \"circle\";\n                case \"cross\":\n                    return \"path\";\n                default:\n            }\n        }\n        const usePointSizeColumn = this.pointSizeColumn_exists();\n        let pointSizeColumnIdx;\n        let extent;\n        let scale;\n        if (usePointSizeColumn) {\n            pointSizeColumnIdx = this.columns().indexOf(this.pointSizeColumn());\n            extent = d3Extent(this.data(), d => d[pointSizeColumnIdx]);\n            scale = this.getScale().domain(extent);\n        }\n        const layerColumns = this.layerColumns(host);\n        const layerData = this.layerData(host);\n        const flatData = this.flattenData(layerColumns, layerData).map(function (d) {\n            d.shape = mapShape(context.pointShape());\n            d.column = layerColumns[d.colIdx];\n            d.row = layerData[d.rowIdx];\n            d.origRow = (layerData[d.rowIdx] as any).__hpcc_origRow;\n            if (extent) {\n                d.size = scale(d.row[pointSizeColumnIdx]) * (context.maxPointSize() - context.minPointSize()) + context.minPointSize();\n                return d.column === context.pointSizeColumn() ? false : d;\n            } else {\n                d.size = context.pointSize();\n                return d;\n            }\n\n        }).filter(d => d);\n\n        const areas = element.selectAll(\".area\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && context.interpolateFill() && idx > 0; }));\n        const areasEnter = areas.enter().append(\"path\");\n        const area = d3Area()\n            .curve(this.curve())\n            ;\n        if (isHorizontal) {\n            area\n                .x(function (d) { return context.xPos(host, d); })\n                .y0(Math.min(height, this.yPos(host, { value: 0 })))\n                .y1(function (d) { return context.yPos(host, d); })\n                ;\n        } else {\n            area\n                .y(function (d) { return context.yPos(host, d); })\n                .x0(Math.max(0, this.xPos(host, { value: 0 })))\n                .x1(function (d) { return context.xPos(host, d); })\n                ;\n        }\n        areasEnter.merge(areas)\n            .attr(\"class\", d => \"area series series-\" + this.cssTag(d))\n            .each(function (_d, idx) {\n                const element = d3Select(this);\n                element\n                    .attr(\"d\", area(flatData.filter(function (d2) { return d2.colIdx === idx + 1; })))\n                    .style(\"opacity\", context.interpolateFillOpacity())\n                    .style(\"stroke\", \"none\")\n                    .style(\"fill\", context.areaColor([], _d, undefined, []))\n                    ;\n            });\n        areas.exit().remove();\n\n        const lines = element.selectAll(\".line\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && idx > 0; }));\n        const linesEnter = lines.enter().append(\"path\");\n        const line = d3Line()\n            .x(function (d) { return context.xPos(host, d); })\n            .y(function (d) { return context.yPos(host, d); })\n            .curve(this.curve())\n            ;\n        linesEnter.merge(lines)\n            .attr(\"class\", d => \"line series series-\" + this.cssTag(d))\n            .each(function (_d, idx) {\n                const element = d3Select(this);\n                const data2 = flatData.filter(function (d2) { return d2.colIdx === idx + 1; });\n                element\n                    .attr(\"d\", line(data2))\n                    .style(\"stroke\", context.lineColor([], _d, undefined, []))\n                    .style(\"fill\", \"none\")\n                    ;\n            });\n        lines.exit().remove();\n\n        const points = element.selectAll(\".point\").data(flatData, function (d, idx) { return d.shape + \"_\" + idx; });\n        points.enter().append(\"g\")\n            .each(function (this: SVGElement, d2) {\n                const element = d3Select(this);\n                element\n                    .append(d2.shape)\n                    .attr(\"class\", \"pointShape\")\n                    ;\n                element\n                    .append(\"text\")\n                    .attr(\"class\", \"pointValue\")\n                    .style(\"display\", \"none\")\n                    .attr(\"text-anchor\", context.valueAnchor())\n                    .attr(\"alignment-baseline\", context.valueBaseline())\n                    .attr(\"fill\", function (d: any, _idx) {\n                        const useTextColor = context.valueBaseline() === \"middle\" || context.valueBaseline() === \"central\";\n                        return useTextColor ? context.textColor(d.row, d.column, d.value, d.origRow) : null;\n                    })\n                    ;\n                element\n                    .append(\"circle\")\n                    .attr(\"class\", \"pointSelection\")\n                    .on(\"mouseout.tooltip\", context.tooltip.hide)\n                    .on(\"mousemove.tooltip\", context.tooltip.show)\n                    .call(host._selection.enter.bind(host._selection))\n                    .on(\"click\", function (_event, d: any) {\n                        context.click(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n                    })\n                    .on(\"dblclick\", function (_event, d: any) {\n                        context.dblclick(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n                    })\n                    .on(\"keydown\", function (event: KeyboardEvent, d: any) {\n                        if (context.tabNavigation()) {\n                            if (event.code === \"Space\" || event.key === \"Enter\") {\n                                event.preventDefault();\n                                host._selection.click(this);\n                            }\n                        }\n                    })\n                    ;\n            })\n            .merge(points)\n            .attr(\"class\", d => \"point series series-\" + this.cssTag(d.column))\n            .each(function (this: SVGElement, d2) {\n                const textSelection = d3Select(this).select(\".pointValue\");\n                textSelection\n                    .attr(\"x\", function (d) { return context.xPos(host, d); })\n                    .attr(\"y\", function (d) { return context.yPos(host, d); })\n                    .style(\"display\", context.showValue() ? \"block\" : \"none\")\n                    .attr(\"text-anchor\", context.valueAnchor())\n                    .attr(\"alignment-baseline\", context.valueBaseline())\n                    .text(function (d) {\n                        return d[\"value\"];\n                    })\n                    ;\n                const elementSelection = d3Select(this).select(\".pointSelection\");\n                elementSelection\n                    .attr(\"cx\", function (d) { return context.xPos(host, d); })\n                    .attr(\"cy\", function (d) { return context.yPos(host, d); })\n                    .attr(\"r\", d2.size)\n                    .attr(\"tabindex\", context.tabNavigation() ? 0 : null)\n                    .attr(\"role\", context.tabNavigation() ? \"button\" : null)\n                    .attr(\"aria-label\", context.tabNavigation() ? (d: any) => `${d.column || \"Value\"}: ${d.value} @ ${d.label}` : null)\n                    ;\n\n                const element = d3Select(this).select(\".pointShape\");\n                switch (d2.shape) {\n                    case \"rect\":\n                        element\n                            .attr(\"x\", function (d) { return context.xPos(host, d) - d2.size / 2; })\n                            .attr(\"y\", function (d) { return context.yPos(host, d) - d2.size / 2; })\n                            .attr(\"width\", d2.size)\n                            .attr(\"height\", d2.size)\n                            .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n                            ;\n                        break;\n                    case \"circle\":\n                        element\n                            .attr(\"cx\", function (d) { return context.xPos(host, d); })\n                            .attr(\"cy\", function (d) { return context.yPos(host, d); })\n                            .attr(\"r\", d2.size * 0.9)\n                            .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n                            ;\n                        break;\n                    case \"path\":\n                        element\n                            .attr(\"d\", function (d: any) {\n                                return \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2) + \" \" +\n                                    \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n                                    \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n                                    \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2);\n                            })\n                            .style(\"stroke\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n                            ;\n                        break;\n                    default:\n                }\n            })\n            ;\n        points.exit().remove();\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n}\nScatter.prototype._class += \" chart_Scatter\";\nScatter.prototype.implements(INDChart.prototype);\nScatter.prototype.implements(ITooltip.prototype);\n\nexport interface Scatter {\n\n    valueAnchor(): string;\n    valueAnchor(_: string): this;\n    valueBaseline(): string;\n    valueBaseline(_: string): this;\n    showValue(): boolean;\n    showValue(_: boolean): this;\n    pointDarken(): boolean;\n    pointDarken(_: boolean): this;\n    interpolateDarken(): boolean;\n    interpolateDarken(_: boolean): this;\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    pointSizeScale(): string;\n    pointSizeScale(_: string): this;\n    pointShape(): string;\n    pointShape(_: string): this;\n    pointSize(): number;\n    pointSize(_: number): this;\n    interpolate(): string;\n    interpolate(_: string): this;\n    interpolate_default(): string;\n    interpolate_default(_: string): this;\n    interpolateFill(): boolean;\n    interpolateFill(_: boolean): this;\n    interpolateFill_default(): boolean;\n    interpolateFill_default(_: boolean): this;\n    interpolateFillOpacity(): number;\n    interpolateFillOpacity(_: number): this;\n\n    //  INDChart\n    fillColor(row, column, value, origRow): string;\n    strokeColor(row, column, value, origRow): string;\n    textColor(row, column, value, origRow): string;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n    tooltipStyle(_: \"default\" | \"none\" | \"series-table\"): this;\n}\nScatter.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Scatter.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nScatter.prototype.publish(\"pointSizeScale\", \"linear\", \"set\", \"pointSizeScale\", [\"linear\", \"pow\", \"log\", \"sqrt\"]);\nScatter.prototype.publish(\"pointShape\", \"cross\", \"set\", \"Shape of the data points\", [\"circle\", \"rectangle\", \"cross\"]);\nScatter.prototype.publish(\"pointSize\", 6, \"number\", \"Point Size\", null, { range: { min: 1, step: 1, max: 200 } });\nScatter.prototype.publish(\"interpolate\", \"\", \"set\", \"Interpolate Data\", [\"\", \"linear\", \"step\", \"step-before\", \"step-after\", \"basis\", \"bundle\", \"cardinal\", \"catmullRom\", \"natural\", \"monotone\"]);\nScatter.prototype.publish(\"pointDarken\", true, \"boolean\", \"If true, and interpolate is set, then points will have a slightly darker color than their assigned palette color\", null, { disable: w => !w.interpolate() });\nScatter.prototype.publish(\"interpolateDarken\", true, \"boolean\", \"If true, and interpolateFill is true, then lines will have a slightly darker color than their assigned palette color\", null, { disable: w => !w.interpolateFill() });\nScatter.prototype.publish(\"interpolateFill\", false, \"boolean\", \"If true, the area between the line and zero will be filled\");\nScatter.prototype.publish(\"interpolateFillOpacity\", 0.66, \"number\", \"Fill interpolation Opacity\", null, { range: { min: 0, step: 0.01, max: 1 } });\nScatter.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nScatter.prototype.publish(\"showValue\", false, \"boolean\");\nScatter.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nScatter.prototype.publish(\"valueBaseline\", \"ideographic\", \"set\", \"alignment-baseline for shown value text\", [\"auto\", \"baseline\", \"before-edge\", \"text-before-edge\", \"middle\", \"central\", \"after-edge\", \"text-after-edge\", \"ideographic\", \"alphabetic\", \"hanging\", \"mathematical\", \"inherit\"]);\n","import { Scatter } from \"./Scatter.ts\";\n\nexport class Area extends Scatter {\n    constructor() {\n        super();\n        this\n            .interpolate_default(\"linear\")\n            .interpolateFill_default(true)\n            ;\n    }\n}\nArea.prototype._class += \" chart_Area\";\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField, Text } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { scaleBand as d3ScaleBand } from \"d3-scale\";\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nimport \"../src/Column.css\";\n\nexport class Column extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"string\"\n    }, {\n        id: \"values\",\n        type: \"number\",\n        multi: true\n    }];\n\n    protected _linearGap: number;\n    private textLocal = d3Local<Text>();\n    private stackedTextLocal = d3Local<Text>();\n    private isHorizontal: boolean;\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n\n        this._selection.skipBringToTop(true);\n\n        this._linearGap = 25.0;\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n\n        const context = this;\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d.row[0],\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(column),\n                                    value: d.row[i + 1]\n                                };\n                            })\n                        });\n                    default:\n                        let value = d.row[d.idx];\n                        if (value instanceof Array) {\n                            value = value[1] - value[0];\n                        }\n                        return context.tooltipFormat({ label: d.row[0], series: context.layerColumns(host)[d.idx], value });\n                }\n            })\n            ;\n    }\n\n    adjustedData(host: XYAxis) {\n        const retVal = this.layerData(host).map(row => {\n            let prevValue = 0;\n            return row.map((cell, idx) => {\n                if (idx === 0) {\n                    return cell;\n                }\n                if (idx >= this.layerColumns(host).length) {\n                    return cell;\n                }\n                const retVal2 = host.yAxisStacked() ? [prevValue, prevValue + cell] : cell;\n                prevValue += cell;\n                return retVal2;\n            }, this);\n        }, this);\n        return retVal;\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element, duration);\n        const isHorizontal = host.orientation() === \"horizontal\";\n        this.isHorizontal = isHorizontal;\n        const context = this;\n\n        if (this.tabNavigation() && host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", \"0\")\n                .attr(\"role\", \"group\")\n                .attr(\"aria-label\", `${this.columns()[0] || \"Chart\"} data`);\n        } else if (host.parentRelativeDiv) {\n            host.parentRelativeDiv\n                .attr(\"tabindex\", null)\n                .attr(\"role\", null)\n                .attr(\"aria-label\", null);\n        }\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n        const formatPct = d3Format(context.showValueAsPercentFormat());\n\n        let dataLen = 10;\n        let offset = 0;\n        switch (host.xAxisType()) {\n            case \"ordinal\":\n                dataLen = host.bandwidth();\n                offset = -dataLen / 2;\n                break;\n            case \"linear\":\n            case \"time\":\n                dataLen = Math.max(Math.abs(host.dataPos(2) - host.dataPos(1)) * (100 - this._linearGap) / 100, dataLen);\n                offset = -dataLen / 2;\n                break;\n            default:\n        }\n\n        this.tooltip.direction(isHorizontal ? \"n\" : \"e\");\n\n        const columnScale = d3ScaleBand()\n            .domain(context.layerColumns(host).filter(function (_d, idx) { return idx > 0; }))\n            .rangeRound(isHorizontal ? [0, dataLen] : [dataLen, 0])\n            .paddingInner(Math.max(this.xAxisSeriesPaddingInner(), 0.05))\n            .paddingOuter(0)\n            ;\n        let domainSums = [];\n        const seriesSums = [];\n        const columnLength = this.columns().length;\n        const rowData = this.data();\n        if (this.showValue() && this.showValueAsPercent() === \"series\") {\n            rowData.forEach((row) => {\n                row.filter((_, idx) => idx > 0 && idx < columnLength).forEach((col, idx) => {\n                    if (seriesSums[idx + 1] === undefined) {\n                        seriesSums[idx + 1] = 0;\n                    }\n                    seriesSums[idx + 1] += col;\n                });\n            });\n        }\n\n        if (this.showDomainTotal() || (this.showValue() && this.showValueAsPercent() === \"domain\")) {\n            domainSums = rowData.map(row => {\n                return row.filter((cell, idx) => idx > 0 && idx < columnLength).reduce((sum, cell) => {\n                    return sum + cell;\n                }, 0);\n            });\n        }\n\n        const column = element.selectAll(\".dataRow\")\n            .data(this.adjustedData(host))\n            ;\n        const hostData = host.data();\n        const axisSize = this.getAxisSize(host);\n        column.enter().append(\"g\")\n            .attr(\"class\", \"dataRow\")\n            .merge(column)\n            .each(function (dataRow, dataRowIdx) {\n                const element = d3Select(this);\n\n                const columnGRect = element.selectAll(\".dataCell\").data(dataRow.filter(function (_d, i) { return i < context.layerColumns(host).length; }).map(function (d, i) {\n                    return {\n                        column: context.layerColumns(host)[i],\n                        row: dataRow,\n                        origRow: hostData[dataRowIdx],\n                        value: d,\n                        idx: i\n                    };\n                }).filter(function (d) { return d.value !== null && d.idx > 0; }), (d: any) => d.column);\n\n                const columnGEnter = columnGRect\n                    .enter().append(\"g\")\n                    .attr(\"class\", \"dataCell\")\n                    .on(\"mouseout.tooltip\", function (event, d: any) {\n                        if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n                            context.tooltip.hide.call(context, event, d);\n                        }\n                    })\n                    .on(\"mousemove.tooltip\", function (event, d: any) {\n                        if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n                            context.tooltip.show.call(context, event, d);\n                        }\n                    })\n                    .call(host._selection.enter.bind(host._selection))\n                    .on(\"click\", function (_event, d: any) {\n                        context.click(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n                    })\n                    .on(\"dblclick\", function (_event, d: any) {\n                        context.dblclick(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n                    })\n                    .on(\"keydown\", function (event: KeyboardEvent, d: any) {\n                        if (context.tabNavigation()) {\n                            if (event.code === \"Space\" || event.key === \"Enter\") {\n                                event.preventDefault();\n                                host._selection.click(this);\n                            }\n                        }\n                    })\n                    .style(\"opacity\", 0)\n                    .each(function (this: SVGElement, d: any) {\n                        const element = d3Select(this);\n                        element.append(\"rect\")\n                            .attr(\"class\", \"columnRect series series-\" + context.cssTag(d.column))\n                            ;\n                        element.append(\"text\")\n                            .attr(\"class\", \"columnRectText\")\n                            .style(\"stroke\", \"transparent\")\n                            ;\n                    })\n                    ;\n                columnGEnter.transition().duration(duration)\n                    .style(\"opacity\", 1)\n                    ;\n                const domainLength = host.yAxisStacked() ? dataLen : columnScale.bandwidth();\n                columnGEnter.merge(columnGRect as any)\n                    .attr(\"tabindex\", context.tabNavigation() ? 0 : null) // Tabster Groupper manages these inner focusables\n                    .attr(\"role\", context.tabNavigation() ? \"button\" : null) // ARIA role for accessibility\n                    .attr(\"aria-label\", context.tabNavigation() ? (d: any) => `${d.origRow[0]} - ${d.column}: ${d.value instanceof Array ? d.value[1] - d.value[0] : d.value}` : null)\n                    .each(function (this: SVGElement, d: any) {\n                        const element = d3Select(this);\n                        const domainPos = host.dataPos(dataRow[0]) + (host.yAxisStacked() ? 0 : columnScale(d.column)) + offset;\n                        const upperValue = d.value instanceof Array ? d.value[1] : d.value;\n                        let valueText = d.origRow[d.idx];\n                        if (context.showValue()) {\n                            const dm = context.dataMeta();\n                            switch (context.showValueAsPercent()) {\n                                case \"series\":\n                                    const seriesSum = typeof dm.sum !== \"undefined\" ? dm.sum : seriesSums[d.idx];\n                                    valueText = formatPct(valueText / seriesSum);\n                                    break;\n                                case \"domain\":\n                                    const domainSum = typeof dm.sum !== \"undefined\" ? dm.sum : domainSums[dataRowIdx];\n                                    valueText = formatPct(valueText / domainSum);\n                                    break;\n                                case null:\n                                default:\n                                    valueText = d3Format(context.showValueFormat())(valueText);\n                                    break;\n                            }\n                        }\n                        const upperValuePos = host.valuePos(upperValue);\n                        const lowerValuePos = host.valuePos(d.value instanceof Array ? d.value[0] : 0);\n                        const valuePos = Math.min(lowerValuePos, upperValuePos);\n                        const valueLength = Math.abs(upperValuePos - lowerValuePos);\n\n                        const innerTextHeight = context.innerTextFontSize();\n                        const innerTextPadding = context.innerTextPadding_exists() ? context.innerTextPadding() : innerTextHeight / 2.5;\n\n                        const dataRect = context.intersectRectRect(\n                            {\n                                x: isHorizontal ? domainPos : valuePos,\n                                y: isHorizontal ? valuePos : domainPos,\n                                width: isHorizontal ? domainLength : valueLength,\n                                height: isHorizontal ? valueLength : domainLength\n                            },\n                            {\n                                x: 0,\n                                y: 0,\n                                width: axisSize.width,\n                                height: axisSize.height\n                            }\n                        );\n\n                        const _rects = element.select(\"rect\").transition().duration(duration)\n                            .style(\"fill\", (d: any) => context.fillColor(d.row, d.column, d.value, d.origRow))\n                            ;\n\n                        if (isHorizontal) {\n                            _rects\n                                .attr(\"x\", domainPos)\n                                .attr(\"y\", valuePos)\n                                .attr(\"width\", domainLength)\n                                .attr(\"height\", valueLength)\n                                ;\n                        } else {\n                            _rects\n                                .attr(\"y\", domainPos)\n                                .attr(\"x\", valuePos)\n                                .attr(\"height\", domainLength)\n                                .attr(\"width\", valueLength)\n                                ;\n                        }\n                        const _texts = element.select(\"text\").transition().duration(duration)\n                            .style(\"font-size\", innerTextHeight + \"px\")\n                            .style(\"fill\", (d: any) => context.textColor(d.row, d.column, d.value, d.origRow))\n                            ;\n\n                        _texts.style(\"font-family\", context.innerTextFontFamily_exists() ? context.innerTextFontFamily() : null);\n\n                        const padding = context.innerTextPadding_exists() ? context.innerTextPadding() : 8;\n\n                        const textHeightOffset = innerTextHeight / 2.7;\n\n                        if (isHorizontal) { // Column\n                            const y = dataRect.y + dataRect.height - innerTextPadding;\n                            _texts\n                                .attr(\"x\", domainPos + (domainLength / 2))\n                                .attr(\"y\", y + textHeightOffset)\n                                .attr(\"transform\", `rotate(-90, ${domainPos + (domainLength / 2)}, ${y})`)\n                                ;\n                        } else { // Bar\n                            _texts\n                                .attr(\"x\", dataRect.x + padding)\n                                .attr(\"y\", domainPos + (domainLength / 2) + textHeightOffset)\n                                ;\n                        }\n                        _texts\n                            .attr(\"height\", domainLength)\n                            .attr(\"width\", valueLength)\n                            ;\n                        if (context.showInnerText()) {\n                            _texts\n                                .text((d: any) => {\n                                    const innerText = context.innerText(d.origRow, d.origRow[columnLength], d.idx);\n                                    if (innerText) {\n                                        const clippedValueLength = isHorizontal ? dataRect.height : dataRect.width;\n                                        const innerTextObj = context.calcInnerText(clippedValueLength, innerText, valueText);\n                                        d.innerTextObj = innerTextObj;\n\n                                        return innerTextObj.text;\n                                    }\n                                    return \"\";\n                                })\n                                ;\n                        }\n                        const dataText = element.selectAll(\".dataText\").data(context.showValue() ? [`${upperValue}`] : []);\n                        const dataTextEnter = dataText.enter().append(\"g\")\n                            .attr(\"class\", \"dataText\")\n                            .each(function (this: SVGElement, d) {\n                                context.textLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\n                            });\n                        dataTextEnter.merge(dataText as any)\n                            .each(function (this: SVGElement) {\n                                const pos = { x: 0, y: 0 };\n                                const valueFontFamily = context.valueFontFamily();\n                                const valueFontSize = context.valueFontSize();\n                                const textSize = context.textSize(valueText, valueFontFamily, valueFontSize);\n\n                                const isPositive = parseFloat(valueText) >= 0;\n\n                                let valueAnchor = context.valueAnchor() ? context.valueAnchor() : isHorizontal ? \"middle\" : \"start\";\n\n                                const leftSpace = dataRect.x;\n                                const rightSpace = axisSize.width - (dataRect.x + dataRect.width);\n                                const topSpace = dataRect.y;\n                                const bottomSpace = axisSize.height - (dataRect.y + dataRect.height);\n\n                                let noRoomInside;\n                                let isOutside;\n                                let noRoomOnExpectedSide;\n\n                                if (d.innerTextObj) {\n                                    const { padding, valueTextWidth } = d.innerTextObj;\n                                    isOutside = false;\n                                    if (isHorizontal) { // Column\n                                        valueAnchor = \"middle\";\n                                        pos.x = domainPos + (domainLength / 2);\n\n                                        if (d.innerTextObj.category === 4) {\n                                            isOutside = true;\n                                            pos.y = valuePos - padding - (valueFontSize / 2);\n                                        } else {\n                                            pos.y = valuePos + padding + (valueFontSize / 2);\n                                        }\n                                    } else { // Bar\n                                        valueAnchor = \"start\";\n                                        if (d.innerTextObj.category === 4) {\n                                            isOutside = true;\n                                            pos.x = (valueLength + valuePos) + padding;\n                                        } else {\n                                            pos.x = (valueLength + valuePos) - valueTextWidth - padding;\n                                        }\n                                        pos.y = domainPos + (domainLength / 2);\n                                    }\n                                } else {\n                                    /*\n                                    IF this.valueCentered() and NO ROOM INSIDE\n                                        ...then ASSUME THERES ROOM OUTSIDE\n                                        IF NO ROOM OUTSIDE ON EXPECTED SIDE\n                                            ...then ASSUME THERES ROOM ON THE OPPOSITE SIDE\n                                    */\n                                    if (isHorizontal) { // Column\n                                        noRoomInside = dataRect.height < textSize.height;\n                                        isOutside = !context.valueCentered() || noRoomInside;\n\n                                        pos.x = dataRect.x + (dataRect.width / 2);\n\n                                        if (isOutside) {\n                                            if (isPositive) {\n                                                noRoomOnExpectedSide = topSpace < textSize.height + padding;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (!noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.y = dataRect.y + (dataRect.height / 2);\n                                                    } else {\n                                                        pos.y = dataRect.y + dataRect.height + textSize.height;\n                                                    }\n                                                } else {\n                                                    pos.y = dataRect.y - (textSize.height / 2) - padding;\n                                                }\n                                            } else {\n                                                noRoomOnExpectedSide = bottomSpace < textSize.height;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (!noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.y = dataRect.y + (dataRect.height / 2);\n                                                    } else {\n                                                        pos.y = dataRect.y - (textSize.height / 2) - padding;\n                                                    }\n                                                } else {\n                                                    pos.y = dataRect.y + textSize.height + padding;\n                                                }\n                                            }\n                                        } else {\n                                            pos.y = dataRect.y + (dataRect.height / 2);\n                                        }\n                                    } else { // Bar\n                                        noRoomInside = dataRect.width < textSize.width;\n                                        isOutside = !context.valueCentered() || noRoomInside;\n\n                                        pos.y = dataRect.y + (dataRect.height / 2);\n\n                                        if (isOutside) {\n                                            if (isPositive) {\n                                                noRoomOnExpectedSide = rightSpace < textSize.width + padding;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (context.showInnerText() || !noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.x = dataRect.x + (dataRect.width / 2);\n                                                    } else {\n                                                        pos.x = dataRect.x - (textSize.width - padding);\n                                                    }\n                                                } else {\n                                                    pos.x = dataRect.x + dataRect.width + (textSize.width / 2) + padding;\n                                                }\n                                            } else {\n                                                noRoomOnExpectedSide = leftSpace < textSize.width;\n                                                if (noRoomOnExpectedSide) {\n                                                    if (context.showInnerText() || !noRoomInside) {\n                                                        isOutside = false;\n                                                        pos.x = dataRect.x + (dataRect.width / 2);\n                                                    } else {\n                                                        pos.x = dataRect.x + dataRect.width + (textSize.width - padding);\n                                                    }\n                                                } else {\n                                                    pos.x = dataRect.x - (textSize.width - padding);\n                                                }\n                                            }\n                                        } else {\n                                            pos.x = dataRect.x + (dataRect.width / 2);\n                                        }\n                                    }\n                                }\n                                const textColor = isOutside ? null : context.textColor(d.row, d.column, d.value, d.origRow);\n\n                                //  Prevent overlapping labels on stacked columns\n                                const columns = context.columns();\n                                const hideValue = (context.yAxisStacked() && noRoomInside) ||\n                                    (isOutside && context.yAxisStacked() && columns.indexOf(d.column) !== columns.length - 1);\n                                context.textLocal.get(this)\n                                    .pos(pos)\n                                    .anchor(valueAnchor)\n                                    .fontFamily(valueFontFamily)\n                                    .fontSize(valueFontSize)\n                                    .text(`${valueText}`)\n                                    .colorFill(textColor)\n                                    .visible(context.showValue() && !hideValue)\n                                    .render()\n                                    ;\n\n                            });\n                        dataText.exit()\n                            .each(function (this: SVGElement, d) {\n                                context.textLocal.get(this).target(null);\n                            })\n                            .remove()\n                            ;\n                    });\n                columnGRect.exit().transition().duration(duration)\n                    .style(\"opacity\", 0)\n                    .remove()\n                    ;\n\n                const value4pos = host.yAxisStacked() ? domainSums[dataRowIdx] : Math.max(...dataRow.filter((_, idx) => idx > 0 && idx < columnLength));\n                const stackedTotalText = element.selectAll(\".stackedTotalText\").data(context.showDomainTotal() ? [domainSums[dataRowIdx]] : []);\n                const stackedTotalTextEnter = stackedTotalText.enter().append(\"g\")\n                    .attr(\"class\", \"stackedTotalText\")\n                    .each(function (this: SVGElement, d) {\n                        context.stackedTextLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\n                    });\n                stackedTotalTextEnter.merge(stackedTotalText as any)\n                    .each(function (this: SVGElement, d: any) {\n                        const pos = { x: 0, y: 0 };\n                        const domainPos = host.dataPos(dataRow[0]);\n                        const valuePos = host.valuePos(value4pos);\n\n                        const valueFontFamily = context.valueFontFamily();\n                        const valueFontSize = context.valueFontSize();\n                        const textSize = context.textSize(d, valueFontFamily, valueFontSize);\n\n                        const isPositive = parseFloat(d) >= 0;\n                        let valueAnchor: \"start\" | \"middle\" | \"end\" = \"middle\";\n                        if (isHorizontal) {\n                            pos.x = domainPos;\n                            if (isPositive) {\n                                pos.y = valuePos - textSize.height / 2;\n                            } else {\n                                pos.y = valuePos + textSize.height / 2;\n                            }\n                        } else {\n                            valueAnchor = \"start\";\n                            pos.y = domainPos;\n                            if (isPositive) {\n                                pos.x = valuePos + textSize.width / 2;\n                            } else {\n                                pos.x = valuePos - textSize.width / 2;\n                            }\n                        }\n\n                        context.stackedTextLocal.get(this)\n                            .pos(pos)\n                            .anchor(valueAnchor)\n                            .fontFamily(valueFontFamily)\n                            .fontSize(valueFontSize)\n                            .text(d)\n                            .render()\n                            ;\n\n                    });\n                stackedTotalText.exit()\n                    .each(function (this: SVGElement, d) {\n                        context.textLocal.get(this).target(null);\n                    })\n                    .remove()\n                    ;\n            });\n        column.exit().transition().duration(duration)\n            .remove()\n            ;\n    }\n\n    calcInnerText(offset, innerText, valueText) {\n        const fontFamily = this.innerTextFontFamily_exists() ? this.innerTextFontFamily() : \"Verdana\";\n        const fontSize = this.innerTextFontSize();\n        const valueFontFamily = this.valueFontFamily_exists() ? this.valueFontFamily() : \"Verdana\";\n        const valueFontSize = this.valueFontSize();\n        const padding = this.innerTextPadding_exists() ? this.innerTextPadding() : fontSize / 2.5;\n        const valueTextWidth = this.isHorizontal ? valueFontSize : this.textSize(valueText, valueFontFamily, valueFontSize).width;\n        const ellipsisWidth = this.textSize(\"...\", fontFamily, fontSize).width;\n        const innerTextWidth = this.textSize(innerText, fontFamily, fontSize).width;\n        const origInnerText = innerText;\n\n        const fullWidth = (padding * 3) + innerTextWidth + valueTextWidth;\n        const fullWidth2 = (padding * 3) + ellipsisWidth + valueTextWidth;\n        const fullWidth3 = (padding * 1) + valueTextWidth;\n        /*\n        Categories:\n            1) room to display inner text (with padding) AND value text (with padding)\n            2) room to display ellipsis (with padding) AND value text (with padding)\n            3) room to display value text only (with padding)\n            4) no room to display any text except value on the outside\n        */\n        let category = 4;\n        if (fullWidth < offset) {\n            category = 1;\n        } else if (fullWidth2 < offset) {\n            const excessWidth = offset - fullWidth2;\n            let _text = \"\";\n            for (const letter of innerText) {\n                if (this.textSize(_text + letter, fontFamily, fontSize).width > excessWidth) {\n                    innerText = _text + \"...\";\n                    break;\n                } else {\n                    _text += letter;\n                }\n            }\n            category = 2;\n        } else if (fullWidth3 < offset) {\n            innerText = \"\";\n            category = 3;\n        } else {\n            innerText = \"\";\n        }\n\n        return {\n            text: innerText,\n            isTruncated: origInnerText !== innerText,\n            padding,\n            category,\n            valueTextWidth\n        };\n    }\n\n    innerText(origRow, lparam, idx): string {\n        return origRow[0];\n    }\n}\nColumn.prototype._class += \" chart_Column\";\nColumn.prototype.implements(INDChart.prototype);\nColumn.prototype.implements(ITooltip.prototype);\n\nexport interface Column {\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    showValue(): boolean;\n    showValue(_: boolean): this;\n    showInnerText(): boolean;\n    showInnerText(_: boolean): this;\n    showValueFormat(): string;\n    showValueFormat(_: string): this;\n    showValueAsPercent(): null | \"series\" | \"domain\";\n    showValueAsPercent(_: null | \"series\" | \"domain\"): this;\n    showValueAsPercentFormat(): string;\n    showValueAsPercentFormat(_: string): this;\n    showDomainTotal(): boolean;\n    showDomainTotal(_: boolean): this;\n    valueCentered(): boolean;\n    valueCentered(_: boolean): this;\n    valueAnchor(): \"start\" | \"middle\" | \"end\";\n    valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n    valueFontFamily(): string;\n    valueFontFamily(_: string): this;\n    valueFontFamily_exists(): boolean;\n    valueFontSize(): number;\n    valueFontSize(_: number): this;\n    xAxisSeriesPaddingInner(): number;\n    xAxisSeriesPaddingInner(_: number): this;\n    innerTextFontFamily(): string;\n    innerTextFontFamily(_: string): this;\n    innerTextFontFamily_exists(): boolean;\n    innerTextFontSize(): number;\n    innerTextFontSize(_: number): this;\n    innerTextPadding(): number;\n    innerTextPadding(_: number): this;\n    innerTextPadding_exists(): boolean;\n    tooltipInnerTextEllipsedOnly(): boolean;\n    tooltipInnerTextEllipsedOnly(_: boolean): this;\n\n    //  INDChart  ---\n    fillColor(row, column, value, origRow): string;\n    textColor(row, column, value, origRow): string;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip  ---\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n    tooltipStyle(_: \"default\" | \"none\" | \"series-table\"): this;\n}\n\nColumn.prototype.publish(\"valueFontFamily\", null, \"string\", \"Font family of value text\", null, { optional: true });\nColumn.prototype.publish(\"valueFontSize\", 12, \"number\", \"Height of value text (pixels)\");\nColumn.prototype.publish(\"innerTextFontFamily\", null, \"string\", \"Font family of inner text\", null, { optional: true });\nColumn.prototype.publish(\"innerTextPadding\", 8, \"number\", \"Offset of inner text (pixels)\", null, { optional: true });\nColumn.prototype.publish(\"innerTextFontSize\", 12, \"number\", \"Height of inner text (pixels)\");\nColumn.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", () => Column.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nColumn.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nColumn.prototype.publish(\"showValue\", false, \"boolean\", \"Show Value in column\");\nColumn.prototype.publish(\"showInnerText\", false, \"boolean\", \"Show Label in column\");\nColumn.prototype.publish(\"showValueFormat\", \",\", \"string\", \"D3 Format for Value\", null, { disable: (w: Column) => !w.showValue() || !!w.showValueAsPercent() });\nColumn.prototype.publish(\"showValueAsPercent\", null, \"set\", \"If showValue is true, optionally show value as a percentage by Series or Domain\", [null, \"series\", \"domain\"], { disable: w => !w.showValue(), optional: true });\nColumn.prototype.publish(\"showValueAsPercentFormat\", \".0%\", \"string\", \"D3 Format for %\", null, { disable: (w: Column) => !w.showValue() || !w.showValueAsPercent() });\nColumn.prototype.publish(\"showDomainTotal\", false, \"boolean\", \"Show Total Value for Stacked Columns\", null);\nColumn.prototype.publish(\"valueCentered\", false, \"boolean\", \"Show Value in center of column\");\nColumn.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nColumn.prototype.publish(\"xAxisSeriesPaddingInner\", 0.0, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\");\nColumn.prototype.publish(\"tooltipInnerTextEllipsedOnly\", false, \"boolean\", \"Show tooltip only when inner text is truncated with an ellipsis\");\n\n/*\nconst origUseClonedPalette = Column.prototype.useClonedPalette;\nColumn.prototype.useClonedPalette = function (this: Column, _?) {\n    const retVal = origUseClonedPalette.apply(this, arguments);\n    if (arguments.length) {\n        this._useClonedPalette = _;\n    }\n    return retVal;;\n}\n*/\n","import { Column } from \"./Column.ts\";\n\nexport class Bar extends Column {\n    constructor() {\n        super();\n        this.orientation_default(\"vertical\");\n    }\n}\nBar.prototype._class += \" chart_Bar\";\n","function count(node) {\n  var sum = 0,\n      children = node.children,\n      i = children && children.length;\n  if (!i) sum = 1;\n  else while (--i >= 0) sum += children[i].value;\n  node.value = sum;\n}\n\nexport default function() {\n  return this.eachAfter(count);\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], children, i, index = -1;\n  while (node = nodes.pop()) {\n    callback.call(that, node, ++index, this);\n    if (children = node.children) {\n      for (i = children.length - 1; i >= 0; --i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  return this;\n}\n","export default function(callback, that) {\n  var node = this, nodes = [node], next = [], children, i, n, index = -1;\n  while (node = nodes.pop()) {\n    next.push(node);\n    if (children = node.children) {\n      for (i = 0, n = children.length; i < n; ++i) {\n        nodes.push(children[i]);\n      }\n    }\n  }\n  while (node = next.pop()) {\n    callback.call(that, node, ++index, this);\n  }\n  return this;\n}\n","export default function(callback, that) {\n  let index = -1;\n  for (const node of this) {\n    if (callback.call(that, node, ++index, this)) {\n      return node;\n    }\n  }\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  return Array.from(this);\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","export default function*() {\n  var node = this, current, next = [node], children, i, n;\n  do {\n    current = next.reverse(), next = [];\n    while (node = current.pop()) {\n      yield node;\n      if (children = node.children) {\n        for (i = 0, n = children.length; i < n; ++i) {\n          next.push(children[i]);\n        }\n      }\n    }\n  } while (next.length);\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_find from \"./find.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\";\nimport node_iterator from \"./iterator.js\";\n\nexport default function hierarchy(data, children) {\n  if (data instanceof Map) {\n    data = [undefined, data];\n    if (children === undefined) children = mapChildren;\n  } else if (children === undefined) {\n    children = objectChildren;\n  }\n\n  var root = new Node(data),\n      node,\n      nodes = [root],\n      child,\n      childs,\n      i,\n      n;\n\n  while (node = nodes.pop()) {\n    if ((childs = children(node.data)) && (n = (childs = Array.from(childs)).length)) {\n      node.children = childs;\n      for (i = n - 1; i >= 0; --i) {\n        nodes.push(child = childs[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 objectChildren(d) {\n  return d.children;\n}\n\nfunction mapChildren(d) {\n  return Array.isArray(d) ? d[1] : null;\n}\n\nfunction copyData(node) {\n  if (node.data.value !== undefined) node.value = node.data.value;\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  find: node_find,\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  [Symbol.iterator]: node_iterator\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","// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use\nconst a = 1664525;\nconst c = 1013904223;\nconst m = 4294967296; // 2^32\n\nexport default function() {\n  let s = 1;\n  return () => (s = (a * s + c) % m) / m;\n}\n","export default function(x) {\n  return typeof x === \"object\" && \"length\" in x\n    ? x // Array, TypedArray, NodeList, array-like\n    : Array.from(x); // Map, Set, iterable, string, or anything else\n}\n\nexport function shuffle(array, random) {\n  let m = array.length,\n      t,\n      i;\n\n  while (m) {\n    i = 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} from \"../array.js\";\nimport lcg from \"../lcg.js\";\n\nexport default function(circles) {\n  return packEncloseRandom(circles, lcg());\n}\n\nexport function packEncloseRandom(circles, random) {\n  var i = 0, n = (circles = shuffle(Array.from(circles), random)).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 + Math.max(a.r, b.r, 1) * 1e-9, 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 = -(Math.abs(A) > 1e-6 ? (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 array from \"../array.js\";\nimport lcg from \"../lcg.js\";\nimport {packEncloseRandom} 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 packSiblingsRandom(circles, random) {\n  if (!(n = (circles = array(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 = packEncloseRandom(a, random);\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  packSiblingsRandom(circles, lcg());\n  return circles;\n}\n","import {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\nimport lcg from \"../lcg.js\";\nimport {packSiblingsRandom} from \"./siblings.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    const random = lcg();\n    root.x = dx / 2, root.y = dy / 2;\n    if (radius) {\n      root.eachBefore(radiusLeaf(radius))\n          .eachAfter(packChildrenRandom(padding, 0.5, random))\n          .eachBefore(translateChild(1));\n    } else {\n      root.eachBefore(radiusLeaf(defaultRadius))\n          .eachAfter(packChildrenRandom(constantZero, 1, random))\n          .eachAfter(packChildrenRandom(padding, root.r / Math.min(dx, dy), random))\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 packChildrenRandom(padding, k, random) {\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 = packSiblingsRandom(children, random);\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","import { HTMLWidget, Utility } from \"@hpcc-js/common\";\nimport { bullet as d3Bullet } from \"@hpcc-js/d3-bullet\";\nimport { select as d3Select } from \"d3-selection\";\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 (_event, d) {\n                context.click(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (_event, 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 x => () => x;\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, nice, thresholdSturges, ticks} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport ascending from \"./ascending.js\";\nimport area from \"./area.js\";\nimport constant from \"./constant.js\";\nimport contains from \"./contains.js\";\nimport noop from \"./noop.js\";\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      const e = extent(values, finite);\n      tz = ticks(...nice(e[0], e[1], tz), tz);\n      while (tz[tz.length - 1] >= e[1]) tz.pop();\n      while (tz[1] < e[0]) tz.shift();\n    } else {\n      tz = tz.slice().sort(ascending);\n    }\n\n    return tz.map(value => contour(values, value));\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    const v = value == null ? NaN : +value;\n    if (isNaN(v)) throw new Error(`invalid value: ${value}`);\n\n    var polygons = [],\n        holes = [];\n\n    isorings(values, v, function(ring) {\n      smooth(ring, values, v);\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 = above(values[0], value);\n    cases[t1 << 1].forEach(stitch);\n    while (++x < dx - 1) {\n      t0 = t1, t1 = above(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 = above(values[y * dx + dx], value);\n      t2 = above(values[y * dx], value);\n      cases[t1 << 1 | t2 << 2].forEach(stitch);\n      while (++x < dx - 1) {\n        t0 = t1, t1 = above(values[y * dx + dx + x + 1], value);\n        t3 = t2, t2 = above(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 = above(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          v1 = valid(values[yt * dx + xt]);\n      if (x > 0 && x < dx && xt === x) {\n        point[0] = smooth1(x, valid(values[yt * dx + xt - 1]), v1, value);\n      }\n      if (y > 0 && y < dy && yt === y) {\n        point[1] = smooth1(y, valid(values[(yt - 1) * dx + xt]), v1, value);\n      }\n    });\n  }\n\n  contours.contour = contour;\n\n  contours.size = function(_) {\n    if (!arguments.length) return [dx, dy];\n    var _0 = Math.floor(_[0]), _1 = Math.floor(_[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\n// When computing the extent, ignore infinite values (as well as invalid ones).\nfunction finite(x) {\n  return isFinite(x) ? x : NaN;\n}\n\n// Is the (possibly invalid) x greater than or equal to the (known valid) value?\n// Treat any invalid value as below negative infinity.\nfunction above(x, value) {\n  return x == null ? false : +x >= value;\n}\n\n// During smoothing, treat any invalid value as negative infinity.\nfunction valid(v) {\n  return v == null || isNaN(v = +v) ? -Infinity : v;\n}\n\nfunction smooth1(x, v0, v1, value) {\n  const a = value - v0;\n  const b = v1 - v0;\n  const d = isFinite(a) || isFinite(b) ? a / b : Math.sign(a) / Math.sign(b);\n  return isNaN(d) ? x : x + d - 0.5;\n}\n","import {blur2, max, ticks} from \"d3-array\";\nimport {slice} from \"./array.js\";\nimport constant from \"./constant.js\";\nimport Contours from \"./contours.js\";\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 grid(data) {\n    var values = new Float32Array(n * m),\n        pow2k = Math.pow(2, -k),\n        i = -1;\n\n    for (const d of data) {\n      var xi = (x(d, ++i, data) + o) * pow2k,\n          yi = (y(d, i, data) + o) * pow2k,\n          wi = +weight(d, i, data);\n      if (wi && xi >= 0 && xi < n && yi >= 0 && yi < m) {\n        var x0 = Math.floor(xi),\n            y0 = Math.floor(yi),\n            xt = xi - x0 - 0.5,\n            yt = yi - y0 - 0.5;\n        values[x0 + y0 * n] += (1 - xt) * (1 - yt) * wi;\n        values[x0 + 1 + y0 * n] += xt * (1 - yt) * wi;\n        values[x0 + 1 + (y0 + 1) * n] += xt * yt * wi;\n        values[x0 + (y0 + 1) * n] += (1 - xt) * yt * wi;\n      }\n    }\n\n    blur2({data: values, width: n, height: m}, r * pow2k);\n    return values;\n  }\n\n  function density(data) {\n    var values = grid(data),\n        tz = threshold(values),\n        pow4k = Math.pow(2, 2 * k);\n\n    // Convert number of thresholds into uniform thresholds.\n    if (!Array.isArray(tz)) {\n      tz = ticks(Number.MIN_VALUE, max(values) / pow4k, tz);\n    }\n\n    return Contours()\n        .size([n, m])\n        .thresholds(tz.map(d => d * pow4k))\n      (values)\n        .map((c, i) => (c.value = +tz[i], transform(c)));\n  }\n\n  density.contours = function(data) {\n    var values = grid(data),\n        contours = Contours().size([n, m]),\n        pow4k = Math.pow(2, 2 * k),\n        contour = value => {\n          value = +value;\n          var c = transform(contours.contour(values, value * pow4k));\n          c.value = value; // preserve exact threshold value\n          return c;\n        };\n    Object.defineProperty(contour, \"max\", {get: () => max(values) / pow4k});\n    return contour;\n  };\n\n  function transform(geometry) {\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 = +_[0], _1 = +_[1];\n    if (!(_0 >= 0 && _1 >= 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.sqrt(4 * _ * _ + 1) - 1) / 2, resize();\n  };\n\n  return density;\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 hypot = Math.hypot;\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 x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n    areaRingSum = new 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 = new Adder();\n  },\n  result: function() {\n    var area = areaSum / 2;\n    areaSum = new Adder();\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 \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new 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 = new Adder();\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","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n  constructor(digits) {\n    this._append = digits == null ? append : appendRound(digits);\n    this._radius = 4.5;\n    this._ = \"\";\n  }\n  pointRadius(_) {\n    this._radius = +_;\n    return this;\n  }\n  polygonStart() {\n    this._line = 0;\n  }\n  polygonEnd() {\n    this._line = NaN;\n  }\n  lineStart() {\n    this._point = 0;\n  }\n  lineEnd() {\n    if (this._line === 0) this._ += \"Z\";\n    this._point = NaN;\n  }\n  point(x, y) {\n    switch (this._point) {\n      case 0: {\n        this._append`M${x},${y}`;\n        this._point = 1;\n        break;\n      }\n      case 1: {\n        this._append`L${x},${y}`;\n        break;\n      }\n      default: {\n        this._append`M${x},${y}`;\n        if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n          const r = this._radius;\n          const s = this._;\n          this._ = \"\"; // stash the old string so we can cache the circle path fragment\n          this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n          cacheRadius = r;\n          cacheAppend = this._append;\n          cacheCircle = this._;\n          this._ = s;\n        }\n        this._ += cacheCircle;\n        break;\n      }\n    }\n  }\n  result() {\n    const result = this._;\n    this._ = \"\";\n    return result.length ? result : null;\n  }\n}\n\nfunction append(strings) {\n  let i = 1;\n  this._ += strings[0];\n  for (const j = strings.length; i < j; ++i) {\n    this._ += arguments[i] + strings[i];\n  }\n}\n\nfunction appendRound(digits) {\n  const d = Math.floor(digits);\n  if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n  if (d > 15) return append;\n  if (d !== cacheDigits) {\n    const k = 10 ** d;\n    cacheDigits = d;\n    cacheAppend = function append(strings) {\n      let i = 1;\n      this._ += strings[0];\n      for (const j = strings.length; i < j; ++i) {\n        this._ += Math.round(arguments[i] * k) / k + strings[i];\n      }\n    };\n  }\n  return cacheAppend;\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  let digits = 3,\n      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    if (!arguments.length) return projection;\n    projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n    return path;\n  };\n\n  path.context = function(_) {\n    if (!arguments.length) return context;\n    contextStream = _ == null ? (context = null, new PathString(digits)) : 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  path.digits = function(_) {\n    if (!arguments.length) return digits;\n    if (_ == null) digits = null;\n    else {\n      const d = Math.floor(_);\n      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n      digits = d;\n    }\n    if (context === null) contextStream = new PathString(digits);\n    return path;\n  };\n\n  return path.projection(projection).digits(digits).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","import { SVGWidget } from \"@hpcc-js/common\";\nimport { annotation as d3Annotation, annotationCalloutElbow } from \"@hpcc-js/d3-annotation\";\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\";\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\", (_event, 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\", (_event, d: any) => {\n                const [x, y] = this._d3Arc.centroid(d);\n                this.tip({ x, y, label: this.valueDescription() });\n            })\n            .on(\"mouseout\", () => {\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\", (_event, d: any) => {\n                const [x, y] = this._d3Arc.centroid(d);\n                this.tip({ x, y, label: this.tickValueDescription() });\n            })\n            .on(\"mouseout\", () => {\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\n    constructor() {\n        super();\n        I2DChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n\n        this.d3Pie = d3Pie();\n\n        this.d3Arc = d3Arc();\n        this.d3LabelArc = d3Arc();\n        this\n            .tooltipTick_default(false)\n            .tooltipOffset_default(0)\n            ;\n    }\n\n    intersection(pointA, pointB) {\n        return this.intersectCircle(this.calcOuterRadius(), pointA, pointB);\n    }\n\n    calcInnerRadius() {\n        return this.innerRadius_exists() ? this.calcOuterRadius() * (this.innerRadius() as number) / 100 : 0;\n    }\n\n    calcOuterRadius() {\n        const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d }, false)), \"Verdana\", 12).width;\n        const horizontalLimit = this._size.width - (this.showLabels() ? maxTextWidth * 2 : 0) - 20;\n        const verticalLimit = this._size.height - 12 * 3 - (this.showLabels() ? this._smallValueLabelHeight : 0);\n        const outerRadius = Math.min(horizontalLimit, verticalLimit) / 2 - 2;\n        if ((horizontalLimit / 2) - 2 < this.minOuterRadius()) {\n            this._labelWidthLimit = maxTextWidth - (this.minOuterRadius() - ((horizontalLimit / 2) - 2));\n        } else {\n            this._labelWidthLimit = maxTextWidth;\n        }\n        if (outerRadius < this.minOuterRadius()) {\n            return this.minOuterRadius();\n        }\n        return outerRadius;\n    }\n\n    calcSmallValueLabelHeight() {\n        const smallDef = 0.1;\n        const totalVal = this.data().reduce((acc, n) => acc + n[1], 0);\n        let smallCount = 0;\n        this.data().forEach(row => {\n            if (row[1] / totalVal < smallDef) {\n                smallCount++;\n            }\n        });\n        return this.labelHeight() * smallCount;\n    }\n\n    calcTotalValue(): number {\n        return this.data().reduce((acc, d) => {\n            return acc + d[1];\n        }, 0);\n    }\n\n    calcPadAngleRadians(): number {\n        const paddingValue = this.slicePadding();\n        return paddingValue > 0 ? Math.min(paddingValue, 0.05) : 0;\n    }\n\n    getLabelText(d, truncate?) {\n        let len;\n        let label = d.data[0];\n        if (typeof this._labelWidthLimit !== \"undefined\" && truncate) {\n            const labelWidth = this.textSize(label, \"Verdana\", this.labelHeight()).width;\n            if (this._labelWidthLimit < labelWidth) {\n                len = label.length * (this._labelWidthLimit / labelWidth) - 3;\n                label = len < label.length ? label.slice(0, len) + \"...\" : label;\n            }\n        }\n        if (this.showSeriesValue()) {\n            label += ` : ${this._seriesValueFormatter(d.data[1])}`;\n        }\n        if (this.showSeriesPercentage()) {\n            let sum = this._totalValue;\n            const dm = this.dataMeta();\n            if (typeof dm.sum !== \"undefined\") {\n                sum = dm.sum;\n            }\n            const perc = (d.data[1] / sum) * 100;\n            label += ` : ${this._seriesPercentageFormatter(perc)}%`;\n        }\n        return label;\n    }\n\n    selection(): any[]; // any[] === single row\n    selection(_: any[]): this;\n    selection(_?: any[]): any[] | this {\n        if (!arguments.length) {\n            try {\n                return this._selection.selection2()[0]?.data;\n            } catch (e) {\n                return undefined;\n            }\n        }\n        //  Stringify to enable a deep equal\n        const strRow = JSON.stringify(_);\n        this._selection.selection2(d => strRow === JSON.stringify(d.data));\n    }\n\n    selectByLabel(_: string) {\n        const row = this.data().filter(row => row[0] === _)[0];\n        if (row) {\n            this.selection(row);\n        }\n    }\n\n    _slices;\n    _labels;\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection\n            .widgetElement(element)\n            .skipBringToTop(true)\n            ;\n\n        this._slices = element.append(\"g\");\n        this._labels = element.append(\"g\");\n\n        const context = this;\n\n        this\n            .tooltipHTML(function (d) {\n                switch (context.tooltipStyle()) {\n                    case \"series-table\":\n                        return context.tooltipFormat({\n                            label: d.data[0],\n                            arr: context.columns().slice(1).map(function (column, i) {\n                                return {\n                                    label: column,\n                                    color: context._palette(d.data[0]),\n                                    value: d.data[i + 1]\n                                };\n                            })\n                        });\n                    default:\n                        return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n                }\n            })\n            ;\n    }\n\n    update(_domNode, element) {\n        this.selectionGlow(!this.tabNavigation());\n        super.update(_domNode, element);\n        const context = this;\n\n        this.updateD3Pie();\n        this._palette = this._palette.switch(this.paletteID());\n        this._seriesValueFormatter = d3Format(this.seriesValueFormat() as string);\n        this._seriesPercentageFormatter = d3Format(this.seriesPercentageFormat() as string);\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n        this._smallValueLabelHeight = this.calcSmallValueLabelHeight();\n        this._totalValue = this.calcTotalValue();\n        const outerRadius = this.calcOuterRadius();\n        const innerRadius = Math.max(this.calcInnerRadius(), Math.min(outerRadius / 30, 6));\n        const labelRadius = outerRadius + 12;\n\n        this.d3Arc\n            .innerRadius(innerRadius)\n            .padRadius(outerRadius)\n            .outerRadius(outerRadius)\n            .padAngle(this.calcPadAngleRadians())\n            ;\n\n        this._quadIdxArr = [[], [], [], []];\n        const data = [...this.data()];\n        switch (this.sortDataByValue()) {\n            case \"ascending\":\n                data.sort(sortAscending);\n                break;\n            case \"descending\":\n                data.sort(sortDescending);\n                break;\n        }\n        const arc = this._slices.selectAll(\".arc\").data(this.d3Pie(data), d => d.data[0]);\n\n        this._labelPositions = [];\n\n        //  Enter  ---\n        arc.enter().append(\"g\")\n            .attr(\"class\", (d, i) => \"arc series series-\" + this.cssTag(d.data[0]))\n            .attr(\"opacity\", 0)\n            .call(this._selection.enter.bind(this._selection))\n            .on(\"click\", function (_event, d) {\n                context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (_event, d) {\n                context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n            })\n            .on(\"keydown\", function (event, d) {\n                if (context.tabNavigation() && (event.code === \"Space\" || event.key === \"Enter\")) {\n                    event.preventDefault();\n                    context._selection.click(this);\n                }\n            })\n            .each(function (d, i) {\n                d3Select(this).append(\"path\")\n                    .on(\"mouseout.tooltip\", context.tooltip.hide)\n                    .on(\"mousemove.tooltip\", context.tooltip.show)\n                    .on(\"mouseover\", arcTween(0, 0))\n                    .on(\"mouseout\", arcTween(-5, 150))\n                    ;\n            })\n            .merge(arc).transition()\n            .attr(\"opacity\", 1)\n            .attr(\"tabindex\", context.tabNavigation() ? \"0\" : null)\n            .attr(\"role\", context.tabNavigation() ? \"button\" : null)\n            .attr(\"aria-label\", context.tabNavigation() ? (d: any) => `${d.data[0]}: ${d.data[1]}` : null)\n            .each(function (d, i) {\n                const quad = context.getQuadrant(midAngle(d));\n                context._quadIdxArr[quad].push(i);\n                d.outerRadius = outerRadius - 5;\n                const element2 = d3Select(this);\n                element2.select(\"path\").transition()\n                    .attr(\"d\", context.d3Arc)\n                    .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n                    ;\n            })\n            ;\n\n        //  Exit  ---\n        arc.exit().transition()\n            .style(\"opacity\", 0)\n            .remove()\n            ;\n        //  Labels  ---\n        this.d3LabelArc\n            .innerRadius(labelRadius)\n            .outerRadius(labelRadius)\n            ;\n        const text = this._labels.selectAll(\"text\").data(this.showLabels() ? this.d3Pie(data) : [], d => d.data[0]);\n\n        const mergedText = text.enter().append(\"text\")\n            .on(\"mouseout.tooltip\", context.tooltip.hide)\n            .on(\"mousemove.tooltip\", context.tooltip.show)\n            .attr(\"dy\", \".5em\")\n            .on(\"click\", function (_event, 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 (_event, d) {\n                context._slices.selectAll(\"g\").filter(function (d2) {\n                    if (d.data === d2.data) {\n                        context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n                    }\n                });\n            })\n            .merge(text)\n            .text(d => this.getLabelText(d, true))\n            .each(function (d, i) {\n                const pos = context.d3LabelArc.centroid(d);\n                const mid_angle = midAngle(d);\n                pos[0] = labelRadius * (context.isLeftSide(mid_angle) ? 1 : -1);\n                context._labelPositions.push({\n                    top: pos[1],\n                    bottom: pos[1] + context.labelHeight()\n                });\n            });\n        if (this.showLabels()) {\n            this.adjustForOverlap();\n            mergedText.transition()\n                .style(\"font-size\", this.labelHeight() + \"px\")\n                .attr(\"transform\", (d, i) => {\n                    const pos = context.d3LabelArc.centroid(d);\n                    pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n                    pos[1] = context._labelPositions[i].top;\n                    return \"translate(\" + pos + \")\";\n                })\n                .style(\"text-anchor\", d => this.isLeftSide(midAngle(d)) ? \"start\" : \"end\");\n        }\n\n        text.exit()\n            .remove();\n\n        const polyline = this._labels.selectAll(\"polyline\").data(this.showLabels() ? this.d3Pie(data) : [], d => this.getLabelText(d, true));\n\n        polyline.enter()\n            .append(\"polyline\")\n            .merge(polyline).transition()\n            .attr(\"points\", function (d, i) {\n                const pos = context.d3LabelArc.centroid(d);\n                const pos1 = context.d3Arc.centroid(d);\n                const pos2 = [...pos];\n                pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n                pos[1] = context._labelPositions[i].top;\n                return [pos1, pos2, pos];\n            });\n\n        polyline.exit()\n            .remove();\n\n        if (this.showLabels()) {\n            this.centerOnLabels();\n        }\n        function midAngle(d) {\n            return d.startAngle + (d.endAngle - d.startAngle) / 2;\n        }\n\n        function arcTween(outerRadiusDelta, delay) {\n            return function () {\n                d3Select(this).transition().delay(delay).attrTween(\"d\", function (d: any) {\n                    const i = d3Interpolate(d.outerRadius, outerRadius + outerRadiusDelta);\n                    return function (t) { d.outerRadius = i(t); return context.d3Arc(d); };\n                });\n            };\n        }\n    }\n\n    isLeftSide(midAngle) {\n        midAngle = normalizeRadians(midAngle);\n        const isLeft = midAngle > Math.PI * 2 ? midAngle : midAngle < Math.PI && midAngle > 0;\n        return isLeft;\n    }\n\n    getQuadrant(radians) {\n        let quad = 0;\n        const rad = normalizeRadians(radians);\n        quad = rad <= Math.PI * 1.0 && rad >= Math.PI * 0.5 ? 3 : quad;\n        quad = rad <= Math.PI * 0.5 && rad >= Math.PI * 0.0 ? 2 : quad;\n        quad = rad <= Math.PI * 0.0 && rad >= Math.PI * -0.5 ? 1 : quad;\n        return quad;\n    }\n\n    centerOnLabels() {\n        const gY = this.pos().y;\n        const gY2 = gY * 2;\n        const radius = this.calcOuterRadius();\n        const top = Math.min(this._minLabelTop, -radius);\n        const bottom = Math.max(this._maxLabelBottom, radius);\n        const h = bottom - top;\n        const heightDiff = gY2 - h;\n        const absTop = Math.abs(this._minLabelTop);\n        let yShift = 0;\n        if (bottom > gY) {\n            yShift = gY - bottom + (this.labelHeight() / 2);\n            yShift -= heightDiff / 2;\n        } else if (top < 0 && absTop > gY) {\n            yShift = absTop - gY + (this.labelHeight() / 2);\n            yShift += heightDiff / 2;\n        }\n        const pos = this.pos();\n        this.pos({\n            y: pos.y + yShift,\n            x: pos.x\n        });\n    }\n\n    adjustForOverlap() {\n        const labelHeight = this.labelHeight();\n        this._quadIdxArr.forEach((arr, quad) => {\n            this._quadIdxArr[quad].sort((a, b) => {\n                if (quad === 1 || quad === 2) {\n                    return this._labelPositions[a].top > this._labelPositions[b].top ? -1 : 1;\n                } else if (quad === 0 || quad === 3) {\n                    return this._labelPositions[a].top > this._labelPositions[b].top ? 1 : -1;\n                }\n            });\n            let prevTop;\n            this._quadIdxArr[quad].forEach((n, i) => {\n                if (i > 0) {\n                    if (quad === 1 || quad === 2) {\n                        if (prevTop < this._labelPositions[n].bottom) {\n                            const overlap = this._labelPositions[n].bottom - prevTop;\n                            this._labelPositions[n].top -= overlap;\n                            this._labelPositions[n].bottom -= overlap;\n                        }\n                    } else if (quad === 0 || quad === 3) {\n                        if (prevTop + labelHeight > this._labelPositions[n].top) {\n                            const overlap = Math.abs(this._labelPositions[n].top) - Math.abs(prevTop + labelHeight);\n                            this._labelPositions[n].top -= overlap;\n                            this._labelPositions[n].bottom -= overlap;\n                        }\n                    }\n                }\n                prevTop = this._labelPositions[n].top;\n            });\n        });\n        this._minLabelTop = 0;\n        this._maxLabelBottom = 0;\n        this._quadIdxArr.forEach((arr, quad) => {\n            this._quadIdxArr[quad].forEach((n, i) => {\n                if (this._minLabelTop > this._labelPositions[n].top) {\n                    this._minLabelTop = this._labelPositions[n].top;\n                }\n                if (this._maxLabelBottom < this._labelPositions[n].bottom) {\n                    this._maxLabelBottom = this._labelPositions[n].bottom;\n                }\n            });\n        });\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n\n    updateD3Pie() {\n        const startAngle = normalizeRadians(degreesToRadians(this.startAngle()));\n\n        switch (this.sortDataByValue()) {\n            case \"ascending\":\n                this.d3Pie.sort(sortAscending);\n                break;\n            case \"descending\":\n                this.d3Pie.sort(sortDescending);\n                break;\n            default:\n                this.d3Pie.sort(null);\n        }\n\n        this.d3Pie\n            .padAngle(this.calcPadAngleRadians())\n            .startAngle(startAngle)\n            .endAngle(2 * Math.PI + startAngle)\n            .value(function (d) {\n                return d[1];\n            })\n            ;\n    }\n}\nPie.prototype._class += \" chart_Pie\";\nPie.prototype.implements(I2DChart.prototype);\nPie.prototype.implements(ITooltip.prototype);\nPie.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface Pie {\n    showSeriesValue(): boolean;\n    showSeriesValue(_: boolean): this;\n    seriesValueFormat(): string;\n    seriesValueFormat(_: string): this;\n    showSeriesPercentage(): boolean;\n    showSeriesPercentage(_: boolean): this;\n    minOuterRadius(): number;\n    minOuterRadius(_: number): this;\n    startAngle(): number;\n    startAngle(_: number): this;\n    labelHeight(): number;\n    labelHeight(_: number): this;\n    slicePadding(): number;\n    slicePadding(_: number): this;\n    seriesPercentageFormat(): string;\n    seriesPercentageFormat(_: string): this;\n    showLabels(): boolean;\n    showLabels(_: boolean): this;\n    sortDataByValue(): \"none\" | \"ascending\" | \"descending\";\n    sortDataByValue(_: \"none\" | \"ascending\" | \"descending\"): this;\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    outerText(): boolean;\n    outerText(_: boolean): this;\n    innerRadius(): number;\n    innerRadius(_: number): this;\n    innerRadius_exists(): boolean;\n\n    //  I2DChart\n    _palette;\n    fillColor(row: any[], column: string, value: number): string;\n    textColor(row: any[], column: string, value: number): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipStyle(): \"default\" | \"none\" | \"series-table\";\n    tooltipTick(): boolean;\n    tooltipTick(_: boolean): Pie;\n    tooltipTick_default(): boolean;\n    tooltipTick_default(_: boolean): Pie;\n    tooltipOffset(): number;\n    tooltipOffset(_: number): Pie;\n    tooltipOffset_default(): number;\n    tooltipOffset_default(_: number): Pie;\n\n    //  SimpleSelectionMixin\n    _selection: Utility.SimpleSelection;\n\n    // Tab Navigation\n    tabNavigation(): boolean;\n    tabNavigation(_: boolean): this;\n}\nPie.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, wedge labels will display\");\nPie.prototype.publish(\"showSeriesValue\", false, \"boolean\", \"Append data series value next to label\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"seriesValueFormat\", \",.0f\", \"string\", \"Number format used for formatting series values\", null, { disable: w => !w.showSeriesValue() });\nPie.prototype.publish(\"showSeriesPercentage\", false, \"boolean\", \"Append data series percentage next to label\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"seriesPercentageFormat\", \",.0f\", \"string\", \"Number format used for formatting series percentages\", null, { disable: w => !w.showSeriesPercentage() });\nPie.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Pie.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nPie.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nPie.prototype.publish(\"innerRadius\", 0, \"number\", \"Sets inner pie hole radius as a percentage of the radius of the pie chart\", null, { tags: [\"Basic\"], range: { min: 0, step: 1, max: 100 } });\nPie.prototype.publish(\"minOuterRadius\", 20, \"number\", \"Minimum outer radius (pixels)\");\nPie.prototype.publish(\"startAngle\", 0, \"number\", \"Starting angle of the first (and largest) wedge (degrees)\");\nPie.prototype.publish(\"labelHeight\", 12, \"number\", \"Font size of labels (pixels)\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"slicePadding\", 0.01, \"number\", \"Padding between pie slices (converted to pixels)\", null, { tags: [\"Basic\"], range: { min: 0, step: 0.01, max: 0.2 } });\nPie.prototype.publish(\"sortDataByValue\", \"descending\", \"set\", \"Sort data by value\", [\"none\", \"ascending\", \"descending\"]);\nPie.prototype.publish(\"tabNavigation\", false, \"boolean\", \"Enable or disable tab navigation\");\n","import { Pie } from \"./Pie.ts\";\n\nexport class HalfPie extends Pie {\n    constructor() {\n        super();\n    }\n    postUpdate(domNode, element) {\n        super.postUpdate(domNode, element);\n        let x = this._pos.x;\n        let y = this._pos.y;\n        if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\n            x -= this._size.width / 2;\n            y -= this._size.height / 2;\n        }\n        y += (this._size.height / 4);\n        this._element.attr(\"transform\", \"translate(\" + x + \",\" + y + \")scale(\" + this._widgetScale + \")\");\n    }\n    updateD3Pie() {\n        super.updateD3Pie();\n        this.d3Pie\n            .startAngle(-Math.PI / 2)\n            .endAngle(Math.PI / 2)\n            ;\n    }\n}\nHalfPie.prototype._class += \" chart_HalfPie\";\n","import { max, Palette } from \"@hpcc-js/common\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nexport class Heat extends XYAxis {\n\n    protected _domForeignObject;\n    protected _domCanvas;\n    protected _heat;\n\n    constructor() {\n        super();\n        this\n            .xAxisGuideLines_default(true)\n            .yAxisGuideLines_default(true)\n            ;\n    }\n\n    radius(r: number): this {\n        this.radiusX(r);\n        this.radiusY(r);\n        return this;\n    }\n\n    layerEnter(host: XYAxis, element, duration: number = 250) {\n        super.layerEnter(host, element, duration);\n        this._domForeignObject = this.svg.insert(\"foreignObject\", `#${this.id() + \"_clippath\"}`);\n        this._domCanvas = this._domForeignObject.append(\"xhtml:body\")\n            .style(\"margin\", \"0px\")\n            .style(\"padding\", \"0px\")\n            .style(\"background-color\", \"transparent\")\n            .append(\"canvas\")\n            ;\n        this._heat = simpleheat(this._domCanvas.node());\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element);\n\n        this._palette = this._palette.switch(this.paletteID());\n\n        let width = this.width() - this.margin.left - this.margin.right;\n        if (width < 0) width = 0;\n        let height = this.height() - this.margin.top - this.margin.bottom;\n        if (height < 0) height = 0;\n\n        this._domForeignObject\n            .attr(\"x\", this.margin.left)\n            .attr(\"y\", this.margin.top)\n            .attr(\"width\", width)\n            .attr(\"height\", height)\n            ;\n        this._domCanvas\n            .attr(\"width\", width)\n            .attr(\"height\", height)\n            ;\n\n        const data = host.orientation() === \"horizontal\" ?\n            this.data().map(r => [host.dataPos(r[0]), host.valuePos(r[1]), r[2]]) :\n            this.data().map(r => [host.valuePos(r[1]), host.dataPos(r[0]), r[2]])\n            ;\n\n        const maxWeight = this.maxWeight_exists() ? this.maxWeight() : max(data, r => r[2]);\n\n        if (this.paletteID() !== \"default\") {\n            const gradient = {};\n            const count = 8;\n            const reverse = this.reversePalette();\n            for (let i = 0; i < count; ++i) {\n                gradient[i / count] = this._palette((reverse ? count - i : i) / count, 0, 1);\n            }\n            this._heat.gradient(gradient);\n        } else {\n            this._heat.gradient(this._heat.defaultGradient);\n        }\n\n        this._heat.resize();\n\n        const radiusX = this.radiusAsPercent() ? this.radiusX() * width / 100 : this.radiusX();\n        const radiusY = this.radiusAsPercent() ? this.radiusY() * height / 100 : this.radiusY();\n\n        this._heat\n            .clear()\n            .radius(radiusX, radiusY, this.blur())\n            .max(maxWeight)\n            .data(data)\n            .draw(this.minOpacity())\n            ;\n    }\n}\n\nHeat.prototype._class += \" chart_Heat\";\nHeat.prototype._palette = Palette.rainbow(\"default\");\n\nexport interface Heat {\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    reversePalette(): boolean;\n    reversePalette(_: boolean): this;\n\n    radiusX(): number;\n    radiusX(_: number): this;\n    radiusY(): number;\n    radiusY(_: number): this;\n    radiusAsPercent(): boolean;\n    radiusAsPercent(_: boolean): this;\n    blur(): number;\n    blur(_: number): this;\n\n    maxWeight(): number;\n    maxWeight(_: number): this;\n    maxWeight_exists(): boolean;\n\n    minOpacity(): number;\n    minOpacity(_: number): this;\n}\n\nHeat.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Heat.prototype._palette.switch(), { tags: [\"Basic\"] });\nHeat.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nHeat.prototype.publish(\"reversePalette\", false, \"boolean\", \"Reverse Palette Colors\", null, { disable: w => w.paletteID() === \"default\" });\n\nHeat.prototype.publish(\"radiusX\", 25, \"number\", \"Point X radius (25 by default)\");\nHeat.prototype.publish(\"radiusY\", 25, \"number\", \"Point Y radius (25 by default)\");\nHeat.prototype.publish(\"radiusAsPercent\", false, \"boolean\", \"Calculate RadiusX + RadiusY as % of size\");\nHeat.prototype.publish(\"blur\", 15, \"number\", \"Point blur radius (15 by default)\");\n\nHeat.prototype.publish(\"maxWeight\", undefined, \"number\", \"Clamp max weight to value (optional), omitting uses max data point\", undefined, { optional: true });\nHeat.prototype.publish(\"minOpacity\", 0.05, \"number\", \"Minimum point opacity (0.05 by default)\");\n\n//  The following code is a modified version of \n//   - https://github.com/mourner/simpleheat\n//   - Licensed under BSD-2-Clause - https://github.com/mourner/simpleheat/blob/gh-pages/LICENSE\n//  Changes:\n//    *  Fixed TS syntax issues\n//    *  Added support for eliptical shapes instead of circles\n\nfunction simpleheat(canvas): void {\n    if (!(this instanceof simpleheat)) return new simpleheat(canvas);\n\n    this._canvas = canvas = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\n\n    this._ctx = canvas.getContext(\"2d\");\n    this._width = canvas.width;\n    this._height = canvas.height;\n\n    this._max = 1;\n    this._data = [];\n}\n\nsimpleheat.prototype = {\n\n    defaultRadius: 25,\n\n    defaultGradient: {\n        0.4: \"blue\",\n        0.6: \"cyan\",\n        0.7: \"lime\",\n        0.8: \"yellow\",\n        1.0: \"red\"\n    },\n\n    data: function (data) {\n        this._data = data;\n        return this;\n    },\n\n    max: function (max) {\n        this._max = max;\n        return this;\n    },\n\n    add: function (point) {\n        this._data.push(point);\n        return this;\n    },\n\n    clear: function () {\n        this._data = [];\n        return this;\n    },\n\n    radius: function (rX, rY, blur) {\n        blur = blur === undefined ? 15 : blur;\n\n        // create a grayscale blurred ellipse image that we'll use for drawing points\n        const ellipse = this._ellipse = this._createCanvas();\n        const ctx = ellipse.getContext(\"2d\");\n        const rX2 = this._r = rX + blur;\n        const rY2 = this._r = rY + blur;\n\n        ellipse.width = rX2 * 2;\n        ellipse.height = rY2 * 2;\n\n        ctx.shadowOffsetX = ctx.shadowOffsetY = rX2 * 2;\n        ctx.shadowOffsetY = ctx.shadowOffsetY = rY2 * 2;\n        ctx.shadowBlur = blur;\n        ctx.shadowColor = \"black\";\n\n        ctx.beginPath();\n        ctx.ellipse(-rX2, -rY2, rX, rY, 0, 0, Math.PI * 2, true);\n        ctx.closePath();\n        ctx.fill();\n\n        return this;\n    },\n\n    resize: function () {\n        this._width = this._canvas.width;\n        this._height = this._canvas.height;\n    },\n\n    gradient: function (grad) {\n        // create a 256x1 gradient that we'll use to turn a grayscale heatmap into a colored one\n        const canvas = this._createCanvas(),\n            ctx = canvas.getContext(\"2d\"),\n            gradient = ctx.createLinearGradient(0, 0, 0, 256);\n\n        canvas.width = 1;\n        canvas.height = 256;\n\n        for (const i in grad) {\n            gradient.addColorStop(+i, grad[i]);\n        }\n\n        ctx.fillStyle = gradient;\n        ctx.fillRect(0, 0, 1, 256);\n\n        this._grad = ctx.getImageData(0, 0, 1, 256).data;\n\n        return this;\n    },\n\n    draw: function (minOpacity) {\n        if (!this._ellipse) this.radius(this.defaultRadius, this.defaultRadius);\n        if (!this._grad) this.gradient(this.defaultGradient);\n\n        const ctx = this._ctx;\n\n        ctx.clearRect(0, 0, this._width, this._height);\n\n        // draw a grayscale heatmap by putting a blurred ellipse at each data point\n        for (let i = 0, len = this._data.length, p; i < len; i++) {\n            p = this._data[i];\n            if (p[2] < 0) {\n                p[2] = 0;\n            } else if (p[2] > this._max) {\n                p[2] = this._max;\n            }\n            ctx.globalAlpha = Math.max(p[2] / this._max, minOpacity === undefined ? 0.05 : minOpacity);\n            ctx.drawImage(this._ellipse, p[0] - this._r, p[1] - this._r);\n        }\n\n        // colorize the heatmap, using opacity value of each pixel to get the right color from our gradient\n        const colored = ctx.getImageData(0, 0, this._width, this._height);\n        this._colorize(colored.data, this._grad);\n        ctx.putImageData(colored, 0, 0);\n\n        return this;\n    },\n\n    _colorize: function (pixels, gradient) {\n        for (let i = 0, len = pixels.length, j; i < len; i += 4) {\n            j = pixels[i + 3] * 4; // get gradient color from opacity value\n\n            if (j) {\n                pixels[i] = gradient[j];\n                pixels[i + 1] = gradient[j + 1];\n                pixels[i + 2] = gradient[j + 2];\n            }\n        }\n    },\n\n    _createCanvas: function () {\n        if (typeof document !== \"undefined\") {\n            return document.createElement(\"canvas\");\n        } else {\n            // create a new canvas instance in node.js\n            // the canvas class needs to have a default constructor without any parameter\n            return new this._canvas.constructor();\n        }\n    }\n};\n","var thirdPi = Math.PI / 3,\n    angles = [0, thirdPi, 2 * thirdPi, 3 * thirdPi, 4 * thirdPi, 5 * thirdPi];\n\nfunction pointX(d) {\n  return d[0];\n}\n\nfunction pointY(d) {\n  return d[1];\n}\n\nexport default function() {\n  var x0 = 0,\n      y0 = 0,\n      x1 = 1,\n      y1 = 1,\n      x = pointX,\n      y = pointY,\n      r,\n      dx,\n      dy;\n\n  function hexbin(points) {\n    var binsById = {}, bins = [], i, n = points.length;\n\n    for (i = 0; i < n; ++i) {\n      if (isNaN(px = +x.call(null, point = points[i], i, points))\n          || isNaN(py = +y.call(null, point, i, points))) continue;\n\n      var point,\n          px,\n          py,\n          pj = Math.round(py = py / dy),\n          pi = Math.round(px = px / dx - (pj & 1) / 2),\n          py1 = py - pj;\n\n      if (Math.abs(py1) * 3 > 1) {\n        var px1 = px - pi,\n            pi2 = pi + (px < pi ? -1 : 1) / 2,\n            pj2 = pj + (py < pj ? -1 : 1),\n            px2 = px - pi2,\n            py2 = py - pj2;\n        if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;\n      }\n\n      var id = pi + \"-\" + pj, bin = binsById[id];\n      if (bin) bin.push(point);\n      else {\n        bins.push(bin = binsById[id] = [point]);\n        bin.x = (pi + (pj & 1) / 2) * dx;\n        bin.y = pj * dy;\n      }\n    }\n\n    return bins;\n  }\n\n  function hexagon(radius) {\n    var x0 = 0, y0 = 0;\n    return angles.map(function(angle) {\n      var x1 = Math.sin(angle) * radius,\n          y1 = -Math.cos(angle) * radius,\n          dx = x1 - x0,\n          dy = y1 - y0;\n      x0 = x1, y0 = y1;\n      return [dx, dy];\n    });\n  }\n\n  hexbin.hexagon = function(radius) {\n    return \"m\" + hexagon(radius == null ? r : +radius).join(\"l\") + \"z\";\n  };\n\n  hexbin.centers = function() {\n    var centers = [],\n        j = Math.round(y0 / dy),\n        i = Math.round(x0 / dx);\n    for (var y = j * dy; y < y1 + r; y += dy, ++j) {\n      for (var x = i * dx + (j & 1) * dx / 2; x < x1 + dx / 2; x += dx) {\n        centers.push([x, y]);\n      }\n    }\n    return centers;\n  };\n\n  hexbin.mesh = function() {\n    var fragment = hexagon(r).slice(0, 4).join(\"l\");\n    return hexbin.centers().map(function(p) { return \"M\" + p + \"m\" + fragment; }).join(\"\");\n  };\n\n  hexbin.x = function(_) {\n    return arguments.length ? (x = _, hexbin) : x;\n  };\n\n  hexbin.y = function(_) {\n    return arguments.length ? (y = _, hexbin) : y;\n  };\n\n  hexbin.radius = function(_) {\n    return arguments.length ? (r = +_, dx = r * 2 * Math.sin(thirdPi), dy = r * 1.5, hexbin) : r;\n  };\n\n  hexbin.size = function(_) {\n    return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], hexbin) : [x1 - x0, y1 - y0];\n  };\n\n  hexbin.extent = function(_) {\n    return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], hexbin) : [[x0, y0], [x1, y1]];\n  };\n\n  return hexbin.radius(1);\n}\n","import { I2DAggrChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField } from \"@hpcc-js/common\";\nimport { extent as d3Extent, max as d3Max, min as d3Min } from \"d3-array\";\nimport { hexbin as d3HexBin } from \"d3-hexbin\";\nimport { XYAxis } from \"./XYAxis.ts\";\n\nimport \"../src/HexBin.css\";\n\nexport class HexBin extends XYAxis {\n    static __inputs: InputField[] = [{\n        id: \"x\",\n        type: \"any\"\n    }, {\n        id: \"y\",\n        type: \"number\"\n    }];\n\n    protected _hexbin;\n    protected _dataMinWeight;\n    protected _dataMaxWeight;\n    constructor() {\n        super();\n        I2DAggrChart.call(this);\n        this.tooltipValueFormat_default(\",.0f\");\n        ITooltip.call(this);\n        this.tooltipHTML(d => {\n            const seriesExtent = d3Extent<{ label: any, value: any }>(d, d => d.label);\n            const labelExtent = d3Extent<{ label: any, value: any }>(d, d => d.value);\n            return this.tooltipFormat({\n                series: seriesExtent[0] === seriesExtent[1] ? seriesExtent[0] : `${seriesExtent[0]} -> ${seriesExtent[1]}`,\n                label: labelExtent[0] === labelExtent[1] ? labelExtent[0] : `${labelExtent[0]} -> ${labelExtent[1]}`,\n                value: d.length\n            });\n        });\n        this._hexbin = d3HexBin()\n            .x(d => d.x)\n            .y(d => d.y)\n            ;\n        this\n            .xAxisGuideLines_default(false)\n            .yAxisGuideLines_default(false)\n            .xAxisType_default(\"linear\")\n            ;\n    }\n\n    xPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n    }\n\n    yPos(host: XYAxis, d) {\n        return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n    }\n\n    layerUpdate(host: XYAxis, element, duration: number = 250) {\n        super.layerUpdate(host, element, duration);\n        const context = this;\n\n        this._palette = this._palette.switch(this.paletteID());\n        if (this.useClonedPalette()) {\n            this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n        }\n\n        this._hexbin\n            .extent([0, 0], [this.width(), this.height()])\n            .radius(this.binSize())\n            ;\n\n        const flatData = this.flattenData();\n        const dataPoints = flatData.map(d => {\n            return {\n                x: context.xPos(host, d),\n                y: context.yPos(host, d),\n                label: host.parseData(d.label),\n                value: host.parseValue(d.value),\n                origRow: d\n            };\n        });\n        const hexBinPoints = this._hexbin(dataPoints);\n        const minBinPoints = d3Min(hexBinPoints, function (d: any) { return d.length; });\n        const maxBinPoints = d3Max(hexBinPoints, function (d: any) { return d.length; });\n        this._dataMinWeight = minBinPoints;\n        this._dataMaxWeight = maxBinPoints;\n\n        const points = element.selectAll(\".hexagon\").data(hexBinPoints, function (d) { return d.i + \"_\" + d.j; });\n        points.enter().append(\"path\")\n            .attr(\"class\", \"hexagon\")\n            .call(host._selection.enter.bind(host._selection))\n            .on(\"click\", function (d: any) {\n                const data = context.data();\n                context.click(d.map(row => host.rowToObj(data[row.origRow.rowIdx])), context.columns()[1], host._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d: any) {\n                const data = context.data();\n                context.dblclick(d.map(row => host.rowToObj(data[row.origRow.rowIdx])), context.columns()[1], host._selection.selected(this));\n            })\n            .on(\"mouseout.tooltip\", context.tooltip.hide)\n            .on(\"mousemove.tooltip\", context.tooltip.show)\n            .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(0)\"; })\n            .merge(points).transition().duration(duration)\n            .attr(\"d\", this._hexbin.hexagon())\n            .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(1)\"; })\n            .style(\"fill\", function (d) { return context._palette(d.length, minBinPoints, maxBinPoints); })\n            ;\n        points.exit().transition().duration(duration)\n            .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(0)\"; })\n            .remove()\n            ;\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n\n    //  Events  ---\n    click(row: object[], column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n    }\n    dblclick(row: object[], column, selected) {\n        // console.log(\"Click:  \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n    }\n}\nHexBin.prototype._class += \" chart_HexBin\";\nHexBin.prototype.implements(I2DAggrChart.prototype);\nHexBin.prototype.implements(ITooltip.prototype);\n\nexport interface HexBin {\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n    tooltipValueFormat(_): string;\n    tooltipValueFormat_default(_): string;\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    binSize(): number;\n    binSize(_: number): this;\n}\n\nHexBin.prototype.publish(\"paletteID\", \"Blues\", \"set\", \"Color palette for this widget\", HexBin.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nHexBin.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nHexBin.prototype.publish(\"binSize\", 20, \"number\", \"Bin radius\", null, { range: { min: 1, max: 300, step: 1 } });\n","import { Scatter } from \"./Scatter.ts\";\n\nimport \"../src/Line.css\";\n\nexport class Line extends Scatter {\n    constructor() {\n        super();\n\n        this\n            .interpolate_default(\"linear\")\n            ;\n    }\n}\nLine.prototype._class += \" chart_Line\";\n","import { Pie } from \"./Pie.ts\";\n\nexport class QuarterPie extends Pie {\n    constructor() {\n        super();\n    }\n    postUpdate(domNode, element) {\n        super.postUpdate(domNode, element);\n        let x = this.orientation() === \"left\" ? 0 : this._size.width;\n        let y = this._size.height;\n        if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\n            x -= this._size.width / 2;\n            y -= this._size.height / 2;\n        }\n        this._element.attr(\"transform\", \"translate(\" + x + \",\" + y + \")scale(\" + this._widgetScale + \")\");\n    }\n    updateD3Pie() {\n        super.updateD3Pie();\n        this.d3Pie\n            .startAngle(this.orientation() === \"left\" ? 0 : -Math.PI / 2)\n            .endAngle(this.orientation() === \"left\" ? Math.PI / 2 : 0)\n            ;\n    }\n    calcOuterRadius() {\n        const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d })), \"Verdana\", 12).width;\n        return Math.min(this._size.width - maxTextWidth - 10, this._size.height - 12 * 3) - 2;\n    }\n}\nQuarterPie.prototype._class += \" chart_QuarterPie\";\n\nexport interface QuarterPie {\n    orientation(): string;\n    orientation(_: string): this;\n}\nQuarterPie.prototype.publish(\"orientation\", \"left\", \"set\", \"Determines the placement and start/end angle.\", [\"left\", \"right\"]);\n","import { SVGWidget } from \"@hpcc-js/common\";\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\n\nexport class QuartileCandlestick extends SVGWidget {\n    protected _g;\n    protected _leftLine;\n    protected _rightLine;\n    protected _midLine;\n    protected _midOuterRect;\n    protected _midInnerRect1;\n    protected _midInnerRect2;\n    protected _q0text;\n    protected _q1text;\n    protected _q2text;\n    protected _q3text;\n    protected _q4text;\n    protected _q0val;\n    protected _q1val;\n    protected _q2val;\n    protected _q3val;\n    protected _q4val;\n    constructor() {\n        super();\n    }\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._g = element.append(\"g\");\n        this._leftLine = this._g.append(\"rect\");\n        this._rightLine = this._g.append(\"rect\");\n        this._midLine = this._g.append(\"rect\");\n        this._midOuterRect = this._g.append(\"rect\");\n        this._midInnerRect1 = this._g.append(\"rect\");\n        this._midInnerRect2 = this._g.append(\"rect\");\n        this._q0text = this._g.append(\"text\");\n        this._q1text = this._g.append(\"text\");\n        this._q2text = this._g.append(\"text\");\n        this._q3text = this._g.append(\"text\");\n        this._q4text = this._g.append(\"text\");\n        this._q0val = this._g.append(\"text\");\n        this._q1val = this._g.append(\"text\");\n        this._q2val = this._g.append(\"text\");\n        this._q3val = this._g.append(\"text\");\n        this._q4val = this._g.append(\"text\");\n    }\n    update(domNode, element) {\n        super.update(domNode, element);\n        const valueSize = (this.orientation() === \"horizontal\" ? this.width() : this.height()) - this.lineWidth();\n        const domainSize = this.orientation() === \"horizontal\" ? this.height() : this.width();\n        const scale = d3ScaleLinear()\n            .domain([\n                this.data()[0],\n                this.data()[4]\n            ])\n            .range([\n                this.edgePadding(),\n                valueSize - this.edgePadding()\n            ])\n            ;\n        const candleWidth = this.candleWidth_exists() ? this.candleWidth() : domainSize;\n        const lineWidth = this.lineWidth();\n        const lineColor = this.lineColor();\n        const roundedCorners = this.roundedCorners();\n        const q0x = this.edgePadding();\n        let q1x = scale(this.data()[1]);\n        let q2x = scale(this.data()[2]);\n        let q3x = scale(this.data()[3]);\n        const dataTop = -candleWidth / 2;\n        const dataBottom = candleWidth / 2;\n        const upperTextRotation = this.upperTextRotation();\n        const lowerTextRotation = this.lowerTextRotation();\n        const padding = this.textPadding();\n        const labelFontSize = this.labelFontSize();\n        const valueFontSize = this.valueFontSize();\n        const sz = Math.max(labelFontSize, valueFontSize);\n        const q4x = valueSize - q0x;\n        if (sz > 0) {\n            while (q1x - q0x < sz) {\n                q1x += sz;\n            }\n            while (q2x - q1x < sz) {\n                q2x += sz;\n            }\n            while (q3x - q2x < sz) {\n                q3x += sz;\n            }\n            while (q4x - q3x < sz) {\n                q3x -= sz;\n            }\n            while (q3x - q2x < sz) {\n                q2x -= sz;\n            }\n            while (q2x - q1x < sz) {\n                q1x -= sz;\n            }\n        }\n        let transX = (-valueSize / 2) - (this.lineWidth() / 2);\n        let transY = 0;\n        let rotate = 0;\n        const s = 1;\n        let textScale = 1;\n        let labelAnchor = \"start\";\n        let valueAnchor = \"end\";\n        if (this.orientation() === \"vertical\") {\n            transX = 0;\n            transY = valueSize / 2 + (this.lineWidth() / 2);\n            rotate = -90;\n            labelAnchor = \"end\";\n            valueAnchor = \"start\";\n            textScale = -1;\n        }\n        this._g\n            .style(\"shape-rendering\", \"crispEdges\")\n            .attr(\"transform\", `translate(${transX},${transY})rotate(${rotate})scale(${s})`)\n            ;\n        this._leftLine\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", lineWidth)\n            .attr(\"x\", q0x)\n            .attr(\"y\", dataTop)\n            .attr(\"rx\", roundedCorners)\n            .attr(\"ry\", roundedCorners)\n            ;\n        this._rightLine\n            .attr(\"class\", \"right-line\")\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", lineWidth)\n            .attr(\"x\", q4x)\n            .attr(\"y\", dataTop)\n            .attr(\"rx\", roundedCorners)\n            .attr(\"ry\", roundedCorners)\n            ;\n        this._midLine\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", lineWidth)\n            .attr(\"width\", q4x - q0x)\n            .attr(\"x\", q0x)\n            .attr(\"y\", -lineWidth / 2)\n            ;\n        this._midOuterRect\n            .attr(\"fill\", lineColor)\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"x\", q1x)\n            .attr(\"y\", dataTop)\n            .attr(\"rx\", roundedCorners)\n            .attr(\"ry\", roundedCorners)\n            ;\n        this._midInnerRect1\n            .attr(\"fill\", this.innerRectColor())\n            .attr(\"height\", candleWidth - (lineWidth * 2))\n            .attr(\"width\", q2x - (q1x + (lineWidth * 2)))\n            .attr(\"x\", q1x + lineWidth)\n            .attr(\"y\", lineWidth - (candleWidth / 2))\n            .attr(\"rx\", roundedCorners * 0.618)\n            .attr(\"ry\", roundedCorners * 0.618)\n            ;\n        this._midInnerRect2\n            .attr(\"fill\", this.innerRectColor())\n            .attr(\"height\", candleWidth - (lineWidth * 2))\n            .attr(\"width\", q3x - q2x - lineWidth)\n            .attr(\"x\", q2x)\n            .attr(\"y\", lineWidth - (candleWidth / 2))\n            .attr(\"rx\", roundedCorners * 0.618)\n            .attr(\"ry\", roundedCorners * 0.618)\n            ;\n        this._q0text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q0x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"hanging\")\n            .text(this.columns()[0])\n            ;\n        this._q1text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q1x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.columns()[1])\n            ;\n        this._q2text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q2x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.columns()[2])\n            ;\n        this._q3text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q3x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.columns()[3])\n            ;\n        this._q4text\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showLabels() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q4x + lineWidth}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", labelFontSize)\n            .attr(\"text-anchor\", labelAnchor)\n            .attr(\"alignment-baseline\", \"baseline\")\n            .text(this.columns()[4])\n            ;\n        this._q0val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q0x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"hanging\")\n            .text(this.data()[0])\n            ;\n        this._q1val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q1x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.data()[1])\n            ;\n        this._q2val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q2x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.data()[2])\n            ;\n        this._q3val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q3x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"middle\")\n            .text(this.data()[3])\n            ;\n        this._q4val\n            .attr(\"height\", candleWidth)\n            .attr(\"width\", q3x - q1x)\n            .attr(\"display\", this.showValues() ? null : \"none\")\n            .attr(\"fill\", this.textColor())\n            .attr(\"x\", 0)\n            .attr(\"y\", 0)\n            .attr(\"transform\", `translate(${q4x + lineWidth}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\n            .attr(\"font-size\", valueFontSize)\n            .attr(\"text-anchor\", valueAnchor)\n            .attr(\"alignment-baseline\", \"baseline\")\n            .text(this.data()[4])\n            ;\n    }\n}\nQuartileCandlestick.prototype._class += \" chart_QuartileCandlestick\";\n\nexport interface QuartileCandlestick {\n    orientation(): \"horizontal\" | \"vertical\";\n    orientation(_: \"horizontal\" | \"vertical\"): this;\n    textPadding(): number;\n    textPadding(_: number): this;\n    edgePadding(): number;\n    edgePadding(_: number): this;\n    candleWidth(): number;\n    candleWidth(_: number): this;\n    candleWidth_exists(): boolean;\n    lineWidth(): number;\n    lineWidth(_: number): this;\n    lineColor(): string;\n    lineColor(_: string): this;\n    innerRectColor(): string;\n    innerRectColor(_: string): this;\n    lowerTextRotation(): number;\n    lowerTextRotation(_: number): this;\n    upperTextRotation(): number;\n    upperTextRotation(_: number): this;\n    roundedCorners(): number;\n    roundedCorners(_: number): this;\n    labelFontSize(): number;\n    labelFontSize(_: number): this;\n    valueFontSize(): number;\n    valueFontSize(_: number): this;\n    textColor(): string;\n    textColor(_: string): this;\n    showLabels(): boolean;\n    showLabels(_: boolean): this;\n    showValues(): boolean;\n    showValues(_: boolean): this;\n}\nQuartileCandlestick.prototype.publish(\"textColor\", \"black\", \"html-color\", \"Color of label and value text\");\nQuartileCandlestick.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, labels will be shown\");\nQuartileCandlestick.prototype.publish(\"showValues\", true, \"boolean\", \"If true, values will be shown\");\nQuartileCandlestick.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Determines layout\", [\"horizontal\", \"vertical\"]);\nQuartileCandlestick.prototype.publish(\"valueFontSize\", 12, \"number\", \"Font size of value text (pixels)\");\nQuartileCandlestick.prototype.publish(\"labelFontSize\", 12, \"number\", \"Font size of label text (pixels)\");\nQuartileCandlestick.prototype.publish(\"roundedCorners\", 8, \"number\", \"Radius of rounded rect corners (pixels)\");\nQuartileCandlestick.prototype.publish(\"lineWidth\", 4, \"number\", \"Width of lines (pixels)\");\nQuartileCandlestick.prototype.publish(\"candleWidth\", null, \"number\", \"Height of outer rect (pixels)\", null, {optional: true});\nQuartileCandlestick.prototype.publish(\"textPadding\", 8, \"number\", \"Padding between outer rect and text (pixels)\");\nQuartileCandlestick.prototype.publish(\"edgePadding\", 30, \"number\", \"Padding between outer rect and left/right sides (pixels)\");\nQuartileCandlestick.prototype.publish(\"lineColor\", \"#333\", \"html-color\", \"Color of outer rect and lines\");\nQuartileCandlestick.prototype.publish(\"innerRectColor\", \"white\", \"html-color\", \"Color of the inner rects\");\nQuartileCandlestick.prototype.publish(\"upperTextRotation\", -60, \"number\", \"Rotation of label text (degrees)\");\nQuartileCandlestick.prototype.publish(\"lowerTextRotation\", -60, \"number\", \"Rotation of value text (degrees)\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Radar.css\";\nexport class Radar extends SVGWidget {\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n    }\n\n    mapShape(shape) {\n        switch (shape) {\n            case \"rectangle\":\n                return \"rect\";\n            case \"circle\":\n                return \"circle\";\n            case \"cross\":\n                return \"path\";\n            default:\n        }\n    }\n    setPointAttributes(element, x, y) {\n        const shape = this.mapShape(this.pointShape());\n        const context = this;\n        switch (shape) {\n            case \"rect\":\n                element\n                    .attr(\"width\", context.pointSize())\n                    .attr(\"height\", context.pointSize())\n                    .style(\"fill\", d => this.strokeColor(d.data, d.column, d.value))\n                    ;\n                break;\n            case \"circle\":\n                element\n                    .attr(\"r\", context.pointSize() / 2)\n                    .attr(\"cx\", x)\n                    .attr(\"cy\", y)\n                    .style(\"fill\", d => this.strokeColor(d.data, d.column, d.value))\n                    ;\n                break;\n            case \"path\":\n                const half_size = context.pointSize() / 2;\n                element\n                    .attr(\"d\", function (d: any) {\n                        return \"M\" + (x - half_size) + \" \" + (y - half_size) + \" \" +\n                            \"L\" + (x + half_size) + \" \" + (y + half_size) + \" \" +\n                            \"M\" + (x - half_size) + \" \" + (y + half_size) + \" \" +\n                            \"L\" + (x + half_size) + \" \" + (y - half_size);\n                    })\n                    .style(\"stroke\", d => this.strokeColor(d.data, d.column, d.value))\n                    ;\n                break;\n            default:\n        }\n    }\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection.widgetElement(element);\n\n        this\n            .tooltipHTML(d => {\n                return this.tooltipFormat({ label: d.label, series: d.column, value: d.value });\n            })\n            ;\n    }\n    update(domNode, element) {\n        super.update(domNode, element);\n        this._palette = this._palette.switch(this.paletteID());\n        const context = this;\n        const h = this.height();\n        const w = this.width();\n        const half_h = (h / 2);\n        const half_w = (w / 2);\n\n        const columns = this.columns();\n        const data = this.data();\n        const flatData = this.flattenData(columns, data).map((d: any, idx: number) => {\n            d.shape = this.mapShape(this.pointShape());\n            d.column = columns[d.colIdx];\n            d.row = data[idx];\n            return d;\n        });\n        const domain_points = [];\n        const arc = this.degrees2radians(360 / this.data().length);\n        const max_label_h = this.fontSize();\n        let max_label_w = 0;\n        flatData.filter(n => n.colIdx === 1).forEach(n => {\n            const isize = super.textSize(n.label, `${this.fontFamily()}`, this.fontSize());\n            if (max_label_w < isize.width) max_label_w = isize.width;\n        });\n        const radius = Math.min(half_h - max_label_h, half_w - max_label_w);\n        const labels = element\n            .selectAll(\".label\")\n            .data(flatData.filter(n => n.colIdx === 1))\n            ;\n        const max_val = Math.max.apply(context, flatData.map(n => n.value));\n        labels.enter()\n            .append(\"text\")\n            .attr(\"class\", \"label\")\n            .attr(\"text-anchor\", \"middle\")\n            .merge(labels)\n            .attr(\"font-size\", this.fontSize())\n            .attr(\"font-family\", this.fontFamily())\n            .each(function (this: SVGElement, n, i) {\n                const xy = context.polar2cartesian(radius, (i * arc) - (Math.PI / 2));\n                domain_points.push(xy.map(n => n * context.labelPaddingRatio()));\n                let text_anchor = \"middle\";\n                const _x = Math.round(xy[0]);\n                text_anchor = _x > 0 ? \"start\" : text_anchor;\n                text_anchor = _x < 0 ? \"end\" : text_anchor;\n                d3Select(this)\n                    .attr(\"text-anchor\", text_anchor)\n                    .attr(\"x\", xy[0])\n                    .attr(\"y\", xy[1])\n                    ;\n            })\n            .text(n => n.label)\n            ;\n        labels.exit().remove();\n        const domains = element\n            .selectAll(\".domain\")\n            .data(flatData.filter(n => n.colIdx === 1));\n        domains.enter()\n            .append(\"line\")\n            .classed(\"domain\", true)\n            .style(\"stroke\", \"#000\")\n            .style(\"stroke-opacity\", \"0.75\")\n            .style(\"stroke-width\", \"1px\")\n            .merge(domains)\n            .attr(\"x1\", 0)\n            .attr(\"y1\", 0)\n            .attr(\"x2\", (n, i) => domain_points[i][0])\n            .attr(\"y2\", (n, i) => domain_points[i][1]);\n        domains.exit().remove();\n        const value_guides = element\n            .selectAll(\".value_guide\")\n            .data(this.valueGuideRatios())\n            ;\n        value_guides.enter()\n            .append(\"polygon\")\n            .classed(\"value_guide\", true)\n            .style(\"stroke\", \"grey\")\n            .style(\"stroke-opacity\", \"0.75\")\n            .style(\"stroke-width\", \"0.3px\")\n            .merge(value_guides)\n            .each(function (mult, i) {\n                const poly_points = [];\n                domain_points.forEach((domain_point, row_idx) => {\n                    poly_points.push([\n                        domain_point[0] * mult,\n                        domain_point[1] * mult\n                    ]);\n                });\n                d3Select(this)\n                    .attr(\"points\", poly_points.join(\" \"))\n                    .attr(\"stroke\", \"rgb(0, 0, 0)\")\n                    .attr(\"stroke-opacity\", 0.75)\n                    .attr(\"stroke-width\", 0.3)\n                    .attr(\"fill-opacity\", 0)\n                    ;\n            })\n            ;\n        value_guides.exit().remove();\n\n        const value_guide_text = element\n            .selectAll(\".value_guide_text\")\n            .data(this.valueGuideRatios())\n            ;\n        value_guide_text.enter()\n            .append(\"text\")\n            .attr(\"class\", \"value_guide_text\")\n            .attr(\"text-anchor\", \"start\")\n            .attr(\"font-size\", this.fontSize())\n            .attr(\"font-family\", this.fontFamily())\n            .merge(value_guide_text)\n            .attr(\"x\", 2)\n            .attr(\"y\", mult => domain_points[0][1] * mult)\n            .text((mult, i) => Math.round(mult * max_val))\n            ;\n        value_guides.exit().remove();\n\n        //  Polygon shapes  ---\n        const series_polygons = element\n            .selectAll(\".area\")\n            .data(columns.filter((n, i) => i > 0));\n        series_polygons.enter()\n            .append(\"polygon\")\n            .attr(\"class\", \"area\")\n            .style(\"stroke-opacity\", \"0.75\")\n            .style(\"stroke-width\", \"0.3px\")\n            .merge(series_polygons)\n            .style(\"stroke\", d => this.strokeColor([], d, 0))\n            .style(\"fill\", d => this.fillColor([], d, 0))\n            .style(\"fill-opacity\", this.fillOpacity())\n            .attr(\"points\", (d, col_idx) => {\n                return domain_points.map((domain_point, row_idx) => {\n                    const val = data[row_idx][col_idx + 1];\n                    const val_mult = val === 0 ? 0 : val / max_val;\n                    return domain_point[0] * val_mult + \",\" + domain_point[1] * val_mult;\n                }).join(\" \");\n            });\n        series_polygons.exit().remove();\n\n        //  Points  ---\n        const point_elm = element\n            .selectAll(\".point\")\n            .data(flatData);\n        point_elm.enter()\n            .append(\"g\")\n            .attr(\"class\", \"point\")\n            .on(\"mouseout.tooltip\", context.tooltip.hide)\n            .on(\"mousemove.tooltip\", context.tooltip.show)\n            .on(\"click\", function (d: any, _idx) {\n                const data_row = context.data()[d.rowIdx];\n                const row_obj = context.rowToObj(data_row);\n                const selected = context._selection.selected(this);\n                context.click(row_obj, context.columns()[d.colIdx], selected);\n            })\n            .on(\"dblclick\", function (d: any, _idx) {\n                context.dblclick(context.rowToObj(context.data()[d.rowIdx]), d.column, context._selection.selected(this));\n            })\n            .each(function (d) {\n                const element = d3Select(this);\n                element.append(\"circle\")\n                    .attr(\"class\", \"pointSelection\")\n                    .attr(\"r\", context.pointSize())\n                    .call(context._selection.enter.bind(context._selection))\n                    ;\n                element.append(context.mapShape(context.pointShape()))\n                    .attr(\"class\", \"pointShape\")\n                    ;\n            })\n            .merge(point_elm)\n            .each(function (d) {\n                const element = d3Select(this);\n                const val_mult = d.value === 0 ? 0 : d.value / max_val;\n                const x = domain_points[d.rowIdx][0] * val_mult;\n                const y = domain_points[d.rowIdx][1] * val_mult;\n                element.select(\".pointSelection\")\n                    .attr(\"cx\", x)\n                    .attr(\"cy\", y)\n                    ;\n\n                const pointElement = element.select(\".pointShape\")\n                    .style(\"stroke\", context.strokeColor(d.row, d.column, d.value))\n                    .style(\"fill\", context.fillColor(d.row, d.column, d.value))\n                    ;\n                context.setPointAttributes(pointElement, x, y);\n            })\n            ;\n        point_elm.exit().remove();\n    }\n\n    polar2cartesian(r, theta) {\n        return [r * Math.cos(theta), r * Math.sin(theta)];\n    }\n    cartesian2polar(x, y) {\n        return [Math.atan2(y, x), Math.sqrt(x * x + y * y)];\n    }\n    degrees2radians(d) {\n        return d / 57.295779513;\n    }\n    radians2degrees(r) {\n        return r * 57.295779513;\n    }\n    point_in_polygon(point, vs) {\n        const x = point[0];\n        const y = point[1];\n        let inside = false;\n        for (let i = 0, j = vs.length - 1; i < vs.length; j = i++) {\n            const xi = vs[i][0];\n            const yi = vs[i][1];\n            const xj = vs[j][0];\n            const yj = vs[j][1];\n            const intersect = ((yi > y) !== (yj > y))\n                && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\n            if (intersect) inside = !inside;\n        }\n        return inside;\n    }\n}\nRadar.prototype._class += \" chart_Radar\";\nRadar.prototype.implements(INDChart.prototype);\nRadar.prototype.implements(ITooltip.prototype);\nRadar.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface Radar {\n    labelPaddingRatio(): number;\n    labelPaddingRatio(_: number): this;\n    fillOpacity(): number;\n    fillOpacity(_: number): this;\n    fontFamily(): string;\n    fontFamily(_: string): this;\n    fontSize(): number;\n    fontSize(_: number): this;\n    valueGuideRatios(): any;\n    valueGuideRatios(_: any): this;\n    valueGuideFontSize(): number;\n    valueGuideFontSize(_: number): this;\n    valueGuideFontFamily(): string;\n    valueGuideFontFamily(_: string): this;\n    paletteID(): string;\n    paletteID(_: string): this;\n    pointShape(): string;\n    pointShape(_: string): this;\n    pointSize(): number;\n    pointSize(_: number): this;\n\n    //  INDChart\n    _palette;\n    fillColor(row, column, value): string;\n    strokeColor(row, column, value): string;\n    textColor(row, column, value): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n\n    _selection;\n}\n\nRadar.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Radar.prototype._palette.switch());\nRadar.prototype.publish(\"pointShape\", \"cross\", \"set\", \"pointShape\", [\"circle\", \"rectangle\", \"cross\"]);\nRadar.prototype.publish(\"pointSize\", 6, \"number\", \"Point Size\", null, { range: { min: 1, step: 1, max: 200 } });\nRadar.prototype.publish(\"valueGuideRatios\", [0.2, 0.4, 0.6, 0.8, 1], \"array\", \"Array of values between 0 and 1 that are multiplied by the widget radius to produce guide lines\");\nRadar.prototype.publish(\"fillOpacity\", 0.66, \"number\", \"Opacity of the data polygon(s)\");\nRadar.prototype.publish(\"fontFamily\", \"\", \"string\", \"fontFamily\");\nRadar.prototype.publish(\"fontSize\", 16, \"number\", \"fontSize\");\nRadar.prototype.publish(\"labelPaddingRatio\", 0.9, \"number\", \"labelPaddingRatio\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { interpolate as d3Interpolate } from \"d3-interpolate\";\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear } from \"d3-scale\";\nimport { arc as d3Arc } from \"d3-shape\";\n\nimport \"../src/RadialBar.css\";\n\nexport class RadialBar extends SVGWidget {\n    static __inputs: InputField[] = [{\n        id: \"label\",\n        type: \"any\"\n    }, {\n        id: \"values\",\n        type: \"number\"\n    }];\n\n    private _domainScale = d3ScaleBand();\n    private _valueScale = d3ScaleLinear();\n    private _d3Arc = d3Arc<[string, number]>()\n        .startAngle(0)\n        .endAngle((d) => this._valueScale(d[1]))\n        ;\n\n    protected _arcs;\n    protected _axialAxis;\n    protected _radialAxis;\n\n    constructor() {\n        super();\n        INDChart.call(this);\n        ITooltip.call(this);\n        Utility.SimpleSelectionMixin.call(this);\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._selection.widgetElement(element);\n        this.tooltipHTML(d => {\n            return this.tooltipFormat({ label: d[0], value: d[1] });\n        });\n\n        this._radialAxis = element.append(\"g\")\n            .attr(\"class\", \"r axis\")\n            ;\n        this._axialAxis = element.append(\"g\")\n            .attr(\"class\", \"a axis\")\n            ;\n        this._arcs = element.append(\"g\")\n            .attr(\"class\", \"data\")\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        const context = this;\n        const maxValue = Math.max(this.valueDomainHigh_exists() ? this.valueDomainHigh() : 0, ...this.data().map(d => d[1]));\n\n        this._valueScale\n            .domain([0, maxValue])\n            .range([0, this.radians(this.valueMaxAngle())])\n            ;\n\n        const ticks = this._valueScale.ticks(this.tickCount());\n\n        const maxTextWidth = this.textSize(ticks.map(d => \"\" + d), \"Verdana\", 12).width;\n        const chartRadius = (Math.min(this.width() - (10 + maxTextWidth) * 2, this.height() - (10 + 12) * 2) / 2);\n\n        //  Domain Axis (x-axis)  ---\n        const domainData = this.data().map(d => d[0]);\n\n        this._domainScale\n            .domain(domainData)\n            .range([0, chartRadius])\n            .padding(this.domainPadding())\n            ;\n        const domainPadding = this._domainScale.step() * this._domainScale.padding();\n\n        const domainCircles = this._radialAxis.selectAll(\"circle\").data(domainData);\n        domainCircles.enter().append(\"circle\")\n            .attr(\"fill\", \"transparent\")\n            .merge(domainCircles)\n            .attr(\"r\", d => this._domainScale(d) + this._domainScale.step() - domainPadding / 2)\n            ;\n        domainCircles.exit().remove();\n\n        const domainText = this._radialAxis.selectAll(\".arc-text\").data(domainData);\n        domainText.enter().append(\"text\")\n            .attr(\"class\", \"arc-text\")\n            .attr(\"x\", -4)\n            .attr(\"alignment-baseline\", \"middle\")\n            .attr(\"text-anchor\", \"end\")\n            .merge(domainText)\n            .attr(\"y\", d => -this._domainScale(d) - this._domainScale.bandwidth() / 2)\n            .text(d => d);\n        domainText.exit().remove();\n\n        //  Value Axis (y-axis)  ---\n        const valueLines = this._axialAxis.selectAll(\"line\").data(ticks);\n        valueLines.enter().append(\"line\")\n            .merge(valueLines)\n            .attr(\"x2\", d => chartRadius * Math.cos(this._valueScale(d) - this.radians(90)))\n            .attr(\"y2\", d => chartRadius * Math.sin(this._valueScale(d) - this.radians(90)))\n            ;\n        valueLines.exit().remove();\n\n        const valueText = this._axialAxis.selectAll(\"text\").data(ticks);\n        valueText.enter().append(\"text\")\n            .style(\"dominant-baseline\", \"central\")\n            .merge(valueText)\n            .attr(\"x\", d => (chartRadius + 10) * Math.cos(this._valueScale(d) - this.radians(90)))\n            .attr(\"y\", d => (chartRadius + 10) * Math.sin(this._valueScale(d) - this.radians(90)))\n            .style(\"text-anchor\", d => {\n                const middleZone = 20;\n                const angle = this.degrees(this._valueScale(d));\n                if (angle >= 0 && angle <= middleZone ||\n                    angle >= 180 - middleZone && angle <= 180 + middleZone ||\n                    angle >= 360 - middleZone && angle <= 360\n                ) {\n                    return \"middle\";\n                } else if (angle >= 180 && angle <= 360) {\n                    return \"end\";\n                } else {\n                    return null;\n                }\n            })\n            .text(d => d)\n            ;\n        valueText.exit().remove();\n\n        const valueColumn = this.columns().length > 1 ? this.columns()[1] : \"\";\n        //  Data (arcs) ---\n        this._d3Arc\n            .innerRadius(d => this._domainScale(d[0]))\n            .outerRadius(d => this._domainScale(d[0]) + this._domainScale.bandwidth())\n            ;\n        const arcs = this._arcs.selectAll(\"path\").data(this.data(), d => d[0]);\n        arcs.enter().append(\"path\")\n            .attr(\"class\", \"arc\")\n            .call(this._selection.enter.bind(this._selection))\n            .on(\"mouseout.tooltip\", this.tooltip.hide)\n            .on(\"mousemove.tooltip\", this.tooltip.show)\n            .on(\"click\", function (d: any, _idx) {\n                context.click(context.rowToObj(d), valueColumn, context._selection.selected(this));\n            })\n            .on(\"dblclick\", function (d: any, _idx) {\n                context.dblclick(context.rowToObj(d), valueColumn, context._selection.selected(this));\n            })\n            .merge(arcs)\n            .style(\"fill\", (d, i) => this.fillColor(d, d[0], d[1]))\n            .transition()\n            .delay((d, i) => i * this.transitionDelay())\n            .duration(this.transitionDuration())\n            .attrTween(\"d\", (d, indx) => {\n                const interpolate = d3Interpolate(d._current || 0, d[1]);\n                d._current = d[1];\n                return t => this._d3Arc([d[0], interpolate(t)], indx);\n            })\n            ;\n        arcs.exit().remove();\n    }\n\n    degrees(radians) {\n        return radians * 180 / Math.PI;\n    }\n\n    radians(degrees) {\n        return degrees * Math.PI / 180;\n    }\n\n}\nRadialBar.prototype._class += \" chart_RadialBar\";\nRadialBar.prototype.implements(INDChart.prototype);\nRadialBar.prototype.implements(ITooltip.prototype);\nRadialBar.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface RadialBar {\n    paletteID(): string;\n    paletteID(_: string): this;\n    tickCount(): number;\n    tickCount(_: number): this;\n    domainPadding(): number;\n    domainPadding(_: number): this;\n    valueMaxAngle(): number;\n    valueMaxAngle(_: number): this;\n    valueDomainHigh(): number;\n    valueDomainHigh(_: number): this;\n    valueDomainHigh_exists(): boolean;\n    transitionDelay(): number;\n    transitionDelay(_: number): this;\n    transitionDuration(): number;\n    transitionDuration(_: number): this;\n\n    //  INDChart\n    _palette;\n    fillColor(row, column, value): string;\n    strokeColor(row, column, value): string;\n    textColor(row, column, value): string;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip\n    tooltip;\n    tooltipHTML(_): string;\n    tooltipFormat(_): string;\n\n    //  SimpleSelectionMixin\n    _selection;\n}\n\nRadialBar.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", RadialBar.prototype._palette.switch());\nRadialBar.prototype.publish(\"tickCount\", 10, \"number\", \"Number of ticks to display\");\nRadialBar.prototype.publish(\"domainPadding\", 0.25, \"number\", \"Padding between chart edge and container edge (0..1)\");\nRadialBar.prototype.publish(\"valueMaxAngle\", 270, \"number\", \"Maximum angular length of a bar (degrees)\");\nRadialBar.prototype.publish(\"valueDomainHigh\", null, \"number\", \"Value domain high\", undefined, { optional: true });\nRadialBar.prototype.publish(\"transitionDelay\", 100, \"number\", \"Delay between the start of each row animation (ms)\");\nRadialBar.prototype.publish(\"transitionDuration\", 750, \"number\", \"Duration of a row's animation (ms)\");\n","import { format as d3Format, HTMLWidget, Palette } from \"@hpcc-js/common\";\nimport { QuartileCandlestick } from \"./QuartileCandlestick.ts\";\nimport { Scatter } from \"./Scatter.ts\";\n\nconst rainbow = Palette.rainbow(\"Blues\");\nconst palette = Palette.ordinal(\"Quartile\", [rainbow(100, 0, 100), rainbow(50, 0, 100), rainbow(50, 0, 100), rainbow(75, 0, 100)]);\npalette(\"Std. Dev.\");\npalette(\"MinMax\");\npalette(\"25%\");\npalette(\"50%\");\n\ntype View = \"min_max\" | \"25_75\" | \"normal\";\ntype Tick = { label: string, value: number };\ntype Ticks = Tick[];\ntype AxisTick = { label: string, value: string };\ntype AxisTicks = AxisTick[];\n\nfunction myFormatter(format: string): (num: number) => string {\n    const formatter = d3Format(format);\n    return function (num: number) {\n        const strVal = (Math.round(num * 100) / 100).toString();\n        if (strVal.length <= 4) return strVal;\n        return formatter(num);\n    };\n}\n\nexport type StatChartView = \"min_max\" | \"25_75\" | \"normal\";\nexport type Quartiles = [number, number, number, number, number];\nexport type Data = [[number, number, number, number, number, number, number]];\n\nexport class StatChart extends HTMLWidget {\n\n    protected _selectElement: any;\n    protected _tickFormatter: (_: number) => string;\n\n    protected _bellCurve: Scatter = new Scatter()\n        .columns([\"\", \"Std. Dev.\"])\n        .paletteID(\"Quartile\")\n        .interpolate_default(\"basis\")\n        .pointSize(0)\n        .xAxisType(\"linear\")\n        .xAxisOverlapMode(\"none\")\n        .xAxisTickFormat(\",\")\n        .yAxisHidden(true)\n        .yAxisDomainLow(0)\n        .yAxisDomainHigh(110)\n        .yAxisGuideLines(false) as Scatter\n        ;\n\n    protected _candle = new QuartileCandlestick()\n        .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\"])\n        .edgePadding(0)\n        .roundedCorners(1)\n        .lineWidth(1)\n        .upperTextRotation(-90)\n        .lowerTextRotation(-90)\n        .labelFontSize(0)\n        .valueFontSize(0)\n        .lineColor(rainbow(90, 0, 100))\n        .innerRectColor(rainbow(10, 0, 100))\n        ;\n\n    constructor() {\n        super();\n        this\n            .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\", \"Mean\", \"Std. Dev.\"])\n            ;\n    }\n\n    protected stdDev(degrees: number): number {\n        return this.mean() + degrees * this.standardDeviation();\n    }\n\n    protected formatStdDev(degrees: number): string {\n        return this._tickFormatter(this.stdDev(degrees));\n    }\n\n    protected quartile(q: 0 | 1 | 2 | 3 | 4): number {\n        return this.quartiles()[q];\n    }\n\n    protected formatQ(q: 0 | 1 | 2 | 3 | 4): string {\n        return this._tickFormatter(this.quartile(q));\n    }\n\n    protected domain(mode: View): [number, number] {\n        switch (mode) {\n            case \"25_75\":\n                return [this.quartile(1), this.quartile(3)];\n            case \"normal\":\n                return [this.stdDev(-4), this.stdDev(4)];\n            case \"min_max\":\n            default:\n                return [this.quartile(0), this.quartile(4)];\n        }\n    }\n\n    protected min(): number {\n        return this.quartile(0);\n    }\n\n    protected max(): number {\n        return this.quartile(4);\n    }\n\n    data(): Data;\n    data(_: Data): this;\n    data(_?: Data): Data | this {\n        if (!arguments.length) return [[...this.quartiles(), this.mean(), this.standardDeviation()]];\n        const row = _[0];\n        this.quartiles([row[0], row[1], row[2], row[3], row[4]]);\n        this.mean(row[5]);\n        this.standardDeviation(row[6]);\n        return this;\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n\n        this._bellCurve.target(element.append(\"div\").node());\n\n        this._candle.target(element.append(\"div\").node());\n\n        this._selectElement = element.append(\"div\")\n            .style(\"position\", \"absolute\")\n            .style(\"top\", \"0px\")\n            .style(\"right\", \"0px\").append(\"select\")\n            .on(\"change\", () => {\n                this.view(this._selectElement.node().value);\n                this.lazyRender();\n            })\n            ;\n        this._selectElement.append(\"option\").attr(\"value\", \"min_max\").text(\"Min / Max\");\n        this._selectElement.append(\"option\").attr(\"value\", \"25_75\").text(\"25% / 75%\");\n        this._selectElement.append(\"option\").attr(\"value\", \"normal\").text(\"Normal\");\n    }\n\n    protected bellTicks(mode: View): AxisTicks {\n        let ticks: Ticks;\n        switch (mode) {\n            case \"25_75\":\n                ticks = [\n                    { label: this.formatQ(1), value: this.quartile(1) },\n                    { label: this.formatQ(2), value: this.quartile(2) },\n                    { label: this.formatQ(3), value: this.quartile(3) }\n                ];\n                break;\n            case \"normal\":\n                ticks = [\n                    { label: this.formatStdDev(-4), value: this.stdDev(-4) },\n                    { label: \"-3σ\", value: this.stdDev(-3) },\n                    { label: \"-2σ\", value: this.stdDev(-2) },\n                    { label: \"-1σ\", value: this.stdDev(-1) },\n                    { label: this.formatStdDev(0), value: this.stdDev(0) },\n                    { label: \"+1σ\", value: this.stdDev(1) },\n                    { label: \"+2σ\", value: this.stdDev(2) },\n                    { label: \"+3σ\", value: this.stdDev(3) },\n                    { label: this.formatStdDev(4), value: this.stdDev(4) }\n                ];\n                break;\n            case \"min_max\":\n            default:\n                ticks = [\n                    { label: this.formatQ(0), value: this.quartile(0) },\n                    { label: this.formatQ(1), value: this.quartile(1) },\n                    { label: this.formatQ(2), value: this.quartile(2) },\n                    { label: this.formatQ(3), value: this.quartile(3) },\n                    { label: this.formatQ(4), value: this.quartile(4) }\n                ];\n        }\n\n        const [domainLow, domainHigh] = this.domain(this._selectElement.node().value);\n        return ticks\n            .filter(sd => sd.value >= domainLow && sd.value <= domainHigh)\n            .map(sd => ({ label: sd.label, value: sd.value.toString() }))\n            ;\n    }\n\n    updateScatter() {\n        const mode = this._selectElement.node().value;\n        const [domainLow, domainHigh] = this.domain(mode);\n        const padding = (domainHigh - domainLow) * (this.domainPadding() / 100);\n\n        this._bellCurve\n            .xAxisDomainLow(domainLow - padding)\n            .xAxisDomainHigh(domainHigh + padding)\n            .xAxisTicks(this.bellTicks(mode))\n            .data([\n                [this.stdDev(-4), 0],\n                [this.stdDev(-3), 0.3],\n                [this.stdDev(-2), 5],\n                [this.stdDev(-1), 68],\n                [this.stdDev(0), 100],\n                [this.stdDev(1), 68],\n                [this.stdDev(2), 5],\n                [this.stdDev(3), 0.3],\n                [this.stdDev(4), 0]\n            ])\n            .resize({ width: this.width(), height: this.height() - this.candleHeight() })\n            .render()\n            ;\n    }\n\n    updateCandle() {\n        const candleX = this._bellCurve.dataPos(this.quartile(0));\n        const candleW = this._bellCurve.dataPos(this.quartile(4)) - candleX;\n        this._candle\n            .resize({ width: this.width(), height: this.candleHeight() })\n            .pos({ x: (candleX + candleW / 2) + 2, y: this.candleHeight() / 2 })\n            .width(candleW)\n            .candleWidth(this.candleHeight())\n            .data(this.quartiles())\n            .render()\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        this._tickFormatter = myFormatter(this.tickFormat());\n        this._selectElement.node().value = this.view();\n        this.updateScatter();\n        this.updateCandle();\n    }\n\n    exit(domNode, element) {\n        this._bellCurve.target(null);\n        this._candle.target(null);\n        this._selectElement.remove();\n\n        super.exit(domNode, element);\n    }\n}\nStatChart.prototype._class += \" chart_StatChart\";\n\nexport interface StatChart {\n    view(): StatChartView;\n    view(_: StatChartView): this;\n\n    tickFormat(): string;\n    tickFormat(_: string): this;\n    candleHeight(): number;\n    candleHeight(_: number): this;\n    domainPadding(): number;\n    domainPadding(_: number): this;\n\n    mean(): number;\n    mean(_: number): this;\n    standardDeviation(): number;\n    standardDeviation(_: number): this;\n    quartiles(): Quartiles;\n    quartiles(_: Quartiles): this;\n}\nStatChart.prototype.publish(\"view\", \"min_max\", \"set\", \"View\", [\"min_max\", \"25_75\", \"normal\"]);\n\nStatChart.prototype.publish(\"tickFormat\", \".2e\", \"string\", \"X-Axis Tick Format\");\nStatChart.prototype.publish(\"candleHeight\", 20, \"number\", \"Height of candle widget (pixels)\");\nStatChart.prototype.publish(\"domainPadding\", 10, \"number\", \"Domain value padding\");\n\nStatChart.prototype.publish(\"mean\", .5, \"number\", \"Mean\");\nStatChart.prototype.publish(\"standardDeviation\", .125, \"number\", \"Standard Deviation (σ)\");\nStatChart.prototype.publish(\"quartiles\", [0, .25, .5, .75, 1], \"object\", \"Quartiles (Min, 25%, 50%, 75%, Max)\");\n","import { Scatter } from \"./Scatter.ts\";\n\nexport class Step extends Scatter {\n    constructor() {\n        super();\n\n        this\n            .interpolate_default(\"step\")\n            ;\n    }\n}\nStep.prototype._class += \" chart_Step\";\n","import { I2DChart } from \"@hpcc-js/api\";\nimport { HTMLWidget } from \"@hpcc-js/common\";\nimport { rgb as d3Rgb } from \"d3-color\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Summary.css\";\n\nconst TEXT = \"text\";\nconst HTML = \"html\";\n\nexport class Summary extends HTMLWidget {\n    protected _playIntervalIdx = 0;\n    protected _mainDiv;\n    protected _headerDiv;\n    protected _textDiv;\n\n    constructor() {\n        super();\n        this._tag = \"div\";\n\n        this._drawStartPos = \"center\";\n        this.playInterval(this.playInterval());\n    }\n\n    lookupFieldIdx(propID, defaultIdx?: number) {\n        let retVal = defaultIdx;\n        if (this[propID + \"_exists\"]()) {\n            retVal = this.columns().indexOf(this[propID]());\n            if (retVal < 0) {\n                return undefined;\n            }\n        }\n        return retVal;\n    }\n\n    lookupFieldText(propID, defaultIdx?: number) {\n        if (this[propID + \"_exists\"]()) {\n            return this[propID]();\n        }\n        if (defaultIdx !== undefined) {\n            return this.columns()[defaultIdx] || \"\";\n        }\n        return \"\";\n    }\n\n    currentRow() {\n        return this.data()[this._playIntervalIdx];\n    }\n\n    summaryData() {\n        let labelFieldIdx;  //  undefined\n        if (!this.hideLabel()) {\n            labelFieldIdx = this.lookupFieldIdx(\"labelColumn\", 0);\n        }\n        const iconFieldIdx = this.lookupFieldIdx(\"iconColumn\");\n        const valueFieldIdx = this.lookupFieldIdx(\"valueColumn\", 1);\n        let moreIconIdx;  //  undefined\n        let moreTextIdx;  //  undefined\n        if (!this.hideMore()) {\n            moreIconIdx = this.lookupFieldIdx(\"moreIconColumn\");\n            moreTextIdx = this.lookupFieldIdx(\"moreTextColumn\");\n        }\n        const colorFillIdx = this.lookupFieldIdx(\"colorFillColumn\");\n        const colorStrokeIdx = this.lookupFieldIdx(\"colorStrokeColumn\");\n        return this.formattedData().map(function (row) {\n            return {\n                icon: iconFieldIdx === undefined ? this.icon() : row[iconFieldIdx],\n                label: labelFieldIdx === undefined ? \"\" : row[labelFieldIdx],\n                value: row[valueFieldIdx],\n                moreIcon: moreIconIdx === undefined ? (this.hideMore() ? \"\" : this.moreIcon()) : row[moreIconIdx],\n                moreText: moreTextIdx === undefined ? (this.hideMore() ? \"\" : this.moreText()) : row[moreTextIdx],\n                fill: colorFillIdx === undefined ? this.colorFill() : row[colorFillIdx],\n                stroke: colorStrokeIdx === undefined ? this.colorStroke() : row[colorStrokeIdx]\n            };\n        }, this);\n    }\n\n    enter(domNode, element) {\n        super.enter(domNode, element);\n        this._mainDiv = element.append(\"div\")\n            ;\n        const context = this;\n        this._headerDiv = this._mainDiv.append(\"h2\")\n            .on(\"click\", function () {\n                context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"valueColumn\", 1), true);\n            })\n            .on(\"dblclick\", function () {\n                context.dblclick(context.rowToObj(context.currentRow()), context.lookupFieldText(\"valueColumn\", 1), true);\n            })\n            ;\n        this._textDiv = this._mainDiv.append(\"div\")\n            .attr(\"class\", \"text\")\n            .on(\"click\", function () {\n                context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"labelColumn\", 0), true);\n            })\n            .on(\"dblclick\", function () {\n                context.dblclick(context.rowToObj(context.currentRow()), context.lookupFieldText(\"labelColumn\", 0), true);\n            })\n            ;\n    }\n\n    update(domNode, element) {\n        super.update(domNode, element);\n        if (this.data().length) {\n\n        }\n        const data = this.summaryData();\n        if (this._playIntervalIdx >= data.length) {\n            this._playIntervalIdx = 0;\n        }\n        const row: any = this._playIntervalIdx < data.length ? data[this._playIntervalIdx] : [\"\", \"\"];\n        element\n            .style(\"width\", this.fixedSize() ? this.minWidth_exists() ? this.minWidth() + \"px\" : null : \"100%\")\n            .style(\"height\", this.fixedSize() ? this.minHeight_exists() ? this.minHeight() + \"px\" : null : \"100%\")\n            ;\n        this._mainDiv\n            .attr(\"class\", \"content bgIcon \" + row.icon)\n            .transition()\n            .style(\"background-color\", row.fill)\n            .style(\"color\", row.stroke)\n            .style(\"min-width\", this.minWidth_exists() ? this.minWidth() + \"px\" : null)\n            .style(\"min-height\", this.minHeight_exists() ? this.minHeight() + \"px\" : null)\n            .style(\"font-size\", this.iconFontSize() + \"px\")\n            ;\n        this._headerDiv\n            .transition()\n            .style(\"color\", row.stroke)\n            .style(\"font-size\", this.headerFontSize() + \"px\")\n        [this.valueHTML() ? HTML : TEXT](row.value)\n            ;\n        this._textDiv\n            .style(\"font-size\", this.textFontSize() + \"px\")\n        [this.labelHTML() ? HTML : TEXT](row.label)\n            ;\n        const context = this;\n        const moreDivs = this._mainDiv.selectAll(\".more\").data([row]);\n        const moreDivsEnter = moreDivs.enter()\n            .append(\"div\")\n            .attr(\"class\", \"more\")\n            .on(\"click\", function (d) {\n                context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"moreTextColumn\") || \"more\", true);\n            })\n            .each(function () {\n                const element2 = d3Select(this);\n                element2.append(\"i\");\n                element2.append(\"span\");\n            })\n            ;\n        const moreDivsUpdate = moreDivsEnter\n            .merge(moreDivs)\n            .style(\"display\", this.hideMoreWrapper() ? \"none\" : null)\n            .style(\"font-size\", this.moreFontSize() + \"px\")\n            .style(\"height\", this.moreWrapperHeight_exists() ? this.moreWrapperHeight() + \"px\" : null)\n            .transition()\n            .style(\"background-color\", d3Rgb(row.fill).darker(0.75).toString())\n            ;\n        moreDivsUpdate\n            .select(\"i\")\n            .attr(\"class\", function (d) {\n                return \"fa \" + d.moreIcon;\n            })\n            ;\n        if (this.moreTextHTML()) {\n            moreDivsUpdate.select(\"span\")\n                .each(function (d) {\n                    this.innerHTML = d.moreText;\n                });\n        } else {\n            moreDivsUpdate.select(\"span\").text(d => d.moreText);\n        }\n        moreDivs.exit().remove();\n    }\n\n    exit(domNode, element) {\n        super.exit(domNode, element);\n    }\n}\nSummary.prototype._class += \" chart_Summary\";\nSummary.prototype.implements(I2DChart.prototype);\n\nexport interface Summary {\n    iconColumn(): string;\n    iconColumn(_: string): this;\n    iconColumn_exists(): boolean;\n    icon(): string;\n    icon(_: string): this;\n    icon_exists(): boolean;\n\n    headerFontSize(): number;\n    headerFontSize(_: number): this;\n    textFontSize(): number;\n    textFontSize(_: number): this;\n    moreFontSize(): number;\n    moreFontSize(_: number): this;\n    iconFontSize(): number;\n    iconFontSize(_: number): this;\n\n    hideLabel(): boolean;\n    hideLabel(_: boolean): this;\n    hideLabel_exists(): boolean;\n    labelColumn(): string;\n    labelColumn(_: string): this;\n    labelColumn_exists(): boolean;\n    labelHTML(): boolean;\n    labelHTML(_: boolean): this;\n    labelHTML_exists(): boolean;\n\n    valueColumn(): string;\n    valueColumn(_: string): this;\n    valueColumn_exists(): boolean;\n    valueHTML(): boolean;\n    valueHTML(_: boolean): this;\n    valueHTML_exists(): boolean;\n\n    hideMore(): boolean;\n    hideMore(_: boolean): this;\n    hideMore_exists(): boolean;\n    hideMoreWrapper(): boolean;\n    hideMoreWrapper(_: boolean): this;\n    moreWrapperHeight(): number;\n    moreWrapperHeight(_: number): this;\n    moreWrapperHeight_exists(): boolean;\n    moreIconColumn(): string;\n    moreIconColumn(_: string): this;\n    moreIconColumn_exists(): boolean;\n    moreIcon(): string;\n    moreIcon(_: string): this;\n    moreIcon_exists(): boolean;\n    moreTextColumn(): string;\n    moreTextColumn(_: string): this;\n    moreTextColumn_exists(): boolean;\n    moreText(): string;\n    moreText(_: string): this;\n    moreText_exists(): boolean;\n    moreTextHTML(): boolean;\n    moreTextHTML(_: boolean): this;\n    moreTextHTML_exists(): boolean;\n\n    colorFillColumn(): string;\n    colorFillColumn(_: string): this;\n    colorFillColumn_exists(): boolean;\n    colorFill(): string;\n    colorFill(_: string): this;\n    colorFill_exists(): boolean;\n    colorStrokeColumn(): string;\n    colorStrokeColumn(_: string): this;\n    colorStrokeColumn_exists(): boolean;\n    colorStroke(): string;\n    colorStroke(_: string): this;\n    colorStroke_exists(): boolean;\n\n    fixedSize(): boolean;\n    fixedSize(_: boolean): this;\n    fixedSize_exists(): boolean;\n    minWidth(): number;\n    minWidth(_: number): this;\n    minWidth_exists(): boolean;\n    minHeight(): number;\n    minHeight(_: number): this;\n    minHeight_exists(): boolean;\n    playInterval(): number;\n    playInterval(_: number): this;\n    playInterval_exists(): boolean;\n\n    //  I2DChart  ---\n    click(row, column, selected);\n    dblclick(row, column, selected);\n}\n\nSummary.prototype.publish(\"iconColumn\", null, \"set\", \"Select Icon Column\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"icon\", \"fa-briefcase\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.iconColumn() });\n\nSummary.prototype.publish(\"headerFontSize\", null, \"number\", \"headerFontSize\");\nSummary.prototype.publish(\"textFontSize\", null, \"number\", \"textFontSize\");\nSummary.prototype.publish(\"moreFontSize\", null, \"number\", \"moreFontSize\");\nSummary.prototype.publish(\"iconFontSize\", null, \"number\", \"iconFontSize\");\n\nSummary.prototype.publish(\"hideLabel\", false, \"boolean\", \"Hide label column\");\nSummary.prototype.publish(\"labelColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideLabel() });\nSummary.prototype.publish(\"labelHTML\", false, \"boolean\", \"Allow HTML\", null, { disable: (w) => w.hideLabel() });\n\nSummary.prototype.publish(\"valueColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"valueHTML\", false, \"boolean\", \"Allow HTML\");\n\nSummary.prototype.publish(\"hideMore\", false, \"boolean\", \"Hide More Information\");\nSummary.prototype.publish(\"hideMoreWrapper\", false, \"boolean\", \"Hide More Information Wrapper\");\nSummary.prototype.publish(\"moreWrapperHeight\", null, \"number\", \"Height of the 'more' text wrapper (pixels)\");\nSummary.prototype.publish(\"moreIconColumn\", null, \"set\", \"Select More Icon Column\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideMore() });\nSummary.prototype.publish(\"moreIcon\", \"fa-info-circle\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.hideMore() || w.moreIconColumn() });\nSummary.prototype.publish(\"moreTextColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideMore() });\nSummary.prototype.publish(\"moreText\", \"More Info\", \"string\", \"More text\", null, { disable: (w) => w.hideMore() || w.moreTextColumn() });\nSummary.prototype.publish(\"moreTextHTML\", false, \"boolean\", \"Allow HTML\", null, { disable: (w) => w.hideMore() });\n\nSummary.prototype.publish(\"colorFillColumn\", null, \"set\", \"Column for color\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"colorFill\", \"#3498db\", \"html-color\", \"Fill Color\", null, { disable: (w) => w.colorFillColumn() });\nSummary.prototype.publish(\"colorStrokeColumn\", null, \"set\", \"Column for color\", function () { return this.columns(); }, { optional: true });\nSummary.prototype.publish(\"colorStroke\", \"#ffffff\", \"html-color\", \"Fill Color\", null, { disable: (w) => w.colorStrokeColumn() });\n\nSummary.prototype.publish(\"fixedSize\", true, \"boolean\", \"Fix Size to Min Width/Height\");\nSummary.prototype.publish(\"minWidth\", 225, \"number\", \"Minimum Width\");\nSummary.prototype.publish(\"minHeight\", 150, \"number\", \"Minimum Height\");\nSummary.prototype.publish(\"playInterval\", null, \"number\", \"Play Interval\", null, { optional: true });\n\nconst playInterval = Summary.prototype.playInterval;\nSummary.prototype.playInterval = function (_?: number): number | any {\n    const retVal = playInterval.apply(this, arguments);\n    if (arguments.length) {\n        if (this._playIntervalHandle) {\n            clearInterval(this._playIntervalHandle);\n        }\n        const context = this;\n        if (_) {\n            this._playIntervalHandle = setInterval(function () {\n                context._playIntervalIdx++;\n                if (context._renderCount && context.data().length) {\n                    context.render();\n                }\n            }, _);\n        }\n    }\n    return retVal;\n};\n","import { I2DChart } from \"@hpcc-js/api\";\nimport { CanvasWidget, Utility } from \"@hpcc-js/common\";\n\nexport class SummaryC extends CanvasWidget {\n    protected _playIntervalIdx = 0;\n\n    constructor() {\n        super();\n        I2DChart.call(this);\n        this.playInterval(this.playInterval());\n    }\n\n    currentRow() {\n        return this.data()[this._playIntervalIdx];\n    }\n\n    enter(domNode, element) {\n        super.enter.apply(this, arguments);\n        const { width, height } = this.size();\n        domNode.height = height;\n        domNode.width = width;\n    }\n\n    update(domNode, element) {\n        super.update.apply(this, arguments);\n        const context = this;\n        if (this._playIntervalIdx >= this.data().length) {\n            this._playIntervalIdx = 0;\n        }\n        const size = this.size();\n        const minDimension = Math.min(size.width, size.height);\n        const sizeRatio = this.fontSizeRatio();\n        const labelIdx = this.columns().indexOf(this.labelColumn());\n        const valueIdx = this.columns().indexOf(this.valueColumn());\n        const bgColorIdx = this.columns().indexOf(this.colorFillColumn());\n        const fontColorIdx = this.columns().indexOf(this.colorStrokeColumn());\n        const iconIdx = this.columns().indexOf(this.iconColumn());\n        const icon = iconIdx !== -1 ? this.currentRow()[iconIdx] : this.icon();\n        const label = labelIdx !== -1 ? this.currentRow()[labelIdx] : \"\";\n        const value = valueIdx !== -1 ? this.currentRow()[valueIdx] : \"\";\n        const bgColor = bgColorIdx !== -1 ? this.currentRow()[bgColorIdx] : this.colorFill();\n        const fontColor = fontColorIdx !== -1 ? this.currentRow()[fontColorIdx] : this.colorStroke();\n\n        let mainFontSize = size.height * (sizeRatio - this.paddingSizeRatio());\n        const subFontSize = size.height * (1 - sizeRatio - this.paddingSizeRatio());\n        const iconSize = size.height * (this.iconSizeRatio() - this.paddingSizeRatio());\n        const p = minDimension * this.paddingSizeRatio();\n        const ctx = domNode.getContext(\"2d\");\n\n        ctx.clearRect(0, 0, size.width, size.height);\n\n        const fontFamily = context.fontFamily();\n\n        ctx.fillStyle = bgColor;\n        ctx.fillRect(0, 0, size.width, size.height);\n\n        ctx.globalAlpha = this.iconOpacity();\n        drawIcon(Utility.faChar(icon), iconSize, context.iconAnchor());\n\n        ctx.globalAlpha = this.valueOpacity();\n        mainFontSize = drawText(value, p, mainFontSize, context.valueAnchor());\n\n        ctx.globalAlpha = this.labelOpacity();\n        drawText(label, mainFontSize + p, subFontSize, context.labelAnchor());\n\n        function drawText(text, y, fontSize, anchorMode) {\n            ctx.textBaseline = \"top\";\n            ctx.font = `${fontSize}px ${fontFamily}`;\n            ctx.fillStyle = fontColor;\n            let measurement = ctx.measureText(text);\n            if (measurement.width > (size.width - (p * 2))) {\n                const fontSizeMult = (size.width - (p * 2)) / measurement.width;\n                fontSize = fontSize * fontSizeMult;\n                ctx.font = `${fontSize}px ${fontFamily}`;\n                measurement = ctx.measureText(text);\n            }\n            const x = getTextOffsetX(measurement.width, anchorMode);\n            ctx.fillText(text, x, y);\n            return fontSize;\n        }\n\n        function drawIcon(text, fontSize, anchorMode) {\n            if (typeof text === \"undefined\") return;\n            ctx.textBaseline = context.iconBaseline();\n            ctx.font = `${fontSize}px FontAwesome`;\n            ctx.fillStyle = fontColor;\n            let measurement = ctx.measureText(text);\n            if (measurement.width > (size.width - (p * 2))) {\n                const fontSizeMult = (size.width - (p * 2)) / measurement.width;\n                ctx.font = `${fontSize * fontSizeMult}px FontAwesome`;\n                measurement = ctx.measureText(text);\n            }\n            const x = getTextOffsetX(measurement.width, anchorMode);\n            const y = getTextOffsetY(context.iconBaseline());\n            ctx.fillText(text, x, y);\n        }\n\n        function getTextOffsetX(width, anchorMode) {\n            switch (anchorMode) {\n                case \"start\":\n                    return p;\n                case \"middle\":\n                    return (size.width / 2) - (width / 2);\n                case \"end\":\n                    return size.width - width - p;\n            }\n        }\n        function getTextOffsetY(anchorMode) {\n            switch (anchorMode) {\n                case \"top\":\n                    return p;\n                case \"middle\":\n                    return size.height / 2;\n                case \"bottom\":\n                    return size.height - p;\n            }\n        }\n    }\n}\nSummaryC.prototype._class += \" chart_SummaryC\";\nSummaryC.prototype.implements(I2DChart.prototype);\n\nexport interface SummaryC {\n    iconColumn(): string;\n    iconColumn(_: string): this;\n    iconColumn_exists(): boolean;\n    icon(): string;\n    icon(_: string): this;\n    icon_exists(): boolean;\n    iconOpacity(): number;\n    iconOpacity(_: number): this;\n\n    fontFamily(): string;\n    fontFamily(_: string): this;\n\n    labelColumn(): string;\n    labelColumn(_: string): this;\n    labelColumn_exists(): boolean;\n    labelOpacity(): number;\n    labelOpacity(_: number): this;\n\n    valueColumn(): string;\n    valueColumn(_: string): this;\n    valueColumn_exists(): boolean;\n    valueOpacity(): number;\n    valueOpacity(_: number): this;\n\n    fontSizeRatio(): number;\n    fontSizeRatio(_: number): this;\n\n    colorFillColumn(): string;\n    colorFillColumn(_: string): this;\n    colorFillColumn_exists(): boolean;\n    colorFill(): string;\n    colorFill(_: string): this;\n    colorFill_exists(): boolean;\n    colorStrokeColumn(): string;\n    colorStrokeColumn(_: string): this;\n    colorStrokeColumn_exists(): boolean;\n    colorStroke(): string;\n    colorStroke(_: string): this;\n    colorStroke_exists(): boolean;\n\n    fixedSize(): boolean;\n    fixedSize(_: boolean): this;\n    fixedSize_exists(): boolean;\n    minWidth(): number;\n    minWidth(_: number): this;\n    minWidth_exists(): boolean;\n    minHeight(): number;\n    minHeight(_: number): this;\n    minHeight_exists(): boolean;\n    playInterval(): number;\n    playInterval(_: number): this;\n    playInterval_exists(): boolean;\n    paddingSizeRatio(): number;\n    paddingSizeRatio(_: number): this;\n    iconSizeRatio(): number;\n    iconSizeRatio(_: number): this;\n\n    iconAnchor(): \"start\" | \"middle\" | \"end\";\n    iconAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n    labelAnchor(): \"start\" | \"middle\" | \"end\";\n    labelAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n    valueAnchor(): \"start\" | \"middle\" | \"end\";\n    valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n\n    iconBaseline(): \"top\" | \"middle\" | \"bottom\";\n    iconBaseline(_: \"top\" | \"middle\" | \"bottom\"): this;\n}\n\nSummaryC.prototype.publish(\"iconBaseline\", \"bottom\", \"string\", \"Text baseline for the icon\", [\"top\", \"middle\", \"bottom\"]);\nSummaryC.prototype.publish(\"iconAnchor\", \"end\", \"set\", \"Anchors the icon either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\nSummaryC.prototype.publish(\"valueAnchor\", \"start\", \"set\", \"Anchors the value either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\nSummaryC.prototype.publish(\"labelAnchor\", \"start\", \"set\", \"Anchors the label either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\nSummaryC.prototype.publish(\"iconColumn\", null, \"set\", \"Select Icon Column\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"icon\", \"fa-briefcase\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.iconColumn() });\n\nSummaryC.prototype.publish(\"fontFamily\", \"Arial\", \"string\", \"Font Family\");\n\nSummaryC.prototype.publish(\"labelColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"valueColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\n\nSummaryC.prototype.publish(\"colorFillColumn\", null, \"set\", \"Column for background color\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"colorFill\", \"#0097e6\", \"html-color\", \"Background Color\", null, { disable: (w) => w.colorFillColumn() });\nSummaryC.prototype.publish(\"colorStrokeColumn\", null, \"set\", \"Column for font color\", function () { return this.columns(); }, { optional: true });\nSummaryC.prototype.publish(\"colorStroke\", \"#2f3640\", \"html-color\", \"Font Color\", null, { disable: (w) => w.colorStrokeColumn() });\n\nSummaryC.prototype.publish(\"fixedSize\", true, \"boolean\", \"Fix Size to Min Width/Height\");\nSummaryC.prototype.publish(\"minWidth\", 225, \"number\", \"Minimum Width\");\nSummaryC.prototype.publish(\"minHeight\", 150, \"number\", \"Minimum Height\");\nSummaryC.prototype.publish(\"playInterval\", null, \"number\", \"Play Interval\", null, { optional: true });\n\nSummaryC.prototype.publish(\"fontSizeRatio\", 0.618, \"number\", \"Ratio between widget height and value font size\");\nSummaryC.prototype.publish(\"valueOpacity\", 1, \"number\", \"Opacity of value text (0..1)\");\nSummaryC.prototype.publish(\"labelOpacity\", 0.9, \"number\", \"Opacity of label text (0..1)\");\nSummaryC.prototype.publish(\"iconOpacity\", 0.3, \"number\", \"Opacity of icon text (0..1)\");\n\nSummaryC.prototype.publish(\"paddingSizeRatio\", 0.1, \"number\", \"Ratio of the smallest dimension for edge padding (0..1)\");\nSummaryC.prototype.publish(\"iconSizeRatio\", 0.9, \"number\", \"Ratio of the height for icon size (0..1)\");\n\nconst playInterval = SummaryC.prototype.playInterval;\nSummaryC.prototype.playInterval = function (_?: number): number | any {\n    const retVal = playInterval.apply(this, arguments);\n    if (arguments.length) {\n        if (this._playIntervalHandle) {\n            clearInterval(this._playIntervalHandle);\n        }\n        const context = this;\n        if (_) {\n            this._playIntervalHandle = setInterval(function () {\n                context._playIntervalIdx++;\n                if (context._renderCount && context.data().length) {\n                    context.render();\n                }\n            }, _);\n        }\n    }\n    return retVal;\n};\n","// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\n\nimport { dispatch } from \"d3-dispatch\";\n\nconst cloudRadians = Math.PI / 180;\nconst cw = 1 << 11 >> 5;\nconst ch = 1 << 11;\n\nexport function d3Cloud() {\n    const event = dispatch(\"word\", \"end\");\n    const cloud: any = {};\n\n    let size = [256, 256];\n    let text = cloudText;\n    let font = cloudFont;\n    let fontSize = cloudFontSize;\n    let fontStyle = cloudFontNormal;\n    let fontWeight = cloudFontNormal;\n    let rotate = cloudRotate;\n    let padding = cloudPadding;\n    let words = [];\n    let spiral = archimedeanSpiral;\n    let timeInterval = Infinity;\n    let timer = null;\n    let random = Math.random;\n    let canvas = cloudCanvas;\n\n    cloud.canvas = function (_?) {\n        return arguments.length ? (canvas = functor(_), cloud) : canvas;\n    };\n\n    cloud.start = function () {\n        const contextAndRatio = getContext(canvas());\n        const board = zeroArray((size[0] >> 5) * size[1]);\n        let bounds = null;\n        const n = words.length;\n        let i = -1;\n        const tags = [];\n        const data = words.map(function (d, i) {\n            d.text = text.call(this, d, i);\n            d.font = font.call(this, d, i);\n            d.style = fontStyle.call(this, d, i);\n            d.weight = fontWeight.call(this, d, i);\n            d.rotate = rotate.call(this, d, i);\n            d.size = ~~fontSize.call(this, d, i);\n            d.padding = padding.call(this, d, i);\n            return d;\n        }).sort(function (a, b) { return b.size - a.size; });\n\n        if (timer) clearInterval(timer);\n        timer = setInterval(step, 0);\n        step();\n\n        return cloud;\n\n        function step() {\n            const start = Date.now();\n            while (Date.now() - start < timeInterval && ++i < n && timer) {\n                const d = data[i];\n                d.x = (size[0] * (random() + .5)) >> 1;\n                d.y = (size[1] * (random() + .5)) >> 1;\n                cloudSprite(contextAndRatio, d, data, i);\n                if (d.hasText && place(board, d, bounds)) {\n                    tags.push(d);\n                    event.call(\"word\", cloud, d);\n                    if (bounds) cloudBounds(bounds, d);\n                    else bounds = [{ x: d.x + d.x0, y: d.y + d.y0 }, { x: d.x + d.x1, y: d.y + d.y1 }];\n                    // Temporary hack\n                    d.x -= size[0] >> 1;\n                    d.y -= size[1] >> 1;\n                }\n            }\n            if (i >= n) {\n                cloud.stop();\n                event.call(\"end\", cloud, tags, bounds);\n            }\n        }\n    };\n\n    cloud.stop = function () {\n        if (timer) {\n            clearInterval(timer);\n            timer = null;\n        }\n        return cloud;\n    };\n\n    function getContext(canvas) {\n        canvas.width = canvas.height = 1;\n        const ratio = Math.sqrt(canvas.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\n        canvas.width = (cw << 5) / ratio;\n        canvas.height = ch / ratio;\n\n        const context = canvas.getContext(\"2d\");\n        context.fillStyle = context.strokeStyle = \"red\";\n        context.textAlign = \"center\";\n\n        return { context, ratio };\n    }\n\n    function place(board, tag, bounds) {\n        const startX = tag.x;\n        const startY = tag.y;\n        const maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]);\n        const s = spiral(size);\n        const dt = random() < .5 ? 1 : -1;\n        let t = -dt;\n        let dxdy;\n        let dx;\n        let dy;\n\n        // eslint-disable-next-line no-cond-assign\n        while (dxdy = s(t += dt)) {\n            dx = ~~dxdy[0];\n            dy = ~~dxdy[1];\n\n            if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n\n            tag.x = startX + dx;\n            tag.y = startY + dy;\n\n            if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\n                tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n            // TODO only check for collisions within current bounds.\n            if (!bounds || !cloudCollide(tag, board, size[0])) {\n                if (!bounds || collideRects(tag, bounds)) {\n                    const sprite = tag.sprite;\n                    const w = tag.width >> 5;\n                    const sw = size[0] >> 5;\n                    const lx = tag.x - (w << 4);\n                    const sx = lx & 0x7f;\n                    const msx = 32 - sx;\n                    const h = tag.y1 - tag.y0;\n                    let x = (tag.y + tag.y0) * sw + (lx >> 5);\n                    let last;\n                    for (let j = 0; j < h; j++) {\n                        last = 0;\n                        for (let i = 0; i <= w; i++) {\n                            board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n                        }\n                        x += sw;\n                    }\n                    delete tag.sprite;\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    cloud.timeInterval = function (_?) {\n        return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval;\n    };\n\n    cloud.words = function (_?) {\n        return arguments.length ? (words = _, cloud) : words;\n    };\n\n    cloud.size = function (_?) {\n        return arguments.length ? (size = [+_[0], +_[1]], cloud) : size;\n    };\n\n    cloud.font = function (_?) {\n        return arguments.length ? (font = functor(_), cloud) : font;\n    };\n\n    cloud.fontStyle = function (_?) {\n        return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle;\n    };\n\n    cloud.fontWeight = function (_?) {\n        return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight;\n    };\n\n    cloud.rotate = function (_?) {\n        return arguments.length ? (rotate = functor(_), cloud) : rotate;\n    };\n\n    cloud.text = function (_?) {\n        return arguments.length ? (text = functor(_), cloud) : text;\n    };\n\n    cloud.spiral = function (_?) {\n        return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral;\n    };\n\n    cloud.fontSize = function (_?) {\n        return arguments.length ? (fontSize = functor(_), cloud) : fontSize;\n    };\n\n    cloud.padding = function (_?) {\n        return arguments.length ? (padding = functor(_), cloud) : padding;\n    };\n\n    cloud.random = function (_?) {\n        return arguments.length ? (random = _, cloud) : random;\n    };\n\n    cloud.on = function () {\n        const value = event.on.apply(event, arguments);\n        return value === event ? cloud : value;\n    };\n\n    return cloud;\n}\n\nfunction cloudText(d) {\n    return d.text;\n}\n\nfunction cloudFont() {\n    return \"serif\";\n}\n\nfunction cloudFontNormal() {\n    return \"normal\";\n}\n\nfunction cloudFontSize(d) {\n    return Math.sqrt(d.value);\n}\n\nfunction cloudRotate() {\n    return (~~(Math.random() * 6) - 3) * 30;\n}\n\nfunction cloudPadding() {\n    return 1;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n    if (d.sprite) return;\n    const c = contextAndRatio.context;\n    const ratio = contextAndRatio.ratio;\n\n    c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n    let x = 0;\n    let y = 0;\n    let maxh = 0;\n    const n = data.length;\n    --di;\n    while (++di < n) {\n        d = data[di];\n        c.save();\n        c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\n        let w = c.measureText(d.text + \"m\").width * ratio;\n        let h = d.size << 1;\n        if (d.rotate) {\n            const sr = Math.sin(d.rotate * cloudRadians);\n            const cr = Math.cos(d.rotate * cloudRadians);\n            const wcr = w * cr;\n            const wsr = w * sr;\n            const hcr = h * cr;\n            const hsr = h * sr;\n            w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\n            h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n        } else {\n            w = (w + 0x1f) >> 5 << 5;\n        }\n        if (h > maxh) maxh = h;\n        if (x + w >= (cw << 5)) {\n            x = 0;\n            y += maxh;\n            maxh = 0;\n        }\n        if (y + h >= ch) break;\n        c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n        if (d.rotate) c.rotate(d.rotate * cloudRadians);\n        c.fillText(d.text, 0, 0);\n        if (d.padding) {\n            c.lineWidth = 2 * d.padding;\n            c.strokeText(d.text, 0, 0);\n        }\n        c.restore();\n        d.width = w;\n        d.height = h;\n        d.xoff = x;\n        d.yoff = y;\n        d.x1 = w >> 1;\n        d.y1 = h >> 1;\n        d.x0 = -d.x1;\n        d.y0 = -d.y1;\n        d.hasText = true;\n        x += w;\n    }\n    const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;\n    const sprite = [];\n    while (--di >= 0) {\n        d = data[di];\n        if (!d.hasText) continue;\n        const w = d.width;\n        const w32 = w >> 5;\n        let h = d.y1 - d.y0;\n        // Zero the buffer\n        for (let i = 0; i < h * w32; i++) sprite[i] = 0;\n        x = d.xoff;\n        if (x == null) return;\n        y = d.yoff;\n        let seen = 0;\n        let seenRow = -1;\n        for (let j = 0; j < h; j++) {\n            for (let i = 0; i < w; i++) {\n                const k = w32 * j + (i >> 5);\n                const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n                sprite[k] |= m;\n                seen |= m;\n            }\n            if (seen) seenRow = j;\n            else {\n                d.y0++;\n                h--;\n                j--;\n                y++;\n            }\n        }\n        d.y1 = d.y0 + seenRow;\n        d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n    }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n    sw >>= 5;\n    const sprite = tag.sprite;\n    const w = tag.width >> 5;\n    const lx = tag.x - (w << 4);\n    const sx = lx & 0x7f;\n    const msx = 32 - sx;\n    const h = tag.y1 - tag.y0;\n    let x = (tag.y + tag.y0) * sw + (lx >> 5);\n    let last;\n    for (let j = 0; j < h; j++) {\n        last = 0;\n        for (let i = 0; i <= w; i++) {\n            if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n                & board[x + i]) return true;\n        }\n        x += sw;\n    }\n    return false;\n}\n\nfunction cloudBounds(bounds, d) {\n    const b0 = bounds[0];\n    const b1 = bounds[1];\n    if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n    if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n    if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n    if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n    return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n    const e = size[0] / size[1];\n    return function (t) {\n        return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n    };\n}\n\nfunction rectangularSpiral(size) {\n    const dy = 4;\n    const dx = dy * size[0] / size[1];\n    let x = 0;\n    let y = 0;\n    return function (t) {\n        const sign = t < 0 ? -1 : 1;\n        // See triangular numbers: T_n = n * (n + 1) / 2.\n        switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n            case 0: x += dx; break;\n            case 1: y += dy; break;\n            case 2: x -= dx; break;\n            default: y -= dy; break;\n        }\n        return [x, y];\n    };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n    const a = [];\n    let i = -1;\n    while (++i < n) a[i] = 0;\n    return a;\n}\n\nfunction cloudCanvas() {\n    return document.createElement(\"canvas\");\n}\n\nfunction functor(d) {\n    return typeof d === \"function\" ? d : function () { return d; };\n}\n\nconst spirals = {\n    archimedean: archimedeanSpiral,\n    rectangular: rectangularSpiral\n};\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { 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 (event) {\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 (_event, d) {\n                    context.click(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n                })\n                .on(\"dblclick\", function (_event, d) {\n                    context.dblclick(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n                })\n                .on(\"mouseout.tooltip\", context.tooltip.hide)\n                .on(\"mousemove.tooltip\", context.tooltip.show)\n                .style(\"opacity\", 1e-6)\n                .merge(text)\n                .style(\"font-size\", function (d) { return scale(d.__viz_weight) + \"px\"; })\n                .style(\"font-family\", context.fontFamily())\n                .transition().duration(1000)\n                .attr(\"transform\", function (d) { return \"translate(\" + [d.x, d.y] + \")rotate(\" + d.rotate + \")\"; })\n                .style(\"fill\", function (d) { return context._palette(d.__viz_label ? d.__viz_label.toLowerCase() : \"\"); })\n                .style(\"opacity\", 1)\n                ;\n            text.exit().transition().duration(1000)\n                .style(\"opacity\", 1e-4)\n                .remove()\n                ;\n        }\n    }\n\n    zoomed(source, translate, scale) {\n        if (translate[0] !== this._prevOffsetX || translate[1] !== this._prevOffsetY || scale !== this._prevZoom) {\n            this._root.attr(\"transform\", translate);\n            switch (source) {\n                case this:\n                    /*\n                        this._d3Zoom\n                            .scale(scale)\n                            .translate(translate)\n                            ;\n                    */\n                    break;\n                case this._d3Zoom:\n                    this.offsetX(translate[0]);\n                    this.offsetY(translate[1]);\n                    this.zoom(scale);\n                    break;\n            }\n            this._prevOffsetX = translate[0];\n            this._prevOffsetY = translate[1];\n            this._prevZoom = scale;\n        }\n    }\n}\nWordCloud.prototype._class += \" chart_WordCloud\";\nWordCloud.prototype.implements(I2DChart.prototype);\nWordCloud.prototype.implements(ITooltip.prototype);\nWordCloud.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface WordCloud {\n\n    paletteID(): string;\n    paletteID(_: string): this;\n    useClonedPalette(): boolean;\n    useClonedPalette(_: boolean): this;\n    fontFamily(): string;\n    fontFamily(_: string): this;\n    fontSizeFrom(): number;\n    fontSizeFrom(_: number): this;\n    fontSizeTo(): number;\n    fontSizeTo(_: number): this;\n    angleFrom(): number;\n    angleFrom(_: number): this;\n    angleTo(): number;\n    angleTo(_: number): this;\n    angleCount(): number;\n    angleCount(_: number): this;\n    padding(): number;\n    padding(_: number): this;\n    scaleMode(): string;\n    scaleMode(_: string): this;\n    spiral(): string;\n    spiral(_: string): this;\n    offsetX(): number;\n    offsetX(_: number): this;\n    offsetY(): number;\n    offsetY(_: number): this;\n    zoom(): number;\n    zoom(_: number): this;\n    zoom_exists(): boolean;\n\n    //  I2DChart\n    _palette;\n    click(row, column, selected): void;\n    dblclick(row, column, selected): void;\n\n    //  ITooltip  ---\n    tooltip;\n    tooltipHTML(_?): any;\n    tooltipFormat(opts): any;\n    tooltipStyle(): string;\n    tooltipStyle(_: string): this;\n    tooltipValueFormat(): string;\n    tooltipValueFormat(_: string): this;\n    tooltipSeriesColor(): string;\n    tooltipSeriesColor(_: string): this;\n    tooltipLabelColor(): string;\n    tooltipLabelColor(_: string): this;\n    tooltipValueColor(): string;\n    tooltipValueColor(_: string): this;\n    tooltipTick(): boolean;\n    tooltipTick(_: boolean): this;\n    tooltipOffset(): number;\n    tooltipOffset(_: number): this;\n    tooltipOffset_exists(): boolean;\n\n    //  SimpleSelectionMixin\n    _selection: Utility.SimpleSelection;\n}\n\nWordCloud.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", WordCloud.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nWordCloud.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\n\nWordCloud.prototype.publish(\"fontFamily\", \"Impact\", \"string\", \"Font Name\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"fontSizeFrom\", 6, \"number\", \"Minimum font size (pixels)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"fontSizeTo\", 48, \"number\", \"Maximum font size (pixels)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"angleFrom\", -60, \"number\", \"Minimum angle (degrees)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"angleTo\", 60, \"number\", \"Maximum angle (degrees)\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"angleCount\", 5, \"number\", \"Number of different angles\", null, { tags: [\"Basic\"] });\nWordCloud.prototype.publish(\"padding\", 0, \"number\", \"Padding between words (pixels)\", null, { tags: [\"Intermediate\"] });\nWordCloud.prototype.publish(\"scaleMode\", \"linear\", \"set\", \"Text scaling mode\", [\"linear\", \"log\", \"sqrt\", \"pow\"], { tags: [\"Intermediate\"] });\nWordCloud.prototype.publish(\"spiral\", \"archimedean\", \"set\", \"Text scaling mode\", [\"archimedean\", \"rectangular\"], { tags: [\"Intermediate\"] });\nWordCloud.prototype.publish(\"offsetX\", 0, \"number\", \"X offset\", null, { tags: [\"Advanced\"] });\nWordCloud.prototype.publish(\"offsetY\", 0, \"number\", \"Y offset\", null, { tags: [\"Advanced\"] });\nWordCloud.prototype.publish(\"zoom\", 1, \"number\", \"Zoom\", null, { tags: [\"Advanced\"] });\n","import { timeFormat } from \"d3-time-format\";\n\n/**\n * Adaptive 24-hour multi-scale tick formatter.\n * Order of precedence (first predicate that matches):\n *  milliseconds -> seconds -> minutes -> hours -> day -> month -> year.\n */\nexport function multiScale24Hours(): (d: Date) => string {\n    const fmtMs = timeFormat(\".%L\");\n    const fmtSec = timeFormat(\":%S\");\n    const fmtMin = timeFormat(\"%H:%M\");\n    const fmtHour = timeFormat(\"%H:00\");\n    const fmtDay = timeFormat(\"%b %d\");\n    const fmtMonth = timeFormat(\"%b\");\n    const fmtYear = timeFormat(\"%Y\");\n\n    return (d: Date): string => {\n        if (d.getMilliseconds() !== 0) return fmtMs(d);\n        if (d.getSeconds() !== 0) return fmtSec(d);\n        if (d.getMinutes() !== 0) return fmtMin(d);\n        if (d.getHours() !== 0) return fmtHour(d);\n        if (d.getDate() !== 1) return fmtDay(d);\n        if (d.getMonth() !== 0) return fmtMonth(d);\n        return fmtYear(d);\n    };\n}\n"],"ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,78],"mappings":"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"}