@hpcc-js/chart 2.79.1 → 2.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/__package__.ts","../../../node_modules/tslib/tslib.es6.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/descending.js","../../../node_modules/d3-shape/src/identity.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../../node_modules/d3-axis/src/array.js","../../../node_modules/d3-axis/src/identity.js","../../../node_modules/d3-axis/src/axis.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/Axis.ts","../src/XYAxis.ts","../src/Scatter.ts","../../../node_modules/d3-shape/src/area.js","../src/Area.ts","../src/Column.ts","../src/Bar.ts","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.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/array.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../src/Bubble.ts","../src/BubbleXY.ts","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3v4-bullet/src/bullet.js","../src/Bullet.ts","../../../node_modules/d3-contour/src/array.js","../../../node_modules/d3-contour/src/ascending.js","../../../node_modules/d3-contour/src/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/area.js","../../../node_modules/d3-contour/src/blur.js","../../../node_modules/d3-contour/src/density.js","../../../node_modules/d3-geo/src/adder.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../src/Contour.ts","../../../node_modules/d3-geo/src/path/index.js","../src/Gantt.ts","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/constant.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/math.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/arc.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/point.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-svg-annotation/src/Annotation.js","../../../node_modules/d3-svg-annotation/src/AnnotationCollection.js","../../../node_modules/d3-svg-annotation/src/Note/alignment.js","../../../node_modules/d3-svg-annotation/src/Builder.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/line.js","../../../node_modules/d3-svg-annotation/src/Note/lineType-vertical.js","../../../node_modules/d3-svg-annotation/src/Note/lineType-horizontal.js","../../../node_modules/d3-svg-annotation/src/Connector/type-line.js","../../../node_modules/d3-svg-annotation/src/Connector/type-elbow.js","../../../node_modules/d3-svg-annotation/src/Connector/type-curve.js","../../../node_modules/d3-svg-annotation/src/Handles.js","../../../node_modules/d3-svg-annotation/src/Connector/end-arrow.js","../../../node_modules/d3-svg-annotation/src/Connector/end-dot.js","../../../node_modules/d3-svg-annotation/src/Subject/circle.js","../../../node_modules/d3-svg-annotation/src/Subject/rect.js","../../../node_modules/d3-svg-annotation/src/Subject/threshold.js","../../../node_modules/d3-svg-annotation/src/Subject/badge.js","../../../node_modules/d3-svg-annotation/src/Types-d3.js","../src/Gauge.ts","../../../node_modules/d3-svg-annotation/src/Adapter-d3.js","../src/Pie.ts","../../../node_modules/d3-shape/src/pie.js","../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"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__spreadArray","to","from","pack","ar","l","slice","concat","pi","Math","PI","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","path","constant$3","x","moveTo","y","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","Error","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","atan2","max","min","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","t","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","d3Arc","cornerRadius","constant","padRadius","context","buffer","r0","apply","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","a","Linear","_context","d3CurveLinear","d3Line","pointX","pointY","defined","curve","curveLinear","output","line","data","n","defined0","lineStart","lineEnd","point","descending","NaN","identity$2","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","areaStart","_line","areaEnd","_point","_x","_y","j","push","d3CurveBundle","custom","bundle","_k","_x2","_y2","Cardinal","tension","d3CurveCardinal","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","pow","m","d3curveCatmullRom","catmullRom","sign","slope3","h0","h1","s0","s1","slope2","MonotoneX","monotoneX","Natural","controlPoints","d3CurveNatural","Step","_t","d3CurveStep","stepBefore","stepAfter","_t0","px","py","i0","i1","identity$1","translateX","translateY","number","scale","center","offset","bandwidth","round","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","values","ticks","domain","format","identity","spacing","range","range0","range1","position","copy","selection","selectAll","tick","order","tickExit","exit","tickEnter","enter","append","attr","select","text","merge","insert","transition","isFinite","getAttribute","parentNode","remove","filter","each","tickSize","axisTop","axisRight","axisBottom","axisLeft","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","Axis","_super","drawStartPosition","_this","_drawStartPos","updateScale","_type","timePattern","_timePattern","lowValue","parse","low","highValue","high","forceNumeric","map","parser","parseInvert","parserInvert","formatter","parseFormat","scalePos","retVal","d3Scale","isHorizontal","orientation","rangeRoundBands","rangeExtent","rangeRound","invert","pos","guideTarget","_guideElement","d3Select","_class","domNode","element","svg","svgAxis","svgGuides","d3ScaleBand","paddingInner","ordinalPaddingInner","paddingOuter","ordinalPaddingOuter","ordinals_exists","ordinals","ordinalMappings_exists","mappings_1","ordinalMappings","d3ScaleLinear","low_exists","high_exists","tickFormat_exists","d3Format","d3ScalePow","exponent","powExponent","d3ScaleLog","base","logBase","d3ScaleTime","timePattern_exists","d3TimeParse","d3TimeFormat","_prevOrientation","d3Axis","d3AxisLeft","d3Guides","d3AxisTop","d3AxisRight","d3AxisBottom","html","extend","length_1","delta","newLow","newHigh","width","height","tickCount","tickLength_exists","tickLength","customTicks","value","_d","label","adjustText","tickOverlapModulus","isHoriztontal","isLeft","isBottom","textSelection","fontFamily","fontSize_exists","fontSize","overlapMode","linebreak","wrap","deg_1","labelRotation","elm","bbox","node","getBBox","dyOff","calcTickOverlapModulus","bboxArr_1","getBoundingClientRect","right","left","calcOverflow","ignoreText","hidden","top","bottom","depth","tmpSvg","classID","tmpSvgG","shrinkToFit","_text","bandSize","re","words","split","reverse","lineNumber","fs","parseFloat","maxLinesPerBand","floor","minWordsPerLine","ceil","tspan","wordsOnLine","word","pop","join","getComputedTextLength","update","overlap","lowerPos","upperPos","doPosition","svgLineBBox","svgText","title","svgTitleTransition","title_exists","classed","rerender","postUpdate","_element","publish","disable","SVGWidget","optional","XYAxis","_skipSelection","Utility","SimpleSelectionMixin","domainAxis","orientation_default","overlapMode_default","shrinkToFit_default","extend_default","valueAxis","xyBrush","d3Brush","on","brushMoved","brushMoved2","xBrush","d3BrushX","yBrush","d3BrushY","resetSelection","_prevBrush","parseData","parseValue","formatData","formatValue","parsedData","row","prevValue","cell","idx","columns","_retVal","yAxisStacked","svgRegions","svgDomainGuide","svgValueGuide","svgData","svgDataClipRect","id","_selection","widgetElement","svgFocus","svgBrush","chartsEnter","resizeBrushHandle","e","skipSelection","selected","currSel","d3BrushSelection","dataPos","use2dSelection","pos2","valuePos","handleTypes","handlePath","s","d3Event","getAxisSize","host","xAxis","yAxis","calcMargin","_domNode","margin","selectionMode","xAxisFocus","xAxisFocusHeight","xRight","xHeight","yTop","yWidth","xAxisOverlap","newXHeight","yAxisOverlap","newYWidth","updateRegions","regions","_palette","colorID","d3Hsl","brighter","xAxisTitle_exists","xAxisTitle","xAxisType","colLen_1","ordinalMappings_1","xAxisOrdinalMapping","domainMin","xAxisDomainLow","d3Min","domainMax","xAxisDomainHigh","d3Max","undefined","yAxisDomainLow","indexOf","yAxisDomainHigh","maxCurrExtent","maxOtherExtent","xAxisGuideLines","render","yAxisGuideLines","updateBrush","updateFocusChart","chartsUpdate","currBrush","prevBrushSel","extent","_prevXAxisType","tmp","ratio","move","focusChart","syncAxis","layers","copyPropsTo","layerIdx","_i","_a","layerColumns","masterColumns","col","layerColumnIndices","layerColumnIndex","column","layerData","indices_1","__hpcc_origRow","layerEnter","duration","layerUpdate","layerExit","class","resize","_selected","origRow","svgGlowID","selRows","rowToObj","setTimeout","click","lparam","mixin","publishProxy","tags","yAxisType","Scatter","INDChart","ITooltip","xAxisGuideLines_default","yAxisGuideLines_default","xPos","yPos","interpolate","d3CurveStepBefore","d3CurveStepAfter","d3CurveMonotoneX","getScale","pointSizeScale","d3ScaleSqrt","pointColor","pointDarken","strokeColor","fillColor","lineColor","interpolateFill","interpolateDarken","areaColor","tooltipHTML","tooltipStyle","tooltipFormat","arr","color","rowIdx","series","pointSizeColumnIdx","switch","paletteID","useClonedPalette","cloneNotExists","_prevPointShape","pointShape","pointSizeColumn_exists","pointSizeColumn","d3Extent","flatData","flattenData","shape","mapShape","colIdx","size","maxPointSize","minPointSize","pointSize","areas","areasEnter","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","d3Area","cssTag","interpolateFillOpacity","lines","linesEnter","data2","points","valueAnchor","valueBaseline","_idx","textColor","tooltip","hide","show","bind","dblclick","showValue","__inputs","multi","implements","step","Area","interpolate_default","interpolateFill_default","Column","textLocal","d3Local","skipBringToTop","_linearGap","adjustedData","retVal2","dataLen","direction","columnScale","xAxisSeriesPaddingInner","rowData","domainSums","seriesSums","columnLength","showValueAsPercent","forEach","reduce","sum","hostData","axisSize","dataRow","dataRowIdx","columnGRect","columnGEnter","tooltipInnerTextEllipsedOnly","innerTextObj","isTruncated","domainLength","domainPos","upperValue","valueText","dm","dataMeta","seriesSum","showValueAsPercentFormat","domainSum","showValueFormat","upperValuePos","lowerValuePos","valueLength","innerTextHeight","innerTextFontSize","innerTextPadding","innerTextPadding_exists","dataRect","intersectRectRect","_rects","_texts","innerTextFontFamily_exists","innerTextFontFamily","padding","textHeightOffset","showInnerText","innerText","clippedValueLength","calcInnerText","dataText","set","Text","colorStroke_default","noRoomInside","isOutside","valueFontFamily","valueFontSize","textSize","isPositive","leftSpace","rightSpace","topSpace","bottomSpace","padding_1","valueTextWidth","category","valueCentered","get","anchor","colorFill","visible","valueFontFamily_exists","origInnerText","fullWidth2","fullWidth3","excessWidth","innerText_1","letter","Bar","count","children","hierarchy","child","childs","root","Node","valued","nodes","defaultChildren","parent","eachBefore","computeHeight","copyData","eachAfter","callback","current","next","sort","compare","end","start","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","splice","descendants","leaves","links","source","enclose","circles","array","random","shuffle","B","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","r2","r21","r3","a2","a3","b2","b3","c2","c3","d1","d3","ab","xa","xb","ya","yb","A","C","place","intersects","score","circle","previous","f","required","constantZero","constant$2","defaultRadius","radiusLeaf","radius","packChildren","aa","ca","sj","sk","packEnclose","translateChild","Bubble","I2DChart","labelWidgets","d3Pack","d3Hierarchy","cloneData","element2","__viz_faChar","FAChar","char","colorFill_default","BubbleXY","clockNow","clock","performance","now","Date","setFrame","window","requestAnimationFrame","clearNow","timerFlush","taskHead","_time","_call","_next","bulvarRanges","ranges","bulvarMarkers","markers","bulvarMeasures","measures","bulvarWidth","Bullet","_hiddenColumns","bulletData","valueOf","titleColumn","subtitle","subtitleColumn","rangesColumn","measuresColumn","markersColumn","columnType","svgUpdate","bulletTitle","titleWidth","chart","vertical","bulvar","g","extentX","extentY","rangez","d3Descending","markerz","measurez","g2","empty","__chart__","Infinity","w0","w1","i2","measure","marker","d3TimerFlush","d3Bullet","keys","HTMLWidget","ascending","constant$1","contains","ring","hole","ringContains","xi","yi","pj","xj","yj","segmentContains","q","collinear","noop$1","cases","contours","threshold","thresholdSturges","smooth","smoothLinear","tz","isArray","stop","tickStep","contour","polygons","holes","t2","t3","fragmentByStart","fragmentByEnd","stitch","startIndex","index","endIndex","unshift","isorings","polygon","coordinates","v0","xt","yt","v1","_0","_1","thresholds","noop","blurX","sr","blurY","defaultX","defaultY","defaultWeight","adder","Adder","reset","add","temp","bv","av","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","Feature","object","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","polygonStart","polygonEnd","geoStream","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","result","areaPointFirst","areaPoint","pathArea","boundsStream","bounds","boundsStream$1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointFirstLine","centroidPointLine","z","centroidPointFirstRing","centroidPointRing","pathCentroid","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","pathMeasure","PathString","_string","_circle","Contour","xAxisType_default","contourData","weight","o","density","values0","Float32Array","values1","wi","shift","transformPolygon","transformRing","transformPoint","cellSize","log","LN2","d3ContourDensity","contourBandwidth","_vals","minValue","maxValue","_dataMinWeight","_dataMaxWeight","projection","projectionStream","contextStream","pathBounds","geoPath","showContourFill","contourStrokeColor","contourStrokeWidth","I1DChart","Gantt","yAxisType_default","curveCatmullRom","Annotation","_ref","_ref$x","_ref$y","nx","ny","_ref$dy","_ref$dx","_ref$color","subject","connector","note","className","_dx","_dy","_color","_className","setPosition","redrawSubject","clearComponents","setOffset","redrawConnector","redrawNote","setClassName","updatePosition","updateOffset","_ref2","_ref3","json","AnnotationCollection","annotations","accessors","accessorsInverse","newSettings","setPositionWithAccessors","editMode","updateEditMode","textWrap","updateTextWrap","drawText","notePadding","_this2","getNoteBBoxOffset","positionX","positionY","leftRightDynamic","align","topBottomDynamic","orientationTopBottom","orientationLeftRight","lineBuilder","_ref$curve","canvasContext","lineGen","builder","pathMethods","attrs","arcBuilder","arcShape","noteVertical","components","noteHorizontal","lineSetup","subjectType","annotation","subjectData","angle","radiusPadding","connectorLine","connectorData","connectorElbow","diffY","diffX","xe","ye","opposite","connectorCurve","createPoints","handles","cHandles","pointHandle","_ref$cx","_ref$cy","updatePoint","event","mapHandles","drag","anchors","diff","connectorArrow","_ref$scale","angleOffset","atan","connectorDot","dot","subjectCircle","_ref2$cx","_ref2$cy","circleHandles","updateRadius","_extends","subjectRect","rHandles","subjectThreshold","subjectBadge","_ref$subjectData","_ref$type","typeSettings","notCornerOffset","placement","xleftcorner","ytopcorner","xleft","ytop","circlebg","fill","pointer","notCornerPointerXY","v","dragBadge","bHandles","Type","dispatcher","noteContent","handler","addHandlers","component","name","offsetCornerX","offsetCornerY","init","mapX","mapY","builders","_ref5","group","_ref5$r","container","el","addAttrs","removeAttrs","currentAttrs","attributes","bboxWithoutHandles","offsetX","offsetY","subjectParams","_subject$components","_subject$handles","stroke","dragSubject","connectorParams","_connector$components","_connector$handles","endType","distance","endScale","line$$1","_this3","noteData","noteParams","lineType","_note$components","_note$handles","_this4","dragNote","dragging","dragstarted","dragended","noteAlignment","_ref$padding","_ref$bbox","_ref$offset","_noteAlignment","drawFunction","drawOnSVG","drawOnScreen","drawSubject","drawConnector","getNoteBBox","drawNoteContent","drawNote","sourceEvent","stopPropagation","_this5","customType","initialType","settings","_this6","babelHelpers.get","getPrototypeOf","babelHelpers.extends","d3NoteText","_Type","params","titleBBox","wrapLength","wrapSplitter","bgPadding","bgPaddingFinal","_typeof","d3Callout","d3CalloutElbow","ThresholdMap","newWithClass","lineHeight","selector","yOffset","value2Angle","pointOnArc","indicatorTween","newAngle","inner","d3Interpolate","rotation","indicatorTranslate","arcTween","startInterpolate","endInterpolate","Gauge","_d3Arc","_colorScale","scaleLinear","d3InterpolateHcl","tip","_tooltipG","interrupt","_centerText","datum","xOffset","annotationtip","collection","ids","annotationDispatcher","dispatch","sel","translatedAnnotations","draw","JSON","stringify","updateText","updatedAccessors","updateDisable","updateNotePadding","rerun","some","d3Annotation","annotationCalloutElbow","calcSize","textElement","bb","widthTransform","heightTransform","calcWidth","maxDiameter","_usageArc","valueDescription","_freeArc","_meanArc","tickValueDescription","_mainTooltip","appendIndicator","_indInner","_indOuter","_bottomText","titleDescription","colorDomain","colorRange","val","tickVal","tickValue","attrTween","emptyColor","tickColor","showTick","point2","Pie","_minLabelTop","_maxLabelBottom","d3Pie","sortValues","pie","arcs","pa","d3LabelArc","tooltipTick_default","tooltipOffset_default","intersection","pointA","pointB","intersectCircle","calcOuterRadius","calcInnerRadius","innerRadius_exists","maxTextWidth","getLabelText","horizontalLimit","_size","showLabels","verticalLimit","_smallValueLabelHeight","minOuterRadius","_labelWidthLimit","calcSmallValueLabelHeight","totalVal","acc","smallCount","labelHeight","calcTotalValue","truncate","len","labelWidth","showSeriesValue","_seriesValueFormatter","showSeriesPercentage","_totalValue","perc","_seriesPercentageFormatter","selection2","strRow","selectByLabel","_slices","_labels","updateD3Pie","seriesValueFormat","seriesPercentageFormat","labelRadius","_quadIdxArr","_labelPositions","quad","getQuadrant","midAngle","mergedText","mid_angle","isLeftSide","adjustForOverlap","polyline","outerRadiusDelta","delay","pos1","centerOnLabels","normalizeRadians","radians","rad","gY","gY2","heightDiff","absTop","yShift","prevTop","degreesToRadians","HalfPie","_pos","_target","SVGElement","_widgetScale","Heat","radiusX","radiusY","_domForeignObject","_domCanvas","_heat","simpleheat","maxWeight","gradient","reversePalette","defaultGradient","radiusAsPercent","clear","blur","minOpacity","canvas","_canvas","getElementById","_ctx","getContext","_width","_height","_max","_data","Palette","rainbow","rX","rY","ellipse","_ellipse","_createCanvas","ctx","rX2","_r","rY2","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","beginPath","grad","createLinearGradient","addColorStop","fillStyle","fillRect","_grad","getImageData","clearRect","globalAlpha","drawImage","colored","_colorize","putImageData","pixels","thirdPi","angles","HexBin","I2DAggrChart","tooltipValueFormat_default","seriesExtent","labelExtent","_hexbin","hexbin","binsById","bins","isNaN","py1","px1","pi2","pj2","px2","py2","bin","hexagon","centers","mesh","fragment","d3HexBin","binSize","dataPoints","hexBinPoints","minBinPoints","maxBinPoints","Line","QuarterPie","QuartileCandlestick","_g","_leftLine","_rightLine","_midLine","_midOuterRect","_midInnerRect1","_midInnerRect2","_q0text","_q1text","_q2text","_q3text","_q4text","_q0val","_q1val","_q2val","_q3val","_q4val","valueSize","lineWidth","domainSize","edgePadding","candleWidth","candleWidth_exists","roundedCorners","q0x","q1x","q2x","q3x","dataTop","dataBottom","upperTextRotation","lowerTextRotation","textPadding","labelFontSize","sz","q4x","transX","transY","rotate","textScale","labelAnchor","innerRectColor","showValues","Radar","setPointAttributes","half_size_1","half_h","half_w","domain_points","degrees2radians","max_label_h","max_label_w","isize","labels","max_val","xy","polar2cartesian","labelPaddingRatio","text_anchor","domains","value_guides","valueGuideRatios","mult","poly_points","domain_point","row_idx","value_guide_text","series_polygons","fillOpacity","col_idx","val_mult","point_elm","data_row","row_obj","pointElement","theta","cartesian2polar","radians2degrees","point_in_polygon","vs","inside","RadialBar","_domainScale","_valueScale","_radialAxis","_axialAxis","_arcs","valueDomainHigh_exists","valueDomainHigh","valueMaxAngle","chartRadius","domainData","domainPadding","domainCircles","domainText","valueLines","degrees","valueColumn","transitionDelay","transitionDuration","indx","_current","palette","ordinal","StatChart","_bellCurve","xAxisOverlapMode","xAxisTickFormat","yAxisHidden","_candle","stdDev","mean","standardDeviation","formatStdDev","_tickFormatter","quartile","formatQ","mode","_mean","_standardDeviation","quartiles","_quartiles","_selectMode","bellTicks","domainLow","domainHigh","sd","updateScatter","xAxisTicks","candleHeight","updateCandle","candleX","candleW","num","strVal","TEXT","HTML","Summary","_playIntervalIdx","_tag","playInterval","lookupFieldIdx","propID","defaultIdx","lookupFieldText","currentRow","summaryData","labelFieldIdx","hideLabel","moreIconIdx","moreTextIdx","iconFieldIdx","valueFieldIdx","hideMore","colorFillIdx","colorStrokeIdx","formattedData","icon","moreIcon","moreText","colorStroke","_mainDiv","_headerDiv","_textDiv","fixedSize","minWidth_exists","minWidth","minHeight_exists","minHeight","iconFontSize","headerFontSize","valueHTML","textFontSize","labelHTML","moreDivs","moreDivsUpdate","hideMoreWrapper","moreFontSize","moreWrapperHeight_exists","moreWrapperHeight","d3Rgb","darker","moreTextHTML","innerHTML","iconColumn","moreIconColumn","moreTextColumn","colorFillColumn","colorStrokeColumn","_playIntervalHandle","clearInterval","context_1","setInterval","_renderCount","SummaryC","minDimension","sizeRatio","fontSizeRatio","labelIdx","labelColumn","valueIdx","bgColorIdx","fontColorIdx","iconIdx","bgColor","fontColor","mainFontSize","paddingSizeRatio","subFontSize","iconSize","iconSizeRatio","anchorMode","textBaseline","font","measurement","measureText","getTextOffsetX","fillText","drawIcon","iconBaseline","fontSizeMult","getTextOffsetY","iconOpacity","faChar","iconAnchor","valueOpacity","labelOpacity","CanvasWidget","cloudRadians","ch","d3Cloud","cloud","cloudText","cloudFont","cloudFontSize","fontStyle","cloudFontNormal","fontWeight","cloudRotate","cloudPadding","spiral","archimedeanSpiral","timeInterval","timer","cloudCanvas","board","tag","dxdy","startX","startY","maxDelta","dt","cloudCollide","sprite","sw","lx","sx","msx","last","functor","contextAndRatio","strokeStyle","textAlign","zeroArray","cloudSprite","hasText","cloudBounds","spirals","di","maxh","save","cr","wcr","wsr","hcr","hsr","translate","strokeText","restore","xoff","yoff","w32","seen","seenRow","b0","b1","archimedean","rectangular","WordCloud","_prevOffsetX","_prevOffsetY","_prevZoom","zoom","calcData","__viz_label","__viz_weight","__viz_row","_root","_d3Zoom","d3Zoom","scaleExtent","evt","zoomed","_d3Cloud","scaler","scaleMode","fontSizeFrom","fontSizeTo","angleDomain","angleCount","angleFrom","angleTo","trim","toLowerCase"],"mappings":"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","sourcesContent":["export const PKG_NAME = \"@hpcc-js/chart\";\r\nexport const PKG_VERSION = \"2.79.1\";\r\nexport const BUILD_VERSION = \"2.103.5\";\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","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","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { publish, 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 protected parser;\n protected parserInvert;\n protected formatter: (date: Date) => string;\n protected d3Scale;\n protected d3Axis;\n protected d3Guides;\n protected _guideElement;\n protected svg;\n protected svgAxis;\n protected svgGuides;\n\n @publish(\"linear\", \"set\", \"Type\", [\"none\", \"ordinal\", \"linear\", \"pow\", \"log\", \"time\"])\n _type: string;\n type(): string;\n type(_: string): this;\n type(_?: string): string | this {\n if (!arguments.length) return this._type;\n this._type = _;\n this.updateScale();\n return this;\n }\n\n @publish(\"%Y-%m-%d\", \"string\", \"Time Series Pattern\", null, { disable: (w: any) => w.type() !== \"time\" })\n _timePattern: string;\n timePattern(): string;\n timePattern(_: string): this;\n timePattern(_?: string): string | this {\n if (!arguments.length) return this._timePattern;\n this._timePattern = _;\n this.updateScale();\n return this;\n }\n timePattern_exists: () => boolean;\n\n @publish(false, \"boolean\", \"Reverse\")\n reverse: publish<this, boolean>;\n\n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n super();\n this._drawStartPos = drawStartPosition;\n\n this.updateScale();\n }\n\n lowValue() {\n return this.parse(this.low());\n }\n\n highValue() {\n return this.parse(this.high());\n }\n\n parse(d, forceNumeric?) {\n if (d instanceof Array) {\n return d.map(function (d2) {\n return this.parse(d2);\n }, this);\n }\n if (d !== undefined && d !== null) {\n if (this.parser) {\n return this.parser(typeof d === \"number\" ? d.toString() : d);\n }\n if (forceNumeric && typeof d === \"string\") {\n return +d;\n }\n }\n return d;\n }\n\n parseInvert(d) {\n if (d instanceof Array) {\n return d.map(function (d2) {\n return this.parseInvert(d2);\n }, this);\n }\n if (this.parserInvert && d) {\n return this.parserInvert(d);\n }\n return d;\n }\n\n format(d) {\n if (d instanceof Array) {\n return d.map(function (d2) {\n return this.format(d2);\n }, this);\n }\n if (d !== undefined && d !== null && this.formatter) {\n return this.formatter(d);\n }\n return d;\n }\n\n parseFormat(d) {\n return this.format(this.parse(d));\n }\n\n scalePos(d) {\n let retVal = this.d3Scale(this.parse(d));\n if (this.type() === \"ordinal\") {\n retVal += this.bandwidth() / 2;\n }\n return retVal;\n }\n\n bandwidth() {\n return this.d3Scale.bandwidth ? this.d3Scale.bandwidth() : 0;\n }\n\n isHorizontal() {\n switch (this.orientation()) {\n case \"left\":\n case \"right\":\n return false;\n default:\n }\n return true;\n }\n\n domain(_) {\n if (!arguments.length) return this.d3Scale.domain();\n this.d3Scale.domain(_);\n return this;\n }\n\n range(_) {\n if (!arguments.length) {\n if (this.d3Scale.rangeRoundBands) {\n return this.d3Scale.rangeExtent();\n } else if (this.d3Scale.rangeRound) {\n return this.d3Scale.range();\n }\n }\n if (this.d3Scale.rangeRoundBands) {\n this.d3Scale.rangeRoundBands(_, 0.1);\n } else if (this.d3Scale.rangeRound) {\n this.d3Scale.range(_);\n }\n return this;\n }\n\n invert(pos) {\n return this.d3Scale.invert(pos);\n }\n\n guideTarget(_) {\n this._guideElement = d3Select(_)\n .attr(\"class\", this._class)\n ;\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this.svg = element.append(\"g\");\n this.svgAxis = this.svg.append(\"g\")\n .attr(\"class\", \"axis\")\n ;\n this.svgGuides = (this._guideElement || element).append(\"g\")\n .attr(\"class\", \"guide\")\n ;\n }\n\n protected _prevOrientation;\n updateScale(): this {\n switch (this.type()) {\n case \"ordinal\":\n this.d3Scale = d3ScaleBand()\n .paddingInner(this.ordinalPaddingInner())\n .paddingOuter(this.ordinalPaddingOuter())\n ;\n if (this.ordinals_exists()) {\n this.d3Scale.domain(this.ordinals());\n }\n this.parser = null;\n if (this.ordinalMappings_exists()) {\n const mappings = this.ordinalMappings();\n this.formatter = (_: any) => mappings[_] || _;\n } else {\n this.formatter = null;\n }\n break;\n case \"linear\":\n this.d3Scale = d3ScaleLinear();\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = null;\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n break;\n case \"pow\":\n this.d3Scale = d3ScalePow()\n .exponent(this.powExponent())\n ;\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = null;\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n break;\n case \"log\":\n this.d3Scale = d3ScaleLog()\n .base(this.logBase())\n ;\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = null;\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n break;\n case \"time\":\n this.d3Scale = d3ScaleTime();\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = this.timePattern_exists() ? d3TimeParse(this.timePattern()) : null;\n this.parserInvert = this.timePattern_exists() ? d3TimeFormat(this.timePattern()) : null;\n this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\n break;\n default:\n }\n if (this._prevOrientation !== this.orientation()) {\n switch (this.orientation()) {\n case \"left\":\n this.d3Axis = d3AxisLeft(this.d3Scale);\n this.d3Guides = d3AxisLeft(this.d3Scale);\n break;\n case \"top\":\n this.d3Axis = d3AxisTop(this.d3Scale);\n this.d3Guides = d3AxisTop(this.d3Scale);\n break;\n case \"right\":\n this.d3Axis = d3AxisRight(this.d3Scale);\n this.d3Guides = d3AxisRight(this.d3Scale);\n break;\n case \"bottom\":\n default:\n this.d3Axis = d3AxisBottom(this.d3Scale);\n this.d3Guides = d3AxisBottom(this.d3Scale);\n break;\n }\n this._prevOrientation = this.orientation();\n if (this.svgAxis) {\n this.svgAxis.html(\"\");\n }\n if (this.svgGuides) {\n this.svgGuides.html(\"\");\n }\n }\n\n if (this.extend()) {\n switch (this.type()) {\n case \"ordinal\":\n break;\n default:\n let length;\n let delta;\n let low;\n let high;\n let newLow;\n let newHigh;\n if (this.isHorizontal()) {\n length = this.width();\n this.d3Scale.range([0, length]);\n delta = length * this.extend() / 100;\n low = this.d3Scale.invert(0);\n newLow = this.d3Scale.invert(-delta);\n high = this.d3Scale.invert(length);\n newHigh = this.d3Scale.invert(length + delta);\n } else {\n length = this.height();\n this.d3Scale.range([length, 0]);\n delta = length * this.extend() / 100;\n low = this.d3Scale.invert(length);\n newLow = this.d3Scale.invert(length + delta);\n high = this.d3Scale.invert(0);\n newHigh = this.d3Scale.invert(-delta);\n }\n if (newLow === low) { // Edge case when there is only one item in the domain ---\n newLow = low - low * this.extend() / 100;\n }\n if (newHigh === high) { // Edge case when there is only one item in the domain ---\n newHigh = high + high * this.extend() / 100;\n }\n if ((Math as any).sign(low) !== (Math as any).sign(newLow)) {\n newLow = 0;\n }\n if ((Math as any).sign(high) !== (Math as any).sign(newHigh)) {\n newHigh = 0;\n }\n this.d3Scale.domain([newLow, newHigh]);\n break;\n }\n }\n 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 : 0;\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\n title: { (): string; (_: string): Axis; };\n orientation: { (): string; (_: string): Axis; };\n orientation_default: { (): string; (_: string): Axis; };\n powExponent: { (): number; (_: number): Axis; };\n logBase: { (): number; (_: number): Axis; };\n ordinals: { (): string[]; (_: string[]): Axis; };\n ordinals_exists: () => boolean;\n fontSize: { (): number; (_: number): Axis; };\n fontSize_exists: () => boolean;\n fontFamily: { (): string; (_: string): Axis; };\n tickCount: { (): number; (_: number): Axis; };\n tickFormat: { (): string; (_: string): Axis; };\n tickFormat_exists: () => boolean;\n tickLength: { (): number; (_: number): Axis; };\n tickLength_exists: () => boolean;\n ticks: { (): Array<{ value: string, label: string }>; (_: Array<{ value: string, label: string }>): Axis; };\n xAxisDomainLow: { (): string; (_: string): Axis; };\n xAxisDomainHigh: { (): string; (_: string): Axis; };\n low: { (): any; (_: any): Axis; };\n low_exists: () => boolean;\n high: { (): any; (_: any): Axis; };\n high_exists: () => boolean;\n overlapMode: { (): string; (_: string): Axis; };\n overlapMode_default: { (): string; (_: string): Axis; };\n labelRotation: { (): number; (_: number): Axis; };\n shrinkToFit: { (): string; (_: string): Axis; };\n shrinkToFit_default: { (): string; (_: string): Axis; };\n extend: { (): number; (_: number): Axis; };\n extend_default: { (): number; (_: number): Axis; };\n hidden: { (): boolean; (_: boolean): Axis; };\n}\nAxis.prototype._class += \" chart_Axis\";\n\nexport interface Axis {\n title_exists(): boolean;\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}\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'\");\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 });\n","import { d3Event, select as d3Select, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { max as d3Max, min as d3Min } from \"d3-array\";\nimport { brush as d3Brush, brushSelection as d3BrushSelection, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\";\nimport { hsl as d3Hsl } from \"d3-color\";\nimport { Axis } from \"./Axis\";\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 _palette;\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n\n this.domainAxis = new Axis()\n .classed({ domain: true })\n .orientation_default(\"bottom\")\n .type(\"ordinal\")\n .overlapMode_default(\"stagger\")\n .shrinkToFit_default(\"high\")\n .extend_default(0)\n ;\n this.valueAxis = new Axis()\n .classed({ value: true })\n .orientation_default(\"left\")\n .type(\"linear\")\n .shrinkToFit_default(\"high\")\n ;\n\n this.xyBrush = d3Brush()\n .on(\"end\", () => {\n return this.brushMoved();\n })\n .on(\"start.handle brush.handle end.handle\", () => {\n return this.brushMoved2();\n })\n ;\n this.xBrush = d3BrushX()\n .on(\"end\", () => {\n return this.brushMoved();\n })\n .on(\"start.handle brush.handle end.handle\", () => {\n return this.brushMoved2();\n })\n ;\n this.yBrush = d3BrushY()\n .on(\"end\", () => {\n return this.brushMoved();\n })\n .on(\"start.handle brush.handle end.handle\", () => {\n return this.brushMoved2();\n })\n ;\n }\n\n protected _prevBrush;\n resetSelection() {\n this._prevBrush = null;\n return this;\n }\n\n parseData(d) {\n return this.domainAxis.parse(d);\n }\n\n parseValue(d) {\n return this.valueAxis.parse(d, true);\n }\n\n formatData(d) {\n return this.domainAxis.format(d);\n }\n\n formatValue(d) {\n return this.valueAxis.format(d);\n }\n\n parsedData() {\n const retVal = this.data().map(function (row) {\n let prevValue = 0;\n return row.map(function (cell, idx) {\n if (idx === 0) {\n return this.parseData(cell);\n }\n if (idx >= this.columns().length) {\n return cell;\n }\n const _retVal = this.yAxisStacked() ? [prevValue, prevValue + this.parseValue(cell)] : this.parseValue(cell);\n prevValue += this.parseValue(cell);\n return _retVal;\n }, this);\n }, this);\n return retVal;\n }\n\n bandwidth() {\n return this.domainAxis.bandwidth();\n }\n\n protected svg;\n protected svgRegions;\n protected svgDomainGuide;\n protected svgValueGuide;\n protected svgData;\n protected svgDataClipRect;\n protected svgFocus;\n protected svgBrush;\n enter(domNode, element) {\n super.enter(domNode, element);\n this.svg = element.append(\"g\");\n this.svgRegions = element.append(\"g\");\n this.svgDomainGuide = this.svg.append(\"g\");\n this.svgValueGuide = this.svg.append(\"g\");\n this.svgData = this.svg.append(\"g\");\n\n this.svgDataClipRect = this.svg.append(\"clipPath\")\n .attr(\"id\", this.id() + \"_clippath\")\n .append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n ;\n this.svgData = this.svg.append(\"g\")\n .attr(\"clip-path\", \"url(#\" + this.id() + \"_clippath)\")\n ;\n this._selection.widgetElement(this.svgData);\n\n this.svgFocus = element.append(\"g\");\n\n this.domainAxis\n .target(this.svg.node())\n .guideTarget(this.svgDomainGuide.node())\n ;\n\n this.valueAxis\n .target(this.svg.node())\n .guideTarget(this.svgValueGuide.node())\n ;\n\n this.svgBrush = element.append(\"g\")\n .attr(\"class\", \"brush\")\n ;\n this.chartsEnter(this, this.svgData, 250);\n }\n\n resizeBrushHandle(d, width, height) {\n let e;\n let x;\n let y;\n if (d.type === \"e\" || d.type === \"w\") {\n e = +(d.type === \"e\");\n x = e ? 1 : -1;\n y = height / 3;\n return \"M\" + (0.5 * x) + \",\" + y +\n \"A6,6 0 0 \" + e + \" \" + (6.5 * x) + \",\" + (y + 6) +\n \"V\" + (2 * y - 6) +\n \"A6,6 0 0 \" + e + \" \" + (0.5 * x) + \",\" + (2 * y) +\n \"Z\" +\n \"M\" + (2.5 * x) + \",\" + (y + 8) +\n \"V\" + (2 * y - 8) +\n \"M\" + (4.5 * x) + \",\" + (y + 8) +\n \"V\" + (2 * y - 8);\n } else {\n e = +(d.type === \"s\");\n y = e ? 1 : -1;\n x = width / 3;\n return \"M\" + x + \", \" + (0.5 * y) +\n \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (x + 6) + \",\" + (6.5 * y) +\n \"H\" + (2 * x - 6) +\n \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (2 * x) + \",\" + (0.5 * y) +\n \"Z\" +\n \"M\" + (x + 8) + \",\" + (2.5 * y) +\n \"H\" + (2 * x - 8) +\n \"M\" + (x + 8) + \",\" + (4.5 * y) +\n \"H\" + (2 * x - 8);\n }\n }\n\n private _skipSelection = false;\n skipSelection(): boolean;\n skipSelection(_: boolean): this;\n skipSelection(_?: boolean): boolean | this {\n if (!arguments.length) return this._skipSelection;\n this._skipSelection = _;\n return this;\n }\n\n brushMoved() {\n if (this._skipSelection) return;\n let selected = [];\n const context = this;\n const currSel: any = d3BrushSelection(this.svgBrush.node());\n if (currSel) {\n selected = this.data().filter(function (d) {\n const pos = context.dataPos(d[0]);\n if (context.use2dSelection()) {\n const pos2 = context.valuePos(d[1]) + context.valueAxis.bandwidth() / 2;\n return pos >= currSel[0][0] && pos <= currSel[1][0] && pos2 >= currSel[0][1] && pos2 <= currSel[1][1];\n } else {\n return pos >= currSel[0] && pos <= currSel[1];\n }\n });\n }\n this.selection(selected);\n }\n\n brushMoved2() {\n const isHorizontal = this.orientation() === \"horizontal\";\n const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n const s = d3Event().selection;\n if (s == null) {\n handlePath.attr(\"display\", \"none\");\n } else if (isHorizontal) {\n handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + s[i] + \",\" + 0 + \")\");\n } else {\n handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + 0 + \", \" + s[i] + \")\");\n }\n }\n\n dataPos(d) {\n return this.domainAxis.scalePos(d);\n }\n\n valuePos(d) {\n return this.valueAxis.scalePos(d);\n }\n\n getAxisSize(host: XYAxis): { width: number, height: number } {\n return {\n width: !this.xAxis ? host.xAxis.width() : this.xAxis.width(),\n height: !this.yAxis ? host.yAxis.width() : this.yAxis.height()\n };\n }\n\n calcMargin(_domNode, element, isHorizontal) {\n const margin = {\n top: !isHorizontal && this.selectionMode() ? 10 : 2,\n right: isHorizontal && (this.selectionMode() || this.xAxisFocus()) ? 10 : 2,\n bottom: (this.xAxisFocus() ? this.xAxisFocusHeight() : 0) + 2,\n left: 2\n };\n const width = this.width() - margin.left - margin.right;\n const height = this.height() - margin.top - margin.bottom;\n\n let xRight = 0;\n let xHeight = 30;\n let yTop = 0;\n let yWidth = 30;\n for (let i = 0; i < 10; ++i) {\n this.xAxis.width(width - yWidth).height(0);\n const xAxisOverlap = this.xAxis.calcOverflow(element);\n const newXHeight = xAxisOverlap.depth;\n\n this.yAxis.width(0).height(height - xHeight);\n const yAxisOverlap = this.yAxis.calcOverflow(element);\n const newYWidth = yAxisOverlap.depth;\n\n xRight = xAxisOverlap.right;\n yTop = yAxisOverlap.top;\n\n if (newXHeight === xHeight && newYWidth === yWidth) {\n break;\n }\n xHeight = newXHeight;\n yWidth = newYWidth;\n }\n this.xAxis\n .x(width / 2 + yWidth / 2 + margin.left)\n .y(height + margin.top)\n .width(width - yWidth)\n ;\n this.yAxis\n .x(margin.left)\n .y(height / 2 - xHeight / 2 + margin.top)\n .height(height - xHeight)\n ;\n margin.left += yWidth;\n margin.top += yTop;\n margin.right += xRight;\n margin.bottom += xHeight;\n return margin;\n }\n\n updateRegions(_domNode, _element, isHorizontal) {\n const context = this;\n\n const regions = this.svgRegions.selectAll(\".region\").data(this.regions());\n regions.enter().append(\"rect\")\n .attr(\"class\", \"region\")\n ;\n if (isHorizontal) {\n regions\n .attr(\"x\", function (d) { return context.dataPos(d.x0); })\n .attr(\"y\", 0)\n .attr(\"width\", function (d) { return context.dataPos(d.x1) - context.dataPos(d.x0); })\n .attr(\"height\", this.height())\n .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n ;\n } else {\n regions\n .attr(\"x\", 0)\n .attr(\"y\", function (d) { return context.dataPos(d.x0); })\n .attr(\"width\", this.width())\n .attr(\"height\", function (d) { return context.dataPos(d.x0) - context.dataPos(d.x1); })\n .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n ;\n }\n regions.exit().remove();\n }\n\n protected _prevXAxisType;\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n const isHorizontal = this.orientation() === \"horizontal\";\n this.updateRegions(domNode, element, isHorizontal);\n\n this.domainAxis\n .orientation(isHorizontal ? \"bottom\" : \"left\")\n .title(this.xAxisTitle_exists() ? this.xAxisTitle() : this.columns()[0])\n ;\n this.valueAxis\n .orientation(isHorizontal ? \"left\" : \"bottom\")\n ;\n this.xAxis = isHorizontal ? this.domainAxis : this.valueAxis;\n this.yAxis = isHorizontal ? this.valueAxis : this.domainAxis;\n\n // Update Domain ---\n switch (this.xAxisType()) {\n case \"ordinal\":\n const colLen = this.columns().length;\n const ordinalMappings = {};\n this.domainAxis\n .ordinals(this.data().map(function (d) {\n ordinalMappings[d[0]] = context.xAxisOrdinalMapping(d, d[colLen]);\n return d[0];\n }))\n .ordinalMappings(ordinalMappings)\n ;\n\n break;\n default:\n const domainMin = this.xAxisDomainLow() ? this.xAxisDomainLow() : this.domainAxis.parseInvert(d3Min(this.parsedData(), function (data) {\n return data[0];\n }));\n const domainMax = this.xAxisDomainHigh() ? this.xAxisDomainHigh() : this.domainAxis.parseInvert(d3Max(this.parsedData(), function (data) {\n return data[0];\n }));\n if (domainMin !== undefined && domainMax !== undefined) {\n this.domainAxis\n .low(domainMin)\n .high(domainMax)\n ;\n }\n break;\n }\n\n const min = this.yAxisDomainLow() ? this.yAxisDomainLow() : this.valueAxis.parseInvert(d3Min(this.parsedData(), function (data: any[]) {\n return d3Min(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[0] : d; });\n }));\n const max = this.yAxisDomainHigh() ? this.yAxisDomainHigh() : this.valueAxis.parseInvert(d3Max(this.parsedData(), function (data: any[]) {\n return d3Max(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[1] : d; });\n }));\n this.valueAxis\n .low(min)\n .high(max)\n ;\n\n // Calculate Margins ---\n this.margin = this.calcMargin(domNode, element, isHorizontal);\n\n // Update Range ---\n let width = this.width() - this.margin.left - this.margin.right;\n if (width < 0) width = 0;\n let height = this.height() - this.margin.top - this.margin.bottom;\n if (height < 0) height = 0;\n const maxCurrExtent = isHorizontal ? width : height;\n const maxOtherExtent = isHorizontal ? height : width;\n\n // Render ---\n this.domainAxis\n .tickLength(this.xAxisGuideLines() ? maxOtherExtent : 0)\n .render()\n ;\n this.valueAxis\n .tickLength(this.yAxisGuideLines() ? maxCurrExtent : 0)\n .render()\n ;\n\n this.svgDataClipRect\n .attr(\"width\", width)\n .attr(\"height\", height)\n ;\n this.svgData.transition()\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\")\n ;\n\n this.updateBrush(width, height, maxCurrExtent, isHorizontal);\n this.updateFocusChart(domNode, element, this.margin, width, height, isHorizontal);\n this.chartsUpdate(width, height, 250);\n if (this.selectionMode()) {\n return this.brushMoved();\n }\n }\n\n updateBrush(width, height, maxCurrExtent, isHorizontal) {\n const currBrush = this.use2dSelection() ? this.xyBrush : isHorizontal ? this.xBrush : this.yBrush;\n const prevBrushSel: any = d3BrushSelection(this.svgBrush.node());\n currBrush.extent([[0, 0], [width, height]]);\n this.svgBrush\n .attr(\"transform\", \"translate(\" + this.margin.left + \", \" + this.margin.top + \")\")\n .style(\"display\", this.selectionMode() ? null : \"none\")\n .call(currBrush)\n ;\n const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n handlePath.enter().append(\"path\")\n .attr(\"class\", \"handle--custom\")\n .merge(handlePath)\n .attr(\"cursor\", isHorizontal ? \"ew-resize\" : \"ns-resize\")\n .attr(\"d\", (d) => this.resizeBrushHandle(d, width, height))\n ;\n\n if (this.selectionMode()) {\n if (this._prevXAxisType !== this.xAxisType()) {\n this._prevXAxisType = this.xAxisType();\n this._prevBrush = null;\n }\n if (this._prevBrush) {\n if (prevBrushSel) {\n if (this._prevBrush.orientation !== this.orientation()) {\n const tmp = prevBrushSel[0];\n prevBrushSel[0] = this._prevBrush.maxCurrExtent - prevBrushSel[1];\n prevBrushSel[1] = this._prevBrush.maxCurrExtent - tmp;\n }\n const ratio = maxCurrExtent / this._prevBrush.maxCurrExtent;\n if (ratio !== 1) {\n this.svgBrush.transition()\n .on(\"start\", function () {\n currBrush.on(\"end\", null);\n })\n .call(currBrush.move, [prevBrushSel[0] * ratio, prevBrushSel[1] * ratio])\n .on(\"end\", () => {\n currBrush.on(\"end\", () => {\n return this.brushMoved();\n });\n })\n ;\n }\n }\n } else {\n this.svgBrush\n .call(currBrush.move, [0, maxCurrExtent])\n ;\n }\n this._prevBrush = {\n orientation: this.orientation(),\n maxCurrExtent\n };\n }\n }\n\n updateFocusChart(domNode, element, margin, width, height, isHorizontal) {\n const context: XYAxis = this;\n const focusChart = this.svgFocus.selectAll(\"#\" + this.id() + \"_focusChart\").data(this.xAxisFocus() ? [true] : []);\n focusChart.enter().append(\"g\")\n .attr(\"id\", this.id() + \"_focusChart\")\n .attr(\"class\", \"focus\")\n .each(function () {\n context.focusChart = new (context.constructor as any)()\n .target(this)\n ;\n context.focusChart.xBrush\n .on(\"brush.focus\", function () {\n context.syncAxis(width);\n context.chartsUpdate(width, height, 0);\n })\n ;\n context.focusChart\n .layers(context.layers().map((w: any) => new w.constructor()))\n ;\n })\n .merge(focusChart)\n .each(function (this: SVGElement) {\n context.copyPropsTo(context.focusChart, [\"layers\"]);\n let layerIdx = 0;\n for (const layer of context.layers()) {\n layer.copyPropsTo(context.focusChart.layers()[layerIdx]);\n layerIdx++;\n }\n context.focusChart\n .xAxisFocus(false)\n .selectionMode(true)\n .skipSelection(true)\n .orientation(\"horizontal\")\n .xAxisGuideLines(false)\n .xAxisDomainLow(null)\n .xAxisDomainHigh(null)\n .yAxisGuideLines(false)\n .x(context.width() / 2)\n .y(context.height() - context.xAxisFocusHeight() / 2)\n .width(context.width())\n .height(context.xAxisFocusHeight())\n .columns(context.columns())\n .data(context.data())\n .render()\n ;\n context.syncAxis(width);\n })\n ;\n focusChart.exit()\n .each(function () {\n if (context.focusChart) {\n context.focusChart\n .target(null)\n ;\n delete context.focusChart;\n }\n })\n .remove()\n ;\n }\n\n syncAxis(width: number) {\n const currSel = d3BrushSelection(this.focusChart.svgBrush.node()) as [number, number];\n if (currSel) {\n if (this.focusChart.xAxisType() !== \"ordinal\") {\n this.xAxis.domain([this.focusChart.xAxis.invert(currSel[0]), this.focusChart.xAxis.invert(currSel[1])]);\n } else {\n const brushWidth = currSel[1] - currSel[0];\n const scale = brushWidth / width;\n this.xAxis.range([-currSel[0] / scale, (width - currSel[0]) / scale]);\n }\n this.xAxis.rerender();\n }\n }\n\n // Layers ---\n layerColumns(host: XYAxis): string[] {\n const masterColumns = host.columns();\n const retVal = super.columns().filter(col => col !== masterColumns[0]);\n if (!retVal.length) {\n return masterColumns;\n }\n return [masterColumns[0], ...retVal];\n }\n\n layerColumnIndices(host: XYAxis): number[] {\n const masterColumns = host.columns();\n const layerColumns = this.layerColumns(host);\n return layerColumns.map(col => masterColumns.indexOf(col));\n }\n\n layerColumnIndex(host: XYAxis, column: string): number {\n const masterColumns = host.columns();\n return masterColumns.indexOf(column);\n }\n\n layerData(host: XYAxis): any[][] {\n if (arguments.length === 1) {\n const indices = this.layerColumnIndices(host);\n return host.data().map(row => {\n const retVal = indices.map(idx => row[idx]);\n (retVal as any).__hpcc_origRow = row;\n return retVal;\n });\n }\n throw new Error(\"Setting data on XYAxisLayer is not supported.\");\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n }\n\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n }\n\n layerExit(host: XYAxis, element, duration: number = 250) {\n }\n\n chartsEnter(host: XYAxis, element, duration: number = 250) {\n this.layerEnter(this, element, duration);\n for (const w of this.layers()) {\n w[\"__xyAxisElement\"] = element.append(\"g\")\n .attr(\"class\", w.class())\n ;\n w\n .target(w[\"__xyAxisElement\"].node() as SVGElement)\n .layerEnter(this, element, duration)\n ;\n }\n }\n\n chartsUpdate(width, height, duration): void {\n this.layerUpdate(this, this.svgData, duration);\n for (const w of this.layers()) {\n w\n .resize({ width, height })\n .layerUpdate(this, w[\"__xyAxisElement\"], duration)\n ;\n }\n }\n\n exit(domNode, element) {\n this.valueAxis.target(null);\n this.domainAxis.target(null);\n super.exit(domNode, element);\n }\n\n selection(_selected) {\n const context = this;\n this._selection.widgetElement().selectAll(\".selected,.deselected\")\n .each(function (d) {\n const selected = _selected.indexOf(d.origRow) >= 0;\n d3Select(this)\n .classed(\"selected\", selected)\n .classed(\"deselected\", !selected)\n .attr(\"filter\", context._selection.svgGlowID() && selected ? `url(#${context._selection.svgGlowID()})` : null)\n ;\n })\n ;\n\n const selRows = _selected.map(d => {\n return this.rowToObj(d);\n });\n setTimeout(() => {\n this.click(selRows, \"\", true);\n }, 0);\n }\n\n // XYAxis ---\n xAxisOrdinalMapping(origRow, lparam) {\n return origRow[0];\n }\n\n // Events ---\n click(row, column, selected) {\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n }\n\n // Selection ---\n _selection: Utility.SimpleSelection;\n}\nXYAxis.prototype._class += \" chart_XYAxis\";\nXYAxis.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface XYAxis {\n 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}\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 });\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\";\n\nimport \"../src/Scatter.css\";\n\nexport class Scatter extends XYAxis {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"any\"\n }, {\n id: \"values\",\n type: \"number\",\n multi: true\n }];\n\n constructor() {\n super();\n INDChart.call(this);\n ITooltip.call(this);\n this\n .xAxisGuideLines_default(true)\n .yAxisGuideLines_default(true)\n ;\n }\n\n xPos(host: XYAxis, d) {\n return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n }\n\n yPos(host: XYAxis, d) {\n return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n }\n\n private curve(): any {\n switch (this.interpolate()) {\n case \"linear\":\n return d3CurveLinear;\n case \"step\":\n return d3CurveStep;\n case \"step-before\":\n return d3CurveStepBefore;\n case \"step-after\":\n return d3CurveStepAfter;\n case \"basis\":\n return d3CurveBasis;\n case \"bundle\":\n return d3CurveBundle;\n case \"cardinal\":\n return d3CurveCardinal;\n case \"catmullRom\":\n return d3curveCatmullRom;\n case \"natural\":\n return d3CurveNatural;\n case \"monotone\":\n default:\n return d3CurveMonotoneX;\n }\n }\n\n private getScale() {\n switch (this.pointSizeScale()) {\n case \"linear\":\n return d3ScaleLinear();\n case \"pow\":\n return d3ScalePow().exponent(2);\n case \"log\":\n return d3ScaleLog();\n case \"sqrt\":\n return d3ScaleSqrt();\n }\n }\n\n protected pointColor(row, col, value, origRow) {\n if (this.interpolate() && this.pointDarken()) {\n return this.strokeColor(row, col, value, origRow);\n }\n return this.fillColor(row, col, value, origRow);\n }\n\n protected lineColor(row, col, value, origRow) {\n if (this.interpolateFill() && this.interpolateDarken()) {\n return this.strokeColor(row, col, value, origRow);\n }\n return this.fillColor(row, col, value, origRow);\n }\n\n protected areaColor(row, col, value, origRow) {\n return this.fillColor(row, col, value, origRow);\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n super.layerEnter(host, element, duration);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.label,\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(column),\n value: context.data()[d.rowIdx][i + 1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.label, series: d.column, value: d.value });\n }\n })\n ;\n }\n\n protected _prevPointShape;\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n super.layerUpdate(host, element);\n const isHorizontal = host.orientation() === \"horizontal\";\n const height = isHorizontal ? this.height() : this.width();\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n if (this._prevPointShape !== this.pointShape()) {\n element.selectAll(\".data\").remove();\n this._prevPointShape = this.pointShape();\n }\n\n function mapShape(shape) {\n switch (shape) {\n case \"rectangle\":\n return \"rect\";\n case \"circle\":\n return \"circle\";\n case \"cross\":\n return \"path\";\n default:\n }\n }\n const usePointSizeColumn = this.pointSizeColumn_exists();\n let pointSizeColumnIdx;\n let extent;\n let scale;\n if (usePointSizeColumn) {\n pointSizeColumnIdx = this.columns().indexOf(this.pointSizeColumn());\n extent = d3Extent(this.data(), d => d[pointSizeColumnIdx]);\n scale = this.getScale().domain(extent);\n }\n const layerColumns = this.layerColumns(host);\n const layerData = this.layerData(host);\n const flatData = this.flattenData(layerColumns, layerData).map(function (d) {\n d.shape = mapShape(context.pointShape());\n d.column = layerColumns[d.colIdx];\n d.row = layerData[d.rowIdx];\n d.origRow = (layerData[d.rowIdx] as any).__hpcc_origRow;\n if (extent) {\n d.size = scale(d.row[pointSizeColumnIdx]) * (context.maxPointSize() - context.minPointSize()) + context.minPointSize();\n return d.column === context.pointSizeColumn() ? false : d;\n } else {\n d.size = context.pointSize();\n return d;\n }\n\n }).filter(d => d);\n\n const areas = element.selectAll(\".area\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && context.interpolateFill() && idx > 0; }));\n const areasEnter = areas.enter().append(\"path\");\n const area = d3Area()\n .curve(this.curve())\n ;\n if (isHorizontal) {\n area\n .x(function (d) { return context.xPos(host, d); })\n .y0(Math.min(height, this.yPos(host, { value: 0 })))\n .y1(function (d) { return context.yPos(host, d); })\n ;\n } else {\n area\n .y(function (d) { return context.yPos(host, d); })\n .x0(Math.max(0, this.xPos(host, { value: 0 })))\n .x1(function (d) { return context.xPos(host, d); })\n ;\n }\n areasEnter.merge(areas)\n .attr(\"class\", d => \"area series series-\" + this.cssTag(d))\n .each(function (_d, idx) {\n const element = d3Select(this);\n element\n .attr(\"d\", area(flatData.filter(function (d2) { return d2.colIdx === idx + 1; })))\n .style(\"opacity\", context.interpolateFillOpacity())\n .style(\"stroke\", \"none\")\n .style(\"fill\", context.areaColor([], _d, undefined, []))\n ;\n });\n areas.exit().remove();\n\n const lines = element.selectAll(\".line\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && idx > 0; }));\n const linesEnter = lines.enter().append(\"path\");\n const line = d3Line()\n .x(function (d) { return context.xPos(host, d); })\n .y(function (d) { return context.yPos(host, d); })\n .curve(this.curve())\n ;\n linesEnter.merge(lines)\n .attr(\"class\", d => \"line series series-\" + this.cssTag(d))\n .each(function (_d, idx) {\n const element = d3Select(this);\n const data2 = flatData.filter(function (d2) { return d2.colIdx === idx + 1; });\n element\n .attr(\"d\", line(data2))\n .style(\"stroke\", context.lineColor([], _d, undefined, []))\n .style(\"fill\", \"none\")\n ;\n });\n lines.exit().remove();\n\n const points = element.selectAll(\".point\").data(flatData, function (d, idx) { return d.shape + \"_\" + idx; });\n points.enter().append(\"g\")\n .each(function (this: SVGElement, d2) {\n const element = d3Select(this);\n element\n .append(d2.shape)\n .attr(\"class\", \"pointShape\")\n ;\n element\n .append(\"text\")\n .attr(\"class\", \"pointValue\")\n .style(\"display\", \"none\")\n .attr(\"text-anchor\", context.valueAnchor())\n .attr(\"alignment-baseline\", context.valueBaseline())\n .attr(\"fill\", function (d: any, _idx) {\n const useTextColor = context.valueBaseline() === \"middle\" || context.valueBaseline() === \"central\";\n return useTextColor ? context.textColor(d.row, d.column, d.value, d.origRow) : null;\n })\n ;\n element\n .append(\"circle\")\n .attr(\"class\", \"pointSelection\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .call(host._selection.enter.bind(host._selection))\n .on(\"click\", function (d: any, _idx) {\n context.click(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n })\n .on(\"dblclick\", function (d: any, _idx) {\n context.dblclick(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n })\n ;\n })\n .merge(points)\n .attr(\"class\", d => \"point series series-\" + this.cssTag(d.column))\n .each(function (this: SVGElement, d2) {\n const textSelection = d3Select(this).select(\".pointValue\");\n textSelection\n .attr(\"x\", function (d) { return context.xPos(host, d); })\n .attr(\"y\", function (d) { return context.yPos(host, d); })\n .style(\"display\", context.showValue() ? \"block\" : \"none\")\n .attr(\"text-anchor\", context.valueAnchor())\n .attr(\"alignment-baseline\", context.valueBaseline())\n .text(function (d) {\n return d[\"value\"];\n })\n ;\n const elementSelection = d3Select(this).select(\".pointSelection\");\n elementSelection\n .attr(\"cx\", function (d) { return context.xPos(host, d); })\n .attr(\"cy\", function (d) { return context.yPos(host, d); })\n .attr(\"r\", d2.size)\n ;\n\n const element = d3Select(this).select(\".pointShape\");\n switch (d2.shape) {\n case \"rect\":\n element\n .attr(\"x\", function (d) { return context.xPos(host, d) - d2.size / 2; })\n .attr(\"y\", function (d) { return context.yPos(host, d) - d2.size / 2; })\n .attr(\"width\", d2.size)\n .attr(\"height\", d2.size)\n .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n ;\n break;\n case \"circle\":\n element\n .attr(\"cx\", function (d) { return context.xPos(host, d); })\n .attr(\"cy\", function (d) { return context.yPos(host, d); })\n .attr(\"r\", d2.size * 0.9)\n .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n ;\n break;\n case \"path\":\n element\n .attr(\"d\", function (d: any) {\n return \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2) + \" \" +\n \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2);\n })\n .style(\"stroke\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n ;\n break;\n default:\n }\n })\n ;\n points.exit().remove();\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n paletteID: { (): string; (_: string): Scatter; };\n useClonedPalette: { (): boolean; (_: boolean): Scatter; };\n pointSizeScale: { (): string; (_: string): Scatter; };\n pointShape: { (): string; (_: string): Scatter; };\n pointSize: { (): number; (_: number): Scatter; };\n interpolate: { (): string; (_: string): Scatter; };\n interpolate_default: { (): string; (_: string): Scatter; };\n interpolateFill: { (): boolean; (_: boolean): Scatter; };\n interpolateFill_default: { (): boolean; (_: boolean): Scatter; };\n interpolateFillOpacity: { (): number; (_: number): Scatter; };\n\n // INDChart\n _palette;\n fillColor: (row, column, value, origRow) => string;\n strokeColor: (row, column, value, origRow) => string;\n textColor: (row, column, value, origRow) => string;\n dblclick: (row, column, selected) => void;\n\n // ITooltip\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n tooltipStyle: () => \"default\" | \"none\" | \"series-table\";\n}\nScatter.prototype._class += \" chart_Scatter\";\nScatter.prototype.implements(INDChart.prototype);\nScatter.prototype.implements(ITooltip.prototype);\nexport interface Scatter {\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}\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 {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import { Scatter } from \"./Scatter\";\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\";\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 isHorizontal: boolean;\n\n constructor() {\n super();\n INDChart.call(this);\n ITooltip.call(this);\n\n this._selection.skipBringToTop(true);\n\n this._linearGap = 25.0;\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n super.layerEnter(host, element, duration);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.row[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(column),\n value: d.row[i + 1]\n };\n })\n });\n default:\n let value = d.row[d.idx];\n if (value instanceof Array) {\n value = value[1] - value[0];\n }\n return context.tooltipFormat({ label: d.row[0], series: context.layerColumns(host)[d.idx], value });\n }\n })\n ;\n }\n\n adjustedData(host: XYAxis) {\n const retVal = this.layerData(host).map(row => {\n let prevValue = 0;\n return row.map((cell, idx) => {\n if (idx === 0) {\n return cell;\n }\n if (idx >= this.layerColumns(host).length) {\n return cell;\n }\n const retVal2 = host.yAxisStacked() ? [prevValue, prevValue + cell] : cell;\n prevValue += cell;\n return retVal2;\n }, this);\n }, this);\n return retVal;\n }\n\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n super.layerUpdate(host, element, duration);\n const isHorizontal = host.orientation() === \"horizontal\";\n this.isHorizontal = isHorizontal;\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n let dataLen = 10;\n let offset = 0;\n switch (host.xAxisType()) {\n case \"ordinal\":\n dataLen = host.bandwidth();\n offset = -dataLen / 2;\n break;\n case \"linear\":\n case \"time\":\n dataLen = Math.max(Math.abs(host.dataPos(2) - host.dataPos(1)) * (100 - this._linearGap) / 100, dataLen);\n offset = -dataLen / 2;\n break;\n default:\n }\n\n this.tooltip.direction(isHorizontal ? \"n\" : \"e\");\n\n const columnScale = d3ScaleBand()\n .domain(context.layerColumns(host).filter(function (_d, idx) { return idx > 0; }))\n .rangeRound(isHorizontal ? [0, dataLen] : [dataLen, 0])\n .paddingInner(this.xAxisSeriesPaddingInner())\n .paddingOuter(0)\n ;\n const rowData = this.adjustedData(host);\n let domainSums = [];\n const seriesSums = [];\n const columnLength = this.columns().length;\n if (this.showValue()) {\n switch (this.showValueAsPercent()) {\n case \"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 break;\n case \"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 break;\n case null:\n default:\n }\n }\n const column = element.selectAll(\".dataRow\")\n .data(this.adjustedData(host))\n ;\n const hostData = host.data();\n const axisSize = this.getAxisSize(host);\n column.enter().append(\"g\")\n .attr(\"class\", \"dataRow\")\n .merge(column)\n .each(function (dataRow, dataRowIdx) {\n const element = d3Select(this);\n\n const columnGRect = element.selectAll(\".dataCell\").data(dataRow.filter(function (_d, i) { return i < context.layerColumns(host).length; }).map(function (d, i) {\n return {\n column: context.layerColumns(host)[i],\n row: dataRow,\n origRow: hostData[dataRowIdx],\n value: d,\n idx: i\n };\n }).filter(function (d) { return d.value !== null && d.idx > 0; }), (d: any) => d.column);\n\n const columnGEnter = columnGRect\n .enter().append(\"g\")\n .attr(\"class\", \"dataCell\")\n .on(\"mouseout.tooltip\", function (d: any) {\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n context.tooltip.hide.apply(context, arguments);\n }\n })\n .on(\"mousemove.tooltip\", function (d: any) {\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n context.tooltip.show.apply(context, arguments);\n }\n })\n .call(host._selection.enter.bind(host._selection))\n .on(\"click\", function (d: any) {\n context.click(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n })\n .on(\"dblclick\", function (d: any) {\n context.dblclick(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n })\n .style(\"opacity\", 0)\n .each(function (this: SVGElement, d: any) {\n const element = d3Select(this);\n element.append(\"rect\")\n .attr(\"class\", \"columnRect series series-\" + context.cssTag(d.column))\n ;\n element.append(\"text\")\n .attr(\"class\", \"columnRectText\")\n .style(\"stroke\", \"transparent\")\n ;\n })\n ;\n columnGEnter.transition().duration(duration)\n .style(\"opacity\", 1)\n ;\n const domainLength = host.yAxisStacked() ? dataLen : columnScale.bandwidth();\n columnGEnter.merge(columnGRect as any).each(function (this: SVGElement, d: any) {\n const element = d3Select(this);\n const domainPos = host.dataPos(dataRow[0]) + (host.yAxisStacked() ? 0 : columnScale(d.column)) + offset;\n const upperValue = d.value instanceof Array ? d.value[1] : d.value;\n let valueText = d.origRow[d.idx];\n if (context.showValue()) {\n const dm = context.dataMeta();\n switch (context.showValueAsPercent()) {\n case \"series\":\n const seriesSum = typeof dm.sum !== \"undefined\" ? dm.sum : seriesSums[d.idx];\n valueText = d3Format(context.showValueAsPercentFormat())(valueText / seriesSum);\n break;\n case \"domain\":\n const domainSum = typeof dm.sum !== \"undefined\" ? dm.sum : domainSums[d.idx];\n valueText = d3Format(context.showValueAsPercentFormat())(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\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 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())\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 column.exit().transition().duration(duration)\n .remove()\n ;\n }\n\n calcInnerText(offset, innerText, valueText) {\n\n const fontFamily = this.innerTextFontFamily_exists() ? this.innerTextFontFamily() : \"Verdana\";\n const fontSize = this.innerTextFontSize();\n const valueFontFamily = this.valueFontFamily_exists() ? this.valueFontFamily() : \"Verdana\";\n const valueFontSize = this.valueFontSize();\n const padding = this.innerTextPadding_exists() ? this.innerTextPadding() : fontSize / 2.5;\n const valueTextWidth = this.isHorizontal ? valueFontSize : this.textSize(valueText, valueFontFamily, valueFontSize).width;\n const ellipsisWidth = this.textSize(\"...\", fontFamily, fontSize).width;\n const innerTextWidth = this.textSize(innerText, fontFamily, fontSize).width;\n const origInnerText = innerText;\n\n const fullWidth = (padding * 3) + innerTextWidth + valueTextWidth;\n const fullWidth2 = (padding * 3) + ellipsisWidth + valueTextWidth;\n const fullWidth3 = (padding * 1) + valueTextWidth;\n /*\n Categories:\n 1) room to display inner text (with padding) AND value text (with padding)\n 2) room to display ellipsis (with padding) AND value text (with padding)\n 3) room to display value text only (with padding)\n 4) no room to display any text except value on the outside\n */\n let category = 4;\n if (fullWidth < offset) {\n category = 1;\n } else if (fullWidth2 < offset) {\n const excessWidth = offset - fullWidth2;\n let _text = \"\";\n for (const letter of innerText) {\n if (this.textSize(_text + letter, fontFamily, fontSize).width > excessWidth) {\n innerText = _text + \"...\";\n break;\n } else {\n _text += letter;\n }\n }\n category = 2;\n } else if (fullWidth3 < offset) {\n innerText = \"\";\n category = 3;\n } else {\n innerText = \"\";\n }\n\n return {\n text: innerText,\n isTruncated: origInnerText !== innerText,\n padding,\n category,\n valueTextWidth\n };\n }\n\n innerText(origRow, lparam, idx): string {\n return origRow[0];\n }\n\n // INDChart ---\n _palette;\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}\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 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\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\", \".2s\", \"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(\"valueCentered\", false, \"boolean\", \"Show Value in center of column\");\nColumn.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nColumn.prototype.publish(\"xAxisSeriesPaddingInner\", 0, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\");\nColumn.prototype.publish(\"tooltipInnerTextEllipsedOnly\", false, \"boolean\", \"Show tooltip only when inner text is truncated with an ellipsis\");\n\n/*\nconst origUseClonedPalette = Column.prototype.useClonedPalette;\nColumn.prototype.useClonedPalette = function (this: Column, _?) {\n const retVal = origUseClonedPalette.apply(this, arguments);\n if (arguments.length) {\n this._useClonedPalette = _;\n }\n return retVal;;\n}\n*/\n","import { Column } from \"./Column\";\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","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {shuffle, slice} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { FAChar, InputField, ISize, SVGWidget, Text, Utility } from \"@hpcc-js/common\";\nimport { hierarchy as d3Hierarchy, pack as d3Pack } from \"d3-hierarchy\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Bubble.css\";\n\nexport class Bubble extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n labelWidgets;\n d3Pack;\n\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n\n this.labelWidgets = {};\n\n this.d3Pack = d3Pack()\n .size([this.width(), this.height()])\n .padding(1.5)\n ;\n }\n\n size(): ISize;\n size(_): this;\n size(_?): ISize | this {\n const retVal = super.size.apply(this, arguments);\n if (arguments.length) {\n this.d3Pack\n .size([this.width(), this.height()])\n ;\n }\n return retVal;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._selection.widgetElement(element);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(d[0]),\n value: d[1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n }\n })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n const root = d3Hierarchy({ children: this.cloneData() })\n .sum(function (d) { return d[1]; })\n .sort(function (b, a) {\n return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;\n })\n ;\n this.d3Pack(root);\n\n const node = element.selectAll(\".node\").data(root.children || [], d => d.data[0]);\n\n // Enter ---\n node.enter().append(\"g\")\n .attr(\"class\", (d, i) => \"node series series-\" + this.cssTag(d.data[0]))\n .attr(\"opacity\", 0)\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .each(function (d) {\n const element2 = d3Select(this);\n const pos = { x: d.x, y: d.y };\n element2.append(\"circle\")\n .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\n .attr(\"r\", 0)\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n ;\n if (d.__viz_faChar) {\n context.labelWidgets[d.data[0]] = new FAChar()\n .char(d.__viz_faChar)\n .target(this)\n .render()\n ;\n } else {\n context.labelWidgets[d.data[0]] = new Text()\n .text(d.data[0])\n .target(this)\n .render()\n ;\n }\n })\n .merge(node).transition()\n .attr(\"opacity\", 1)\n .each(function (d) {\n const element2 = d3Select(this);\n const pos = { x: d.x, y: d.y };\n element2.select(\"circle\").transition()\n .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n .attr(\"r\", d.r)\n .select(\"title\")\n .text(d.data[0] + \" (\" + d.data[1] + \")\")\n ;\n if (d.__viz_faChar) {\n context.labelWidgets[d.data[0]]\n .pos(pos)\n .render()\n ;\n } else {\n context.labelWidgets[d.data[0]]\n .pos(pos)\n .colorFill_default(context.textColor(d.data, context.columns()[1], d.data[1]))\n .width(d.r * 2)\n .text(d.data[0])\n .render()\n ;\n }\n })\n ;\n\n // Exit ---\n node.exit().transition()\n .style(\"opacity\", 0)\n .remove()\n ;\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n paletteID: { (): string; (_: string): Bubble; };\n useClonedPalette: { (): boolean; (_: boolean): Bubble; };\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}\nBubble.prototype._class += \" chart_Bubble\";\nBubble.prototype.implements(I2DChart.prototype);\nBubble.prototype.implements(ITooltip.prototype);\nBubble.prototype.mixin(Utility.SimpleSelectionMixin);\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\";\n\nexport class BubbleXY extends Scatter {\n constructor() {\n super();\n }\n enter(domNode, element) {\n if (!this.pointSizeColumn_exists()) {\n this.pointSizeColumn(this.columns()[this.columns().length - 1]);\n }\n super.enter(domNode, element);\n }\n}\nBubbleXY.prototype._class += \" chart_BubbleXY\";\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import { descending as d3Descending } from \"d3-array\";\r\nimport { axisLeft as d3AxisLeft } from \"d3-axis\";\r\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { timerFlush as d3TimerFlush } from \"d3-timer\";\r\nimport \"d3-transition\";\r\n\r\nexport default function () {\r\n var orient = \"left\",\r\n reverse = false,\r\n vertical = false,\r\n ranges = bulvarRanges,\r\n markers = bulvarMarkers,\r\n measures = bulvarMeasures,\r\n width = 380,\r\n height = 30,\r\n xAxis = d3AxisLeft();\r\n\r\n // For each small multiple…\r\n function bulvar(g) {\r\n g.each(function (d, i) {\r\n var rangez = ranges.call(this, d, i).slice().sort(d3Descending),\r\n markerz = markers.call(this, d, i).slice().sort(d3Descending),\r\n measurez = measures.call(this, d, i).slice().sort(d3Descending),\r\n g2 = d3Select(this),\r\n extentX,\r\n extentY;\r\n\r\n var wrap = g2.select(\"g.wrap\");\r\n if (wrap.empty()) wrap = g2.append(\"g\").attr(\"class\", \"wrap\");\r\n\r\n if (vertical) {\r\n extentX = height, extentY = width;\r\n wrap.attr(\"transform\", \"rotate(90)translate(0,\" + -width + \")\");\r\n } else {\r\n extentX = width, extentY = height;\r\n wrap.attr(\"transform\", null);\r\n }\r\n\r\n // Compute the new x-scale.\r\n var x1 = d3ScaleLinear()\r\n .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])\r\n .range(reverse ? [extentX, 0] : [0, extentX]);\r\n\r\n // Retrieve the old x-scale, if this is an update.\r\n var x0 = this.__chart__ || d3ScaleLinear()\r\n .domain([0, Infinity])\r\n .range(x1.range());\r\n\r\n // Stash the new scale.\r\n this.__chart__ = x1;\r\n\r\n // Derive width-scales from the x-scales.\r\n var w0 = bulvarWidth(x0),\r\n w1 = bulvarWidth(x1);\r\n\r\n // Update the range rects.\r\n var range = wrap.selectAll(\"rect.range\")\r\n .data(rangez);\r\n\r\n range.enter().append(\"rect\")\r\n .attr(\"class\", function (_d, i2) { return \"range s\" + i2; })\r\n .attr(\"width\", w0)\r\n .attr(\"height\", extentY)\r\n .attr(\"x\", reverse ? x0 : 0)\r\n .merge(range)\r\n .transition(range)\r\n .attr(\"x\", reverse ? x1 : 0)\r\n .attr(\"width\", w1)\r\n .attr(\"height\", extentY);\r\n\r\n // Update the measure rects.\r\n var measure = wrap.selectAll(\"rect.measure\")\r\n .data(measurez);\r\n\r\n measure.enter().append(\"rect\")\r\n .attr(\"class\", function (_d, i2) { return \"measure s\" + i2; })\r\n .attr(\"width\", w0)\r\n .attr(\"height\", extentY / 3)\r\n .attr(\"x\", reverse ? x0 : 0)\r\n .attr(\"y\", extentY / 3)\r\n .merge(measure)\r\n .transition(measure)\r\n .attr(\"width\", w1)\r\n .attr(\"height\", extentY / 3)\r\n .attr(\"x\", reverse ? x1 : 0)\r\n .attr(\"y\", extentY / 3);\r\n\r\n // Update the marker lines.\r\n var marker = wrap.selectAll(\"line.marker\")\r\n .data(markerz);\r\n\r\n marker.enter().append(\"line\")\r\n .attr(\"class\", \"marker\")\r\n .attr(\"x1\", x0)\r\n .attr(\"x2\", x0)\r\n .attr(\"y1\", extentY / 6)\r\n .attr(\"y2\", extentY * 5 / 6)\r\n .merge(marker)\r\n .transition(marker)\r\n .attr(\"x1\", x1)\r\n .attr(\"x2\", x1)\r\n .attr(\"y1\", extentY / 6)\r\n .attr(\"y2\", extentY * 5 / 6);\r\n\r\n var axis = g2.selectAll(\"g.axis\").data([0]);\r\n axis.enter().append(\"g\").attr(\"class\", \"axis\");\r\n axis.attr(\"transform\", vertical ? null : \"translate(0,\" + extentY + \")\")\r\n .call(xAxis.scale(x1));\r\n });\r\n d3TimerFlush();\r\n }\r\n\r\n // left, right, top, bottom\r\n bulvar.orient = function (_) {\r\n if (!arguments.length) return orient;\r\n orient = _ + \"\";\r\n reverse = orient === \"right\" || orient === \"bottom\";\r\n xAxis.orient((vertical = orient === \"top\" || orient === \"bottom\") ? \"left\" : \"bottom\"); // eslint-disable-line\r\n return bulvar;\r\n };\r\n\r\n // ranges (bad, satisfactory, good)\r\n bulvar.ranges = function (_) {\r\n if (!arguments.length) return ranges;\r\n ranges = _;\r\n return bulvar;\r\n };\r\n\r\n // markers (previous, goal)\r\n bulvar.markers = function (_) {\r\n if (!arguments.length) return markers;\r\n markers = _;\r\n return bulvar;\r\n };\r\n\r\n // measures (actual, forecast)\r\n bulvar.measures = function (_) {\r\n if (!arguments.length) return measures;\r\n measures = _;\r\n return bulvar;\r\n };\r\n\r\n bulvar.width = function (_) {\r\n if (!arguments.length) return width;\r\n width = +_;\r\n return bulvar;\r\n };\r\n\r\n bulvar.height = function (_) {\r\n if (!arguments.length) return height;\r\n height = +_;\r\n return bulvar;\r\n };\r\n\r\n bulvar.tickFormat = function (_) {\r\n if (!arguments.length) return xAxis.tickFormat();\r\n xAxis.tickFormat(_);\r\n return bulvar;\r\n };\r\n\r\n return bulvar;\r\n}\r\n\r\nfunction bulvarRanges(d) {\r\n return d.ranges;\r\n}\r\n\r\nfunction bulvarMarkers(d) {\r\n return d.markers;\r\n}\r\n\r\nfunction bulvarMeasures(d) {\r\n return d.measures;\r\n}\r\n\r\nfunction bulvarWidth(x) {\r\n var x0 = x(0);\r\n return function (d) {\r\n return Math.abs(x(d) - x0);\r\n };\r\n}\r\n","import { HTMLWidget, publish, Utility } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport { bullet as d3Bullet } from \"d3v4-bullet\";\n\nimport \"../src/Bullet.css\";\n\nexport class Bullet extends HTMLWidget {\n @publish(null, \"set\", \"Title Column\", function () { return this.columns(); }, { optional: true })\n titleColumn: publish<this, string>;\n @publish(null, \"set\", \"Subtitle Column\", function () { return this.columns(); }, { optional: true })\n subtitleColumn: publish<this, string>;\n @publish(null, \"set\", \"Ranges Column\", function () { return this.columns(); }, { optional: true })\n rangesColumn: publish<this, string>;\n @publish(null, \"set\", \"Measures Column\", function () { return this.columns(); }, { optional: true })\n measuresColumn: publish<this, string>;\n @publish(null, \"set\", \"Markers Column\", function () { return this.columns(); }, { optional: true })\n markersColumn: publish<this, string>;\n\n private _hiddenColumns = {};\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this, true);\n }\n\n bulletData() {\n const context = this;\n this._hiddenColumns = {};\n const columns = this.columns();\n return this.data().map(function (row) {\n return {\n title: valueOf(row, this.titleColumn()),\n subtitle: valueOf(row, this.subtitleColumn()),\n ranges: valueOf(row, this.rangesColumn(), \"range\"),\n measures: valueOf(row, this.measuresColumn(), \"measure\"),\n markers: valueOf(row, this.markersColumn(), \"marker\"),\n origRow: row\n };\n }, this);\n\n function valueOf(row, column, columnType?) {\n const colIdx = columns.indexOf(column);\n if (colIdx >= 0) {\n if (row[colIdx] instanceof Array) {\n return row[colIdx];\n }\n return [row[colIdx]];\n }\n if (columnType) {\n context._hiddenColumns[columnType] = true;\n }\n return [0];\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n d3Select(domNode.parentNode).style(\"overflow\", \"auto\");\n this._selection.widgetElement(element);\n }\n\n update(_domNode, element) {\n super.update(_domNode, element);\n const context = this;\n\n element.selectAll(\".axis\")\n .style(\"display\", \"none\")\n ;\n element.selectAll(\".range,.measure,.marker\")\n .style(\"display\", null)\n ;\n\n const margin = { left: 2, top: 8, right: 2, bottom: 8 };\n const width = this.width() - margin.left - margin.right;\n const height = 40 - margin.top - margin.bottom;\n\n const svg = element.selectAll(\"svg\").data(this.bulletData());\n const svgUpdate = svg.enter().append(\"svg\")\n .attr(\"class\", \"bullet\")\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n })\n .each(function () {\n const element2 = d3Select(this);\n const bulletBar = element2.append(\"g\")\n .attr(\"class\", (d, i) => \"bulletBar series series-\" + context.cssTag(context.titleColumn()))\n ;\n const bulletTitle = bulletBar.append(\"g\")\n .attr(\"class\", \"bulletTitle\")\n ;\n bulletTitle.append(\"text\")\n .attr(\"class\", \"title\")\n ;\n bulletTitle.append(\"text\")\n .attr(\"class\", \"subtitle\")\n .attr(\"dy\", \"1em\")\n ;\n })\n .merge(svg)\n ;\n\n // Title ---\n const title = svgUpdate.select(\".bulletTitle\")\n .style(\"text-anchor\", \"end\")\n .attr(\"transform\", \"translate(-6,\" + height / 2 + \")\")\n ;\n title.select(\".title\")\n .text(function (d) { return d.title; })\n ;\n title.select(\".subtitle\")\n .text(function (d) { return d.subtitle; })\n ;\n\n let titleWidth = 0;\n title.each(function () {\n const bbox = this.getBBox();\n if (bbox.width > titleWidth) {\n titleWidth = bbox.width;\n }\n });\n titleWidth; // Gap between title and bullet bar.\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","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(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","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","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import { 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\";\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 identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import { Bar } from \"./Bar\";\n\nexport class Gantt extends Bar {\n constructor() {\n super();\n\n this\n .orientation_default(\"vertical\")\n .xAxisType_default(\"ordinal\")\n .yAxisType_default(\"time\")\n ;\n }\n}\nGantt.prototype._class += \" chart_Gantt\";\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {epsilon, pi, halfPi, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = Math.abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),\n rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * Math.sin(ap)),\n p1 = asin(rp / r1 * Math.sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * Math.cos(a01),\n y01 = r1 * Math.sin(a01),\n x10 = r0 * Math.cos(a10),\n y10 = r0 * Math.sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * Math.cos(a11),\n y11 = r1 * Math.sin(a11),\n x00 = r0 * Math.cos(a00),\n y00 = r0 * Math.sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),\n lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [Math.cos(a) * r, Math.sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","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","export default class Annotation {\n constructor({\n x = 0,\n y = 0,\n nx,\n ny,\n dy = 0,\n dx = 0,\n color = \"grey\",\n data,\n type,\n subject,\n connector,\n note,\n disable,\n id,\n className\n }) {\n this._dx = nx !== undefined ? nx - x : dx\n this._dy = ny !== undefined ? ny - y : dy\n this._x = x\n this._y = y\n this._color = color\n this.id = id\n this._className = className || \"\"\n\n this._type = type || \"\"\n this.data = data\n\n this.note = note || {}\n this.connector = connector || {}\n this.subject = subject || {}\n\n this.disable = disable || []\n }\n\n updatePosition() {\n if (this.type.setPosition) {\n this.type.setPosition()\n if (\n this.type.subject &&\n this.type.subject.selectAll(\":not(.handle)\").nodes().length !== 0\n ) {\n this.type.redrawSubject()\n }\n }\n }\n\n clearComponents() {\n this.type.clearComponents && this.type.clearComponents()\n }\n\n get className() {\n return this._className\n }\n\n set className(className) {\n this._className = className\n if (this.type.setClassName) this.type.setClassName()\n }\n\n updateOffset() {\n if (this.type.setOffset) {\n this.type.setOffset()\n\n if (this.type.connector.selectAll(\":not(.handle)\").nodes().length !== 0) {\n this.type.redrawConnector()\n }\n\n this.type.redrawNote()\n }\n }\n\n get type() {\n return this._type\n }\n\n set type(type) {\n this._type = type\n this.clearComponents()\n }\n\n get x() {\n return this._x\n }\n set x(x) {\n this._x = x\n this.updatePosition()\n }\n\n get y() {\n return this._y\n }\n set y(y) {\n this._y = y\n this.updatePosition()\n }\n\n get color() {\n return this._color\n }\n set color(color) {\n this._color = color\n this.updatePosition()\n }\n\n get dx() {\n return this._dx\n }\n set dx(dx) {\n this._dx = dx\n this.updateOffset()\n }\n\n get dy() {\n return this._dy\n }\n set dy(dy) {\n this._dy = dy\n this.updateOffset()\n }\n\n set nx(nx) {\n this._dx = nx - this._x\n this.updateOffset()\n }\n\n set ny(ny) {\n this._dy = ny - this._y\n this.updateOffset()\n }\n\n get offset() {\n return { x: this._dx, y: this._dy }\n }\n\n set offset({ x, y }) {\n this._dx = x\n this._dy = y\n this.updateOffset()\n }\n\n get position() {\n return { x: this._x, y: this._y }\n }\n\n set position({ x, y }) {\n this._x = x\n this._y = y\n this.updatePosition()\n }\n\n get translation() {\n return {\n x: this._x + this._dx,\n y: this._y + this._dy\n }\n }\n\n get json() {\n const json = {\n x: this._x,\n y: this._y,\n dx: this._dx,\n dy: this._dy\n }\n\n if (this.data && Object.keys(this.data).length > 0) json.data = this.data\n if (this.type) json.type = this.type\n if (this._className) json.className = this._className\n\n if (Object.keys(this.connector).length > 0) json.connector = this.connector\n if (Object.keys(this.subject).length > 0) json.subject = this.subject\n if (Object.keys(this.note).length > 0) json.note = this.note\n\n return json\n }\n}\n","export default class AnnotationCollection {\n\n constructor ({ annotations, accessors, accessorsInverse }) {\n this.accessors = accessors\n this.accessorsInverse = accessorsInverse\n this.annotations = annotations\n }\n\n clearTypes (newSettings) {\n this.annotations.forEach(d => {\n d.type = undefined\n d.subject = newSettings && newSettings.subject || d.subject\n d.connector = newSettings && newSettings.connector || d.connector\n d.note = newSettings && newSettings.note || d.note\n })\n }\n\n setPositionWithAccessors () {\n this.annotations.forEach(d => {\n d.type.setPositionWithAccessors(this.accessors)\n })\n }\n\n editMode (editMode) { this.annotations.forEach(a => {\n if (a.type) {\n a.type.editMode = editMode\n a.type.updateEditMode()\n }\n })\n }\n\n updateDisable (disable) {\n this.annotations.forEach(a => {\n a.disable = disable\n if (a.type) {\n disable.forEach(d => {\n if (a.type[d]) {\n a.type[d].remove && a.type[d].remove()\n a.type[d] = undefined\n }\n })\n }\n })\n }\n\n updateTextWrap (textWrap) {\n this.annotations.forEach(a => {\n if (a.type && a.type.updateTextWrap) {\n a.type.updateTextWrap(textWrap)\n }\n })\n }\n\n updateText () {\n this.annotations.forEach(a => {\n if (a.type && a.type.drawText) {\n a.type.drawText()\n }\n })\n }\n\n updateNotePadding (notePadding) {\n this.annotations.forEach(a => {\n if (a.type) {\n a.type.notePadding = notePadding\n }\n })\n }\n\n get json () { \n return this.annotations.map(a => { \n const json = a.json\n if (this.accessorsInverse && a.data) {\n json.data = {}\n Object.keys(this.accessorsInverse).forEach(k => {\n json.data[k] = this.accessorsInverse[k]({ x: a.x, y: a.y})\n\n //TODO make this feasible to map back to data for other types of subjects\n })\n }\n return json\n })\n }\n\n get noteNodes () {\n return this.annotations.map(a => ({ ...a.type.getNoteBBoxOffset(), positionX: a.x, positionY: a.y }))\n }\n\n //TODO: come back and rethink if a.x and a.y are applicable in all situations\n // get connectorNodes() {\n // return this.annotations.map(a => ({ ...a.type.getConnectorBBox(), startX: a.x, startY: a.y}))\n // }\n\n // get subjectNodes() {\n // return this.annotations.map(a => ({ ...a.type.getSubjectBBox(), startX: a.x, startY: a.y}))\n // }\n\n // get annotationNodes() {\n // return this.annotations.map(a => ({ ...a.type.getAnnotationBBox(), startX: a.x, startY: a.y}))\n // }\n}\n","\nexport const leftRightDynamic = (align, y) => {\n if (align === \"dynamic\" || align === \"left\" || align === \"right\") {\n if (y < 0) { align = \"top\" }\n else { align = \"bottom\" } \n }\n return align\n}\n\nexport const topBottomDynamic = (align, x) => {\n if (align === \"dynamic\" || align === \"top\" || align === \"bottom\") {\n if (x < 0) { align = \"right\" }\n else { align = \"left\" } \n }\n return align\n}\n\nconst orientationTopBottom = [\"topBottom\", \"top\", \"bottom\"]\nconst orientationLeftRight = [\"leftRight\", \"left\", \"right\"]\n\nexport default ({ padding=0, bbox={x:0, y:0, width:0, height:0}, align, orientation, offset={x:0, y:0} }) => {\n let x = -bbox.x \n let y = 0//-bbox.y\n if ( orientationTopBottom.indexOf(orientation) !== -1 ) {\n align = topBottomDynamic(align, offset.x)\n if (offset.y < 0 && orientation === \"topBottom\" || orientation === \"top\") { \n y -= bbox.height + padding\n } else {\n y += padding\n }\n\n if ( align === \"middle\" ) {\n x -= bbox.width/2\n } else if (align === \"right\" ) {\n x -= bbox.width\n } \n\n } else if ( orientationLeftRight.indexOf(orientation) !== -1 ) {\n align = leftRightDynamic(align, offset.y)\n if (offset.x < 0 && orientation === \"leftRight\" || orientation === \"left\") { \n x -= bbox.width + padding\n } else {\n x += padding\n }\n\n if ( align === \"middle\" ) {\n y -= bbox.height/2\n } else if (align === \"top\" ) {\n y -= bbox.height\n }\n } \n\n return { x, y }\n}","import { line, arc, curveLinear } from \"d3-shape\"\n\nexport const lineBuilder = ({ data, curve=curveLinear, canvasContext, className, classID }) => { \n const lineGen = line()\n .curve(curve)\n\n const builder = {\n type: 'path',\n className,\n classID,\n data\n }\n\n if (canvasContext) {\n lineGen.context(canvasContext)\n builder.pathMethods = lineGen\n\n } else {\n builder.attrs = {\n d: lineGen(data)\n }\n }\n\n return builder\n}\n\nexport const arcBuilder = ({ data, canvasContext, className, classID }) => {\n\n const builder = {\n type: 'path',\n className,\n classID,\n data\n }\n\n const arcShape = arc()\n .innerRadius(data.innerRadius || 0)\n .outerRadius(data.outerRadius || data.radius || 2)\n .startAngle(data.startAngle || 0)\n .endAngle(data.endAngle || 2*Math.PI)\n\n if (canvasContext) {\n arcShape.context(canvasContext)\n builder.pathMethods = lineGen\n\n } else {\n \n builder.attrs = {\n d: arcShape()\n }\n }\n\n return builder\n}","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import { lineBuilder } from '../Builder'\nimport { leftRightDynamic } from './alignment'\n\nexport default ({ align, x=0, y=0, bbox, offset }) => {\n align = leftRightDynamic(align, offset.y)\n\n if (align === \"top\") { y -= bbox.height } \n else if (align === \"middle\") { y -= bbox.height/2 }\n\n const data = [[x, y], [x, y + bbox.height]]\n return { components: [lineBuilder({ data, className : \"note-line\" })] }\n}","import { lineBuilder } from '../Builder'\nimport { topBottomDynamic } from './alignment'\n\nexport default ({ align, x=0, y=0, offset, bbox }) => {\n align = topBottomDynamic(align, offset.x)\n\n if (align === \"right\") { x -= bbox.width }\n else if (align === \"middle\") { x -= bbox.width/2 }\n\n const data = [[x, y], [x + bbox.width, y]]\n return { components: [lineBuilder({ data, className : \"note-line\" })] }\n}","import { lineBuilder } from '../Builder'\n\nexport const lineSetup = ({ type, subjectType }) => {\n let annotation = type.annotation\n let offset = annotation.position\n \n let x1 = annotation.x - offset.x,\n x2 = x1 + annotation.dx,\n y1 = annotation.y - offset.y,\n y2 = y1 + annotation.dy\n\n\n const subjectData = annotation.subject\n\n if (subjectType === \"circle\" && (subjectData.outerRadius || subjectData.radius)) {\n const h = Math.sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2))\n const angle = Math.asin(-y2/h)\n const r = subjectData.outerRadius || subjectData.radius + (subjectData.radiusPadding || 0)\n\n x1 = Math.abs(Math.cos(angle)*r)*(x2 < 0 ? -1 : 1)\n y1 = Math.abs(Math.sin(angle)*r)*(y2 < 0 ? -1 : 1)\n\n }\n\n if (subjectType === \"rect\") {\n const { width, height } = subjectData\n \n if (width > 0 && annotation.dx > 0 || width < 0 && annotation.dx < 0) {\n if (Math.abs(width) > Math.abs(annotation.dx)) x1 = width/2\n else x1 = width\n } \n if (height > 0 && annotation.dy > 0 || height < 0 && annotation.dy < 0) {\n if (Math.abs(height) > Math.abs(annotation.dy)) y1 = height/2\n else y1 = height\n }\n if (x1 === width/2 && y1 === height/2) { x1 = x2; y1 = y2;}\n }\n\n\n return [[x1, y1], [x2, y2]]\n}\n\nexport default (connectorData) => {\n const data = lineSetup(connectorData)\n return { components: [lineBuilder({ data, className : \"connector\" })]} \n}","import { lineBuilder } from '../Builder'\n\nexport default ({ type, subjectType }) => {\n\n const annotation = type.annotation\n const offset = annotation.position\n\n let x1 = annotation.x - offset.x,\n x2 = x1 + annotation.dx,\n y1 = annotation.y - offset.y,\n y2 = y1 + annotation.dy\n\n const subjectData = annotation.subject\n\n if (subjectType === \"rect\") {\n const { width, height } = subjectData\n \n if (width > 0 && annotation.dx > 0 || width < 0 && annotation.dx < 0) {\n if (Math.abs(width) > Math.abs(annotation.dx)) x1 = width/2\n else x1 = width\n } \n if (height > 0 && annotation.dy > 0 || height < 0 && annotation.dy < 0) {\n if (Math.abs(height) > Math.abs(annotation.dy)) y1 = height/2\n else y1 = height\n }\n if (x1 === width/2 && y1 === height/2) { x1 = x2; y1 = y2;}\n }\n\n let data = [[x1, y1], [x2, y2]]\n\n let diffY = y2 - y1\n let diffX = x2 - x1\n let xe = x2 \n let ye = y2\n let opposite = y2 < y1 && x2 > x1 || x2 < x1 && y2 > y1 ? -1 : 1\n\n if (Math.abs(diffX) < Math.abs(diffY)) {\n xe = x2\n ye = y1 + diffX*opposite\n } else {\n ye = y2\n xe = x1 + diffY*opposite\n }\n \n if (subjectType === \"circle\" && (subjectData.outerRadius || subjectData.radius)) {\n const r = (subjectData.outerRadius || subjectData.radius) + (subjectData.radiusPadding || 0)\n const length = r/Math.sqrt(2)\n\n if (Math.abs(diffX) > length && Math.abs(diffY) > length) {\n x1 = length*(x2 < 0 ? -1 : 1)\n y1 = length*(y2 < 0 ? -1 : 1)\n data = [[x1, y1], [xe , ye ], [x2, y2]]\n\n } else if (Math.abs(diffX) > Math.abs(diffY)) {\n const angle = Math.asin(-y2/r)\n x1 = Math.abs(Math.cos(angle)*r)*(x2 < 0 ? -1 : 1)\n data = [[ x1, y2], [x2, y2]]\n } else {\n const angle = Math.acos(x2/r)\n y1 = Math.abs(Math.sin(angle)*r)*(y2 < 0 ? -1 : 1)\n data = [[ x2, y1], [x2, y2]]\n }\n } else {\n data = [[x1, y1], [xe , ye], [x2, y2]]\n }\n\n return { components: [lineBuilder({ data, className: \"connector\"})]}\n}\n","import { lineBuilder } from '../Builder'\nimport { event } from 'd3-selection'\nimport { lineSetup } from './type-line'\nimport { curveCatmullRom } from 'd3-shape'\nimport { pointHandle } from '../Handles'\n\nexport default ({ type, connectorData, subjectType }) => {\n\n if (!connectorData) { connectorData = {} }\n if (!connectorData.points || typeof connectorData.points === \"number\") { \n connectorData.points = createPoints(type.annotation.offset, connectorData.points) \n }\n if (!connectorData.curve) { connectorData.curve = curveCatmullRom }\n\n let handles = []\n\n if (type.editMode) {\n const cHandles = connectorData.points\n .map((c,i) => ({...pointHandle({cx: c[0], cy: c[1]}), index: i}))\n\n const updatePoint = (index) => { \n connectorData.points[index][0] += event.dx\n connectorData.points[index][1] += event.dy\n type.redrawConnector()\n }\n \n handles = type.mapHandles(cHandles\n .map(h => ({ ...h.move, drag: updatePoint.bind(type, h.index)})))\n\n }\n\n let data = lineSetup({ type, subjectType })\n data = [data[0], ...connectorData.points, data[1]]\n const components = [lineBuilder({ data, curve: connectorData.curve, className: \"connector\" })]\n\n return { components , handles }\n}\n\nconst createPoints = function ( offset, anchors=2) {\n const diff = { x: offset.x/(anchors + 1), y: offset.y/(anchors + 1) }\n const p = []\n\n let i = 1 \n for (; i <= anchors; i++) {\n p.push([diff.x*i + i%2*20, diff.y*i - i%2*20])\n }\n return p\n}","import { select } from \"d3-selection\"\nimport { drag } from \"d3-drag\"\n\nexport const pointHandle = ({ cx = 0, cy = 0 }) => {\n return { move: { x: cx, y: cy } }\n}\n\nexport const circleHandles = ({ cx = 0, cy = 0, r1, r2, padding }) => {\n const h = { move: { x: cx, y: cy } }\n\n if (r1 !== undefined) {\n h.r1 = { x: cx + r1 / Math.sqrt(2), y: cy + r1 / Math.sqrt(2) }\n }\n\n if (r2 !== undefined) {\n h.r2 = { x: cx + r2 / Math.sqrt(2), y: cy + r2 / Math.sqrt(2) }\n }\n\n if (padding !== undefined) {\n h.padding = { x: cx + r1 + padding, y: cy }\n }\n\n return h\n}\n\nexport const rectHandles = ({\n x1 = 0,\n y1 = 0,\n x2 = x1,\n y2 = y1,\n width,\n height\n}) => {\n const w = width || Math.abs(x2 - x1)\n const h = height || Math.abs(y2 - y1)\n\n return {\n move: {\n x: Math.min(x1, x2) + w / 2,\n y: Math.min(y1, y2) - 10\n },\n width: {\n x: Math.max(x1, x2),\n y: Math.min(y1, y2) + h / 2\n },\n height: {\n x: Math.min(x1, x2) + w / 2,\n y: Math.max(y1, y2)\n }\n }\n}\n\nexport const lineHandles = ({ x1, y1, x2, y2, x, y }) => {\n const minY = Math.min(y1, y2)\n const minX = Math.min(x1, x2)\n\n const height = Math.abs(y2 - y1)\n const width = Math.abs(x2 - x1)\n\n return {\n move: {\n x: x || minX + width / 2,\n y: y || minY + height / 2\n }\n }\n}\n\n//arc handles\nexport const addHandles = ({ group, handles, r = 10 }) => {\n //give it a group and x,y to draw handles\n //then give it instructions on what the handles change\n const h = group.selectAll(\"circle.handle\").data(handles)\n\n h\n .enter()\n .append(\"circle\")\n .attr(\"class\", \"handle\")\n .attr(\"fill\", \"grey\")\n .attr(\"fill-opacity\", 0.1)\n .attr(\"cursor\", \"move\")\n .attr(\"stroke-dasharray\", 5)\n .attr(\"stroke\", \"grey\")\n .call(\n drag()\n .container(select(\"g.annotations\").node())\n .on(\"start\", d => d.start && d.start(d))\n .on(\"drag\", d => d.drag && d.drag(d))\n .on(\"end\", d => d.end && d.end(d))\n )\n\n group\n .selectAll(\"circle.handle\")\n .attr(\"cx\", d => d.x)\n .attr(\"cy\", d => d.y)\n .attr(\"r\", d => d.r || r)\n .attr(\"class\", d => `handle ${d.className || \"\"}`)\n\n h.exit().remove()\n}\n","import { lineBuilder } from \"../Builder\"\n\nexport default ({ annotation, start, end, scale = 1 }) => {\n const offset = annotation.position\n if (!start) {\n start = [annotation.dx, annotation.dy]\n } else {\n start = [-end[0] + start[0], -end[1] + start[1]]\n }\n if (!end) {\n end = [annotation.x - offset.x, annotation.y - offset.y]\n }\n\n let x1 = end[0],\n y1 = end[1]\n\n let dx = start[0]\n let dy = start[1]\n\n let size = 10 * scale\n let angleOffset = 16 / 180 * Math.PI\n let angle = Math.atan(dy / dx)\n\n if (dx < 0) {\n angle += Math.PI\n }\n\n const data = [\n [x1, y1],\n [\n Math.cos(angle + angleOffset) * size + x1,\n Math.sin(angle + angleOffset) * size + y1\n ],\n [\n Math.cos(angle - angleOffset) * size + x1,\n Math.sin(angle - angleOffset) * size + y1\n ],\n [x1, y1]\n ]\n\n //TODO add in reverse\n // if (canvasContext.arrowReverse){\n // data = [[x1, y1],\n // [Math.cos(angle + angleOffset)*size, Math.sin(angle + angleOffset)*size],\n // [Math.cos(angle - angleOffset)*size, Math.sin(angle - angleOffset)*size],\n // [x1, y1]\n // ]\n // } else {\n // data = [[x1, y1],\n // [Math.cos(angle + angleOffset)*size, Math.sin(angle + angleOffset)*size],\n // [Math.cos(angle - angleOffset)*size, Math.sin(angle - angleOffset)*size],\n // [x1, y1]\n // ]\n // }\n\n return {\n components: [\n lineBuilder({\n data,\n className: \"connector-end connector-arrow\",\n classID: \"connector-end\"\n })\n ]\n }\n}\n","import { arcBuilder } from \"../Builder\"\n\nexport default ({ line, scale = 1 }) => {\n let dot = arcBuilder({\n className: \"connector-end connector-dot\",\n classID: \"connector-end\",\n data: { radius: 3 * Math.sqrt(scale) }\n })\n dot.attrs.transform = `translate(${line.data[0][0]}, ${line.data[0][1]})`\n\n return { components: [dot] }\n}\n","import { circleHandles } from \"../Handles\"\nimport { arcBuilder } from \"../Builder\"\nimport { event } from \"d3-selection\"\n\nexport default ({ subjectData, type }) => {\n if (!subjectData.radius && !subjectData.outerRadius) {\n subjectData.radius = 20\n }\n\n let handles = []\n const c = arcBuilder({ data: subjectData, className: \"subject\" })\n if (type.editMode) {\n const h = circleHandles({\n r1: c.data.outerRadius || c.data.radius,\n r2: c.data.innerRadius,\n padding: subjectData.radiusPadding\n })\n\n const updateRadius = attr => {\n const r = subjectData[attr] + event.dx * Math.sqrt(2)\n subjectData[attr] = r\n type.redrawSubject()\n type.redrawConnector()\n }\n\n const cHandles = [\n {\n ...h.r1,\n drag: updateRadius.bind(\n type,\n subjectData.outerRadius !== undefined ? \"outerRadius\" : \"radius\"\n )\n }\n ]\n\n if (subjectData.innerRadius) {\n cHandles.push({ ...h.r2, drag: updateRadius.bind(type, \"innerRadius\") })\n }\n handles = type.mapHandles(cHandles)\n }\n\n c.attrs[\"fill-opacity\"] = 0\n\n return { components: [c], handles }\n}\n","import { lineBuilder } from \"../Builder\"\nimport { event } from \"d3-selection\"\n\nexport default ({ subjectData, type }) => {\n if (!subjectData.width) {\n subjectData.width = 100\n }\n if (!subjectData.height) {\n subjectData.height = 100\n }\n\n let handles = []\n let { width, height } = subjectData\n\n const data = [[0, 0], [width, 0], [width, height], [0, height], [0, 0]]\n let rect = lineBuilder({ data, className: \"subject\" })\n\n if (type.editMode) {\n const updateWidth = () => {\n subjectData.width = event.x\n type.redrawSubject()\n type.redrawConnector()\n }\n\n const updateHeight = () => {\n subjectData.height = event.y\n type.redrawSubject()\n type.redrawConnector()\n }\n\n const rHandles = [\n { x: width, y: height / 2, drag: updateWidth.bind(type) },\n { x: width / 2, y: height, drag: updateHeight.bind(type) }\n ]\n\n handles = type.mapHandles(rHandles)\n }\n rect.attrs[\"fill-opacity\"] = 0.1\n return { components: [rect], handles }\n}\n","import { lineBuilder } from '../Builder'\n\n\nexport default ({ subjectData, type }) => {\n const offset = type.annotation.position\n\n let x1 = (subjectData.x1 !== undefined ? subjectData.x1 : offset.x) - offset.x,\n x2 = (subjectData.x2 !== undefined ? subjectData.x2 : offset.x) - offset.x,\n y1 = (subjectData.y1 !== undefined ? subjectData.y1 : offset.y) - offset.y,\n y2 = (subjectData.y2 !== undefined ? subjectData.y2 : offset.y) - offset.y\n\n const data = [[x1, y1], [x2, y2]]\n return { components: [lineBuilder({ data, className : 'subject'})]}\n}","import { lineBuilder, arcBuilder } from \"../Builder\"\nimport { event } from \"d3-selection\"\n\nexport default ({ subjectData = {}, type = {} }, annotation = {}) => {\n const typeSettings = type.typeSettings && type.typeSettings.subject\n\n if (!subjectData.radius) {\n if (typeSettings && typeSettings.radius) {\n subjectData.radius = typeSettings.radius\n } else {\n subjectData.radius = 14\n }\n }\n if (!subjectData.x) {\n if (typeSettings && typeSettings.x) {\n subjectData.x = typeSettings.x\n }\n }\n if (!subjectData.y) {\n if (typeSettings && typeSettings.y) {\n subjectData.y = typeSettings.y\n }\n }\n\n let handles = []\n const components = []\n const radius = subjectData.radius\n const innerRadius = radius * 0.7\n let x = 0\n let y = 0\n\n const notCornerOffset = Math.sqrt(2) * radius\n const placement = {\n xleftcorner: -radius,\n xrightcorner: radius,\n ytopcorner: -radius,\n ybottomcorner: radius,\n xleft: -notCornerOffset,\n xright: notCornerOffset,\n ytop: -notCornerOffset,\n ybottom: notCornerOffset\n }\n\n if (subjectData.x && !subjectData.y) {\n x = placement[`x${subjectData.x}`]\n } else if (subjectData.y && !subjectData.x) {\n y = placement[`y${subjectData.y}`]\n } else if (subjectData.x && subjectData.y) {\n x = placement[`x${subjectData.x}corner`]\n y = placement[`y${subjectData.y}corner`]\n }\n\n const transform = `translate(${x}, ${y})`\n const circlebg = arcBuilder({ className: \"subject\", data: { radius } })\n circlebg.attrs.transform = transform\n circlebg.attrs.fill = annotation.color\n circlebg.attrs[\"stroke-linecap\"] = \"round\"\n circlebg.attrs[\"stroke-width\"] = \"3px\"\n\n const circle = arcBuilder({\n className: \"subject-ring\",\n data: { outerRadius: radius, innerRadius }\n })\n\n circle.attrs.transform = transform\n // circle.attrs.fill = annotation.color\n circle.attrs[\"stroke-width\"] = \"3px\"\n circle.attrs.fill = \"white\"\n\n let pointer\n if (x && y || !x && !y) {\n pointer = lineBuilder({\n className: \"subject-pointer\",\n data: [[0, 0], [x || 0, 0], [0, y || 0], [0, 0]]\n })\n } else if (x || y) {\n const notCornerPointerXY = (v, sign = 1) =>\n v && v / Math.sqrt(2) / Math.sqrt(2) || sign * radius / Math.sqrt(2)\n\n pointer = lineBuilder({\n className: \"subject-pointer\",\n data: [\n [0, 0],\n [notCornerPointerXY(x), notCornerPointerXY(y)],\n [notCornerPointerXY(x, -1), notCornerPointerXY(y, -1)],\n [0, 0]\n ]\n })\n }\n\n if (pointer) {\n pointer.attrs.fill = annotation.color\n pointer.attrs[\"stroke-linecap\"] = \"round\"\n pointer.attrs[\"stroke-width\"] = \"3px\"\n components.push(pointer)\n }\n\n if (type.editMode) {\n const dragBadge = () => {\n subjectData.x =\n event.x < -radius * 2\n ? \"left\"\n : event.x > radius * 2 ? \"right\" : undefined\n subjectData.y =\n event.y < -radius * 2\n ? \"top\"\n : event.y > radius * 2 ? \"bottom\" : undefined\n\n type.redrawSubject()\n }\n\n const bHandles = { x: x * 2, y: y * 2, drag: dragBadge.bind(type) }\n if (!bHandles.x && !bHandles.y) {\n bHandles.y = -radius\n }\n\n handles = type.mapHandles([bHandles])\n }\n\n let text\n if (subjectData.text) {\n text = {\n type: \"text\",\n className: \"badge-text\",\n attrs: {\n fill: \"white\",\n stroke: \"none\",\n \"font-size\": \".7em\",\n text: subjectData.text,\n \"text-anchor\": \"middle\",\n dy: \".25em\",\n x,\n y\n }\n }\n }\n\n components.push(circlebg)\n components.push(circle)\n components.push(text)\n\n return { components, handles }\n}\n","import { select, event } from \"d3-selection\"\nimport { drag } from \"d3-drag\"\nimport { addHandles } from \"./Handles\"\n\n//Note options\nimport noteAlignment from \"./Note/alignment\"\nimport noteVertical from \"./Note/lineType-vertical\"\nimport noteHorizontal from \"./Note/lineType-horizontal\"\n\n//Connector options\nimport connectorLine from \"./Connector/type-line\"\nimport connectorElbow from \"./Connector/type-elbow\"\nimport connectorCurve from \"./Connector/type-curve\"\nimport connectorArrow from \"./Connector/end-arrow\"\nimport connectorDot from \"./Connector/end-dot\"\n\n//Subject options\nimport subjectCircle from \"./Subject/circle\"\nimport subjectRect from \"./Subject/rect\"\nimport subjectThreshold from \"./Subject/threshold\"\nimport subjectBadge from \"./Subject/badge\"\n\nexport class Type {\n constructor({ a, annotation, editMode, dispatcher, notePadding, accessors }) {\n this.a = a\n\n this.note =\n annotation.disable.indexOf(\"note\") === -1 && a.select(\"g.annotation-note\")\n this.noteContent = this.note && a.select(\"g.annotation-note-content\")\n this.connector =\n annotation.disable.indexOf(\"connector\") === -1 &&\n a.select(\"g.annotation-connector\")\n this.subject =\n annotation.disable.indexOf(\"subject\") === -1 &&\n a.select(\"g.annotation-subject\")\n this.dispatcher = dispatcher\n\n if (dispatcher) {\n const handler = addHandlers.bind(null, dispatcher, annotation)\n handler({ component: this.note, name: \"note\" })\n handler({ component: this.connector, name: \"connector\" })\n handler({ component: this.subject, name: \"subject\" })\n }\n\n this.annotation = annotation\n this.editMode = annotation.editMode || editMode\n this.notePadding = notePadding !== undefined ? notePadding : 3\n this.offsetCornerX = 0\n this.offsetCornerY = 0\n\n if (accessors && annotation.data) {\n this.init(accessors)\n }\n }\n\n init(accessors) {\n if (!this.annotation.x) {\n this.mapX(accessors)\n }\n if (!this.annotation.y) {\n this.mapY(accessors)\n }\n }\n\n mapY(accessors) {\n if (accessors.y) {\n this.annotation.y = accessors.y(this.annotation.data)\n }\n }\n\n mapX(accessors) {\n if (accessors.x) {\n this.annotation.x = accessors.x(this.annotation.data)\n }\n }\n\n updateEditMode() {\n this.a.selectAll(\"circle.handle\").remove()\n }\n\n drawOnSVG(component, builders) {\n if (!Array.isArray(builders)) {\n builders = [builders]\n }\n\n builders\n .filter(b => b)\n .forEach(({ type, className, attrs, handles, classID }) => {\n if (type === \"handle\") {\n addHandles({ group: component, r: attrs && attrs.r, handles })\n } else {\n newWithClass(component, [this.annotation], type, className, classID)\n const el = component.select(`${type}.${classID || className}`)\n const addAttrs = Object.keys(attrs)\n const removeAttrs = []\n\n const currentAttrs = el.node().attributes\n for (let i = currentAttrs.length - 1; i >= 0; i--) {\n const name = currentAttrs[i].name\n if (addAttrs.indexOf(name) === -1 && name !== \"class\")\n removeAttrs.push(name)\n }\n\n addAttrs.forEach(attr => {\n if (attr === \"text\") {\n el.text(attrs[attr])\n } else {\n el.attr(attr, attrs[attr])\n }\n })\n\n removeAttrs.forEach(attr => el.attr(attr, null))\n }\n })\n }\n\n //TODO: how to extend this to a drawOnCanvas mode?\n\n getNoteBBox() {\n return bboxWithoutHandles(this.note, \".annotation-note-content text\")\n }\n getNoteBBoxOffset() {\n const bbox = bboxWithoutHandles(this.note, \".annotation-note-content\")\n const transform = this.noteContent.attr(\"transform\").split(/\\(|\\,|\\)/g)\n bbox.offsetCornerX = parseFloat(transform[1]) + this.annotation.dx\n bbox.offsetCornerY = parseFloat(transform[2]) + this.annotation.dy\n bbox.offsetX = this.annotation.dx\n bbox.offsetY = this.annotation.dy\n return bbox\n }\n\n drawSubject(context = {}) {\n const subjectData = this.annotation.subject\n const type = context.type\n const subjectParams = { type: this, subjectData }\n\n let subject = {}\n if (type === \"circle\") subject = subjectCircle(subjectParams)\n else if (type === \"rect\") subject = subjectRect(subjectParams)\n else if (type === \"threshold\") subject = subjectThreshold(subjectParams)\n else if (type === \"badge\")\n subject = subjectBadge(subjectParams, this.annotation)\n\n let { components = [], handles = [] } = subject\n components.forEach(c => {\n if (c && c.attrs && !c.attrs.stroke) {\n c.attrs.stroke = this.annotation.color\n }\n })\n\n if (this.editMode) {\n handles = handles.concat(\n this.mapHandles([{ drag: this.dragSubject.bind(this) }])\n )\n components.push({ type: \"handle\", handles })\n }\n\n return components\n }\n\n drawConnector(context = {}) {\n const connectorData = this.annotation.connector\n const type = connectorData.type || context.type\n const connectorParams = { type: this, connectorData }\n connectorParams.subjectType =\n this.typeSettings &&\n this.typeSettings.subject &&\n this.typeSettings.subject.type\n\n let connector = {}\n if (type === \"curve\") connector = connectorCurve(connectorParams)\n else if (type === \"elbow\") connector = connectorElbow(connectorParams)\n else connector = connectorLine(connectorParams)\n let { components = [], handles = [] } = connector\n const line = components[0]\n //TODO: genericize this into fill t/f stroke t/f\n if (line) {\n line.attrs.stroke = this.annotation.color\n line.attrs.fill = \"none\"\n }\n const endType = connectorData.end || context.end\n let end = {}\n if (endType === \"arrow\") {\n let s = line.data[1]\n const e = line.data[0]\n const distance = Math.sqrt(\n Math.pow(s[0] - e[0], 2) + Math.pow(s[1] - e[1], 2)\n )\n if (distance < 5 && line.data[2]) {\n s = line.data[2]\n }\n end = connectorArrow({\n annotation: this.annotation,\n start: s,\n end: e,\n scale: connectorData.endScale\n })\n } else if (endType === \"dot\") {\n end = connectorDot({ line, scale: connectorData.endScale })\n } else if (!endType || endType === \"none\") {\n this.connector && this.connector.select(\".connector-end\").remove()\n }\n\n if (end.components) {\n end.components.forEach(c => {\n c.attrs.fill = this.annotation.color\n c.attrs.stroke = this.annotation.color\n })\n components = components.concat(end.components)\n }\n\n if (this.editMode) {\n if (handles.length !== 0) components.push({ type: \"handle\", handles })\n }\n return components\n }\n\n drawNote(context = {}) {\n const noteData = this.annotation.note\n const align = noteData.align || context.align || \"dynamic\"\n const noteParams = {\n bbox: context.bbox,\n align,\n offset: this.annotation.offset\n }\n const lineType = noteData.lineType || context.lineType\n let note = {}\n if (lineType === \"vertical\") note = noteVertical(noteParams)\n else if (lineType === \"horizontal\") note = noteHorizontal(noteParams)\n\n let { components = [], handles = [] } = note\n components.forEach(c => {\n c.attrs.stroke = this.annotation.color\n })\n\n if (this.editMode) {\n handles = this.mapHandles([\n { x: 0, y: 0, drag: this.dragNote.bind(this) }\n ])\n components.push({ type: \"handle\", handles })\n\n const dragging = this.dragNote.bind(this),\n start = this.dragstarted.bind(this),\n end = this.dragended.bind(this)\n this.note.call(\n drag()\n .container(select(\"g.annotations\").node())\n .on(\"start\", d => start(d))\n .on(\"drag\", d => dragging(d))\n .on(\"end\", d => end(d))\n )\n } else {\n this.note.on(\"mousedown.drag\", null)\n }\n return components\n }\n\n drawNoteContent(context) {\n const noteData = this.annotation.note\n const padding =\n noteData.padding !== undefined ? noteData.padding : this.notePadding\n let orientation = noteData.orientation || context.orientation || \"topBottom\"\n const lineType = noteData.lineType || context.lineType\n const align = noteData.align || context.align || \"dynamic\"\n\n if (lineType === \"vertical\") orientation = \"leftRight\"\n else if (lineType === \"horizontal\") orientation = \"topBottom\"\n\n const noteParams = {\n padding,\n bbox: context.bbox,\n offset: this.annotation.offset,\n orientation,\n align\n }\n const { x, y } = noteAlignment(noteParams)\n this.offsetCornerX = x + this.annotation.dx\n this.offsetCornerY = y + this.annotation.dy\n this.note && this.noteContent.attr(\"transform\", `translate(${x}, ${y})`)\n\n return []\n }\n\n drawOnScreen(component, drawFunction) {\n return this.drawOnSVG(component, drawFunction)\n }\n\n redrawSubject() {\n this.subject && this.drawOnScreen(this.subject, this.drawSubject())\n }\n\n redrawConnector() {\n this.connector && this.drawOnScreen(this.connector, this.drawConnector())\n }\n\n redrawNote(bbox = this.getNoteBBox()) {\n this.noteContent &&\n this.drawOnScreen(this.noteContent, this.drawNoteContent({ bbox }))\n this.note && this.drawOnScreen(this.note, this.drawNote({ bbox }))\n }\n\n setPosition() {\n const position = this.annotation.position\n this.a.attr(\"transform\", `translate(${position.x}, ${position.y})`)\n }\n\n clearComponents() {\n this.subject && this.subject.select(\"*\").remove()\n this.connector && this.connector.select(\"*\").remove()\n // this.note && this.note.select(\"*\").remove()\n }\n\n setOffset() {\n if (this.note) {\n const offset = this.annotation.offset\n this.note.attr(\"transform\", `translate(${offset.x}, ${offset.y})`)\n }\n }\n\n setPositionWithAccessors(accessors) {\n if (accessors && this.annotation.data) {\n this.mapX(accessors)\n this.mapY(accessors)\n }\n this.setPosition()\n }\n\n setClassName() {\n this.a.attr(\n \"class\",\n `annotation ${this.className && this.className()} ${\n this.editMode ? \"editable\" : \"\"\n } ${this.annotation.className || \"\"}`\n )\n }\n\n draw() {\n this.setClassName()\n this.setPosition()\n this.setOffset()\n this.redrawSubject()\n this.redrawConnector()\n this.redrawNote()\n }\n\n dragstarted() {\n event.sourceEvent.stopPropagation()\n this.dispatcher &&\n this.dispatcher.call(\"dragstart\", this.a, this.annotation)\n this.a.classed(\"dragging\", true)\n this.a.selectAll(\"circle.handle\").style(\"pointer-events\", \"none\")\n }\n dragended() {\n this.dispatcher && this.dispatcher.call(\"dragend\", this.a, this.annotation)\n this.a.classed(\"dragging\", false)\n this.a.selectAll(\"circle.handle\").style(\"pointer-events\", \"all\")\n }\n\n dragSubject() {\n const position = this.annotation.position\n position.x += event.dx\n position.y += event.dy\n this.annotation.position = position\n }\n\n dragNote() {\n const offset = this.annotation.offset\n offset.x += event.dx\n offset.y += event.dy\n this.annotation.offset = offset\n }\n\n mapHandles(handles) {\n return handles.map(h => ({\n ...h,\n start: this.dragstarted.bind(this),\n end: this.dragended.bind(this)\n }))\n }\n}\n\nexport const customType = (initialType, typeSettings, init) => {\n return class customType extends initialType {\n constructor(settings) {\n super(settings)\n this.typeSettings = typeSettings\n\n if (typeSettings.disable) {\n typeSettings.disable.forEach(d => {\n this[d] && this[d].remove()\n\n this[d] = undefined\n if (d === \"note\") {\n this.noteContent = undefined\n }\n })\n }\n }\n\n static init(annotation, accessors) {\n super.init(annotation, accessors)\n if (init) {\n annotation = init(annotation, accessors)\n }\n return annotation\n }\n\n className() {\n return `${typeSettings.className ||\n super.className && super.className() ||\n \"\"}`\n }\n\n drawSubject(context) {\n this.typeSettings.subject = Object.assign(\n {},\n typeSettings.subject,\n this.typeSettings.subject\n )\n return super.drawSubject({ ...context, ...this.typeSettings.subject })\n }\n\n drawConnector(context) {\n this.typeSettings.connector = Object.assign(\n {},\n typeSettings.connector,\n this.typeSettings.connector\n )\n return super.drawConnector({\n ...context,\n ...typeSettings.connector,\n ...this.typeSettings.connector\n })\n }\n\n drawNote(context) {\n this.typeSettings.note = Object.assign(\n {},\n typeSettings.note,\n this.typeSettings.note\n )\n return super.drawNote({\n ...context,\n ...typeSettings.note,\n ...this.typeSettings.note\n })\n }\n\n drawNoteContent(context) {\n return super.drawNoteContent({\n ...context,\n ...typeSettings.note,\n ...this.typeSettings.note\n })\n }\n }\n}\n\nexport class d3NoteText extends Type {\n constructor(params) {\n super(params)\n this.textWrap = params.textWrap || 120\n this.drawText()\n }\n\n updateTextWrap(textWrap) {\n this.textWrap = textWrap\n this.drawText()\n }\n\n //TODO: add update text functionality\n\n drawText() {\n if (this.note) {\n newWithClass(this.note, [this.annotation], \"g\", \"annotation-note-content\")\n\n const noteContent = this.note.select(\"g.annotation-note-content\")\n newWithClass(noteContent, [this.annotation], \"rect\", \"annotation-note-bg\")\n newWithClass(\n noteContent,\n [this.annotation],\n \"text\",\n \"annotation-note-label\"\n )\n newWithClass(\n noteContent,\n [this.annotation],\n \"text\",\n \"annotation-note-title\"\n )\n\n let titleBBox = { height: 0 }\n const label = this.a.select(\"text.annotation-note-label\")\n const wrapLength =\n this.annotation.note && this.annotation.note.wrap ||\n this.typeSettings &&\n this.typeSettings.note &&\n this.typeSettings.note.wrap ||\n this.textWrap\n\n const wrapSplitter =\n this.annotation.note && this.annotation.note.wrapSplitter ||\n this.typeSettings &&\n this.typeSettings.note &&\n this.typeSettings.note.wrapSplitter\n\n let bgPadding =\n this.annotation.note && this.annotation.note.bgPadding ||\n this.typeSettings &&\n this.typeSettings.note &&\n this.typeSettings.note.bgPadding\n\n let bgPaddingFinal = { top: 0, bottom: 0, left: 0, right: 0 }\n if (typeof bgPadding === \"number\") {\n bgPaddingFinal = {\n top: bgPadding,\n bottom: bgPadding,\n left: bgPadding,\n right: bgPadding\n }\n } else if (bgPadding && typeof bgPadding === \"object\") {\n bgPaddingFinal = Object.assign(bgPaddingFinal, bgPadding)\n }\n\n if (this.annotation.note.title) {\n const title = this.a.select(\"text.annotation-note-title\")\n title.text(this.annotation.note.title)\n title.attr(\"fill\", this.annotation.color)\n title.attr(\"font-weight\", \"bold\")\n title.call(wrap, wrapLength, wrapSplitter)\n titleBBox = title.node().getBBox()\n }\n\n label.text(this.annotation.note.label).attr(\"dx\", \"0\")\n label.call(wrap, wrapLength, wrapSplitter)\n\n label.attr(\"y\", titleBBox.height * 1.1 || 0)\n label.attr(\"fill\", this.annotation.color)\n\n const bbox = this.getNoteBBox()\n\n this.a\n .select(\"rect.annotation-note-bg\")\n .attr(\"width\", bbox.width + bgPaddingFinal.left + bgPaddingFinal.right)\n .attr(\n \"height\",\n bbox.height + bgPaddingFinal.top + bgPaddingFinal.bottom\n )\n .attr(\"x\", bbox.x - bgPaddingFinal.left)\n .attr(\"y\", -bgPaddingFinal.top)\n .attr(\"fill\", \"white\")\n .attr(\"fill-opacity\", 0)\n }\n }\n}\n\nexport const d3Label = customType(d3NoteText, {\n className: \"label\",\n note: { align: \"middle\" }\n})\n\nexport const d3Callout = customType(d3NoteText, {\n className: \"callout\",\n note: { lineType: \"horizontal\" }\n})\n\nexport const d3CalloutElbow = customType(d3Callout, {\n className: \"callout elbow\",\n connector: { type: \"elbow\" }\n})\n\nexport const d3CalloutCurve = customType(d3Callout, {\n className: \"callout curve\",\n connector: { type: \"curve\" }\n})\n\nexport const d3Badge = customType(Type, {\n className: \"badge\",\n subject: { type: \"badge\" },\n disable: [\"connector\", \"note\"]\n})\n\nexport const d3CalloutCircle = customType(d3NoteText, {\n className: \"callout circle\",\n subject: { type: \"circle\" },\n note: { lineType: \"horizontal\" },\n connector: { type: \"elbow\" }\n})\n\nexport const d3CalloutRect = customType(d3NoteText, {\n className: \"callout rect\",\n subject: { type: \"rect\" },\n note: { lineType: \"horizontal\" },\n connector: { type: \"elbow\" }\n})\n\nclass ThresholdMap extends d3Callout {\n mapY(accessors) {\n super.mapY(accessors)\n const a = this.annotation\n if ((a.subject.x1 || a.subject.x2) && a.data && accessors.y) {\n a.y = accessors.y(a.data)\n }\n if ((a.subject.x1 || a.subject.x2) && !a.x) {\n a.x = a.subject.x1 || a.subject.x2\n }\n }\n\n mapX(accessors) {\n super.mapX(accessors)\n const a = this.annotation\n if ((a.subject.y1 || a.subject.y2) && a.data && accessors.x) {\n a.x = accessors.x(a.data)\n }\n if ((a.subject.y1 || a.subject.y2) && !a.y) {\n a.y = a.subject.y1 || a.subject.y2\n }\n }\n}\n\nexport const d3XYThreshold = customType(ThresholdMap, {\n className: \"callout xythreshold\",\n subject: { type: \"threshold\" }\n})\n\nexport const newWithClass = (a, d, type, className, classID) => {\n const group = a.selectAll(`${type}.${classID || className}`).data(d)\n group\n .enter()\n .append(type)\n .merge(group)\n .attr(\"class\", className)\n\n group.exit().remove()\n return a\n}\n\nconst addHandlers = (dispatcher, annotation, { component, name }) => {\n if (component) {\n component\n .on(\"mouseover.annotations\", () => {\n dispatcher.call(`${name}over`, component, annotation)\n })\n .on(\"mouseout.annotations\", () =>\n dispatcher.call(`${name}out`, component, annotation)\n )\n .on(\"click.annotations\", () =>\n dispatcher.call(`${name}click`, component, annotation)\n )\n }\n}\n\n//Text wrapping code adapted from Mike Bostock\nconst wrap = (text, width, wrapSplitter, lineHeight = 1.2) => {\n text.each(function() {\n const text = select(this),\n words = text\n .text()\n .split(wrapSplitter || /[ \\t\\r\\n]+/)\n .reverse()\n .filter(w => w !== \"\")\n let word,\n line = [],\n tspan = text\n .text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"dy\", 0.8 + \"em\")\n\n while (word = words.pop()) {\n line.push(word)\n tspan.text(line.join(\" \"))\n if (tspan.node().getComputedTextLength() > width && line.length > 1) {\n line.pop()\n tspan.text(line.join(\" \"))\n line = [word]\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"dy\", lineHeight + \"em\")\n .text(word)\n }\n }\n })\n}\n\nconst bboxWithoutHandles = (selection, selector = \":not(.handle)\") => {\n if (!selection) {\n return { x: 0, y: 0, width: 0, height: 0 }\n }\n\n return selection\n .selectAll(selector)\n .nodes()\n .reduce(\n (p, c) => {\n const bbox = c.getBBox()\n p.x = Math.min(p.x, bbox.x)\n p.y = Math.min(p.y, bbox.y)\n p.width = Math.max(p.width, bbox.width)\n\n const yOffset = c && c.attributes && c.attributes.y\n p.height = Math.max(\n p.height,\n (yOffset && parseFloat(yOffset.value) || 0) + bbox.height\n )\n return p\n },\n { x: 0, y: 0, width: 0, height: 0 }\n )\n}\n\nexport default {\n Type,\n d3Label,\n d3Callout,\n d3CalloutElbow,\n d3CalloutCurve,\n d3CalloutCircle,\n d3CalloutRect,\n d3XYThreshold,\n d3Badge,\n customType\n}\n","import { publish, SVGWidget } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { interpolate as d3Interpolate, interpolateHcl as d3InterpolateHcl } from \"d3-interpolate\";\nimport { scaleLinear } from \"d3-scale\";\nimport { Arc, arc as d3Arc, DefaultArcObject } from \"d3-shape\";\nimport { annotation as d3Annotation, annotationCalloutElbow } from \"d3-svg-annotation\";\n\nfunction value2Angle(value: number): number {\n return (value - 0.5) * .65 * 2 * Math.PI;\n}\n\nfunction pointOnArc(angle: number, radius: number): { x: number, y: number } {\n return {\n x: Math.cos(angle - Math.PI / 2) * radius,\n y: Math.sin(angle - Math.PI / 2) * radius\n };\n}\n\nfunction indicatorTranslate(angle: number, radius: number, inner: boolean = false) {\n const point = pointOnArc(angle, radius);\n const rotation = angle * 180 / Math.PI + (inner === true ? 180 : 0);\n return `translate(${point.x}, ${point.y}) rotate(${rotation})`;\n}\n\ntype IndicatorDatum = { angle: number };\nfunction indicatorTween(newAngle: number, radius: number, inner: boolean = false) {\n return function (d: IndicatorDatum) {\n const interpolate = d3Interpolate(d.angle, newAngle);\n d.angle = newAngle;\n return function (t: number) {\n return indicatorTranslate(interpolate(t), radius, inner);\n };\n };\n}\n\nfunction arcTween(startAngle: number, endAngle: number, arc: Arc<any, DefaultArcObject>) {\n return function (d: DefaultArcObject) {\n const startInterpolate = d3Interpolate(d.startAngle, startAngle);\n const endInterpolate = d3Interpolate(d.endAngle, endAngle);\n return function (t: number): string {\n d.startAngle = startInterpolate(t);\n d.endAngle = endInterpolate(t);\n return arc(d)!;\n };\n };\n}\n\nexport class Gauge extends SVGWidget {\n\n private _d3Arc: Arc<any, DefaultArcObject> = d3Arc()\n .innerRadius(85)\n .outerRadius(100)\n ;\n private _colorScale = scaleLinear<string, string>()\n .interpolate(d3InterpolateHcl)\n ;\n\n protected _usageArc: any;\n protected _meanArc: any;\n protected _freeArc: any;\n protected _indInner: any;\n protected _indOuter: any;\n protected _centerTextG: any;\n protected _centerText: any;\n protected _bottomText: any;\n protected _tooltipG: any;\n protected _mainTooltip: any;\n\n @publish(\"\", \"string\")\n title: publish<this, string>;\n\n @publish(\"\", \"string\")\n titleDescription: publish<this, string>;\n\n @publish(128, \"number\")\n maxDiameter: publish<this, number>;\n\n @publish(0, \"number\")\n value: publish<this, number>;\n\n @publish(\"\", \"string\")\n valueDescription: publish<this, string>;\n\n @publish(false, \"boolean\")\n showTick: publish<this, boolean>;\n\n @publish(0, \"number\")\n tickValue: publish<this, number>;\n\n @publish(\"\", \"string\")\n tickValueDescription: publish<this, string>;\n\n @publish(\"\", \"string\")\n tooltip: publish<this, string>;\n\n constructor() {\n super();\n }\n\n protected tip(d: any) {\n if (d === null || d.label === \"\") {\n this._tooltipG\n .transition()\n .style(\"opacity\", 0)\n .on(\"interrupt end\", () => {\n this._tooltipG\n .selectAll(\"g\")\n .remove()\n ;\n })\n ;\n } else {\n this._tooltipG\n .interrupt()\n .style(\"opacity\", 1)\n ;\n d.w = (this._centerText.datum() as any).w + 10;\n let lineType = \"horizontal\";\n let xOffset = 0;\n let yOffset = 5;\n let padding: number | undefined = 5;\n if (d.y >= 5 && d.y <= 25) {\n xOffset = d.x < 0 ? -d.w / 2 : d.w / 2;\n yOffset = 12.5;\n padding = undefined;\n lineType = \"vertical\";\n } else if (d.y > 25) {\n yOffset = 25;\n padding = 0;\n }\n const annotationtip = d3Annotation()\n .type(annotationCalloutElbow)\n .annotations([{\n data: d,\n dx: -d.x + xOffset,\n dy: -d.y + yOffset,\n color: \"black\",\n note: {\n label: d.label,\n lineType,\n padding,\n align: \"middle\"\n }\n }])\n .accessors({ x: (d2: any) => d2.x, y: (d2: any) => d2.y });\n this._tooltipG.call(annotationtip as any);\n }\n }\n\n protected calcSize(textElement, width: number, height: number): { width: number, height: number, scale: number } {\n const bb = (textElement.node() as any).getBBox();\n const widthTransform = width / bb.width;\n const heightTransform = height / bb.height;\n const scale = widthTransform < heightTransform ? widthTransform : heightTransform;\n return {\n width: bb.width,\n height: bb.height,\n scale\n };\n }\n\n protected updateText(textElement, x: number, y: number, w: number, h: number) {\n textElement\n .datum({ x, y, w, h })\n .attr(\"transform\", null)\n ;\n const size = this.calcSize(textElement, w, h);\n const x2 = x + w / 2 - size.width / 2 * size.scale;\n const y2 = y + h / 2 - size.height / 2 * size.scale;\n textElement.attr(\"transform\", `translate(${x2}, ${y2}) scale(${size.scale})`);\n }\n\n calcWidth(): number {\n return Math.min(this.width(), this.height(), this.maxDiameter());\n }\n\n enter(domNode: HTMLElement, element) {\n super.enter(domNode, element);\n\n element.on(\"click\", (d: Gauge) => {\n this.click(d);\n });\n\n this._usageArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\n .style(\"fill\", \"green\")\n .on(\"mousemove\", (d: any) => {\n const [x, y] = this._d3Arc.centroid(d);\n this.tip({ x, y, label: this.valueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n this._freeArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(1) })\n .style(\"fill\", \"lightGrey\")\n ;\n this._meanArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\n .style(\"fill\", \"black\")\n .on(\"mousemove\", (d: any) => {\n const [x, y] = this._d3Arc.centroid(d);\n this.tip({ x, y, label: this.tickValueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n\n this._mainTooltip = element.append(\"title\");\n\n const context = this;\n function appendIndicator() {\n return element.append(\"path\").datum({ angle: value2Angle(0) })\n .style(\"fill\", \"black\")\n .style(\"stroke\", \"black\")\n .attr(\"d\", \"M 0 0 l -3 -3 l 6 0 z\")\n .on(\"mousemove\", (d: any) => {\n const [x, y] = context._d3Arc.centroid(context._meanArc.datum() as any);\n context.tip({ x, y, label: context.tickValueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n context.tip(null);\n })\n ;\n }\n this._indInner = appendIndicator();\n this._indOuter = appendIndicator();\n this._centerText = element.append(\"text\")\n .attr(\"dy\", \".66em\")\n .style(\"fill\", \"green\")\n .on(\"mousemove\", (d: any) => {\n this.tip({ x: 0, y: 0, label: this.valueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n this._bottomText = element.append(\"text\")\n .attr(\"dy\", \".66em\")\n .on(\"mousemove\", (d: any) => {\n this.tip({ x: 0, y: d.y, label: this.titleDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n\n this._tooltipG = element.append(\"g\")\n .attr(\"class\", \"annotation-tip\")\n ;\n }\n\n update(domNode: HTMLElement, element) {\n super.update(domNode, element);\n\n this._colorScale\n .domain(this.colorDomain())\n .range(this.colorRange())\n ;\n element\n .attr(\"title\", this.tooltip())\n .style(\"cursor\", this.click !== Gauge.prototype.click ? \"pointer\" : null)\n ;\n\n const innerRadius = this.calcWidth() / 3;\n const outerRadius = this.calcWidth() / 2 - 5;\n this._d3Arc\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n ;\n\n const val = this.value();\n const tickVal = this.tickValue();\n\n this._usageArc\n .style(\"fill\", this._colorScale(val))\n .transition()\n .duration(750)\n .attrTween(\"d\", arcTween(value2Angle(0), value2Angle(val), this._d3Arc))\n ;\n\n this._freeArc\n .style(\"fill\", this.emptyColor())\n .transition()\n .duration(750)\n .attrTween(\"d\", arcTween(value2Angle(val), value2Angle(1), this._d3Arc))\n ;\n\n this._meanArc\n .style(\"fill\", this.tickColor())\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n .transition()\n .duration(750)\n .attrTween(\"d\", arcTween(value2Angle(tickVal - 0.001), value2Angle(tickVal + 0.001), this._d3Arc))\n ;\n\n this._indInner\n .style(\"fill\", this.tickColor())\n .style(\"stroke\", this.tickColor())\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n .transition()\n .duration(750)\n .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), innerRadius, true))\n ;\n\n this._indOuter\n .style(\"fill\", this.tickColor())\n .style(\"stroke\", this.tickColor())\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n .transition()\n .duration(750)\n .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), outerRadius))\n ;\n\n this._centerText\n .style(\"fill\", this._colorScale(val))\n .text(d3Format(\".0%\")(val))\n ;\n\n this._bottomText\n .style(\"fill\", this.click !== Gauge.prototype.click ? \"blue\" : \"black\")\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 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(\"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 Annotation from \"./Annotation\"\nimport AnnotationCollection from \"./AnnotationCollection\"\nimport { newWithClass, d3Callout } from \"./Types-d3\"\nimport { select } from \"d3-selection\"\nimport { dispatch } from \"d3-dispatch\"\n\nexport default function annotation() {\n let annotations = [],\n collection,\n context, //TODO: add canvas functionality\n disable = [],\n accessors = {},\n accessorsInverse = {},\n editMode = false,\n ids,\n type = d3Callout,\n textWrap,\n notePadding,\n annotationDispatcher = dispatch(\n \"subjectover\",\n \"subjectout\",\n \"subjectclick\",\n \"connectorover\",\n \"connectorout\",\n \"connectorclick\",\n \"noteover\",\n \"noteout\",\n \"noteclick\",\n \"dragend\",\n \"dragstart\"\n ),\n sel\n\n const annotation = function(selection) {\n sel = selection\n //TODO: check to see if this is still needed\n if (!editMode) {\n selection.selectAll(\"circle.handle\").remove()\n }\n\n const translatedAnnotations = annotations.map(a => {\n if (!a.type) {\n a.type = type\n }\n if (!a.disable) {\n a.disable = disable\n }\n return new Annotation(a)\n })\n\n collection =\n collection ||\n new AnnotationCollection({\n annotations: translatedAnnotations,\n accessors,\n accessorsInverse,\n ids\n })\n\n const annotationG = selection.selectAll(\"g\").data([collection])\n annotationG.enter().append(\"g\").attr(\"class\", `annotations`)\n\n const group = selection.select(\"g.annotations\")\n newWithClass(group, collection.annotations, \"g\", \"annotation\")\n\n const annotation = group.selectAll(\"g.annotation\")\n\n annotation.each(function(d) {\n const a = select(this)\n\n a.attr(\"class\", \"annotation\")\n\n newWithClass(a, [d], \"g\", \"annotation-connector\")\n newWithClass(a, [d], \"g\", \"annotation-subject\")\n newWithClass(a, [d], \"g\", \"annotation-note\")\n newWithClass(\n a.select(\"g.annotation-note\"),\n [d],\n \"g\",\n \"annotation-note-content\"\n )\n d.type =\n d.type.toString() === \"[object Object]\"\n ? d.type\n : new d.type({\n a,\n annotation: d,\n textWrap,\n notePadding,\n editMode,\n dispatcher: annotationDispatcher,\n accessors\n })\n d.type.draw()\n d.type.drawText && d.type.drawText()\n })\n }\n\n annotation.json = function() {\n /* eslint-disable no-console */\n console.log(\n \"Annotations JSON was copied to your clipboard. Please note the annotation type is not JSON compatible. It appears in the objects array in the console, but not in the copied JSON.\",\n collection.json\n )\n /* eslint-enable no-console */\n window.copy(\n JSON.stringify(\n collection.json.map(a => {\n delete a.type\n return a\n })\n )\n )\n return annotation\n }\n\n annotation.update = function() {\n if (annotations && collection) {\n annotations = collection.annotations.map(a => {\n a.type.draw()\n return a\n })\n }\n return annotation\n }\n\n annotation.updateText = function() {\n if (collection) {\n collection.updateText(textWrap)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.updatedAccessors = function() {\n collection.setPositionWithAccessors()\n annotations = collection.annotations\n return annotation\n }\n\n annotation.disable = function(_) {\n if (!arguments.length) return disable\n disable = _\n if (collection) {\n collection.updateDisable(disable)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.textWrap = function(_) {\n if (!arguments.length) return textWrap\n textWrap = _\n if (collection) {\n collection.updateTextWrap(textWrap)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.notePadding = function(_) {\n if (!arguments.length) return notePadding\n notePadding = _\n if (collection) {\n collection.updateNotePadding(notePadding)\n annotations = collection.annotations\n }\n return annotation\n }\n //todo think of how to handle when undefined is sent\n annotation.type = function(_, settings) {\n if (!arguments.length) return type\n type = _\n if (collection) {\n collection.annotations.map(a => {\n a.type.note &&\n a.type.note.selectAll(\"*:not(.annotation-note-content)\").remove()\n a.type.noteContent && a.type.noteContent.selectAll(\"*\").remove()\n a.type.subject && a.type.subject.selectAll(\"*\").remove()\n a.type.connector && a.type.connector.selectAll(\"*\").remove()\n a.type.typeSettings = {}\n a.type = type\n\n a.subject = settings && settings.subject || a.subject\n a.connector = settings && settings.connector || a.connector\n a.note = settings && settings.note || a.note\n })\n\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.annotations = function(_) {\n if (!arguments.length)\n return collection && collection.annotations || annotations\n annotations = _\n\n if (collection && collection.annotations) {\n const rerun = annotations.some(\n d => !d.type || d.type.toString() !== \"[object Object]\"\n )\n\n if (rerun) {\n collection = null\n annotation(sel)\n } else {\n collection.annotations = annotations\n }\n }\n return annotation\n }\n\n annotation.context = function(_) {\n if (!arguments.length) return context\n context = _\n return annotation\n }\n\n annotation.accessors = function(_) {\n if (!arguments.length) return accessors\n accessors = _\n return annotation\n }\n\n annotation.accessorsInverse = function(_) {\n if (!arguments.length) return accessorsInverse\n accessorsInverse = _\n return annotation\n }\n\n annotation.ids = function(_) {\n if (!arguments.length) return ids\n ids = _\n return annotation\n }\n\n annotation.editMode = function(_) {\n if (!arguments.length) return editMode\n editMode = _\n\n if (sel) {\n sel.selectAll(\"g.annotation\").classed(\"editable\", editMode)\n }\n\n if (collection) {\n collection.editMode(editMode)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.collection = function(_) {\n if (!arguments.length) return collection\n collection = _\n return annotation\n }\n\n annotation.on = function() {\n const value = annotationDispatcher.on.apply(annotationDispatcher, arguments)\n return value === annotationDispatcher ? annotation : value\n }\n\n return annotation\n}\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\nexport class Pie extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n protected _totalValue: number;\n\n d3Pie;\n d3Arc;\n d3LabelArc;\n private _labelPositions;\n private _smallValueLabelHeight;\n private _labelWidthLimit: number;\n private _quadIdxArr;\n private _minLabelTop = 0;\n private _maxLabelBottom = 0;\n private _seriesValueFormatter;\n private _seriesPercentageFormatter;\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this.d3Pie = d3Pie();\n\n this.d3Arc = d3Arc();\n this.d3LabelArc = d3Arc();\n this\n .tooltipTick_default(false)\n .tooltipOffset_default(0)\n ;\n }\n\n intersection(pointA, pointB) {\n return this.intersectCircle(this.calcOuterRadius(), pointA, pointB);\n }\n\n calcInnerRadius() {\n return this.innerRadius_exists() ? this.calcOuterRadius() * (this.innerRadius() as number) / 100 : 0;\n }\n\n calcOuterRadius() {\n const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d }, false)), \"Verdana\", 12).width;\n const horizontalLimit = this._size.width - (this.showLabels() ? maxTextWidth * 2 : 0) - 20;\n const verticalLimit = this._size.height - 12 * 3 - (this.showLabels() ? this._smallValueLabelHeight : 0);\n const outerRadius = Math.min(horizontalLimit, verticalLimit) / 2 - 2;\n if ((horizontalLimit / 2) - 2 < this.minOuterRadius()) {\n this._labelWidthLimit = maxTextWidth - (this.minOuterRadius() - ((horizontalLimit / 2) - 2));\n } else {\n this._labelWidthLimit = maxTextWidth;\n }\n if (outerRadius < this.minOuterRadius()) {\n return this.minOuterRadius();\n }\n return outerRadius;\n }\n\n calcSmallValueLabelHeight() {\n const smallDef = 0.1;\n const totalVal = this.data().reduce((acc, n) => acc + n[1], 0);\n let smallCount = 0;\n this.data().forEach(row => {\n if (row[1] / totalVal < smallDef) {\n smallCount++;\n }\n });\n return this.labelHeight() * smallCount;\n }\n\n calcTotalValue(): number {\n return this.data().reduce((acc, d) => {\n return acc + d[1];\n }, 0);\n }\n\n getLabelText(d, truncate?) {\n let len;\n let label = d.data[0];\n if (typeof this._labelWidthLimit !== \"undefined\" && truncate) {\n const labelWidth = this.textSize(label, \"Verdana\", this.labelHeight()).width;\n if (this._labelWidthLimit < labelWidth) {\n len = label.length * (this._labelWidthLimit / labelWidth) - 3;\n label = len < label.length ? label.slice(0, len) + \"...\" : label;\n }\n }\n if (this.showSeriesValue()) {\n label += ` : ${this._seriesValueFormatter(d.data[1])}`;\n }\n if (this.showSeriesPercentage()) {\n let sum = this._totalValue;\n const dm = this.dataMeta();\n if (typeof dm.sum !== \"undefined\") {\n sum = dm.sum;\n }\n const perc = (d.data[1] / sum) * 100;\n label += ` : ${this._seriesPercentageFormatter(perc)}%`;\n }\n return label;\n }\n\n selection(): any[]; // any[] === single row\n selection(_: any[]): this;\n selection(_?: any[]): any[] | this {\n if (!arguments.length) {\n try {\n return this._selection.selection2()[0]?.data;\n } catch (e) {\n return undefined;\n }\n }\n // Stringify to enable a deep equal\n const strRow = JSON.stringify(_);\n this._selection.selection2(d => strRow === JSON.stringify(d.data));\n }\n\n selectByLabel(_: string) {\n const row = this.data().filter(row => row[0] === _)[0];\n if (row) {\n this.selection(row);\n }\n }\n\n _slices;\n _labels;\n enter(_domNode, element) {\n super.enter(_domNode, element);\n this._selection.widgetElement(element);\n this._slices = element.append(\"g\");\n this._labels = element.append(\"g\");\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.data[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(d.data[0]),\n value: d.data[i + 1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n }\n })\n ;\n }\n\n update(_domNode, element) {\n super.update(_domNode, element);\n const context = this;\n this.updateD3Pie();\n this._palette = this._palette.switch(this.paletteID());\n this._seriesValueFormatter = d3Format(this.seriesValueFormat() as string);\n this._seriesPercentageFormatter = d3Format(this.seriesPercentageFormat() as string);\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n this._smallValueLabelHeight = this.calcSmallValueLabelHeight();\n this._totalValue = this.calcTotalValue();\n const innerRadius = this.calcInnerRadius();\n const outerRadius = this.calcOuterRadius();\n const labelRadius = outerRadius + 12;\n this.d3Arc\n .innerRadius(innerRadius)\n .padRadius(outerRadius)\n .outerRadius(outerRadius)\n ;\n\n this._quadIdxArr = [[], [], [], []];\n const data = [...this.data()].sort((a, b) => {\n return a[1] - b[1] > 0 ? -1 : 1;\n });\n const arc = this._slices.selectAll(\".arc\").data(this.d3Pie(data), d => d.data[0]);\n\n this._labelPositions = [];\n\n // Enter ---\n arc.enter().append(\"g\")\n .attr(\"class\", (d, i) => \"arc series series-\" + this.cssTag(d.data[0]))\n .attr(\"opacity\", 0)\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .each(function (d, i) {\n d3Select(this).append(\"path\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .on(\"mouseover\", arcTween(0, 0))\n .on(\"mouseout\", arcTween(-5, 150))\n ;\n })\n .merge(arc).transition()\n .attr(\"opacity\", 1)\n .each(function (d, i) {\n const quad = context.getQuadrant(midAngle(d));\n context._quadIdxArr[quad].push(i);\n d.outerRadius = outerRadius - 5;\n const element2 = d3Select(this);\n element2.select(\"path\").transition()\n .attr(\"d\", context.d3Arc)\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n ;\n })\n ;\n\n // Exit ---\n arc.exit().transition()\n .style(\"opacity\", 0)\n .remove()\n ;\n // Labels ---\n this.d3LabelArc\n .innerRadius(labelRadius)\n .outerRadius(labelRadius)\n ;\n const text = this._labels.selectAll(\"text\").data(this.showLabels() ? this.d3Pie(data) : [], d => d.data[0]);\n\n const mergedText = text.enter().append(\"text\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .attr(\"dy\", \".5em\")\n .on(\"click\", function (d) {\n context._slices.selectAll(\"g\").filter(function (d2) {\n if (d.data === d2.data) {\n context._selection.click(this);\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n }\n });\n })\n .on(\"dblclick\", function (d) {\n context._slices.selectAll(\"g\").filter(function (d2) {\n if (d.data === d2.data) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n }\n });\n })\n .merge(text)\n .text(d => this.getLabelText(d, true))\n .each(function (d, i) {\n const pos = context.d3LabelArc.centroid(d);\n const mid_angle = midAngle(d);\n pos[0] = labelRadius * (context.isLeftSide(mid_angle) ? 1 : -1);\n context._labelPositions.push({\n top: pos[1],\n bottom: pos[1] + context.labelHeight()\n });\n });\n if (this.showLabels()) {\n this.adjustForOverlap();\n mergedText.transition()\n .style(\"font-size\", this.labelHeight() + \"px\")\n .attr(\"transform\", (d, i) => {\n const pos = context.d3LabelArc.centroid(d);\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n pos[1] = context._labelPositions[i].top;\n return \"translate(\" + pos + \")\";\n })\n .style(\"text-anchor\", d => this.isLeftSide(midAngle(d)) ? \"start\" : \"end\");\n }\n\n text.exit()\n .remove();\n\n const polyline = this._labels.selectAll(\"polyline\").data(this.showLabels() ? this.d3Pie(data) : [], d => this.getLabelText(d, true));\n\n polyline.enter()\n .append(\"polyline\")\n .merge(polyline).transition()\n .attr(\"points\", function (d, i) {\n const pos = context.d3LabelArc.centroid(d);\n const pos1 = context.d3Arc.centroid(d);\n const pos2 = [...pos];\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n pos[1] = context._labelPositions[i].top;\n return [pos1, pos2, pos];\n });\n\n polyline.exit()\n .remove();\n\n if (this.showLabels()) {\n this.centerOnLabels();\n }\n function midAngle(d) {\n return d.startAngle + (d.endAngle - d.startAngle) / 2;\n }\n\n function arcTween(outerRadiusDelta, delay) {\n return function () {\n d3Select(this).transition().delay(delay).attrTween(\"d\", function (d: any) {\n const i = d3Interpolate(d.outerRadius, outerRadius + outerRadiusDelta);\n return function (t) { d.outerRadius = i(t); return context.d3Arc(d); };\n });\n };\n }\n }\n\n isLeftSide(midAngle) {\n midAngle = normalizeRadians(midAngle);\n const isLeft = midAngle > Math.PI * 2 ? midAngle : midAngle < Math.PI && midAngle > 0;\n return isLeft;\n }\n\n getQuadrant(radians) {\n let quad = 0;\n const rad = normalizeRadians(radians);\n quad = rad <= Math.PI * 1.0 && rad >= Math.PI * 0.5 ? 3 : quad;\n quad = rad <= Math.PI * 0.5 && rad >= Math.PI * 0.0 ? 2 : quad;\n quad = rad <= Math.PI * 0.0 && rad >= Math.PI * -0.5 ? 1 : quad;\n return quad;\n }\n\n centerOnLabels() {\n const gY = this.pos().y;\n const gY2 = gY * 2;\n const radius = this.calcOuterRadius();\n const top = Math.min(this._minLabelTop, -radius);\n const bottom = Math.max(this._maxLabelBottom, radius);\n const h = bottom - top;\n const heightDiff = gY2 - h;\n const absTop = Math.abs(this._minLabelTop);\n let yShift = 0;\n if (bottom > gY) {\n yShift = gY - bottom + (this.labelHeight() / 2);\n yShift -= heightDiff / 2;\n } else if (top < 0 && absTop > gY) {\n yShift = absTop - gY + (this.labelHeight() / 2);\n yShift += heightDiff / 2;\n }\n const pos = this.pos();\n this.pos({\n y: pos.y + yShift,\n x: pos.x\n });\n }\n\n adjustForOverlap() {\n const labelHeight = this.labelHeight();\n this._quadIdxArr.forEach((arr, quad) => {\n this._quadIdxArr[quad].sort((a, b) => {\n if (quad === 1 || quad === 2) {\n return this._labelPositions[a].top > this._labelPositions[b].top ? -1 : 1;\n } else if (quad === 0 || quad === 3) {\n return this._labelPositions[a].top > this._labelPositions[b].top ? 1 : -1;\n }\n });\n let prevTop;\n this._quadIdxArr[quad].forEach((n, i) => {\n if (i > 0) {\n if (quad === 1 || quad === 2) {\n if (prevTop < this._labelPositions[n].bottom) {\n const overlap = this._labelPositions[n].bottom - prevTop;\n this._labelPositions[n].top -= overlap;\n this._labelPositions[n].bottom -= overlap;\n }\n } else if (quad === 0 || quad === 3) {\n if (prevTop + labelHeight > this._labelPositions[n].top) {\n const overlap = Math.abs(this._labelPositions[n].top) - Math.abs(prevTop + labelHeight);\n this._labelPositions[n].top -= overlap;\n this._labelPositions[n].bottom -= overlap;\n }\n }\n }\n prevTop = this._labelPositions[n].top;\n });\n });\n this._minLabelTop = 0;\n this._maxLabelBottom = 0;\n this._quadIdxArr.forEach((arr, quad) => {\n this._quadIdxArr[quad].forEach((n, i) => {\n if (this._minLabelTop > this._labelPositions[n].top) {\n this._minLabelTop = this._labelPositions[n].top;\n }\n if (this._maxLabelBottom < this._labelPositions[n].bottom) {\n this._maxLabelBottom = this._labelPositions[n].bottom;\n }\n });\n });\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n updateD3Pie() {\n const startAngle = normalizeRadians(degreesToRadians(this.startAngle()));\n this.d3Pie\n .padAngle(0.0025)\n .startAngle(startAngle)\n .endAngle(2 * Math.PI + startAngle)\n .sort(function (b, a) {\n return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;\n })\n .value(function (d) {\n return d[1];\n })\n ;\n }\n\n paletteID: (_?: string) => string | Pie;\n useClonedPalette: (_?: boolean) => boolean | Pie;\n outerText: (_?: boolean) => boolean | Pie;\n innerRadius: { (): number; (_: number): Pie; };\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; (_: boolean): Pie; };\n tooltipTick_default: { (): boolean; (_: boolean): Pie; };\n tooltipOffset: { (): number; (_: number): Pie; };\n tooltipOffset_default: { (): number; (_: number): Pie; };\n\n // SimpleSelectionMixin\n _selection: Utility.SimpleSelection;\n}\n\nPie.prototype._class += \" chart_Pie\";\nPie.prototype.implements(I2DChart.prototype);\nPie.prototype.implements(ITooltip.prototype);\nPie.prototype.mixin(Utility.SimpleSelectionMixin);\nexport interface Pie {\n showSeriesValue(): boolean;\n showSeriesValue(_: boolean): this;\n seriesValueFormat(): string;\n seriesValueFormat(_: string): this;\n showSeriesPercentage(): boolean;\n showSeriesPercentage(_: boolean): this;\n minOuterRadius(): number;\n minOuterRadius(_: number): this;\n startAngle(): number;\n startAngle(_: number): this;\n labelHeight(): number;\n labelHeight(_: number): this;\n seriesPercentageFormat(): string;\n seriesPercentageFormat(_: string): this;\n showLabels(): boolean;\n showLabels(_: boolean): this;\n}\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() });\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import { Pie } from \"./Pie\";\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\";\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 = 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 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(\"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 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\";\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\n // ITooltip\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n tooltipValueFormat: (_) => string;\n tooltipValueFormat_default: (_) => string;\n\n paletteID: { (): string; (_: string): HexBin; };\n useClonedPalette: { (): boolean; (_: boolean): HexBin; };\n binSize: { (): number; (_: number): HexBin; };\n}\nHexBin.prototype._class += \" chart_HexBin\";\nHexBin.prototype.implements(I2DAggrChart.prototype);\nHexBin.prototype.implements(ITooltip.prototype);\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\";\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\";\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\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}\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\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 // 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 _selection;\n}\nRadialBar.prototype._class += \" chart_RadialBar\";\nRadialBar.prototype.implements(INDChart.prototype);\nRadialBar.prototype.implements(ITooltip.prototype);\nRadialBar.prototype.mixin(Utility.SimpleSelectionMixin);\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}\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\";\nimport { Scatter } from \"./Scatter\";\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 Mode = \"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 class StatChart extends HTMLWidget {\n\n private _mean: number;\n private _standardDeviation: number;\n private _quartiles: number[];\n private _selectMode: any;\n private _tickFormatter: (_: number) => string;\n\n private _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(\".2s\")\n .yAxisHidden(true)\n .yAxisDomainLow(0)\n .yAxisDomainHigh(110)\n .yAxisGuideLines(false) as Scatter\n ;\n\n private _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 private stdDev(degrees: number): number {\n return this.mean() + degrees * this.standardDeviation();\n }\n\n private formatStdDev(degrees: number): string {\n return this._tickFormatter(this.stdDev(degrees));\n }\n\n private quartile(q: 0 | 1 | 2 | 3 | 4): number {\n return this.data()[0][q];\n }\n\n private formatQ(q: 0 | 1 | 2 | 3 | 4): string {\n return this._tickFormatter(this.quartile(q));\n }\n\n private domain(mode: Mode): [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 mean(): number;\n mean(_: number): this;\n mean(_?: number): this | number {\n if (!arguments.length) return this._mean;\n this._mean = _;\n if (this.data()[0]) {\n this.data()[0][5] = _;\n }\n return this;\n }\n\n standardDeviation(): number;\n standardDeviation(_: number): this;\n standardDeviation(_?: number): this | number {\n if (!arguments.length) return this._standardDeviation;\n this._standardDeviation = _;\n if (this.data()[0]) {\n this.data()[0][6] = _;\n }\n return this;\n }\n\n quartiles(): number[];\n quartiles(_: number[]): this;\n quartiles(_?: number[]): this | number[] {\n if (!arguments.length) return this._quartiles;\n this._quartiles = _;\n if (this.data()[0]) {\n this.data()[0] = _.concat(this.data()[0].slice(-2));\n }\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._selectMode = element.append(\"div\")\n .style(\"position\", \"absolute\")\n .style(\"top\", \"0px\")\n .style(\"right\", \"0px\").append(\"select\")\n .on(\"change\", () => {\n this.render();\n })\n ;\n this._selectMode.append(\"option\").attr(\"value\", \"min_max\").text(\"Min / Max\");\n this._selectMode.append(\"option\").attr(\"value\", \"25_75\").text(\"25% / 75%\");\n this._selectMode.append(\"option\").attr(\"value\", \"normal\").text(\"Normal\");\n }\n\n private bellTicks(mode: Mode): 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._selectMode.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._selectMode.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 if (this.data()[0] && this.data()[0].length === 7) {\n this.quartiles(this.data()[0].slice(0, 5));\n this.mean(this.data()[0][5]);\n this.standardDeviation(this.data()[0][6]);\n }\n this.updateScatter();\n this.updateCandle();\n }\n}\nexport interface StatChart {\n tickFormat(): string;\n tickFormat(_: string): this;\n candleHeight(): number;\n candleHeight(_: number): this;\n domainPadding(): number;\n domainPadding(_: number): this;\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","import { Scatter } from \"./Scatter\";\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) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;\n const sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n const w = d.width;\n const w32 = w >> 5;\n let h = d.y1 - d.y0;\n // Zero the buffer\n for (let i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n let seen = 0;\n let seenRow = -1;\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n const k = w32 * j + (i >> 5);\n const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n const sprite = tag.sprite;\n const w = tag.width >> 5;\n const lx = tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\n let last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n const b0 = bounds[0];\n const b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n const e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n const dy = 4;\n const dx = dy * size[0] / size[1];\n let x = 0;\n let y = 0;\n return function (t) {\n const sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0: x += dx; break;\n case 1: y += dy; break;\n case 2: x -= dx; break;\n default: y -= dy; break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n const a = [];\n let i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\n\nfunction cloudCanvas() {\n return document.createElement(\"canvas\");\n}\n\nfunction functor(d) {\n return typeof d === \"function\" ? d : function () { return d; };\n}\n\nconst spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, InputField, SVGWidget, Utility, zoom as d3Zoom } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\nimport { d3Cloud } from \"./D3Cloud\";\n\nimport \"../src/WordCloud.css\";\n\nexport class WordCloud extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n private _prevOffsetX;\n private _prevOffsetY;\n private _prevZoom;\n private _root;\n private _canvas;\n private _d3Cloud;\n private _d3Zoom;\n\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this._prevOffsetX = this.offsetX();\n this._prevOffsetY = this.offsetY();\n this._prevZoom = this.zoom();\n }\n\n calcData() {\n return this.data().map(row => {\n return {\n __viz_label: row[0],\n __viz_weight: row[1],\n __viz_row: row\n };\n });\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._selection.widgetElement(element);\n\n this._root = element.append(\"g\");\n this._canvas = document.createElement(\"canvas\");\n\n const context = this;\n this._d3Zoom = d3Zoom()\n .scaleExtent([0.1, 10])\n ;\n this._d3Zoom\n .on(\"zoom\", function (evt) {\n const event = d3Event();\n if (event && event.transform) {\n context.zoomed(context._d3Zoom, [event.transform.x, event.transform.y], event.transform.k);\n }\n })\n ;\n element.call(this._d3Zoom);\n\n this\n .tooltipHTML(function (d) {\n const columns = context.columns();\n const series = columns && columns.length ? columns[0] : \"Word\";\n return context.tooltipFormat({ label: d.__viz_label, series, value: d.__viz_weight });\n })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n this._d3Cloud = d3Cloud()\n .canvas(() => this._canvas)\n ;\n\n this.zoomed(this, [this.offsetX(), this.offsetY()], this.zoom());\n\n const data = this.calcData();\n const context = this;\n const extent = d3Extent(data, function (d: any) { return d.__viz_weight; });\n let scaler;\n switch (this.scaleMode()) {\n case \"log\":\n scaler = d3ScaleLog;\n break;\n case \"sqrt\":\n scaler = d3ScaleSqrt;\n break;\n case \"pow\":\n scaler = d3ScalePow;\n break;\n case \"linear\":\n default:\n scaler = d3ScaleLinear;\n break;\n }\n const scale = scaler().domain(extent).range([this.fontSizeFrom(), this.fontSizeTo()]);\n const angleDomain = d3ScaleLinear().domain([0, context.angleCount() - 1]).range([context.angleFrom(), context.angleTo()]);\n\n this._d3Cloud.stop()\n .size([this.width(), this.height()])\n .words(data)\n .font(this.fontFamily())\n .padding(this.padding())\n .spiral(this.spiral())\n .text(function (d) {\n return d.__viz_label.trim();\n })\n .fontSize(function (d) {\n return scale(d.__viz_weight);\n })\n .rotate((d, i) => angleDomain(i % context.angleCount()))\n .on(\"word\", w => {\n })\n .on(\"end\", draw)\n .start()\n ;\n\n function draw(data, bounds) {\n const text = context._root.selectAll(\"text\")\n .data(data, function (d) { return d.__viz_label ? d.__viz_label.toLowerCase() : \"\"; })\n ;\n text.enter().append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .call(context._selection.enter.bind(context._selection))\n .text(function (d) { return d.__viz_label; })\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n })\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .style(\"opacity\", 1e-6)\n .merge(text)\n .style(\"font-size\", function (d) { return scale(d.__viz_weight) + \"px\"; })\n .style(\"font-family\", context.fontFamily())\n .transition().duration(1000)\n .attr(\"transform\", function (d) { return \"translate(\" + [d.x, d.y] + \")rotate(\" + d.rotate + \")\"; })\n .style(\"fill\", function (d) { return context._palette(d.__viz_label ? d.__viz_label.toLowerCase() : \"\"); })\n .style(\"opacity\", 1)\n ;\n text.exit().transition().duration(1000)\n .style(\"opacity\", 1e-4)\n .remove()\n ;\n }\n }\n\n zoomed(source, translate, scale) {\n if (translate[0] !== this._prevOffsetX || translate[1] !== this._prevOffsetY || scale !== this._prevZoom) {\n this._root.attr(\"transform\", translate);\n switch (source) {\n case this:\n /*\n this._d3Zoom\n .scale(scale)\n .translate(translate)\n ;\n */\n break;\n case this._d3Zoom:\n this.offsetX(translate[0]);\n this.offsetY(translate[1]);\n this.zoom(scale);\n break;\n }\n this._prevOffsetX = translate[0];\n this._prevOffsetY = translate[1];\n this._prevZoom = scale;\n }\n }\n\n paletteID: { (): string; (_: string): WordCloud };\n paletteID_exists: () => boolean;\n useClonedPalette: { (): boolean; (_: boolean): WordCloud };\n useClonedPalette_exists: () => boolean;\n fontFamily: { (): string; (_: string): WordCloud };\n fontFamily_exists: () => boolean;\n fontSizeFrom: { (): number; (_: number): WordCloud };\n fontSizeFrom_exists: () => boolean;\n fontSizeTo: { (): number; (_: number): WordCloud };\n fontSizeTo_exists: () => boolean;\n angleFrom: { (): number; (_: number): WordCloud };\n angleFrom_exists: () => boolean;\n angleTo: { (): number; (_: number): WordCloud };\n angleTo_exists: () => boolean;\n angleCount: { (): number; (_: number): WordCloud };\n angleCount_exists: () => boolean;\n padding: { (): number; (_: number): WordCloud };\n padding_exists: () => boolean;\n scaleMode: { (): string; (_: string): WordCloud };\n scaleMode_exists: () => boolean;\n spiral: { (): string; (_: string): WordCloud };\n spiral_exists: () => boolean;\n offsetX: { (): number; (_: number): WordCloud };\n offsetX_exists: () => boolean;\n offsetY: { (): number; (_: number): WordCloud };\n offsetY_exists: () => boolean;\n zoom: { (): number; (_: number): WordCloud };\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; (_: string): WordCloud };\n tooltipStyle_exists: () => boolean;\n tooltipValueFormat: { (): string; (_: string): WordCloud };\n tooltipValueFormat_exists: () => boolean;\n tooltipSeriesColor: { (): string; (_: string): WordCloud };\n tooltipSeriesColor_exists: () => boolean;\n tooltipLabelColor: { (): string; (_: string): WordCloud };\n tooltipLabelColor_exists: () => boolean;\n tooltipValueColor: { (): string; (_: string): WordCloud };\n tooltipValueColor_exists: () => boolean;\n tooltipTick: { (): boolean; (_: boolean): WordCloud };\n tooltipTick_exists: () => boolean;\n tooltipOffset: { (): number; (_: number): WordCloud };\n tooltipOffset_exists: () => boolean;\n\n // SimpleSelectionMixin\n _selection: Utility.SimpleSelection;\n}\nWordCloud.prototype._class += \" chart_WordCloud\";\nWordCloud.prototype.implements(I2DChart.prototype);\nWordCloud.prototype.implements(ITooltip.prototype);\nWordCloud.prototype.mixin(Utility.SimpleSelectionMixin);\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"]}
1
+ {"version":3,"sources":["../src/__package__.ts","../../../node_modules/tslib/tslib.es6.js","../../../node_modules/d3-path/src/path.js","../../../node_modules/d3-shape/src/constant.js","../../../node_modules/d3-shape/src/math.js","../../../node_modules/d3-shape/src/arc.js","../../../node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-shape/src/point.js","../../../node_modules/d3-shape/src/line.js","../../../node_modules/d3-shape/src/descending.js","../../../node_modules/d3-shape/src/identity.js","../../../node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-shape/src/curve/natural.js","../../../node_modules/d3-shape/src/curve/step.js","../../../node_modules/d3-axis/src/array.js","../../../node_modules/d3-axis/src/identity.js","../../../node_modules/d3-axis/src/axis.js","../../../node_modules/style-inject/dist/style-inject.es.js","../src/Axis.ts","../src/XYAxis.ts","../src/Scatter.ts","../../../node_modules/d3-shape/src/area.js","../src/Area.ts","../src/Column.ts","../src/Bar.ts","../../../node_modules/d3-hierarchy/src/hierarchy/count.js","../../../node_modules/d3-hierarchy/src/hierarchy/index.js","../../../node_modules/d3-hierarchy/src/hierarchy/each.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../../../node_modules/d3-hierarchy/src/hierarchy/eachBefore.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/array.js","../../../node_modules/d3-hierarchy/src/pack/enclose.js","../../../node_modules/d3-hierarchy/src/pack/siblings.js","../../../node_modules/d3-hierarchy/src/accessors.js","../../../node_modules/d3-hierarchy/src/constant.js","../../../node_modules/d3-hierarchy/src/pack/index.js","../src/Bubble.ts","../src/BubbleXY.ts","../../../node_modules/d3-timer/src/timer.js","../../../node_modules/d3v4-bullet/src/bullet.js","../src/Bullet.ts","../../../node_modules/d3-contour/src/array.js","../../../node_modules/d3-contour/src/ascending.js","../../../node_modules/d3-contour/src/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/area.js","../../../node_modules/d3-contour/src/blur.js","../../../node_modules/d3-contour/src/density.js","../../../node_modules/d3-geo/src/adder.js","../../../node_modules/d3-geo/src/math.js","../../../node_modules/d3-geo/src/noop.js","../../../node_modules/d3-geo/src/stream.js","../../../node_modules/d3-geo/src/identity.js","../../../node_modules/d3-geo/src/path/area.js","../../../node_modules/d3-geo/src/path/bounds.js","../../../node_modules/d3-geo/src/path/centroid.js","../../../node_modules/d3-geo/src/path/context.js","../../../node_modules/d3-geo/src/path/measure.js","../../../node_modules/d3-geo/src/path/string.js","../src/Contour.ts","../../../node_modules/d3-geo/src/path/index.js","../src/Gantt.ts","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/constant.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/math.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/arc.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/linear.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/point.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-svg-annotation/src/Annotation.js","../../../node_modules/d3-svg-annotation/src/AnnotationCollection.js","../../../node_modules/d3-svg-annotation/src/Note/alignment.js","../../../node_modules/d3-svg-annotation/src/Builder.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/line.js","../../../node_modules/d3-svg-annotation/src/Note/lineType-vertical.js","../../../node_modules/d3-svg-annotation/src/Note/lineType-horizontal.js","../../../node_modules/d3-svg-annotation/src/Connector/type-line.js","../../../node_modules/d3-svg-annotation/src/Connector/type-elbow.js","../../../node_modules/d3-svg-annotation/src/Connector/type-curve.js","../../../node_modules/d3-svg-annotation/src/Handles.js","../../../node_modules/d3-svg-annotation/src/Connector/end-arrow.js","../../../node_modules/d3-svg-annotation/src/Connector/end-dot.js","../../../node_modules/d3-svg-annotation/src/Subject/circle.js","../../../node_modules/d3-svg-annotation/src/Subject/rect.js","../../../node_modules/d3-svg-annotation/src/Subject/threshold.js","../../../node_modules/d3-svg-annotation/src/Subject/badge.js","../../../node_modules/d3-svg-annotation/src/Types-d3.js","../src/Gauge.ts","../../../node_modules/d3-svg-annotation/src/Adapter-d3.js","../src/Pie.ts","../../../node_modules/d3-shape/src/pie.js","../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"],"names":["extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","this","constructor","create","__decorate","decorators","target","key","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","__metadata","metadataKey","metadataValue","metadata","__spreadArray","to","from","pack","ar","l","slice","concat","pi","Math","PI","tau","epsilon","tauEpsilon","Path","_x0","_y0","_x1","_y1","_","path","constant$3","x","moveTo","y","closePath","lineTo","quadraticCurveTo","x1","y1","bezierCurveTo","x2","y2","arcTo","x0","y0","x21","y21","x01","y01","l01_2","Error","abs","x20","y20","l21_2","l20_2","l21","sqrt","l01","tan","acos","t01","t21","arc","a0","a1","ccw","dx","cos","dy","sin","cw","da","rect","w","h","toString","atan2","max","min","halfPi","asin","arcInnerRadius","innerRadius","arcOuterRadius","outerRadius","arcStartAngle","startAngle","arcEndAngle","endAngle","arcPadAngle","padAngle","intersect","x3","y3","x10","y10","x32","y32","t","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x00","y00","d2","D","cx0","cy0","cx1","cy1","dx0","dy0","dx1","dy1","cx","cy","d3Arc","cornerRadius","constant","padRadius","context","buffer","r0","apply","t0","t1","a01","a11","a00","a10","da0","da1","ap","rp","rc0","rc1","p0","p1","oc","ax","ay","bx","by","kc","lc","centroid","a","Linear","_context","d3CurveLinear","d3Line","pointX","pointY","defined","curve","curveLinear","output","line","data","n","defined0","lineStart","lineEnd","point","descending","NaN","identity$2","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","areaStart","_line","areaEnd","_point","_x","_y","j","push","d3CurveBundle","custom","bundle","_k","_x2","_y2","Cardinal","tension","d3CurveCardinal","cardinal","CatmullRom","alpha","_alpha","_l01_a","_l12_a","_l23_a","_l01_2a","_l12_2a","_l23_2a","x23","y23","pow","m","d3curveCatmullRom","catmullRom","sign","slope3","h0","h1","s0","s1","slope2","MonotoneX","monotoneX","Natural","controlPoints","d3CurveNatural","Step","_t","d3CurveStep","stepBefore","stepAfter","_t0","px","py","i0","i1","identity$1","translateX","translateY","number","scale","center","offset","bandwidth","round","entering","__axis","axis","orient","tickArguments","tickValues","tickFormat","tickSizeInner","tickSizeOuter","tickPadding","k","transform","values","ticks","domain","format","identity","spacing","range","range0","range1","position","copy","selection","selectAll","tick","order","tickExit","exit","tickEnter","enter","append","attr","select","text","merge","insert","transition","isFinite","getAttribute","parentNode","remove","filter","each","tickSize","axisTop","axisRight","axisBottom","axisLeft","styleInject","css","ref","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","Axis","_super","drawStartPosition","_this","_drawStartPos","updateScale","_type","timePattern","_timePattern","lowValue","parse","low","highValue","high","forceNumeric","map","parser","parseInvert","parserInvert","formatter","parseFormat","scalePos","retVal","d3Scale","isHorizontal","orientation","rangeRoundBands","rangeExtent","rangeRound","invert","pos","guideTarget","_guideElement","d3Select","_class","domNode","element","svg","svgAxis","svgGuides","d3ScaleBand","paddingInner","ordinalPaddingInner","paddingOuter","ordinalPaddingOuter","ordinals_exists","ordinals","ordinalMappings_exists","mappings_1","ordinalMappings","d3ScaleLinear","low_exists","high_exists","tickFormat_exists","d3Format","d3ScalePow","exponent","powExponent","d3ScaleLog","base","logBase","d3ScaleTime","timePattern_exists","d3TimeParse","d3TimeFormat","_prevOrientation","d3Axis","d3AxisLeft","d3Guides","d3AxisTop","d3AxisRight","d3AxisBottom","html","extend","length_1","delta","newLow","newHigh","width","height","tickCount","tickLength_exists","tickLength","customTicks","value","_d","label","adjustText","tickOverlapModulus","isHoriztontal","isLeft","isBottom","textSelection","fontFamily","fontSize_exists","fontSize","overlapMode","linebreak","wrap","deg_1","labelRotation","elm","bbox","node","getBBox","dyOff","calcTickOverlapModulus","bboxArr_1","getBoundingClientRect","right","left","calcOverflow","ignoreText","hidden","top","bottom","depth","tmpSvg","classID","tmpSvgG","shrinkToFit","_text","bandSize","re","words","split","reverse","lineNumber","fs","parseFloat","maxLinesPerBand","floor","minWordsPerLine","ceil","tspan","wordsOnLine","word","pop","join","getComputedTextLength","update","overlap","lowerPos","upperPos","doPosition","svgLineBBox","svgText","title","svgTitleTransition","title_exists","classed","rerender","postUpdate","_element","publish","disable","SVGWidget","optional","XYAxis","_skipSelection","Utility","SimpleSelectionMixin","domainAxis","orientation_default","overlapMode_default","shrinkToFit_default","extend_default","valueAxis","xyBrush","d3Brush","on","brushMoved","brushMoved2","xBrush","d3BrushX","yBrush","d3BrushY","resetSelection","_prevBrush","parseData","parseValue","formatData","formatValue","parsedData","row","prevValue","cell","idx","columns","_retVal","yAxisStacked","svgRegions","svgDomainGuide","svgValueGuide","svgData","svgDataClipRect","id","_selection","widgetElement","svgFocus","svgBrush","chartsEnter","resizeBrushHandle","e","skipSelection","selected","currSel","d3BrushSelection","dataPos","use2dSelection","pos2","valuePos","handleTypes","handlePath","s","d3Event","getAxisSize","host","xAxis","yAxis","calcMargin","_domNode","margin","selectionMode","xAxisFocus","xAxisFocusHeight","xRight","xHeight","yTop","yWidth","xAxisOverlap","newXHeight","yAxisOverlap","newYWidth","updateRegions","regions","_palette","colorID","d3Hsl","brighter","xAxisTitle_exists","xAxisTitle","xAxisType","colLen_1","ordinalMappings_1","xAxisOrdinalMapping","domainMin","xAxisDomainLow","d3Min","domainMax","xAxisDomainHigh","d3Max","undefined","yAxisDomainLow","indexOf","yAxisDomainHigh","maxCurrExtent","maxOtherExtent","xAxisGuideLines","render","yAxisGuideLines","updateBrush","updateFocusChart","chartsUpdate","currBrush","prevBrushSel","extent","_prevXAxisType","tmp","ratio","move","focusChart","syncAxis","layers","copyPropsTo","layerIdx","_i","_a","layerColumns","masterColumns","col","layerColumnIndices","layerColumnIndex","column","layerData","indices_1","__hpcc_origRow","layerEnter","duration","layerUpdate","layerExit","class","resize","_selected","origRow","svgGlowID","selRows","rowToObj","setTimeout","click","lparam","mixin","publishProxy","tags","yAxisType","Scatter","INDChart","ITooltip","xAxisGuideLines_default","yAxisGuideLines_default","xPos","yPos","interpolate","d3CurveStepBefore","d3CurveStepAfter","d3CurveMonotoneX","getScale","pointSizeScale","d3ScaleSqrt","pointColor","pointDarken","strokeColor","fillColor","lineColor","interpolateFill","interpolateDarken","areaColor","tooltipHTML","tooltipStyle","tooltipFormat","arr","color","rowIdx","series","pointSizeColumnIdx","switch","paletteID","useClonedPalette","cloneNotExists","_prevPointShape","pointShape","pointSizeColumn_exists","pointSizeColumn","d3Extent","flatData","flattenData","shape","mapShape","colIdx","size","maxPointSize","minPointSize","pointSize","areas","areasEnter","area","x0z","y0z","arealine","lineX0","lineY0","lineY1","lineX1","d3Area","cssTag","interpolateFillOpacity","lines","linesEnter","data2","points","valueAnchor","valueBaseline","_idx","textColor","tooltip","hide","show","bind","dblclick","showValue","__inputs","multi","implements","step","Area","interpolate_default","interpolateFill_default","Column","textLocal","d3Local","skipBringToTop","_linearGap","adjustedData","retVal2","dataLen","direction","columnScale","xAxisSeriesPaddingInner","rowData","domainSums","seriesSums","columnLength","showValueAsPercent","forEach","reduce","sum","hostData","axisSize","dataRow","dataRowIdx","columnGRect","columnGEnter","tooltipInnerTextEllipsedOnly","innerTextObj","isTruncated","domainLength","domainPos","upperValue","valueText","dm","dataMeta","seriesSum","showValueAsPercentFormat","domainSum","showValueFormat","upperValuePos","lowerValuePos","valueLength","innerTextHeight","innerTextFontSize","innerTextPadding","innerTextPadding_exists","dataRect","intersectRectRect","_rects","_texts","innerTextFontFamily_exists","innerTextFontFamily","padding","textHeightOffset","showInnerText","innerText","clippedValueLength","calcInnerText","dataText","set","Text","colorStroke_default","noRoomInside","isOutside","valueFontFamily","valueFontSize","textSize","isPositive","leftSpace","rightSpace","topSpace","bottomSpace","padding_1","valueTextWidth","category","valueCentered","get","anchor","colorFill","visible","valueFontFamily_exists","origInnerText","fullWidth2","fullWidth3","excessWidth","innerText_1","letter","Bar","count","children","hierarchy","child","childs","root","Node","valued","nodes","defaultChildren","parent","eachBefore","computeHeight","copyData","eachAfter","callback","current","next","sort","compare","end","start","ancestor","aNodes","ancestors","bNodes","leastCommonAncestor","splice","descendants","leaves","links","source","enclose","circles","array","random","shuffle","B","enclosesWeak","encloseBasis","extendBasis","enclosesWeakAll","enclosesNot","encloseBasis2","encloseBasis3","dr","r2","r21","r3","a2","a3","b2","b3","c2","c3","d1","d3","ab","xa","xb","ya","yb","A","C","place","intersects","score","circle","previous","f","required","constantZero","constant$2","defaultRadius","radiusLeaf","radius","packChildren","aa","ca","sj","sk","packEnclose","translateChild","Bubble","I2DChart","labelWidgets","d3Pack","d3Hierarchy","cloneData","element2","__viz_faChar","FAChar","char","colorFill_default","BubbleXY","clockNow","clock","performance","now","Date","setFrame","window","requestAnimationFrame","clearNow","timerFlush","taskHead","_time","_call","_next","bulvarRanges","ranges","bulvarMarkers","markers","bulvarMeasures","measures","bulvarWidth","Bullet","_hiddenColumns","bulletData","valueOf","titleColumn","subtitle","subtitleColumn","rangesColumn","measuresColumn","markersColumn","columnType","svgUpdate","bulletTitle","titleWidth","chart","vertical","bulvar","g","extentX","extentY","rangez","d3Descending","markerz","measurez","g2","empty","__chart__","Infinity","w0","w1","i2","measure","marker","d3TimerFlush","d3Bullet","keys","HTMLWidget","ascending","constant$1","contains","ring","hole","ringContains","xi","yi","pj","xj","yj","segmentContains","q","collinear","noop$1","cases","contours","threshold","thresholdSturges","smooth","smoothLinear","tz","isArray","stop","tickStep","contour","polygons","holes","t2","t3","fragmentByStart","fragmentByEnd","stitch","startIndex","index","endIndex","unshift","isorings","polygon","coordinates","v0","xt","yt","v1","_0","_1","thresholds","noop","blurX","sr","blurY","defaultX","defaultY","defaultWeight","adder","Adder","reset","add","temp","bv","av","streamGeometry","geometry","stream","streamGeometryType","streamObjectType","Feature","object","FeatureCollection","features","Sphere","sphere","Point","MultiPoint","LineString","streamLine","MultiLineString","Polygon","streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","polygonStart","polygonEnd","geoStream","areaSum","areaRingSum","areaStream","areaRingStart","areaRingEnd","result","areaPointFirst","areaPoint","pathArea","boundsStream","bounds","boundsStream$1","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointFirstLine","centroidPointLine","z","centroidPointFirstRing","centroidPointRing","pathCentroid","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","pathMeasure","PathString","_string","_circle","Contour","xAxisType_default","contourData","weight","o","density","values0","Float32Array","values1","wi","shift","transformPolygon","transformRing","transformPoint","cellSize","log","LN2","d3ContourDensity","contourBandwidth","_vals","minValue","maxValue","_dataMinWeight","_dataMaxWeight","projection","projectionStream","contextStream","pathBounds","geoPath","showContourFill","contourStrokeColor","contourStrokeWidth","I1DChart","Gantt","yAxisType_default","curveCatmullRom","Annotation","_ref","_ref$x","_ref$y","nx","ny","_ref$dy","_ref$dx","_ref$color","subject","connector","note","className","_dx","_dy","_color","_className","setPosition","redrawSubject","clearComponents","setOffset","redrawConnector","redrawNote","setClassName","updatePosition","updateOffset","_ref2","_ref3","json","AnnotationCollection","annotations","accessors","accessorsInverse","newSettings","setPositionWithAccessors","editMode","updateEditMode","textWrap","updateTextWrap","drawText","notePadding","_this2","getNoteBBoxOffset","positionX","positionY","leftRightDynamic","align","topBottomDynamic","orientationTopBottom","orientationLeftRight","lineBuilder","_ref$curve","canvasContext","lineGen","builder","pathMethods","attrs","arcBuilder","arcShape","noteVertical","components","noteHorizontal","lineSetup","subjectType","annotation","subjectData","angle","radiusPadding","connectorLine","connectorData","connectorElbow","diffY","diffX","xe","ye","opposite","connectorCurve","createPoints","handles","cHandles","pointHandle","_ref$cx","_ref$cy","updatePoint","event","mapHandles","drag","anchors","diff","connectorArrow","_ref$scale","angleOffset","atan","connectorDot","dot","subjectCircle","_ref2$cx","_ref2$cy","circleHandles","updateRadius","_extends","subjectRect","rHandles","subjectThreshold","subjectBadge","_ref$subjectData","_ref$type","typeSettings","notCornerOffset","placement","xleftcorner","ytopcorner","xleft","ytop","circlebg","fill","pointer","notCornerPointerXY","v","dragBadge","bHandles","Type","dispatcher","noteContent","handler","addHandlers","component","name","offsetCornerX","offsetCornerY","init","mapX","mapY","builders","_ref5","group","_ref5$r","container","el","addAttrs","removeAttrs","currentAttrs","attributes","bboxWithoutHandles","offsetX","offsetY","subjectParams","_subject$components","_subject$handles","stroke","dragSubject","connectorParams","_connector$components","_connector$handles","endType","distance","endScale","line$$1","_this3","noteData","noteParams","lineType","_note$components","_note$handles","_this4","dragNote","dragging","dragstarted","dragended","noteAlignment","_ref$padding","_ref$bbox","_ref$offset","_noteAlignment","drawFunction","drawOnSVG","drawOnScreen","drawSubject","drawConnector","getNoteBBox","drawNoteContent","drawNote","sourceEvent","stopPropagation","_this5","customType","initialType","settings","_this6","babelHelpers.get","getPrototypeOf","babelHelpers.extends","d3NoteText","_Type","params","titleBBox","wrapLength","wrapSplitter","bgPadding","bgPaddingFinal","_typeof","d3Callout","d3CalloutElbow","ThresholdMap","newWithClass","lineHeight","selector","yOffset","value2Angle","pointOnArc","indicatorTween","newAngle","inner","d3Interpolate","rotation","indicatorTranslate","arcTween","startInterpolate","endInterpolate","Gauge","_d3Arc","_colorScale","scaleLinear","d3InterpolateHcl","tip","_tooltipG","interrupt","_centerText","datum","xOffset","annotationtip","collection","ids","annotationDispatcher","dispatch","sel","translatedAnnotations","draw","JSON","stringify","updateText","updatedAccessors","updateDisable","updateNotePadding","rerun","some","d3Annotation","annotationCalloutElbow","calcSize","textElement","bb","widthTransform","heightTransform","calcWidth","maxDiameter","_usageArc","valueDescription","_freeArc","_meanArc","tickValueDescription","_mainTooltip","appendIndicator","_indInner","_indOuter","_bottomText","titleDescription","colorDomain","colorRange","val","tickVal","tickValue","attrTween","emptyColor","tickColor","showTick","point2","Pie","_minLabelTop","_maxLabelBottom","d3Pie","sortValues","pie","arcs","pa","d3LabelArc","tooltipTick_default","tooltipOffset_default","intersection","pointA","pointB","intersectCircle","calcOuterRadius","calcInnerRadius","innerRadius_exists","maxTextWidth","getLabelText","horizontalLimit","_size","showLabels","verticalLimit","_smallValueLabelHeight","minOuterRadius","_labelWidthLimit","calcSmallValueLabelHeight","totalVal","acc","smallCount","labelHeight","calcTotalValue","truncate","len","labelWidth","showSeriesValue","_seriesValueFormatter","showSeriesPercentage","_totalValue","perc","_seriesPercentageFormatter","selection2","strRow","selectByLabel","_slices","_labels","updateD3Pie","seriesValueFormat","seriesPercentageFormat","labelRadius","_quadIdxArr","_labelPositions","quad","getQuadrant","midAngle","mergedText","mid_angle","isLeftSide","adjustForOverlap","polyline","outerRadiusDelta","delay","pos1","centerOnLabels","normalizeRadians","radians","rad","gY","gY2","heightDiff","absTop","yShift","prevTop","degreesToRadians","HalfPie","_pos","_target","SVGElement","_widgetScale","Heat","radiusX","radiusY","_domForeignObject","_domCanvas","_heat","simpleheat","maxWeight","gradient","reversePalette","defaultGradient","radiusAsPercent","clear","blur","minOpacity","canvas","_canvas","getElementById","_ctx","getContext","_width","_height","_max","_data","Palette","rainbow","rX","rY","ellipse","_ellipse","_createCanvas","ctx","rX2","_r","rY2","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","beginPath","grad","createLinearGradient","addColorStop","fillStyle","fillRect","_grad","getImageData","clearRect","globalAlpha","drawImage","colored","_colorize","putImageData","pixels","thirdPi","angles","HexBin","I2DAggrChart","tooltipValueFormat_default","seriesExtent","labelExtent","_hexbin","hexbin","binsById","bins","isNaN","py1","px1","pi2","pj2","px2","py2","bin","hexagon","centers","mesh","fragment","d3HexBin","binSize","dataPoints","hexBinPoints","minBinPoints","maxBinPoints","Line","QuarterPie","QuartileCandlestick","_g","_leftLine","_rightLine","_midLine","_midOuterRect","_midInnerRect1","_midInnerRect2","_q0text","_q1text","_q2text","_q3text","_q4text","_q0val","_q1val","_q2val","_q3val","_q4val","valueSize","lineWidth","domainSize","edgePadding","candleWidth","candleWidth_exists","roundedCorners","q0x","q1x","q2x","q3x","dataTop","dataBottom","upperTextRotation","lowerTextRotation","textPadding","labelFontSize","sz","q4x","transX","transY","rotate","textScale","labelAnchor","innerRectColor","showValues","Radar","setPointAttributes","half_size_1","half_h","half_w","domain_points","degrees2radians","max_label_h","max_label_w","isize","labels","max_val","xy","polar2cartesian","labelPaddingRatio","text_anchor","domains","value_guides","valueGuideRatios","mult","poly_points","domain_point","row_idx","value_guide_text","series_polygons","fillOpacity","col_idx","val_mult","point_elm","data_row","row_obj","pointElement","theta","cartesian2polar","radians2degrees","point_in_polygon","vs","inside","RadialBar","_domainScale","_valueScale","_radialAxis","_axialAxis","_arcs","valueDomainHigh_exists","valueDomainHigh","valueMaxAngle","chartRadius","domainData","domainPadding","domainCircles","domainText","valueLines","degrees","valueColumn","transitionDelay","transitionDuration","indx","_current","palette","ordinal","StatChart","_bellCurve","xAxisOverlapMode","xAxisTickFormat","yAxisHidden","_candle","stdDev","mean","standardDeviation","formatStdDev","_tickFormatter","quartile","formatQ","mode","_mean","_standardDeviation","quartiles","_quartiles","_selectMode","bellTicks","domainLow","domainHigh","sd","updateScatter","xAxisTicks","candleHeight","updateCandle","candleX","candleW","num","strVal","TEXT","HTML","Summary","_playIntervalIdx","_tag","playInterval","lookupFieldIdx","propID","defaultIdx","lookupFieldText","currentRow","summaryData","labelFieldIdx","hideLabel","moreIconIdx","moreTextIdx","iconFieldIdx","valueFieldIdx","hideMore","colorFillIdx","colorStrokeIdx","formattedData","icon","moreIcon","moreText","colorStroke","_mainDiv","_headerDiv","_textDiv","fixedSize","minWidth_exists","minWidth","minHeight_exists","minHeight","iconFontSize","headerFontSize","valueHTML","textFontSize","labelHTML","moreDivs","moreDivsUpdate","hideMoreWrapper","moreFontSize","moreWrapperHeight_exists","moreWrapperHeight","d3Rgb","darker","moreTextHTML","innerHTML","iconColumn","moreIconColumn","moreTextColumn","colorFillColumn","colorStrokeColumn","_playIntervalHandle","clearInterval","context_1","setInterval","_renderCount","SummaryC","minDimension","sizeRatio","fontSizeRatio","labelIdx","labelColumn","valueIdx","bgColorIdx","fontColorIdx","iconIdx","bgColor","fontColor","mainFontSize","paddingSizeRatio","subFontSize","iconSize","iconSizeRatio","anchorMode","textBaseline","font","measurement","measureText","getTextOffsetX","fillText","drawIcon","iconBaseline","fontSizeMult","getTextOffsetY","iconOpacity","faChar","iconAnchor","valueOpacity","labelOpacity","CanvasWidget","cloudRadians","ch","d3Cloud","cloud","cloudText","cloudFont","cloudFontSize","fontStyle","cloudFontNormal","fontWeight","cloudRotate","cloudPadding","spiral","archimedeanSpiral","timeInterval","timer","cloudCanvas","board","tag","dxdy","startX","startY","maxDelta","dt","cloudCollide","sprite","sw","lx","sx","msx","last","functor","contextAndRatio","strokeStyle","textAlign","zeroArray","cloudSprite","hasText","cloudBounds","spirals","di","maxh","save","cr","wcr","wsr","hcr","hsr","translate","strokeText","restore","xoff","yoff","w32","seen","seenRow","b0","b1","archimedean","rectangular","WordCloud","_prevOffsetX","_prevOffsetY","_prevZoom","zoom","calcData","__viz_label","__viz_weight","__viz_row","_root","_d3Zoom","d3Zoom","scaleExtent","evt","zoomed","_d3Cloud","scaler","scaleMode","fontSizeFrom","fontSizeTo","angleDomain","angleCount","angleFrom","angleTo","trim","toLowerCase"],"mappings":"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","sourcesContent":["export const PKG_NAME = \"@hpcc-js/chart\";\r\nexport const PKG_VERSION = \"2.80.0\";\r\nexport const BUILD_VERSION = \"2.104.0\";\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math.js\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","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","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import {Basis} from \"./basis.js\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math.js\";\nimport {Cardinal} from \"./cardinal.js\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","export var slice = Array.prototype.slice;\n","export default function(x) {\n return x;\n}\n","import {slice} from \"./array\";\nimport identity from \"./identity\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + (x + 0.5) + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + (y + 0.5) + \")\";\n}\n\nfunction number(scale) {\n return function(d) {\n return +scale(d);\n };\n}\n\nfunction center(scale) {\n var offset = Math.max(0, scale.bandwidth() - 1) / 2; // Adjust for 0.5px offset.\n if (scale.round()) offset = Math.round(offset);\n return function(d) {\n return +scale(d) + offset;\n };\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + 0.5,\n range1 = +range[range.length - 1] + 0.5,\n position = (scale.bandwidth ? center : number)(scale.copy()),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform(p && isFinite(p = p(d)) ? p : position(d)); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient == right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H0.5V\" + range1 + \"H\" + k * tickSizeOuter : \"M0.5,\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V0.5H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",0.5H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d)); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = slice.call(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : slice.call(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : slice.call(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import { publish, 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 protected parser;\n protected parserInvert;\n protected formatter: (date: Date) => string;\n protected d3Scale;\n protected d3Axis;\n protected d3Guides;\n protected _guideElement;\n protected svg;\n protected svgAxis;\n protected svgGuides;\n\n @publish(\"linear\", \"set\", \"Type\", [\"none\", \"ordinal\", \"linear\", \"pow\", \"log\", \"time\"])\n _type: string;\n type(): string;\n type(_: string): this;\n type(_?: string): string | this {\n if (!arguments.length) return this._type;\n this._type = _;\n this.updateScale();\n return this;\n }\n\n @publish(\"%Y-%m-%d\", \"string\", \"Time Series Pattern\", null, { disable: (w: any) => w.type() !== \"time\" })\n _timePattern: string;\n timePattern(): string;\n timePattern(_: string): this;\n timePattern(_?: string): string | this {\n if (!arguments.length) return this._timePattern;\n this._timePattern = _;\n this.updateScale();\n return this;\n }\n timePattern_exists: () => boolean;\n\n @publish(false, \"boolean\", \"Reverse\")\n reverse: publish<this, boolean>;\n\n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\n super();\n this._drawStartPos = drawStartPosition;\n\n this.updateScale();\n }\n\n lowValue() {\n return this.parse(this.low());\n }\n\n highValue() {\n return this.parse(this.high());\n }\n\n parse(d, forceNumeric?) {\n if (d instanceof Array) {\n return d.map(function (d2) {\n return this.parse(d2);\n }, this);\n }\n if (d !== undefined && d !== null) {\n if (this.parser) {\n return this.parser(typeof d === \"number\" ? d.toString() : d);\n }\n if (forceNumeric && typeof d === \"string\") {\n return +d;\n }\n }\n return d;\n }\n\n parseInvert(d) {\n if (d instanceof Array) {\n return d.map(function (d2) {\n return this.parseInvert(d2);\n }, this);\n }\n if (this.parserInvert && d) {\n return this.parserInvert(d);\n }\n return d;\n }\n\n format(d) {\n if (d instanceof Array) {\n return d.map(function (d2) {\n return this.format(d2);\n }, this);\n }\n if (d !== undefined && d !== null && this.formatter) {\n return this.formatter(d);\n }\n return d;\n }\n\n parseFormat(d) {\n return this.format(this.parse(d));\n }\n\n scalePos(d) {\n let retVal = this.d3Scale(this.parse(d));\n if (this.type() === \"ordinal\") {\n retVal += this.bandwidth() / 2;\n }\n return retVal;\n }\n\n bandwidth() {\n return this.d3Scale.bandwidth ? this.d3Scale.bandwidth() : 0;\n }\n\n isHorizontal() {\n switch (this.orientation()) {\n case \"left\":\n case \"right\":\n return false;\n default:\n }\n return true;\n }\n\n domain(_) {\n if (!arguments.length) return this.d3Scale.domain();\n this.d3Scale.domain(_);\n return this;\n }\n\n range(_) {\n if (!arguments.length) {\n if (this.d3Scale.rangeRoundBands) {\n return this.d3Scale.rangeExtent();\n } else if (this.d3Scale.rangeRound) {\n return this.d3Scale.range();\n }\n }\n if (this.d3Scale.rangeRoundBands) {\n this.d3Scale.rangeRoundBands(_, 0.1);\n } else if (this.d3Scale.rangeRound) {\n this.d3Scale.range(_);\n }\n return this;\n }\n\n invert(pos) {\n return this.d3Scale.invert(pos);\n }\n\n guideTarget(_) {\n this._guideElement = d3Select(_)\n .attr(\"class\", this._class)\n ;\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this.svg = element.append(\"g\");\n this.svgAxis = this.svg.append(\"g\")\n .attr(\"class\", \"axis\")\n ;\n this.svgGuides = (this._guideElement || element).append(\"g\")\n .attr(\"class\", \"guide\")\n ;\n }\n\n protected _prevOrientation;\n updateScale(): this {\n switch (this.type()) {\n case \"ordinal\":\n this.d3Scale = d3ScaleBand()\n .paddingInner(this.ordinalPaddingInner())\n .paddingOuter(this.ordinalPaddingOuter())\n ;\n if (this.ordinals_exists()) {\n this.d3Scale.domain(this.ordinals());\n }\n this.parser = null;\n if (this.ordinalMappings_exists()) {\n const mappings = this.ordinalMappings();\n this.formatter = (_: any) => mappings[_] || _;\n } else {\n this.formatter = null;\n }\n break;\n case \"linear\":\n this.d3Scale = d3ScaleLinear();\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = null;\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n break;\n case \"pow\":\n this.d3Scale = d3ScalePow()\n .exponent(this.powExponent())\n ;\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = null;\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n break;\n case \"log\":\n this.d3Scale = d3ScaleLog()\n .base(this.logBase())\n ;\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = null;\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\n break;\n case \"time\":\n this.d3Scale = d3ScaleTime();\n if (this.low_exists() && this.high_exists()) {\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\n }\n this.parser = this.timePattern_exists() ? d3TimeParse(this.timePattern()) : null;\n this.parserInvert = this.timePattern_exists() ? d3TimeFormat(this.timePattern()) : null;\n this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\n break;\n default:\n }\n if (this._prevOrientation !== this.orientation()) {\n switch (this.orientation()) {\n case \"left\":\n this.d3Axis = d3AxisLeft(this.d3Scale);\n this.d3Guides = d3AxisLeft(this.d3Scale);\n break;\n case \"top\":\n this.d3Axis = d3AxisTop(this.d3Scale);\n this.d3Guides = d3AxisTop(this.d3Scale);\n break;\n case \"right\":\n this.d3Axis = d3AxisRight(this.d3Scale);\n this.d3Guides = d3AxisRight(this.d3Scale);\n break;\n case \"bottom\":\n default:\n this.d3Axis = d3AxisBottom(this.d3Scale);\n this.d3Guides = d3AxisBottom(this.d3Scale);\n break;\n }\n this._prevOrientation = this.orientation();\n if (this.svgAxis) {\n this.svgAxis.html(\"\");\n }\n if (this.svgGuides) {\n this.svgGuides.html(\"\");\n }\n }\n\n if (this.extend()) {\n switch (this.type()) {\n case \"ordinal\":\n break;\n default:\n let length;\n let delta;\n let low;\n let high;\n let newLow;\n let newHigh;\n if (this.isHorizontal()) {\n length = this.width();\n this.d3Scale.range([0, length]);\n delta = length * this.extend() / 100;\n low = this.d3Scale.invert(0);\n newLow = this.d3Scale.invert(-delta);\n high = this.d3Scale.invert(length);\n newHigh = this.d3Scale.invert(length + delta);\n } else {\n length = this.height();\n this.d3Scale.range([length, 0]);\n delta = length * this.extend() / 100;\n low = this.d3Scale.invert(length);\n newLow = this.d3Scale.invert(length + delta);\n high = this.d3Scale.invert(0);\n newHigh = this.d3Scale.invert(-delta);\n }\n if (newLow === low) { // Edge case when there is only one item in the domain ---\n newLow = low - low * this.extend() / 100;\n }\n if (newHigh === high) { // Edge case when there is only one item in the domain ---\n newHigh = high + high * this.extend() / 100;\n }\n if ((Math as any).sign(low) !== (Math as any).sign(newLow)) {\n newLow = 0;\n }\n if ((Math as any).sign(high) !== (Math as any).sign(newHigh)) {\n newHigh = 0;\n }\n this.d3Scale.domain([newLow, newHigh]);\n break;\n }\n }\n 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 : 0;\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\n title: { (): string; (_: string): Axis; };\n orientation: { (): string; (_: string): Axis; };\n orientation_default: { (): string; (_: string): Axis; };\n powExponent: { (): number; (_: number): Axis; };\n logBase: { (): number; (_: number): Axis; };\n ordinals: { (): string[]; (_: string[]): Axis; };\n ordinals_exists: () => boolean;\n fontSize: { (): number; (_: number): Axis; };\n fontSize_exists: () => boolean;\n fontFamily: { (): string; (_: string): Axis; };\n tickCount: { (): number; (_: number): Axis; };\n tickFormat: { (): string; (_: string): Axis; };\n tickFormat_exists: () => boolean;\n tickLength: { (): number; (_: number): Axis; };\n tickLength_exists: () => boolean;\n ticks: { (): Array<{ value: string, label: string }>; (_: Array<{ value: string, label: string }>): Axis; };\n xAxisDomainLow: { (): string; (_: string): Axis; };\n xAxisDomainHigh: { (): string; (_: string): Axis; };\n low: { (): any; (_: any): Axis; };\n low_exists: () => boolean;\n high: { (): any; (_: any): Axis; };\n high_exists: () => boolean;\n overlapMode: { (): string; (_: string): Axis; };\n overlapMode_default: { (): string; (_: string): Axis; };\n labelRotation: { (): number; (_: number): Axis; };\n shrinkToFit: { (): string; (_: string): Axis; };\n shrinkToFit_default: { (): string; (_: string): Axis; };\n extend: { (): number; (_: number): Axis; };\n extend_default: { (): number; (_: number): Axis; };\n hidden: { (): boolean; (_: boolean): Axis; };\n}\nAxis.prototype._class += \" chart_Axis\";\n\nexport interface Axis {\n title_exists(): boolean;\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}\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'\");\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 });\n","import { d3Event, select as d3Select, SVGWidget, Utility } from \"@hpcc-js/common\";\nimport { max as d3Max, min as d3Min } from \"d3-array\";\nimport { brush as d3Brush, brushSelection as d3BrushSelection, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\";\nimport { hsl as d3Hsl } from \"d3-color\";\nimport { Axis } from \"./Axis\";\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 _palette;\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n\n this.domainAxis = new Axis()\n .classed({ domain: true })\n .orientation_default(\"bottom\")\n .type(\"ordinal\")\n .overlapMode_default(\"stagger\")\n .shrinkToFit_default(\"high\")\n .extend_default(0)\n ;\n this.valueAxis = new Axis()\n .classed({ value: true })\n .orientation_default(\"left\")\n .type(\"linear\")\n .shrinkToFit_default(\"high\")\n ;\n\n this.xyBrush = d3Brush()\n .on(\"end\", () => {\n return this.brushMoved();\n })\n .on(\"start.handle brush.handle end.handle\", () => {\n return this.brushMoved2();\n })\n ;\n this.xBrush = d3BrushX()\n .on(\"end\", () => {\n return this.brushMoved();\n })\n .on(\"start.handle brush.handle end.handle\", () => {\n return this.brushMoved2();\n })\n ;\n this.yBrush = d3BrushY()\n .on(\"end\", () => {\n return this.brushMoved();\n })\n .on(\"start.handle brush.handle end.handle\", () => {\n return this.brushMoved2();\n })\n ;\n }\n\n protected _prevBrush;\n resetSelection() {\n this._prevBrush = null;\n return this;\n }\n\n parseData(d) {\n return this.domainAxis.parse(d);\n }\n\n parseValue(d) {\n return this.valueAxis.parse(d, true);\n }\n\n formatData(d) {\n return this.domainAxis.format(d);\n }\n\n formatValue(d) {\n return this.valueAxis.format(d);\n }\n\n parsedData() {\n const retVal = this.data().map(function (row) {\n let prevValue = 0;\n return row.map(function (cell, idx) {\n if (idx === 0) {\n return this.parseData(cell);\n }\n if (idx >= this.columns().length) {\n return cell;\n }\n const _retVal = this.yAxisStacked() ? [prevValue, prevValue + this.parseValue(cell)] : this.parseValue(cell);\n prevValue += this.parseValue(cell);\n return _retVal;\n }, this);\n }, this);\n return retVal;\n }\n\n bandwidth() {\n return this.domainAxis.bandwidth();\n }\n\n protected svg;\n protected svgRegions;\n protected svgDomainGuide;\n protected svgValueGuide;\n protected svgData;\n protected svgDataClipRect;\n protected svgFocus;\n protected svgBrush;\n enter(domNode, element) {\n super.enter(domNode, element);\n this.svg = element.append(\"g\");\n this.svgRegions = element.append(\"g\");\n this.svgDomainGuide = this.svg.append(\"g\");\n this.svgValueGuide = this.svg.append(\"g\");\n this.svgData = this.svg.append(\"g\");\n\n this.svgDataClipRect = this.svg.append(\"clipPath\")\n .attr(\"id\", this.id() + \"_clippath\")\n .append(\"rect\")\n .attr(\"x\", 0)\n .attr(\"y\", 0)\n ;\n this.svgData = this.svg.append(\"g\")\n .attr(\"clip-path\", \"url(#\" + this.id() + \"_clippath)\")\n ;\n this._selection.widgetElement(this.svgData);\n\n this.svgFocus = element.append(\"g\");\n\n this.domainAxis\n .target(this.svg.node())\n .guideTarget(this.svgDomainGuide.node())\n ;\n\n this.valueAxis\n .target(this.svg.node())\n .guideTarget(this.svgValueGuide.node())\n ;\n\n this.svgBrush = element.append(\"g\")\n .attr(\"class\", \"brush\")\n ;\n this.chartsEnter(this, this.svgData, 250);\n }\n\n resizeBrushHandle(d, width, height) {\n let e;\n let x;\n let y;\n if (d.type === \"e\" || d.type === \"w\") {\n e = +(d.type === \"e\");\n x = e ? 1 : -1;\n y = height / 3;\n return \"M\" + (0.5 * x) + \",\" + y +\n \"A6,6 0 0 \" + e + \" \" + (6.5 * x) + \",\" + (y + 6) +\n \"V\" + (2 * y - 6) +\n \"A6,6 0 0 \" + e + \" \" + (0.5 * x) + \",\" + (2 * y) +\n \"Z\" +\n \"M\" + (2.5 * x) + \",\" + (y + 8) +\n \"V\" + (2 * y - 8) +\n \"M\" + (4.5 * x) + \",\" + (y + 8) +\n \"V\" + (2 * y - 8);\n } else {\n e = +(d.type === \"s\");\n y = e ? 1 : -1;\n x = width / 3;\n return \"M\" + x + \", \" + (0.5 * y) +\n \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (x + 6) + \",\" + (6.5 * y) +\n \"H\" + (2 * x - 6) +\n \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (2 * x) + \",\" + (0.5 * y) +\n \"Z\" +\n \"M\" + (x + 8) + \",\" + (2.5 * y) +\n \"H\" + (2 * x - 8) +\n \"M\" + (x + 8) + \",\" + (4.5 * y) +\n \"H\" + (2 * x - 8);\n }\n }\n\n private _skipSelection = false;\n skipSelection(): boolean;\n skipSelection(_: boolean): this;\n skipSelection(_?: boolean): boolean | this {\n if (!arguments.length) return this._skipSelection;\n this._skipSelection = _;\n return this;\n }\n\n brushMoved() {\n if (this._skipSelection) return;\n let selected = [];\n const context = this;\n const currSel: any = d3BrushSelection(this.svgBrush.node());\n if (currSel) {\n selected = this.data().filter(function (d) {\n const pos = context.dataPos(d[0]);\n if (context.use2dSelection()) {\n const pos2 = context.valuePos(d[1]) + context.valueAxis.bandwidth() / 2;\n return pos >= currSel[0][0] && pos <= currSel[1][0] && pos2 >= currSel[0][1] && pos2 <= currSel[1][1];\n } else {\n return pos >= currSel[0] && pos <= currSel[1];\n }\n });\n }\n this.selection(selected);\n }\n\n brushMoved2() {\n const isHorizontal = this.orientation() === \"horizontal\";\n const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n const s = d3Event().selection;\n if (s == null) {\n handlePath.attr(\"display\", \"none\");\n } else if (isHorizontal) {\n handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + s[i] + \",\" + 0 + \")\");\n } else {\n handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + 0 + \", \" + s[i] + \")\");\n }\n }\n\n dataPos(d) {\n return this.domainAxis.scalePos(d);\n }\n\n valuePos(d) {\n return this.valueAxis.scalePos(d);\n }\n\n getAxisSize(host: XYAxis): { width: number, height: number } {\n return {\n width: !this.xAxis ? host.xAxis.width() : this.xAxis.width(),\n height: !this.yAxis ? host.yAxis.width() : this.yAxis.height()\n };\n }\n\n calcMargin(_domNode, element, isHorizontal) {\n const margin = {\n top: !isHorizontal && this.selectionMode() ? 10 : 2,\n right: isHorizontal && (this.selectionMode() || this.xAxisFocus()) ? 10 : 2,\n bottom: (this.xAxisFocus() ? this.xAxisFocusHeight() : 0) + 2,\n left: 2\n };\n const width = this.width() - margin.left - margin.right;\n const height = this.height() - margin.top - margin.bottom;\n\n let xRight = 0;\n let xHeight = 30;\n let yTop = 0;\n let yWidth = 30;\n for (let i = 0; i < 10; ++i) {\n this.xAxis.width(width - yWidth).height(0);\n const xAxisOverlap = this.xAxis.calcOverflow(element);\n const newXHeight = xAxisOverlap.depth;\n\n this.yAxis.width(0).height(height - xHeight);\n const yAxisOverlap = this.yAxis.calcOverflow(element);\n const newYWidth = yAxisOverlap.depth;\n\n xRight = xAxisOverlap.right;\n yTop = yAxisOverlap.top;\n\n if (newXHeight === xHeight && newYWidth === yWidth) {\n break;\n }\n xHeight = newXHeight;\n yWidth = newYWidth;\n }\n this.xAxis\n .x(width / 2 + yWidth / 2 + margin.left)\n .y(height + margin.top)\n .width(width - yWidth)\n ;\n this.yAxis\n .x(margin.left)\n .y(height / 2 - xHeight / 2 + margin.top)\n .height(height - xHeight)\n ;\n margin.left += yWidth;\n margin.top += yTop;\n margin.right += xRight;\n margin.bottom += xHeight;\n return margin;\n }\n\n updateRegions(_domNode, _element, isHorizontal) {\n const context = this;\n\n const regions = this.svgRegions.selectAll(\".region\").data(this.regions());\n regions.enter().append(\"rect\")\n .attr(\"class\", \"region\")\n ;\n if (isHorizontal) {\n regions\n .attr(\"x\", function (d) { return context.dataPos(d.x0); })\n .attr(\"y\", 0)\n .attr(\"width\", function (d) { return context.dataPos(d.x1) - context.dataPos(d.x0); })\n .attr(\"height\", this.height())\n .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n ;\n } else {\n regions\n .attr(\"x\", 0)\n .attr(\"y\", function (d) { return context.dataPos(d.x0); })\n .attr(\"width\", this.width())\n .attr(\"height\", function (d) { return context.dataPos(d.x0) - context.dataPos(d.x1); })\n .style(\"stroke\", function (d) { return context._palette(d.colorID); })\n .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\n ;\n }\n regions.exit().remove();\n }\n\n protected _prevXAxisType;\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n const isHorizontal = this.orientation() === \"horizontal\";\n this.updateRegions(domNode, element, isHorizontal);\n\n this.domainAxis\n .orientation(isHorizontal ? \"bottom\" : \"left\")\n .title(this.xAxisTitle_exists() ? this.xAxisTitle() : this.columns()[0])\n ;\n this.valueAxis\n .orientation(isHorizontal ? \"left\" : \"bottom\")\n ;\n this.xAxis = isHorizontal ? this.domainAxis : this.valueAxis;\n this.yAxis = isHorizontal ? this.valueAxis : this.domainAxis;\n\n // Update Domain ---\n switch (this.xAxisType()) {\n case \"ordinal\":\n const colLen = this.columns().length;\n const ordinalMappings = {};\n this.domainAxis\n .ordinals(this.data().map(function (d) {\n ordinalMappings[d[0]] = context.xAxisOrdinalMapping(d, d[colLen]);\n return d[0];\n }))\n .ordinalMappings(ordinalMappings)\n ;\n\n break;\n default:\n const domainMin = this.xAxisDomainLow() ? this.xAxisDomainLow() : this.domainAxis.parseInvert(d3Min(this.parsedData(), function (data) {\n return data[0];\n }));\n const domainMax = this.xAxisDomainHigh() ? this.xAxisDomainHigh() : this.domainAxis.parseInvert(d3Max(this.parsedData(), function (data) {\n return data[0];\n }));\n if (domainMin !== undefined && domainMax !== undefined) {\n this.domainAxis\n .low(domainMin)\n .high(domainMax)\n ;\n }\n break;\n }\n\n const min = this.yAxisDomainLow() ? this.yAxisDomainLow() : this.valueAxis.parseInvert(d3Min(this.parsedData(), function (data: any[]) {\n return d3Min(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[0] : d; });\n }));\n const max = this.yAxisDomainHigh() ? this.yAxisDomainHigh() : this.valueAxis.parseInvert(d3Max(this.parsedData(), function (data: any[]) {\n return d3Max(data.filter(function (cell, i) { return i > 0 && context.columns()[i] && context.columns()[i].indexOf(\"__\") !== 0 && cell !== null; }), function (d) { return d instanceof Array ? d[1] : d; });\n }));\n this.valueAxis\n .low(min)\n .high(max)\n ;\n\n // Calculate Margins ---\n this.margin = this.calcMargin(domNode, element, isHorizontal);\n\n // Update Range ---\n let width = this.width() - this.margin.left - this.margin.right;\n if (width < 0) width = 0;\n let height = this.height() - this.margin.top - this.margin.bottom;\n if (height < 0) height = 0;\n const maxCurrExtent = isHorizontal ? width : height;\n const maxOtherExtent = isHorizontal ? height : width;\n\n // Render ---\n this.domainAxis\n .tickLength(this.xAxisGuideLines() ? maxOtherExtent : 0)\n .render()\n ;\n this.valueAxis\n .tickLength(this.yAxisGuideLines() ? maxCurrExtent : 0)\n .render()\n ;\n\n this.svgDataClipRect\n .attr(\"width\", width)\n .attr(\"height\", height)\n ;\n this.svgData.transition()\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\")\n ;\n\n this.updateBrush(width, height, maxCurrExtent, isHorizontal);\n this.updateFocusChart(domNode, element, this.margin, width, height, isHorizontal);\n this.chartsUpdate(width, height, 250);\n if (this.selectionMode()) {\n return this.brushMoved();\n }\n }\n\n updateBrush(width, height, maxCurrExtent, isHorizontal) {\n const currBrush = this.use2dSelection() ? this.xyBrush : isHorizontal ? this.xBrush : this.yBrush;\n const prevBrushSel: any = d3BrushSelection(this.svgBrush.node());\n currBrush.extent([[0, 0], [width, height]]);\n this.svgBrush\n .attr(\"transform\", \"translate(\" + this.margin.left + \", \" + this.margin.top + \")\")\n .style(\"display\", this.selectionMode() ? null : \"none\")\n .call(currBrush)\n ;\n const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\n const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\n handlePath.enter().append(\"path\")\n .attr(\"class\", \"handle--custom\")\n .merge(handlePath)\n .attr(\"cursor\", isHorizontal ? \"ew-resize\" : \"ns-resize\")\n .attr(\"d\", (d) => this.resizeBrushHandle(d, width, height))\n ;\n\n if (this.selectionMode()) {\n if (this._prevXAxisType !== this.xAxisType()) {\n this._prevXAxisType = this.xAxisType();\n this._prevBrush = null;\n }\n if (this._prevBrush) {\n if (prevBrushSel) {\n if (this._prevBrush.orientation !== this.orientation()) {\n const tmp = prevBrushSel[0];\n prevBrushSel[0] = this._prevBrush.maxCurrExtent - prevBrushSel[1];\n prevBrushSel[1] = this._prevBrush.maxCurrExtent - tmp;\n }\n const ratio = maxCurrExtent / this._prevBrush.maxCurrExtent;\n if (ratio !== 1) {\n this.svgBrush.transition()\n .on(\"start\", function () {\n currBrush.on(\"end\", null);\n })\n .call(currBrush.move, [prevBrushSel[0] * ratio, prevBrushSel[1] * ratio])\n .on(\"end\", () => {\n currBrush.on(\"end\", () => {\n return this.brushMoved();\n });\n })\n ;\n }\n }\n } else {\n this.svgBrush\n .call(currBrush.move, [0, maxCurrExtent])\n ;\n }\n this._prevBrush = {\n orientation: this.orientation(),\n maxCurrExtent\n };\n }\n }\n\n updateFocusChart(domNode, element, margin, width, height, isHorizontal) {\n const context: XYAxis = this;\n const focusChart = this.svgFocus.selectAll(\"#\" + this.id() + \"_focusChart\").data(this.xAxisFocus() ? [true] : []);\n focusChart.enter().append(\"g\")\n .attr(\"id\", this.id() + \"_focusChart\")\n .attr(\"class\", \"focus\")\n .each(function () {\n context.focusChart = new (context.constructor as any)()\n .target(this)\n ;\n context.focusChart.xBrush\n .on(\"brush.focus\", function () {\n context.syncAxis(width);\n context.chartsUpdate(width, height, 0);\n })\n ;\n context.focusChart\n .layers(context.layers().map((w: any) => new w.constructor()))\n ;\n })\n .merge(focusChart)\n .each(function (this: SVGElement) {\n context.copyPropsTo(context.focusChart, [\"layers\"]);\n let layerIdx = 0;\n for (const layer of context.layers()) {\n layer.copyPropsTo(context.focusChart.layers()[layerIdx]);\n layerIdx++;\n }\n context.focusChart\n .xAxisFocus(false)\n .selectionMode(true)\n .skipSelection(true)\n .orientation(\"horizontal\")\n .xAxisGuideLines(false)\n .xAxisDomainLow(null)\n .xAxisDomainHigh(null)\n .yAxisGuideLines(false)\n .x(context.width() / 2)\n .y(context.height() - context.xAxisFocusHeight() / 2)\n .width(context.width())\n .height(context.xAxisFocusHeight())\n .columns(context.columns())\n .data(context.data())\n .render()\n ;\n context.syncAxis(width);\n })\n ;\n focusChart.exit()\n .each(function () {\n if (context.focusChart) {\n context.focusChart\n .target(null)\n ;\n delete context.focusChart;\n }\n })\n .remove()\n ;\n }\n\n syncAxis(width: number) {\n const currSel = d3BrushSelection(this.focusChart.svgBrush.node()) as [number, number];\n if (currSel) {\n if (this.focusChart.xAxisType() !== \"ordinal\") {\n this.xAxis.domain([this.focusChart.xAxis.invert(currSel[0]), this.focusChart.xAxis.invert(currSel[1])]);\n } else {\n const brushWidth = currSel[1] - currSel[0];\n const scale = brushWidth / width;\n this.xAxis.range([-currSel[0] / scale, (width - currSel[0]) / scale]);\n }\n this.xAxis.rerender();\n }\n }\n\n // Layers ---\n layerColumns(host: XYAxis): string[] {\n const masterColumns = host.columns();\n const retVal = super.columns().filter(col => col !== masterColumns[0]);\n if (!retVal.length) {\n return masterColumns;\n }\n return [masterColumns[0], ...retVal];\n }\n\n layerColumnIndices(host: XYAxis): number[] {\n const masterColumns = host.columns();\n const layerColumns = this.layerColumns(host);\n return layerColumns.map(col => masterColumns.indexOf(col));\n }\n\n layerColumnIndex(host: XYAxis, column: string): number {\n const masterColumns = host.columns();\n return masterColumns.indexOf(column);\n }\n\n layerData(host: XYAxis): any[][] {\n if (arguments.length === 1) {\n const indices = this.layerColumnIndices(host);\n return host.data().map(row => {\n const retVal = indices.map(idx => row[idx]);\n (retVal as any).__hpcc_origRow = row;\n return retVal;\n });\n }\n throw new Error(\"Setting data on XYAxisLayer is not supported.\");\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n }\n\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n }\n\n layerExit(host: XYAxis, element, duration: number = 250) {\n }\n\n chartsEnter(host: XYAxis, element, duration: number = 250) {\n this.layerEnter(this, element, duration);\n for (const w of this.layers()) {\n w[\"__xyAxisElement\"] = element.append(\"g\")\n .attr(\"class\", w.class())\n ;\n w\n .target(w[\"__xyAxisElement\"].node() as SVGElement)\n .layerEnter(this, element, duration)\n ;\n }\n }\n\n chartsUpdate(width, height, duration): void {\n this.layerUpdate(this, this.svgData, duration);\n for (const w of this.layers()) {\n w\n .resize({ width, height })\n .layerUpdate(this, w[\"__xyAxisElement\"], duration)\n ;\n }\n }\n\n exit(domNode, element) {\n this.valueAxis.target(null);\n this.domainAxis.target(null);\n super.exit(domNode, element);\n }\n\n selection(_selected) {\n const context = this;\n this._selection.widgetElement().selectAll(\".selected,.deselected\")\n .each(function (d) {\n const selected = _selected.indexOf(d.origRow) >= 0;\n d3Select(this)\n .classed(\"selected\", selected)\n .classed(\"deselected\", !selected)\n .attr(\"filter\", context._selection.svgGlowID() && selected ? `url(#${context._selection.svgGlowID()})` : null)\n ;\n })\n ;\n\n const selRows = _selected.map(d => {\n return this.rowToObj(d);\n });\n setTimeout(() => {\n this.click(selRows, \"\", true);\n }, 0);\n }\n\n // XYAxis ---\n xAxisOrdinalMapping(origRow, lparam) {\n return origRow[0];\n }\n\n // Events ---\n click(row, column, selected) {\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\n }\n\n // Selection ---\n _selection: Utility.SimpleSelection;\n}\nXYAxis.prototype._class += \" chart_XYAxis\";\nXYAxis.prototype.mixin(Utility.SimpleSelectionMixin);\n\nexport interface XYAxis {\n 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}\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 });\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\";\n\nimport \"../src/Scatter.css\";\n\nexport class Scatter extends XYAxis {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"any\"\n }, {\n id: \"values\",\n type: \"number\",\n multi: true\n }];\n\n constructor() {\n super();\n INDChart.call(this);\n ITooltip.call(this);\n this\n .xAxisGuideLines_default(true)\n .yAxisGuideLines_default(true)\n ;\n }\n\n xPos(host: XYAxis, d) {\n return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\n }\n\n yPos(host: XYAxis, d) {\n return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\n }\n\n private curve(): any {\n switch (this.interpolate()) {\n case \"linear\":\n return d3CurveLinear;\n case \"step\":\n return d3CurveStep;\n case \"step-before\":\n return d3CurveStepBefore;\n case \"step-after\":\n return d3CurveStepAfter;\n case \"basis\":\n return d3CurveBasis;\n case \"bundle\":\n return d3CurveBundle;\n case \"cardinal\":\n return d3CurveCardinal;\n case \"catmullRom\":\n return d3curveCatmullRom;\n case \"natural\":\n return d3CurveNatural;\n case \"monotone\":\n default:\n return d3CurveMonotoneX;\n }\n }\n\n private getScale() {\n switch (this.pointSizeScale()) {\n case \"linear\":\n return d3ScaleLinear();\n case \"pow\":\n return d3ScalePow().exponent(2);\n case \"log\":\n return d3ScaleLog();\n case \"sqrt\":\n return d3ScaleSqrt();\n }\n }\n\n protected pointColor(row, col, value, origRow) {\n if (this.interpolate() && this.pointDarken()) {\n return this.strokeColor(row, col, value, origRow);\n }\n return this.fillColor(row, col, value, origRow);\n }\n\n protected lineColor(row, col, value, origRow) {\n if (this.interpolateFill() && this.interpolateDarken()) {\n return this.strokeColor(row, col, value, origRow);\n }\n return this.fillColor(row, col, value, origRow);\n }\n\n protected areaColor(row, col, value, origRow) {\n return this.fillColor(row, col, value, origRow);\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n super.layerEnter(host, element, duration);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.label,\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(column),\n value: context.data()[d.rowIdx][i + 1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.label, series: d.column, value: d.value });\n }\n })\n ;\n }\n\n protected _prevPointShape;\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n super.layerUpdate(host, element);\n const isHorizontal = host.orientation() === \"horizontal\";\n const height = isHorizontal ? this.height() : this.width();\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n if (this._prevPointShape !== this.pointShape()) {\n element.selectAll(\".data\").remove();\n this._prevPointShape = this.pointShape();\n }\n\n function mapShape(shape) {\n switch (shape) {\n case \"rectangle\":\n return \"rect\";\n case \"circle\":\n return \"circle\";\n case \"cross\":\n return \"path\";\n default:\n }\n }\n const usePointSizeColumn = this.pointSizeColumn_exists();\n let pointSizeColumnIdx;\n let extent;\n let scale;\n if (usePointSizeColumn) {\n pointSizeColumnIdx = this.columns().indexOf(this.pointSizeColumn());\n extent = d3Extent(this.data(), d => d[pointSizeColumnIdx]);\n scale = this.getScale().domain(extent);\n }\n const layerColumns = this.layerColumns(host);\n const layerData = this.layerData(host);\n const flatData = this.flattenData(layerColumns, layerData).map(function (d) {\n d.shape = mapShape(context.pointShape());\n d.column = layerColumns[d.colIdx];\n d.row = layerData[d.rowIdx];\n d.origRow = (layerData[d.rowIdx] as any).__hpcc_origRow;\n if (extent) {\n d.size = scale(d.row[pointSizeColumnIdx]) * (context.maxPointSize() - context.minPointSize()) + context.minPointSize();\n return d.column === context.pointSizeColumn() ? false : d;\n } else {\n d.size = context.pointSize();\n return d;\n }\n\n }).filter(d => d);\n\n const areas = element.selectAll(\".area\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && context.interpolateFill() && idx > 0; }));\n const areasEnter = areas.enter().append(\"path\");\n const area = d3Area()\n .curve(this.curve())\n ;\n if (isHorizontal) {\n area\n .x(function (d) { return context.xPos(host, d); })\n .y0(Math.min(height, this.yPos(host, { value: 0 })))\n .y1(function (d) { return context.yPos(host, d); })\n ;\n } else {\n area\n .y(function (d) { return context.yPos(host, d); })\n .x0(Math.max(0, this.xPos(host, { value: 0 })))\n .x1(function (d) { return context.xPos(host, d); })\n ;\n }\n areasEnter.merge(areas)\n .attr(\"class\", d => \"area series series-\" + this.cssTag(d))\n .each(function (_d, idx) {\n const element = d3Select(this);\n element\n .attr(\"d\", area(flatData.filter(function (d2) { return d2.colIdx === idx + 1; })))\n .style(\"opacity\", context.interpolateFillOpacity())\n .style(\"stroke\", \"none\")\n .style(\"fill\", context.areaColor([], _d, undefined, []))\n ;\n });\n areas.exit().remove();\n\n const lines = element.selectAll(\".line\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && idx > 0; }));\n const linesEnter = lines.enter().append(\"path\");\n const line = d3Line()\n .x(function (d) { return context.xPos(host, d); })\n .y(function (d) { return context.yPos(host, d); })\n .curve(this.curve())\n ;\n linesEnter.merge(lines)\n .attr(\"class\", d => \"line series series-\" + this.cssTag(d))\n .each(function (_d, idx) {\n const element = d3Select(this);\n const data2 = flatData.filter(function (d2) { return d2.colIdx === idx + 1; });\n element\n .attr(\"d\", line(data2))\n .style(\"stroke\", context.lineColor([], _d, undefined, []))\n .style(\"fill\", \"none\")\n ;\n });\n lines.exit().remove();\n\n const points = element.selectAll(\".point\").data(flatData, function (d, idx) { return d.shape + \"_\" + idx; });\n points.enter().append(\"g\")\n .each(function (this: SVGElement, d2) {\n const element = d3Select(this);\n element\n .append(d2.shape)\n .attr(\"class\", \"pointShape\")\n ;\n element\n .append(\"text\")\n .attr(\"class\", \"pointValue\")\n .style(\"display\", \"none\")\n .attr(\"text-anchor\", context.valueAnchor())\n .attr(\"alignment-baseline\", context.valueBaseline())\n .attr(\"fill\", function (d: any, _idx) {\n const useTextColor = context.valueBaseline() === \"middle\" || context.valueBaseline() === \"central\";\n return useTextColor ? context.textColor(d.row, d.column, d.value, d.origRow) : null;\n })\n ;\n element\n .append(\"circle\")\n .attr(\"class\", \"pointSelection\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .call(host._selection.enter.bind(host._selection))\n .on(\"click\", function (d: any, _idx) {\n context.click(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n })\n .on(\"dblclick\", function (d: any, _idx) {\n context.dblclick(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\n })\n ;\n })\n .merge(points)\n .attr(\"class\", d => \"point series series-\" + this.cssTag(d.column))\n .each(function (this: SVGElement, d2) {\n const textSelection = d3Select(this).select(\".pointValue\");\n textSelection\n .attr(\"x\", function (d) { return context.xPos(host, d); })\n .attr(\"y\", function (d) { return context.yPos(host, d); })\n .style(\"display\", context.showValue() ? \"block\" : \"none\")\n .attr(\"text-anchor\", context.valueAnchor())\n .attr(\"alignment-baseline\", context.valueBaseline())\n .text(function (d) {\n return d[\"value\"];\n })\n ;\n const elementSelection = d3Select(this).select(\".pointSelection\");\n elementSelection\n .attr(\"cx\", function (d) { return context.xPos(host, d); })\n .attr(\"cy\", function (d) { return context.yPos(host, d); })\n .attr(\"r\", d2.size)\n ;\n\n const element = d3Select(this).select(\".pointShape\");\n switch (d2.shape) {\n case \"rect\":\n element\n .attr(\"x\", function (d) { return context.xPos(host, d) - d2.size / 2; })\n .attr(\"y\", function (d) { return context.yPos(host, d) - d2.size / 2; })\n .attr(\"width\", d2.size)\n .attr(\"height\", d2.size)\n .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n ;\n break;\n case \"circle\":\n element\n .attr(\"cx\", function (d) { return context.xPos(host, d); })\n .attr(\"cy\", function (d) { return context.yPos(host, d); })\n .attr(\"r\", d2.size * 0.9)\n .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n ;\n break;\n case \"path\":\n element\n .attr(\"d\", function (d: any) {\n return \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2) + \" \" +\n \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\n \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2);\n })\n .style(\"stroke\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\n ;\n break;\n default:\n }\n })\n ;\n points.exit().remove();\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n paletteID: { (): string; (_: string): Scatter; };\n useClonedPalette: { (): boolean; (_: boolean): Scatter; };\n pointSizeScale: { (): string; (_: string): Scatter; };\n pointShape: { (): string; (_: string): Scatter; };\n pointSize: { (): number; (_: number): Scatter; };\n interpolate: { (): string; (_: string): Scatter; };\n interpolate_default: { (): string; (_: string): Scatter; };\n interpolateFill: { (): boolean; (_: boolean): Scatter; };\n interpolateFill_default: { (): boolean; (_: boolean): Scatter; };\n interpolateFillOpacity: { (): number; (_: number): Scatter; };\n\n // INDChart\n _palette;\n fillColor: (row, column, value, origRow) => string;\n strokeColor: (row, column, value, origRow) => string;\n textColor: (row, column, value, origRow) => string;\n dblclick: (row, column, selected) => void;\n\n // ITooltip\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n tooltipStyle: () => \"default\" | \"none\" | \"series-table\";\n}\nScatter.prototype._class += \" chart_Scatter\";\nScatter.prototype.implements(INDChart.prototype);\nScatter.prototype.implements(ITooltip.prototype);\nexport interface Scatter {\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}\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 {path} from \"d3-path\";\nimport constant from \"./constant.js\";\nimport curveLinear from \"./curve/linear.js\";\nimport line from \"./line.js\";\nimport {x as pointX, y as pointY} from \"./point.js\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import { Scatter } from \"./Scatter\";\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\";\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 isHorizontal: boolean;\n\n constructor() {\n super();\n INDChart.call(this);\n ITooltip.call(this);\n\n this._selection.skipBringToTop(true);\n\n this._linearGap = 25.0;\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n super.layerEnter(host, element, duration);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.row[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(column),\n value: d.row[i + 1]\n };\n })\n });\n default:\n let value = d.row[d.idx];\n if (value instanceof Array) {\n value = value[1] - value[0];\n }\n return context.tooltipFormat({ label: d.row[0], series: context.layerColumns(host)[d.idx], value });\n }\n })\n ;\n }\n\n adjustedData(host: XYAxis) {\n const retVal = this.layerData(host).map(row => {\n let prevValue = 0;\n return row.map((cell, idx) => {\n if (idx === 0) {\n return cell;\n }\n if (idx >= this.layerColumns(host).length) {\n return cell;\n }\n const retVal2 = host.yAxisStacked() ? [prevValue, prevValue + cell] : cell;\n prevValue += cell;\n return retVal2;\n }, this);\n }, this);\n return retVal;\n }\n\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n super.layerUpdate(host, element, duration);\n const isHorizontal = host.orientation() === \"horizontal\";\n this.isHorizontal = isHorizontal;\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n let dataLen = 10;\n let offset = 0;\n switch (host.xAxisType()) {\n case \"ordinal\":\n dataLen = host.bandwidth();\n offset = -dataLen / 2;\n break;\n case \"linear\":\n case \"time\":\n dataLen = Math.max(Math.abs(host.dataPos(2) - host.dataPos(1)) * (100 - this._linearGap) / 100, dataLen);\n offset = -dataLen / 2;\n break;\n default:\n }\n\n this.tooltip.direction(isHorizontal ? \"n\" : \"e\");\n\n const columnScale = d3ScaleBand()\n .domain(context.layerColumns(host).filter(function (_d, idx) { return idx > 0; }))\n .rangeRound(isHorizontal ? [0, dataLen] : [dataLen, 0])\n .paddingInner(this.xAxisSeriesPaddingInner())\n .paddingOuter(0)\n ;\n const rowData = this.adjustedData(host);\n let domainSums = [];\n const seriesSums = [];\n const columnLength = this.columns().length;\n if (this.showValue()) {\n switch (this.showValueAsPercent()) {\n case \"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 break;\n case \"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 break;\n case null:\n default:\n }\n }\n const column = element.selectAll(\".dataRow\")\n .data(this.adjustedData(host))\n ;\n const hostData = host.data();\n const axisSize = this.getAxisSize(host);\n column.enter().append(\"g\")\n .attr(\"class\", \"dataRow\")\n .merge(column)\n .each(function (dataRow, dataRowIdx) {\n const element = d3Select(this);\n\n const columnGRect = element.selectAll(\".dataCell\").data(dataRow.filter(function (_d, i) { return i < context.layerColumns(host).length; }).map(function (d, i) {\n return {\n column: context.layerColumns(host)[i],\n row: dataRow,\n origRow: hostData[dataRowIdx],\n value: d,\n idx: i\n };\n }).filter(function (d) { return d.value !== null && d.idx > 0; }), (d: any) => d.column);\n\n const columnGEnter = columnGRect\n .enter().append(\"g\")\n .attr(\"class\", \"dataCell\")\n .on(\"mouseout.tooltip\", function (d: any) {\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n context.tooltip.hide.apply(context, arguments);\n }\n })\n .on(\"mousemove.tooltip\", function (d: any) {\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n context.tooltip.show.apply(context, arguments);\n }\n })\n .call(host._selection.enter.bind(host._selection))\n .on(\"click\", function (d: any) {\n context.click(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n })\n .on(\"dblclick\", function (d: any) {\n context.dblclick(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n })\n .style(\"opacity\", 0)\n .each(function (this: SVGElement, d: any) {\n const element = d3Select(this);\n element.append(\"rect\")\n .attr(\"class\", \"columnRect series series-\" + context.cssTag(d.column))\n ;\n element.append(\"text\")\n .attr(\"class\", \"columnRectText\")\n .style(\"stroke\", \"transparent\")\n ;\n })\n ;\n columnGEnter.transition().duration(duration)\n .style(\"opacity\", 1)\n ;\n const domainLength = host.yAxisStacked() ? dataLen : columnScale.bandwidth();\n columnGEnter.merge(columnGRect as any).each(function (this: SVGElement, d: any) {\n const element = d3Select(this);\n const domainPos = host.dataPos(dataRow[0]) + (host.yAxisStacked() ? 0 : columnScale(d.column)) + offset;\n const upperValue = d.value instanceof Array ? d.value[1] : d.value;\n let valueText = d.origRow[d.idx];\n if (context.showValue()) {\n const dm = context.dataMeta();\n switch (context.showValueAsPercent()) {\n case \"series\":\n const seriesSum = typeof dm.sum !== \"undefined\" ? dm.sum : seriesSums[d.idx];\n valueText = d3Format(context.showValueAsPercentFormat())(valueText / seriesSum);\n break;\n case \"domain\":\n const domainSum = typeof dm.sum !== \"undefined\" ? dm.sum : domainSums[d.idx];\n valueText = d3Format(context.showValueAsPercentFormat())(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\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 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())\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 column.exit().transition().duration(duration)\n .remove()\n ;\n }\n\n calcInnerText(offset, innerText, valueText) {\n\n const fontFamily = this.innerTextFontFamily_exists() ? this.innerTextFontFamily() : \"Verdana\";\n const fontSize = this.innerTextFontSize();\n const valueFontFamily = this.valueFontFamily_exists() ? this.valueFontFamily() : \"Verdana\";\n const valueFontSize = this.valueFontSize();\n const padding = this.innerTextPadding_exists() ? this.innerTextPadding() : fontSize / 2.5;\n const valueTextWidth = this.isHorizontal ? valueFontSize : this.textSize(valueText, valueFontFamily, valueFontSize).width;\n const ellipsisWidth = this.textSize(\"...\", fontFamily, fontSize).width;\n const innerTextWidth = this.textSize(innerText, fontFamily, fontSize).width;\n const origInnerText = innerText;\n\n const fullWidth = (padding * 3) + innerTextWidth + valueTextWidth;\n const fullWidth2 = (padding * 3) + ellipsisWidth + valueTextWidth;\n const fullWidth3 = (padding * 1) + valueTextWidth;\n /*\n Categories:\n 1) room to display inner text (with padding) AND value text (with padding)\n 2) room to display ellipsis (with padding) AND value text (with padding)\n 3) room to display value text only (with padding)\n 4) no room to display any text except value on the outside\n */\n let category = 4;\n if (fullWidth < offset) {\n category = 1;\n } else if (fullWidth2 < offset) {\n const excessWidth = offset - fullWidth2;\n let _text = \"\";\n for (const letter of innerText) {\n if (this.textSize(_text + letter, fontFamily, fontSize).width > excessWidth) {\n innerText = _text + \"...\";\n break;\n } else {\n _text += letter;\n }\n }\n category = 2;\n } else if (fullWidth3 < offset) {\n innerText = \"\";\n category = 3;\n } else {\n innerText = \"\";\n }\n\n return {\n text: innerText,\n isTruncated: origInnerText !== innerText,\n padding,\n category,\n valueTextWidth\n };\n }\n\n innerText(origRow, lparam, idx): string {\n return origRow[0];\n }\n\n // INDChart ---\n _palette;\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}\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 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\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\", \".2s\", \"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(\"valueCentered\", false, \"boolean\", \"Show Value in center of column\");\nColumn.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nColumn.prototype.publish(\"xAxisSeriesPaddingInner\", 0, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\");\nColumn.prototype.publish(\"tooltipInnerTextEllipsedOnly\", false, \"boolean\", \"Show tooltip only when inner text is truncated with an ellipsis\");\n\n/*\nconst origUseClonedPalette = Column.prototype.useClonedPalette;\nColumn.prototype.useClonedPalette = function (this: Column, _?) {\n const retVal = origUseClonedPalette.apply(this, arguments);\n if (arguments.length) {\n this._useClonedPalette = _;\n }\n return retVal;;\n}\n*/\n","import { Column } from \"./Column\";\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","import node_count from \"./count.js\";\nimport node_each from \"./each.js\";\nimport node_eachBefore from \"./eachBefore.js\";\nimport node_eachAfter from \"./eachAfter.js\";\nimport node_sum from \"./sum.js\";\nimport node_sort from \"./sort.js\";\nimport node_path from \"./path.js\";\nimport node_ancestors from \"./ancestors.js\";\nimport node_descendants from \"./descendants.js\";\nimport node_leaves from \"./leaves.js\";\nimport node_links from \"./links.js\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {shuffle, slice} from \"../array.js\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import enclose from \"./enclose.js\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings.js\";\nimport {optional} from \"../accessors.js\";\nimport constant, {constantZero} from \"../constant.js\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { FAChar, InputField, ISize, SVGWidget, Text, Utility } from \"@hpcc-js/common\";\nimport { hierarchy as d3Hierarchy, pack as d3Pack } from \"d3-hierarchy\";\nimport { select as d3Select } from \"d3-selection\";\n\nimport \"../src/Bubble.css\";\n\nexport class Bubble extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n labelWidgets;\n d3Pack;\n\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this._drawStartPos = \"origin\";\n\n this.labelWidgets = {};\n\n this.d3Pack = d3Pack()\n .size([this.width(), this.height()])\n .padding(1.5)\n ;\n }\n\n size(): ISize;\n size(_): this;\n size(_?): ISize | this {\n const retVal = super.size.apply(this, arguments);\n if (arguments.length) {\n this.d3Pack\n .size([this.width(), this.height()])\n ;\n }\n return retVal;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._selection.widgetElement(element);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(d[0]),\n value: d[1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n }\n })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n const root = d3Hierarchy({ children: this.cloneData() })\n .sum(function (d) { return d[1]; })\n .sort(function (b, a) {\n return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;\n })\n ;\n this.d3Pack(root);\n\n const node = element.selectAll(\".node\").data(root.children || [], d => d.data[0]);\n\n // Enter ---\n node.enter().append(\"g\")\n .attr(\"class\", (d, i) => \"node series series-\" + this.cssTag(d.data[0]))\n .attr(\"opacity\", 0)\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .each(function (d) {\n const element2 = d3Select(this);\n const pos = { x: d.x, y: d.y };\n element2.append(\"circle\")\n .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\n .attr(\"r\", 0)\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n ;\n if (d.__viz_faChar) {\n context.labelWidgets[d.data[0]] = new FAChar()\n .char(d.__viz_faChar)\n .target(this)\n .render()\n ;\n } else {\n context.labelWidgets[d.data[0]] = new Text()\n .text(d.data[0])\n .target(this)\n .render()\n ;\n }\n })\n .merge(node).transition()\n .attr(\"opacity\", 1)\n .each(function (d) {\n const element2 = d3Select(this);\n const pos = { x: d.x, y: d.y };\n element2.select(\"circle\").transition()\n .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n .attr(\"r\", d.r)\n .select(\"title\")\n .text(d.data[0] + \" (\" + d.data[1] + \")\")\n ;\n if (d.__viz_faChar) {\n context.labelWidgets[d.data[0]]\n .pos(pos)\n .render()\n ;\n } else {\n context.labelWidgets[d.data[0]]\n .pos(pos)\n .colorFill_default(context.textColor(d.data, context.columns()[1], d.data[1]))\n .width(d.r * 2)\n .text(d.data[0])\n .render()\n ;\n }\n })\n ;\n\n // Exit ---\n node.exit().transition()\n .style(\"opacity\", 0)\n .remove()\n ;\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n paletteID: { (): string; (_: string): Bubble; };\n useClonedPalette: { (): boolean; (_: boolean): Bubble; };\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}\nBubble.prototype._class += \" chart_Bubble\";\nBubble.prototype.implements(I2DChart.prototype);\nBubble.prototype.implements(ITooltip.prototype);\nBubble.prototype.mixin(Utility.SimpleSelectionMixin);\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\";\n\nexport class BubbleXY extends Scatter {\n constructor() {\n super();\n }\n enter(domNode, element) {\n if (!this.pointSizeColumn_exists()) {\n this.pointSizeColumn(this.columns()[this.columns().length - 1]);\n }\n super.enter(domNode, element);\n }\n}\nBubbleXY.prototype._class += \" chart_BubbleXY\";\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import { descending as d3Descending } from \"d3-array\";\r\nimport { axisLeft as d3AxisLeft } from \"d3-axis\";\r\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { timerFlush as d3TimerFlush } from \"d3-timer\";\r\nimport \"d3-transition\";\r\n\r\nexport default function () {\r\n var orient = \"left\",\r\n reverse = false,\r\n vertical = false,\r\n ranges = bulvarRanges,\r\n markers = bulvarMarkers,\r\n measures = bulvarMeasures,\r\n width = 380,\r\n height = 30,\r\n xAxis = d3AxisLeft();\r\n\r\n // For each small multiple…\r\n function bulvar(g) {\r\n g.each(function (d, i) {\r\n var rangez = ranges.call(this, d, i).slice().sort(d3Descending),\r\n markerz = markers.call(this, d, i).slice().sort(d3Descending),\r\n measurez = measures.call(this, d, i).slice().sort(d3Descending),\r\n g2 = d3Select(this),\r\n extentX,\r\n extentY;\r\n\r\n var wrap = g2.select(\"g.wrap\");\r\n if (wrap.empty()) wrap = g2.append(\"g\").attr(\"class\", \"wrap\");\r\n\r\n if (vertical) {\r\n extentX = height, extentY = width;\r\n wrap.attr(\"transform\", \"rotate(90)translate(0,\" + -width + \")\");\r\n } else {\r\n extentX = width, extentY = height;\r\n wrap.attr(\"transform\", null);\r\n }\r\n\r\n // Compute the new x-scale.\r\n var x1 = d3ScaleLinear()\r\n .domain([0, Math.max(rangez[0], markerz[0], measurez[0])])\r\n .range(reverse ? [extentX, 0] : [0, extentX]);\r\n\r\n // Retrieve the old x-scale, if this is an update.\r\n var x0 = this.__chart__ || d3ScaleLinear()\r\n .domain([0, Infinity])\r\n .range(x1.range());\r\n\r\n // Stash the new scale.\r\n this.__chart__ = x1;\r\n\r\n // Derive width-scales from the x-scales.\r\n var w0 = bulvarWidth(x0),\r\n w1 = bulvarWidth(x1);\r\n\r\n // Update the range rects.\r\n var range = wrap.selectAll(\"rect.range\")\r\n .data(rangez);\r\n\r\n range.enter().append(\"rect\")\r\n .attr(\"class\", function (_d, i2) { return \"range s\" + i2; })\r\n .attr(\"width\", w0)\r\n .attr(\"height\", extentY)\r\n .attr(\"x\", reverse ? x0 : 0)\r\n .merge(range)\r\n .transition(range)\r\n .attr(\"x\", reverse ? x1 : 0)\r\n .attr(\"width\", w1)\r\n .attr(\"height\", extentY);\r\n\r\n // Update the measure rects.\r\n var measure = wrap.selectAll(\"rect.measure\")\r\n .data(measurez);\r\n\r\n measure.enter().append(\"rect\")\r\n .attr(\"class\", function (_d, i2) { return \"measure s\" + i2; })\r\n .attr(\"width\", w0)\r\n .attr(\"height\", extentY / 3)\r\n .attr(\"x\", reverse ? x0 : 0)\r\n .attr(\"y\", extentY / 3)\r\n .merge(measure)\r\n .transition(measure)\r\n .attr(\"width\", w1)\r\n .attr(\"height\", extentY / 3)\r\n .attr(\"x\", reverse ? x1 : 0)\r\n .attr(\"y\", extentY / 3);\r\n\r\n // Update the marker lines.\r\n var marker = wrap.selectAll(\"line.marker\")\r\n .data(markerz);\r\n\r\n marker.enter().append(\"line\")\r\n .attr(\"class\", \"marker\")\r\n .attr(\"x1\", x0)\r\n .attr(\"x2\", x0)\r\n .attr(\"y1\", extentY / 6)\r\n .attr(\"y2\", extentY * 5 / 6)\r\n .merge(marker)\r\n .transition(marker)\r\n .attr(\"x1\", x1)\r\n .attr(\"x2\", x1)\r\n .attr(\"y1\", extentY / 6)\r\n .attr(\"y2\", extentY * 5 / 6);\r\n\r\n var axis = g2.selectAll(\"g.axis\").data([0]);\r\n axis.enter().append(\"g\").attr(\"class\", \"axis\");\r\n axis.attr(\"transform\", vertical ? null : \"translate(0,\" + extentY + \")\")\r\n .call(xAxis.scale(x1));\r\n });\r\n d3TimerFlush();\r\n }\r\n\r\n // left, right, top, bottom\r\n bulvar.orient = function (_) {\r\n if (!arguments.length) return orient;\r\n orient = _ + \"\";\r\n reverse = orient === \"right\" || orient === \"bottom\";\r\n xAxis.orient((vertical = orient === \"top\" || orient === \"bottom\") ? \"left\" : \"bottom\"); // eslint-disable-line\r\n return bulvar;\r\n };\r\n\r\n // ranges (bad, satisfactory, good)\r\n bulvar.ranges = function (_) {\r\n if (!arguments.length) return ranges;\r\n ranges = _;\r\n return bulvar;\r\n };\r\n\r\n // markers (previous, goal)\r\n bulvar.markers = function (_) {\r\n if (!arguments.length) return markers;\r\n markers = _;\r\n return bulvar;\r\n };\r\n\r\n // measures (actual, forecast)\r\n bulvar.measures = function (_) {\r\n if (!arguments.length) return measures;\r\n measures = _;\r\n return bulvar;\r\n };\r\n\r\n bulvar.width = function (_) {\r\n if (!arguments.length) return width;\r\n width = +_;\r\n return bulvar;\r\n };\r\n\r\n bulvar.height = function (_) {\r\n if (!arguments.length) return height;\r\n height = +_;\r\n return bulvar;\r\n };\r\n\r\n bulvar.tickFormat = function (_) {\r\n if (!arguments.length) return xAxis.tickFormat();\r\n xAxis.tickFormat(_);\r\n return bulvar;\r\n };\r\n\r\n return bulvar;\r\n}\r\n\r\nfunction bulvarRanges(d) {\r\n return d.ranges;\r\n}\r\n\r\nfunction bulvarMarkers(d) {\r\n return d.markers;\r\n}\r\n\r\nfunction bulvarMeasures(d) {\r\n return d.measures;\r\n}\r\n\r\nfunction bulvarWidth(x) {\r\n var x0 = x(0);\r\n return function (d) {\r\n return Math.abs(x(d) - x0);\r\n };\r\n}\r\n","import { HTMLWidget, publish, Utility } from \"@hpcc-js/common\";\nimport { select as d3Select } from \"d3-selection\";\nimport { bullet as d3Bullet } from \"d3v4-bullet\";\n\nimport \"../src/Bullet.css\";\n\nexport class Bullet extends HTMLWidget {\n @publish(null, \"set\", \"Title Column\", function () { return this.columns(); }, { optional: true })\n titleColumn: publish<this, string>;\n @publish(null, \"set\", \"Subtitle Column\", function () { return this.columns(); }, { optional: true })\n subtitleColumn: publish<this, string>;\n @publish(null, \"set\", \"Ranges Column\", function () { return this.columns(); }, { optional: true })\n rangesColumn: publish<this, string>;\n @publish(null, \"set\", \"Measures Column\", function () { return this.columns(); }, { optional: true })\n measuresColumn: publish<this, string>;\n @publish(null, \"set\", \"Markers Column\", function () { return this.columns(); }, { optional: true })\n markersColumn: publish<this, string>;\n\n private _hiddenColumns = {};\n\n constructor() {\n super();\n Utility.SimpleSelectionMixin.call(this, true);\n }\n\n bulletData() {\n const context = this;\n this._hiddenColumns = {};\n const columns = this.columns();\n return this.data().map(function (row) {\n return {\n title: valueOf(row, this.titleColumn()),\n subtitle: valueOf(row, this.subtitleColumn()),\n ranges: valueOf(row, this.rangesColumn(), \"range\"),\n measures: valueOf(row, this.measuresColumn(), \"measure\"),\n markers: valueOf(row, this.markersColumn(), \"marker\"),\n origRow: row\n };\n }, this);\n\n function valueOf(row, column, columnType?) {\n const colIdx = columns.indexOf(column);\n if (colIdx >= 0) {\n if (row[colIdx] instanceof Array) {\n return row[colIdx];\n }\n return [row[colIdx]];\n }\n if (columnType) {\n context._hiddenColumns[columnType] = true;\n }\n return [0];\n }\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n d3Select(domNode.parentNode).style(\"overflow\", \"auto\");\n this._selection.widgetElement(element);\n }\n\n update(_domNode, element) {\n super.update(_domNode, element);\n const context = this;\n\n element.selectAll(\".axis\")\n .style(\"display\", \"none\")\n ;\n element.selectAll(\".range,.measure,.marker\")\n .style(\"display\", null)\n ;\n\n const margin = { left: 2, top: 8, right: 2, bottom: 8 };\n const width = this.width() - margin.left - margin.right;\n const height = 40 - margin.top - margin.bottom;\n\n const svg = element.selectAll(\"svg\").data(this.bulletData());\n const svgUpdate = svg.enter().append(\"svg\")\n .attr(\"class\", \"bullet\")\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\n })\n .each(function () {\n const element2 = d3Select(this);\n const bulletBar = element2.append(\"g\")\n .attr(\"class\", (d, i) => \"bulletBar series series-\" + context.cssTag(context.titleColumn()))\n ;\n const bulletTitle = bulletBar.append(\"g\")\n .attr(\"class\", \"bulletTitle\")\n ;\n bulletTitle.append(\"text\")\n .attr(\"class\", \"title\")\n ;\n bulletTitle.append(\"text\")\n .attr(\"class\", \"subtitle\")\n .attr(\"dy\", \"1em\")\n ;\n })\n .merge(svg)\n ;\n\n // Title ---\n const title = svgUpdate.select(\".bulletTitle\")\n .style(\"text-anchor\", \"end\")\n .attr(\"transform\", \"translate(-6,\" + height / 2 + \")\")\n ;\n title.select(\".title\")\n .text(function (d) { return d.title; })\n ;\n title.select(\".subtitle\")\n .text(function (d) { return d.subtitle; })\n ;\n\n let titleWidth = 0;\n title.each(function () {\n const bbox = this.getBBox();\n if (bbox.width > titleWidth) {\n titleWidth = bbox.width;\n }\n });\n titleWidth; // Gap between title and bullet bar.\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","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(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","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","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder.js\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder.js\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import { 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\";\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 identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","import { Bar } from \"./Bar\";\n\nexport class Gantt extends Bar {\n constructor() {\n super();\n\n this\n .orientation_default(\"vertical\")\n .xAxisType_default(\"ordinal\")\n .yAxisType_default(\"time\")\n ;\n }\n}\nGantt.prototype._class += \" chart_Gantt\";\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {epsilon, pi, halfPi, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = Math.abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),\n rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * Math.sin(ap)),\n p1 = asin(rp / r1 * Math.sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * Math.cos(a01),\n y01 = r1 * Math.sin(a01),\n x10 = r0 * Math.cos(a10),\n y10 = r0 * Math.sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * Math.cos(a11),\n y11 = r1 * Math.sin(a11),\n x00 = r0 * Math.cos(a00),\n y00 = r0 * Math.sin(a00);\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi) {\n var oc = da0 > epsilon ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],\n ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),\n lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [Math.cos(a) * r, Math.sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","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","export default class Annotation {\n constructor({\n x = 0,\n y = 0,\n nx,\n ny,\n dy = 0,\n dx = 0,\n color = \"grey\",\n data,\n type,\n subject,\n connector,\n note,\n disable,\n id,\n className\n }) {\n this._dx = nx !== undefined ? nx - x : dx\n this._dy = ny !== undefined ? ny - y : dy\n this._x = x\n this._y = y\n this._color = color\n this.id = id\n this._className = className || \"\"\n\n this._type = type || \"\"\n this.data = data\n\n this.note = note || {}\n this.connector = connector || {}\n this.subject = subject || {}\n\n this.disable = disable || []\n }\n\n updatePosition() {\n if (this.type.setPosition) {\n this.type.setPosition()\n if (\n this.type.subject &&\n this.type.subject.selectAll(\":not(.handle)\").nodes().length !== 0\n ) {\n this.type.redrawSubject()\n }\n }\n }\n\n clearComponents() {\n this.type.clearComponents && this.type.clearComponents()\n }\n\n get className() {\n return this._className\n }\n\n set className(className) {\n this._className = className\n if (this.type.setClassName) this.type.setClassName()\n }\n\n updateOffset() {\n if (this.type.setOffset) {\n this.type.setOffset()\n\n if (this.type.connector.selectAll(\":not(.handle)\").nodes().length !== 0) {\n this.type.redrawConnector()\n }\n\n this.type.redrawNote()\n }\n }\n\n get type() {\n return this._type\n }\n\n set type(type) {\n this._type = type\n this.clearComponents()\n }\n\n get x() {\n return this._x\n }\n set x(x) {\n this._x = x\n this.updatePosition()\n }\n\n get y() {\n return this._y\n }\n set y(y) {\n this._y = y\n this.updatePosition()\n }\n\n get color() {\n return this._color\n }\n set color(color) {\n this._color = color\n this.updatePosition()\n }\n\n get dx() {\n return this._dx\n }\n set dx(dx) {\n this._dx = dx\n this.updateOffset()\n }\n\n get dy() {\n return this._dy\n }\n set dy(dy) {\n this._dy = dy\n this.updateOffset()\n }\n\n set nx(nx) {\n this._dx = nx - this._x\n this.updateOffset()\n }\n\n set ny(ny) {\n this._dy = ny - this._y\n this.updateOffset()\n }\n\n get offset() {\n return { x: this._dx, y: this._dy }\n }\n\n set offset({ x, y }) {\n this._dx = x\n this._dy = y\n this.updateOffset()\n }\n\n get position() {\n return { x: this._x, y: this._y }\n }\n\n set position({ x, y }) {\n this._x = x\n this._y = y\n this.updatePosition()\n }\n\n get translation() {\n return {\n x: this._x + this._dx,\n y: this._y + this._dy\n }\n }\n\n get json() {\n const json = {\n x: this._x,\n y: this._y,\n dx: this._dx,\n dy: this._dy\n }\n\n if (this.data && Object.keys(this.data).length > 0) json.data = this.data\n if (this.type) json.type = this.type\n if (this._className) json.className = this._className\n\n if (Object.keys(this.connector).length > 0) json.connector = this.connector\n if (Object.keys(this.subject).length > 0) json.subject = this.subject\n if (Object.keys(this.note).length > 0) json.note = this.note\n\n return json\n }\n}\n","export default class AnnotationCollection {\n\n constructor ({ annotations, accessors, accessorsInverse }) {\n this.accessors = accessors\n this.accessorsInverse = accessorsInverse\n this.annotations = annotations\n }\n\n clearTypes (newSettings) {\n this.annotations.forEach(d => {\n d.type = undefined\n d.subject = newSettings && newSettings.subject || d.subject\n d.connector = newSettings && newSettings.connector || d.connector\n d.note = newSettings && newSettings.note || d.note\n })\n }\n\n setPositionWithAccessors () {\n this.annotations.forEach(d => {\n d.type.setPositionWithAccessors(this.accessors)\n })\n }\n\n editMode (editMode) { this.annotations.forEach(a => {\n if (a.type) {\n a.type.editMode = editMode\n a.type.updateEditMode()\n }\n })\n }\n\n updateDisable (disable) {\n this.annotations.forEach(a => {\n a.disable = disable\n if (a.type) {\n disable.forEach(d => {\n if (a.type[d]) {\n a.type[d].remove && a.type[d].remove()\n a.type[d] = undefined\n }\n })\n }\n })\n }\n\n updateTextWrap (textWrap) {\n this.annotations.forEach(a => {\n if (a.type && a.type.updateTextWrap) {\n a.type.updateTextWrap(textWrap)\n }\n })\n }\n\n updateText () {\n this.annotations.forEach(a => {\n if (a.type && a.type.drawText) {\n a.type.drawText()\n }\n })\n }\n\n updateNotePadding (notePadding) {\n this.annotations.forEach(a => {\n if (a.type) {\n a.type.notePadding = notePadding\n }\n })\n }\n\n get json () { \n return this.annotations.map(a => { \n const json = a.json\n if (this.accessorsInverse && a.data) {\n json.data = {}\n Object.keys(this.accessorsInverse).forEach(k => {\n json.data[k] = this.accessorsInverse[k]({ x: a.x, y: a.y})\n\n //TODO make this feasible to map back to data for other types of subjects\n })\n }\n return json\n })\n }\n\n get noteNodes () {\n return this.annotations.map(a => ({ ...a.type.getNoteBBoxOffset(), positionX: a.x, positionY: a.y }))\n }\n\n //TODO: come back and rethink if a.x and a.y are applicable in all situations\n // get connectorNodes() {\n // return this.annotations.map(a => ({ ...a.type.getConnectorBBox(), startX: a.x, startY: a.y}))\n // }\n\n // get subjectNodes() {\n // return this.annotations.map(a => ({ ...a.type.getSubjectBBox(), startX: a.x, startY: a.y}))\n // }\n\n // get annotationNodes() {\n // return this.annotations.map(a => ({ ...a.type.getAnnotationBBox(), startX: a.x, startY: a.y}))\n // }\n}\n","\nexport const leftRightDynamic = (align, y) => {\n if (align === \"dynamic\" || align === \"left\" || align === \"right\") {\n if (y < 0) { align = \"top\" }\n else { align = \"bottom\" } \n }\n return align\n}\n\nexport const topBottomDynamic = (align, x) => {\n if (align === \"dynamic\" || align === \"top\" || align === \"bottom\") {\n if (x < 0) { align = \"right\" }\n else { align = \"left\" } \n }\n return align\n}\n\nconst orientationTopBottom = [\"topBottom\", \"top\", \"bottom\"]\nconst orientationLeftRight = [\"leftRight\", \"left\", \"right\"]\n\nexport default ({ padding=0, bbox={x:0, y:0, width:0, height:0}, align, orientation, offset={x:0, y:0} }) => {\n let x = -bbox.x \n let y = 0//-bbox.y\n if ( orientationTopBottom.indexOf(orientation) !== -1 ) {\n align = topBottomDynamic(align, offset.x)\n if (offset.y < 0 && orientation === \"topBottom\" || orientation === \"top\") { \n y -= bbox.height + padding\n } else {\n y += padding\n }\n\n if ( align === \"middle\" ) {\n x -= bbox.width/2\n } else if (align === \"right\" ) {\n x -= bbox.width\n } \n\n } else if ( orientationLeftRight.indexOf(orientation) !== -1 ) {\n align = leftRightDynamic(align, offset.y)\n if (offset.x < 0 && orientation === \"leftRight\" || orientation === \"left\") { \n x -= bbox.width + padding\n } else {\n x += padding\n }\n\n if ( align === \"middle\" ) {\n y -= bbox.height/2\n } else if (align === \"top\" ) {\n y -= bbox.height\n }\n } \n\n return { x, y }\n}","import { line, arc, curveLinear } from \"d3-shape\"\n\nexport const lineBuilder = ({ data, curve=curveLinear, canvasContext, className, classID }) => { \n const lineGen = line()\n .curve(curve)\n\n const builder = {\n type: 'path',\n className,\n classID,\n data\n }\n\n if (canvasContext) {\n lineGen.context(canvasContext)\n builder.pathMethods = lineGen\n\n } else {\n builder.attrs = {\n d: lineGen(data)\n }\n }\n\n return builder\n}\n\nexport const arcBuilder = ({ data, canvasContext, className, classID }) => {\n\n const builder = {\n type: 'path',\n className,\n classID,\n data\n }\n\n const arcShape = arc()\n .innerRadius(data.innerRadius || 0)\n .outerRadius(data.outerRadius || data.radius || 2)\n .startAngle(data.startAngle || 0)\n .endAngle(data.endAngle || 2*Math.PI)\n\n if (canvasContext) {\n arcShape.context(canvasContext)\n builder.pathMethods = lineGen\n\n } else {\n \n builder.attrs = {\n d: arcShape()\n }\n }\n\n return builder\n}","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import { lineBuilder } from '../Builder'\nimport { leftRightDynamic } from './alignment'\n\nexport default ({ align, x=0, y=0, bbox, offset }) => {\n align = leftRightDynamic(align, offset.y)\n\n if (align === \"top\") { y -= bbox.height } \n else if (align === \"middle\") { y -= bbox.height/2 }\n\n const data = [[x, y], [x, y + bbox.height]]\n return { components: [lineBuilder({ data, className : \"note-line\" })] }\n}","import { lineBuilder } from '../Builder'\nimport { topBottomDynamic } from './alignment'\n\nexport default ({ align, x=0, y=0, offset, bbox }) => {\n align = topBottomDynamic(align, offset.x)\n\n if (align === \"right\") { x -= bbox.width }\n else if (align === \"middle\") { x -= bbox.width/2 }\n\n const data = [[x, y], [x + bbox.width, y]]\n return { components: [lineBuilder({ data, className : \"note-line\" })] }\n}","import { lineBuilder } from '../Builder'\n\nexport const lineSetup = ({ type, subjectType }) => {\n let annotation = type.annotation\n let offset = annotation.position\n \n let x1 = annotation.x - offset.x,\n x2 = x1 + annotation.dx,\n y1 = annotation.y - offset.y,\n y2 = y1 + annotation.dy\n\n\n const subjectData = annotation.subject\n\n if (subjectType === \"circle\" && (subjectData.outerRadius || subjectData.radius)) {\n const h = Math.sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2))\n const angle = Math.asin(-y2/h)\n const r = subjectData.outerRadius || subjectData.radius + (subjectData.radiusPadding || 0)\n\n x1 = Math.abs(Math.cos(angle)*r)*(x2 < 0 ? -1 : 1)\n y1 = Math.abs(Math.sin(angle)*r)*(y2 < 0 ? -1 : 1)\n\n }\n\n if (subjectType === \"rect\") {\n const { width, height } = subjectData\n \n if (width > 0 && annotation.dx > 0 || width < 0 && annotation.dx < 0) {\n if (Math.abs(width) > Math.abs(annotation.dx)) x1 = width/2\n else x1 = width\n } \n if (height > 0 && annotation.dy > 0 || height < 0 && annotation.dy < 0) {\n if (Math.abs(height) > Math.abs(annotation.dy)) y1 = height/2\n else y1 = height\n }\n if (x1 === width/2 && y1 === height/2) { x1 = x2; y1 = y2;}\n }\n\n\n return [[x1, y1], [x2, y2]]\n}\n\nexport default (connectorData) => {\n const data = lineSetup(connectorData)\n return { components: [lineBuilder({ data, className : \"connector\" })]} \n}","import { lineBuilder } from '../Builder'\n\nexport default ({ type, subjectType }) => {\n\n const annotation = type.annotation\n const offset = annotation.position\n\n let x1 = annotation.x - offset.x,\n x2 = x1 + annotation.dx,\n y1 = annotation.y - offset.y,\n y2 = y1 + annotation.dy\n\n const subjectData = annotation.subject\n\n if (subjectType === \"rect\") {\n const { width, height } = subjectData\n \n if (width > 0 && annotation.dx > 0 || width < 0 && annotation.dx < 0) {\n if (Math.abs(width) > Math.abs(annotation.dx)) x1 = width/2\n else x1 = width\n } \n if (height > 0 && annotation.dy > 0 || height < 0 && annotation.dy < 0) {\n if (Math.abs(height) > Math.abs(annotation.dy)) y1 = height/2\n else y1 = height\n }\n if (x1 === width/2 && y1 === height/2) { x1 = x2; y1 = y2;}\n }\n\n let data = [[x1, y1], [x2, y2]]\n\n let diffY = y2 - y1\n let diffX = x2 - x1\n let xe = x2 \n let ye = y2\n let opposite = y2 < y1 && x2 > x1 || x2 < x1 && y2 > y1 ? -1 : 1\n\n if (Math.abs(diffX) < Math.abs(diffY)) {\n xe = x2\n ye = y1 + diffX*opposite\n } else {\n ye = y2\n xe = x1 + diffY*opposite\n }\n \n if (subjectType === \"circle\" && (subjectData.outerRadius || subjectData.radius)) {\n const r = (subjectData.outerRadius || subjectData.radius) + (subjectData.radiusPadding || 0)\n const length = r/Math.sqrt(2)\n\n if (Math.abs(diffX) > length && Math.abs(diffY) > length) {\n x1 = length*(x2 < 0 ? -1 : 1)\n y1 = length*(y2 < 0 ? -1 : 1)\n data = [[x1, y1], [xe , ye ], [x2, y2]]\n\n } else if (Math.abs(diffX) > Math.abs(diffY)) {\n const angle = Math.asin(-y2/r)\n x1 = Math.abs(Math.cos(angle)*r)*(x2 < 0 ? -1 : 1)\n data = [[ x1, y2], [x2, y2]]\n } else {\n const angle = Math.acos(x2/r)\n y1 = Math.abs(Math.sin(angle)*r)*(y2 < 0 ? -1 : 1)\n data = [[ x2, y1], [x2, y2]]\n }\n } else {\n data = [[x1, y1], [xe , ye], [x2, y2]]\n }\n\n return { components: [lineBuilder({ data, className: \"connector\"})]}\n}\n","import { lineBuilder } from '../Builder'\nimport { event } from 'd3-selection'\nimport { lineSetup } from './type-line'\nimport { curveCatmullRom } from 'd3-shape'\nimport { pointHandle } from '../Handles'\n\nexport default ({ type, connectorData, subjectType }) => {\n\n if (!connectorData) { connectorData = {} }\n if (!connectorData.points || typeof connectorData.points === \"number\") { \n connectorData.points = createPoints(type.annotation.offset, connectorData.points) \n }\n if (!connectorData.curve) { connectorData.curve = curveCatmullRom }\n\n let handles = []\n\n if (type.editMode) {\n const cHandles = connectorData.points\n .map((c,i) => ({...pointHandle({cx: c[0], cy: c[1]}), index: i}))\n\n const updatePoint = (index) => { \n connectorData.points[index][0] += event.dx\n connectorData.points[index][1] += event.dy\n type.redrawConnector()\n }\n \n handles = type.mapHandles(cHandles\n .map(h => ({ ...h.move, drag: updatePoint.bind(type, h.index)})))\n\n }\n\n let data = lineSetup({ type, subjectType })\n data = [data[0], ...connectorData.points, data[1]]\n const components = [lineBuilder({ data, curve: connectorData.curve, className: \"connector\" })]\n\n return { components , handles }\n}\n\nconst createPoints = function ( offset, anchors=2) {\n const diff = { x: offset.x/(anchors + 1), y: offset.y/(anchors + 1) }\n const p = []\n\n let i = 1 \n for (; i <= anchors; i++) {\n p.push([diff.x*i + i%2*20, diff.y*i - i%2*20])\n }\n return p\n}","import { select } from \"d3-selection\"\nimport { drag } from \"d3-drag\"\n\nexport const pointHandle = ({ cx = 0, cy = 0 }) => {\n return { move: { x: cx, y: cy } }\n}\n\nexport const circleHandles = ({ cx = 0, cy = 0, r1, r2, padding }) => {\n const h = { move: { x: cx, y: cy } }\n\n if (r1 !== undefined) {\n h.r1 = { x: cx + r1 / Math.sqrt(2), y: cy + r1 / Math.sqrt(2) }\n }\n\n if (r2 !== undefined) {\n h.r2 = { x: cx + r2 / Math.sqrt(2), y: cy + r2 / Math.sqrt(2) }\n }\n\n if (padding !== undefined) {\n h.padding = { x: cx + r1 + padding, y: cy }\n }\n\n return h\n}\n\nexport const rectHandles = ({\n x1 = 0,\n y1 = 0,\n x2 = x1,\n y2 = y1,\n width,\n height\n}) => {\n const w = width || Math.abs(x2 - x1)\n const h = height || Math.abs(y2 - y1)\n\n return {\n move: {\n x: Math.min(x1, x2) + w / 2,\n y: Math.min(y1, y2) - 10\n },\n width: {\n x: Math.max(x1, x2),\n y: Math.min(y1, y2) + h / 2\n },\n height: {\n x: Math.min(x1, x2) + w / 2,\n y: Math.max(y1, y2)\n }\n }\n}\n\nexport const lineHandles = ({ x1, y1, x2, y2, x, y }) => {\n const minY = Math.min(y1, y2)\n const minX = Math.min(x1, x2)\n\n const height = Math.abs(y2 - y1)\n const width = Math.abs(x2 - x1)\n\n return {\n move: {\n x: x || minX + width / 2,\n y: y || minY + height / 2\n }\n }\n}\n\n//arc handles\nexport const addHandles = ({ group, handles, r = 10 }) => {\n //give it a group and x,y to draw handles\n //then give it instructions on what the handles change\n const h = group.selectAll(\"circle.handle\").data(handles)\n\n h\n .enter()\n .append(\"circle\")\n .attr(\"class\", \"handle\")\n .attr(\"fill\", \"grey\")\n .attr(\"fill-opacity\", 0.1)\n .attr(\"cursor\", \"move\")\n .attr(\"stroke-dasharray\", 5)\n .attr(\"stroke\", \"grey\")\n .call(\n drag()\n .container(select(\"g.annotations\").node())\n .on(\"start\", d => d.start && d.start(d))\n .on(\"drag\", d => d.drag && d.drag(d))\n .on(\"end\", d => d.end && d.end(d))\n )\n\n group\n .selectAll(\"circle.handle\")\n .attr(\"cx\", d => d.x)\n .attr(\"cy\", d => d.y)\n .attr(\"r\", d => d.r || r)\n .attr(\"class\", d => `handle ${d.className || \"\"}`)\n\n h.exit().remove()\n}\n","import { lineBuilder } from \"../Builder\"\n\nexport default ({ annotation, start, end, scale = 1 }) => {\n const offset = annotation.position\n if (!start) {\n start = [annotation.dx, annotation.dy]\n } else {\n start = [-end[0] + start[0], -end[1] + start[1]]\n }\n if (!end) {\n end = [annotation.x - offset.x, annotation.y - offset.y]\n }\n\n let x1 = end[0],\n y1 = end[1]\n\n let dx = start[0]\n let dy = start[1]\n\n let size = 10 * scale\n let angleOffset = 16 / 180 * Math.PI\n let angle = Math.atan(dy / dx)\n\n if (dx < 0) {\n angle += Math.PI\n }\n\n const data = [\n [x1, y1],\n [\n Math.cos(angle + angleOffset) * size + x1,\n Math.sin(angle + angleOffset) * size + y1\n ],\n [\n Math.cos(angle - angleOffset) * size + x1,\n Math.sin(angle - angleOffset) * size + y1\n ],\n [x1, y1]\n ]\n\n //TODO add in reverse\n // if (canvasContext.arrowReverse){\n // data = [[x1, y1],\n // [Math.cos(angle + angleOffset)*size, Math.sin(angle + angleOffset)*size],\n // [Math.cos(angle - angleOffset)*size, Math.sin(angle - angleOffset)*size],\n // [x1, y1]\n // ]\n // } else {\n // data = [[x1, y1],\n // [Math.cos(angle + angleOffset)*size, Math.sin(angle + angleOffset)*size],\n // [Math.cos(angle - angleOffset)*size, Math.sin(angle - angleOffset)*size],\n // [x1, y1]\n // ]\n // }\n\n return {\n components: [\n lineBuilder({\n data,\n className: \"connector-end connector-arrow\",\n classID: \"connector-end\"\n })\n ]\n }\n}\n","import { arcBuilder } from \"../Builder\"\n\nexport default ({ line, scale = 1 }) => {\n let dot = arcBuilder({\n className: \"connector-end connector-dot\",\n classID: \"connector-end\",\n data: { radius: 3 * Math.sqrt(scale) }\n })\n dot.attrs.transform = `translate(${line.data[0][0]}, ${line.data[0][1]})`\n\n return { components: [dot] }\n}\n","import { circleHandles } from \"../Handles\"\nimport { arcBuilder } from \"../Builder\"\nimport { event } from \"d3-selection\"\n\nexport default ({ subjectData, type }) => {\n if (!subjectData.radius && !subjectData.outerRadius) {\n subjectData.radius = 20\n }\n\n let handles = []\n const c = arcBuilder({ data: subjectData, className: \"subject\" })\n if (type.editMode) {\n const h = circleHandles({\n r1: c.data.outerRadius || c.data.radius,\n r2: c.data.innerRadius,\n padding: subjectData.radiusPadding\n })\n\n const updateRadius = attr => {\n const r = subjectData[attr] + event.dx * Math.sqrt(2)\n subjectData[attr] = r\n type.redrawSubject()\n type.redrawConnector()\n }\n\n const cHandles = [\n {\n ...h.r1,\n drag: updateRadius.bind(\n type,\n subjectData.outerRadius !== undefined ? \"outerRadius\" : \"radius\"\n )\n }\n ]\n\n if (subjectData.innerRadius) {\n cHandles.push({ ...h.r2, drag: updateRadius.bind(type, \"innerRadius\") })\n }\n handles = type.mapHandles(cHandles)\n }\n\n c.attrs[\"fill-opacity\"] = 0\n\n return { components: [c], handles }\n}\n","import { lineBuilder } from \"../Builder\"\nimport { event } from \"d3-selection\"\n\nexport default ({ subjectData, type }) => {\n if (!subjectData.width) {\n subjectData.width = 100\n }\n if (!subjectData.height) {\n subjectData.height = 100\n }\n\n let handles = []\n let { width, height } = subjectData\n\n const data = [[0, 0], [width, 0], [width, height], [0, height], [0, 0]]\n let rect = lineBuilder({ data, className: \"subject\" })\n\n if (type.editMode) {\n const updateWidth = () => {\n subjectData.width = event.x\n type.redrawSubject()\n type.redrawConnector()\n }\n\n const updateHeight = () => {\n subjectData.height = event.y\n type.redrawSubject()\n type.redrawConnector()\n }\n\n const rHandles = [\n { x: width, y: height / 2, drag: updateWidth.bind(type) },\n { x: width / 2, y: height, drag: updateHeight.bind(type) }\n ]\n\n handles = type.mapHandles(rHandles)\n }\n rect.attrs[\"fill-opacity\"] = 0.1\n return { components: [rect], handles }\n}\n","import { lineBuilder } from '../Builder'\n\n\nexport default ({ subjectData, type }) => {\n const offset = type.annotation.position\n\n let x1 = (subjectData.x1 !== undefined ? subjectData.x1 : offset.x) - offset.x,\n x2 = (subjectData.x2 !== undefined ? subjectData.x2 : offset.x) - offset.x,\n y1 = (subjectData.y1 !== undefined ? subjectData.y1 : offset.y) - offset.y,\n y2 = (subjectData.y2 !== undefined ? subjectData.y2 : offset.y) - offset.y\n\n const data = [[x1, y1], [x2, y2]]\n return { components: [lineBuilder({ data, className : 'subject'})]}\n}","import { lineBuilder, arcBuilder } from \"../Builder\"\nimport { event } from \"d3-selection\"\n\nexport default ({ subjectData = {}, type = {} }, annotation = {}) => {\n const typeSettings = type.typeSettings && type.typeSettings.subject\n\n if (!subjectData.radius) {\n if (typeSettings && typeSettings.radius) {\n subjectData.radius = typeSettings.radius\n } else {\n subjectData.radius = 14\n }\n }\n if (!subjectData.x) {\n if (typeSettings && typeSettings.x) {\n subjectData.x = typeSettings.x\n }\n }\n if (!subjectData.y) {\n if (typeSettings && typeSettings.y) {\n subjectData.y = typeSettings.y\n }\n }\n\n let handles = []\n const components = []\n const radius = subjectData.radius\n const innerRadius = radius * 0.7\n let x = 0\n let y = 0\n\n const notCornerOffset = Math.sqrt(2) * radius\n const placement = {\n xleftcorner: -radius,\n xrightcorner: radius,\n ytopcorner: -radius,\n ybottomcorner: radius,\n xleft: -notCornerOffset,\n xright: notCornerOffset,\n ytop: -notCornerOffset,\n ybottom: notCornerOffset\n }\n\n if (subjectData.x && !subjectData.y) {\n x = placement[`x${subjectData.x}`]\n } else if (subjectData.y && !subjectData.x) {\n y = placement[`y${subjectData.y}`]\n } else if (subjectData.x && subjectData.y) {\n x = placement[`x${subjectData.x}corner`]\n y = placement[`y${subjectData.y}corner`]\n }\n\n const transform = `translate(${x}, ${y})`\n const circlebg = arcBuilder({ className: \"subject\", data: { radius } })\n circlebg.attrs.transform = transform\n circlebg.attrs.fill = annotation.color\n circlebg.attrs[\"stroke-linecap\"] = \"round\"\n circlebg.attrs[\"stroke-width\"] = \"3px\"\n\n const circle = arcBuilder({\n className: \"subject-ring\",\n data: { outerRadius: radius, innerRadius }\n })\n\n circle.attrs.transform = transform\n // circle.attrs.fill = annotation.color\n circle.attrs[\"stroke-width\"] = \"3px\"\n circle.attrs.fill = \"white\"\n\n let pointer\n if (x && y || !x && !y) {\n pointer = lineBuilder({\n className: \"subject-pointer\",\n data: [[0, 0], [x || 0, 0], [0, y || 0], [0, 0]]\n })\n } else if (x || y) {\n const notCornerPointerXY = (v, sign = 1) =>\n v && v / Math.sqrt(2) / Math.sqrt(2) || sign * radius / Math.sqrt(2)\n\n pointer = lineBuilder({\n className: \"subject-pointer\",\n data: [\n [0, 0],\n [notCornerPointerXY(x), notCornerPointerXY(y)],\n [notCornerPointerXY(x, -1), notCornerPointerXY(y, -1)],\n [0, 0]\n ]\n })\n }\n\n if (pointer) {\n pointer.attrs.fill = annotation.color\n pointer.attrs[\"stroke-linecap\"] = \"round\"\n pointer.attrs[\"stroke-width\"] = \"3px\"\n components.push(pointer)\n }\n\n if (type.editMode) {\n const dragBadge = () => {\n subjectData.x =\n event.x < -radius * 2\n ? \"left\"\n : event.x > radius * 2 ? \"right\" : undefined\n subjectData.y =\n event.y < -radius * 2\n ? \"top\"\n : event.y > radius * 2 ? \"bottom\" : undefined\n\n type.redrawSubject()\n }\n\n const bHandles = { x: x * 2, y: y * 2, drag: dragBadge.bind(type) }\n if (!bHandles.x && !bHandles.y) {\n bHandles.y = -radius\n }\n\n handles = type.mapHandles([bHandles])\n }\n\n let text\n if (subjectData.text) {\n text = {\n type: \"text\",\n className: \"badge-text\",\n attrs: {\n fill: \"white\",\n stroke: \"none\",\n \"font-size\": \".7em\",\n text: subjectData.text,\n \"text-anchor\": \"middle\",\n dy: \".25em\",\n x,\n y\n }\n }\n }\n\n components.push(circlebg)\n components.push(circle)\n components.push(text)\n\n return { components, handles }\n}\n","import { select, event } from \"d3-selection\"\nimport { drag } from \"d3-drag\"\nimport { addHandles } from \"./Handles\"\n\n//Note options\nimport noteAlignment from \"./Note/alignment\"\nimport noteVertical from \"./Note/lineType-vertical\"\nimport noteHorizontal from \"./Note/lineType-horizontal\"\n\n//Connector options\nimport connectorLine from \"./Connector/type-line\"\nimport connectorElbow from \"./Connector/type-elbow\"\nimport connectorCurve from \"./Connector/type-curve\"\nimport connectorArrow from \"./Connector/end-arrow\"\nimport connectorDot from \"./Connector/end-dot\"\n\n//Subject options\nimport subjectCircle from \"./Subject/circle\"\nimport subjectRect from \"./Subject/rect\"\nimport subjectThreshold from \"./Subject/threshold\"\nimport subjectBadge from \"./Subject/badge\"\n\nexport class Type {\n constructor({ a, annotation, editMode, dispatcher, notePadding, accessors }) {\n this.a = a\n\n this.note =\n annotation.disable.indexOf(\"note\") === -1 && a.select(\"g.annotation-note\")\n this.noteContent = this.note && a.select(\"g.annotation-note-content\")\n this.connector =\n annotation.disable.indexOf(\"connector\") === -1 &&\n a.select(\"g.annotation-connector\")\n this.subject =\n annotation.disable.indexOf(\"subject\") === -1 &&\n a.select(\"g.annotation-subject\")\n this.dispatcher = dispatcher\n\n if (dispatcher) {\n const handler = addHandlers.bind(null, dispatcher, annotation)\n handler({ component: this.note, name: \"note\" })\n handler({ component: this.connector, name: \"connector\" })\n handler({ component: this.subject, name: \"subject\" })\n }\n\n this.annotation = annotation\n this.editMode = annotation.editMode || editMode\n this.notePadding = notePadding !== undefined ? notePadding : 3\n this.offsetCornerX = 0\n this.offsetCornerY = 0\n\n if (accessors && annotation.data) {\n this.init(accessors)\n }\n }\n\n init(accessors) {\n if (!this.annotation.x) {\n this.mapX(accessors)\n }\n if (!this.annotation.y) {\n this.mapY(accessors)\n }\n }\n\n mapY(accessors) {\n if (accessors.y) {\n this.annotation.y = accessors.y(this.annotation.data)\n }\n }\n\n mapX(accessors) {\n if (accessors.x) {\n this.annotation.x = accessors.x(this.annotation.data)\n }\n }\n\n updateEditMode() {\n this.a.selectAll(\"circle.handle\").remove()\n }\n\n drawOnSVG(component, builders) {\n if (!Array.isArray(builders)) {\n builders = [builders]\n }\n\n builders\n .filter(b => b)\n .forEach(({ type, className, attrs, handles, classID }) => {\n if (type === \"handle\") {\n addHandles({ group: component, r: attrs && attrs.r, handles })\n } else {\n newWithClass(component, [this.annotation], type, className, classID)\n const el = component.select(`${type}.${classID || className}`)\n const addAttrs = Object.keys(attrs)\n const removeAttrs = []\n\n const currentAttrs = el.node().attributes\n for (let i = currentAttrs.length - 1; i >= 0; i--) {\n const name = currentAttrs[i].name\n if (addAttrs.indexOf(name) === -1 && name !== \"class\")\n removeAttrs.push(name)\n }\n\n addAttrs.forEach(attr => {\n if (attr === \"text\") {\n el.text(attrs[attr])\n } else {\n el.attr(attr, attrs[attr])\n }\n })\n\n removeAttrs.forEach(attr => el.attr(attr, null))\n }\n })\n }\n\n //TODO: how to extend this to a drawOnCanvas mode?\n\n getNoteBBox() {\n return bboxWithoutHandles(this.note, \".annotation-note-content text\")\n }\n getNoteBBoxOffset() {\n const bbox = bboxWithoutHandles(this.note, \".annotation-note-content\")\n const transform = this.noteContent.attr(\"transform\").split(/\\(|\\,|\\)/g)\n bbox.offsetCornerX = parseFloat(transform[1]) + this.annotation.dx\n bbox.offsetCornerY = parseFloat(transform[2]) + this.annotation.dy\n bbox.offsetX = this.annotation.dx\n bbox.offsetY = this.annotation.dy\n return bbox\n }\n\n drawSubject(context = {}) {\n const subjectData = this.annotation.subject\n const type = context.type\n const subjectParams = { type: this, subjectData }\n\n let subject = {}\n if (type === \"circle\") subject = subjectCircle(subjectParams)\n else if (type === \"rect\") subject = subjectRect(subjectParams)\n else if (type === \"threshold\") subject = subjectThreshold(subjectParams)\n else if (type === \"badge\")\n subject = subjectBadge(subjectParams, this.annotation)\n\n let { components = [], handles = [] } = subject\n components.forEach(c => {\n if (c && c.attrs && !c.attrs.stroke) {\n c.attrs.stroke = this.annotation.color\n }\n })\n\n if (this.editMode) {\n handles = handles.concat(\n this.mapHandles([{ drag: this.dragSubject.bind(this) }])\n )\n components.push({ type: \"handle\", handles })\n }\n\n return components\n }\n\n drawConnector(context = {}) {\n const connectorData = this.annotation.connector\n const type = connectorData.type || context.type\n const connectorParams = { type: this, connectorData }\n connectorParams.subjectType =\n this.typeSettings &&\n this.typeSettings.subject &&\n this.typeSettings.subject.type\n\n let connector = {}\n if (type === \"curve\") connector = connectorCurve(connectorParams)\n else if (type === \"elbow\") connector = connectorElbow(connectorParams)\n else connector = connectorLine(connectorParams)\n let { components = [], handles = [] } = connector\n const line = components[0]\n //TODO: genericize this into fill t/f stroke t/f\n if (line) {\n line.attrs.stroke = this.annotation.color\n line.attrs.fill = \"none\"\n }\n const endType = connectorData.end || context.end\n let end = {}\n if (endType === \"arrow\") {\n let s = line.data[1]\n const e = line.data[0]\n const distance = Math.sqrt(\n Math.pow(s[0] - e[0], 2) + Math.pow(s[1] - e[1], 2)\n )\n if (distance < 5 && line.data[2]) {\n s = line.data[2]\n }\n end = connectorArrow({\n annotation: this.annotation,\n start: s,\n end: e,\n scale: connectorData.endScale\n })\n } else if (endType === \"dot\") {\n end = connectorDot({ line, scale: connectorData.endScale })\n } else if (!endType || endType === \"none\") {\n this.connector && this.connector.select(\".connector-end\").remove()\n }\n\n if (end.components) {\n end.components.forEach(c => {\n c.attrs.fill = this.annotation.color\n c.attrs.stroke = this.annotation.color\n })\n components = components.concat(end.components)\n }\n\n if (this.editMode) {\n if (handles.length !== 0) components.push({ type: \"handle\", handles })\n }\n return components\n }\n\n drawNote(context = {}) {\n const noteData = this.annotation.note\n const align = noteData.align || context.align || \"dynamic\"\n const noteParams = {\n bbox: context.bbox,\n align,\n offset: this.annotation.offset\n }\n const lineType = noteData.lineType || context.lineType\n let note = {}\n if (lineType === \"vertical\") note = noteVertical(noteParams)\n else if (lineType === \"horizontal\") note = noteHorizontal(noteParams)\n\n let { components = [], handles = [] } = note\n components.forEach(c => {\n c.attrs.stroke = this.annotation.color\n })\n\n if (this.editMode) {\n handles = this.mapHandles([\n { x: 0, y: 0, drag: this.dragNote.bind(this) }\n ])\n components.push({ type: \"handle\", handles })\n\n const dragging = this.dragNote.bind(this),\n start = this.dragstarted.bind(this),\n end = this.dragended.bind(this)\n this.note.call(\n drag()\n .container(select(\"g.annotations\").node())\n .on(\"start\", d => start(d))\n .on(\"drag\", d => dragging(d))\n .on(\"end\", d => end(d))\n )\n } else {\n this.note.on(\"mousedown.drag\", null)\n }\n return components\n }\n\n drawNoteContent(context) {\n const noteData = this.annotation.note\n const padding =\n noteData.padding !== undefined ? noteData.padding : this.notePadding\n let orientation = noteData.orientation || context.orientation || \"topBottom\"\n const lineType = noteData.lineType || context.lineType\n const align = noteData.align || context.align || \"dynamic\"\n\n if (lineType === \"vertical\") orientation = \"leftRight\"\n else if (lineType === \"horizontal\") orientation = \"topBottom\"\n\n const noteParams = {\n padding,\n bbox: context.bbox,\n offset: this.annotation.offset,\n orientation,\n align\n }\n const { x, y } = noteAlignment(noteParams)\n this.offsetCornerX = x + this.annotation.dx\n this.offsetCornerY = y + this.annotation.dy\n this.note && this.noteContent.attr(\"transform\", `translate(${x}, ${y})`)\n\n return []\n }\n\n drawOnScreen(component, drawFunction) {\n return this.drawOnSVG(component, drawFunction)\n }\n\n redrawSubject() {\n this.subject && this.drawOnScreen(this.subject, this.drawSubject())\n }\n\n redrawConnector() {\n this.connector && this.drawOnScreen(this.connector, this.drawConnector())\n }\n\n redrawNote(bbox = this.getNoteBBox()) {\n this.noteContent &&\n this.drawOnScreen(this.noteContent, this.drawNoteContent({ bbox }))\n this.note && this.drawOnScreen(this.note, this.drawNote({ bbox }))\n }\n\n setPosition() {\n const position = this.annotation.position\n this.a.attr(\"transform\", `translate(${position.x}, ${position.y})`)\n }\n\n clearComponents() {\n this.subject && this.subject.select(\"*\").remove()\n this.connector && this.connector.select(\"*\").remove()\n // this.note && this.note.select(\"*\").remove()\n }\n\n setOffset() {\n if (this.note) {\n const offset = this.annotation.offset\n this.note.attr(\"transform\", `translate(${offset.x}, ${offset.y})`)\n }\n }\n\n setPositionWithAccessors(accessors) {\n if (accessors && this.annotation.data) {\n this.mapX(accessors)\n this.mapY(accessors)\n }\n this.setPosition()\n }\n\n setClassName() {\n this.a.attr(\n \"class\",\n `annotation ${this.className && this.className()} ${\n this.editMode ? \"editable\" : \"\"\n } ${this.annotation.className || \"\"}`\n )\n }\n\n draw() {\n this.setClassName()\n this.setPosition()\n this.setOffset()\n this.redrawSubject()\n this.redrawConnector()\n this.redrawNote()\n }\n\n dragstarted() {\n event.sourceEvent.stopPropagation()\n this.dispatcher &&\n this.dispatcher.call(\"dragstart\", this.a, this.annotation)\n this.a.classed(\"dragging\", true)\n this.a.selectAll(\"circle.handle\").style(\"pointer-events\", \"none\")\n }\n dragended() {\n this.dispatcher && this.dispatcher.call(\"dragend\", this.a, this.annotation)\n this.a.classed(\"dragging\", false)\n this.a.selectAll(\"circle.handle\").style(\"pointer-events\", \"all\")\n }\n\n dragSubject() {\n const position = this.annotation.position\n position.x += event.dx\n position.y += event.dy\n this.annotation.position = position\n }\n\n dragNote() {\n const offset = this.annotation.offset\n offset.x += event.dx\n offset.y += event.dy\n this.annotation.offset = offset\n }\n\n mapHandles(handles) {\n return handles.map(h => ({\n ...h,\n start: this.dragstarted.bind(this),\n end: this.dragended.bind(this)\n }))\n }\n}\n\nexport const customType = (initialType, typeSettings, init) => {\n return class customType extends initialType {\n constructor(settings) {\n super(settings)\n this.typeSettings = typeSettings\n\n if (typeSettings.disable) {\n typeSettings.disable.forEach(d => {\n this[d] && this[d].remove()\n\n this[d] = undefined\n if (d === \"note\") {\n this.noteContent = undefined\n }\n })\n }\n }\n\n static init(annotation, accessors) {\n super.init(annotation, accessors)\n if (init) {\n annotation = init(annotation, accessors)\n }\n return annotation\n }\n\n className() {\n return `${typeSettings.className ||\n super.className && super.className() ||\n \"\"}`\n }\n\n drawSubject(context) {\n this.typeSettings.subject = Object.assign(\n {},\n typeSettings.subject,\n this.typeSettings.subject\n )\n return super.drawSubject({ ...context, ...this.typeSettings.subject })\n }\n\n drawConnector(context) {\n this.typeSettings.connector = Object.assign(\n {},\n typeSettings.connector,\n this.typeSettings.connector\n )\n return super.drawConnector({\n ...context,\n ...typeSettings.connector,\n ...this.typeSettings.connector\n })\n }\n\n drawNote(context) {\n this.typeSettings.note = Object.assign(\n {},\n typeSettings.note,\n this.typeSettings.note\n )\n return super.drawNote({\n ...context,\n ...typeSettings.note,\n ...this.typeSettings.note\n })\n }\n\n drawNoteContent(context) {\n return super.drawNoteContent({\n ...context,\n ...typeSettings.note,\n ...this.typeSettings.note\n })\n }\n }\n}\n\nexport class d3NoteText extends Type {\n constructor(params) {\n super(params)\n this.textWrap = params.textWrap || 120\n this.drawText()\n }\n\n updateTextWrap(textWrap) {\n this.textWrap = textWrap\n this.drawText()\n }\n\n //TODO: add update text functionality\n\n drawText() {\n if (this.note) {\n newWithClass(this.note, [this.annotation], \"g\", \"annotation-note-content\")\n\n const noteContent = this.note.select(\"g.annotation-note-content\")\n newWithClass(noteContent, [this.annotation], \"rect\", \"annotation-note-bg\")\n newWithClass(\n noteContent,\n [this.annotation],\n \"text\",\n \"annotation-note-label\"\n )\n newWithClass(\n noteContent,\n [this.annotation],\n \"text\",\n \"annotation-note-title\"\n )\n\n let titleBBox = { height: 0 }\n const label = this.a.select(\"text.annotation-note-label\")\n const wrapLength =\n this.annotation.note && this.annotation.note.wrap ||\n this.typeSettings &&\n this.typeSettings.note &&\n this.typeSettings.note.wrap ||\n this.textWrap\n\n const wrapSplitter =\n this.annotation.note && this.annotation.note.wrapSplitter ||\n this.typeSettings &&\n this.typeSettings.note &&\n this.typeSettings.note.wrapSplitter\n\n let bgPadding =\n this.annotation.note && this.annotation.note.bgPadding ||\n this.typeSettings &&\n this.typeSettings.note &&\n this.typeSettings.note.bgPadding\n\n let bgPaddingFinal = { top: 0, bottom: 0, left: 0, right: 0 }\n if (typeof bgPadding === \"number\") {\n bgPaddingFinal = {\n top: bgPadding,\n bottom: bgPadding,\n left: bgPadding,\n right: bgPadding\n }\n } else if (bgPadding && typeof bgPadding === \"object\") {\n bgPaddingFinal = Object.assign(bgPaddingFinal, bgPadding)\n }\n\n if (this.annotation.note.title) {\n const title = this.a.select(\"text.annotation-note-title\")\n title.text(this.annotation.note.title)\n title.attr(\"fill\", this.annotation.color)\n title.attr(\"font-weight\", \"bold\")\n title.call(wrap, wrapLength, wrapSplitter)\n titleBBox = title.node().getBBox()\n }\n\n label.text(this.annotation.note.label).attr(\"dx\", \"0\")\n label.call(wrap, wrapLength, wrapSplitter)\n\n label.attr(\"y\", titleBBox.height * 1.1 || 0)\n label.attr(\"fill\", this.annotation.color)\n\n const bbox = this.getNoteBBox()\n\n this.a\n .select(\"rect.annotation-note-bg\")\n .attr(\"width\", bbox.width + bgPaddingFinal.left + bgPaddingFinal.right)\n .attr(\n \"height\",\n bbox.height + bgPaddingFinal.top + bgPaddingFinal.bottom\n )\n .attr(\"x\", bbox.x - bgPaddingFinal.left)\n .attr(\"y\", -bgPaddingFinal.top)\n .attr(\"fill\", \"white\")\n .attr(\"fill-opacity\", 0)\n }\n }\n}\n\nexport const d3Label = customType(d3NoteText, {\n className: \"label\",\n note: { align: \"middle\" }\n})\n\nexport const d3Callout = customType(d3NoteText, {\n className: \"callout\",\n note: { lineType: \"horizontal\" }\n})\n\nexport const d3CalloutElbow = customType(d3Callout, {\n className: \"callout elbow\",\n connector: { type: \"elbow\" }\n})\n\nexport const d3CalloutCurve = customType(d3Callout, {\n className: \"callout curve\",\n connector: { type: \"curve\" }\n})\n\nexport const d3Badge = customType(Type, {\n className: \"badge\",\n subject: { type: \"badge\" },\n disable: [\"connector\", \"note\"]\n})\n\nexport const d3CalloutCircle = customType(d3NoteText, {\n className: \"callout circle\",\n subject: { type: \"circle\" },\n note: { lineType: \"horizontal\" },\n connector: { type: \"elbow\" }\n})\n\nexport const d3CalloutRect = customType(d3NoteText, {\n className: \"callout rect\",\n subject: { type: \"rect\" },\n note: { lineType: \"horizontal\" },\n connector: { type: \"elbow\" }\n})\n\nclass ThresholdMap extends d3Callout {\n mapY(accessors) {\n super.mapY(accessors)\n const a = this.annotation\n if ((a.subject.x1 || a.subject.x2) && a.data && accessors.y) {\n a.y = accessors.y(a.data)\n }\n if ((a.subject.x1 || a.subject.x2) && !a.x) {\n a.x = a.subject.x1 || a.subject.x2\n }\n }\n\n mapX(accessors) {\n super.mapX(accessors)\n const a = this.annotation\n if ((a.subject.y1 || a.subject.y2) && a.data && accessors.x) {\n a.x = accessors.x(a.data)\n }\n if ((a.subject.y1 || a.subject.y2) && !a.y) {\n a.y = a.subject.y1 || a.subject.y2\n }\n }\n}\n\nexport const d3XYThreshold = customType(ThresholdMap, {\n className: \"callout xythreshold\",\n subject: { type: \"threshold\" }\n})\n\nexport const newWithClass = (a, d, type, className, classID) => {\n const group = a.selectAll(`${type}.${classID || className}`).data(d)\n group\n .enter()\n .append(type)\n .merge(group)\n .attr(\"class\", className)\n\n group.exit().remove()\n return a\n}\n\nconst addHandlers = (dispatcher, annotation, { component, name }) => {\n if (component) {\n component\n .on(\"mouseover.annotations\", () => {\n dispatcher.call(`${name}over`, component, annotation)\n })\n .on(\"mouseout.annotations\", () =>\n dispatcher.call(`${name}out`, component, annotation)\n )\n .on(\"click.annotations\", () =>\n dispatcher.call(`${name}click`, component, annotation)\n )\n }\n}\n\n//Text wrapping code adapted from Mike Bostock\nconst wrap = (text, width, wrapSplitter, lineHeight = 1.2) => {\n text.each(function() {\n const text = select(this),\n words = text\n .text()\n .split(wrapSplitter || /[ \\t\\r\\n]+/)\n .reverse()\n .filter(w => w !== \"\")\n let word,\n line = [],\n tspan = text\n .text(null)\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"dy\", 0.8 + \"em\")\n\n while (word = words.pop()) {\n line.push(word)\n tspan.text(line.join(\" \"))\n if (tspan.node().getComputedTextLength() > width && line.length > 1) {\n line.pop()\n tspan.text(line.join(\" \"))\n line = [word]\n tspan = text\n .append(\"tspan\")\n .attr(\"x\", 0)\n .attr(\"dy\", lineHeight + \"em\")\n .text(word)\n }\n }\n })\n}\n\nconst bboxWithoutHandles = (selection, selector = \":not(.handle)\") => {\n if (!selection) {\n return { x: 0, y: 0, width: 0, height: 0 }\n }\n\n return selection\n .selectAll(selector)\n .nodes()\n .reduce(\n (p, c) => {\n const bbox = c.getBBox()\n p.x = Math.min(p.x, bbox.x)\n p.y = Math.min(p.y, bbox.y)\n p.width = Math.max(p.width, bbox.width)\n\n const yOffset = c && c.attributes && c.attributes.y\n p.height = Math.max(\n p.height,\n (yOffset && parseFloat(yOffset.value) || 0) + bbox.height\n )\n return p\n },\n { x: 0, y: 0, width: 0, height: 0 }\n )\n}\n\nexport default {\n Type,\n d3Label,\n d3Callout,\n d3CalloutElbow,\n d3CalloutCurve,\n d3CalloutCircle,\n d3CalloutRect,\n d3XYThreshold,\n d3Badge,\n customType\n}\n","import { publish, SVGWidget } from \"@hpcc-js/common\";\nimport { format as d3Format } from \"d3-format\";\nimport { interpolate as d3Interpolate, interpolateHcl as d3InterpolateHcl } from \"d3-interpolate\";\nimport { scaleLinear } from \"d3-scale\";\nimport { Arc, arc as d3Arc, DefaultArcObject } from \"d3-shape\";\nimport { annotation as d3Annotation, annotationCalloutElbow } from \"d3-svg-annotation\";\n\nfunction value2Angle(value: number): number {\n return (value - 0.5) * .65 * 2 * Math.PI;\n}\n\nfunction pointOnArc(angle: number, radius: number): { x: number, y: number } {\n return {\n x: Math.cos(angle - Math.PI / 2) * radius,\n y: Math.sin(angle - Math.PI / 2) * radius\n };\n}\n\nfunction indicatorTranslate(angle: number, radius: number, inner: boolean = false) {\n const point = pointOnArc(angle, radius);\n const rotation = angle * 180 / Math.PI + (inner === true ? 180 : 0);\n return `translate(${point.x}, ${point.y}) rotate(${rotation})`;\n}\n\ntype IndicatorDatum = { angle: number };\nfunction indicatorTween(newAngle: number, radius: number, inner: boolean = false) {\n return function (d: IndicatorDatum) {\n const interpolate = d3Interpolate(d.angle, newAngle);\n d.angle = newAngle;\n return function (t: number) {\n return indicatorTranslate(interpolate(t), radius, inner);\n };\n };\n}\n\nfunction arcTween(startAngle: number, endAngle: number, arc: Arc<any, DefaultArcObject>) {\n return function (d: DefaultArcObject) {\n const startInterpolate = d3Interpolate(d.startAngle, startAngle);\n const endInterpolate = d3Interpolate(d.endAngle, endAngle);\n return function (t: number): string {\n d.startAngle = startInterpolate(t);\n d.endAngle = endInterpolate(t);\n return arc(d)!;\n };\n };\n}\n\nexport class Gauge extends SVGWidget {\n\n private _d3Arc: Arc<any, DefaultArcObject> = d3Arc()\n .innerRadius(85)\n .outerRadius(100)\n ;\n private _colorScale = scaleLinear<string, string>()\n .interpolate(d3InterpolateHcl)\n ;\n\n protected _usageArc: any;\n protected _meanArc: any;\n protected _freeArc: any;\n protected _indInner: any;\n protected _indOuter: any;\n protected _centerTextG: any;\n protected _centerText: any;\n protected _bottomText: any;\n protected _tooltipG: any;\n protected _mainTooltip: any;\n\n @publish(\"\", \"string\")\n title: publish<this, string>;\n\n @publish(\"\", \"string\")\n titleDescription: publish<this, string>;\n\n @publish(128, \"number\")\n maxDiameter: publish<this, number>;\n\n @publish(0, \"number\")\n value: publish<this, number>;\n\n @publish(\"\", \"string\")\n valueDescription: publish<this, string>;\n\n @publish(false, \"boolean\")\n showTick: publish<this, boolean>;\n\n @publish(0, \"number\")\n tickValue: publish<this, number>;\n\n @publish(\"\", \"string\")\n tickValueDescription: publish<this, string>;\n\n @publish(\"\", \"string\")\n tooltip: publish<this, string>;\n\n constructor() {\n super();\n }\n\n protected tip(d: any) {\n if (d === null || d.label === \"\") {\n this._tooltipG\n .transition()\n .style(\"opacity\", 0)\n .on(\"interrupt end\", () => {\n this._tooltipG\n .selectAll(\"g\")\n .remove()\n ;\n })\n ;\n } else {\n this._tooltipG\n .interrupt()\n .style(\"opacity\", 1)\n ;\n d.w = (this._centerText.datum() as any).w + 10;\n let lineType = \"horizontal\";\n let xOffset = 0;\n let yOffset = 5;\n let padding: number | undefined = 5;\n if (d.y >= 5 && d.y <= 25) {\n xOffset = d.x < 0 ? -d.w / 2 : d.w / 2;\n yOffset = 12.5;\n padding = undefined;\n lineType = \"vertical\";\n } else if (d.y > 25) {\n yOffset = 25;\n padding = 0;\n }\n const annotationtip = d3Annotation()\n .type(annotationCalloutElbow)\n .annotations([{\n data: d,\n dx: -d.x + xOffset,\n dy: -d.y + yOffset,\n color: \"black\",\n note: {\n label: d.label,\n lineType,\n padding,\n align: \"middle\"\n }\n }])\n .accessors({ x: (d2: any) => d2.x, y: (d2: any) => d2.y });\n this._tooltipG.call(annotationtip as any);\n }\n }\n\n protected calcSize(textElement, width: number, height: number): { width: number, height: number, scale: number } {\n const bb = (textElement.node() as any).getBBox();\n const widthTransform = width / bb.width;\n const heightTransform = height / bb.height;\n const scale = widthTransform < heightTransform ? widthTransform : heightTransform;\n return {\n width: bb.width,\n height: bb.height,\n scale\n };\n }\n\n protected updateText(textElement, x: number, y: number, w: number, h: number) {\n textElement\n .datum({ x, y, w, h })\n .attr(\"transform\", null)\n ;\n const size = this.calcSize(textElement, w, h);\n const x2 = x + w / 2 - size.width / 2 * size.scale;\n const y2 = y + h / 2 - size.height / 2 * size.scale;\n textElement.attr(\"transform\", `translate(${x2}, ${y2}) scale(${size.scale})`);\n }\n\n calcWidth(): number {\n return Math.min(this.width(), this.height(), this.maxDiameter());\n }\n\n enter(domNode: HTMLElement, element) {\n super.enter(domNode, element);\n\n element.on(\"click\", (d: Gauge) => {\n this.click(d);\n });\n\n this._usageArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\n .style(\"fill\", \"green\")\n .on(\"mousemove\", (d: any) => {\n const [x, y] = this._d3Arc.centroid(d);\n this.tip({ x, y, label: this.valueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n this._freeArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(1) })\n .style(\"fill\", \"lightGrey\")\n ;\n this._meanArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\n .style(\"fill\", \"black\")\n .on(\"mousemove\", (d: any) => {\n const [x, y] = this._d3Arc.centroid(d);\n this.tip({ x, y, label: this.tickValueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n\n this._mainTooltip = element.append(\"title\");\n\n const context = this;\n function appendIndicator() {\n return element.append(\"path\").datum({ angle: value2Angle(0) })\n .style(\"fill\", \"black\")\n .style(\"stroke\", \"black\")\n .attr(\"d\", \"M 0 0 l -3 -3 l 6 0 z\")\n .on(\"mousemove\", (d: any) => {\n const [x, y] = context._d3Arc.centroid(context._meanArc.datum() as any);\n context.tip({ x, y, label: context.tickValueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n context.tip(null);\n })\n ;\n }\n this._indInner = appendIndicator();\n this._indOuter = appendIndicator();\n this._centerText = element.append(\"text\")\n .attr(\"dy\", \".66em\")\n .style(\"fill\", \"green\")\n .on(\"mousemove\", (d: any) => {\n this.tip({ x: 0, y: 0, label: this.valueDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n this._bottomText = element.append(\"text\")\n .attr(\"dy\", \".66em\")\n .on(\"mousemove\", (d: any) => {\n this.tip({ x: 0, y: d.y, label: this.titleDescription() });\n })\n .on(\"mouseout\", (d: any) => {\n this.tip(null);\n })\n ;\n\n this._tooltipG = element.append(\"g\")\n .attr(\"class\", \"annotation-tip\")\n ;\n }\n\n update(domNode: HTMLElement, element) {\n super.update(domNode, element);\n\n this._colorScale\n .domain(this.colorDomain())\n .range(this.colorRange())\n ;\n element\n .attr(\"title\", this.tooltip())\n .style(\"cursor\", this.click !== Gauge.prototype.click ? \"pointer\" : null)\n ;\n\n const innerRadius = this.calcWidth() / 3;\n const outerRadius = this.calcWidth() / 2 - 5;\n this._d3Arc\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n ;\n\n const val = this.value();\n const tickVal = this.tickValue();\n\n this._usageArc\n .style(\"fill\", this._colorScale(val))\n .transition()\n .duration(750)\n .attrTween(\"d\", arcTween(value2Angle(0), value2Angle(val), this._d3Arc))\n ;\n\n this._freeArc\n .style(\"fill\", this.emptyColor())\n .transition()\n .duration(750)\n .attrTween(\"d\", arcTween(value2Angle(val), value2Angle(1), this._d3Arc))\n ;\n\n this._meanArc\n .style(\"fill\", this.tickColor())\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n .transition()\n .duration(750)\n .attrTween(\"d\", arcTween(value2Angle(tickVal - 0.001), value2Angle(tickVal + 0.001), this._d3Arc))\n ;\n\n this._indInner\n .style(\"fill\", this.tickColor())\n .style(\"stroke\", this.tickColor())\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n .transition()\n .duration(750)\n .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), innerRadius, true))\n ;\n\n this._indOuter\n .style(\"fill\", this.tickColor())\n .style(\"stroke\", this.tickColor())\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\n .transition()\n .duration(750)\n .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), outerRadius))\n ;\n\n this._centerText\n .style(\"fill\", this._colorScale(val))\n .text(d3Format(\".0%\")(val))\n ;\n\n this._bottomText\n .style(\"fill\", this.click !== Gauge.prototype.click ? \"blue\" : \"black\")\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 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(\"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 Annotation from \"./Annotation\"\nimport AnnotationCollection from \"./AnnotationCollection\"\nimport { newWithClass, d3Callout } from \"./Types-d3\"\nimport { select } from \"d3-selection\"\nimport { dispatch } from \"d3-dispatch\"\n\nexport default function annotation() {\n let annotations = [],\n collection,\n context, //TODO: add canvas functionality\n disable = [],\n accessors = {},\n accessorsInverse = {},\n editMode = false,\n ids,\n type = d3Callout,\n textWrap,\n notePadding,\n annotationDispatcher = dispatch(\n \"subjectover\",\n \"subjectout\",\n \"subjectclick\",\n \"connectorover\",\n \"connectorout\",\n \"connectorclick\",\n \"noteover\",\n \"noteout\",\n \"noteclick\",\n \"dragend\",\n \"dragstart\"\n ),\n sel\n\n const annotation = function(selection) {\n sel = selection\n //TODO: check to see if this is still needed\n if (!editMode) {\n selection.selectAll(\"circle.handle\").remove()\n }\n\n const translatedAnnotations = annotations.map(a => {\n if (!a.type) {\n a.type = type\n }\n if (!a.disable) {\n a.disable = disable\n }\n return new Annotation(a)\n })\n\n collection =\n collection ||\n new AnnotationCollection({\n annotations: translatedAnnotations,\n accessors,\n accessorsInverse,\n ids\n })\n\n const annotationG = selection.selectAll(\"g\").data([collection])\n annotationG.enter().append(\"g\").attr(\"class\", `annotations`)\n\n const group = selection.select(\"g.annotations\")\n newWithClass(group, collection.annotations, \"g\", \"annotation\")\n\n const annotation = group.selectAll(\"g.annotation\")\n\n annotation.each(function(d) {\n const a = select(this)\n\n a.attr(\"class\", \"annotation\")\n\n newWithClass(a, [d], \"g\", \"annotation-connector\")\n newWithClass(a, [d], \"g\", \"annotation-subject\")\n newWithClass(a, [d], \"g\", \"annotation-note\")\n newWithClass(\n a.select(\"g.annotation-note\"),\n [d],\n \"g\",\n \"annotation-note-content\"\n )\n d.type =\n d.type.toString() === \"[object Object]\"\n ? d.type\n : new d.type({\n a,\n annotation: d,\n textWrap,\n notePadding,\n editMode,\n dispatcher: annotationDispatcher,\n accessors\n })\n d.type.draw()\n d.type.drawText && d.type.drawText()\n })\n }\n\n annotation.json = function() {\n /* eslint-disable no-console */\n console.log(\n \"Annotations JSON was copied to your clipboard. Please note the annotation type is not JSON compatible. It appears in the objects array in the console, but not in the copied JSON.\",\n collection.json\n )\n /* eslint-enable no-console */\n window.copy(\n JSON.stringify(\n collection.json.map(a => {\n delete a.type\n return a\n })\n )\n )\n return annotation\n }\n\n annotation.update = function() {\n if (annotations && collection) {\n annotations = collection.annotations.map(a => {\n a.type.draw()\n return a\n })\n }\n return annotation\n }\n\n annotation.updateText = function() {\n if (collection) {\n collection.updateText(textWrap)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.updatedAccessors = function() {\n collection.setPositionWithAccessors()\n annotations = collection.annotations\n return annotation\n }\n\n annotation.disable = function(_) {\n if (!arguments.length) return disable\n disable = _\n if (collection) {\n collection.updateDisable(disable)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.textWrap = function(_) {\n if (!arguments.length) return textWrap\n textWrap = _\n if (collection) {\n collection.updateTextWrap(textWrap)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.notePadding = function(_) {\n if (!arguments.length) return notePadding\n notePadding = _\n if (collection) {\n collection.updateNotePadding(notePadding)\n annotations = collection.annotations\n }\n return annotation\n }\n //todo think of how to handle when undefined is sent\n annotation.type = function(_, settings) {\n if (!arguments.length) return type\n type = _\n if (collection) {\n collection.annotations.map(a => {\n a.type.note &&\n a.type.note.selectAll(\"*:not(.annotation-note-content)\").remove()\n a.type.noteContent && a.type.noteContent.selectAll(\"*\").remove()\n a.type.subject && a.type.subject.selectAll(\"*\").remove()\n a.type.connector && a.type.connector.selectAll(\"*\").remove()\n a.type.typeSettings = {}\n a.type = type\n\n a.subject = settings && settings.subject || a.subject\n a.connector = settings && settings.connector || a.connector\n a.note = settings && settings.note || a.note\n })\n\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.annotations = function(_) {\n if (!arguments.length)\n return collection && collection.annotations || annotations\n annotations = _\n\n if (collection && collection.annotations) {\n const rerun = annotations.some(\n d => !d.type || d.type.toString() !== \"[object Object]\"\n )\n\n if (rerun) {\n collection = null\n annotation(sel)\n } else {\n collection.annotations = annotations\n }\n }\n return annotation\n }\n\n annotation.context = function(_) {\n if (!arguments.length) return context\n context = _\n return annotation\n }\n\n annotation.accessors = function(_) {\n if (!arguments.length) return accessors\n accessors = _\n return annotation\n }\n\n annotation.accessorsInverse = function(_) {\n if (!arguments.length) return accessorsInverse\n accessorsInverse = _\n return annotation\n }\n\n annotation.ids = function(_) {\n if (!arguments.length) return ids\n ids = _\n return annotation\n }\n\n annotation.editMode = function(_) {\n if (!arguments.length) return editMode\n editMode = _\n\n if (sel) {\n sel.selectAll(\"g.annotation\").classed(\"editable\", editMode)\n }\n\n if (collection) {\n collection.editMode(editMode)\n annotations = collection.annotations\n }\n return annotation\n }\n\n annotation.collection = function(_) {\n if (!arguments.length) return collection\n collection = _\n return annotation\n }\n\n annotation.on = function() {\n const value = annotationDispatcher.on.apply(annotationDispatcher, arguments)\n return value === annotationDispatcher ? annotation : value\n }\n\n return annotation\n}\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\nexport class Pie extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n protected _totalValue: number;\n\n d3Pie;\n d3Arc;\n d3LabelArc;\n private _labelPositions;\n private _smallValueLabelHeight;\n private _labelWidthLimit: number;\n private _quadIdxArr;\n private _minLabelTop = 0;\n private _maxLabelBottom = 0;\n private _seriesValueFormatter;\n private _seriesPercentageFormatter;\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this.d3Pie = d3Pie();\n\n this.d3Arc = d3Arc();\n this.d3LabelArc = d3Arc();\n this\n .tooltipTick_default(false)\n .tooltipOffset_default(0)\n ;\n }\n\n intersection(pointA, pointB) {\n return this.intersectCircle(this.calcOuterRadius(), pointA, pointB);\n }\n\n calcInnerRadius() {\n return this.innerRadius_exists() ? this.calcOuterRadius() * (this.innerRadius() as number) / 100 : 0;\n }\n\n calcOuterRadius() {\n const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d }, false)), \"Verdana\", 12).width;\n const horizontalLimit = this._size.width - (this.showLabels() ? maxTextWidth * 2 : 0) - 20;\n const verticalLimit = this._size.height - 12 * 3 - (this.showLabels() ? this._smallValueLabelHeight : 0);\n const outerRadius = Math.min(horizontalLimit, verticalLimit) / 2 - 2;\n if ((horizontalLimit / 2) - 2 < this.minOuterRadius()) {\n this._labelWidthLimit = maxTextWidth - (this.minOuterRadius() - ((horizontalLimit / 2) - 2));\n } else {\n this._labelWidthLimit = maxTextWidth;\n }\n if (outerRadius < this.minOuterRadius()) {\n return this.minOuterRadius();\n }\n return outerRadius;\n }\n\n calcSmallValueLabelHeight() {\n const smallDef = 0.1;\n const totalVal = this.data().reduce((acc, n) => acc + n[1], 0);\n let smallCount = 0;\n this.data().forEach(row => {\n if (row[1] / totalVal < smallDef) {\n smallCount++;\n }\n });\n return this.labelHeight() * smallCount;\n }\n\n calcTotalValue(): number {\n return this.data().reduce((acc, d) => {\n return acc + d[1];\n }, 0);\n }\n\n getLabelText(d, truncate?) {\n let len;\n let label = d.data[0];\n if (typeof this._labelWidthLimit !== \"undefined\" && truncate) {\n const labelWidth = this.textSize(label, \"Verdana\", this.labelHeight()).width;\n if (this._labelWidthLimit < labelWidth) {\n len = label.length * (this._labelWidthLimit / labelWidth) - 3;\n label = len < label.length ? label.slice(0, len) + \"...\" : label;\n }\n }\n if (this.showSeriesValue()) {\n label += ` : ${this._seriesValueFormatter(d.data[1])}`;\n }\n if (this.showSeriesPercentage()) {\n let sum = this._totalValue;\n const dm = this.dataMeta();\n if (typeof dm.sum !== \"undefined\") {\n sum = dm.sum;\n }\n const perc = (d.data[1] / sum) * 100;\n label += ` : ${this._seriesPercentageFormatter(perc)}%`;\n }\n return label;\n }\n\n selection(): any[]; // any[] === single row\n selection(_: any[]): this;\n selection(_?: any[]): any[] | this {\n if (!arguments.length) {\n try {\n return this._selection.selection2()[0]?.data;\n } catch (e) {\n return undefined;\n }\n }\n // Stringify to enable a deep equal\n const strRow = JSON.stringify(_);\n this._selection.selection2(d => strRow === JSON.stringify(d.data));\n }\n\n selectByLabel(_: string) {\n const row = this.data().filter(row => row[0] === _)[0];\n if (row) {\n this.selection(row);\n }\n }\n\n _slices;\n _labels;\n enter(_domNode, element) {\n super.enter(_domNode, element);\n this._selection.widgetElement(element);\n this._slices = element.append(\"g\");\n this._labels = element.append(\"g\");\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.data[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(d.data[0]),\n value: d.data[i + 1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n }\n })\n ;\n }\n\n update(_domNode, element) {\n super.update(_domNode, element);\n const context = this;\n this.updateD3Pie();\n this._palette = this._palette.switch(this.paletteID());\n this._seriesValueFormatter = d3Format(this.seriesValueFormat() as string);\n this._seriesPercentageFormatter = d3Format(this.seriesPercentageFormat() as string);\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n this._smallValueLabelHeight = this.calcSmallValueLabelHeight();\n this._totalValue = this.calcTotalValue();\n const innerRadius = this.calcInnerRadius();\n const outerRadius = this.calcOuterRadius();\n const labelRadius = outerRadius + 12;\n this.d3Arc\n .innerRadius(innerRadius)\n .padRadius(outerRadius)\n .outerRadius(outerRadius)\n ;\n\n this._quadIdxArr = [[], [], [], []];\n const data = [...this.data()].sort((a, b) => {\n return a[1] - b[1] > 0 ? -1 : 1;\n });\n const arc = this._slices.selectAll(\".arc\").data(this.d3Pie(data), d => d.data[0]);\n\n this._labelPositions = [];\n\n // Enter ---\n arc.enter().append(\"g\")\n .attr(\"class\", (d, i) => \"arc series series-\" + this.cssTag(d.data[0]))\n .attr(\"opacity\", 0)\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .each(function (d, i) {\n d3Select(this).append(\"path\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .on(\"mouseover\", arcTween(0, 0))\n .on(\"mouseout\", arcTween(-5, 150))\n ;\n })\n .merge(arc).transition()\n .attr(\"opacity\", 1)\n .each(function (d, i) {\n const quad = context.getQuadrant(midAngle(d));\n context._quadIdxArr[quad].push(i);\n d.outerRadius = outerRadius - 5;\n const element2 = d3Select(this);\n element2.select(\"path\").transition()\n .attr(\"d\", context.d3Arc)\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n ;\n })\n ;\n\n // Exit ---\n arc.exit().transition()\n .style(\"opacity\", 0)\n .remove()\n ;\n // Labels ---\n this.d3LabelArc\n .innerRadius(labelRadius)\n .outerRadius(labelRadius)\n ;\n const text = this._labels.selectAll(\"text\").data(this.showLabels() ? this.d3Pie(data) : [], d => d.data[0]);\n\n const mergedText = text.enter().append(\"text\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .attr(\"dy\", \".5em\")\n .on(\"click\", function (d) {\n context._slices.selectAll(\"g\").filter(function (d2) {\n if (d.data === d2.data) {\n context._selection.click(this);\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n }\n });\n })\n .on(\"dblclick\", function (d) {\n context._slices.selectAll(\"g\").filter(function (d2) {\n if (d.data === d2.data) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n }\n });\n })\n .merge(text)\n .text(d => this.getLabelText(d, true))\n .each(function (d, i) {\n const pos = context.d3LabelArc.centroid(d);\n const mid_angle = midAngle(d);\n pos[0] = labelRadius * (context.isLeftSide(mid_angle) ? 1 : -1);\n context._labelPositions.push({\n top: pos[1],\n bottom: pos[1] + context.labelHeight()\n });\n });\n if (this.showLabels()) {\n this.adjustForOverlap();\n mergedText.transition()\n .style(\"font-size\", this.labelHeight() + \"px\")\n .attr(\"transform\", (d, i) => {\n const pos = context.d3LabelArc.centroid(d);\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n pos[1] = context._labelPositions[i].top;\n return \"translate(\" + pos + \")\";\n })\n .style(\"text-anchor\", d => this.isLeftSide(midAngle(d)) ? \"start\" : \"end\");\n }\n\n text.exit()\n .remove();\n\n const polyline = this._labels.selectAll(\"polyline\").data(this.showLabels() ? this.d3Pie(data) : [], d => this.getLabelText(d, true));\n\n polyline.enter()\n .append(\"polyline\")\n .merge(polyline).transition()\n .attr(\"points\", function (d, i) {\n const pos = context.d3LabelArc.centroid(d);\n const pos1 = context.d3Arc.centroid(d);\n const pos2 = [...pos];\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n pos[1] = context._labelPositions[i].top;\n return [pos1, pos2, pos];\n });\n\n polyline.exit()\n .remove();\n\n if (this.showLabels()) {\n this.centerOnLabels();\n }\n function midAngle(d) {\n return d.startAngle + (d.endAngle - d.startAngle) / 2;\n }\n\n function arcTween(outerRadiusDelta, delay) {\n return function () {\n d3Select(this).transition().delay(delay).attrTween(\"d\", function (d: any) {\n const i = d3Interpolate(d.outerRadius, outerRadius + outerRadiusDelta);\n return function (t) { d.outerRadius = i(t); return context.d3Arc(d); };\n });\n };\n }\n }\n\n isLeftSide(midAngle) {\n midAngle = normalizeRadians(midAngle);\n const isLeft = midAngle > Math.PI * 2 ? midAngle : midAngle < Math.PI && midAngle > 0;\n return isLeft;\n }\n\n getQuadrant(radians) {\n let quad = 0;\n const rad = normalizeRadians(radians);\n quad = rad <= Math.PI * 1.0 && rad >= Math.PI * 0.5 ? 3 : quad;\n quad = rad <= Math.PI * 0.5 && rad >= Math.PI * 0.0 ? 2 : quad;\n quad = rad <= Math.PI * 0.0 && rad >= Math.PI * -0.5 ? 1 : quad;\n return quad;\n }\n\n centerOnLabels() {\n const gY = this.pos().y;\n const gY2 = gY * 2;\n const radius = this.calcOuterRadius();\n const top = Math.min(this._minLabelTop, -radius);\n const bottom = Math.max(this._maxLabelBottom, radius);\n const h = bottom - top;\n const heightDiff = gY2 - h;\n const absTop = Math.abs(this._minLabelTop);\n let yShift = 0;\n if (bottom > gY) {\n yShift = gY - bottom + (this.labelHeight() / 2);\n yShift -= heightDiff / 2;\n } else if (top < 0 && absTop > gY) {\n yShift = absTop - gY + (this.labelHeight() / 2);\n yShift += heightDiff / 2;\n }\n const pos = this.pos();\n this.pos({\n y: pos.y + yShift,\n x: pos.x\n });\n }\n\n adjustForOverlap() {\n const labelHeight = this.labelHeight();\n this._quadIdxArr.forEach((arr, quad) => {\n this._quadIdxArr[quad].sort((a, b) => {\n if (quad === 1 || quad === 2) {\n return this._labelPositions[a].top > this._labelPositions[b].top ? -1 : 1;\n } else if (quad === 0 || quad === 3) {\n return this._labelPositions[a].top > this._labelPositions[b].top ? 1 : -1;\n }\n });\n let prevTop;\n this._quadIdxArr[quad].forEach((n, i) => {\n if (i > 0) {\n if (quad === 1 || quad === 2) {\n if (prevTop < this._labelPositions[n].bottom) {\n const overlap = this._labelPositions[n].bottom - prevTop;\n this._labelPositions[n].top -= overlap;\n this._labelPositions[n].bottom -= overlap;\n }\n } else if (quad === 0 || quad === 3) {\n if (prevTop + labelHeight > this._labelPositions[n].top) {\n const overlap = Math.abs(this._labelPositions[n].top) - Math.abs(prevTop + labelHeight);\n this._labelPositions[n].top -= overlap;\n this._labelPositions[n].bottom -= overlap;\n }\n }\n }\n prevTop = this._labelPositions[n].top;\n });\n });\n this._minLabelTop = 0;\n this._maxLabelBottom = 0;\n this._quadIdxArr.forEach((arr, quad) => {\n this._quadIdxArr[quad].forEach((n, i) => {\n if (this._minLabelTop > this._labelPositions[n].top) {\n this._minLabelTop = this._labelPositions[n].top;\n }\n if (this._maxLabelBottom < this._labelPositions[n].bottom) {\n this._maxLabelBottom = this._labelPositions[n].bottom;\n }\n });\n });\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n updateD3Pie() {\n const startAngle = normalizeRadians(degreesToRadians(this.startAngle()));\n this.d3Pie\n .padAngle(0.0025)\n .startAngle(startAngle)\n .endAngle(2 * Math.PI + startAngle)\n .sort(function (b, a) {\n return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;\n })\n .value(function (d) {\n return d[1];\n })\n ;\n }\n\n paletteID: (_?: string) => string | Pie;\n useClonedPalette: (_?: boolean) => boolean | Pie;\n outerText: (_?: boolean) => boolean | Pie;\n innerRadius: { (): number; (_: number): Pie; };\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; (_: boolean): Pie; };\n tooltipTick_default: { (): boolean; (_: boolean): Pie; };\n tooltipOffset: { (): number; (_: number): Pie; };\n tooltipOffset_default: { (): number; (_: number): Pie; };\n\n // SimpleSelectionMixin\n _selection: Utility.SimpleSelection;\n}\n\nPie.prototype._class += \" chart_Pie\";\nPie.prototype.implements(I2DChart.prototype);\nPie.prototype.implements(ITooltip.prototype);\nPie.prototype.mixin(Utility.SimpleSelectionMixin);\nexport interface Pie {\n showSeriesValue(): boolean;\n showSeriesValue(_: boolean): this;\n seriesValueFormat(): string;\n seriesValueFormat(_: string): this;\n showSeriesPercentage(): boolean;\n showSeriesPercentage(_: boolean): this;\n minOuterRadius(): number;\n minOuterRadius(_: number): this;\n startAngle(): number;\n startAngle(_: number): this;\n labelHeight(): number;\n labelHeight(_: number): this;\n seriesPercentageFormat(): string;\n seriesPercentageFormat(_: string): this;\n showLabels(): boolean;\n showLabels(_: boolean): this;\n}\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() });\n","import constant from \"./constant.js\";\nimport descending from \"./descending.js\";\nimport identity from \"./identity.js\";\nimport {tau} from \"./math.js\";\n\nexport default function() {\n var value = identity,\n sortValues = descending,\n sort = null,\n startAngle = constant(0),\n endAngle = constant(tau),\n padAngle = constant(0);\n\n function pie(data) {\n var i,\n n = data.length,\n j,\n k,\n sum = 0,\n index = new Array(n),\n arcs = new Array(n),\n a0 = +startAngle.apply(this, arguments),\n da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),\n a1,\n p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),\n pa = p * (da < 0 ? -1 : 1),\n v;\n\n for (i = 0; i < n; ++i) {\n if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {\n sum += v;\n }\n }\n\n // Optionally sort the arcs by previously-computed values or by data.\n if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });\n else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });\n\n // Compute the arcs! They are stored in the original data's order.\n for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {\n j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {\n data: data[j],\n index: i,\n value: v,\n startAngle: a0,\n endAngle: a1,\n padAngle: p\n };\n }\n\n return arcs;\n }\n\n pie.value = function(_) {\n return arguments.length ? (value = typeof _ === \"function\" ? _ : constant(+_), pie) : value;\n };\n\n pie.sortValues = function(_) {\n return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;\n };\n\n pie.sort = function(_) {\n return arguments.length ? (sort = _, sortValues = null, pie) : sort;\n };\n\n pie.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : startAngle;\n };\n\n pie.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : endAngle;\n };\n\n pie.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), pie) : padAngle;\n };\n\n return pie;\n}\n","import { Pie } from \"./Pie\";\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\";\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 = 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 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(\"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 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\";\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\n // ITooltip\n tooltip;\n tooltipHTML: (_) => string;\n tooltipFormat: (_) => string;\n tooltipValueFormat: (_) => string;\n tooltipValueFormat_default: (_) => string;\n\n paletteID: { (): string; (_: string): HexBin; };\n useClonedPalette: { (): boolean; (_: boolean): HexBin; };\n binSize: { (): number; (_: number): HexBin; };\n}\nHexBin.prototype._class += \" chart_HexBin\";\nHexBin.prototype.implements(I2DAggrChart.prototype);\nHexBin.prototype.implements(ITooltip.prototype);\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\";\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\";\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\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}\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\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 // 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 _selection;\n}\nRadialBar.prototype._class += \" chart_RadialBar\";\nRadialBar.prototype.implements(INDChart.prototype);\nRadialBar.prototype.implements(ITooltip.prototype);\nRadialBar.prototype.mixin(Utility.SimpleSelectionMixin);\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}\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\";\nimport { Scatter } from \"./Scatter\";\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 Mode = \"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 class StatChart extends HTMLWidget {\n\n private _mean: number;\n private _standardDeviation: number;\n private _quartiles: number[];\n private _selectMode: any;\n private _tickFormatter: (_: number) => string;\n\n private _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(\".2s\")\n .yAxisHidden(true)\n .yAxisDomainLow(0)\n .yAxisDomainHigh(110)\n .yAxisGuideLines(false) as Scatter\n ;\n\n private _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 private stdDev(degrees: number): number {\n return this.mean() + degrees * this.standardDeviation();\n }\n\n private formatStdDev(degrees: number): string {\n return this._tickFormatter(this.stdDev(degrees));\n }\n\n private quartile(q: 0 | 1 | 2 | 3 | 4): number {\n return this.data()[0][q];\n }\n\n private formatQ(q: 0 | 1 | 2 | 3 | 4): string {\n return this._tickFormatter(this.quartile(q));\n }\n\n private domain(mode: Mode): [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 mean(): number;\n mean(_: number): this;\n mean(_?: number): this | number {\n if (!arguments.length) return this._mean;\n this._mean = _;\n if (this.data()[0]) {\n this.data()[0][5] = _;\n }\n return this;\n }\n\n standardDeviation(): number;\n standardDeviation(_: number): this;\n standardDeviation(_?: number): this | number {\n if (!arguments.length) return this._standardDeviation;\n this._standardDeviation = _;\n if (this.data()[0]) {\n this.data()[0][6] = _;\n }\n return this;\n }\n\n quartiles(): number[];\n quartiles(_: number[]): this;\n quartiles(_?: number[]): this | number[] {\n if (!arguments.length) return this._quartiles;\n this._quartiles = _;\n if (this.data()[0]) {\n this.data()[0] = _.concat(this.data()[0].slice(-2));\n }\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._selectMode = element.append(\"div\")\n .style(\"position\", \"absolute\")\n .style(\"top\", \"0px\")\n .style(\"right\", \"0px\").append(\"select\")\n .on(\"change\", () => {\n this.render();\n })\n ;\n this._selectMode.append(\"option\").attr(\"value\", \"min_max\").text(\"Min / Max\");\n this._selectMode.append(\"option\").attr(\"value\", \"25_75\").text(\"25% / 75%\");\n this._selectMode.append(\"option\").attr(\"value\", \"normal\").text(\"Normal\");\n }\n\n private bellTicks(mode: Mode): 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._selectMode.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._selectMode.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 if (this.data()[0] && this.data()[0].length === 7) {\n this.quartiles(this.data()[0].slice(0, 5));\n this.mean(this.data()[0][5]);\n this.standardDeviation(this.data()[0][6]);\n }\n this.updateScatter();\n this.updateCandle();\n }\n}\nexport interface StatChart {\n tickFormat(): string;\n tickFormat(_: string): this;\n candleHeight(): number;\n candleHeight(_: number): this;\n domainPadding(): number;\n domainPadding(_: number): this;\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","import { Scatter } from \"./Scatter\";\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) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;\n const sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n const w = d.width;\n const w32 = w >> 5;\n let h = d.y1 - d.y0;\n // Zero the buffer\n for (let i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n let seen = 0;\n let seenRow = -1;\n for (let j = 0; j < h; j++) {\n for (let i = 0; i < w; i++) {\n const k = w32 * j + (i >> 5);\n const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n const sprite = tag.sprite;\n const w = tag.width >> 5;\n const lx = tag.x - (w << 4);\n const sx = lx & 0x7f;\n const msx = 32 - sx;\n const h = tag.y1 - tag.y0;\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\n let last;\n for (let j = 0; j < h; j++) {\n last = 0;\n for (let i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n const b0 = bounds[0];\n const b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n const e = size[0] / size[1];\n return function (t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n const dy = 4;\n const dx = dy * size[0] / size[1];\n let x = 0;\n let y = 0;\n return function (t) {\n const sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0: x += dx; break;\n case 1: y += dy; break;\n case 2: x -= dx; break;\n default: y -= dy; break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n const a = [];\n let i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\n\nfunction cloudCanvas() {\n return document.createElement(\"canvas\");\n}\n\nfunction functor(d) {\n return typeof d === \"function\" ? d : function () { return d; };\n}\n\nconst spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\nimport { d3Event, InputField, SVGWidget, Utility, zoom as d3Zoom } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\nimport { d3Cloud } from \"./D3Cloud\";\n\nimport \"../src/WordCloud.css\";\n\nexport class WordCloud extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n private _prevOffsetX;\n private _prevOffsetY;\n private _prevZoom;\n private _root;\n private _canvas;\n private _d3Cloud;\n private _d3Zoom;\n\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this._prevOffsetX = this.offsetX();\n this._prevOffsetY = this.offsetY();\n this._prevZoom = this.zoom();\n }\n\n calcData() {\n return this.data().map(row => {\n return {\n __viz_label: row[0],\n __viz_weight: row[1],\n __viz_row: row\n };\n });\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n this._selection.widgetElement(element);\n\n this._root = element.append(\"g\");\n this._canvas = document.createElement(\"canvas\");\n\n const context = this;\n this._d3Zoom = d3Zoom()\n .scaleExtent([0.1, 10])\n ;\n this._d3Zoom\n .on(\"zoom\", function (evt) {\n const event = d3Event();\n if (event && event.transform) {\n context.zoomed(context._d3Zoom, [event.transform.x, event.transform.y], event.transform.k);\n }\n })\n ;\n element.call(this._d3Zoom);\n\n this\n .tooltipHTML(function (d) {\n const columns = context.columns();\n const series = columns && columns.length ? columns[0] : \"Word\";\n return context.tooltipFormat({ label: d.__viz_label, series, value: d.__viz_weight });\n })\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n\n this._d3Cloud = d3Cloud()\n .canvas(() => this._canvas)\n ;\n\n this.zoomed(this, [this.offsetX(), this.offsetY()], this.zoom());\n\n const data = this.calcData();\n const context = this;\n const extent = d3Extent(data, function (d: any) { return d.__viz_weight; });\n let scaler;\n switch (this.scaleMode()) {\n case \"log\":\n scaler = d3ScaleLog;\n break;\n case \"sqrt\":\n scaler = d3ScaleSqrt;\n break;\n case \"pow\":\n scaler = d3ScalePow;\n break;\n case \"linear\":\n default:\n scaler = d3ScaleLinear;\n break;\n }\n const scale = scaler().domain(extent).range([this.fontSizeFrom(), this.fontSizeTo()]);\n const angleDomain = d3ScaleLinear().domain([0, context.angleCount() - 1]).range([context.angleFrom(), context.angleTo()]);\n\n this._d3Cloud.stop()\n .size([this.width(), this.height()])\n .words(data)\n .font(this.fontFamily())\n .padding(this.padding())\n .spiral(this.spiral())\n .text(function (d) {\n return d.__viz_label.trim();\n })\n .fontSize(function (d) {\n return scale(d.__viz_weight);\n })\n .rotate((d, i) => angleDomain(i % context.angleCount()))\n .on(\"word\", w => {\n })\n .on(\"end\", draw)\n .start()\n ;\n\n function draw(data, bounds) {\n const text = context._root.selectAll(\"text\")\n .data(data, function (d) { return d.__viz_label ? d.__viz_label.toLowerCase() : \"\"; })\n ;\n text.enter().append(\"text\")\n .attr(\"text-anchor\", \"middle\")\n .call(context._selection.enter.bind(context._selection))\n .text(function (d) { return d.__viz_label; })\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\n })\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .style(\"opacity\", 1e-6)\n .merge(text)\n .style(\"font-size\", function (d) { return scale(d.__viz_weight) + \"px\"; })\n .style(\"font-family\", context.fontFamily())\n .transition().duration(1000)\n .attr(\"transform\", function (d) { return \"translate(\" + [d.x, d.y] + \")rotate(\" + d.rotate + \")\"; })\n .style(\"fill\", function (d) { return context._palette(d.__viz_label ? d.__viz_label.toLowerCase() : \"\"); })\n .style(\"opacity\", 1)\n ;\n text.exit().transition().duration(1000)\n .style(\"opacity\", 1e-4)\n .remove()\n ;\n }\n }\n\n zoomed(source, translate, scale) {\n if (translate[0] !== this._prevOffsetX || translate[1] !== this._prevOffsetY || scale !== this._prevZoom) {\n this._root.attr(\"transform\", translate);\n switch (source) {\n case this:\n /*\n this._d3Zoom\n .scale(scale)\n .translate(translate)\n ;\n */\n break;\n case this._d3Zoom:\n this.offsetX(translate[0]);\n this.offsetY(translate[1]);\n this.zoom(scale);\n break;\n }\n this._prevOffsetX = translate[0];\n this._prevOffsetY = translate[1];\n this._prevZoom = scale;\n }\n }\n\n paletteID: { (): string; (_: string): WordCloud };\n paletteID_exists: () => boolean;\n useClonedPalette: { (): boolean; (_: boolean): WordCloud };\n useClonedPalette_exists: () => boolean;\n fontFamily: { (): string; (_: string): WordCloud };\n fontFamily_exists: () => boolean;\n fontSizeFrom: { (): number; (_: number): WordCloud };\n fontSizeFrom_exists: () => boolean;\n fontSizeTo: { (): number; (_: number): WordCloud };\n fontSizeTo_exists: () => boolean;\n angleFrom: { (): number; (_: number): WordCloud };\n angleFrom_exists: () => boolean;\n angleTo: { (): number; (_: number): WordCloud };\n angleTo_exists: () => boolean;\n angleCount: { (): number; (_: number): WordCloud };\n angleCount_exists: () => boolean;\n padding: { (): number; (_: number): WordCloud };\n padding_exists: () => boolean;\n scaleMode: { (): string; (_: string): WordCloud };\n scaleMode_exists: () => boolean;\n spiral: { (): string; (_: string): WordCloud };\n spiral_exists: () => boolean;\n offsetX: { (): number; (_: number): WordCloud };\n offsetX_exists: () => boolean;\n offsetY: { (): number; (_: number): WordCloud };\n offsetY_exists: () => boolean;\n zoom: { (): number; (_: number): WordCloud };\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; (_: string): WordCloud };\n tooltipStyle_exists: () => boolean;\n tooltipValueFormat: { (): string; (_: string): WordCloud };\n tooltipValueFormat_exists: () => boolean;\n tooltipSeriesColor: { (): string; (_: string): WordCloud };\n tooltipSeriesColor_exists: () => boolean;\n tooltipLabelColor: { (): string; (_: string): WordCloud };\n tooltipLabelColor_exists: () => boolean;\n tooltipValueColor: { (): string; (_: string): WordCloud };\n tooltipValueColor_exists: () => boolean;\n tooltipTick: { (): boolean; (_: boolean): WordCloud };\n tooltipTick_exists: () => boolean;\n tooltipOffset: { (): number; (_: number): WordCloud };\n tooltipOffset_exists: () => boolean;\n\n // SimpleSelectionMixin\n _selection: Utility.SimpleSelection;\n}\nWordCloud.prototype._class += \" chart_WordCloud\";\nWordCloud.prototype.implements(I2DChart.prototype);\nWordCloud.prototype.implements(ITooltip.prototype);\nWordCloud.prototype.mixin(Utility.SimpleSelectionMixin);\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"]}