@hpcc-js/chart 2.86.1 → 2.86.3

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.
Files changed (83) hide show
  1. package/LICENSE +43 -43
  2. package/README.md +93 -93
  3. package/dist/index.es6.js +2 -2
  4. package/dist/index.es6.js.map +1 -1
  5. package/dist/index.js +2 -2
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.min.js +1 -1
  8. package/dist/index.min.js.map +1 -1
  9. package/package.json +6 -6
  10. package/src/Area.md +176 -176
  11. package/src/Area.ts +12 -12
  12. package/src/Axis.css +34 -34
  13. package/src/Axis.ts +733 -733
  14. package/src/Bar.md +90 -90
  15. package/src/Bar.ts +9 -9
  16. package/src/Bubble.css +16 -16
  17. package/src/Bubble.md +69 -69
  18. package/src/Bubble.ts +191 -191
  19. package/src/BubbleXY.ts +14 -14
  20. package/src/Bullet.css +60 -60
  21. package/src/Bullet.md +104 -104
  22. package/src/Bullet.ts +167 -167
  23. package/src/Column.css +17 -17
  24. package/src/Column.md +90 -90
  25. package/src/Column.ts +659 -659
  26. package/src/Contour.md +88 -88
  27. package/src/Contour.ts +97 -97
  28. package/src/D3Cloud.ts +400 -400
  29. package/src/Gantt.md +119 -119
  30. package/src/Gantt.ts +14 -14
  31. package/src/Gauge.md +148 -148
  32. package/src/Gauge.ts +358 -358
  33. package/src/HalfPie.md +62 -62
  34. package/src/HalfPie.ts +26 -26
  35. package/src/Heat.md +42 -42
  36. package/src/Heat.ts +283 -283
  37. package/src/HexBin.css +9 -9
  38. package/src/HexBin.md +88 -88
  39. package/src/HexBin.ts +139 -139
  40. package/src/Line.css +6 -6
  41. package/src/Line.md +170 -170
  42. package/src/Line.ts +14 -14
  43. package/src/Pie.css +23 -23
  44. package/src/Pie.md +88 -88
  45. package/src/Pie.ts +503 -503
  46. package/src/QuarterPie.md +61 -61
  47. package/src/QuarterPie.ts +35 -35
  48. package/src/QuartileCandlestick.md +129 -129
  49. package/src/QuartileCandlestick.ts +349 -349
  50. package/src/Radar.css +15 -15
  51. package/src/Radar.md +104 -104
  52. package/src/Radar.ts +336 -336
  53. package/src/RadialBar.css +25 -25
  54. package/src/RadialBar.md +91 -91
  55. package/src/RadialBar.ts +212 -212
  56. package/src/Scatter.css +16 -16
  57. package/src/Scatter.md +163 -163
  58. package/src/Scatter.ts +376 -376
  59. package/src/StatChart.md +117 -117
  60. package/src/StatChart.ts +253 -253
  61. package/src/Step.md +163 -163
  62. package/src/Step.ts +12 -12
  63. package/src/Summary.css +56 -56
  64. package/src/Summary.md +219 -219
  65. package/src/Summary.ts +322 -322
  66. package/src/SummaryC.md +154 -154
  67. package/src/SummaryC.ts +240 -240
  68. package/src/WordCloud.css +3 -3
  69. package/src/WordCloud.md +144 -144
  70. package/src/WordCloud.ts +263 -263
  71. package/src/XYAxis.css +41 -41
  72. package/src/XYAxis.md +149 -149
  73. package/src/XYAxis.ts +803 -803
  74. package/src/__package__.ts +3 -3
  75. package/src/__tests__/heat.ts +71 -71
  76. package/src/__tests__/index.ts +3 -3
  77. package/src/__tests__/pie.ts +20 -20
  78. package/src/__tests__/stat.ts +16 -16
  79. package/src/__tests__/test3.ts +69 -69
  80. package/src/index.ts +27 -27
  81. package/src/test.ts +71 -71
  82. package/types/__package__.d.ts +2 -2
  83. package/types-3.4/__package__.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"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","__values","o","s","Symbol","iterator","m","next","value","done","__read","n","e","ar","push","error","__spreadArray","to","from","pack","l","slice","concat","SuppressedError","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","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x10","y10","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","x3","y3","x32","y32","t","intersect","ax","ay","bx","by","kc","lc","centroid","a","Linear","_context","d3CurveLinear","d3Line","pointX","pointY","defined","curve","curveLinear","output","line","data","defined0","lineStart","lineEnd","point","descending","NaN","identity$2","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","areaStart","_line","areaEnd","_point","_x","_y","j","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","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","_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","padding","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","skipSelection","selected","currSel","d3BrushSelection","dataPos","use2dSelection","pos2","valuePos","handleTypes","handlePath","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","_b","_c","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","stackedTextLocal","skipBringToTop","_linearGap","adjustedData","retVal2","formatPct","showValueAsPercentFormat","dataLen","direction","columnScale","xAxisSeriesPaddingInner","domainSums","seriesSums","columnLength","rowData","showValueAsPercent","forEach","showDomainTotal","reduce","sum","hostData","axisSize","dataRow","dataRowIdx","columnGRect","columnGEnter","tooltipInnerTextEllipsedOnly","innerTextObj","isTruncated","domainLength","domainPos","upperValue","valueText","dm","dataMeta","seriesSum","domainSum","showValueFormat","upperValuePos","lowerValuePos","valueLength","innerTextHeight","innerTextFontSize","innerTextPadding","innerTextPadding_exists","dataRect","intersectRectRect","_rects","_texts","innerTextFontFamily_exists","innerTextFontFamily","textHeightOffset","showInnerText","innerText","clippedValueLength","calcInnerText","dataText","set","Text","colorStroke_default","noRoomInside","isOutside","valueFontFamily","valueFontSize","textSize","isPositive","leftSpace","rightSpace","topSpace","bottomSpace","_a","padding_1","valueTextWidth","category","valueCentered","hideValue","get","anchor","colorFill","visible","value4pos","stackedTotalText","valueFontFamily_exists","origInnerText","fullWidth2","fullWidth3","excessWidth","innerText_1","innerText_1_1","letter","Bar","count","children","hierarchy","child","childs","root","Node","valued","nodes","defaultChildren","parent","eachBefore","computeHeight","copyData","eachAfter","callback","current","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","defaultRadius","radiusLeaf","radius","packChildren","aa","ca","sj","sk","packEnclose","translateChild","Bubble","I2DChart","labelWidgets","d3Pack","d3Hierarchy","cloneData","element2","__viz_faChar","FAChar","char","colorFill_default","BubbleXY","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","window","requestAnimationFrame","clearNow","Timer","_call","_time","_next","timerFlush","wake","t2","time","Infinity","sleep","nap","poke","delay","clearTimeout","clearInterval","setInterval","bulvarRanges","ranges","bulvarMarkers","markers","bulvarMeasures","measures","bulvarWidth","restart","stop","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__","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$2","cases","contours","threshold","thresholdSturges","smooth","smoothLinear","tz","isArray","tickStep","contour","polygons","holes","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","boundsStream","bounds","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointFirstLine","centroidPointLine","z","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","_circle","Contour","xAxisType_default","contourData","weight","density","values0","Float32Array","values1","wi","shift","transformPolygon","transformRing","transformPoint","cellSize","log","LN2","d3ContourDensity","contourBandwidth","_vals","minValue","maxValue","_dataMinWeight","_dataMaxWeight","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","geoPath","showContourFill","contourStrokeColor","contourStrokeWidth","I1DChart","Gantt","yAxisType_default","CardinalClosed","CardinalOpen","_x3","_x4","_x5","_y3","_y4","_y5","curveCatmullRom","CatmullRomClosed","CatmullRomOpen","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","lineSetup","subjectType","annotation","subjectData","angle","radiusPadding","connectorCurve","connectorData","createPoints","handles","cHandles","pointHandle","_ref$cx","_ref$cy","updatePoint","event","mapHandles","drag","components","anchors","diff","subjectCircle","_ref2$cx","_ref2$cy","circleHandles","updateRadius","_extends","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","rHandles","subjectRect","subjectThreshold","_ref$subjectData","_ref$type","typeSettings","notCornerOffset","placement","xleftcorner","ytopcorner","xleft","ytop","circlebg","fill","pointer","notCornerPointerXY","v","bHandles","subjectBadge","_subject$components","_subject$handles","stroke","dragSubject","connectorParams","diffY","diffX","xe","ye","opposite","connectorElbow","connectorLine","_connector$components","_connector$handles","endType","_ref$scale","angleOffset","atan","connectorArrow","endScale","connectorDot","dot","line$$1","_this3","noteData","noteParams","lineType","noteVertical","noteHorizontal","_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","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","sortAscending","sortDescending","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","sortDataByValue","_labelPositions","quad","getQuadrant","midAngle","mergedText","mid_angle","isLeftSide","adjustForOverlap","polyline","outerRadiusDelta","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","maxWeight_exists","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","quartiles","formatQ","mode","_selectElement","view","lazyRender","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","context_1","_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","iconOpacity","iconBaseline","fontSizeMult","getTextOffsetY","drawIcon","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"],"sources":["../src/__package__.ts","../../../node_modules/tslib/tslib.es6.mjs","../../../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/noop.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-svg-annotation/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/Connector/type-line.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/Subject/circle.js","../../../node_modules/d3-svg-annotation/src/Types-d3.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/Connector/type-elbow.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/Note/lineType-vertical.js","../../../node_modules/d3-svg-annotation/src/Note/lineType-horizontal.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"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/chart\";\nexport const PKG_VERSION = \"2.86.1\";\nexport const BUILD_VERSION = \"2.108.2\";\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\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\n this.d3Axis\n .scale(this.d3Scale)\n .tickFormat(this.formatter)\n .ticks(this.tickCount())\n ;\n this.d3Guides\n .scale(this.d3Scale)\n .tickSize(this.tickLength_exists() ? -this.tickLength() : 0)\n .tickFormat(\"\")\n .ticks(this.tickCount())\n ;\n const customTicks = this.ticks();\n if (customTicks.length) {\n this.d3Axis\n .tickValues(customTicks.map(d => this.parse(d.value)))\n .tickFormat((_d, i) => {\n return customTicks[i].label;\n });\n this.d3Guides\n .tickValues(customTicks.map(d => this.parse(d.value)));\n }\n return this;\n }\n\n adjustText(svg, tickOverlapModulus) {\n const isHoriztontal = this.isHorizontal();\n const isLeft = this.orientation() === \"left\";\n const isBottom = this.orientation() === \"bottom\";\n const context = this;\n const textSelection = svg.selectAll(\".tick > text\")\n .style(\"font-family\", this.fontFamily())\n .style(\"font-size\", this.fontSize_exists() ? this.fontSize() + \"px\" : null)\n ;\n if (this.overlapMode() === \"linebreak\") {\n if (this.type() === \"ordinal\") {\n textSelection\n .call(function () {\n return context.linebreak.apply(context, arguments);\n }, this.bandwidth())\n ;\n }\n } else if (this.overlapMode() === \"wrap\") {\n if (this.type() === \"ordinal\") {\n textSelection\n .call(function () {\n return context.wrap.apply(context, arguments);\n }, this.bandwidth())\n ;\n }\n } else {\n switch (isHoriztontal ? this.overlapMode() : \"none\") {\n case \"stagger\":\n textSelection\n .style(\"text-anchor\", \"middle\")\n .attr(\"dy\", function (_d, i) { return (isBottom ? 1 : -1) * ((isBottom ? 0.71 : 0) + i % tickOverlapModulus) + \"em\"; })\n .attr(\"dx\", 0)\n .attr(\"visibility\", null)\n .attr(\"transform\", \"rotate(0)\")\n ;\n break;\n case \"hide\":\n textSelection\n .style(\"text-anchor\", \"middle\")\n .attr(\"dy\", (isBottom ? 0.71 : 0) + \"em\")\n .attr(\"dx\", 0)\n .attr(\"visibility\", function (_d, i) { return i % tickOverlapModulus ? \"hidden\" : null; })\n .attr(\"transform\", \"rotate(0)\")\n ;\n break;\n case \"rotate\":\n const deg = -(this.labelRotation()) || 0;\n if (deg !== 0 && tickOverlapModulus > 1) {\n textSelection\n .each(function () {\n const elm = d3Select(this);\n const bbox = elm.node().getBBox();\n const dyOff = (isBottom ? 1 : -1) * Math.sin(Math.PI * (-Math.abs(deg) / 180));\n elm\n .style(\"text-anchor\", deg > 0 ? (isBottom ? \"start\" : \"end\") : (isBottom ? \"end\" : \"start\"))\n .attr(\"dy\", (bbox.height / 2 * dyOff) + \"px\")\n .attr(\"dx\", deg > 0 ? (isBottom ? \"0.71em\" : \"-0.71em\") : (isBottom ? \"-0.71em\" : \"0.71em\"))\n .attr(\"transform\", \"rotate(\" + deg + \")\")\n .attr(\"visibility\", null)\n ;\n })\n ;\n break;\n }\n /* falls through */\n default:\n textSelection\n .style(\"text-anchor\", isHoriztontal ? \"middle\" : isLeft ? \"end\" : \"start\")\n .attr(\"dy\", isHoriztontal ? ((isBottom ? 0.71 : 0) + \"em\") : \"0.32em\")\n .attr(\"dx\", 0)\n .attr(\"visibility\", null)\n .attr(\"transform\", \"rotate(0)\")\n ;\n }\n }\n }\n\n calcTickOverlapModulus(element) {\n let retVal = 1;\n switch (this.overlapMode()) {\n case \"rotate\":\n case \"stagger\":\n case \"hide\":\n const bboxArr = [];\n element.selectAll(\".tick > text\").each(function () {\n const bbox = this.getBoundingClientRect();\n for (let i = bboxArr.length - 1; i >= 0; --i) {\n if (bboxArr[i].right < bbox.left) {\n break;\n }\n if (bboxArr.length + 1 - i > retVal) {\n retVal = bboxArr.length + 1 - i;\n }\n }\n bboxArr.push(bbox);\n });\n break;\n default:\n }\n return retVal;\n }\n\n calcOverflow(element, ignoreText?): IOverflow {\n this.updateScale();\n if (this.hidden()) {\n return {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n depth: 0,\n tickOverlapModulus: 1\n };\n }\n const isHorizontal = this.isHorizontal();\n this.range(isHorizontal ? [0, this.width()] : [this.height(), 0]);\n const tmpSvg = element.append(\"g\").attr(\"class\", this.classID());\n const tmpSvgG = tmpSvg.append(\"g\");\n tmpSvgG\n .attr(\"class\", isHorizontal ? \"x\" : \"y\")\n .call(this.d3Axis)\n ;\n if (ignoreText) {\n element.selectAll(\".tick > text\").remove();\n }\n\n const retVal: IOverflow = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n depth: 0,\n tickOverlapModulus: this.calcTickOverlapModulus(tmpSvgG)\n };\n this.adjustText(tmpSvgG, retVal.tickOverlapModulus);\n\n const bbox = tmpSvgG.node().getBBox();\n retVal.depth = isHorizontal ? bbox.height : bbox.width;\n switch (this.shrinkToFit()) {\n case \"low\":\n case \"both\":\n retVal.left = isHorizontal ? -bbox.x : 0;\n retVal.bottom = isHorizontal ? 0 : -(this.height() - (bbox.height + bbox.y));\n break;\n default:\n }\n switch (this.shrinkToFit()) {\n case \"high\":\n case \"both\":\n retVal.top = isHorizontal ? 0 : -bbox.y;\n retVal.right = isHorizontal ? -(this.width() - bbox.x - bbox.width) : 0;\n break;\n default:\n }\n tmpSvg.remove();\n\n return retVal;\n }\n\n wrap(_text, bandSize, re) {\n re = re || /\\s+/;\n const context = this;\n _text.each(function () {\n const text = d3Select(this);\n const words = text.text().split(re).reverse();\n let line = [];\n let lineNumber = 0;\n const lineHeight = 1.1;\n const x = text.attr(\"x\");\n const y = text.attr(\"y\");\n const fs = parseFloat(text.style(\"font-size\")) || 10;\n const maxLinesPerBand = Math.floor(bandSize / (fs * lineHeight)) - 1;\n const minWordsPerLine = context.isHorizontal() ? 1 : Math.ceil(words.length / maxLinesPerBand);\n const dy = parseFloat(text.attr(\"dy\"))\n ;\n let tspan = text.text(null).append(\"tspan\")\n .attr(\"x\", x)\n .attr(\"y\", y)\n .attr(\"dy\", dy + \"em\")\n ;\n let wordsOnLine = 0;\n let word = words.pop();\n while (word) {\n line.push(word);\n tspan.text(line.join(\" \"));\n wordsOnLine++;\n if ((tspan.node() as any).getComputedTextLength() > bandSize && wordsOnLine >= minWordsPerLine) {\n line.pop();\n tspan.text(line.join(\" \"));\n line = [word];\n tspan = text.append(\"tspan\").attr(\"x\", x).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\n wordsOnLine = 0;\n }\n word = words.pop();\n }\n if (!context.isHorizontal()) {\n text.selectAll(\"tspan\")\n .attr(\"y\", (-lineNumber / 2) + \"em\")\n ;\n }\n });\n }\n\n linebreak(text, bandSize) {\n this.wrap(text, bandSize, \"\\n\");\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n\n this.svg.style(\"display\", this.hidden() ? \"none\" : null);\n\n const overlap = this.calcOverflow(element);\n\n const lowerPos: number = this.isHorizontal() ? overlap.left : this.height() - overlap.top - overlap.bottom;\n const upperPos: number = this.isHorizontal() ? this.width() - overlap.right - this.padding() : 0 + this.padding();\n\n this.range(this.reverse() ? [upperPos, lowerPos] : [lowerPos, upperPos]);\n\n const context = this;\n function doPosition(element) {\n element.attr(\"transform\", function () {\n switch (context.orientation()) {\n case \"left\":\n return \"translate(\" + overlap.depth + \", \" + overlap.top + \")\";\n case \"top\":\n return \"translate(0,\" + overlap.depth + \")\";\n case \"right\":\n return \"translate(\" + (context.width() - overlap.depth) + \", \" + overlap.top + \")\";\n case \"bottom\":\n return \"translate(0,\" + (context.height() - overlap.depth) + \")\";\n default:\n }\n return \"translate(0,0)\";\n });\n }\n this.svg\n // .attr(\"class\", this.isHorizontal() ? \"x\" : \"y\")\n .style(\"visibility\", this.type() === \"none\" ? \"hidden\" : null)\n .transition()\n .call(doPosition)\n ;\n if (this._guideElement) {\n this.svgGuides\n .transition()\n .call(doPosition)\n ;\n }\n this.svgAxis\n .call(this.d3Axis)\n ;\n this.adjustText(this.svgAxis, overlap.tickOverlapModulus);\n\n const svgLineBBox = {\n x: this.pos().x,\n width: this.width()\n };\n const svgText = this.svgAxis.selectAll(\".axisTitle\").data(this.title() ? [this.title()] : []);\n const svgTextUpdate = svgText.enter().append(\"text\")\n .attr(\"class\", \"axisTitle\")\n .merge(svgText)\n ;\n const svgTitleTransition = svgTextUpdate.transition()\n .attr(\"dx\", null)\n .style(\"text-anchor\", \"end\")\n ;\n switch (this.orientation()) {\n case \"left\":\n svgTitleTransition\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -2)\n .attr(\"y\", 2)\n .attr(\"dy\", \".71em\")\n ;\n break;\n case \"right\":\n svgTitleTransition\n .attr(\"transform\", \"rotate(-90)\")\n .attr(\"x\", -2)\n .attr(\"y\", 4)\n .attr(\"dx\", null)\n .attr(\"dy\", \"-.71em\")\n ;\n break;\n case \"top\":\n svgTitleTransition\n .attr(\"transform\", \"rotate(0)\")\n .attr(\"x\", svgLineBBox.width - 2)\n .attr(\"y\", 2)\n .attr(\"dx\", null)\n .attr(\"dy\", \".71em\")\n ;\n break;\n case \"bottom\":\n svgTitleTransition\n .attr(\"transform\", \"rotate(0)\")\n .attr(\"x\", svgLineBBox.width - 2)\n .attr(\"y\", -2)\n .attr(\"dy\", null)\n ;\n break;\n default:\n }\n svgTitleTransition\n .text(this.title_exists() ? this.title() : \"\")\n ;\n svgText.exit().remove();\n this.svgGuides\n .call(this.d3Guides)\n .selectAll(\".tick\").classed(\"guide-0\", d => d === 0 && this.low() < 0)\n ;\n }\n\n rerender() {\n this.svgAxis.call(this.d3Axis);\n this.svgGuides.call(this.d3Guides);\n }\n\n postUpdate(domNode, element) {\n super.postUpdate(domNode, element);\n if (this._guideElement) {\n this._guideElement\n .attr(\"transform\", this._element.attr(\"transform\"))\n ;\n }\n }\n\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 padding(): number;\n padding(_: number): this;\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 });\nAxis.prototype.publish(\"padding\", 0, \"number\", \"Padding space at top of axis (pixels)\", 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 xAxisPadding(): number;\n xAxisPadding(_: number): this;\n yAxisPadding(): number;\n yAxisPadding(_: number): this;\n}\n\nXYAxis.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Selects orientation for the axis\", [\"horizontal\", \"vertical\"]);\nXYAxis.prototype.publish(\"pointSizeColumn\", null, \"string\", \"pointSizeColumn\", null, { optional: true });\nXYAxis.prototype.publish(\"minPointSize\", 6, \"number\", \"minPointSize\");\nXYAxis.prototype.publish(\"maxPointSize\", 26, \"number\", \"maxPointSize\");\nXYAxis.prototype.publish(\"use2dSelection\", false, \"boolean\", \"2D Range Selector\");\nXYAxis.prototype.publish(\"selectionMode\", false, \"boolean\", \"Range Selector\");\nXYAxis.prototype.publishProxy(\"xAxisTitle\", \"domainAxis\", \"title\");\nXYAxis.prototype.publishProxy(\"xAxisTickCount\", \"domainAxis\", \"tickCount\");\nXYAxis.prototype.publishProxy(\"xAxisTickFormat\", \"domainAxis\", \"tickFormat\");\nXYAxis.prototype.publishProxy(\"xAxisTicks\", \"domainAxis\", \"ticks\");\nXYAxis.prototype.publishProxy(\"xAxisType\", \"domainAxis\", \"type\");\nXYAxis.prototype.publishProxy(\"xAxisTypeTimePattern\", \"domainAxis\", \"timePattern\");\nXYAxis.prototype.publish(\"xAxisDomainLow\", null, \"string\", \"X-Axis Low\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\nXYAxis.prototype.publish(\"xAxisDomainHigh\", null, \"string\", \"X-Axis High\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\nXYAxis.prototype.publishProxy(\"xAxisFontSize\", \"domainAxis\", \"fontSize\");\nXYAxis.prototype.publishProxy(\"xAxisFontFamily\", \"domainAxis\", \"fontFamily\");\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingInner\", \"domainAxis\", \"ordinalPaddingInner\");\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingOuter\", \"domainAxis\", \"ordinalPaddingOuter\");\nXYAxis.prototype.publishProxy(\"xAxisOverlapMode\", \"domainAxis\", \"overlapMode\");\nXYAxis.prototype.publishProxy(\"xAxisLabelRotation\", \"domainAxis\", \"labelRotation\");\nXYAxis.prototype.publishProxy(\"xAxisDomainPadding\", \"domainAxis\", \"extend\");\nXYAxis.prototype.publish(\"xAxisGuideLines\", false, \"boolean\", \"Y-Axis Guide Lines\");\nXYAxis.prototype.publish(\"xAxisFocus\", false, \"boolean\", \"X-Axis Focus\", null, { disable: (w: any) => w.orientation() !== \"horizontal\" });\nXYAxis.prototype.publish(\"xAxisFocusHeight\", 80, \"number\", \"X-Axis Focus Height\", null, { disable: (w: any) => !w.xAxisFocus() });\nXYAxis.prototype.publishProxy(\"xAxisHidden\", \"domainAxis\", \"hidden\");\nXYAxis.prototype.publishProxy(\"yAxisFontSize\", \"valueAxis\", \"fontSize\");\nXYAxis.prototype.publishProxy(\"yAxisFontFamily\", \"valueAxis\", \"fontFamily\");\nXYAxis.prototype.publishProxy(\"yAxisTitle\", \"valueAxis\", \"title\");\nXYAxis.prototype.publishProxy(\"yAxisTickCount\", \"valueAxis\", \"tickCount\");\nXYAxis.prototype.publishProxy(\"yAxisTickFormat\", \"valueAxis\", \"tickFormat\");\nXYAxis.prototype.publishProxy(\"yAxisTicks\", \"valueAxis\", \"ticks\");\nXYAxis.prototype.publishProxy(\"yAxisType\", \"valueAxis\", \"type\");\nXYAxis.prototype.publishProxy(\"yAxisTypeTimePattern\", \"valueAxis\", \"timePattern\");\nXYAxis.prototype.publishProxy(\"yAxisTypePowExponent\", \"valueAxis\", \"powExponent\");\nXYAxis.prototype.publishProxy(\"yAxisTypeLogBase\", \"valueAxis\", \"logBase\");\nXYAxis.prototype.publish(\"yAxisStacked\", false, \"boolean\", \"Stacked Chart\", null, { tags: [\"Basic\"], disable: (w: any) => w.xAxisType() !== \"ordinal\" || w._class.indexOf(\"chart_Column\") < 0 });\nXYAxis.prototype.publish(\"yAxisDomainLow\", null, \"string\", \"Y-Axis Low\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\nXYAxis.prototype.publish(\"yAxisDomainHigh\", null, \"string\", \"Y-Axis High\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\nXYAxis.prototype.publishProxy(\"yAxisDomainPadding\", \"valueAxis\", \"extend\");\nXYAxis.prototype.publish(\"yAxisGuideLines\", true, \"boolean\", \"Y-Axis Guide Lines\");\nXYAxis.prototype.publishProxy(\"yAxisHidden\", \"valueAxis\", \"hidden\");\nXYAxis.prototype.publish(\"regions\", [], \"array\", \"Regions\");\nXYAxis.prototype.publish(\"layers\", [], \"widgetArray\", \"Layers\", null, { render: false });\nXYAxis.prototype.publishProxy(\"xAxisPadding\", \"domainAxis\", \"padding\");\nXYAxis.prototype.publishProxy(\"yAxisPadding\", \"valueAxis\", \"padding\");\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField } from \"@hpcc-js/common\";\nimport { extent as d3Extent } from \"d3-array\";\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\nimport { select as d3Select } from \"d3-selection\";\nimport {\n area as d3Area,\n curveBasis as d3CurveBasis, curveBundle as d3CurveBundle, curveCardinal as d3CurveCardinal, curveCatmullRom as d3curveCatmullRom, curveLinear as d3CurveLinear,\n curveMonotoneX as d3CurveMonotoneX, curveNatural as d3CurveNatural, curveStep as d3CurveStep, curveStepAfter as d3CurveStepAfter, curveStepBefore as d3CurveStepBefore,\n line as d3Line\n} from \"d3-shape\";\nimport { XYAxis } from \"./XYAxis\";\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 stackedTextLocal = d3Local<Text>();\n private isHorizontal: boolean;\n\n constructor() {\n super();\n INDChart.call(this);\n ITooltip.call(this);\n\n this._selection.skipBringToTop(true);\n\n this._linearGap = 25.0;\n }\n\n layerEnter(host: XYAxis, element, duration: number = 250) {\n super.layerEnter(host, element, duration);\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.row[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(column),\n value: d.row[i + 1]\n };\n })\n });\n default:\n let value = d.row[d.idx];\n if (value instanceof Array) {\n value = value[1] - value[0];\n }\n return context.tooltipFormat({ label: d.row[0], series: context.layerColumns(host)[d.idx], value });\n }\n })\n ;\n }\n\n adjustedData(host: XYAxis) {\n const retVal = this.layerData(host).map(row => {\n let prevValue = 0;\n return row.map((cell, idx) => {\n if (idx === 0) {\n return cell;\n }\n if (idx >= this.layerColumns(host).length) {\n return cell;\n }\n const retVal2 = host.yAxisStacked() ? [prevValue, prevValue + cell] : cell;\n prevValue += cell;\n return retVal2;\n }, this);\n }, this);\n return retVal;\n }\n\n layerUpdate(host: XYAxis, element, duration: number = 250) {\n super.layerUpdate(host, element, duration);\n const isHorizontal = host.orientation() === \"horizontal\";\n this.isHorizontal = isHorizontal;\n const context = this;\n\n this._palette = this._palette.switch(this.paletteID());\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n const formatPct = d3Format(context.showValueAsPercentFormat());\n\n let dataLen = 10;\n let offset = 0;\n switch (host.xAxisType()) {\n case \"ordinal\":\n dataLen = host.bandwidth();\n offset = -dataLen / 2;\n break;\n case \"linear\":\n case \"time\":\n dataLen = Math.max(Math.abs(host.dataPos(2) - host.dataPos(1)) * (100 - this._linearGap) / 100, dataLen);\n offset = -dataLen / 2;\n break;\n default:\n }\n\n this.tooltip.direction(isHorizontal ? \"n\" : \"e\");\n\n const columnScale = d3ScaleBand()\n .domain(context.layerColumns(host).filter(function (_d, idx) { return idx > 0; }))\n .rangeRound(isHorizontal ? [0, dataLen] : [dataLen, 0])\n .paddingInner(this.xAxisSeriesPaddingInner())\n .paddingOuter(0)\n ;\n let domainSums = [];\n const seriesSums = [];\n const columnLength = this.columns().length;\n const rowData = this.data();\n if (this.showValue() && this.showValueAsPercent() === \"series\") {\n rowData.forEach((row) => {\n row.filter((_, idx) => idx > 0 && idx < columnLength).forEach((col, idx) => {\n if (seriesSums[idx + 1] === undefined) {\n seriesSums[idx + 1] = 0;\n }\n seriesSums[idx + 1] += col;\n });\n });\n }\n\n if (this.showDomainTotal() || (this.showValue() && this.showValueAsPercent() === \"domain\")) {\n domainSums = rowData.map(row => {\n return row.filter((cell, idx) => idx > 0 && idx < columnLength).reduce((sum, cell) => {\n return sum + cell;\n }, 0);\n });\n }\n\n const column = element.selectAll(\".dataRow\")\n .data(this.adjustedData(host))\n ;\n const hostData = host.data();\n const axisSize = this.getAxisSize(host);\n column.enter().append(\"g\")\n .attr(\"class\", \"dataRow\")\n .merge(column)\n .each(function (dataRow, dataRowIdx) {\n const element = d3Select(this);\n\n const columnGRect = element.selectAll(\".dataCell\").data(dataRow.filter(function (_d, i) { return i < context.layerColumns(host).length; }).map(function (d, i) {\n return {\n column: context.layerColumns(host)[i],\n row: dataRow,\n origRow: hostData[dataRowIdx],\n value: d,\n idx: i\n };\n }).filter(function (d) { return d.value !== null && d.idx > 0; }), (d: any) => d.column);\n\n const columnGEnter = columnGRect\n .enter().append(\"g\")\n .attr(\"class\", \"dataCell\")\n .on(\"mouseout.tooltip\", function (d: any) {\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n context.tooltip.hide.apply(context, arguments);\n }\n })\n .on(\"mousemove.tooltip\", function (d: any) {\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\n context.tooltip.show.apply(context, arguments);\n }\n })\n .call(host._selection.enter.bind(host._selection))\n .on(\"click\", function (d: any) {\n context.click(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n })\n .on(\"dblclick\", function (d: any) {\n context.dblclick(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\n })\n .style(\"opacity\", 0)\n .each(function (this: SVGElement, d: any) {\n const element = d3Select(this);\n element.append(\"rect\")\n .attr(\"class\", \"columnRect series series-\" + context.cssTag(d.column))\n ;\n element.append(\"text\")\n .attr(\"class\", \"columnRectText\")\n .style(\"stroke\", \"transparent\")\n ;\n })\n ;\n columnGEnter.transition().duration(duration)\n .style(\"opacity\", 1)\n ;\n const domainLength = host.yAxisStacked() ? dataLen : columnScale.bandwidth();\n columnGEnter.merge(columnGRect as any).each(function (this: SVGElement, d: any) {\n const element = d3Select(this);\n const domainPos = host.dataPos(dataRow[0]) + (host.yAxisStacked() ? 0 : columnScale(d.column)) + offset;\n const upperValue = d.value instanceof Array ? d.value[1] : d.value;\n let valueText = d.origRow[d.idx];\n if (context.showValue()) {\n const dm = context.dataMeta();\n switch (context.showValueAsPercent()) {\n case \"series\":\n const seriesSum = typeof dm.sum !== \"undefined\" ? dm.sum : seriesSums[d.idx];\n valueText = formatPct(valueText / seriesSum);\n break;\n case \"domain\":\n const domainSum = typeof dm.sum !== \"undefined\" ? dm.sum : domainSums[dataRowIdx];\n valueText = formatPct(valueText / domainSum);\n break;\n case null:\n default:\n valueText = d3Format(context.showValueFormat())(valueText);\n break;\n }\n }\n const upperValuePos = host.valuePos(upperValue);\n const lowerValuePos = host.valuePos(d.value instanceof Array ? d.value[0] : 0);\n const valuePos = Math.min(lowerValuePos, upperValuePos);\n const valueLength = Math.abs(upperValuePos - lowerValuePos);\n\n const innerTextHeight = context.innerTextFontSize();\n const innerTextPadding = context.innerTextPadding_exists() ? context.innerTextPadding() : innerTextHeight / 2.5;\n\n const dataRect = context.intersectRectRect(\n {\n x: isHorizontal ? domainPos : valuePos,\n y: isHorizontal ? valuePos : domainPos,\n width: isHorizontal ? domainLength : valueLength,\n height: isHorizontal ? valueLength : domainLength\n },\n {\n x: 0,\n y: 0,\n width: axisSize.width,\n height: axisSize.height\n }\n );\n\n const _rects = element.select(\"rect\").transition().duration(duration)\n .style(\"fill\", (d: any) => context.fillColor(d.row, d.column, d.value, d.origRow))\n ;\n\n if (isHorizontal) {\n _rects\n .attr(\"x\", domainPos)\n .attr(\"y\", valuePos)\n .attr(\"width\", domainLength)\n .attr(\"height\", valueLength)\n ;\n } else {\n _rects\n .attr(\"y\", domainPos)\n .attr(\"x\", valuePos)\n .attr(\"height\", domainLength)\n .attr(\"width\", valueLength)\n ;\n }\n const _texts = element.select(\"text\").transition().duration(duration)\n .style(\"font-size\", innerTextHeight + \"px\")\n .style(\"fill\", (d: any) => context.textColor(d.row, d.column, d.value, d.origRow))\n ;\n\n _texts.style(\"font-family\", context.innerTextFontFamily_exists() ? context.innerTextFontFamily() : null);\n\n const padding = context.innerTextPadding_exists() ? context.innerTextPadding() : 8;\n\n const textHeightOffset = innerTextHeight / 2.7;\n\n if (isHorizontal) { // Column\n const y = dataRect.y + dataRect.height - innerTextPadding;\n _texts\n .attr(\"x\", domainPos + (domainLength / 2))\n .attr(\"y\", y + textHeightOffset)\n .attr(\"transform\", `rotate(-90, ${domainPos + (domainLength / 2)}, ${y})`)\n ;\n } else { // Bar\n _texts\n .attr(\"x\", dataRect.x + padding)\n .attr(\"y\", domainPos + (domainLength / 2) + textHeightOffset)\n ;\n }\n _texts\n .attr(\"height\", domainLength)\n .attr(\"width\", valueLength)\n ;\n if (context.showInnerText()) {\n _texts\n .text((d: any) => {\n const innerText = context.innerText(d.origRow, d.origRow[columnLength], d.idx);\n if (innerText) {\n const clippedValueLength = isHorizontal ? dataRect.height : dataRect.width;\n const innerTextObj = context.calcInnerText(clippedValueLength, innerText, valueText);\n d.innerTextObj = innerTextObj;\n\n return innerTextObj.text;\n }\n return \"\";\n })\n ;\n }\n const dataText = element.selectAll(\".dataText\").data(context.showValue() ? [`${upperValue}`] : []);\n const dataTextEnter = dataText.enter().append(\"g\")\n .attr(\"class\", \"dataText\")\n .each(function (this: SVGElement, d) {\n context.textLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\n });\n dataTextEnter.merge(dataText as any)\n .each(function (this: SVGElement) {\n const pos = { x: 0, y: 0 };\n const valueFontFamily = context.valueFontFamily();\n const valueFontSize = context.valueFontSize();\n const textSize = context.textSize(valueText, valueFontFamily, valueFontSize);\n\n const isPositive = parseFloat(valueText) >= 0;\n\n let valueAnchor = context.valueAnchor() ? context.valueAnchor() : isHorizontal ? \"middle\" : \"start\";\n\n const leftSpace = dataRect.x;\n const rightSpace = axisSize.width - (dataRect.x + dataRect.width);\n const topSpace = dataRect.y;\n const bottomSpace = axisSize.height - (dataRect.y + dataRect.height);\n\n let noRoomInside;\n let isOutside;\n let noRoomOnExpectedSide;\n\n if (d.innerTextObj) {\n const { padding, valueTextWidth } = d.innerTextObj;\n isOutside = false;\n if (isHorizontal) { // Column\n valueAnchor = \"middle\";\n pos.x = domainPos + (domainLength / 2);\n\n if (d.innerTextObj.category === 4) {\n isOutside = true;\n pos.y = valuePos - padding - (valueFontSize / 2);\n } else {\n pos.y = valuePos + padding + (valueFontSize / 2);\n }\n } else { // Bar\n valueAnchor = \"start\";\n if (d.innerTextObj.category === 4) {\n isOutside = true;\n pos.x = (valueLength + valuePos) + padding;\n } else {\n pos.x = (valueLength + valuePos) - valueTextWidth - padding;\n }\n pos.y = domainPos + (domainLength / 2);\n }\n } else {\n /*\n IF this.valueCentered() and NO ROOM INSIDE\n ...then ASSUME THERES ROOM OUTSIDE\n IF NO ROOM OUTSIDE ON EXPECTED SIDE\n ...then ASSUME THERES ROOM ON THE OPPOSITE SIDE\n */\n if (isHorizontal) { // Column\n noRoomInside = dataRect.height < textSize.height;\n isOutside = !context.valueCentered() || noRoomInside;\n\n pos.x = dataRect.x + (dataRect.width / 2);\n\n if (isOutside) {\n if (isPositive) {\n noRoomOnExpectedSide = topSpace < textSize.height + padding;\n if (noRoomOnExpectedSide) {\n if (!noRoomInside) {\n isOutside = false;\n pos.y = dataRect.y + (dataRect.height / 2);\n } else {\n pos.y = dataRect.y + dataRect.height + textSize.height;\n }\n } else {\n pos.y = dataRect.y - (textSize.height / 2) - padding;\n }\n } else {\n noRoomOnExpectedSide = bottomSpace < textSize.height;\n if (noRoomOnExpectedSide) {\n if (!noRoomInside) {\n isOutside = false;\n pos.y = dataRect.y + (dataRect.height / 2);\n } else {\n pos.y = dataRect.y - (textSize.height / 2) - padding;\n }\n } else {\n pos.y = dataRect.y + textSize.height + padding;\n }\n }\n } else {\n pos.y = dataRect.y + (dataRect.height / 2);\n }\n } else { // Bar\n noRoomInside = dataRect.width < textSize.width;\n isOutside = !context.valueCentered() || noRoomInside;\n\n pos.y = dataRect.y + (dataRect.height / 2);\n\n if (isOutside) {\n if (isPositive) {\n noRoomOnExpectedSide = rightSpace < textSize.width + padding;\n if (noRoomOnExpectedSide) {\n if (context.showInnerText() || !noRoomInside) {\n isOutside = false;\n pos.x = dataRect.x + (dataRect.width / 2);\n } else {\n pos.x = dataRect.x - (textSize.width - padding);\n }\n } else {\n pos.x = dataRect.x + dataRect.width + (textSize.width / 2) + padding;\n }\n } else {\n noRoomOnExpectedSide = leftSpace < textSize.width;\n if (noRoomOnExpectedSide) {\n if (context.showInnerText() || !noRoomInside) {\n isOutside = false;\n pos.x = dataRect.x + (dataRect.width / 2);\n } else {\n pos.x = dataRect.x + dataRect.width + (textSize.width - padding);\n }\n } else {\n pos.x = dataRect.x - (textSize.width - padding);\n }\n }\n } else {\n pos.x = dataRect.x + (dataRect.width / 2);\n }\n }\n }\n const textColor = isOutside ? null : context.textColor(d.row, d.column, d.value, d.origRow);\n\n // Prevent overlapping labels on stacked columns\n const columns = context.columns();\n const hideValue = (context.yAxisStacked() && noRoomInside) ||\n (isOutside && context.yAxisStacked() && columns.indexOf(d.column) !== columns.length - 1);\n context.textLocal.get(this)\n .pos(pos)\n .anchor(valueAnchor)\n .fontFamily(valueFontFamily)\n .fontSize(valueFontSize)\n .text(`${valueText}`)\n .colorFill(textColor)\n .visible(context.showValue() && !hideValue)\n .render()\n ;\n\n });\n dataText.exit()\n .each(function (this: SVGElement, d) {\n context.textLocal.get(this).target(null);\n })\n .remove()\n ;\n });\n columnGRect.exit().transition().duration(duration)\n .style(\"opacity\", 0)\n .remove()\n ;\n\n const value4pos = host.yAxisStacked() ? domainSums[dataRowIdx] : Math.max(...dataRow.filter((_, idx) => idx > 0 && idx < columnLength));\n const stackedTotalText = element.selectAll(\".stackedTotalText\").data(context.showDomainTotal() ? [domainSums[dataRowIdx]] : []);\n const stackedTotalTextEnter = stackedTotalText.enter().append(\"g\")\n .attr(\"class\", \"stackedTotalText\")\n .each(function (this: SVGElement, d) {\n context.stackedTextLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\n });\n stackedTotalTextEnter.merge(stackedTotalText as any)\n .each(function (this: SVGElement, d: any) {\n const pos = { x: 0, y: 0 };\n const domainPos = host.dataPos(dataRow[0]);\n const valuePos = host.valuePos(value4pos);\n\n const valueFontFamily = context.valueFontFamily();\n const valueFontSize = context.valueFontSize();\n const textSize = context.textSize(d, valueFontFamily, valueFontSize);\n\n const isPositive = parseFloat(d) >= 0;\n let valueAnchor: \"start\" | \"middle\" | \"end\" = \"middle\";\n if (isHorizontal) {\n pos.x = domainPos;\n if (isPositive) {\n pos.y = valuePos - textSize.height / 2;\n } else {\n pos.y = valuePos + textSize.height / 2;\n }\n } else {\n valueAnchor = \"start\";\n pos.y = domainPos;\n if (isPositive) {\n pos.x = valuePos + textSize.width / 2;\n } else {\n pos.x = valuePos - textSize.width / 2;\n }\n }\n\n context.stackedTextLocal.get(this)\n .pos(pos)\n .anchor(valueAnchor)\n .fontFamily(valueFontFamily)\n .fontSize(valueFontSize)\n .text(d)\n .render()\n ;\n\n });\n stackedTotalText.exit()\n .each(function (this: SVGElement, d) {\n context.textLocal.get(this).target(null);\n })\n .remove()\n ;\n });\n column.exit().transition().duration(duration)\n .remove()\n ;\n }\n\n calcInnerText(offset, innerText, valueText) {\n\n const fontFamily = this.innerTextFontFamily_exists() ? this.innerTextFontFamily() : \"Verdana\";\n const fontSize = this.innerTextFontSize();\n const valueFontFamily = this.valueFontFamily_exists() ? this.valueFontFamily() : \"Verdana\";\n const valueFontSize = this.valueFontSize();\n const padding = this.innerTextPadding_exists() ? this.innerTextPadding() : fontSize / 2.5;\n const valueTextWidth = this.isHorizontal ? valueFontSize : this.textSize(valueText, valueFontFamily, valueFontSize).width;\n const ellipsisWidth = this.textSize(\"...\", fontFamily, fontSize).width;\n const innerTextWidth = this.textSize(innerText, fontFamily, fontSize).width;\n const origInnerText = innerText;\n\n const fullWidth = (padding * 3) + innerTextWidth + valueTextWidth;\n const fullWidth2 = (padding * 3) + ellipsisWidth + valueTextWidth;\n const fullWidth3 = (padding * 1) + valueTextWidth;\n /*\n Categories:\n 1) room to display inner text (with padding) AND value text (with padding)\n 2) room to display ellipsis (with padding) AND value text (with padding)\n 3) room to display value text only (with padding)\n 4) no room to display any text except value on the outside\n */\n let category = 4;\n if (fullWidth < offset) {\n category = 1;\n } else if (fullWidth2 < offset) {\n const excessWidth = offset - fullWidth2;\n let _text = \"\";\n for (const letter of innerText) {\n if (this.textSize(_text + letter, fontFamily, fontSize).width > excessWidth) {\n innerText = _text + \"...\";\n break;\n } else {\n _text += letter;\n }\n }\n category = 2;\n } else if (fullWidth3 < offset) {\n innerText = \"\";\n category = 3;\n } else {\n innerText = \"\";\n }\n\n return {\n text: innerText,\n isTruncated: origInnerText !== innerText,\n padding,\n category,\n valueTextWidth\n };\n }\n\n innerText(origRow, lparam, idx): string {\n return origRow[0];\n }\n\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 showDomainTotal(): boolean;\n showDomainTotal(_: boolean): this;\n valueCentered(): boolean;\n valueCentered(_: boolean): this;\n valueAnchor(): \"start\" | \"middle\" | \"end\";\n valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\n valueFontFamily(): string;\n valueFontFamily(_: string): this;\n valueFontFamily_exists(): boolean;\n valueFontSize(): number;\n valueFontSize(_: number): this;\n xAxisSeriesPaddingInner(): number;\n xAxisSeriesPaddingInner(_: number): this;\n innerTextFontFamily(): string;\n innerTextFontFamily(_: string): this;\n innerTextFontFamily_exists(): boolean;\n innerTextFontSize(): number;\n innerTextFontSize(_: number): this;\n innerTextPadding(): number;\n innerTextPadding(_: number): this;\n innerTextPadding_exists(): boolean;\n tooltipInnerTextEllipsedOnly(): boolean;\n tooltipInnerTextEllipsedOnly(_: boolean): this;\n}\n\nColumn.prototype.publish(\"valueFontFamily\", null, \"string\", \"Font family of value text\", null, { optional: true });\nColumn.prototype.publish(\"valueFontSize\", 12, \"number\", \"Height of value text (pixels)\");\nColumn.prototype.publish(\"innerTextFontFamily\", null, \"string\", \"Font family of inner text\", null, { optional: true });\nColumn.prototype.publish(\"innerTextPadding\", 8, \"number\", \"Offset of inner text (pixels)\", null, { optional: true });\nColumn.prototype.publish(\"innerTextFontSize\", 12, \"number\", \"Height of inner text (pixels)\");\nColumn.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", () => Column.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nColumn.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nColumn.prototype.publish(\"showValue\", false, \"boolean\", \"Show Value in column\");\nColumn.prototype.publish(\"showInnerText\", false, \"boolean\", \"Show Label in column\");\nColumn.prototype.publish(\"showValueFormat\", \",\", \"string\", \"D3 Format for Value\", null, { disable: (w: Column) => !w.showValue() || !!w.showValueAsPercent() });\nColumn.prototype.publish(\"showValueAsPercent\", null, \"set\", \"If showValue is true, optionally show value as a percentage by Series or Domain\", [null, \"series\", \"domain\"], { disable: w => !w.showValue(), optional: true });\nColumn.prototype.publish(\"showValueAsPercentFormat\", \".0%\", \"string\", \"D3 Format for %\", null, { disable: (w: Column) => !w.showValue() || !w.showValueAsPercent() });\nColumn.prototype.publish(\"showDomainTotal\", false, \"boolean\", \"Show Total Value for Stacked Columns\", null);\nColumn.prototype.publish(\"valueCentered\", false, \"boolean\", \"Show Value in center of column\");\nColumn.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\nColumn.prototype.publish(\"xAxisSeriesPaddingInner\", 0, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\");\nColumn.prototype.publish(\"tooltipInnerTextEllipsedOnly\", false, \"boolean\", \"Show tooltip only when inner text is truncated with an ellipsis\");\n\n/*\nconst origUseClonedPalette = Column.prototype.useClonedPalette;\nColumn.prototype.useClonedPalette = function (this: Column, _?) {\n const retVal = origUseClonedPalette.apply(this, arguments);\n if (arguments.length) {\n this._useClonedPalette = _;\n }\n return retVal;;\n}\n*/\n","import { Column } from \"./Column\";\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 default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","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'\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'\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 { 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 { 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 { 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 { 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\"\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 { 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 { 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\nconst sortAscending = (a, b) => a[1] - b[1] > 0 ? 1 : -1;\nconst sortDescending = (a, b) => a[1] - b[1] > 0 ? -1 : 1;\n\nexport class Pie extends SVGWidget {\n static __inputs: InputField[] = [{\n id: \"label\",\n type: \"string\"\n }, {\n id: \"value\",\n type: \"number\"\n }];\n\n protected _totalValue: number;\n\n d3Pie;\n d3Arc;\n d3LabelArc;\n private _labelPositions;\n private _smallValueLabelHeight;\n private _labelWidthLimit: number;\n private _quadIdxArr;\n private _minLabelTop = 0;\n private _maxLabelBottom = 0;\n private _seriesValueFormatter;\n private _seriesPercentageFormatter;\n constructor() {\n super();\n I2DChart.call(this);\n ITooltip.call(this);\n Utility.SimpleSelectionMixin.call(this);\n\n this.d3Pie = d3Pie();\n\n this.d3Arc = d3Arc();\n this.d3LabelArc = d3Arc();\n this\n .tooltipTick_default(false)\n .tooltipOffset_default(0)\n ;\n }\n\n intersection(pointA, pointB) {\n return this.intersectCircle(this.calcOuterRadius(), pointA, pointB);\n }\n\n calcInnerRadius() {\n return this.innerRadius_exists() ? this.calcOuterRadius() * (this.innerRadius() as number) / 100 : 0;\n }\n\n calcOuterRadius() {\n const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d }, false)), \"Verdana\", 12).width;\n const horizontalLimit = this._size.width - (this.showLabels() ? maxTextWidth * 2 : 0) - 20;\n const verticalLimit = this._size.height - 12 * 3 - (this.showLabels() ? this._smallValueLabelHeight : 0);\n const outerRadius = Math.min(horizontalLimit, verticalLimit) / 2 - 2;\n if ((horizontalLimit / 2) - 2 < this.minOuterRadius()) {\n this._labelWidthLimit = maxTextWidth - (this.minOuterRadius() - ((horizontalLimit / 2) - 2));\n } else {\n this._labelWidthLimit = maxTextWidth;\n }\n if (outerRadius < this.minOuterRadius()) {\n return this.minOuterRadius();\n }\n return outerRadius;\n }\n\n calcSmallValueLabelHeight() {\n const smallDef = 0.1;\n const totalVal = this.data().reduce((acc, n) => acc + n[1], 0);\n let smallCount = 0;\n this.data().forEach(row => {\n if (row[1] / totalVal < smallDef) {\n smallCount++;\n }\n });\n return this.labelHeight() * smallCount;\n }\n\n calcTotalValue(): number {\n return this.data().reduce((acc, d) => {\n return acc + d[1];\n }, 0);\n }\n\n getLabelText(d, truncate?) {\n let len;\n let label = d.data[0];\n if (typeof this._labelWidthLimit !== \"undefined\" && truncate) {\n const labelWidth = this.textSize(label, \"Verdana\", this.labelHeight()).width;\n if (this._labelWidthLimit < labelWidth) {\n len = label.length * (this._labelWidthLimit / labelWidth) - 3;\n label = len < label.length ? label.slice(0, len) + \"...\" : label;\n }\n }\n if (this.showSeriesValue()) {\n label += ` : ${this._seriesValueFormatter(d.data[1])}`;\n }\n if (this.showSeriesPercentage()) {\n let sum = this._totalValue;\n const dm = this.dataMeta();\n if (typeof dm.sum !== \"undefined\") {\n sum = dm.sum;\n }\n const perc = (d.data[1] / sum) * 100;\n label += ` : ${this._seriesPercentageFormatter(perc)}%`;\n }\n return label;\n }\n\n selection(): any[]; // any[] === single row\n selection(_: any[]): this;\n selection(_?: any[]): any[] | this {\n if (!arguments.length) {\n try {\n return this._selection.selection2()[0]?.data;\n } catch (e) {\n return undefined;\n }\n }\n // Stringify to enable a deep equal\n const strRow = JSON.stringify(_);\n this._selection.selection2(d => strRow === JSON.stringify(d.data));\n }\n\n selectByLabel(_: string) {\n const row = this.data().filter(row => row[0] === _)[0];\n if (row) {\n this.selection(row);\n }\n }\n\n _slices;\n _labels;\n enter(_domNode, element) {\n super.enter(_domNode, element);\n this._selection.widgetElement(element);\n this._slices = element.append(\"g\");\n this._labels = element.append(\"g\");\n const context = this;\n this\n .tooltipHTML(function (d) {\n switch (context.tooltipStyle()) {\n case \"series-table\":\n return context.tooltipFormat({\n label: d.data[0],\n arr: context.columns().slice(1).map(function (column, i) {\n return {\n label: column,\n color: context._palette(d.data[0]),\n value: d.data[i + 1]\n };\n })\n });\n default:\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\n }\n })\n ;\n }\n\n update(_domNode, element) {\n super.update(_domNode, element);\n const context = this;\n this.updateD3Pie();\n this._palette = this._palette.switch(this.paletteID());\n this._seriesValueFormatter = d3Format(this.seriesValueFormat() as string);\n this._seriesPercentageFormatter = d3Format(this.seriesPercentageFormat() as string);\n if (this.useClonedPalette()) {\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\n }\n this._smallValueLabelHeight = this.calcSmallValueLabelHeight();\n this._totalValue = this.calcTotalValue();\n const innerRadius = this.calcInnerRadius();\n const outerRadius = this.calcOuterRadius();\n const labelRadius = outerRadius + 12;\n this.d3Arc\n .innerRadius(innerRadius)\n .padRadius(outerRadius)\n .outerRadius(outerRadius)\n ;\n\n this._quadIdxArr = [[], [], [], []];\n const data = [...this.data()];\n switch (this.sortDataByValue()) {\n case \"ascending\":\n data.sort(sortAscending);\n break;\n case \"descending\":\n data.sort(sortDescending);\n break;\n }\n const arc = this._slices.selectAll(\".arc\").data(this.d3Pie(data), d => d.data[0]);\n\n this._labelPositions = [];\n\n // Enter ---\n arc.enter().append(\"g\")\n .attr(\"class\", (d, i) => \"arc series series-\" + this.cssTag(d.data[0]))\n .attr(\"opacity\", 0)\n .call(this._selection.enter.bind(this._selection))\n .on(\"click\", function (d) {\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .on(\"dblclick\", function (d) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n })\n .each(function (d, i) {\n d3Select(this).append(\"path\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .on(\"mouseover\", arcTween(0, 0))\n .on(\"mouseout\", arcTween(-5, 150))\n ;\n })\n .merge(arc).transition()\n .attr(\"opacity\", 1)\n .each(function (d, i) {\n const quad = context.getQuadrant(midAngle(d));\n context._quadIdxArr[quad].push(i);\n d.outerRadius = outerRadius - 5;\n const element2 = d3Select(this);\n element2.select(\"path\").transition()\n .attr(\"d\", context.d3Arc)\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\n ;\n })\n ;\n\n // Exit ---\n arc.exit().transition()\n .style(\"opacity\", 0)\n .remove()\n ;\n // Labels ---\n this.d3LabelArc\n .innerRadius(labelRadius)\n .outerRadius(labelRadius)\n ;\n const text = this._labels.selectAll(\"text\").data(this.showLabels() ? this.d3Pie(data) : [], d => d.data[0]);\n\n const mergedText = text.enter().append(\"text\")\n .on(\"mouseout.tooltip\", context.tooltip.hide)\n .on(\"mousemove.tooltip\", context.tooltip.show)\n .attr(\"dy\", \".5em\")\n .on(\"click\", function (d) {\n context._slices.selectAll(\"g\").filter(function (d2) {\n if (d.data === d2.data) {\n context._selection.click(this);\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n }\n });\n })\n .on(\"dblclick\", function (d) {\n context._slices.selectAll(\"g\").filter(function (d2) {\n if (d.data === d2.data) {\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\n }\n });\n })\n .merge(text)\n .text(d => this.getLabelText(d, true))\n .each(function (d, i) {\n const pos = context.d3LabelArc.centroid(d);\n const mid_angle = midAngle(d);\n pos[0] = labelRadius * (context.isLeftSide(mid_angle) ? 1 : -1);\n context._labelPositions.push({\n top: pos[1],\n bottom: pos[1] + context.labelHeight()\n });\n });\n if (this.showLabels()) {\n this.adjustForOverlap();\n mergedText.transition()\n .style(\"font-size\", this.labelHeight() + \"px\")\n .attr(\"transform\", (d, i) => {\n const pos = context.d3LabelArc.centroid(d);\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n pos[1] = context._labelPositions[i].top;\n return \"translate(\" + pos + \")\";\n })\n .style(\"text-anchor\", d => this.isLeftSide(midAngle(d)) ? \"start\" : \"end\");\n }\n\n text.exit()\n .remove();\n\n const polyline = this._labels.selectAll(\"polyline\").data(this.showLabels() ? this.d3Pie(data) : [], d => this.getLabelText(d, true));\n\n polyline.enter()\n .append(\"polyline\")\n .merge(polyline).transition()\n .attr(\"points\", function (d, i) {\n const pos = context.d3LabelArc.centroid(d);\n const pos1 = context.d3Arc.centroid(d);\n const pos2 = [...pos];\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\n pos[1] = context._labelPositions[i].top;\n return [pos1, pos2, pos];\n });\n\n polyline.exit()\n .remove();\n\n if (this.showLabels()) {\n this.centerOnLabels();\n }\n function midAngle(d) {\n return d.startAngle + (d.endAngle - d.startAngle) / 2;\n }\n\n function arcTween(outerRadiusDelta, delay) {\n return function () {\n d3Select(this).transition().delay(delay).attrTween(\"d\", function (d: any) {\n const i = d3Interpolate(d.outerRadius, outerRadius + outerRadiusDelta);\n return function (t) { d.outerRadius = i(t); return context.d3Arc(d); };\n });\n };\n }\n }\n\n isLeftSide(midAngle) {\n midAngle = normalizeRadians(midAngle);\n const isLeft = midAngle > Math.PI * 2 ? midAngle : midAngle < Math.PI && midAngle > 0;\n return isLeft;\n }\n\n getQuadrant(radians) {\n let quad = 0;\n const rad = normalizeRadians(radians);\n quad = rad <= Math.PI * 1.0 && rad >= Math.PI * 0.5 ? 3 : quad;\n quad = rad <= Math.PI * 0.5 && rad >= Math.PI * 0.0 ? 2 : quad;\n quad = rad <= Math.PI * 0.0 && rad >= Math.PI * -0.5 ? 1 : quad;\n return quad;\n }\n\n centerOnLabels() {\n const gY = this.pos().y;\n const gY2 = gY * 2;\n const radius = this.calcOuterRadius();\n const top = Math.min(this._minLabelTop, -radius);\n const bottom = Math.max(this._maxLabelBottom, radius);\n const h = bottom - top;\n const heightDiff = gY2 - h;\n const absTop = Math.abs(this._minLabelTop);\n let yShift = 0;\n if (bottom > gY) {\n yShift = gY - bottom + (this.labelHeight() / 2);\n yShift -= heightDiff / 2;\n } else if (top < 0 && absTop > gY) {\n yShift = absTop - gY + (this.labelHeight() / 2);\n yShift += heightDiff / 2;\n }\n const pos = this.pos();\n this.pos({\n y: pos.y + yShift,\n x: pos.x\n });\n }\n\n adjustForOverlap() {\n const labelHeight = this.labelHeight();\n this._quadIdxArr.forEach((arr, quad) => {\n this._quadIdxArr[quad].sort((a, b) => {\n if (quad === 1 || quad === 2) {\n return this._labelPositions[a].top > this._labelPositions[b].top ? -1 : 1;\n } else if (quad === 0 || quad === 3) {\n return this._labelPositions[a].top > this._labelPositions[b].top ? 1 : -1;\n }\n });\n let prevTop;\n this._quadIdxArr[quad].forEach((n, i) => {\n if (i > 0) {\n if (quad === 1 || quad === 2) {\n if (prevTop < this._labelPositions[n].bottom) {\n const overlap = this._labelPositions[n].bottom - prevTop;\n this._labelPositions[n].top -= overlap;\n this._labelPositions[n].bottom -= overlap;\n }\n } else if (quad === 0 || quad === 3) {\n if (prevTop + labelHeight > this._labelPositions[n].top) {\n const overlap = Math.abs(this._labelPositions[n].top) - Math.abs(prevTop + labelHeight);\n this._labelPositions[n].top -= overlap;\n this._labelPositions[n].bottom -= overlap;\n }\n }\n }\n prevTop = this._labelPositions[n].top;\n });\n });\n this._minLabelTop = 0;\n this._maxLabelBottom = 0;\n this._quadIdxArr.forEach((arr, quad) => {\n this._quadIdxArr[quad].forEach((n, i) => {\n if (this._minLabelTop > this._labelPositions[n].top) {\n this._minLabelTop = this._labelPositions[n].top;\n }\n if (this._maxLabelBottom < this._labelPositions[n].bottom) {\n this._maxLabelBottom = this._labelPositions[n].bottom;\n }\n });\n });\n }\n\n exit(domNode, element) {\n super.exit(domNode, element);\n }\n\n updateD3Pie() {\n const startAngle = normalizeRadians(degreesToRadians(this.startAngle()));\n\n switch (this.sortDataByValue()) {\n case \"ascending\":\n this.d3Pie.sort(sortAscending);\n break;\n case \"descending\":\n this.d3Pie.sort(sortDescending);\n break;\n default:\n this.d3Pie.sort(null);\n }\n\n this.d3Pie\n .padAngle(0.0025)\n .startAngle(startAngle)\n .endAngle(2 * Math.PI + startAngle)\n .value(function (d) {\n return d[1];\n })\n ;\n }\n\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 sortDataByValue(): \"none\" | \"ascending\" | \"descending\";\n sortDataByValue(_: \"none\" | \"ascending\" | \"descending\"): this;\n}\nPie.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, wedge labels will display\");\nPie.prototype.publish(\"showSeriesValue\", false, \"boolean\", \"Append data series value next to label\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"seriesValueFormat\", \",.0f\", \"string\", \"Number format used for formatting series values\", null, { disable: w => !w.showSeriesValue() });\nPie.prototype.publish(\"showSeriesPercentage\", false, \"boolean\", \"Append data series percentage next to label\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"seriesPercentageFormat\", \",.0f\", \"string\", \"Number format used for formatting series percentages\", null, { disable: w => !w.showSeriesPercentage() });\nPie.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Pie.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\nPie.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nPie.prototype.publish(\"innerRadius\", 0, \"number\", \"Sets inner pie hole radius as a percentage of the radius of the pie chart\", null, { tags: [\"Basic\"], range: { min: 0, step: 1, max: 100 } });\nPie.prototype.publish(\"minOuterRadius\", 20, \"number\", \"Minimum outer radius (pixels)\");\nPie.prototype.publish(\"startAngle\", 0, \"number\", \"Starting angle of the first (and largest) wedge (degrees)\");\nPie.prototype.publish(\"labelHeight\", 12, \"number\", \"Font size of labels (pixels)\", null, { disable: w => !w.showLabels() });\nPie.prototype.publish(\"sortDataByValue\", \"descending\", \"set\", \"Sort data by value\", [\"none\", \"ascending\", \"descending\"]);\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 = this.maxWeight_exists() ? this.maxWeight() : max(data, r => r[2]);\n\n if (this.paletteID() !== \"default\") {\n const gradient = {};\n const count = 8;\n const reverse = this.reversePalette();\n for (let i = 0; i < count; ++i) {\n gradient[i / count] = this._palette((reverse ? count - i : i) / count, 0, 1);\n }\n this._heat.gradient(gradient);\n } else {\n this._heat.gradient(this._heat.defaultGradient);\n }\n\n this._heat.resize();\n\n const radiusX = this.radiusAsPercent() ? this.radiusX() * width / 100 : this.radiusX();\n const radiusY = this.radiusAsPercent() ? this.radiusY() * height / 100 : this.radiusY();\n\n this._heat\n .clear()\n .radius(radiusX, radiusY, this.blur())\n .max(maxWeight)\n .data(data)\n .draw(this.minOpacity())\n ;\n }\n}\n\nHeat.prototype._class += \" chart_Heat\";\nHeat.prototype._palette = Palette.rainbow(\"default\");\n\nexport interface Heat {\n paletteID(): string;\n paletteID(_: string): this;\n useClonedPalette(): boolean;\n useClonedPalette(_: boolean): this;\n reversePalette(): boolean;\n reversePalette(_: boolean): this;\n\n radiusX(): number;\n radiusX(_: number): this;\n radiusY(): number;\n radiusY(_: number): this;\n radiusAsPercent(): boolean;\n radiusAsPercent(_: boolean): this;\n blur(): number;\n blur(_: number): this;\n\n maxWeight(): number;\n maxWeight(_: number): this;\n maxWeight_exists(): boolean;\n\n minOpacity(): number;\n minOpacity(_: number): this;\n}\n\nHeat.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Heat.prototype._palette.switch(), { tags: [\"Basic\"] });\nHeat.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\nHeat.prototype.publish(\"reversePalette\", false, \"boolean\", \"Reverse Palette Colors\", null, { disable: w => w.paletteID() === \"default\" });\n\nHeat.prototype.publish(\"radiusX\", 25, \"number\", \"Point X radius (25 by default)\");\nHeat.prototype.publish(\"radiusY\", 25, \"number\", \"Point Y radius (25 by default)\");\nHeat.prototype.publish(\"radiusAsPercent\", false, \"boolean\", \"Calculate RadiusX + RadiusY as % of size\");\nHeat.prototype.publish(\"blur\", 15, \"number\", \"Point blur radius (15 by default)\");\n\nHeat.prototype.publish(\"maxWeight\", undefined, \"number\", \"Clamp max weight to value (optional), omitting uses max data point\", undefined, { optional: true });\nHeat.prototype.publish(\"minOpacity\", 0.05, \"number\", \"Minimum point opacity (0.05 by default)\");\n\n// The following code is a modified version of \n// - https://github.com/mourner/simpleheat\n// - Licensed under BSD-2-Clause - https://github.com/mourner/simpleheat/blob/gh-pages/LICENSE\n// Changes:\n// * Fixed TS syntax issues\n// * Added support for eliptical shapes instead of circles\n\nfunction simpleheat(canvas): void {\n if (!(this instanceof simpleheat)) return new simpleheat(canvas);\n\n this._canvas = canvas = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\n\n this._ctx = canvas.getContext(\"2d\");\n this._width = canvas.width;\n this._height = canvas.height;\n\n this._max = 1;\n this._data = [];\n}\n\nsimpleheat.prototype = {\n\n defaultRadius: 25,\n\n defaultGradient: {\n 0.4: \"blue\",\n 0.6: \"cyan\",\n 0.7: \"lime\",\n 0.8: \"yellow\",\n 1.0: \"red\"\n },\n\n data: function (data) {\n this._data = data;\n return this;\n },\n\n max: function (max) {\n this._max = max;\n return this;\n },\n\n add: function (point) {\n this._data.push(point);\n return this;\n },\n\n clear: function () {\n this._data = [];\n return this;\n },\n\n radius: function (rX, rY, blur) {\n blur = blur === undefined ? 15 : blur;\n\n // create a grayscale blurred ellipse image that we'll use for drawing points\n const ellipse = this._ellipse = this._createCanvas();\n const ctx = ellipse.getContext(\"2d\");\n const rX2 = this._r = rX + blur;\n const rY2 = this._r = rY + blur;\n\n ellipse.width = rX2 * 2;\n ellipse.height = rY2 * 2;\n\n ctx.shadowOffsetX = ctx.shadowOffsetY = rX2 * 2;\n ctx.shadowOffsetY = ctx.shadowOffsetY = rY2 * 2;\n ctx.shadowBlur = blur;\n ctx.shadowColor = \"black\";\n\n ctx.beginPath();\n ctx.ellipse(-rX2, -rY2, rX, rY, 0, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fill();\n\n return this;\n },\n\n resize: function () {\n this._width = this._canvas.width;\n this._height = this._canvas.height;\n },\n\n gradient: function (grad) {\n // create a 256x1 gradient that we'll use to turn a grayscale heatmap into a colored one\n const canvas = this._createCanvas(),\n ctx = canvas.getContext(\"2d\"),\n gradient = ctx.createLinearGradient(0, 0, 0, 256);\n\n canvas.width = 1;\n canvas.height = 256;\n\n for (const i in grad) {\n gradient.addColorStop(+i, grad[i]);\n }\n\n ctx.fillStyle = gradient;\n ctx.fillRect(0, 0, 1, 256);\n\n this._grad = ctx.getImageData(0, 0, 1, 256).data;\n\n return this;\n },\n\n draw: function (minOpacity) {\n if (!this._ellipse) this.radius(this.defaultRadius, this.defaultRadius);\n if (!this._grad) this.gradient(this.defaultGradient);\n\n const ctx = this._ctx;\n\n ctx.clearRect(0, 0, this._width, this._height);\n\n // draw a grayscale heatmap by putting a blurred ellipse at each data point\n for (let i = 0, len = this._data.length, p; i < len; i++) {\n p = this._data[i];\n if (p[2] < 0) {\n p[2] = 0;\n } else if (p[2] > this._max) {\n p[2] = this._max;\n }\n ctx.globalAlpha = Math.max(p[2] / this._max, minOpacity === undefined ? 0.05 : minOpacity);\n ctx.drawImage(this._ellipse, p[0] - this._r, p[1] - this._r);\n }\n\n // colorize the heatmap, using opacity value of each pixel to get the right color from our gradient\n const colored = ctx.getImageData(0, 0, this._width, this._height);\n this._colorize(colored.data, this._grad);\n ctx.putImageData(colored, 0, 0);\n\n return this;\n },\n\n _colorize: function (pixels, gradient) {\n for (let i = 0, len = pixels.length, j; i < len; i += 4) {\n j = pixels[i + 3] * 4; // get gradient color from opacity value\n\n if (j) {\n pixels[i] = gradient[j];\n pixels[i + 1] = gradient[j + 1];\n pixels[i + 2] = gradient[j + 2];\n }\n }\n },\n\n _createCanvas: function () {\n if (typeof document !== \"undefined\") {\n return document.createElement(\"canvas\");\n } else {\n // create a new canvas instance in node.js\n // the canvas class needs to have a default constructor without any parameter\n return new this._canvas.constructor();\n }\n }\n};\n","var thirdPi = Math.PI / 3,\n angles = [0, thirdPi, 2 * thirdPi, 3 * thirdPi, 4 * thirdPi, 5 * thirdPi];\n\nfunction pointX(d) {\n return d[0];\n}\n\nfunction pointY(d) {\n return d[1];\n}\n\nexport default function() {\n var x0 = 0,\n y0 = 0,\n x1 = 1,\n y1 = 1,\n x = pointX,\n y = pointY,\n r,\n dx,\n dy;\n\n function hexbin(points) {\n var binsById = {}, bins = [], i, n = points.length;\n\n for (i = 0; i < n; ++i) {\n if (isNaN(px = +x.call(null, point = points[i], i, points))\n || isNaN(py = +y.call(null, point, i, points))) continue;\n\n var point,\n px,\n py,\n pj = Math.round(py = py / dy),\n pi = Math.round(px = px / dx - (pj & 1) / 2),\n py1 = py - pj;\n\n if (Math.abs(py1) * 3 > 1) {\n var px1 = px - pi,\n pi2 = pi + (px < pi ? -1 : 1) / 2,\n pj2 = pj + (py < pj ? -1 : 1),\n px2 = px - pi2,\n py2 = py - pj2;\n if (px1 * px1 + py1 * py1 > px2 * px2 + py2 * py2) pi = pi2 + (pj & 1 ? 1 : -1) / 2, pj = pj2;\n }\n\n var id = pi + \"-\" + pj, bin = binsById[id];\n if (bin) bin.push(point);\n else {\n bins.push(bin = binsById[id] = [point]);\n bin.x = (pi + (pj & 1) / 2) * dx;\n bin.y = pj * dy;\n }\n }\n\n return bins;\n }\n\n function hexagon(radius) {\n var x0 = 0, y0 = 0;\n return angles.map(function(angle) {\n var x1 = Math.sin(angle) * radius,\n y1 = -Math.cos(angle) * radius,\n dx = x1 - x0,\n dy = y1 - y0;\n x0 = x1, y0 = y1;\n return [dx, dy];\n });\n }\n\n hexbin.hexagon = function(radius) {\n return \"m\" + hexagon(radius == null ? r : +radius).join(\"l\") + \"z\";\n };\n\n hexbin.centers = function() {\n var centers = [],\n j = Math.round(y0 / dy),\n i = Math.round(x0 / dx);\n for (var y = j * dy; y < y1 + r; y += dy, ++j) {\n for (var x = i * dx + (j & 1) * dx / 2; x < x1 + dx / 2; x += dx) {\n centers.push([x, y]);\n }\n }\n return centers;\n };\n\n hexbin.mesh = function() {\n var fragment = hexagon(r).slice(0, 4).join(\"l\");\n return hexbin.centers().map(function(p) { return \"M\" + p + \"m\" + fragment; }).join(\"\");\n };\n\n hexbin.x = function(_) {\n return arguments.length ? (x = _, hexbin) : x;\n };\n\n hexbin.y = function(_) {\n return arguments.length ? (y = _, hexbin) : y;\n };\n\n hexbin.radius = function(_) {\n return arguments.length ? (r = +_, dx = r * 2 * Math.sin(thirdPi), dy = r * 1.5, hexbin) : r;\n };\n\n hexbin.size = function(_) {\n return arguments.length ? (x0 = y0 = 0, x1 = +_[0], y1 = +_[1], hexbin) : [x1 - x0, y1 - y0];\n };\n\n hexbin.extent = function(_) {\n return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], hexbin) : [[x0, y0], [x1, y1]];\n };\n\n return hexbin.radius(1);\n}\n","import { I2DAggrChart, ITooltip } from \"@hpcc-js/api\";\nimport { InputField } from \"@hpcc-js/common\";\nimport { extent as d3Extent, max as d3Max, min as d3Min } from \"d3-array\";\nimport { hexbin as d3HexBin } from \"d3-hexbin\";\nimport { XYAxis } from \"./XYAxis\";\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 View = \"min_max\" | \"25_75\" | \"normal\";\ntype Tick = { label: string, value: number };\ntype Ticks = Tick[];\ntype AxisTick = { label: string, value: string };\ntype AxisTicks = AxisTick[];\n\nfunction myFormatter(format: string): (num: number) => string {\n const formatter = d3Format(format);\n return function (num: number) {\n const strVal = (Math.round(num * 100) / 100).toString();\n if (strVal.length <= 4) return strVal;\n return formatter(num);\n };\n}\n\nexport type StatChartView = \"min_max\" | \"25_75\" | \"normal\";\nexport type Quartiles = [number, number, number, number, number];\nexport type Data = [[number, number, number, number, number, number, number]];\n\nexport class StatChart extends HTMLWidget {\n\n protected _selectElement: any;\n protected _tickFormatter: (_: number) => string;\n\n protected _bellCurve: Scatter = new Scatter()\n .columns([\"\", \"Std. Dev.\"])\n .paletteID(\"Quartile\")\n .interpolate_default(\"basis\")\n .pointSize(0)\n .xAxisType(\"linear\")\n .xAxisOverlapMode(\"none\")\n .xAxisTickFormat(\",\")\n .yAxisHidden(true)\n .yAxisDomainLow(0)\n .yAxisDomainHigh(110)\n .yAxisGuideLines(false) as Scatter\n ;\n\n protected _candle = new QuartileCandlestick()\n .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\"])\n .edgePadding(0)\n .roundedCorners(1)\n .lineWidth(1)\n .upperTextRotation(-90)\n .lowerTextRotation(-90)\n .labelFontSize(0)\n .valueFontSize(0)\n .lineColor(rainbow(90, 0, 100))\n .innerRectColor(rainbow(10, 0, 100))\n ;\n\n constructor() {\n super();\n this\n .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\", \"Mean\", \"Std. Dev.\"])\n ;\n }\n\n protected stdDev(degrees: number): number {\n return this.mean() + degrees * this.standardDeviation();\n }\n\n protected formatStdDev(degrees: number): string {\n return this._tickFormatter(this.stdDev(degrees));\n }\n\n protected quartile(q: 0 | 1 | 2 | 3 | 4): number {\n return this.quartiles()[q];\n }\n\n protected formatQ(q: 0 | 1 | 2 | 3 | 4): string {\n return this._tickFormatter(this.quartile(q));\n }\n\n protected domain(mode: View): [number, number] {\n switch (mode) {\n case \"25_75\":\n return [this.quartile(1), this.quartile(3)];\n case \"normal\":\n return [this.stdDev(-4), this.stdDev(4)];\n case \"min_max\":\n default:\n return [this.quartile(0), this.quartile(4)];\n }\n }\n\n protected min(): number {\n return this.quartile(0);\n }\n\n protected max(): number {\n return this.quartile(4);\n }\n\n data(): Data;\n data(_: Data): this;\n data(_?: Data): Data | this {\n if (!arguments.length) return [[...this.quartiles(), this.mean(), this.standardDeviation()]];\n const row = _[0];\n this.quartiles([row[0], row[1], row[2], row[3], row[4]]);\n this.mean(row[5]);\n this.standardDeviation(row[6]);\n return this;\n }\n\n enter(domNode, element) {\n super.enter(domNode, element);\n\n this._bellCurve.target(element.append(\"div\").node());\n\n this._candle.target(element.append(\"div\").node());\n\n this._selectElement = element.append(\"div\")\n .style(\"position\", \"absolute\")\n .style(\"top\", \"0px\")\n .style(\"right\", \"0px\").append(\"select\")\n .on(\"change\", () => {\n this.view(this._selectElement.node().value);\n this.lazyRender();\n })\n ;\n this._selectElement.append(\"option\").attr(\"value\", \"min_max\").text(\"Min / Max\");\n this._selectElement.append(\"option\").attr(\"value\", \"25_75\").text(\"25% / 75%\");\n this._selectElement.append(\"option\").attr(\"value\", \"normal\").text(\"Normal\");\n }\n\n protected bellTicks(mode: View): AxisTicks {\n let ticks: Ticks;\n switch (mode) {\n case \"25_75\":\n ticks = [\n { label: this.formatQ(1), value: this.quartile(1) },\n { label: this.formatQ(2), value: this.quartile(2) },\n { label: this.formatQ(3), value: this.quartile(3) }\n ];\n break;\n case \"normal\":\n ticks = [\n { label: this.formatStdDev(-4), value: this.stdDev(-4) },\n { label: \"-3σ\", value: this.stdDev(-3) },\n { label: \"-2σ\", value: this.stdDev(-2) },\n { label: \"-1σ\", value: this.stdDev(-1) },\n { label: this.formatStdDev(0), value: this.stdDev(0) },\n { label: \"+1σ\", value: this.stdDev(1) },\n { label: \"+2σ\", value: this.stdDev(2) },\n { label: \"+3σ\", value: this.stdDev(3) },\n { label: this.formatStdDev(4), value: this.stdDev(4) }\n ];\n break;\n case \"min_max\":\n default:\n ticks = [\n { label: this.formatQ(0), value: this.quartile(0) },\n { label: this.formatQ(1), value: this.quartile(1) },\n { label: this.formatQ(2), value: this.quartile(2) },\n { label: this.formatQ(3), value: this.quartile(3) },\n { label: this.formatQ(4), value: this.quartile(4) }\n ];\n }\n\n const [domainLow, domainHigh] = this.domain(this._selectElement.node().value);\n return ticks\n .filter(sd => sd.value >= domainLow && sd.value <= domainHigh)\n .map(sd => ({ label: sd.label, value: sd.value.toString() }))\n ;\n }\n\n updateScatter() {\n const mode = this._selectElement.node().value;\n const [domainLow, domainHigh] = this.domain(mode);\n const padding = (domainHigh - domainLow) * (this.domainPadding() / 100);\n\n this._bellCurve\n .xAxisDomainLow(domainLow - padding)\n .xAxisDomainHigh(domainHigh + padding)\n .xAxisTicks(this.bellTicks(mode))\n .data([\n [this.stdDev(-4), 0],\n [this.stdDev(-3), 0.3],\n [this.stdDev(-2), 5],\n [this.stdDev(-1), 68],\n [this.stdDev(0), 100],\n [this.stdDev(1), 68],\n [this.stdDev(2), 5],\n [this.stdDev(3), 0.3],\n [this.stdDev(4), 0]\n ])\n .resize({ width: this.width(), height: this.height() - this.candleHeight() })\n .render()\n ;\n }\n\n updateCandle() {\n const candleX = this._bellCurve.dataPos(this.quartile(0));\n const candleW = this._bellCurve.dataPos(this.quartile(4)) - candleX;\n this._candle\n .resize({ width: this.width(), height: this.candleHeight() })\n .pos({ x: (candleX + candleW / 2) + 2, y: this.candleHeight() / 2 })\n .width(candleW)\n .candleWidth(this.candleHeight())\n .data(this.quartiles())\n .render()\n ;\n }\n\n update(domNode, element) {\n super.update(domNode, element);\n this._tickFormatter = myFormatter(this.tickFormat());\n this._selectElement.node().value = this.view();\n this.updateScatter();\n this.updateCandle();\n }\n}\nStatChart.prototype._class += \" chart_Stat\";\n\nexport interface StatChart {\n view(): StatChartView;\n view(_: StatChartView): this;\n\n tickFormat(): string;\n tickFormat(_: string): this;\n candleHeight(): number;\n candleHeight(_: number): this;\n domainPadding(): number;\n domainPadding(_: number): this;\n\n mean(): number;\n mean(_: number): this;\n standardDeviation(): number;\n standardDeviation(_: number): this;\n quartiles(): Quartiles;\n quartiles(_: Quartiles): this;\n}\nStatChart.prototype.publish(\"view\", \"min_max\", \"set\", \"View\", [\"min_max\", \"25_75\", \"normal\"]);\n\nStatChart.prototype.publish(\"tickFormat\", \".2e\", \"string\", \"X-Axis Tick Format\");\nStatChart.prototype.publish(\"candleHeight\", 20, \"number\", \"Height of candle widget (pixels)\");\nStatChart.prototype.publish(\"domainPadding\", 10, \"number\", \"Domain value padding\");\n\nStatChart.prototype.publish(\"mean\", .5, \"number\", \"Mean\");\nStatChart.prototype.publish(\"standardDeviation\", .125, \"number\", \"Standard Deviation (σ)\");\nStatChart.prototype.publish(\"quartiles\", [0, .25, .5, .75, 1], \"object\", \"Quartiles (Min, 25%, 50%, 75%, Max)\");\n","import { Scatter } from \"./Scatter\";\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"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","__values","o","s","Symbol","iterator","m","next","value","done","__read","n","e","ar","push","error","__spreadArray","to","from","pack","l","slice","concat","SuppressedError","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","cornerTangents","r1","rc","lo","ox","oy","x11","y11","x10","y10","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","x3","y3","x32","y32","t","intersect","ax","ay","bx","by","kc","lc","centroid","a","Linear","_context","d3CurveLinear","d3Line","pointX","pointY","defined","curve","curveLinear","output","line","data","defined0","lineStart","lineEnd","point","descending","NaN","identity$2","that","Basis","d3CurveBasis","Bundle","beta","_basis","_beta","areaStart","_line","areaEnd","_point","_x","_y","j","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","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","_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","padding","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","skipSelection","selected","currSel","d3BrushSelection","dataPos","use2dSelection","pos2","valuePos","handleTypes","handlePath","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","_b","_c","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","stackedTextLocal","skipBringToTop","_linearGap","adjustedData","retVal2","formatPct","showValueAsPercentFormat","dataLen","direction","columnScale","xAxisSeriesPaddingInner","domainSums","seriesSums","columnLength","rowData","showValueAsPercent","forEach","showDomainTotal","reduce","sum","hostData","axisSize","dataRow","dataRowIdx","columnGRect","columnGEnter","tooltipInnerTextEllipsedOnly","innerTextObj","isTruncated","domainLength","domainPos","upperValue","valueText","dm","dataMeta","seriesSum","domainSum","showValueFormat","upperValuePos","lowerValuePos","valueLength","innerTextHeight","innerTextFontSize","innerTextPadding","innerTextPadding_exists","dataRect","intersectRectRect","_rects","_texts","innerTextFontFamily_exists","innerTextFontFamily","textHeightOffset","showInnerText","innerText","clippedValueLength","calcInnerText","dataText","set","Text","colorStroke_default","noRoomInside","isOutside","valueFontFamily","valueFontSize","textSize","isPositive","leftSpace","rightSpace","topSpace","bottomSpace","_a","padding_1","valueTextWidth","category","valueCentered","hideValue","get","anchor","colorFill","visible","value4pos","stackedTotalText","valueFontFamily_exists","origInnerText","fullWidth2","fullWidth3","excessWidth","innerText_1","innerText_1_1","letter","Bar","count","children","hierarchy","child","childs","root","Node","valued","nodes","defaultChildren","parent","eachBefore","computeHeight","copyData","eachAfter","callback","current","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","defaultRadius","radiusLeaf","radius","packChildren","aa","ca","sj","sk","packEnclose","translateChild","Bubble","I2DChart","labelWidgets","d3Pack","d3Hierarchy","cloneData","element2","__viz_faChar","FAChar","char","colorFill_default","BubbleXY","taskHead","taskTail","frame","timeout","interval","clockLast","clockNow","clockSkew","clock","performance","now","Date","setFrame","window","requestAnimationFrame","clearNow","Timer","_call","_time","_next","timerFlush","wake","t2","time","Infinity","sleep","nap","poke","delay","clearTimeout","clearInterval","setInterval","bulvarRanges","ranges","bulvarMarkers","markers","bulvarMeasures","measures","bulvarWidth","restart","stop","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__","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$2","cases","contours","threshold","thresholdSturges","smooth","smoothLinear","tz","isArray","tickStep","contour","polygons","holes","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","boundsStream","bounds","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","centroidPointFirstLine","centroidPointLine","z","centroidPointFirstRing","centroidPointRing","PathContext","_radius","pointRadius","lengthRing","lengthSum","lengthStream","lengthPointFirst","lengthPoint","PathString","_string","_circle","Contour","xAxisType_default","contourData","weight","density","values0","Float32Array","values1","wi","shift","transformPolygon","transformRing","transformPoint","cellSize","log","LN2","d3ContourDensity","contourBandwidth","_vals","minValue","maxValue","_dataMinWeight","_dataMaxWeight","projection","projectionStream","contextStream","pathArea","pathMeasure","pathBounds","pathCentroid","geoPath","showContourFill","contourStrokeColor","contourStrokeWidth","I1DChart","Gantt","yAxisType_default","CardinalClosed","CardinalOpen","_x3","_x4","_x5","_y3","_y4","_y5","curveCatmullRom","CatmullRomClosed","CatmullRomOpen","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","lineSetup","subjectType","annotation","subjectData","angle","radiusPadding","connectorCurve","connectorData","createPoints","handles","cHandles","pointHandle","_ref$cx","_ref$cy","updatePoint","event","mapHandles","drag","toConsumableArray","components","anchors","diff","subjectCircle","_ref2$cx","_ref2$cy","circleHandles","updateRadius","_extends","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","rHandles","subjectRect","subjectThreshold","_ref$subjectData","_ref$type","typeSettings","notCornerOffset","placement","xleftcorner","ytopcorner","xleft","ytop","circlebg","fill","pointer","notCornerPointerXY","v","bHandles","subjectBadge","_subject$components","_subject$handles","stroke","dragSubject","connectorParams","diffY","diffX","xe","ye","opposite","connectorElbow","connectorLine","_connector$components","_connector$handles","endType","_ref$scale","angleOffset","atan","connectorArrow","endScale","connectorDot","dot","_this3","noteData","noteParams","lineType","noteVertical","noteHorizontal","_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","babelHelpers.extends","d3NoteText","_Type","params","titleBBox","wrapLength","wrapSplitter","bgPadding","bgPaddingFinal","_typeof","d3Callout","d3CalloutElbow","ThresholdMap","newWithClass","lineHeight","line$$1","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","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","sortAscending","sortDescending","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","sortDataByValue","_labelPositions","quad","getQuadrant","midAngle","mergedText","mid_angle","isLeftSide","adjustForOverlap","polyline","outerRadiusDelta","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","maxWeight_exists","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","quartiles","formatQ","mode","_selectElement","view","lazyRender","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","context_1","_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","iconOpacity","iconBaseline","fontSizeMult","getTextOffsetY","drawIcon","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","collideRects","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"],"sources":["../src/__package__.ts","../../../node_modules/tslib/tslib.es6.mjs","../../../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/noop.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/basis.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/bundle.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinal.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinalClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/cardinalOpen.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRom.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRomClosed.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/catmullRomOpen.js","../../../node_modules/d3-svg-annotation/node_modules/d3-shape/src/curve/monotone.js","../../../node_modules/d3-svg-annotation/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/Connector/type-line.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/Subject/circle.js","../../../node_modules/d3-svg-annotation/src/Types-d3.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/Connector/type-elbow.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/Note/lineType-vertical.js","../../../node_modules/d3-svg-annotation/src/Note/lineType-horizontal.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"],"sourcesContent":["export const PKG_NAME = \"@hpcc-js/chart\";\r\nexport const PKG_VERSION = \"2.86.2\";\r\nexport const BUILD_VERSION = \"2.108.6\";\r\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\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;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\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);\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); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\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\";\r\nimport { axisBottom as d3AxisBottom, axisLeft as d3AxisLeft, axisRight as d3AxisRight, axisTop as d3AxisTop } from \"d3-axis\";\r\nimport { format as d3Format } from \"d3-format\";\r\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleTime as d3ScaleTime } from \"d3-scale\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { timeFormat as d3TimeFormat, timeParse as d3TimeParse } from \"d3-time-format\";\r\n\r\nimport \"../src/Axis.css\";\r\n\r\nexport interface IOverflow {\r\n left: number;\r\n top: number;\r\n right: number;\r\n bottom: number;\r\n depth: number;\r\n tickOverlapModulus: number;\r\n}\r\n\r\nexport class Axis extends SVGWidget {\r\n protected parser;\r\n protected parserInvert;\r\n protected formatter: (date: Date) => string;\r\n protected d3Scale;\r\n protected d3Axis;\r\n protected d3Guides;\r\n protected _guideElement;\r\n protected svg;\r\n protected svgAxis;\r\n protected svgGuides;\r\n\r\n @publish(\"linear\", \"set\", \"Type\", [\"none\", \"ordinal\", \"linear\", \"pow\", \"log\", \"time\"])\r\n _type: string;\r\n type(): string;\r\n type(_: string): this;\r\n type(_?: string): string | this {\r\n if (!arguments.length) return this._type;\r\n this._type = _;\r\n this.updateScale();\r\n return this;\r\n }\r\n\r\n @publish(\"%Y-%m-%d\", \"string\", \"Time Series Pattern\", null, { disable: (w: any) => w.type() !== \"time\" })\r\n _timePattern: string;\r\n timePattern(): string;\r\n timePattern(_: string): this;\r\n timePattern(_?: string): string | this {\r\n if (!arguments.length) return this._timePattern;\r\n this._timePattern = _;\r\n this.updateScale();\r\n return this;\r\n }\r\n timePattern_exists: () => boolean;\r\n\r\n @publish(false, \"boolean\", \"Reverse\")\r\n reverse: publish<this, boolean>;\r\n\r\n constructor(drawStartPosition: \"origin\" | \"center\" = \"origin\") {\r\n super();\r\n this._drawStartPos = drawStartPosition;\r\n\r\n this.updateScale();\r\n }\r\n\r\n lowValue() {\r\n return this.parse(this.low());\r\n }\r\n\r\n highValue() {\r\n return this.parse(this.high());\r\n }\r\n\r\n parse(d, forceNumeric?) {\r\n if (d instanceof Array) {\r\n return d.map(function (d2) {\r\n return this.parse(d2);\r\n }, this);\r\n }\r\n if (d !== undefined && d !== null) {\r\n if (this.parser) {\r\n return this.parser(typeof d === \"number\" ? d.toString() : d);\r\n }\r\n if (forceNumeric && typeof d === \"string\") {\r\n return +d;\r\n }\r\n }\r\n return d;\r\n }\r\n\r\n parseInvert(d) {\r\n if (d instanceof Array) {\r\n return d.map(function (d2) {\r\n return this.parseInvert(d2);\r\n }, this);\r\n }\r\n if (this.parserInvert && d) {\r\n return this.parserInvert(d);\r\n }\r\n return d;\r\n }\r\n\r\n format(d) {\r\n if (d instanceof Array) {\r\n return d.map(function (d2) {\r\n return this.format(d2);\r\n }, this);\r\n }\r\n if (d !== undefined && d !== null && this.formatter) {\r\n return this.formatter(d);\r\n }\r\n return d;\r\n }\r\n\r\n parseFormat(d) {\r\n return this.format(this.parse(d));\r\n }\r\n\r\n scalePos(d) {\r\n let retVal = this.d3Scale(this.parse(d));\r\n if (this.type() === \"ordinal\") {\r\n retVal += this.bandwidth() / 2;\r\n }\r\n return retVal;\r\n }\r\n\r\n bandwidth() {\r\n return this.d3Scale.bandwidth ? this.d3Scale.bandwidth() : 0;\r\n }\r\n\r\n isHorizontal() {\r\n switch (this.orientation()) {\r\n case \"left\":\r\n case \"right\":\r\n return false;\r\n default:\r\n }\r\n return true;\r\n }\r\n\r\n domain(_) {\r\n if (!arguments.length) return this.d3Scale.domain();\r\n this.d3Scale.domain(_);\r\n return this;\r\n }\r\n\r\n range(_) {\r\n if (!arguments.length) {\r\n if (this.d3Scale.rangeRoundBands) {\r\n return this.d3Scale.rangeExtent();\r\n } else if (this.d3Scale.rangeRound) {\r\n return this.d3Scale.range();\r\n }\r\n }\r\n if (this.d3Scale.rangeRoundBands) {\r\n this.d3Scale.rangeRoundBands(_, 0.1);\r\n } else if (this.d3Scale.rangeRound) {\r\n this.d3Scale.range(_);\r\n }\r\n return this;\r\n }\r\n\r\n invert(pos) {\r\n return this.d3Scale.invert(pos);\r\n }\r\n\r\n guideTarget(_) {\r\n this._guideElement = d3Select(_)\r\n .attr(\"class\", this._class)\r\n ;\r\n return this;\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this.svg = element.append(\"g\");\r\n this.svgAxis = this.svg.append(\"g\")\r\n .attr(\"class\", \"axis\")\r\n ;\r\n this.svgGuides = (this._guideElement || element).append(\"g\")\r\n .attr(\"class\", \"guide\")\r\n ;\r\n }\r\n\r\n protected _prevOrientation;\r\n updateScale(): this {\r\n switch (this.type()) {\r\n case \"ordinal\":\r\n this.d3Scale = d3ScaleBand()\r\n .paddingInner(this.ordinalPaddingInner())\r\n .paddingOuter(this.ordinalPaddingOuter())\r\n ;\r\n if (this.ordinals_exists()) {\r\n this.d3Scale.domain(this.ordinals());\r\n }\r\n this.parser = null;\r\n if (this.ordinalMappings_exists()) {\r\n const mappings = this.ordinalMappings();\r\n this.formatter = (_: any) => mappings[_] || _;\r\n } else {\r\n this.formatter = null;\r\n }\r\n break;\r\n case \"linear\":\r\n this.d3Scale = d3ScaleLinear();\r\n if (this.low_exists() && this.high_exists()) {\r\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\r\n }\r\n this.parser = null;\r\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\r\n break;\r\n case \"pow\":\r\n this.d3Scale = d3ScalePow()\r\n .exponent(this.powExponent())\r\n ;\r\n if (this.low_exists() && this.high_exists()) {\r\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\r\n }\r\n this.parser = null;\r\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\r\n break;\r\n case \"log\":\r\n this.d3Scale = d3ScaleLog()\r\n .base(this.logBase())\r\n ;\r\n if (this.low_exists() && this.high_exists()) {\r\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\r\n }\r\n this.parser = null;\r\n this.formatter = this.tickFormat_exists() ? d3Format(this.tickFormat()) : null;\r\n break;\r\n case \"time\":\r\n this.d3Scale = d3ScaleTime();\r\n if (this.low_exists() && this.high_exists()) {\r\n this.d3Scale.domain([this.lowValue(), this.highValue()]);\r\n }\r\n this.parser = this.timePattern_exists() ? d3TimeParse(this.timePattern()) : null;\r\n this.parserInvert = this.timePattern_exists() ? d3TimeFormat(this.timePattern()) : null;\r\n this.formatter = this.tickFormat_exists() ? d3TimeFormat(this.tickFormat()) : null;\r\n break;\r\n default:\r\n }\r\n if (this._prevOrientation !== this.orientation()) {\r\n switch (this.orientation()) {\r\n case \"left\":\r\n this.d3Axis = d3AxisLeft(this.d3Scale);\r\n this.d3Guides = d3AxisLeft(this.d3Scale);\r\n break;\r\n case \"top\":\r\n this.d3Axis = d3AxisTop(this.d3Scale);\r\n this.d3Guides = d3AxisTop(this.d3Scale);\r\n break;\r\n case \"right\":\r\n this.d3Axis = d3AxisRight(this.d3Scale);\r\n this.d3Guides = d3AxisRight(this.d3Scale);\r\n break;\r\n case \"bottom\":\r\n default:\r\n this.d3Axis = d3AxisBottom(this.d3Scale);\r\n this.d3Guides = d3AxisBottom(this.d3Scale);\r\n break;\r\n }\r\n this._prevOrientation = this.orientation();\r\n if (this.svgAxis) {\r\n this.svgAxis.html(\"\");\r\n }\r\n if (this.svgGuides) {\r\n this.svgGuides.html(\"\");\r\n }\r\n }\r\n\r\n if (this.extend()) {\r\n switch (this.type()) {\r\n case \"ordinal\":\r\n break;\r\n default:\r\n let length;\r\n let delta;\r\n let low;\r\n let high;\r\n let newLow;\r\n let newHigh;\r\n if (this.isHorizontal()) {\r\n length = this.width();\r\n this.d3Scale.range([0, length]);\r\n delta = length * this.extend() / 100;\r\n low = this.d3Scale.invert(0);\r\n newLow = this.d3Scale.invert(-delta);\r\n high = this.d3Scale.invert(length);\r\n newHigh = this.d3Scale.invert(length + delta);\r\n } else {\r\n length = this.height();\r\n this.d3Scale.range([length, 0]);\r\n delta = length * this.extend() / 100;\r\n low = this.d3Scale.invert(length);\r\n newLow = this.d3Scale.invert(length + delta);\r\n high = this.d3Scale.invert(0);\r\n newHigh = this.d3Scale.invert(-delta);\r\n }\r\n if (newLow === low) { // Edge case when there is only one item in the domain ---\r\n newLow = low - low * this.extend() / 100;\r\n }\r\n if (newHigh === high) { // Edge case when there is only one item in the domain ---\r\n newHigh = high + high * this.extend() / 100;\r\n }\r\n if ((Math as any).sign(low) !== (Math as any).sign(newLow)) {\r\n newLow = 0;\r\n }\r\n if ((Math as any).sign(high) !== (Math as any).sign(newHigh)) {\r\n newHigh = 0;\r\n }\r\n this.d3Scale.domain([newLow, newHigh]);\r\n break;\r\n }\r\n }\r\n\r\n this.d3Axis\r\n .scale(this.d3Scale)\r\n .tickFormat(this.formatter)\r\n .ticks(this.tickCount())\r\n ;\r\n this.d3Guides\r\n .scale(this.d3Scale)\r\n .tickSize(this.tickLength_exists() ? -this.tickLength() : 0)\r\n .tickFormat(\"\")\r\n .ticks(this.tickCount())\r\n ;\r\n const customTicks = this.ticks();\r\n if (customTicks.length) {\r\n this.d3Axis\r\n .tickValues(customTicks.map(d => this.parse(d.value)))\r\n .tickFormat((_d, i) => {\r\n return customTicks[i].label;\r\n });\r\n this.d3Guides\r\n .tickValues(customTicks.map(d => this.parse(d.value)));\r\n }\r\n return this;\r\n }\r\n\r\n adjustText(svg, tickOverlapModulus) {\r\n const isHoriztontal = this.isHorizontal();\r\n const isLeft = this.orientation() === \"left\";\r\n const isBottom = this.orientation() === \"bottom\";\r\n const context = this;\r\n const textSelection = svg.selectAll(\".tick > text\")\r\n .style(\"font-family\", this.fontFamily())\r\n .style(\"font-size\", this.fontSize_exists() ? this.fontSize() + \"px\" : null)\r\n ;\r\n if (this.overlapMode() === \"linebreak\") {\r\n if (this.type() === \"ordinal\") {\r\n textSelection\r\n .call(function () {\r\n return context.linebreak.apply(context, arguments);\r\n }, this.bandwidth())\r\n ;\r\n }\r\n } else if (this.overlapMode() === \"wrap\") {\r\n if (this.type() === \"ordinal\") {\r\n textSelection\r\n .call(function () {\r\n return context.wrap.apply(context, arguments);\r\n }, this.bandwidth())\r\n ;\r\n }\r\n } else {\r\n switch (isHoriztontal ? this.overlapMode() : \"none\") {\r\n case \"stagger\":\r\n textSelection\r\n .style(\"text-anchor\", \"middle\")\r\n .attr(\"dy\", function (_d, i) { return (isBottom ? 1 : -1) * ((isBottom ? 0.71 : 0) + i % tickOverlapModulus) + \"em\"; })\r\n .attr(\"dx\", 0)\r\n .attr(\"visibility\", null)\r\n .attr(\"transform\", \"rotate(0)\")\r\n ;\r\n break;\r\n case \"hide\":\r\n textSelection\r\n .style(\"text-anchor\", \"middle\")\r\n .attr(\"dy\", (isBottom ? 0.71 : 0) + \"em\")\r\n .attr(\"dx\", 0)\r\n .attr(\"visibility\", function (_d, i) { return i % tickOverlapModulus ? \"hidden\" : null; })\r\n .attr(\"transform\", \"rotate(0)\")\r\n ;\r\n break;\r\n case \"rotate\":\r\n const deg = -(this.labelRotation()) || 0;\r\n if (deg !== 0 && tickOverlapModulus > 1) {\r\n textSelection\r\n .each(function () {\r\n const elm = d3Select(this);\r\n const bbox = elm.node().getBBox();\r\n const dyOff = (isBottom ? 1 : -1) * Math.sin(Math.PI * (-Math.abs(deg) / 180));\r\n elm\r\n .style(\"text-anchor\", deg > 0 ? (isBottom ? \"start\" : \"end\") : (isBottom ? \"end\" : \"start\"))\r\n .attr(\"dy\", (bbox.height / 2 * dyOff) + \"px\")\r\n .attr(\"dx\", deg > 0 ? (isBottom ? \"0.71em\" : \"-0.71em\") : (isBottom ? \"-0.71em\" : \"0.71em\"))\r\n .attr(\"transform\", \"rotate(\" + deg + \")\")\r\n .attr(\"visibility\", null)\r\n ;\r\n })\r\n ;\r\n break;\r\n }\r\n /* falls through */\r\n default:\r\n textSelection\r\n .style(\"text-anchor\", isHoriztontal ? \"middle\" : isLeft ? \"end\" : \"start\")\r\n .attr(\"dy\", isHoriztontal ? ((isBottom ? 0.71 : 0) + \"em\") : \"0.32em\")\r\n .attr(\"dx\", 0)\r\n .attr(\"visibility\", null)\r\n .attr(\"transform\", \"rotate(0)\")\r\n ;\r\n }\r\n }\r\n }\r\n\r\n calcTickOverlapModulus(element) {\r\n let retVal = 1;\r\n switch (this.overlapMode()) {\r\n case \"rotate\":\r\n case \"stagger\":\r\n case \"hide\":\r\n const bboxArr = [];\r\n element.selectAll(\".tick > text\").each(function () {\r\n const bbox = this.getBoundingClientRect();\r\n for (let i = bboxArr.length - 1; i >= 0; --i) {\r\n if (bboxArr[i].right < bbox.left) {\r\n break;\r\n }\r\n if (bboxArr.length + 1 - i > retVal) {\r\n retVal = bboxArr.length + 1 - i;\r\n }\r\n }\r\n bboxArr.push(bbox);\r\n });\r\n break;\r\n default:\r\n }\r\n return retVal;\r\n }\r\n\r\n calcOverflow(element, ignoreText?): IOverflow {\r\n this.updateScale();\r\n if (this.hidden()) {\r\n return {\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n depth: 0,\r\n tickOverlapModulus: 1\r\n };\r\n }\r\n const isHorizontal = this.isHorizontal();\r\n this.range(isHorizontal ? [0, this.width()] : [this.height(), 0]);\r\n const tmpSvg = element.append(\"g\").attr(\"class\", this.classID());\r\n const tmpSvgG = tmpSvg.append(\"g\");\r\n tmpSvgG\r\n .attr(\"class\", isHorizontal ? \"x\" : \"y\")\r\n .call(this.d3Axis)\r\n ;\r\n if (ignoreText) {\r\n element.selectAll(\".tick > text\").remove();\r\n }\r\n\r\n const retVal: IOverflow = {\r\n left: 0,\r\n top: 0,\r\n right: 0,\r\n bottom: 0,\r\n depth: 0,\r\n tickOverlapModulus: this.calcTickOverlapModulus(tmpSvgG)\r\n };\r\n this.adjustText(tmpSvgG, retVal.tickOverlapModulus);\r\n\r\n const bbox = tmpSvgG.node().getBBox();\r\n retVal.depth = isHorizontal ? bbox.height : bbox.width;\r\n switch (this.shrinkToFit()) {\r\n case \"low\":\r\n case \"both\":\r\n retVal.left = isHorizontal ? -bbox.x : 0;\r\n retVal.bottom = isHorizontal ? 0 : -(this.height() - (bbox.height + bbox.y));\r\n break;\r\n default:\r\n }\r\n switch (this.shrinkToFit()) {\r\n case \"high\":\r\n case \"both\":\r\n retVal.top = isHorizontal ? 0 : -bbox.y;\r\n retVal.right = isHorizontal ? -(this.width() - bbox.x - bbox.width) : 0;\r\n break;\r\n default:\r\n }\r\n tmpSvg.remove();\r\n\r\n return retVal;\r\n }\r\n\r\n wrap(_text, bandSize, re) {\r\n re = re || /\\s+/;\r\n const context = this;\r\n _text.each(function () {\r\n const text = d3Select(this);\r\n const words = text.text().split(re).reverse();\r\n let line = [];\r\n let lineNumber = 0;\r\n const lineHeight = 1.1;\r\n const x = text.attr(\"x\");\r\n const y = text.attr(\"y\");\r\n const fs = parseFloat(text.style(\"font-size\")) || 10;\r\n const maxLinesPerBand = Math.floor(bandSize / (fs * lineHeight)) - 1;\r\n const minWordsPerLine = context.isHorizontal() ? 1 : Math.ceil(words.length / maxLinesPerBand);\r\n const dy = parseFloat(text.attr(\"dy\"))\r\n ;\r\n let tspan = text.text(null).append(\"tspan\")\r\n .attr(\"x\", x)\r\n .attr(\"y\", y)\r\n .attr(\"dy\", dy + \"em\")\r\n ;\r\n let wordsOnLine = 0;\r\n let word = words.pop();\r\n while (word) {\r\n line.push(word);\r\n tspan.text(line.join(\" \"));\r\n wordsOnLine++;\r\n if ((tspan.node() as any).getComputedTextLength() > bandSize && wordsOnLine >= minWordsPerLine) {\r\n line.pop();\r\n tspan.text(line.join(\" \"));\r\n line = [word];\r\n tspan = text.append(\"tspan\").attr(\"x\", x).attr(\"y\", y).attr(\"dy\", ++lineNumber * lineHeight + dy + \"em\").text(word);\r\n wordsOnLine = 0;\r\n }\r\n word = words.pop();\r\n }\r\n if (!context.isHorizontal()) {\r\n text.selectAll(\"tspan\")\r\n .attr(\"y\", (-lineNumber / 2) + \"em\")\r\n ;\r\n }\r\n });\r\n }\r\n\r\n linebreak(text, bandSize) {\r\n this.wrap(text, bandSize, \"\\n\");\r\n }\r\n\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n\r\n this.svg.style(\"display\", this.hidden() ? \"none\" : null);\r\n\r\n const overlap = this.calcOverflow(element);\r\n\r\n const lowerPos: number = this.isHorizontal() ? overlap.left : this.height() - overlap.top - overlap.bottom;\r\n const upperPos: number = this.isHorizontal() ? this.width() - overlap.right - this.padding() : 0 + this.padding();\r\n\r\n this.range(this.reverse() ? [upperPos, lowerPos] : [lowerPos, upperPos]);\r\n\r\n const context = this;\r\n function doPosition(element) {\r\n element.attr(\"transform\", function () {\r\n switch (context.orientation()) {\r\n case \"left\":\r\n return \"translate(\" + overlap.depth + \", \" + overlap.top + \")\";\r\n case \"top\":\r\n return \"translate(0,\" + overlap.depth + \")\";\r\n case \"right\":\r\n return \"translate(\" + (context.width() - overlap.depth) + \", \" + overlap.top + \")\";\r\n case \"bottom\":\r\n return \"translate(0,\" + (context.height() - overlap.depth) + \")\";\r\n default:\r\n }\r\n return \"translate(0,0)\";\r\n });\r\n }\r\n this.svg\r\n // .attr(\"class\", this.isHorizontal() ? \"x\" : \"y\")\r\n .style(\"visibility\", this.type() === \"none\" ? \"hidden\" : null)\r\n .transition()\r\n .call(doPosition)\r\n ;\r\n if (this._guideElement) {\r\n this.svgGuides\r\n .transition()\r\n .call(doPosition)\r\n ;\r\n }\r\n this.svgAxis\r\n .call(this.d3Axis)\r\n ;\r\n this.adjustText(this.svgAxis, overlap.tickOverlapModulus);\r\n\r\n const svgLineBBox = {\r\n x: this.pos().x,\r\n width: this.width()\r\n };\r\n const svgText = this.svgAxis.selectAll(\".axisTitle\").data(this.title() ? [this.title()] : []);\r\n const svgTextUpdate = svgText.enter().append(\"text\")\r\n .attr(\"class\", \"axisTitle\")\r\n .merge(svgText)\r\n ;\r\n const svgTitleTransition = svgTextUpdate.transition()\r\n .attr(\"dx\", null)\r\n .style(\"text-anchor\", \"end\")\r\n ;\r\n switch (this.orientation()) {\r\n case \"left\":\r\n svgTitleTransition\r\n .attr(\"transform\", \"rotate(-90)\")\r\n .attr(\"x\", -2)\r\n .attr(\"y\", 2)\r\n .attr(\"dy\", \".71em\")\r\n ;\r\n break;\r\n case \"right\":\r\n svgTitleTransition\r\n .attr(\"transform\", \"rotate(-90)\")\r\n .attr(\"x\", -2)\r\n .attr(\"y\", 4)\r\n .attr(\"dx\", null)\r\n .attr(\"dy\", \"-.71em\")\r\n ;\r\n break;\r\n case \"top\":\r\n svgTitleTransition\r\n .attr(\"transform\", \"rotate(0)\")\r\n .attr(\"x\", svgLineBBox.width - 2)\r\n .attr(\"y\", 2)\r\n .attr(\"dx\", null)\r\n .attr(\"dy\", \".71em\")\r\n ;\r\n break;\r\n case \"bottom\":\r\n svgTitleTransition\r\n .attr(\"transform\", \"rotate(0)\")\r\n .attr(\"x\", svgLineBBox.width - 2)\r\n .attr(\"y\", -2)\r\n .attr(\"dy\", null)\r\n ;\r\n break;\r\n default:\r\n }\r\n svgTitleTransition\r\n .text(this.title_exists() ? this.title() : \"\")\r\n ;\r\n svgText.exit().remove();\r\n this.svgGuides\r\n .call(this.d3Guides)\r\n .selectAll(\".tick\").classed(\"guide-0\", d => d === 0 && this.low() < 0)\r\n ;\r\n }\r\n\r\n rerender() {\r\n this.svgAxis.call(this.d3Axis);\r\n this.svgGuides.call(this.d3Guides);\r\n }\r\n\r\n postUpdate(domNode, element) {\r\n super.postUpdate(domNode, element);\r\n if (this._guideElement) {\r\n this._guideElement\r\n .attr(\"transform\", this._element.attr(\"transform\"))\r\n ;\r\n }\r\n }\r\n\r\n title: { (): string; (_: string): Axis; };\r\n orientation: { (): string; (_: string): Axis; };\r\n orientation_default: { (): string; (_: string): Axis; };\r\n powExponent: { (): number; (_: number): Axis; };\r\n logBase: { (): number; (_: number): Axis; };\r\n ordinals: { (): string[]; (_: string[]): Axis; };\r\n ordinals_exists: () => boolean;\r\n fontSize: { (): number; (_: number): Axis; };\r\n fontSize_exists: () => boolean;\r\n fontFamily: { (): string; (_: string): Axis; };\r\n tickCount: { (): number; (_: number): Axis; };\r\n tickFormat: { (): string; (_: string): Axis; };\r\n tickFormat_exists: () => boolean;\r\n tickLength: { (): number; (_: number): Axis; };\r\n tickLength_exists: () => boolean;\r\n ticks: { (): Array<{ value: string, label: string }>; (_: Array<{ value: string, label: string }>): Axis; };\r\n xAxisDomainLow: { (): string; (_: string): Axis; };\r\n xAxisDomainHigh: { (): string; (_: string): Axis; };\r\n low: { (): any; (_: any): Axis; };\r\n low_exists: () => boolean;\r\n high: { (): any; (_: any): Axis; };\r\n high_exists: () => boolean;\r\n overlapMode: { (): string; (_: string): Axis; };\r\n overlapMode_default: { (): string; (_: string): Axis; };\r\n labelRotation: { (): number; (_: number): Axis; };\r\n shrinkToFit: { (): string; (_: string): Axis; };\r\n shrinkToFit_default: { (): string; (_: string): Axis; };\r\n extend: { (): number; (_: number): Axis; };\r\n extend_default: { (): number; (_: number): Axis; };\r\n hidden: { (): boolean; (_: boolean): Axis; };\r\n}\r\nAxis.prototype._class += \" chart_Axis\";\r\n\r\nexport interface Axis {\r\n title_exists(): boolean;\r\n ordinalPaddingInner(): number;\r\n ordinalPaddingInner(_: number): this;\r\n ordinalPaddingOuter(): number;\r\n ordinalPaddingOuter(_: number): this;\r\n ordinalMappings(_: { [key: string]: string }): this;\r\n ordinalMappings(): { [key: string]: string };\r\n ordinalMappings_exists(): boolean;\r\n padding(): number;\r\n padding(_: number): this;\r\n}\r\n\r\nAxis.prototype.publish(\"title\", null, \"string\", \"Title\");\r\nAxis.prototype.publish(\"orientation\", \"bottom\", \"set\", \"Placement/orientation of the axis\", [\"left\", \"top\", \"right\", \"bottom\"]);\r\nAxis.prototype.publish(\"powExponent\", 2, \"number\", \"Power exponent (disabled when type is not 'pow')\", null, { disable: (w: any) => w.type() !== \"pow\" });\r\nAxis.prototype.publish(\"logBase\", 10, \"number\", \"Logarithmic base (disabled when type is not 'log')\", null, { disable: (w: any) => w.type() !== \"log\" });\r\nAxis.prototype.publish(\"ordinals\", [], \"array\", \"Array of ordinal values to display (disabled when type is not 'ordinal')\", null, { disable: (w: any) => w.type() !== \"ordinal\" });\r\nAxis.prototype.publish(\"fontSize\", null, \"number\", \"Size of tick label font (pixels)\", null, { optional: true });\r\nAxis.prototype.publish(\"fontFamily\", null, \"string\", \"Font family of tick labels\", null, { optional: true });\r\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\" });\r\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\" });\r\nAxis.prototype.publish(\"tickLength\", null, \"number\", \"Height (or width for left/right orientations) of the axis ticks (in pixels)\", null, { optional: true });\r\nAxis.prototype.publish(\"ticks\", [], \"array\", \"Custom tick labels\", null, { optional: true }); // TODO: What does this control?\r\nAxis.prototype.publish(\"low\", null, \"any\", \"Minimum tick value (disabled when type is ordinal)\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\r\nAxis.prototype.publish(\"high\", null, \"any\", \"Maximum tick value (disabled when type is ordinal)\", null, { optional: true, disable: (w: any) => w.type() === \"ordinal\" });\r\nAxis.prototype.publish(\"overlapMode\", \"none\", \"set\", \"Specifies the behavior when tick labels overlap\", [\"none\", \"stagger\", \"hide\", \"rotate\", \"linebreak\", \"wrap\"]);\r\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\" });\r\nAxis.prototype.publish(\"shrinkToFit\", \"both\", \"set\", \"shrinkToFit\", [\"none\", \"low\", \"high\", \"both\"]); // TODO: What does this control?\r\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\" });\r\nAxis.prototype.publish(\"hidden\", false, \"boolean\", \"Hides axis when 'true'\");\r\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\" });\r\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\" });\r\nAxis.prototype.publish(\"ordinalMappings\", null, \"object\", \"Alternative label mappings (icons)\", null, { optional: true });\r\nAxis.prototype.publish(\"padding\", 0, \"number\", \"Padding space at top of axis (pixels)\", null, { optional: true });\r\n","import { d3Event, select as d3Select, SVGWidget, Utility } from \"@hpcc-js/common\";\r\nimport { max as d3Max, min as d3Min } from \"d3-array\";\r\nimport { brush as d3Brush, brushSelection as d3BrushSelection, brushX as d3BrushX, brushY as d3BrushY } from \"d3-brush\";\r\nimport { hsl as d3Hsl } from \"d3-color\";\r\nimport { Axis } from \"./Axis\";\r\n\r\nimport \"../src/XYAxis.css\";\r\n\r\nexport class XYAxis extends SVGWidget {\r\n protected domainAxis: Axis;\r\n protected valueAxis: Axis;\r\n protected xAxis: Axis;\r\n protected yAxis: Axis;\r\n protected xyBrush;\r\n protected xBrush;\r\n protected yBrush;\r\n protected margin;\r\n protected focusChart: XYAxis;\r\n _palette;\r\n\r\n constructor() {\r\n super();\r\n Utility.SimpleSelectionMixin.call(this);\r\n\r\n this._drawStartPos = \"origin\";\r\n\r\n this.domainAxis = new Axis()\r\n .classed({ domain: true })\r\n .orientation_default(\"bottom\")\r\n .type(\"ordinal\")\r\n .overlapMode_default(\"stagger\")\r\n .shrinkToFit_default(\"high\")\r\n .extend_default(0)\r\n ;\r\n this.valueAxis = new Axis()\r\n .classed({ value: true })\r\n .orientation_default(\"left\")\r\n .type(\"linear\")\r\n .shrinkToFit_default(\"high\")\r\n ;\r\n\r\n this.xyBrush = d3Brush()\r\n .on(\"end\", () => {\r\n return this.brushMoved();\r\n })\r\n .on(\"start.handle brush.handle end.handle\", () => {\r\n return this.brushMoved2();\r\n })\r\n ;\r\n this.xBrush = d3BrushX()\r\n .on(\"end\", () => {\r\n return this.brushMoved();\r\n })\r\n .on(\"start.handle brush.handle end.handle\", () => {\r\n return this.brushMoved2();\r\n })\r\n ;\r\n this.yBrush = d3BrushY()\r\n .on(\"end\", () => {\r\n return this.brushMoved();\r\n })\r\n .on(\"start.handle brush.handle end.handle\", () => {\r\n return this.brushMoved2();\r\n })\r\n ;\r\n }\r\n\r\n protected _prevBrush;\r\n resetSelection() {\r\n this._prevBrush = null;\r\n return this;\r\n }\r\n\r\n parseData(d) {\r\n return this.domainAxis.parse(d);\r\n }\r\n\r\n parseValue(d) {\r\n return this.valueAxis.parse(d, true);\r\n }\r\n\r\n formatData(d) {\r\n return this.domainAxis.format(d);\r\n }\r\n\r\n formatValue(d) {\r\n return this.valueAxis.format(d);\r\n }\r\n\r\n parsedData() {\r\n const retVal = this.data().map(function (row) {\r\n let prevValue = 0;\r\n return row.map(function (cell, idx) {\r\n if (idx === 0) {\r\n return this.parseData(cell);\r\n }\r\n if (idx >= this.columns().length) {\r\n return cell;\r\n }\r\n const _retVal = this.yAxisStacked() ? [prevValue, prevValue + this.parseValue(cell)] : this.parseValue(cell);\r\n prevValue += this.parseValue(cell);\r\n return _retVal;\r\n }, this);\r\n }, this);\r\n return retVal;\r\n }\r\n\r\n bandwidth() {\r\n return this.domainAxis.bandwidth();\r\n }\r\n\r\n protected svg;\r\n protected svgRegions;\r\n protected svgDomainGuide;\r\n protected svgValueGuide;\r\n protected svgData;\r\n protected svgDataClipRect;\r\n protected svgFocus;\r\n protected svgBrush;\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this.svg = element.append(\"g\");\r\n this.svgRegions = element.append(\"g\");\r\n this.svgDomainGuide = this.svg.append(\"g\");\r\n this.svgValueGuide = this.svg.append(\"g\");\r\n this.svgData = this.svg.append(\"g\");\r\n\r\n this.svgDataClipRect = this.svg.append(\"clipPath\")\r\n .attr(\"id\", this.id() + \"_clippath\")\r\n .append(\"rect\")\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n ;\r\n this.svgData = this.svg.append(\"g\")\r\n .attr(\"clip-path\", \"url(#\" + this.id() + \"_clippath)\")\r\n ;\r\n this._selection.widgetElement(this.svgData);\r\n\r\n this.svgFocus = element.append(\"g\");\r\n\r\n this.domainAxis\r\n .target(this.svg.node())\r\n .guideTarget(this.svgDomainGuide.node())\r\n ;\r\n\r\n this.valueAxis\r\n .target(this.svg.node())\r\n .guideTarget(this.svgValueGuide.node())\r\n ;\r\n\r\n this.svgBrush = element.append(\"g\")\r\n .attr(\"class\", \"brush\")\r\n ;\r\n this.chartsEnter(this, this.svgData, 250);\r\n }\r\n\r\n resizeBrushHandle(d, width, height) {\r\n let e;\r\n let x;\r\n let y;\r\n if (d.type === \"e\" || d.type === \"w\") {\r\n e = +(d.type === \"e\");\r\n x = e ? 1 : -1;\r\n y = height / 3;\r\n return \"M\" + (0.5 * x) + \",\" + y +\r\n \"A6,6 0 0 \" + e + \" \" + (6.5 * x) + \",\" + (y + 6) +\r\n \"V\" + (2 * y - 6) +\r\n \"A6,6 0 0 \" + e + \" \" + (0.5 * x) + \",\" + (2 * y) +\r\n \"Z\" +\r\n \"M\" + (2.5 * x) + \",\" + (y + 8) +\r\n \"V\" + (2 * y - 8) +\r\n \"M\" + (4.5 * x) + \",\" + (y + 8) +\r\n \"V\" + (2 * y - 8);\r\n } else {\r\n e = +(d.type === \"s\");\r\n y = e ? 1 : -1;\r\n x = width / 3;\r\n return \"M\" + x + \", \" + (0.5 * y) +\r\n \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (x + 6) + \",\" + (6.5 * y) +\r\n \"H\" + (2 * x - 6) +\r\n \"A6,6 0 0 \" + (e + 1) % 2 + \" \" + (2 * x) + \",\" + (0.5 * y) +\r\n \"Z\" +\r\n \"M\" + (x + 8) + \",\" + (2.5 * y) +\r\n \"H\" + (2 * x - 8) +\r\n \"M\" + (x + 8) + \",\" + (4.5 * y) +\r\n \"H\" + (2 * x - 8);\r\n }\r\n }\r\n\r\n private _skipSelection = false;\r\n skipSelection(): boolean;\r\n skipSelection(_: boolean): this;\r\n skipSelection(_?: boolean): boolean | this {\r\n if (!arguments.length) return this._skipSelection;\r\n this._skipSelection = _;\r\n return this;\r\n }\r\n\r\n brushMoved() {\r\n if (this._skipSelection) return;\r\n let selected = [];\r\n const context = this;\r\n const currSel: any = d3BrushSelection(this.svgBrush.node());\r\n if (currSel) {\r\n selected = this.data().filter(function (d) {\r\n const pos = context.dataPos(d[0]);\r\n if (context.use2dSelection()) {\r\n const pos2 = context.valuePos(d[1]) + context.valueAxis.bandwidth() / 2;\r\n return pos >= currSel[0][0] && pos <= currSel[1][0] && pos2 >= currSel[0][1] && pos2 <= currSel[1][1];\r\n } else {\r\n return pos >= currSel[0] && pos <= currSel[1];\r\n }\r\n });\r\n }\r\n this.selection(selected);\r\n }\r\n\r\n brushMoved2() {\r\n const isHorizontal = this.orientation() === \"horizontal\";\r\n const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\r\n const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\r\n const s = d3Event().selection;\r\n if (s == null) {\r\n handlePath.attr(\"display\", \"none\");\r\n } else if (isHorizontal) {\r\n handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + s[i] + \",\" + 0 + \")\");\r\n } else {\r\n handlePath.attr(\"display\", null).attr(\"transform\", (_d, i) => \"translate(\" + 0 + \", \" + s[i] + \")\");\r\n }\r\n }\r\n\r\n dataPos(d) {\r\n return this.domainAxis.scalePos(d);\r\n }\r\n\r\n valuePos(d) {\r\n return this.valueAxis.scalePos(d);\r\n }\r\n\r\n getAxisSize(host: XYAxis): { width: number, height: number } {\r\n return {\r\n width: !this.xAxis ? host.xAxis.width() : this.xAxis.width(),\r\n height: !this.yAxis ? host.yAxis.width() : this.yAxis.height()\r\n };\r\n }\r\n\r\n calcMargin(_domNode, element, isHorizontal) {\r\n const margin = {\r\n top: !isHorizontal && this.selectionMode() ? 10 : 2,\r\n right: isHorizontal && (this.selectionMode() || this.xAxisFocus()) ? 10 : 2,\r\n bottom: (this.xAxisFocus() ? this.xAxisFocusHeight() : 0) + 2,\r\n left: 2\r\n };\r\n const width = this.width() - margin.left - margin.right;\r\n const height = this.height() - margin.top - margin.bottom;\r\n\r\n let xRight = 0;\r\n let xHeight = 30;\r\n let yTop = 0;\r\n let yWidth = 30;\r\n for (let i = 0; i < 10; ++i) {\r\n this.xAxis.width(width - yWidth).height(0);\r\n const xAxisOverlap = this.xAxis.calcOverflow(element);\r\n const newXHeight = xAxisOverlap.depth;\r\n\r\n this.yAxis.width(0).height(height - xHeight);\r\n const yAxisOverlap = this.yAxis.calcOverflow(element);\r\n const newYWidth = yAxisOverlap.depth;\r\n\r\n xRight = xAxisOverlap.right;\r\n yTop = yAxisOverlap.top;\r\n\r\n if (newXHeight === xHeight && newYWidth === yWidth) {\r\n break;\r\n }\r\n xHeight = newXHeight;\r\n yWidth = newYWidth;\r\n }\r\n this.xAxis\r\n .x(width / 2 + yWidth / 2 + margin.left)\r\n .y(height + margin.top)\r\n .width(width - yWidth)\r\n ;\r\n this.yAxis\r\n .x(margin.left)\r\n .y(height / 2 - xHeight / 2 + margin.top)\r\n .height(height - xHeight)\r\n ;\r\n margin.left += yWidth;\r\n margin.top += yTop;\r\n margin.right += xRight;\r\n margin.bottom += xHeight;\r\n return margin;\r\n }\r\n\r\n updateRegions(_domNode, _element, isHorizontal) {\r\n const context = this;\r\n\r\n const regions = this.svgRegions.selectAll(\".region\").data(this.regions());\r\n regions.enter().append(\"rect\")\r\n .attr(\"class\", \"region\")\r\n ;\r\n if (isHorizontal) {\r\n regions\r\n .attr(\"x\", function (d) { return context.dataPos(d.x0); })\r\n .attr(\"y\", 0)\r\n .attr(\"width\", function (d) { return context.dataPos(d.x1) - context.dataPos(d.x0); })\r\n .attr(\"height\", this.height())\r\n .style(\"stroke\", function (d) { return context._palette(d.colorID); })\r\n .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\r\n ;\r\n } else {\r\n regions\r\n .attr(\"x\", 0)\r\n .attr(\"y\", function (d) { return context.dataPos(d.x0); })\r\n .attr(\"width\", this.width())\r\n .attr(\"height\", function (d) { return context.dataPos(d.x0) - context.dataPos(d.x1); })\r\n .style(\"stroke\", function (d) { return context._palette(d.colorID); })\r\n .style(\"fill\", function (d) { return d3Hsl(context._palette(d.colorID)).brighter(); })\r\n ;\r\n }\r\n regions.exit().remove();\r\n }\r\n\r\n protected _prevXAxisType;\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n const context = this;\r\n\r\n const isHorizontal = this.orientation() === \"horizontal\";\r\n this.updateRegions(domNode, element, isHorizontal);\r\n\r\n this.domainAxis\r\n .orientation(isHorizontal ? \"bottom\" : \"left\")\r\n .title(this.xAxisTitle_exists() ? this.xAxisTitle() : this.columns()[0])\r\n ;\r\n this.valueAxis\r\n .orientation(isHorizontal ? \"left\" : \"bottom\")\r\n ;\r\n this.xAxis = isHorizontal ? this.domainAxis : this.valueAxis;\r\n this.yAxis = isHorizontal ? this.valueAxis : this.domainAxis;\r\n\r\n // Update Domain ---\r\n switch (this.xAxisType()) {\r\n case \"ordinal\":\r\n const colLen = this.columns().length;\r\n const ordinalMappings = {};\r\n this.domainAxis\r\n .ordinals(this.data().map(function (d) {\r\n ordinalMappings[d[0]] = context.xAxisOrdinalMapping(d, d[colLen]);\r\n return d[0];\r\n }))\r\n .ordinalMappings(ordinalMappings)\r\n ;\r\n\r\n break;\r\n default:\r\n const domainMin = this.xAxisDomainLow() ? this.xAxisDomainLow() : this.domainAxis.parseInvert(d3Min(this.parsedData(), function (data) {\r\n return data[0];\r\n }));\r\n const domainMax = this.xAxisDomainHigh() ? this.xAxisDomainHigh() : this.domainAxis.parseInvert(d3Max(this.parsedData(), function (data) {\r\n return data[0];\r\n }));\r\n if (domainMin !== undefined && domainMax !== undefined) {\r\n this.domainAxis\r\n .low(domainMin)\r\n .high(domainMax)\r\n ;\r\n }\r\n break;\r\n }\r\n\r\n const min = this.yAxisDomainLow() ? this.yAxisDomainLow() : this.valueAxis.parseInvert(d3Min(this.parsedData(), function (data: any[]) {\r\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; });\r\n }));\r\n const max = this.yAxisDomainHigh() ? this.yAxisDomainHigh() : this.valueAxis.parseInvert(d3Max(this.parsedData(), function (data: any[]) {\r\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; });\r\n }));\r\n this.valueAxis\r\n .low(min)\r\n .high(max)\r\n ;\r\n\r\n // Calculate Margins ---\r\n this.margin = this.calcMargin(domNode, element, isHorizontal);\r\n\r\n // Update Range ---\r\n let width = this.width() - this.margin.left - this.margin.right;\r\n if (width < 0) width = 0;\r\n let height = this.height() - this.margin.top - this.margin.bottom;\r\n if (height < 0) height = 0;\r\n const maxCurrExtent = isHorizontal ? width : height;\r\n const maxOtherExtent = isHorizontal ? height : width;\r\n\r\n // Render ---\r\n this.domainAxis\r\n .tickLength(this.xAxisGuideLines() ? maxOtherExtent : 0)\r\n .render()\r\n ;\r\n this.valueAxis\r\n .tickLength(this.yAxisGuideLines() ? maxCurrExtent : 0)\r\n .render()\r\n ;\r\n\r\n this.svgDataClipRect\r\n .attr(\"width\", width)\r\n .attr(\"height\", height)\r\n ;\r\n this.svgData.transition()\r\n .attr(\"transform\", \"translate(\" + this.margin.left + \",\" + this.margin.top + \")\")\r\n ;\r\n\r\n this.updateBrush(width, height, maxCurrExtent, isHorizontal);\r\n this.updateFocusChart(domNode, element, this.margin, width, height, isHorizontal);\r\n this.chartsUpdate(width, height, 250);\r\n if (this.selectionMode()) {\r\n return this.brushMoved();\r\n }\r\n }\r\n\r\n updateBrush(width, height, maxCurrExtent, isHorizontal) {\r\n const currBrush = this.use2dSelection() ? this.xyBrush : isHorizontal ? this.xBrush : this.yBrush;\r\n const prevBrushSel: any = d3BrushSelection(this.svgBrush.node());\r\n currBrush.extent([[0, 0], [width, height]]);\r\n this.svgBrush\r\n .attr(\"transform\", \"translate(\" + this.margin.left + \", \" + this.margin.top + \")\")\r\n .style(\"display\", this.selectionMode() ? null : \"none\")\r\n .call(currBrush)\r\n ;\r\n const handleTypes = this.use2dSelection() ? [] : isHorizontal ? [{ type: \"w\" }, { type: \"e\" }] : [{ type: \"n\" }, { type: \"s\" }];\r\n const handlePath = this.svgBrush.selectAll(\".handle--custom\").data(handleTypes);\r\n handlePath.enter().append(\"path\")\r\n .attr(\"class\", \"handle--custom\")\r\n .merge(handlePath)\r\n .attr(\"cursor\", isHorizontal ? \"ew-resize\" : \"ns-resize\")\r\n .attr(\"d\", (d) => this.resizeBrushHandle(d, width, height))\r\n ;\r\n\r\n if (this.selectionMode()) {\r\n if (this._prevXAxisType !== this.xAxisType()) {\r\n this._prevXAxisType = this.xAxisType();\r\n this._prevBrush = null;\r\n }\r\n if (this._prevBrush) {\r\n if (prevBrushSel) {\r\n if (this._prevBrush.orientation !== this.orientation()) {\r\n const tmp = prevBrushSel[0];\r\n prevBrushSel[0] = this._prevBrush.maxCurrExtent - prevBrushSel[1];\r\n prevBrushSel[1] = this._prevBrush.maxCurrExtent - tmp;\r\n }\r\n const ratio = maxCurrExtent / this._prevBrush.maxCurrExtent;\r\n if (ratio !== 1) {\r\n this.svgBrush.transition()\r\n .on(\"start\", function () {\r\n currBrush.on(\"end\", null);\r\n })\r\n .call(currBrush.move, [prevBrushSel[0] * ratio, prevBrushSel[1] * ratio])\r\n .on(\"end\", () => {\r\n currBrush.on(\"end\", () => {\r\n return this.brushMoved();\r\n });\r\n })\r\n ;\r\n }\r\n }\r\n } else {\r\n this.svgBrush\r\n .call(currBrush.move, [0, maxCurrExtent])\r\n ;\r\n }\r\n this._prevBrush = {\r\n orientation: this.orientation(),\r\n maxCurrExtent\r\n };\r\n }\r\n }\r\n\r\n updateFocusChart(domNode, element, margin, width, height, isHorizontal) {\r\n const context: XYAxis = this;\r\n const focusChart = this.svgFocus.selectAll(\"#\" + this.id() + \"_focusChart\").data(this.xAxisFocus() ? [true] : []);\r\n focusChart.enter().append(\"g\")\r\n .attr(\"id\", this.id() + \"_focusChart\")\r\n .attr(\"class\", \"focus\")\r\n .each(function () {\r\n context.focusChart = new (context.constructor as any)()\r\n .target(this)\r\n ;\r\n context.focusChart.xBrush\r\n .on(\"brush.focus\", function () {\r\n context.syncAxis(width);\r\n context.chartsUpdate(width, height, 0);\r\n })\r\n ;\r\n context.focusChart\r\n .layers(context.layers().map((w: any) => new w.constructor()))\r\n ;\r\n })\r\n .merge(focusChart)\r\n .each(function (this: SVGElement) {\r\n context.copyPropsTo(context.focusChart, [\"layers\"]);\r\n let layerIdx = 0;\r\n for (const layer of context.layers()) {\r\n layer.copyPropsTo(context.focusChart.layers()[layerIdx]);\r\n layerIdx++;\r\n }\r\n context.focusChart\r\n .xAxisFocus(false)\r\n .selectionMode(true)\r\n .skipSelection(true)\r\n .orientation(\"horizontal\")\r\n .xAxisGuideLines(false)\r\n .xAxisDomainLow(null)\r\n .xAxisDomainHigh(null)\r\n .yAxisGuideLines(false)\r\n .x(context.width() / 2)\r\n .y(context.height() - context.xAxisFocusHeight() / 2)\r\n .width(context.width())\r\n .height(context.xAxisFocusHeight())\r\n .columns(context.columns())\r\n .data(context.data())\r\n .render()\r\n ;\r\n context.syncAxis(width);\r\n })\r\n ;\r\n focusChart.exit()\r\n .each(function () {\r\n if (context.focusChart) {\r\n context.focusChart\r\n .target(null)\r\n ;\r\n delete context.focusChart;\r\n }\r\n })\r\n .remove()\r\n ;\r\n }\r\n\r\n syncAxis(width: number) {\r\n const currSel = d3BrushSelection(this.focusChart.svgBrush.node()) as [number, number];\r\n if (currSel) {\r\n if (this.focusChart.xAxisType() !== \"ordinal\") {\r\n this.xAxis.domain([this.focusChart.xAxis.invert(currSel[0]), this.focusChart.xAxis.invert(currSel[1])]);\r\n } else {\r\n const brushWidth = currSel[1] - currSel[0];\r\n const scale = brushWidth / width;\r\n this.xAxis.range([-currSel[0] / scale, (width - currSel[0]) / scale]);\r\n }\r\n this.xAxis.rerender();\r\n }\r\n }\r\n\r\n // Layers ---\r\n layerColumns(host: XYAxis): string[] {\r\n const masterColumns = host.columns();\r\n const retVal = super.columns().filter(col => col !== masterColumns[0]);\r\n if (!retVal.length) {\r\n return masterColumns;\r\n }\r\n return [masterColumns[0], ...retVal];\r\n }\r\n\r\n layerColumnIndices(host: XYAxis): number[] {\r\n const masterColumns = host.columns();\r\n const layerColumns = this.layerColumns(host);\r\n return layerColumns.map(col => masterColumns.indexOf(col));\r\n }\r\n\r\n layerColumnIndex(host: XYAxis, column: string): number {\r\n const masterColumns = host.columns();\r\n return masterColumns.indexOf(column);\r\n }\r\n\r\n layerData(host: XYAxis): any[][] {\r\n if (arguments.length === 1) {\r\n const indices = this.layerColumnIndices(host);\r\n return host.data().map(row => {\r\n const retVal = indices.map(idx => row[idx]);\r\n (retVal as any).__hpcc_origRow = row;\r\n return retVal;\r\n });\r\n }\r\n throw new Error(\"Setting data on XYAxisLayer is not supported.\");\r\n }\r\n\r\n layerEnter(host: XYAxis, element, duration: number = 250) {\r\n }\r\n\r\n layerUpdate(host: XYAxis, element, duration: number = 250) {\r\n }\r\n\r\n layerExit(host: XYAxis, element, duration: number = 250) {\r\n }\r\n\r\n chartsEnter(host: XYAxis, element, duration: number = 250) {\r\n this.layerEnter(this, element, duration);\r\n for (const w of this.layers()) {\r\n w[\"__xyAxisElement\"] = element.append(\"g\")\r\n .attr(\"class\", w.class())\r\n ;\r\n w\r\n .target(w[\"__xyAxisElement\"].node() as SVGElement)\r\n .layerEnter(this, element, duration)\r\n ;\r\n }\r\n }\r\n\r\n chartsUpdate(width, height, duration): void {\r\n this.layerUpdate(this, this.svgData, duration);\r\n for (const w of this.layers()) {\r\n w\r\n .resize({ width, height })\r\n .layerUpdate(this, w[\"__xyAxisElement\"], duration)\r\n ;\r\n }\r\n }\r\n\r\n exit(domNode, element) {\r\n this.valueAxis.target(null);\r\n this.domainAxis.target(null);\r\n super.exit(domNode, element);\r\n }\r\n\r\n selection(_selected) {\r\n const context = this;\r\n this._selection.widgetElement().selectAll(\".selected,.deselected\")\r\n .each(function (d) {\r\n const selected = _selected.indexOf(d.origRow) >= 0;\r\n d3Select(this)\r\n .classed(\"selected\", selected)\r\n .classed(\"deselected\", !selected)\r\n .attr(\"filter\", context._selection.svgGlowID() && selected ? `url(#${context._selection.svgGlowID()})` : null)\r\n ;\r\n })\r\n ;\r\n\r\n const selRows = _selected.map(d => {\r\n return this.rowToObj(d);\r\n });\r\n setTimeout(() => {\r\n this.click(selRows, \"\", true);\r\n }, 0);\r\n }\r\n\r\n // XYAxis ---\r\n xAxisOrdinalMapping(origRow, lparam) {\r\n return origRow[0];\r\n }\r\n\r\n // Events ---\r\n click(row, column, selected) {\r\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\r\n }\r\n\r\n // Selection ---\r\n _selection: Utility.SimpleSelection;\r\n}\r\nXYAxis.prototype._class += \" chart_XYAxis\";\r\nXYAxis.prototype.mixin(Utility.SimpleSelectionMixin);\r\n\r\nexport interface XYAxis {\r\n orientation(): \"horizontal\" | \"vertical\";\r\n orientation(_: \"horizontal\" | \"vertical\"): this;\r\n orientation_default(_: string);\r\n pointSizeColumn(): string;\r\n pointSizeColumn(_: string): this;\r\n pointSizeColumn_exists(): boolean;\r\n minPointSize(): number;\r\n minPointSize(_: number): this;\r\n maxPointSize(): number;\r\n maxPointSize(_: number): this;\r\n use2dSelection(): boolean;\r\n use2dSelection(_: boolean): this;\r\n selectionMode(): boolean;\r\n selectionMode(_: boolean): this;\r\n xAxisTitle(): string;\r\n xAxisTitle(_: string): this;\r\n xAxisTitle_exists(): boolean;\r\n xAxisTickCount(): number;\r\n xAxisTickCount(_: number): this;\r\n xAxisTickFormat(): string;\r\n xAxisTickFormat(_: string): this;\r\n xAxisTicks(): Array<{ value: string, label: string }>;\r\n xAxisTicks(_: Array<{ value: string, label: string }>): this;\r\n xAxisType(): \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\";\r\n xAxisType(_: \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\"): this;\r\n xAxisType_default(_: string);\r\n xAxisTypeTimePattern(): string;\r\n xAxisTypeTimePattern(_: string): this;\r\n xAxisDomainLow(): number | string;\r\n xAxisDomainLow(_: number | string): this;\r\n xAxisDomainHigh(): number | string;\r\n xAxisDomainHigh(_: number | string): this;\r\n xAxisFontSize(): number | string;\r\n xAxisFontSize(_: number | string): this;\r\n xAxisFontFamily(): string;\r\n xAxisFontFamily(_: string): this;\r\n xAxisOrdinalPaddingInner(): number;\r\n xAxisOrdinalPaddingInner(_: number): this;\r\n xAxisOrdinalPaddingOuter(): number;\r\n xAxisOrdinalPaddingOuter(_: number): this;\r\n xAxisOverlapMode(): \"none\" | \"stagger\" | \"hide\" | \"rotate\" | \"linebreak\" | \"wrap\";\r\n xAxisOverlapMode(_: \"none\" | \"stagger\" | \"hide\" | \"rotate\" | \"linebreak\" | \"wrap\"): this;\r\n xAxisLabelRotation(): number;\r\n xAxisLabelRotation(_: number): this;\r\n xAxisDomainPadding(): number;\r\n xAxisDomainPadding(_: number): this;\r\n xAxisGuideLines(): boolean;\r\n xAxisGuideLines(_: boolean): this;\r\n xAxisGuideLines_default(_: boolean);\r\n xAxisFocus(): boolean;\r\n xAxisFocus(_: boolean): this;\r\n xAxisFocusHeight(): number;\r\n xAxisFocusHeight(_: number): this;\r\n xAxisHidden(): boolean;\r\n xAxisHidden(_: boolean): this;\r\n xAxisHidden_default(_: boolean);\r\n yAxisTitle(): string;\r\n yAxisTitle(_: string): this;\r\n yAxisTickCount(): number;\r\n yAxisTickCount(_: number): this;\r\n yAxisTickFormat(): string;\r\n yAxisTickFormat(_: string): this;\r\n yAxisTicks(): Array<{ value: string, label: string }>;\r\n yAxisTicks(_: Array<{ value: string, label: string }>): this;\r\n yAxisType(): \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\";\r\n yAxisType(_: \"none\" | \"ordinal\" | \"linear\" | \"pow\" | \"log\" | \"time\"): this;\r\n yAxisType_default(_: string);\r\n yAxisTypeTimePattern(): string;\r\n yAxisTypeTimePattern(_: string): this;\r\n yAxisTypePowExponent(): number;\r\n yAxisTypePowExponent(_: number): this;\r\n yAxisTypeLogBase(): number;\r\n yAxisTypeLogBase(_: number): this;\r\n yAxisStacked(): boolean;\r\n yAxisStacked(_: boolean): this;\r\n yAxisDomainLow(): number | string;\r\n yAxisDomainLow(_: number | string): this;\r\n yAxisDomainHigh(): number | string;\r\n yAxisDomainHigh(_: number | string): this;\r\n yAxisDomainPadding(): number;\r\n yAxisDomainPadding(_: number): this;\r\n yAxisGuideLines(): boolean;\r\n yAxisGuideLines(_: boolean): this;\r\n yAxisGuideLines_default(_: boolean);\r\n yAxisHidden(): boolean;\r\n yAxisHidden(_: boolean): this;\r\n yAxisHidden_default(_: boolean);\r\n regions(): object[];\r\n regions(_: object[]): this;\r\n layers(): XYAxis[];\r\n layers(_: XYAxis[]): this;\r\n xAxisPadding(): number;\r\n xAxisPadding(_: number): this;\r\n yAxisPadding(): number;\r\n yAxisPadding(_: number): this;\r\n}\r\n\r\nXYAxis.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Selects orientation for the axis\", [\"horizontal\", \"vertical\"]);\r\nXYAxis.prototype.publish(\"pointSizeColumn\", null, \"string\", \"pointSizeColumn\", null, { optional: true });\r\nXYAxis.prototype.publish(\"minPointSize\", 6, \"number\", \"minPointSize\");\r\nXYAxis.prototype.publish(\"maxPointSize\", 26, \"number\", \"maxPointSize\");\r\nXYAxis.prototype.publish(\"use2dSelection\", false, \"boolean\", \"2D Range Selector\");\r\nXYAxis.prototype.publish(\"selectionMode\", false, \"boolean\", \"Range Selector\");\r\nXYAxis.prototype.publishProxy(\"xAxisTitle\", \"domainAxis\", \"title\");\r\nXYAxis.prototype.publishProxy(\"xAxisTickCount\", \"domainAxis\", \"tickCount\");\r\nXYAxis.prototype.publishProxy(\"xAxisTickFormat\", \"domainAxis\", \"tickFormat\");\r\nXYAxis.prototype.publishProxy(\"xAxisTicks\", \"domainAxis\", \"ticks\");\r\nXYAxis.prototype.publishProxy(\"xAxisType\", \"domainAxis\", \"type\");\r\nXYAxis.prototype.publishProxy(\"xAxisTypeTimePattern\", \"domainAxis\", \"timePattern\");\r\nXYAxis.prototype.publish(\"xAxisDomainLow\", null, \"string\", \"X-Axis Low\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\r\nXYAxis.prototype.publish(\"xAxisDomainHigh\", null, \"string\", \"X-Axis High\", null, { optional: true, disable: (w: XYAxis) => w.xAxisType() === \"ordinal\" });\r\nXYAxis.prototype.publishProxy(\"xAxisFontSize\", \"domainAxis\", \"fontSize\");\r\nXYAxis.prototype.publishProxy(\"xAxisFontFamily\", \"domainAxis\", \"fontFamily\");\r\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingInner\", \"domainAxis\", \"ordinalPaddingInner\");\r\nXYAxis.prototype.publishProxy(\"xAxisOrdinalPaddingOuter\", \"domainAxis\", \"ordinalPaddingOuter\");\r\nXYAxis.prototype.publishProxy(\"xAxisOverlapMode\", \"domainAxis\", \"overlapMode\");\r\nXYAxis.prototype.publishProxy(\"xAxisLabelRotation\", \"domainAxis\", \"labelRotation\");\r\nXYAxis.prototype.publishProxy(\"xAxisDomainPadding\", \"domainAxis\", \"extend\");\r\nXYAxis.prototype.publish(\"xAxisGuideLines\", false, \"boolean\", \"Y-Axis Guide Lines\");\r\nXYAxis.prototype.publish(\"xAxisFocus\", false, \"boolean\", \"X-Axis Focus\", null, { disable: (w: any) => w.orientation() !== \"horizontal\" });\r\nXYAxis.prototype.publish(\"xAxisFocusHeight\", 80, \"number\", \"X-Axis Focus Height\", null, { disable: (w: any) => !w.xAxisFocus() });\r\nXYAxis.prototype.publishProxy(\"xAxisHidden\", \"domainAxis\", \"hidden\");\r\nXYAxis.prototype.publishProxy(\"yAxisFontSize\", \"valueAxis\", \"fontSize\");\r\nXYAxis.prototype.publishProxy(\"yAxisFontFamily\", \"valueAxis\", \"fontFamily\");\r\nXYAxis.prototype.publishProxy(\"yAxisTitle\", \"valueAxis\", \"title\");\r\nXYAxis.prototype.publishProxy(\"yAxisTickCount\", \"valueAxis\", \"tickCount\");\r\nXYAxis.prototype.publishProxy(\"yAxisTickFormat\", \"valueAxis\", \"tickFormat\");\r\nXYAxis.prototype.publishProxy(\"yAxisTicks\", \"valueAxis\", \"ticks\");\r\nXYAxis.prototype.publishProxy(\"yAxisType\", \"valueAxis\", \"type\");\r\nXYAxis.prototype.publishProxy(\"yAxisTypeTimePattern\", \"valueAxis\", \"timePattern\");\r\nXYAxis.prototype.publishProxy(\"yAxisTypePowExponent\", \"valueAxis\", \"powExponent\");\r\nXYAxis.prototype.publishProxy(\"yAxisTypeLogBase\", \"valueAxis\", \"logBase\");\r\nXYAxis.prototype.publish(\"yAxisStacked\", false, \"boolean\", \"Stacked Chart\", null, { tags: [\"Basic\"], disable: (w: any) => w.xAxisType() !== \"ordinal\" || w._class.indexOf(\"chart_Column\") < 0 });\r\nXYAxis.prototype.publish(\"yAxisDomainLow\", null, \"string\", \"Y-Axis Low\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\r\nXYAxis.prototype.publish(\"yAxisDomainHigh\", null, \"string\", \"Y-Axis High\", null, { optional: true, disable: (w: any) => w.yAxisType() === \"ordinal\" });\r\nXYAxis.prototype.publishProxy(\"yAxisDomainPadding\", \"valueAxis\", \"extend\");\r\nXYAxis.prototype.publish(\"yAxisGuideLines\", true, \"boolean\", \"Y-Axis Guide Lines\");\r\nXYAxis.prototype.publishProxy(\"yAxisHidden\", \"valueAxis\", \"hidden\");\r\nXYAxis.prototype.publish(\"regions\", [], \"array\", \"Regions\");\r\nXYAxis.prototype.publish(\"layers\", [], \"widgetArray\", \"Layers\", null, { render: false });\r\nXYAxis.prototype.publishProxy(\"xAxisPadding\", \"domainAxis\", \"padding\");\r\nXYAxis.prototype.publishProxy(\"yAxisPadding\", \"valueAxis\", \"padding\");\r\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\r\nimport { InputField } from \"@hpcc-js/common\";\r\nimport { extent as d3Extent } from \"d3-array\";\r\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport {\r\n area as d3Area,\r\n curveBasis as d3CurveBasis, curveBundle as d3CurveBundle, curveCardinal as d3CurveCardinal, curveCatmullRom as d3curveCatmullRom, curveLinear as d3CurveLinear,\r\n curveMonotoneX as d3CurveMonotoneX, curveNatural as d3CurveNatural, curveStep as d3CurveStep, curveStepAfter as d3CurveStepAfter, curveStepBefore as d3CurveStepBefore,\r\n line as d3Line\r\n} from \"d3-shape\";\r\nimport { XYAxis } from \"./XYAxis\";\r\n\r\nimport \"../src/Scatter.css\";\r\n\r\nexport class Scatter extends XYAxis {\r\n static __inputs: InputField[] = [{\r\n id: \"label\",\r\n type: \"any\"\r\n }, {\r\n id: \"values\",\r\n type: \"number\",\r\n multi: true\r\n }];\r\n\r\n constructor() {\r\n super();\r\n INDChart.call(this);\r\n ITooltip.call(this);\r\n this\r\n .xAxisGuideLines_default(true)\r\n .yAxisGuideLines_default(true)\r\n ;\r\n }\r\n\r\n xPos(host: XYAxis, d) {\r\n return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\r\n }\r\n\r\n yPos(host: XYAxis, d) {\r\n return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\r\n }\r\n\r\n private curve(): any {\r\n switch (this.interpolate()) {\r\n case \"linear\":\r\n return d3CurveLinear;\r\n case \"step\":\r\n return d3CurveStep;\r\n case \"step-before\":\r\n return d3CurveStepBefore;\r\n case \"step-after\":\r\n return d3CurveStepAfter;\r\n case \"basis\":\r\n return d3CurveBasis;\r\n case \"bundle\":\r\n return d3CurveBundle;\r\n case \"cardinal\":\r\n return d3CurveCardinal;\r\n case \"catmullRom\":\r\n return d3curveCatmullRom;\r\n case \"natural\":\r\n return d3CurveNatural;\r\n case \"monotone\":\r\n default:\r\n return d3CurveMonotoneX;\r\n }\r\n }\r\n\r\n private getScale() {\r\n switch (this.pointSizeScale()) {\r\n case \"linear\":\r\n return d3ScaleLinear();\r\n case \"pow\":\r\n return d3ScalePow().exponent(2);\r\n case \"log\":\r\n return d3ScaleLog();\r\n case \"sqrt\":\r\n return d3ScaleSqrt();\r\n }\r\n }\r\n\r\n protected pointColor(row, col, value, origRow) {\r\n if (this.interpolate() && this.pointDarken()) {\r\n return this.strokeColor(row, col, value, origRow);\r\n }\r\n return this.fillColor(row, col, value, origRow);\r\n }\r\n\r\n protected lineColor(row, col, value, origRow) {\r\n if (this.interpolateFill() && this.interpolateDarken()) {\r\n return this.strokeColor(row, col, value, origRow);\r\n }\r\n return this.fillColor(row, col, value, origRow);\r\n }\r\n\r\n protected areaColor(row, col, value, origRow) {\r\n return this.fillColor(row, col, value, origRow);\r\n }\r\n\r\n layerEnter(host: XYAxis, element, duration: number = 250) {\r\n super.layerEnter(host, element, duration);\r\n const context = this;\r\n this\r\n .tooltipHTML(function (d) {\r\n switch (context.tooltipStyle()) {\r\n case \"series-table\":\r\n return context.tooltipFormat({\r\n label: d.label,\r\n arr: context.columns().slice(1).map(function (column, i) {\r\n return {\r\n label: column,\r\n color: context._palette(column),\r\n value: context.data()[d.rowIdx][i + 1]\r\n };\r\n })\r\n });\r\n default:\r\n return context.tooltipFormat({ label: d.label, series: d.column, value: d.value });\r\n }\r\n })\r\n ;\r\n }\r\n\r\n protected _prevPointShape;\r\n layerUpdate(host: XYAxis, element, duration: number = 250) {\r\n super.layerUpdate(host, element);\r\n const isHorizontal = host.orientation() === \"horizontal\";\r\n const height = isHorizontal ? this.height() : this.width();\r\n const context = this;\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n if (this.useClonedPalette()) {\r\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\r\n }\r\n\r\n if (this._prevPointShape !== this.pointShape()) {\r\n element.selectAll(\".data\").remove();\r\n this._prevPointShape = this.pointShape();\r\n }\r\n\r\n function mapShape(shape) {\r\n switch (shape) {\r\n case \"rectangle\":\r\n return \"rect\";\r\n case \"circle\":\r\n return \"circle\";\r\n case \"cross\":\r\n return \"path\";\r\n default:\r\n }\r\n }\r\n const usePointSizeColumn = this.pointSizeColumn_exists();\r\n let pointSizeColumnIdx;\r\n let extent;\r\n let scale;\r\n if (usePointSizeColumn) {\r\n pointSizeColumnIdx = this.columns().indexOf(this.pointSizeColumn());\r\n extent = d3Extent(this.data(), d => d[pointSizeColumnIdx]);\r\n scale = this.getScale().domain(extent);\r\n }\r\n const layerColumns = this.layerColumns(host);\r\n const layerData = this.layerData(host);\r\n const flatData = this.flattenData(layerColumns, layerData).map(function (d) {\r\n d.shape = mapShape(context.pointShape());\r\n d.column = layerColumns[d.colIdx];\r\n d.row = layerData[d.rowIdx];\r\n d.origRow = (layerData[d.rowIdx] as any).__hpcc_origRow;\r\n if (extent) {\r\n d.size = scale(d.row[pointSizeColumnIdx]) * (context.maxPointSize() - context.minPointSize()) + context.minPointSize();\r\n return d.column === context.pointSizeColumn() ? false : d;\r\n } else {\r\n d.size = context.pointSize();\r\n return d;\r\n }\r\n\r\n }).filter(d => d);\r\n\r\n const areas = element.selectAll(\".area\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && context.interpolateFill() && idx > 0; }));\r\n const areasEnter = areas.enter().append(\"path\");\r\n const area = d3Area()\r\n .curve(this.curve())\r\n ;\r\n if (isHorizontal) {\r\n area\r\n .x(function (d) { return context.xPos(host, d); })\r\n .y0(Math.min(height, this.yPos(host, { value: 0 })))\r\n .y1(function (d) { return context.yPos(host, d); })\r\n ;\r\n } else {\r\n area\r\n .y(function (d) { return context.yPos(host, d); })\r\n .x0(Math.max(0, this.xPos(host, { value: 0 })))\r\n .x1(function (d) { return context.xPos(host, d); })\r\n ;\r\n }\r\n areasEnter.merge(areas)\r\n .attr(\"class\", d => \"area series series-\" + this.cssTag(d))\r\n .each(function (_d, idx) {\r\n const element = d3Select(this);\r\n element\r\n .attr(\"d\", area(flatData.filter(function (d2) { return d2.colIdx === idx + 1; })))\r\n .style(\"opacity\", context.interpolateFillOpacity())\r\n .style(\"stroke\", \"none\")\r\n .style(\"fill\", context.areaColor([], _d, undefined, []))\r\n ;\r\n });\r\n areas.exit().remove();\r\n\r\n const lines = element.selectAll(\".line\").data(layerColumns.filter(function (_d, idx) { return context.interpolate() && idx > 0; }));\r\n const linesEnter = lines.enter().append(\"path\");\r\n const line = d3Line()\r\n .x(function (d) { return context.xPos(host, d); })\r\n .y(function (d) { return context.yPos(host, d); })\r\n .curve(this.curve())\r\n ;\r\n linesEnter.merge(lines)\r\n .attr(\"class\", d => \"line series series-\" + this.cssTag(d))\r\n .each(function (_d, idx) {\r\n const element = d3Select(this);\r\n const data2 = flatData.filter(function (d2) { return d2.colIdx === idx + 1; });\r\n element\r\n .attr(\"d\", line(data2))\r\n .style(\"stroke\", context.lineColor([], _d, undefined, []))\r\n .style(\"fill\", \"none\")\r\n ;\r\n });\r\n lines.exit().remove();\r\n\r\n const points = element.selectAll(\".point\").data(flatData, function (d, idx) { return d.shape + \"_\" + idx; });\r\n points.enter().append(\"g\")\r\n .each(function (this: SVGElement, d2) {\r\n const element = d3Select(this);\r\n element\r\n .append(d2.shape)\r\n .attr(\"class\", \"pointShape\")\r\n ;\r\n element\r\n .append(\"text\")\r\n .attr(\"class\", \"pointValue\")\r\n .style(\"display\", \"none\")\r\n .attr(\"text-anchor\", context.valueAnchor())\r\n .attr(\"alignment-baseline\", context.valueBaseline())\r\n .attr(\"fill\", function (d: any, _idx) {\r\n const useTextColor = context.valueBaseline() === \"middle\" || context.valueBaseline() === \"central\";\r\n return useTextColor ? context.textColor(d.row, d.column, d.value, d.origRow) : null;\r\n })\r\n ;\r\n element\r\n .append(\"circle\")\r\n .attr(\"class\", \"pointSelection\")\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n .call(host._selection.enter.bind(host._selection))\r\n .on(\"click\", function (d: any, _idx) {\r\n context.click(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d: any, _idx) {\r\n context.dblclick(host.rowToObj(host.data()[d.rowIdx]), d.column, host._selection.selected(this));\r\n })\r\n ;\r\n })\r\n .merge(points)\r\n .attr(\"class\", d => \"point series series-\" + this.cssTag(d.column))\r\n .each(function (this: SVGElement, d2) {\r\n const textSelection = d3Select(this).select(\".pointValue\");\r\n textSelection\r\n .attr(\"x\", function (d) { return context.xPos(host, d); })\r\n .attr(\"y\", function (d) { return context.yPos(host, d); })\r\n .style(\"display\", context.showValue() ? \"block\" : \"none\")\r\n .attr(\"text-anchor\", context.valueAnchor())\r\n .attr(\"alignment-baseline\", context.valueBaseline())\r\n .text(function (d) {\r\n return d[\"value\"];\r\n })\r\n ;\r\n const elementSelection = d3Select(this).select(\".pointSelection\");\r\n elementSelection\r\n .attr(\"cx\", function (d) { return context.xPos(host, d); })\r\n .attr(\"cy\", function (d) { return context.yPos(host, d); })\r\n .attr(\"r\", d2.size)\r\n ;\r\n\r\n const element = d3Select(this).select(\".pointShape\");\r\n switch (d2.shape) {\r\n case \"rect\":\r\n element\r\n .attr(\"x\", function (d) { return context.xPos(host, d) - d2.size / 2; })\r\n .attr(\"y\", function (d) { return context.yPos(host, d) - d2.size / 2; })\r\n .attr(\"width\", d2.size)\r\n .attr(\"height\", d2.size)\r\n .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\r\n ;\r\n break;\r\n case \"circle\":\r\n element\r\n .attr(\"cx\", function (d) { return context.xPos(host, d); })\r\n .attr(\"cy\", function (d) { return context.yPos(host, d); })\r\n .attr(\"r\", d2.size * 0.9)\r\n .style(\"fill\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\r\n ;\r\n break;\r\n case \"path\":\r\n element\r\n .attr(\"d\", function (d: any) {\r\n return \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2) + \" \" +\r\n \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\r\n \"M\" + (context.xPos(host, d) - d2.size / 2) + \" \" + (context.yPos(host, d) + d2.size / 2) + \" \" +\r\n \"L\" + (context.xPos(host, d) + d2.size / 2) + \" \" + (context.yPos(host, d) - d2.size / 2);\r\n })\r\n .style(\"stroke\", context.pointColor(d2.row, d2.column, d2.value, d2.origRow))\r\n ;\r\n break;\r\n default:\r\n }\r\n })\r\n ;\r\n points.exit().remove();\r\n }\r\n\r\n exit(domNode, element) {\r\n super.exit(domNode, element);\r\n }\r\n\r\n paletteID: { (): string; (_: string): Scatter; };\r\n useClonedPalette: { (): boolean; (_: boolean): Scatter; };\r\n pointSizeScale: { (): string; (_: string): Scatter; };\r\n pointShape: { (): string; (_: string): Scatter; };\r\n pointSize: { (): number; (_: number): Scatter; };\r\n interpolate: { (): string; (_: string): Scatter; };\r\n interpolate_default: { (): string; (_: string): Scatter; };\r\n interpolateFill: { (): boolean; (_: boolean): Scatter; };\r\n interpolateFill_default: { (): boolean; (_: boolean): Scatter; };\r\n interpolateFillOpacity: { (): number; (_: number): Scatter; };\r\n\r\n // INDChart\r\n _palette;\r\n fillColor: (row, column, value, origRow) => string;\r\n strokeColor: (row, column, value, origRow) => string;\r\n textColor: (row, column, value, origRow) => string;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n tooltipStyle: () => \"default\" | \"none\" | \"series-table\";\r\n}\r\nScatter.prototype._class += \" chart_Scatter\";\r\nScatter.prototype.implements(INDChart.prototype);\r\nScatter.prototype.implements(ITooltip.prototype);\r\nexport interface Scatter {\r\n valueAnchor(): string;\r\n valueAnchor(_: string): this;\r\n valueBaseline(): string;\r\n valueBaseline(_: string): this;\r\n showValue(): boolean;\r\n showValue(_: boolean): this;\r\n pointDarken(): boolean;\r\n pointDarken(_: boolean): this;\r\n interpolateDarken(): boolean;\r\n interpolateDarken(_: boolean): this;\r\n}\r\nScatter.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Scatter.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\r\nScatter.prototype.publish(\"pointSizeScale\", \"linear\", \"set\", \"pointSizeScale\", [\"linear\", \"pow\", \"log\", \"sqrt\"]);\r\nScatter.prototype.publish(\"pointShape\", \"cross\", \"set\", \"Shape of the data points\", [\"circle\", \"rectangle\", \"cross\"]);\r\nScatter.prototype.publish(\"pointSize\", 6, \"number\", \"Point Size\", null, { range: { min: 1, step: 1, max: 200 } });\r\nScatter.prototype.publish(\"interpolate\", \"\", \"set\", \"Interpolate Data\", [\"\", \"linear\", \"step\", \"step-before\", \"step-after\", \"basis\", \"bundle\", \"cardinal\", \"catmullRom\", \"natural\", \"monotone\"]);\r\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() });\r\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() });\r\nScatter.prototype.publish(\"interpolateFill\", false, \"boolean\", \"If true, the area between the line and zero will be filled\");\r\nScatter.prototype.publish(\"interpolateFillOpacity\", 0.66, \"number\", \"Fill interpolation Opacity\", null, { range: { min: 0, step: 0.01, max: 1 } });\r\nScatter.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\nScatter.prototype.publish(\"showValue\", false, \"boolean\");\r\nScatter.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\r\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\"]);\r\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\";\r\n\r\nexport class Area extends Scatter {\r\n constructor() {\r\n super();\r\n this\r\n .interpolate_default(\"linear\")\r\n .interpolateFill_default(true)\r\n ;\r\n }\r\n}\r\nArea.prototype._class += \" chart_Area\";\r\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\r\nimport { InputField, Text } from \"@hpcc-js/common\";\r\nimport { format as d3Format } from \"d3-format\";\r\nimport { scaleBand as d3ScaleBand } from \"d3-scale\";\r\nimport { local as d3Local, select as d3Select } from \"d3-selection\";\r\nimport { XYAxis } from \"./XYAxis\";\r\n\r\nimport \"../src/Column.css\";\r\n\r\nexport class Column extends XYAxis {\r\n static __inputs: InputField[] = [{\r\n id: \"label\",\r\n type: \"string\"\r\n }, {\r\n id: \"values\",\r\n type: \"number\",\r\n multi: true\r\n }];\r\n\r\n protected _linearGap: number;\r\n private textLocal = d3Local<Text>();\r\n private stackedTextLocal = d3Local<Text>();\r\n private isHorizontal: boolean;\r\n\r\n constructor() {\r\n super();\r\n INDChart.call(this);\r\n ITooltip.call(this);\r\n\r\n this._selection.skipBringToTop(true);\r\n\r\n this._linearGap = 25.0;\r\n }\r\n\r\n layerEnter(host: XYAxis, element, duration: number = 250) {\r\n super.layerEnter(host, element, duration);\r\n const context = this;\r\n this\r\n .tooltipHTML(function (d) {\r\n switch (context.tooltipStyle()) {\r\n case \"series-table\":\r\n return context.tooltipFormat({\r\n label: d.row[0],\r\n arr: context.columns().slice(1).map(function (column, i) {\r\n return {\r\n label: column,\r\n color: context._palette(column),\r\n value: d.row[i + 1]\r\n };\r\n })\r\n });\r\n default:\r\n let value = d.row[d.idx];\r\n if (value instanceof Array) {\r\n value = value[1] - value[0];\r\n }\r\n return context.tooltipFormat({ label: d.row[0], series: context.layerColumns(host)[d.idx], value });\r\n }\r\n })\r\n ;\r\n }\r\n\r\n adjustedData(host: XYAxis) {\r\n const retVal = this.layerData(host).map(row => {\r\n let prevValue = 0;\r\n return row.map((cell, idx) => {\r\n if (idx === 0) {\r\n return cell;\r\n }\r\n if (idx >= this.layerColumns(host).length) {\r\n return cell;\r\n }\r\n const retVal2 = host.yAxisStacked() ? [prevValue, prevValue + cell] : cell;\r\n prevValue += cell;\r\n return retVal2;\r\n }, this);\r\n }, this);\r\n return retVal;\r\n }\r\n\r\n layerUpdate(host: XYAxis, element, duration: number = 250) {\r\n super.layerUpdate(host, element, duration);\r\n const isHorizontal = host.orientation() === \"horizontal\";\r\n this.isHorizontal = isHorizontal;\r\n const context = this;\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n if (this.useClonedPalette()) {\r\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\r\n }\r\n const formatPct = d3Format(context.showValueAsPercentFormat());\r\n\r\n let dataLen = 10;\r\n let offset = 0;\r\n switch (host.xAxisType()) {\r\n case \"ordinal\":\r\n dataLen = host.bandwidth();\r\n offset = -dataLen / 2;\r\n break;\r\n case \"linear\":\r\n case \"time\":\r\n dataLen = Math.max(Math.abs(host.dataPos(2) - host.dataPos(1)) * (100 - this._linearGap) / 100, dataLen);\r\n offset = -dataLen / 2;\r\n break;\r\n default:\r\n }\r\n\r\n this.tooltip.direction(isHorizontal ? \"n\" : \"e\");\r\n\r\n const columnScale = d3ScaleBand()\r\n .domain(context.layerColumns(host).filter(function (_d, idx) { return idx > 0; }))\r\n .rangeRound(isHorizontal ? [0, dataLen] : [dataLen, 0])\r\n .paddingInner(this.xAxisSeriesPaddingInner())\r\n .paddingOuter(0)\r\n ;\r\n let domainSums = [];\r\n const seriesSums = [];\r\n const columnLength = this.columns().length;\r\n const rowData = this.data();\r\n if (this.showValue() && this.showValueAsPercent() === \"series\") {\r\n rowData.forEach((row) => {\r\n row.filter((_, idx) => idx > 0 && idx < columnLength).forEach((col, idx) => {\r\n if (seriesSums[idx + 1] === undefined) {\r\n seriesSums[idx + 1] = 0;\r\n }\r\n seriesSums[idx + 1] += col;\r\n });\r\n });\r\n }\r\n\r\n if (this.showDomainTotal() || (this.showValue() && this.showValueAsPercent() === \"domain\")) {\r\n domainSums = rowData.map(row => {\r\n return row.filter((cell, idx) => idx > 0 && idx < columnLength).reduce((sum, cell) => {\r\n return sum + cell;\r\n }, 0);\r\n });\r\n }\r\n\r\n const column = element.selectAll(\".dataRow\")\r\n .data(this.adjustedData(host))\r\n ;\r\n const hostData = host.data();\r\n const axisSize = this.getAxisSize(host);\r\n column.enter().append(\"g\")\r\n .attr(\"class\", \"dataRow\")\r\n .merge(column)\r\n .each(function (dataRow, dataRowIdx) {\r\n const element = d3Select(this);\r\n\r\n const columnGRect = element.selectAll(\".dataCell\").data(dataRow.filter(function (_d, i) { return i < context.layerColumns(host).length; }).map(function (d, i) {\r\n return {\r\n column: context.layerColumns(host)[i],\r\n row: dataRow,\r\n origRow: hostData[dataRowIdx],\r\n value: d,\r\n idx: i\r\n };\r\n }).filter(function (d) { return d.value !== null && d.idx > 0; }), (d: any) => d.column);\r\n\r\n const columnGEnter = columnGRect\r\n .enter().append(\"g\")\r\n .attr(\"class\", \"dataCell\")\r\n .on(\"mouseout.tooltip\", function (d: any) {\r\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\r\n context.tooltip.hide.apply(context, arguments);\r\n }\r\n })\r\n .on(\"mousemove.tooltip\", function (d: any) {\r\n if (!context.tooltipInnerTextEllipsedOnly() || (d.innerTextObj && d.innerTextObj.isTruncated)) {\r\n context.tooltip.show.apply(context, arguments);\r\n }\r\n })\r\n .call(host._selection.enter.bind(host._selection))\r\n .on(\"click\", function (d: any) {\r\n context.click(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d: any) {\r\n context.dblclick(host.rowToObj(d.origRow), d.column, host._selection.selected(this));\r\n })\r\n .style(\"opacity\", 0)\r\n .each(function (this: SVGElement, d: any) {\r\n const element = d3Select(this);\r\n element.append(\"rect\")\r\n .attr(\"class\", \"columnRect series series-\" + context.cssTag(d.column))\r\n ;\r\n element.append(\"text\")\r\n .attr(\"class\", \"columnRectText\")\r\n .style(\"stroke\", \"transparent\")\r\n ;\r\n })\r\n ;\r\n columnGEnter.transition().duration(duration)\r\n .style(\"opacity\", 1)\r\n ;\r\n const domainLength = host.yAxisStacked() ? dataLen : columnScale.bandwidth();\r\n columnGEnter.merge(columnGRect as any).each(function (this: SVGElement, d: any) {\r\n const element = d3Select(this);\r\n const domainPos = host.dataPos(dataRow[0]) + (host.yAxisStacked() ? 0 : columnScale(d.column)) + offset;\r\n const upperValue = d.value instanceof Array ? d.value[1] : d.value;\r\n let valueText = d.origRow[d.idx];\r\n if (context.showValue()) {\r\n const dm = context.dataMeta();\r\n switch (context.showValueAsPercent()) {\r\n case \"series\":\r\n const seriesSum = typeof dm.sum !== \"undefined\" ? dm.sum : seriesSums[d.idx];\r\n valueText = formatPct(valueText / seriesSum);\r\n break;\r\n case \"domain\":\r\n const domainSum = typeof dm.sum !== \"undefined\" ? dm.sum : domainSums[dataRowIdx];\r\n valueText = formatPct(valueText / domainSum);\r\n break;\r\n case null:\r\n default:\r\n valueText = d3Format(context.showValueFormat())(valueText);\r\n break;\r\n }\r\n }\r\n const upperValuePos = host.valuePos(upperValue);\r\n const lowerValuePos = host.valuePos(d.value instanceof Array ? d.value[0] : 0);\r\n const valuePos = Math.min(lowerValuePos, upperValuePos);\r\n const valueLength = Math.abs(upperValuePos - lowerValuePos);\r\n\r\n const innerTextHeight = context.innerTextFontSize();\r\n const innerTextPadding = context.innerTextPadding_exists() ? context.innerTextPadding() : innerTextHeight / 2.5;\r\n\r\n const dataRect = context.intersectRectRect(\r\n {\r\n x: isHorizontal ? domainPos : valuePos,\r\n y: isHorizontal ? valuePos : domainPos,\r\n width: isHorizontal ? domainLength : valueLength,\r\n height: isHorizontal ? valueLength : domainLength\r\n },\r\n {\r\n x: 0,\r\n y: 0,\r\n width: axisSize.width,\r\n height: axisSize.height\r\n }\r\n );\r\n\r\n const _rects = element.select(\"rect\").transition().duration(duration)\r\n .style(\"fill\", (d: any) => context.fillColor(d.row, d.column, d.value, d.origRow))\r\n ;\r\n\r\n if (isHorizontal) {\r\n _rects\r\n .attr(\"x\", domainPos)\r\n .attr(\"y\", valuePos)\r\n .attr(\"width\", domainLength)\r\n .attr(\"height\", valueLength)\r\n ;\r\n } else {\r\n _rects\r\n .attr(\"y\", domainPos)\r\n .attr(\"x\", valuePos)\r\n .attr(\"height\", domainLength)\r\n .attr(\"width\", valueLength)\r\n ;\r\n }\r\n const _texts = element.select(\"text\").transition().duration(duration)\r\n .style(\"font-size\", innerTextHeight + \"px\")\r\n .style(\"fill\", (d: any) => context.textColor(d.row, d.column, d.value, d.origRow))\r\n ;\r\n\r\n _texts.style(\"font-family\", context.innerTextFontFamily_exists() ? context.innerTextFontFamily() : null);\r\n\r\n const padding = context.innerTextPadding_exists() ? context.innerTextPadding() : 8;\r\n\r\n const textHeightOffset = innerTextHeight / 2.7;\r\n\r\n if (isHorizontal) { // Column\r\n const y = dataRect.y + dataRect.height - innerTextPadding;\r\n _texts\r\n .attr(\"x\", domainPos + (domainLength / 2))\r\n .attr(\"y\", y + textHeightOffset)\r\n .attr(\"transform\", `rotate(-90, ${domainPos + (domainLength / 2)}, ${y})`)\r\n ;\r\n } else { // Bar\r\n _texts\r\n .attr(\"x\", dataRect.x + padding)\r\n .attr(\"y\", domainPos + (domainLength / 2) + textHeightOffset)\r\n ;\r\n }\r\n _texts\r\n .attr(\"height\", domainLength)\r\n .attr(\"width\", valueLength)\r\n ;\r\n if (context.showInnerText()) {\r\n _texts\r\n .text((d: any) => {\r\n const innerText = context.innerText(d.origRow, d.origRow[columnLength], d.idx);\r\n if (innerText) {\r\n const clippedValueLength = isHorizontal ? dataRect.height : dataRect.width;\r\n const innerTextObj = context.calcInnerText(clippedValueLength, innerText, valueText);\r\n d.innerTextObj = innerTextObj;\r\n\r\n return innerTextObj.text;\r\n }\r\n return \"\";\r\n })\r\n ;\r\n }\r\n const dataText = element.selectAll(\".dataText\").data(context.showValue() ? [`${upperValue}`] : []);\r\n const dataTextEnter = dataText.enter().append(\"g\")\r\n .attr(\"class\", \"dataText\")\r\n .each(function (this: SVGElement, d) {\r\n context.textLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\r\n });\r\n dataTextEnter.merge(dataText as any)\r\n .each(function (this: SVGElement) {\r\n const pos = { x: 0, y: 0 };\r\n const valueFontFamily = context.valueFontFamily();\r\n const valueFontSize = context.valueFontSize();\r\n const textSize = context.textSize(valueText, valueFontFamily, valueFontSize);\r\n\r\n const isPositive = parseFloat(valueText) >= 0;\r\n\r\n let valueAnchor = context.valueAnchor() ? context.valueAnchor() : isHorizontal ? \"middle\" : \"start\";\r\n\r\n const leftSpace = dataRect.x;\r\n const rightSpace = axisSize.width - (dataRect.x + dataRect.width);\r\n const topSpace = dataRect.y;\r\n const bottomSpace = axisSize.height - (dataRect.y + dataRect.height);\r\n\r\n let noRoomInside;\r\n let isOutside;\r\n let noRoomOnExpectedSide;\r\n\r\n if (d.innerTextObj) {\r\n const { padding, valueTextWidth } = d.innerTextObj;\r\n isOutside = false;\r\n if (isHorizontal) { // Column\r\n valueAnchor = \"middle\";\r\n pos.x = domainPos + (domainLength / 2);\r\n\r\n if (d.innerTextObj.category === 4) {\r\n isOutside = true;\r\n pos.y = valuePos - padding - (valueFontSize / 2);\r\n } else {\r\n pos.y = valuePos + padding + (valueFontSize / 2);\r\n }\r\n } else { // Bar\r\n valueAnchor = \"start\";\r\n if (d.innerTextObj.category === 4) {\r\n isOutside = true;\r\n pos.x = (valueLength + valuePos) + padding;\r\n } else {\r\n pos.x = (valueLength + valuePos) - valueTextWidth - padding;\r\n }\r\n pos.y = domainPos + (domainLength / 2);\r\n }\r\n } else {\r\n /*\r\n IF this.valueCentered() and NO ROOM INSIDE\r\n ...then ASSUME THERES ROOM OUTSIDE\r\n IF NO ROOM OUTSIDE ON EXPECTED SIDE\r\n ...then ASSUME THERES ROOM ON THE OPPOSITE SIDE\r\n */\r\n if (isHorizontal) { // Column\r\n noRoomInside = dataRect.height < textSize.height;\r\n isOutside = !context.valueCentered() || noRoomInside;\r\n\r\n pos.x = dataRect.x + (dataRect.width / 2);\r\n\r\n if (isOutside) {\r\n if (isPositive) {\r\n noRoomOnExpectedSide = topSpace < textSize.height + padding;\r\n if (noRoomOnExpectedSide) {\r\n if (!noRoomInside) {\r\n isOutside = false;\r\n pos.y = dataRect.y + (dataRect.height / 2);\r\n } else {\r\n pos.y = dataRect.y + dataRect.height + textSize.height;\r\n }\r\n } else {\r\n pos.y = dataRect.y - (textSize.height / 2) - padding;\r\n }\r\n } else {\r\n noRoomOnExpectedSide = bottomSpace < textSize.height;\r\n if (noRoomOnExpectedSide) {\r\n if (!noRoomInside) {\r\n isOutside = false;\r\n pos.y = dataRect.y + (dataRect.height / 2);\r\n } else {\r\n pos.y = dataRect.y - (textSize.height / 2) - padding;\r\n }\r\n } else {\r\n pos.y = dataRect.y + textSize.height + padding;\r\n }\r\n }\r\n } else {\r\n pos.y = dataRect.y + (dataRect.height / 2);\r\n }\r\n } else { // Bar\r\n noRoomInside = dataRect.width < textSize.width;\r\n isOutside = !context.valueCentered() || noRoomInside;\r\n\r\n pos.y = dataRect.y + (dataRect.height / 2);\r\n\r\n if (isOutside) {\r\n if (isPositive) {\r\n noRoomOnExpectedSide = rightSpace < textSize.width + padding;\r\n if (noRoomOnExpectedSide) {\r\n if (context.showInnerText() || !noRoomInside) {\r\n isOutside = false;\r\n pos.x = dataRect.x + (dataRect.width / 2);\r\n } else {\r\n pos.x = dataRect.x - (textSize.width - padding);\r\n }\r\n } else {\r\n pos.x = dataRect.x + dataRect.width + (textSize.width / 2) + padding;\r\n }\r\n } else {\r\n noRoomOnExpectedSide = leftSpace < textSize.width;\r\n if (noRoomOnExpectedSide) {\r\n if (context.showInnerText() || !noRoomInside) {\r\n isOutside = false;\r\n pos.x = dataRect.x + (dataRect.width / 2);\r\n } else {\r\n pos.x = dataRect.x + dataRect.width + (textSize.width - padding);\r\n }\r\n } else {\r\n pos.x = dataRect.x - (textSize.width - padding);\r\n }\r\n }\r\n } else {\r\n pos.x = dataRect.x + (dataRect.width / 2);\r\n }\r\n }\r\n }\r\n const textColor = isOutside ? null : context.textColor(d.row, d.column, d.value, d.origRow);\r\n\r\n // Prevent overlapping labels on stacked columns\r\n const columns = context.columns();\r\n const hideValue = (context.yAxisStacked() && noRoomInside) ||\r\n (isOutside && context.yAxisStacked() && columns.indexOf(d.column) !== columns.length - 1);\r\n context.textLocal.get(this)\r\n .pos(pos)\r\n .anchor(valueAnchor)\r\n .fontFamily(valueFontFamily)\r\n .fontSize(valueFontSize)\r\n .text(`${valueText}`)\r\n .colorFill(textColor)\r\n .visible(context.showValue() && !hideValue)\r\n .render()\r\n ;\r\n\r\n });\r\n dataText.exit()\r\n .each(function (this: SVGElement, d) {\r\n context.textLocal.get(this).target(null);\r\n })\r\n .remove()\r\n ;\r\n });\r\n columnGRect.exit().transition().duration(duration)\r\n .style(\"opacity\", 0)\r\n .remove()\r\n ;\r\n\r\n const value4pos = host.yAxisStacked() ? domainSums[dataRowIdx] : Math.max(...dataRow.filter((_, idx) => idx > 0 && idx < columnLength));\r\n const stackedTotalText = element.selectAll(\".stackedTotalText\").data(context.showDomainTotal() ? [domainSums[dataRowIdx]] : []);\r\n const stackedTotalTextEnter = stackedTotalText.enter().append(\"g\")\r\n .attr(\"class\", \"stackedTotalText\")\r\n .each(function (this: SVGElement, d) {\r\n context.stackedTextLocal.set(this, new Text().target(this).colorStroke_default(\"transparent\"));\r\n });\r\n stackedTotalTextEnter.merge(stackedTotalText as any)\r\n .each(function (this: SVGElement, d: any) {\r\n const pos = { x: 0, y: 0 };\r\n const domainPos = host.dataPos(dataRow[0]);\r\n const valuePos = host.valuePos(value4pos);\r\n\r\n const valueFontFamily = context.valueFontFamily();\r\n const valueFontSize = context.valueFontSize();\r\n const textSize = context.textSize(d, valueFontFamily, valueFontSize);\r\n\r\n const isPositive = parseFloat(d) >= 0;\r\n let valueAnchor: \"start\" | \"middle\" | \"end\" = \"middle\";\r\n if (isHorizontal) {\r\n pos.x = domainPos;\r\n if (isPositive) {\r\n pos.y = valuePos - textSize.height / 2;\r\n } else {\r\n pos.y = valuePos + textSize.height / 2;\r\n }\r\n } else {\r\n valueAnchor = \"start\";\r\n pos.y = domainPos;\r\n if (isPositive) {\r\n pos.x = valuePos + textSize.width / 2;\r\n } else {\r\n pos.x = valuePos - textSize.width / 2;\r\n }\r\n }\r\n\r\n context.stackedTextLocal.get(this)\r\n .pos(pos)\r\n .anchor(valueAnchor)\r\n .fontFamily(valueFontFamily)\r\n .fontSize(valueFontSize)\r\n .text(d)\r\n .render()\r\n ;\r\n\r\n });\r\n stackedTotalText.exit()\r\n .each(function (this: SVGElement, d) {\r\n context.textLocal.get(this).target(null);\r\n })\r\n .remove()\r\n ;\r\n });\r\n column.exit().transition().duration(duration)\r\n .remove()\r\n ;\r\n }\r\n\r\n calcInnerText(offset, innerText, valueText) {\r\n\r\n const fontFamily = this.innerTextFontFamily_exists() ? this.innerTextFontFamily() : \"Verdana\";\r\n const fontSize = this.innerTextFontSize();\r\n const valueFontFamily = this.valueFontFamily_exists() ? this.valueFontFamily() : \"Verdana\";\r\n const valueFontSize = this.valueFontSize();\r\n const padding = this.innerTextPadding_exists() ? this.innerTextPadding() : fontSize / 2.5;\r\n const valueTextWidth = this.isHorizontal ? valueFontSize : this.textSize(valueText, valueFontFamily, valueFontSize).width;\r\n const ellipsisWidth = this.textSize(\"...\", fontFamily, fontSize).width;\r\n const innerTextWidth = this.textSize(innerText, fontFamily, fontSize).width;\r\n const origInnerText = innerText;\r\n\r\n const fullWidth = (padding * 3) + innerTextWidth + valueTextWidth;\r\n const fullWidth2 = (padding * 3) + ellipsisWidth + valueTextWidth;\r\n const fullWidth3 = (padding * 1) + valueTextWidth;\r\n /*\r\n Categories:\r\n 1) room to display inner text (with padding) AND value text (with padding)\r\n 2) room to display ellipsis (with padding) AND value text (with padding)\r\n 3) room to display value text only (with padding)\r\n 4) no room to display any text except value on the outside\r\n */\r\n let category = 4;\r\n if (fullWidth < offset) {\r\n category = 1;\r\n } else if (fullWidth2 < offset) {\r\n const excessWidth = offset - fullWidth2;\r\n let _text = \"\";\r\n for (const letter of innerText) {\r\n if (this.textSize(_text + letter, fontFamily, fontSize).width > excessWidth) {\r\n innerText = _text + \"...\";\r\n break;\r\n } else {\r\n _text += letter;\r\n }\r\n }\r\n category = 2;\r\n } else if (fullWidth3 < offset) {\r\n innerText = \"\";\r\n category = 3;\r\n } else {\r\n innerText = \"\";\r\n }\r\n\r\n return {\r\n text: innerText,\r\n isTruncated: origInnerText !== innerText,\r\n padding,\r\n category,\r\n valueTextWidth\r\n };\r\n }\r\n\r\n innerText(origRow, lparam, idx): string {\r\n return origRow[0];\r\n }\r\n\r\n // INDChart ---\r\n _palette;\r\n fillColor: (row, column, value, origRow) => string;\r\n textColor: (row, column, value, origRow) => string;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip ---\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n tooltipStyle: () => \"default\" | \"none\" | \"series-table\";\r\n}\r\nColumn.prototype._class += \" chart_Column\";\r\nColumn.prototype.implements(INDChart.prototype);\r\nColumn.prototype.implements(ITooltip.prototype);\r\n\r\nexport interface Column {\r\n paletteID(): string;\r\n paletteID(_: string): this;\r\n useClonedPalette(): boolean;\r\n useClonedPalette(_: boolean): this;\r\n showValue(): boolean;\r\n showValue(_: boolean): this;\r\n showInnerText(): boolean;\r\n showInnerText(_: boolean): this;\r\n showValueFormat(): string;\r\n showValueFormat(_: string): this;\r\n showValueAsPercent(): null | \"series\" | \"domain\";\r\n showValueAsPercent(_: null | \"series\" | \"domain\"): this;\r\n showValueAsPercentFormat(): string;\r\n showValueAsPercentFormat(_: string): this;\r\n showDomainTotal(): boolean;\r\n showDomainTotal(_: boolean): this;\r\n valueCentered(): boolean;\r\n valueCentered(_: boolean): this;\r\n valueAnchor(): \"start\" | \"middle\" | \"end\";\r\n valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\r\n valueFontFamily(): string;\r\n valueFontFamily(_: string): this;\r\n valueFontFamily_exists(): boolean;\r\n valueFontSize(): number;\r\n valueFontSize(_: number): this;\r\n xAxisSeriesPaddingInner(): number;\r\n xAxisSeriesPaddingInner(_: number): this;\r\n innerTextFontFamily(): string;\r\n innerTextFontFamily(_: string): this;\r\n innerTextFontFamily_exists(): boolean;\r\n innerTextFontSize(): number;\r\n innerTextFontSize(_: number): this;\r\n innerTextPadding(): number;\r\n innerTextPadding(_: number): this;\r\n innerTextPadding_exists(): boolean;\r\n tooltipInnerTextEllipsedOnly(): boolean;\r\n tooltipInnerTextEllipsedOnly(_: boolean): this;\r\n}\r\n\r\nColumn.prototype.publish(\"valueFontFamily\", null, \"string\", \"Font family of value text\", null, { optional: true });\r\nColumn.prototype.publish(\"valueFontSize\", 12, \"number\", \"Height of value text (pixels)\");\r\nColumn.prototype.publish(\"innerTextFontFamily\", null, \"string\", \"Font family of inner text\", null, { optional: true });\r\nColumn.prototype.publish(\"innerTextPadding\", 8, \"number\", \"Offset of inner text (pixels)\", null, { optional: true });\r\nColumn.prototype.publish(\"innerTextFontSize\", 12, \"number\", \"Height of inner text (pixels)\");\r\nColumn.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", () => Column.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\r\nColumn.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\nColumn.prototype.publish(\"showValue\", false, \"boolean\", \"Show Value in column\");\r\nColumn.prototype.publish(\"showInnerText\", false, \"boolean\", \"Show Label in column\");\r\nColumn.prototype.publish(\"showValueFormat\", \",\", \"string\", \"D3 Format for Value\", null, { disable: (w: Column) => !w.showValue() || !!w.showValueAsPercent() });\r\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 });\r\nColumn.prototype.publish(\"showValueAsPercentFormat\", \".0%\", \"string\", \"D3 Format for %\", null, { disable: (w: Column) => !w.showValue() || !w.showValueAsPercent() });\r\nColumn.prototype.publish(\"showDomainTotal\", false, \"boolean\", \"Show Total Value for Stacked Columns\", null);\r\nColumn.prototype.publish(\"valueCentered\", false, \"boolean\", \"Show Value in center of column\");\r\nColumn.prototype.publish(\"valueAnchor\", \"middle\", \"set\", \"text-anchor for shown value text\", [\"start\", \"middle\", \"end\"]);\r\nColumn.prototype.publish(\"xAxisSeriesPaddingInner\", 0, \"number\", \"Determines the ratio of the range that is reserved for blank space between band (0->1)\");\r\nColumn.prototype.publish(\"tooltipInnerTextEllipsedOnly\", false, \"boolean\", \"Show tooltip only when inner text is truncated with an ellipsis\");\r\n\r\n/*\r\nconst origUseClonedPalette = Column.prototype.useClonedPalette;\r\nColumn.prototype.useClonedPalette = function (this: Column, _?) {\r\n const retVal = origUseClonedPalette.apply(this, arguments);\r\n if (arguments.length) {\r\n this._useClonedPalette = _;\r\n }\r\n return retVal;;\r\n}\r\n*/\r\n","import { Column } from \"./Column\";\r\n\r\nexport class Bar extends Column {\r\n constructor() {\r\n super();\r\n this.orientation_default(\"vertical\");\r\n }\r\n}\r\nBar.prototype._class += \" chart_Bar\";\r\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\";\r\nimport { FAChar, InputField, ISize, SVGWidget, Text, Utility } from \"@hpcc-js/common\";\r\nimport { hierarchy as d3Hierarchy, pack as d3Pack } from \"d3-hierarchy\";\r\nimport { select as d3Select } from \"d3-selection\";\r\n\r\nimport \"../src/Bubble.css\";\r\n\r\nexport class Bubble extends SVGWidget {\r\n static __inputs: InputField[] = [{\r\n id: \"label\",\r\n type: \"string\"\r\n }, {\r\n id: \"value\",\r\n type: \"number\"\r\n }];\r\n\r\n labelWidgets;\r\n d3Pack;\r\n\r\n constructor() {\r\n super();\r\n I2DChart.call(this);\r\n ITooltip.call(this);\r\n Utility.SimpleSelectionMixin.call(this);\r\n\r\n this._drawStartPos = \"origin\";\r\n\r\n this.labelWidgets = {};\r\n\r\n this.d3Pack = d3Pack()\r\n .size([this.width(), this.height()])\r\n .padding(1.5)\r\n ;\r\n }\r\n\r\n size(): ISize;\r\n size(_): this;\r\n size(_?): ISize | this {\r\n const retVal = super.size.apply(this, arguments);\r\n if (arguments.length) {\r\n this.d3Pack\r\n .size([this.width(), this.height()])\r\n ;\r\n }\r\n return retVal;\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this._selection.widgetElement(element);\r\n const context = this;\r\n this\r\n .tooltipHTML(function (d) {\r\n switch (context.tooltipStyle()) {\r\n case \"series-table\":\r\n return context.tooltipFormat({\r\n label: d[0],\r\n arr: context.columns().slice(1).map(function (column, i) {\r\n return {\r\n label: column,\r\n color: context._palette(d[0]),\r\n value: d[1]\r\n };\r\n })\r\n });\r\n default:\r\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\r\n }\r\n })\r\n ;\r\n }\r\n\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n const context = this;\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n if (this.useClonedPalette()) {\r\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\r\n }\r\n\r\n const root = d3Hierarchy({ children: this.cloneData() })\r\n .sum(function (d) { return d[1]; })\r\n .sort(function (b, a) {\r\n return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;\r\n })\r\n ;\r\n this.d3Pack(root);\r\n\r\n const node = element.selectAll(\".node\").data(root.children || [], d => d.data[0]);\r\n\r\n // Enter ---\r\n node.enter().append(\"g\")\r\n .attr(\"class\", (d, i) => \"node series series-\" + this.cssTag(d.data[0]))\r\n .attr(\"opacity\", 0)\r\n .call(this._selection.enter.bind(this._selection))\r\n .on(\"click\", function (d) {\r\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d) {\r\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\r\n })\r\n .each(function (d) {\r\n const element2 = d3Select(this);\r\n const pos = { x: d.x, y: d.y };\r\n element2.append(\"circle\")\r\n .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\r\n .attr(\"r\", 0)\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n ;\r\n if (d.__viz_faChar) {\r\n context.labelWidgets[d.data[0]] = new FAChar()\r\n .char(d.__viz_faChar)\r\n .target(this)\r\n .render()\r\n ;\r\n } else {\r\n context.labelWidgets[d.data[0]] = new Text()\r\n .text(d.data[0])\r\n .target(this)\r\n .render()\r\n ;\r\n }\r\n })\r\n .merge(node).transition()\r\n .attr(\"opacity\", 1)\r\n .each(function (d) {\r\n const element2 = d3Select(this);\r\n const pos = { x: d.x, y: d.y };\r\n element2.select(\"circle\").transition()\r\n .attr(\"transform\", \"translate(\" + pos.x + \",\" + pos.y + \")\")\r\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\r\n .attr(\"r\", d.r)\r\n .select(\"title\")\r\n .text(d.data[0] + \" (\" + d.data[1] + \")\")\r\n ;\r\n if (d.__viz_faChar) {\r\n context.labelWidgets[d.data[0]]\r\n .pos(pos)\r\n .render()\r\n ;\r\n } else {\r\n context.labelWidgets[d.data[0]]\r\n .pos(pos)\r\n .colorFill_default(context.textColor(d.data, context.columns()[1], d.data[1]))\r\n .width(d.r * 2)\r\n .text(d.data[0])\r\n .render()\r\n ;\r\n }\r\n })\r\n ;\r\n\r\n // Exit ---\r\n node.exit().transition()\r\n .style(\"opacity\", 0)\r\n .remove()\r\n ;\r\n }\r\n\r\n exit(domNode, element) {\r\n super.exit(domNode, element);\r\n }\r\n\r\n paletteID: { (): string; (_: string): Bubble; };\r\n useClonedPalette: { (): boolean; (_: boolean): Bubble; };\r\n\r\n // I2DChart\r\n _palette;\r\n fillColor: (row: any[], column: string, value: number) => string;\r\n textColor: (row: any[], column: string, value: number) => string;\r\n click: (row, column, selected) => void;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n tooltipStyle: () => \"default\" | \"none\" | \"series-table\";\r\n\r\n // SimpleSelectionMixin\r\n _selection;\r\n}\r\nBubble.prototype._class += \" chart_Bubble\";\r\nBubble.prototype.implements(I2DChart.prototype);\r\nBubble.prototype.implements(ITooltip.prototype);\r\nBubble.prototype.mixin(Utility.SimpleSelectionMixin);\r\n\r\nBubble.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Bubble.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\r\nBubble.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\n","import { Scatter } from \"./Scatter\";\r\n\r\nexport class BubbleXY extends Scatter {\r\n constructor() {\r\n super();\r\n }\r\n enter(domNode, element) {\r\n if (!this.pointSizeColumn_exists()) {\r\n this.pointSizeColumn(this.columns()[this.columns().length - 1]);\r\n }\r\n super.enter(domNode, element);\r\n }\r\n}\r\nBubbleXY.prototype._class += \" chart_BubbleXY\";\r\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\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { bullet as d3Bullet } from \"d3v4-bullet\";\r\n\r\nimport \"../src/Bullet.css\";\r\n\r\nexport class Bullet extends HTMLWidget {\r\n @publish(null, \"set\", \"Title Column\", function () { return this.columns(); }, { optional: true })\r\n titleColumn: publish<this, string>;\r\n @publish(null, \"set\", \"Subtitle Column\", function () { return this.columns(); }, { optional: true })\r\n subtitleColumn: publish<this, string>;\r\n @publish(null, \"set\", \"Ranges Column\", function () { return this.columns(); }, { optional: true })\r\n rangesColumn: publish<this, string>;\r\n @publish(null, \"set\", \"Measures Column\", function () { return this.columns(); }, { optional: true })\r\n measuresColumn: publish<this, string>;\r\n @publish(null, \"set\", \"Markers Column\", function () { return this.columns(); }, { optional: true })\r\n markersColumn: publish<this, string>;\r\n\r\n private _hiddenColumns = {};\r\n\r\n constructor() {\r\n super();\r\n Utility.SimpleSelectionMixin.call(this, true);\r\n }\r\n\r\n bulletData() {\r\n const context = this;\r\n this._hiddenColumns = {};\r\n const columns = this.columns();\r\n return this.data().map(function (row) {\r\n return {\r\n title: valueOf(row, this.titleColumn()),\r\n subtitle: valueOf(row, this.subtitleColumn()),\r\n ranges: valueOf(row, this.rangesColumn(), \"range\"),\r\n measures: valueOf(row, this.measuresColumn(), \"measure\"),\r\n markers: valueOf(row, this.markersColumn(), \"marker\"),\r\n origRow: row\r\n };\r\n }, this);\r\n\r\n function valueOf(row, column, columnType?) {\r\n const colIdx = columns.indexOf(column);\r\n if (colIdx >= 0) {\r\n if (row[colIdx] instanceof Array) {\r\n return row[colIdx];\r\n }\r\n return [row[colIdx]];\r\n }\r\n if (columnType) {\r\n context._hiddenColumns[columnType] = true;\r\n }\r\n return [0];\r\n }\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n d3Select(domNode.parentNode).style(\"overflow\", \"auto\");\r\n this._selection.widgetElement(element);\r\n }\r\n\r\n update(_domNode, element) {\r\n super.update(_domNode, element);\r\n const context = this;\r\n\r\n element.selectAll(\".axis\")\r\n .style(\"display\", \"none\")\r\n ;\r\n element.selectAll(\".range,.measure,.marker\")\r\n .style(\"display\", null)\r\n ;\r\n\r\n const margin = { left: 2, top: 8, right: 2, bottom: 8 };\r\n const width = this.width() - margin.left - margin.right;\r\n const height = 40 - margin.top - margin.bottom;\r\n\r\n const svg = element.selectAll(\"svg\").data(this.bulletData());\r\n const svgUpdate = svg.enter().append(\"svg\")\r\n .attr(\"class\", \"bullet\")\r\n .call(this._selection.enter.bind(this._selection))\r\n .on(\"click\", function (d) {\r\n context.click(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d) {\r\n context.dblclick(context.rowToObj(d.origRow), context.titleColumn(), context._selection.selected(this));\r\n })\r\n .each(function () {\r\n const element2 = d3Select(this);\r\n const bulletBar = element2.append(\"g\")\r\n .attr(\"class\", (d, i) => \"bulletBar series series-\" + context.cssTag(context.titleColumn()))\r\n ;\r\n const bulletTitle = bulletBar.append(\"g\")\r\n .attr(\"class\", \"bulletTitle\")\r\n ;\r\n bulletTitle.append(\"text\")\r\n .attr(\"class\", \"title\")\r\n ;\r\n bulletTitle.append(\"text\")\r\n .attr(\"class\", \"subtitle\")\r\n .attr(\"dy\", \"1em\")\r\n ;\r\n })\r\n .merge(svg)\r\n ;\r\n\r\n // Title ---\r\n const title = svgUpdate.select(\".bulletTitle\")\r\n .style(\"text-anchor\", \"end\")\r\n .attr(\"transform\", \"translate(-6,\" + height / 2 + \")\")\r\n ;\r\n title.select(\".title\")\r\n .text(function (d) { return d.title; })\r\n ;\r\n title.select(\".subtitle\")\r\n .text(function (d) { return d.subtitle; })\r\n ;\r\n\r\n let titleWidth = 0;\r\n title.each(function () {\r\n const bbox = this.getBBox();\r\n if (bbox.width > titleWidth) {\r\n titleWidth = bbox.width;\r\n }\r\n });\r\n titleWidth; // Gap between title and bullet bar.\r\n\r\n // Bullet Chart ---\r\n const chart = d3Bullet()\r\n .width(width - titleWidth - 6)\r\n .height(height)\r\n ;\r\n svgUpdate\r\n .attr(\"width\", width)\r\n .attr(\"height\", height + margin.top + margin.bottom)\r\n .style(\"margin-left\", `${margin.left}px`)\r\n ;\r\n svgUpdate.select(\".bulletBar\")\r\n .attr(\"transform\", \"translate(\" + (titleWidth + 6) + \",\" + margin.top + \")\")\r\n .call(chart)\r\n ;\r\n\r\n svg.exit().remove();\r\n\r\n if (Object.keys(this._hiddenColumns).length > 0) {\r\n element.selectAll(`.${Object.keys(this._hiddenColumns).join(\",.\")}`)\r\n .style(\"display\", \"none\")\r\n ;\r\n }\r\n }\r\n\r\n exit(domNode, element) {\r\n super.exit(domNode, element);\r\n }\r\n\r\n // Events ---\r\n click(row, column, selected) {\r\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\r\n }\r\n\r\n dblclick(row, column, selected) {\r\n // console.log(\"Double click: \" + JSON.stringify(row) + \", \" + column + \",\" + selected);\r\n }\r\n\r\n // SimpleSelectionMixin\r\n _selection;\r\n}\r\nBullet.prototype._class += \" chart_Bullet\";\r\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\";\r\nimport { InputField } from \"@hpcc-js/common\";\r\nimport { contourDensity as d3ContourDensity } from \"d3-contour\";\r\nimport { geoPath } from \"d3-geo\";\r\nimport { XYAxis } from \"./XYAxis\";\r\n\r\nexport class Contour extends XYAxis {\r\n static __inputs: InputField[] = [{\r\n id: \"x\",\r\n type: \"any\"\r\n }, {\r\n id: \"y\",\r\n type: \"number\"\r\n }];\r\n\r\n protected _dataMinWeight;\r\n protected _dataMaxWeight;\r\n constructor() {\r\n super();\r\n this\r\n .xAxisGuideLines_default(false)\r\n .yAxisGuideLines_default(false)\r\n .xAxisType_default(\"linear\")\r\n ;\r\n }\r\n\r\n xPos(host: XYAxis, d) {\r\n return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\r\n }\r\n\r\n yPos(host: XYAxis, d) {\r\n return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\r\n }\r\n\r\n layerEnter(host: XYAxis, element, duration: number = 250) {\r\n super.layerEnter(host, element, duration);\r\n }\r\n\r\n layerUpdate(host: XYAxis, element, duration: number = 250) {\r\n super.layerUpdate(host, element, duration);\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n\r\n const data = this.flattenData(this.layerColumns(host), this.layerData(host));\r\n const contourData = d3ContourDensity()\r\n .x(d => this.xPos(host, d))\r\n .y(d => this.yPos(host, d))\r\n .size([this.width(), this.height()])\r\n .bandwidth(this.contourBandwidth())(data)\r\n ;\r\n const _vals = contourData.map(d => d.value);\r\n const minValue = Math.min.apply(this, _vals);\r\n const maxValue = Math.max.apply(this, _vals);\r\n this._dataMinWeight = minValue;\r\n this._dataMaxWeight = maxValue;\r\n const lines = element.selectAll(\"path\").data(contourData);\r\n lines.enter().append(\"path\")\r\n .merge(lines)\r\n .attr(\"d\", geoPath())\r\n .attr(\"fill\", d => this.showContourFill() ? this._palette(d.value, minValue, maxValue) : \"none\")\r\n .attr(\"stroke\", this.contourStrokeColor())\r\n .attr(\"stroke-linejoin\", \"round\")\r\n .attr(\"stroke-width\", this.contourStrokeWidth())\r\n ;\r\n lines.exit().remove();\r\n }\r\n\r\n exit(_domNode, _element) {\r\n super.exit(_domNode, _element);\r\n }\r\n}\r\nContour.prototype._class += \" chart_Contour\";\r\nContour.prototype.implements(I1DChart.prototype);\r\n\r\nexport interface Contour {\r\n paletteID(): string;\r\n paletteID(_: string): this;\r\n useClonedPalette(): boolean;\r\n useClonedPalette(_: boolean): this;\r\n showContourFill(): boolean;\r\n showContourFill(_: boolean): this;\r\n showContour(): boolean;\r\n showContour(_: boolean): this;\r\n contourBandwidth(): number;\r\n contourBandwidth(_: number): this;\r\n contourStrokeColor(): string;\r\n contourStrokeColor(_: string): this;\r\n contourStrokeWidth(): number;\r\n contourStrokeWidth(_: number): this;\r\n}\r\nContour.prototype.publish(\"paletteID\", \"YlGnBu\", \"string\", \"Color palette for this widget\");\r\nContour.prototype.publish(\"useClonedPalette\", true, \"boolean\", \"Enable or disable using a cloned palette\");\r\nContour.prototype.publish(\"showContourFill\", true, \"boolean\", \"Show/hide the contour background colors\");\r\nContour.prototype.publish(\"showContour\", true, \"boolean\", \"Show/hide the contour border lines\");\r\nContour.prototype.publish(\"contourBandwidth\", 40, \"number\", \"Controls the sensitivity of the contour grouping algorithm\");\r\nContour.prototype.publish(\"contourStrokeColor\", \"#2C3A47\", \"html-color\", \"Color of the contour border lines\");\r\nContour.prototype.publish(\"contourStrokeWidth\", 1, \"number\", \"Width of the contour border lines\");\r\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\";\r\n\r\nexport class Gantt extends Bar {\r\n constructor() {\r\n super();\r\n\r\n this\r\n .orientation_default(\"vertical\")\r\n .xAxisType_default(\"ordinal\")\r\n .yAxisType_default(\"time\")\r\n ;\r\n }\r\n}\r\nGantt.prototype._class += \" chart_Gantt\";\r\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 default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","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'\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'\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 { 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 { 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 { 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 { 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\"\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 { 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 { publish, SVGWidget } from \"@hpcc-js/common\";\r\nimport { format as d3Format } from \"d3-format\";\r\nimport { interpolate as d3Interpolate, interpolateHcl as d3InterpolateHcl } from \"d3-interpolate\";\r\nimport { scaleLinear } from \"d3-scale\";\r\nimport { Arc, arc as d3Arc, DefaultArcObject } from \"d3-shape\";\r\nimport { annotation as d3Annotation, annotationCalloutElbow } from \"d3-svg-annotation\";\r\n\r\nfunction value2Angle(value: number): number {\r\n return (value - 0.5) * .65 * 2 * Math.PI;\r\n}\r\n\r\nfunction pointOnArc(angle: number, radius: number): { x: number, y: number } {\r\n return {\r\n x: Math.cos(angle - Math.PI / 2) * radius,\r\n y: Math.sin(angle - Math.PI / 2) * radius\r\n };\r\n}\r\n\r\nfunction indicatorTranslate(angle: number, radius: number, inner: boolean = false) {\r\n const point = pointOnArc(angle, radius);\r\n const rotation = angle * 180 / Math.PI + (inner === true ? 180 : 0);\r\n return `translate(${point.x}, ${point.y}) rotate(${rotation})`;\r\n}\r\n\r\ntype IndicatorDatum = { angle: number };\r\nfunction indicatorTween(newAngle: number, radius: number, inner: boolean = false) {\r\n return function (d: IndicatorDatum) {\r\n const interpolate = d3Interpolate(d.angle, newAngle);\r\n d.angle = newAngle;\r\n return function (t: number) {\r\n return indicatorTranslate(interpolate(t), radius, inner);\r\n };\r\n };\r\n}\r\n\r\nfunction arcTween(startAngle: number, endAngle: number, arc: Arc<any, DefaultArcObject>) {\r\n return function (d: DefaultArcObject) {\r\n const startInterpolate = d3Interpolate(d.startAngle, startAngle);\r\n const endInterpolate = d3Interpolate(d.endAngle, endAngle);\r\n return function (t: number): string {\r\n d.startAngle = startInterpolate(t);\r\n d.endAngle = endInterpolate(t);\r\n return arc(d)!;\r\n };\r\n };\r\n}\r\n\r\nexport class Gauge extends SVGWidget {\r\n\r\n private _d3Arc: Arc<any, DefaultArcObject> = d3Arc()\r\n .innerRadius(85)\r\n .outerRadius(100)\r\n ;\r\n private _colorScale = scaleLinear<string, string>()\r\n .interpolate(d3InterpolateHcl)\r\n ;\r\n\r\n protected _usageArc: any;\r\n protected _meanArc: any;\r\n protected _freeArc: any;\r\n protected _indInner: any;\r\n protected _indOuter: any;\r\n protected _centerTextG: any;\r\n protected _centerText: any;\r\n protected _bottomText: any;\r\n protected _tooltipG: any;\r\n protected _mainTooltip: any;\r\n\r\n @publish(\"\", \"string\")\r\n title: publish<this, string>;\r\n\r\n @publish(\"\", \"string\")\r\n titleDescription: publish<this, string>;\r\n\r\n @publish(128, \"number\")\r\n maxDiameter: publish<this, number>;\r\n\r\n @publish(0, \"number\")\r\n value: publish<this, number>;\r\n\r\n @publish(\"\", \"string\")\r\n valueDescription: publish<this, string>;\r\n\r\n @publish(false, \"boolean\")\r\n showTick: publish<this, boolean>;\r\n\r\n @publish(0, \"number\")\r\n tickValue: publish<this, number>;\r\n\r\n @publish(\"\", \"string\")\r\n tickValueDescription: publish<this, string>;\r\n\r\n @publish(\"\", \"string\")\r\n tooltip: publish<this, string>;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n protected tip(d: any) {\r\n if (d === null || d.label === \"\") {\r\n this._tooltipG\r\n .transition()\r\n .style(\"opacity\", 0)\r\n .on(\"interrupt end\", () => {\r\n this._tooltipG\r\n .selectAll(\"g\")\r\n .remove()\r\n ;\r\n })\r\n ;\r\n } else {\r\n this._tooltipG\r\n .interrupt()\r\n .style(\"opacity\", 1)\r\n ;\r\n d.w = (this._centerText.datum() as any).w + 10;\r\n let lineType = \"horizontal\";\r\n let xOffset = 0;\r\n let yOffset = 5;\r\n let padding: number | undefined = 5;\r\n if (d.y >= 5 && d.y <= 25) {\r\n xOffset = d.x < 0 ? -d.w / 2 : d.w / 2;\r\n yOffset = 12.5;\r\n padding = undefined;\r\n lineType = \"vertical\";\r\n } else if (d.y > 25) {\r\n yOffset = 25;\r\n padding = 0;\r\n }\r\n const annotationtip = d3Annotation()\r\n .type(annotationCalloutElbow)\r\n .annotations([{\r\n data: d,\r\n dx: -d.x + xOffset,\r\n dy: -d.y + yOffset,\r\n color: \"black\",\r\n note: {\r\n label: d.label,\r\n lineType,\r\n padding,\r\n align: \"middle\"\r\n }\r\n }])\r\n .accessors({ x: (d2: any) => d2.x, y: (d2: any) => d2.y });\r\n this._tooltipG.call(annotationtip as any);\r\n }\r\n }\r\n\r\n protected calcSize(textElement, width: number, height: number): { width: number, height: number, scale: number } {\r\n const bb = (textElement.node() as any).getBBox();\r\n const widthTransform = width / bb.width;\r\n const heightTransform = height / bb.height;\r\n const scale = widthTransform < heightTransform ? widthTransform : heightTransform;\r\n return {\r\n width: bb.width,\r\n height: bb.height,\r\n scale\r\n };\r\n }\r\n\r\n protected updateText(textElement, x: number, y: number, w: number, h: number) {\r\n textElement\r\n .datum({ x, y, w, h })\r\n .attr(\"transform\", null)\r\n ;\r\n const size = this.calcSize(textElement, w, h);\r\n const x2 = x + w / 2 - size.width / 2 * size.scale;\r\n const y2 = y + h / 2 - size.height / 2 * size.scale;\r\n textElement.attr(\"transform\", `translate(${x2}, ${y2}) scale(${size.scale})`);\r\n }\r\n\r\n calcWidth(): number {\r\n return Math.min(this.width(), this.height(), this.maxDiameter());\r\n }\r\n\r\n enter(domNode: HTMLElement, element) {\r\n super.enter(domNode, element);\r\n\r\n element.on(\"click\", (d: Gauge) => {\r\n this.click(d);\r\n });\r\n\r\n this._usageArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\r\n .style(\"fill\", \"green\")\r\n .on(\"mousemove\", (d: any) => {\r\n const [x, y] = this._d3Arc.centroid(d);\r\n this.tip({ x, y, label: this.valueDescription() });\r\n })\r\n .on(\"mouseout\", (d: any) => {\r\n this.tip(null);\r\n })\r\n ;\r\n this._freeArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(1) })\r\n .style(\"fill\", \"lightGrey\")\r\n ;\r\n this._meanArc = element.append(\"path\").datum({ startAngle: value2Angle(0), endAngle: value2Angle(0) })\r\n .style(\"fill\", \"black\")\r\n .on(\"mousemove\", (d: any) => {\r\n const [x, y] = this._d3Arc.centroid(d);\r\n this.tip({ x, y, label: this.tickValueDescription() });\r\n })\r\n .on(\"mouseout\", (d: any) => {\r\n this.tip(null);\r\n })\r\n ;\r\n\r\n this._mainTooltip = element.append(\"title\");\r\n\r\n const context = this;\r\n function appendIndicator() {\r\n return element.append(\"path\").datum({ angle: value2Angle(0) })\r\n .style(\"fill\", \"black\")\r\n .style(\"stroke\", \"black\")\r\n .attr(\"d\", \"M 0 0 l -3 -3 l 6 0 z\")\r\n .on(\"mousemove\", (d: any) => {\r\n const [x, y] = context._d3Arc.centroid(context._meanArc.datum() as any);\r\n context.tip({ x, y, label: context.tickValueDescription() });\r\n })\r\n .on(\"mouseout\", (d: any) => {\r\n context.tip(null);\r\n })\r\n ;\r\n }\r\n this._indInner = appendIndicator();\r\n this._indOuter = appendIndicator();\r\n this._centerText = element.append(\"text\")\r\n .attr(\"dy\", \".66em\")\r\n .style(\"fill\", \"green\")\r\n .on(\"mousemove\", (d: any) => {\r\n this.tip({ x: 0, y: 0, label: this.valueDescription() });\r\n })\r\n .on(\"mouseout\", (d: any) => {\r\n this.tip(null);\r\n })\r\n ;\r\n this._bottomText = element.append(\"text\")\r\n .attr(\"dy\", \".66em\")\r\n .on(\"mousemove\", (d: any) => {\r\n this.tip({ x: 0, y: d.y, label: this.titleDescription() });\r\n })\r\n .on(\"mouseout\", (d: any) => {\r\n this.tip(null);\r\n })\r\n ;\r\n\r\n this._tooltipG = element.append(\"g\")\r\n .attr(\"class\", \"annotation-tip\")\r\n ;\r\n }\r\n\r\n update(domNode: HTMLElement, element) {\r\n super.update(domNode, element);\r\n\r\n this._colorScale\r\n .domain(this.colorDomain())\r\n .range(this.colorRange())\r\n ;\r\n element\r\n .attr(\"title\", this.tooltip())\r\n .style(\"cursor\", this.click !== Gauge.prototype.click ? \"pointer\" : null)\r\n ;\r\n\r\n const innerRadius = this.calcWidth() / 3;\r\n const outerRadius = this.calcWidth() / 2 - 5;\r\n this._d3Arc\r\n .innerRadius(innerRadius)\r\n .outerRadius(outerRadius)\r\n ;\r\n\r\n const val = this.value();\r\n const tickVal = this.tickValue();\r\n\r\n this._usageArc\r\n .style(\"fill\", this._colorScale(val))\r\n .transition()\r\n .duration(750)\r\n .attrTween(\"d\", arcTween(value2Angle(0), value2Angle(val), this._d3Arc))\r\n ;\r\n\r\n this._freeArc\r\n .style(\"fill\", this.emptyColor())\r\n .transition()\r\n .duration(750)\r\n .attrTween(\"d\", arcTween(value2Angle(val), value2Angle(1), this._d3Arc))\r\n ;\r\n\r\n this._meanArc\r\n .style(\"fill\", this.tickColor())\r\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\r\n .transition()\r\n .duration(750)\r\n .attrTween(\"d\", arcTween(value2Angle(tickVal - 0.001), value2Angle(tickVal + 0.001), this._d3Arc))\r\n ;\r\n\r\n this._indInner\r\n .style(\"fill\", this.tickColor())\r\n .style(\"stroke\", this.tickColor())\r\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\r\n .transition()\r\n .duration(750)\r\n .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), innerRadius, true))\r\n ;\r\n\r\n this._indOuter\r\n .style(\"fill\", this.tickColor())\r\n .style(\"stroke\", this.tickColor())\r\n .style(\"visibility\", this.showTick() ? \"visible\" : \"hidden\")\r\n .transition()\r\n .duration(750)\r\n .attrTween(\"transform\", indicatorTween(value2Angle(tickVal), outerRadius))\r\n ;\r\n\r\n this._centerText\r\n .style(\"fill\", this._colorScale(val))\r\n .text(d3Format(\".0%\")(val))\r\n ;\r\n\r\n this._bottomText\r\n .style(\"fill\", this.click !== Gauge.prototype.click ? \"blue\" : \"black\")\r\n .style(\"text-decoration\", this.click !== Gauge.prototype.click ? \"underline\" : null)\r\n .text(this.title())\r\n ;\r\n\r\n // Update Text ---\r\n const point = pointOnArc(value2Angle(1), innerRadius - 8);\r\n this.updateText(this._centerText, -point.x, -point.y, 2 * point.x, 2 * point.y);\r\n\r\n const point2 = pointOnArc(value2Angle(1), outerRadius);\r\n point2.y += 5;\r\n const width = this.calcWidth() - 20;\r\n const height = this.calcWidth() / 2 - point2.y - 5;\r\n this.updateText(this._bottomText, -width / 2, point2.y, width, height);\r\n\r\n this._mainTooltip.text(this.tooltip());\r\n }\r\n\r\n // Events ---\r\n click(w: Gauge) {\r\n }\r\n}\r\nGauge.prototype._class += \" chart_Gauge\";\r\n\r\nexport interface Gauge {\r\n tickColor(): string;\r\n tickColor(_: string): this;\r\n emptyColor(): string;\r\n emptyColor(_: string): this;\r\n colorDomain(): number[];\r\n colorDomain(_: number[]): this;\r\n colorRange(): string[];\r\n colorRange(_: string[]): this;\r\n}\r\n\r\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.\");\r\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.\");\r\nGauge.prototype.publish(\"emptyColor\", \"lightgrey\", \"html-color\", \"Color of the empty portion of the gauge\");\r\nGauge.prototype.publish(\"tickColor\", \"black\", \"html-color\", \"Color of the tick\");\r\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\";\r\nimport { InputField, SVGWidget, Utility } from \"@hpcc-js/common\";\r\nimport { degreesToRadians, normalizeRadians } from \"@hpcc-js/util\";\r\nimport { format as d3Format } from \"d3-format\";\r\nimport { interpolate as d3Interpolate } from \"d3-interpolate\";\r\nimport { select as d3Select } from \"d3-selection\";\r\nimport { arc as d3Arc, pie as d3Pie } from \"d3-shape\";\r\n\r\nimport \"../src/Pie.css\";\r\n\r\nconst sortAscending = (a, b) => a[1] - b[1] > 0 ? 1 : -1;\r\nconst sortDescending = (a, b) => a[1] - b[1] > 0 ? -1 : 1;\r\n\r\nexport class Pie extends SVGWidget {\r\n static __inputs: InputField[] = [{\r\n id: \"label\",\r\n type: \"string\"\r\n }, {\r\n id: \"value\",\r\n type: \"number\"\r\n }];\r\n\r\n protected _totalValue: number;\r\n\r\n d3Pie;\r\n d3Arc;\r\n d3LabelArc;\r\n private _labelPositions;\r\n private _smallValueLabelHeight;\r\n private _labelWidthLimit: number;\r\n private _quadIdxArr;\r\n private _minLabelTop = 0;\r\n private _maxLabelBottom = 0;\r\n private _seriesValueFormatter;\r\n private _seriesPercentageFormatter;\r\n constructor() {\r\n super();\r\n I2DChart.call(this);\r\n ITooltip.call(this);\r\n Utility.SimpleSelectionMixin.call(this);\r\n\r\n this.d3Pie = d3Pie();\r\n\r\n this.d3Arc = d3Arc();\r\n this.d3LabelArc = d3Arc();\r\n this\r\n .tooltipTick_default(false)\r\n .tooltipOffset_default(0)\r\n ;\r\n }\r\n\r\n intersection(pointA, pointB) {\r\n return this.intersectCircle(this.calcOuterRadius(), pointA, pointB);\r\n }\r\n\r\n calcInnerRadius() {\r\n return this.innerRadius_exists() ? this.calcOuterRadius() * (this.innerRadius() as number) / 100 : 0;\r\n }\r\n\r\n calcOuterRadius() {\r\n const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d }, false)), \"Verdana\", 12).width;\r\n const horizontalLimit = this._size.width - (this.showLabels() ? maxTextWidth * 2 : 0) - 20;\r\n const verticalLimit = this._size.height - 12 * 3 - (this.showLabels() ? this._smallValueLabelHeight : 0);\r\n const outerRadius = Math.min(horizontalLimit, verticalLimit) / 2 - 2;\r\n if ((horizontalLimit / 2) - 2 < this.minOuterRadius()) {\r\n this._labelWidthLimit = maxTextWidth - (this.minOuterRadius() - ((horizontalLimit / 2) - 2));\r\n } else {\r\n this._labelWidthLimit = maxTextWidth;\r\n }\r\n if (outerRadius < this.minOuterRadius()) {\r\n return this.minOuterRadius();\r\n }\r\n return outerRadius;\r\n }\r\n\r\n calcSmallValueLabelHeight() {\r\n const smallDef = 0.1;\r\n const totalVal = this.data().reduce((acc, n) => acc + n[1], 0);\r\n let smallCount = 0;\r\n this.data().forEach(row => {\r\n if (row[1] / totalVal < smallDef) {\r\n smallCount++;\r\n }\r\n });\r\n return this.labelHeight() * smallCount;\r\n }\r\n\r\n calcTotalValue(): number {\r\n return this.data().reduce((acc, d) => {\r\n return acc + d[1];\r\n }, 0);\r\n }\r\n\r\n getLabelText(d, truncate?) {\r\n let len;\r\n let label = d.data[0];\r\n if (typeof this._labelWidthLimit !== \"undefined\" && truncate) {\r\n const labelWidth = this.textSize(label, \"Verdana\", this.labelHeight()).width;\r\n if (this._labelWidthLimit < labelWidth) {\r\n len = label.length * (this._labelWidthLimit / labelWidth) - 3;\r\n label = len < label.length ? label.slice(0, len) + \"...\" : label;\r\n }\r\n }\r\n if (this.showSeriesValue()) {\r\n label += ` : ${this._seriesValueFormatter(d.data[1])}`;\r\n }\r\n if (this.showSeriesPercentage()) {\r\n let sum = this._totalValue;\r\n const dm = this.dataMeta();\r\n if (typeof dm.sum !== \"undefined\") {\r\n sum = dm.sum;\r\n }\r\n const perc = (d.data[1] / sum) * 100;\r\n label += ` : ${this._seriesPercentageFormatter(perc)}%`;\r\n }\r\n return label;\r\n }\r\n\r\n selection(): any[]; // any[] === single row\r\n selection(_: any[]): this;\r\n selection(_?: any[]): any[] | this {\r\n if (!arguments.length) {\r\n try {\r\n return this._selection.selection2()[0]?.data;\r\n } catch (e) {\r\n return undefined;\r\n }\r\n }\r\n // Stringify to enable a deep equal\r\n const strRow = JSON.stringify(_);\r\n this._selection.selection2(d => strRow === JSON.stringify(d.data));\r\n }\r\n\r\n selectByLabel(_: string) {\r\n const row = this.data().filter(row => row[0] === _)[0];\r\n if (row) {\r\n this.selection(row);\r\n }\r\n }\r\n\r\n _slices;\r\n _labels;\r\n enter(_domNode, element) {\r\n super.enter(_domNode, element);\r\n this._selection.widgetElement(element);\r\n this._slices = element.append(\"g\");\r\n this._labels = element.append(\"g\");\r\n const context = this;\r\n this\r\n .tooltipHTML(function (d) {\r\n switch (context.tooltipStyle()) {\r\n case \"series-table\":\r\n return context.tooltipFormat({\r\n label: d.data[0],\r\n arr: context.columns().slice(1).map(function (column, i) {\r\n return {\r\n label: column,\r\n color: context._palette(d.data[0]),\r\n value: d.data[i + 1]\r\n };\r\n })\r\n });\r\n default:\r\n return context.tooltipFormat({ label: d.data[0], value: d.data[1] });\r\n }\r\n })\r\n ;\r\n }\r\n\r\n update(_domNode, element) {\r\n super.update(_domNode, element);\r\n const context = this;\r\n this.updateD3Pie();\r\n this._palette = this._palette.switch(this.paletteID());\r\n this._seriesValueFormatter = d3Format(this.seriesValueFormat() as string);\r\n this._seriesPercentageFormatter = d3Format(this.seriesPercentageFormat() as string);\r\n if (this.useClonedPalette()) {\r\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\r\n }\r\n this._smallValueLabelHeight = this.calcSmallValueLabelHeight();\r\n this._totalValue = this.calcTotalValue();\r\n const innerRadius = this.calcInnerRadius();\r\n const outerRadius = this.calcOuterRadius();\r\n const labelRadius = outerRadius + 12;\r\n this.d3Arc\r\n .innerRadius(innerRadius)\r\n .padRadius(outerRadius)\r\n .outerRadius(outerRadius)\r\n ;\r\n\r\n this._quadIdxArr = [[], [], [], []];\r\n const data = [...this.data()];\r\n switch (this.sortDataByValue()) {\r\n case \"ascending\":\r\n data.sort(sortAscending);\r\n break;\r\n case \"descending\":\r\n data.sort(sortDescending);\r\n break;\r\n }\r\n const arc = this._slices.selectAll(\".arc\").data(this.d3Pie(data), d => d.data[0]);\r\n\r\n this._labelPositions = [];\r\n\r\n // Enter ---\r\n arc.enter().append(\"g\")\r\n .attr(\"class\", (d, i) => \"arc series series-\" + this.cssTag(d.data[0]))\r\n .attr(\"opacity\", 0)\r\n .call(this._selection.enter.bind(this._selection))\r\n .on(\"click\", function (d) {\r\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d) {\r\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\r\n })\r\n .each(function (d, i) {\r\n d3Select(this).append(\"path\")\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n .on(\"mouseover\", arcTween(0, 0))\r\n .on(\"mouseout\", arcTween(-5, 150))\r\n ;\r\n })\r\n .merge(arc).transition()\r\n .attr(\"opacity\", 1)\r\n .each(function (d, i) {\r\n const quad = context.getQuadrant(midAngle(d));\r\n context._quadIdxArr[quad].push(i);\r\n d.outerRadius = outerRadius - 5;\r\n const element2 = d3Select(this);\r\n element2.select(\"path\").transition()\r\n .attr(\"d\", context.d3Arc)\r\n .style(\"fill\", context.fillColor(d.data, context.columns()[1], d.data[1]))\r\n ;\r\n })\r\n ;\r\n\r\n // Exit ---\r\n arc.exit().transition()\r\n .style(\"opacity\", 0)\r\n .remove()\r\n ;\r\n // Labels ---\r\n this.d3LabelArc\r\n .innerRadius(labelRadius)\r\n .outerRadius(labelRadius)\r\n ;\r\n const text = this._labels.selectAll(\"text\").data(this.showLabels() ? this.d3Pie(data) : [], d => d.data[0]);\r\n\r\n const mergedText = text.enter().append(\"text\")\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n .attr(\"dy\", \".5em\")\r\n .on(\"click\", function (d) {\r\n context._slices.selectAll(\"g\").filter(function (d2) {\r\n if (d.data === d2.data) {\r\n context._selection.click(this);\r\n context.click(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\r\n }\r\n });\r\n })\r\n .on(\"dblclick\", function (d) {\r\n context._slices.selectAll(\"g\").filter(function (d2) {\r\n if (d.data === d2.data) {\r\n context.dblclick(context.rowToObj(d.data), context.columns()[1], context._selection.selected(this));\r\n }\r\n });\r\n })\r\n .merge(text)\r\n .text(d => this.getLabelText(d, true))\r\n .each(function (d, i) {\r\n const pos = context.d3LabelArc.centroid(d);\r\n const mid_angle = midAngle(d);\r\n pos[0] = labelRadius * (context.isLeftSide(mid_angle) ? 1 : -1);\r\n context._labelPositions.push({\r\n top: pos[1],\r\n bottom: pos[1] + context.labelHeight()\r\n });\r\n });\r\n if (this.showLabels()) {\r\n this.adjustForOverlap();\r\n mergedText.transition()\r\n .style(\"font-size\", this.labelHeight() + \"px\")\r\n .attr(\"transform\", (d, i) => {\r\n const pos = context.d3LabelArc.centroid(d);\r\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\r\n pos[1] = context._labelPositions[i].top;\r\n return \"translate(\" + pos + \")\";\r\n })\r\n .style(\"text-anchor\", d => this.isLeftSide(midAngle(d)) ? \"start\" : \"end\");\r\n }\r\n\r\n text.exit()\r\n .remove();\r\n\r\n const polyline = this._labels.selectAll(\"polyline\").data(this.showLabels() ? this.d3Pie(data) : [], d => this.getLabelText(d, true));\r\n\r\n polyline.enter()\r\n .append(\"polyline\")\r\n .merge(polyline).transition()\r\n .attr(\"points\", function (d, i) {\r\n const pos = context.d3LabelArc.centroid(d);\r\n const pos1 = context.d3Arc.centroid(d);\r\n const pos2 = [...pos];\r\n pos[0] = labelRadius * (context.isLeftSide(midAngle(d)) ? 1 : -1);\r\n pos[1] = context._labelPositions[i].top;\r\n return [pos1, pos2, pos];\r\n });\r\n\r\n polyline.exit()\r\n .remove();\r\n\r\n if (this.showLabels()) {\r\n this.centerOnLabels();\r\n }\r\n function midAngle(d) {\r\n return d.startAngle + (d.endAngle - d.startAngle) / 2;\r\n }\r\n\r\n function arcTween(outerRadiusDelta, delay) {\r\n return function () {\r\n d3Select(this).transition().delay(delay).attrTween(\"d\", function (d: any) {\r\n const i = d3Interpolate(d.outerRadius, outerRadius + outerRadiusDelta);\r\n return function (t) { d.outerRadius = i(t); return context.d3Arc(d); };\r\n });\r\n };\r\n }\r\n }\r\n\r\n isLeftSide(midAngle) {\r\n midAngle = normalizeRadians(midAngle);\r\n const isLeft = midAngle > Math.PI * 2 ? midAngle : midAngle < Math.PI && midAngle > 0;\r\n return isLeft;\r\n }\r\n\r\n getQuadrant(radians) {\r\n let quad = 0;\r\n const rad = normalizeRadians(radians);\r\n quad = rad <= Math.PI * 1.0 && rad >= Math.PI * 0.5 ? 3 : quad;\r\n quad = rad <= Math.PI * 0.5 && rad >= Math.PI * 0.0 ? 2 : quad;\r\n quad = rad <= Math.PI * 0.0 && rad >= Math.PI * -0.5 ? 1 : quad;\r\n return quad;\r\n }\r\n\r\n centerOnLabels() {\r\n const gY = this.pos().y;\r\n const gY2 = gY * 2;\r\n const radius = this.calcOuterRadius();\r\n const top = Math.min(this._minLabelTop, -radius);\r\n const bottom = Math.max(this._maxLabelBottom, radius);\r\n const h = bottom - top;\r\n const heightDiff = gY2 - h;\r\n const absTop = Math.abs(this._minLabelTop);\r\n let yShift = 0;\r\n if (bottom > gY) {\r\n yShift = gY - bottom + (this.labelHeight() / 2);\r\n yShift -= heightDiff / 2;\r\n } else if (top < 0 && absTop > gY) {\r\n yShift = absTop - gY + (this.labelHeight() / 2);\r\n yShift += heightDiff / 2;\r\n }\r\n const pos = this.pos();\r\n this.pos({\r\n y: pos.y + yShift,\r\n x: pos.x\r\n });\r\n }\r\n\r\n adjustForOverlap() {\r\n const labelHeight = this.labelHeight();\r\n this._quadIdxArr.forEach((arr, quad) => {\r\n this._quadIdxArr[quad].sort((a, b) => {\r\n if (quad === 1 || quad === 2) {\r\n return this._labelPositions[a].top > this._labelPositions[b].top ? -1 : 1;\r\n } else if (quad === 0 || quad === 3) {\r\n return this._labelPositions[a].top > this._labelPositions[b].top ? 1 : -1;\r\n }\r\n });\r\n let prevTop;\r\n this._quadIdxArr[quad].forEach((n, i) => {\r\n if (i > 0) {\r\n if (quad === 1 || quad === 2) {\r\n if (prevTop < this._labelPositions[n].bottom) {\r\n const overlap = this._labelPositions[n].bottom - prevTop;\r\n this._labelPositions[n].top -= overlap;\r\n this._labelPositions[n].bottom -= overlap;\r\n }\r\n } else if (quad === 0 || quad === 3) {\r\n if (prevTop + labelHeight > this._labelPositions[n].top) {\r\n const overlap = Math.abs(this._labelPositions[n].top) - Math.abs(prevTop + labelHeight);\r\n this._labelPositions[n].top -= overlap;\r\n this._labelPositions[n].bottom -= overlap;\r\n }\r\n }\r\n }\r\n prevTop = this._labelPositions[n].top;\r\n });\r\n });\r\n this._minLabelTop = 0;\r\n this._maxLabelBottom = 0;\r\n this._quadIdxArr.forEach((arr, quad) => {\r\n this._quadIdxArr[quad].forEach((n, i) => {\r\n if (this._minLabelTop > this._labelPositions[n].top) {\r\n this._minLabelTop = this._labelPositions[n].top;\r\n }\r\n if (this._maxLabelBottom < this._labelPositions[n].bottom) {\r\n this._maxLabelBottom = this._labelPositions[n].bottom;\r\n }\r\n });\r\n });\r\n }\r\n\r\n exit(domNode, element) {\r\n super.exit(domNode, element);\r\n }\r\n\r\n updateD3Pie() {\r\n const startAngle = normalizeRadians(degreesToRadians(this.startAngle()));\r\n\r\n switch (this.sortDataByValue()) {\r\n case \"ascending\":\r\n this.d3Pie.sort(sortAscending);\r\n break;\r\n case \"descending\":\r\n this.d3Pie.sort(sortDescending);\r\n break;\r\n default:\r\n this.d3Pie.sort(null);\r\n }\r\n\r\n this.d3Pie\r\n .padAngle(0.0025)\r\n .startAngle(startAngle)\r\n .endAngle(2 * Math.PI + startAngle)\r\n .value(function (d) {\r\n return d[1];\r\n })\r\n ;\r\n }\r\n\r\n paletteID: (_?: string) => string | Pie;\r\n useClonedPalette: (_?: boolean) => boolean | Pie;\r\n outerText: (_?: boolean) => boolean | Pie;\r\n innerRadius: { (): number; (_: number): Pie; };\r\n innerRadius_exists: () => boolean;\r\n\r\n // I2DChart\r\n _palette;\r\n fillColor: (row: any[], column: string, value: number) => string;\r\n textColor: (row: any[], column: string, value: number) => string;\r\n click: (row, column, selected) => void;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n tooltipStyle: () => \"default\" | \"none\" | \"series-table\";\r\n tooltipTick: { (): boolean; (_: boolean): Pie; };\r\n tooltipTick_default: { (): boolean; (_: boolean): Pie; };\r\n tooltipOffset: { (): number; (_: number): Pie; };\r\n tooltipOffset_default: { (): number; (_: number): Pie; };\r\n\r\n // SimpleSelectionMixin\r\n _selection: Utility.SimpleSelection;\r\n}\r\n\r\nPie.prototype._class += \" chart_Pie\";\r\nPie.prototype.implements(I2DChart.prototype);\r\nPie.prototype.implements(ITooltip.prototype);\r\nPie.prototype.mixin(Utility.SimpleSelectionMixin);\r\nexport interface Pie {\r\n showSeriesValue(): boolean;\r\n showSeriesValue(_: boolean): this;\r\n seriesValueFormat(): string;\r\n seriesValueFormat(_: string): this;\r\n showSeriesPercentage(): boolean;\r\n showSeriesPercentage(_: boolean): this;\r\n minOuterRadius(): number;\r\n minOuterRadius(_: number): this;\r\n startAngle(): number;\r\n startAngle(_: number): this;\r\n labelHeight(): number;\r\n labelHeight(_: number): this;\r\n seriesPercentageFormat(): string;\r\n seriesPercentageFormat(_: string): this;\r\n showLabels(): boolean;\r\n showLabels(_: boolean): this;\r\n sortDataByValue(): \"none\" | \"ascending\" | \"descending\";\r\n sortDataByValue(_: \"none\" | \"ascending\" | \"descending\"): this;\r\n}\r\nPie.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, wedge labels will display\");\r\nPie.prototype.publish(\"showSeriesValue\", false, \"boolean\", \"Append data series value next to label\", null, { disable: w => !w.showLabels() });\r\nPie.prototype.publish(\"seriesValueFormat\", \",.0f\", \"string\", \"Number format used for formatting series values\", null, { disable: w => !w.showSeriesValue() });\r\nPie.prototype.publish(\"showSeriesPercentage\", false, \"boolean\", \"Append data series percentage next to label\", null, { disable: w => !w.showLabels() });\r\nPie.prototype.publish(\"seriesPercentageFormat\", \",.0f\", \"string\", \"Number format used for formatting series percentages\", null, { disable: w => !w.showSeriesPercentage() });\r\nPie.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Pie.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\r\nPie.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\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 } });\r\nPie.prototype.publish(\"minOuterRadius\", 20, \"number\", \"Minimum outer radius (pixels)\");\r\nPie.prototype.publish(\"startAngle\", 0, \"number\", \"Starting angle of the first (and largest) wedge (degrees)\");\r\nPie.prototype.publish(\"labelHeight\", 12, \"number\", \"Font size of labels (pixels)\", null, { disable: w => !w.showLabels() });\r\nPie.prototype.publish(\"sortDataByValue\", \"descending\", \"set\", \"Sort data by value\", [\"none\", \"ascending\", \"descending\"]);\r\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\";\r\n\r\nexport class HalfPie extends Pie {\r\n constructor() {\r\n super();\r\n }\r\n postUpdate(domNode, element) {\r\n super.postUpdate(domNode, element);\r\n let x = this._pos.x;\r\n let y = this._pos.y;\r\n if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\r\n x -= this._size.width / 2;\r\n y -= this._size.height / 2;\r\n }\r\n y += (this._size.height / 4);\r\n this._element.attr(\"transform\", \"translate(\" + x + \",\" + y + \")scale(\" + this._widgetScale + \")\");\r\n }\r\n updateD3Pie() {\r\n super.updateD3Pie();\r\n this.d3Pie\r\n .startAngle(-Math.PI / 2)\r\n .endAngle(Math.PI / 2)\r\n ;\r\n }\r\n}\r\nHalfPie.prototype._class += \" chart_HalfPie\";\r\n","import { max, Palette } from \"@hpcc-js/common\";\r\nimport { XYAxis } from \"./XYAxis\";\r\n\r\nexport class Heat extends XYAxis {\r\n\r\n protected _domForeignObject;\r\n protected _domCanvas;\r\n protected _heat;\r\n\r\n constructor() {\r\n super();\r\n this\r\n .xAxisGuideLines_default(true)\r\n .yAxisGuideLines_default(true)\r\n ;\r\n }\r\n\r\n radius(r: number): this {\r\n this.radiusX(r);\r\n this.radiusY(r);\r\n return this;\r\n }\r\n\r\n layerEnter(host: XYAxis, element, duration: number = 250) {\r\n super.layerEnter(host, element, duration);\r\n this._domForeignObject = this.svg.insert(\"foreignObject\", `#${this.id() + \"_clippath\"}`);\r\n this._domCanvas = this._domForeignObject.append(\"xhtml:body\")\r\n .style(\"margin\", \"0px\")\r\n .style(\"padding\", \"0px\")\r\n .style(\"background-color\", \"transparent\")\r\n .append(\"canvas\")\r\n ;\r\n this._heat = simpleheat(this._domCanvas.node());\r\n }\r\n\r\n layerUpdate(host: XYAxis, element, duration: number = 250) {\r\n super.layerUpdate(host, element);\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n\r\n let width = this.width() - this.margin.left - this.margin.right;\r\n if (width < 0) width = 0;\r\n let height = this.height() - this.margin.top - this.margin.bottom;\r\n if (height < 0) height = 0;\r\n\r\n this._domForeignObject\r\n .attr(\"x\", this.margin.left)\r\n .attr(\"y\", this.margin.top)\r\n .attr(\"width\", width)\r\n .attr(\"height\", height)\r\n ;\r\n this._domCanvas\r\n .attr(\"width\", width)\r\n .attr(\"height\", height)\r\n ;\r\n\r\n const data = host.orientation() === \"horizontal\" ?\r\n this.data().map(r => [host.dataPos(r[0]), host.valuePos(r[1]), r[2]]) :\r\n this.data().map(r => [host.valuePos(r[1]), host.dataPos(r[0]), r[2]])\r\n ;\r\n\r\n const maxWeight = this.maxWeight_exists() ? this.maxWeight() : max(data, r => r[2]);\r\n\r\n if (this.paletteID() !== \"default\") {\r\n const gradient = {};\r\n const count = 8;\r\n const reverse = this.reversePalette();\r\n for (let i = 0; i < count; ++i) {\r\n gradient[i / count] = this._palette((reverse ? count - i : i) / count, 0, 1);\r\n }\r\n this._heat.gradient(gradient);\r\n } else {\r\n this._heat.gradient(this._heat.defaultGradient);\r\n }\r\n\r\n this._heat.resize();\r\n\r\n const radiusX = this.radiusAsPercent() ? this.radiusX() * width / 100 : this.radiusX();\r\n const radiusY = this.radiusAsPercent() ? this.radiusY() * height / 100 : this.radiusY();\r\n\r\n this._heat\r\n .clear()\r\n .radius(radiusX, radiusY, this.blur())\r\n .max(maxWeight)\r\n .data(data)\r\n .draw(this.minOpacity())\r\n ;\r\n }\r\n}\r\n\r\nHeat.prototype._class += \" chart_Heat\";\r\nHeat.prototype._palette = Palette.rainbow(\"default\");\r\n\r\nexport interface Heat {\r\n paletteID(): string;\r\n paletteID(_: string): this;\r\n useClonedPalette(): boolean;\r\n useClonedPalette(_: boolean): this;\r\n reversePalette(): boolean;\r\n reversePalette(_: boolean): this;\r\n\r\n radiusX(): number;\r\n radiusX(_: number): this;\r\n radiusY(): number;\r\n radiusY(_: number): this;\r\n radiusAsPercent(): boolean;\r\n radiusAsPercent(_: boolean): this;\r\n blur(): number;\r\n blur(_: number): this;\r\n\r\n maxWeight(): number;\r\n maxWeight(_: number): this;\r\n maxWeight_exists(): boolean;\r\n\r\n minOpacity(): number;\r\n minOpacity(_: number): this;\r\n}\r\n\r\nHeat.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Heat.prototype._palette.switch(), { tags: [\"Basic\"] });\r\nHeat.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\nHeat.prototype.publish(\"reversePalette\", false, \"boolean\", \"Reverse Palette Colors\", null, { disable: w => w.paletteID() === \"default\" });\r\n\r\nHeat.prototype.publish(\"radiusX\", 25, \"number\", \"Point X radius (25 by default)\");\r\nHeat.prototype.publish(\"radiusY\", 25, \"number\", \"Point Y radius (25 by default)\");\r\nHeat.prototype.publish(\"radiusAsPercent\", false, \"boolean\", \"Calculate RadiusX + RadiusY as % of size\");\r\nHeat.prototype.publish(\"blur\", 15, \"number\", \"Point blur radius (15 by default)\");\r\n\r\nHeat.prototype.publish(\"maxWeight\", undefined, \"number\", \"Clamp max weight to value (optional), omitting uses max data point\", undefined, { optional: true });\r\nHeat.prototype.publish(\"minOpacity\", 0.05, \"number\", \"Minimum point opacity (0.05 by default)\");\r\n\r\n// The following code is a modified version of \r\n// - https://github.com/mourner/simpleheat\r\n// - Licensed under BSD-2-Clause - https://github.com/mourner/simpleheat/blob/gh-pages/LICENSE\r\n// Changes:\r\n// * Fixed TS syntax issues\r\n// * Added support for eliptical shapes instead of circles\r\n\r\nfunction simpleheat(canvas): void {\r\n if (!(this instanceof simpleheat)) return new simpleheat(canvas);\r\n\r\n this._canvas = canvas = typeof canvas === \"string\" ? document.getElementById(canvas) : canvas;\r\n\r\n this._ctx = canvas.getContext(\"2d\");\r\n this._width = canvas.width;\r\n this._height = canvas.height;\r\n\r\n this._max = 1;\r\n this._data = [];\r\n}\r\n\r\nsimpleheat.prototype = {\r\n\r\n defaultRadius: 25,\r\n\r\n defaultGradient: {\r\n 0.4: \"blue\",\r\n 0.6: \"cyan\",\r\n 0.7: \"lime\",\r\n 0.8: \"yellow\",\r\n 1.0: \"red\"\r\n },\r\n\r\n data: function (data) {\r\n this._data = data;\r\n return this;\r\n },\r\n\r\n max: function (max) {\r\n this._max = max;\r\n return this;\r\n },\r\n\r\n add: function (point) {\r\n this._data.push(point);\r\n return this;\r\n },\r\n\r\n clear: function () {\r\n this._data = [];\r\n return this;\r\n },\r\n\r\n radius: function (rX, rY, blur) {\r\n blur = blur === undefined ? 15 : blur;\r\n\r\n // create a grayscale blurred ellipse image that we'll use for drawing points\r\n const ellipse = this._ellipse = this._createCanvas();\r\n const ctx = ellipse.getContext(\"2d\");\r\n const rX2 = this._r = rX + blur;\r\n const rY2 = this._r = rY + blur;\r\n\r\n ellipse.width = rX2 * 2;\r\n ellipse.height = rY2 * 2;\r\n\r\n ctx.shadowOffsetX = ctx.shadowOffsetY = rX2 * 2;\r\n ctx.shadowOffsetY = ctx.shadowOffsetY = rY2 * 2;\r\n ctx.shadowBlur = blur;\r\n ctx.shadowColor = \"black\";\r\n\r\n ctx.beginPath();\r\n ctx.ellipse(-rX2, -rY2, rX, rY, 0, 0, Math.PI * 2, true);\r\n ctx.closePath();\r\n ctx.fill();\r\n\r\n return this;\r\n },\r\n\r\n resize: function () {\r\n this._width = this._canvas.width;\r\n this._height = this._canvas.height;\r\n },\r\n\r\n gradient: function (grad) {\r\n // create a 256x1 gradient that we'll use to turn a grayscale heatmap into a colored one\r\n const canvas = this._createCanvas(),\r\n ctx = canvas.getContext(\"2d\"),\r\n gradient = ctx.createLinearGradient(0, 0, 0, 256);\r\n\r\n canvas.width = 1;\r\n canvas.height = 256;\r\n\r\n for (const i in grad) {\r\n gradient.addColorStop(+i, grad[i]);\r\n }\r\n\r\n ctx.fillStyle = gradient;\r\n ctx.fillRect(0, 0, 1, 256);\r\n\r\n this._grad = ctx.getImageData(0, 0, 1, 256).data;\r\n\r\n return this;\r\n },\r\n\r\n draw: function (minOpacity) {\r\n if (!this._ellipse) this.radius(this.defaultRadius, this.defaultRadius);\r\n if (!this._grad) this.gradient(this.defaultGradient);\r\n\r\n const ctx = this._ctx;\r\n\r\n ctx.clearRect(0, 0, this._width, this._height);\r\n\r\n // draw a grayscale heatmap by putting a blurred ellipse at each data point\r\n for (let i = 0, len = this._data.length, p; i < len; i++) {\r\n p = this._data[i];\r\n if (p[2] < 0) {\r\n p[2] = 0;\r\n } else if (p[2] > this._max) {\r\n p[2] = this._max;\r\n }\r\n ctx.globalAlpha = Math.max(p[2] / this._max, minOpacity === undefined ? 0.05 : minOpacity);\r\n ctx.drawImage(this._ellipse, p[0] - this._r, p[1] - this._r);\r\n }\r\n\r\n // colorize the heatmap, using opacity value of each pixel to get the right color from our gradient\r\n const colored = ctx.getImageData(0, 0, this._width, this._height);\r\n this._colorize(colored.data, this._grad);\r\n ctx.putImageData(colored, 0, 0);\r\n\r\n return this;\r\n },\r\n\r\n _colorize: function (pixels, gradient) {\r\n for (let i = 0, len = pixels.length, j; i < len; i += 4) {\r\n j = pixels[i + 3] * 4; // get gradient color from opacity value\r\n\r\n if (j) {\r\n pixels[i] = gradient[j];\r\n pixels[i + 1] = gradient[j + 1];\r\n pixels[i + 2] = gradient[j + 2];\r\n }\r\n }\r\n },\r\n\r\n _createCanvas: function () {\r\n if (typeof document !== \"undefined\") {\r\n return document.createElement(\"canvas\");\r\n } else {\r\n // create a new canvas instance in node.js\r\n // the canvas class needs to have a default constructor without any parameter\r\n return new this._canvas.constructor();\r\n }\r\n }\r\n};\r\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\";\r\nimport { InputField } from \"@hpcc-js/common\";\r\nimport { extent as d3Extent, max as d3Max, min as d3Min } from \"d3-array\";\r\nimport { hexbin as d3HexBin } from \"d3-hexbin\";\r\nimport { XYAxis } from \"./XYAxis\";\r\n\r\nimport \"../src/HexBin.css\";\r\n\r\nexport class HexBin extends XYAxis {\r\n static __inputs: InputField[] = [{\r\n id: \"x\",\r\n type: \"any\"\r\n }, {\r\n id: \"y\",\r\n type: \"number\"\r\n }];\r\n\r\n protected _hexbin;\r\n protected _dataMinWeight;\r\n protected _dataMaxWeight;\r\n constructor() {\r\n super();\r\n I2DAggrChart.call(this);\r\n this.tooltipValueFormat_default(\",.0f\");\r\n ITooltip.call(this);\r\n this.tooltipHTML(d => {\r\n const seriesExtent = d3Extent<{ label: any, value: any }>(d, d => d.label);\r\n const labelExtent = d3Extent<{ label: any, value: any }>(d, d => d.value);\r\n return this.tooltipFormat({\r\n series: seriesExtent[0] === seriesExtent[1] ? seriesExtent[0] : `${seriesExtent[0]} -> ${seriesExtent[1]}`,\r\n label: labelExtent[0] === labelExtent[1] ? labelExtent[0] : `${labelExtent[0]} -> ${labelExtent[1]}`,\r\n value: d.length\r\n });\r\n });\r\n this._hexbin = d3HexBin()\r\n .x(d => d.x)\r\n .y(d => d.y)\r\n ;\r\n this\r\n .xAxisGuideLines_default(false)\r\n .yAxisGuideLines_default(false)\r\n .xAxisType_default(\"linear\")\r\n ;\r\n }\r\n\r\n xPos(host: XYAxis, d) {\r\n return host.orientation() === \"horizontal\" ? host.dataPos(d.label) : host.valuePos(d.value);\r\n }\r\n\r\n yPos(host: XYAxis, d) {\r\n return host.orientation() === \"horizontal\" ? host.valuePos(d.value) : host.dataPos(d.label);\r\n }\r\n\r\n layerUpdate(host: XYAxis, element, duration: number = 250) {\r\n super.layerUpdate(host, element, duration);\r\n const context = this;\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n if (this.useClonedPalette()) {\r\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\r\n }\r\n\r\n this._hexbin\r\n .extent([0, 0], [this.width(), this.height()])\r\n .radius(this.binSize())\r\n ;\r\n\r\n const flatData = this.flattenData();\r\n const dataPoints = flatData.map(d => {\r\n return {\r\n x: context.xPos(host, d),\r\n y: context.yPos(host, d),\r\n label: host.parseData(d.label),\r\n value: host.parseValue(d.value),\r\n origRow: d\r\n };\r\n });\r\n const hexBinPoints = this._hexbin(dataPoints);\r\n const minBinPoints = d3Min(hexBinPoints, function (d: any) { return d.length; });\r\n const maxBinPoints = d3Max(hexBinPoints, function (d: any) { return d.length; });\r\n this._dataMinWeight = minBinPoints;\r\n this._dataMaxWeight = maxBinPoints;\r\n\r\n const points = element.selectAll(\".hexagon\").data(hexBinPoints, function (d) { return d.i + \"_\" + d.j; });\r\n points.enter().append(\"path\")\r\n .attr(\"class\", \"hexagon\")\r\n .call(host._selection.enter.bind(host._selection))\r\n .on(\"click\", function (d: any) {\r\n const data = context.data();\r\n context.click(d.map(row => host.rowToObj(data[row.origRow.rowIdx])), context.columns()[1], host._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d: any) {\r\n const data = context.data();\r\n context.dblclick(d.map(row => host.rowToObj(data[row.origRow.rowIdx])), context.columns()[1], host._selection.selected(this));\r\n })\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(0)\"; })\r\n .merge(points).transition().duration(duration)\r\n .attr(\"d\", this._hexbin.hexagon())\r\n .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(1)\"; })\r\n .style(\"fill\", function (d) { return context._palette(d.length, minBinPoints, maxBinPoints); })\r\n ;\r\n points.exit().transition().duration(duration)\r\n .attr(\"transform\", function (d) { return \"translate(\" + d.x + \",\" + d.y + \")scale(0)\"; })\r\n .remove()\r\n ;\r\n }\r\n\r\n exit(domNode, element) {\r\n super.exit(domNode, element);\r\n }\r\n\r\n // Events ---\r\n click(row: object[], column, selected) {\r\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\r\n }\r\n dblclick(row: object[], column, selected) {\r\n // console.log(\"Click: \" + JSON.stringify(row) + \", \" + column + \", \" + selected);\r\n }\r\n\r\n // ITooltip\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n tooltipValueFormat: (_) => string;\r\n tooltipValueFormat_default: (_) => string;\r\n\r\n paletteID: { (): string; (_: string): HexBin; };\r\n useClonedPalette: { (): boolean; (_: boolean): HexBin; };\r\n binSize: { (): number; (_: number): HexBin; };\r\n}\r\nHexBin.prototype._class += \" chart_HexBin\";\r\nHexBin.prototype.implements(I2DAggrChart.prototype);\r\nHexBin.prototype.implements(ITooltip.prototype);\r\n\r\nHexBin.prototype.publish(\"paletteID\", \"Blues\", \"set\", \"Color palette for this widget\", HexBin.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\r\nHexBin.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\nHexBin.prototype.publish(\"binSize\", 20, \"number\", \"Bin radius\", null, { range: { min: 1, max: 300, step: 1 } });\r\n","import { Scatter } from \"./Scatter\";\r\n\r\nimport \"../src/Line.css\";\r\n\r\nexport class Line extends Scatter {\r\n constructor() {\r\n super();\r\n\r\n this\r\n .interpolate_default(\"linear\")\r\n ;\r\n }\r\n}\r\nLine.prototype._class += \" chart_Line\";\r\n","import { Pie } from \"./Pie\";\r\n\r\nexport class QuarterPie extends Pie {\r\n constructor() {\r\n super();\r\n }\r\n postUpdate(domNode, element) {\r\n super.postUpdate(domNode, element);\r\n let x = this.orientation() === \"left\" ? 0 : this._size.width;\r\n let y = this._size.height;\r\n if (this._drawStartPos === \"origin\" && this._target instanceof SVGElement) {\r\n x -= this._size.width / 2;\r\n y -= this._size.height / 2;\r\n }\r\n this._element.attr(\"transform\", \"translate(\" + x + \",\" + y + \")scale(\" + this._widgetScale + \")\");\r\n }\r\n updateD3Pie() {\r\n super.updateD3Pie();\r\n this.d3Pie\r\n .startAngle(this.orientation() === \"left\" ? 0 : -Math.PI / 2)\r\n .endAngle(this.orientation() === \"left\" ? Math.PI / 2 : 0)\r\n ;\r\n }\r\n calcOuterRadius() {\r\n const maxTextWidth = this.textSize(this.data().map(d => this.getLabelText({ data: d })), \"Verdana\", 12).width;\r\n return Math.min(this._size.width - maxTextWidth - 10, this._size.height - 12 * 3) - 2;\r\n }\r\n}\r\nQuarterPie.prototype._class += \" chart_QuarterPie\";\r\n\r\nexport interface QuarterPie {\r\n orientation(): string;\r\n orientation(_: string): this;\r\n}\r\nQuarterPie.prototype.publish(\"orientation\", \"left\", \"set\", \"Determines the placement and start/end angle.\", [\"left\", \"right\"]);\r\n","import { SVGWidget } from \"@hpcc-js/common\";\r\nimport { scaleLinear as d3ScaleLinear } from \"d3-scale\";\r\n\r\nexport class QuartileCandlestick extends SVGWidget {\r\n protected _g;\r\n protected _leftLine;\r\n protected _rightLine;\r\n protected _midLine;\r\n protected _midOuterRect;\r\n protected _midInnerRect1;\r\n protected _midInnerRect2;\r\n protected _q0text;\r\n protected _q1text;\r\n protected _q2text;\r\n protected _q3text;\r\n protected _q4text;\r\n protected _q0val;\r\n protected _q1val;\r\n protected _q2val;\r\n protected _q3val;\r\n protected _q4val;\r\n constructor() {\r\n super();\r\n }\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this._g = element.append(\"g\");\r\n this._leftLine = this._g.append(\"rect\");\r\n this._rightLine = this._g.append(\"rect\");\r\n this._midLine = this._g.append(\"rect\");\r\n this._midOuterRect = this._g.append(\"rect\");\r\n this._midInnerRect1 = this._g.append(\"rect\");\r\n this._midInnerRect2 = this._g.append(\"rect\");\r\n this._q0text = this._g.append(\"text\");\r\n this._q1text = this._g.append(\"text\");\r\n this._q2text = this._g.append(\"text\");\r\n this._q3text = this._g.append(\"text\");\r\n this._q4text = this._g.append(\"text\");\r\n this._q0val = this._g.append(\"text\");\r\n this._q1val = this._g.append(\"text\");\r\n this._q2val = this._g.append(\"text\");\r\n this._q3val = this._g.append(\"text\");\r\n this._q4val = this._g.append(\"text\");\r\n }\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n const valueSize = (this.orientation() === \"horizontal\" ? this.width() : this.height()) - this.lineWidth();\r\n const domainSize = this.orientation() === \"horizontal\" ? this.height() : this.width();\r\n const scale = d3ScaleLinear()\r\n .domain([\r\n this.data()[0],\r\n this.data()[4]\r\n ])\r\n .range([\r\n this.edgePadding(),\r\n valueSize - this.edgePadding()\r\n ])\r\n ;\r\n const candleWidth = this.candleWidth_exists() ? this.candleWidth() : domainSize;\r\n const lineWidth = this.lineWidth();\r\n const lineColor = this.lineColor();\r\n const roundedCorners = this.roundedCorners();\r\n const q0x = this.edgePadding();\r\n let q1x = scale(this.data()[1]);\r\n let q2x = scale(this.data()[2]);\r\n let q3x = scale(this.data()[3]);\r\n const dataTop = -candleWidth / 2;\r\n const dataBottom = candleWidth / 2;\r\n const upperTextRotation = this.upperTextRotation();\r\n const lowerTextRotation = this.lowerTextRotation();\r\n const padding = this.textPadding();\r\n const labelFontSize = this.labelFontSize();\r\n const valueFontSize = this.valueFontSize();\r\n const sz = Math.max(labelFontSize, valueFontSize);\r\n const q4x = valueSize - q0x;\r\n if (sz > 0) {\r\n while (q1x - q0x < sz) {\r\n q1x += sz;\r\n }\r\n while (q2x - q1x < sz) {\r\n q2x += sz;\r\n }\r\n while (q3x - q2x < sz) {\r\n q3x += sz;\r\n }\r\n while (q4x - q3x < sz) {\r\n q3x -= sz;\r\n }\r\n while (q3x - q2x < sz) {\r\n q2x -= sz;\r\n }\r\n while (q2x - q1x < sz) {\r\n q1x -= sz;\r\n }\r\n }\r\n let transX = (-valueSize / 2) - (this.lineWidth() / 2);\r\n let transY = 0;\r\n let rotate = 0;\r\n const s = 1;\r\n let textScale = 1;\r\n let labelAnchor = \"start\";\r\n let valueAnchor = \"end\";\r\n if (this.orientation() === \"vertical\") {\r\n transX = 0;\r\n transY = valueSize / 2 + (this.lineWidth() / 2);\r\n rotate = -90;\r\n labelAnchor = \"end\";\r\n valueAnchor = \"start\";\r\n textScale = -1;\r\n }\r\n this._g\r\n .style(\"shape-rendering\", \"crispEdges\")\r\n .attr(\"transform\", `translate(${transX},${transY})rotate(${rotate})scale(${s})`)\r\n ;\r\n this._leftLine\r\n .attr(\"fill\", lineColor)\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", lineWidth)\r\n .attr(\"x\", q0x)\r\n .attr(\"y\", dataTop)\r\n .attr(\"rx\", roundedCorners)\r\n .attr(\"ry\", roundedCorners)\r\n ;\r\n this._rightLine\r\n .attr(\"class\", \"right-line\")\r\n .attr(\"fill\", lineColor)\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", lineWidth)\r\n .attr(\"x\", q4x)\r\n .attr(\"y\", dataTop)\r\n .attr(\"rx\", roundedCorners)\r\n .attr(\"ry\", roundedCorners)\r\n ;\r\n this._midLine\r\n .attr(\"fill\", lineColor)\r\n .attr(\"height\", lineWidth)\r\n .attr(\"width\", q4x - q0x)\r\n .attr(\"x\", q0x)\r\n .attr(\"y\", -lineWidth / 2)\r\n ;\r\n this._midOuterRect\r\n .attr(\"fill\", lineColor)\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"x\", q1x)\r\n .attr(\"y\", dataTop)\r\n .attr(\"rx\", roundedCorners)\r\n .attr(\"ry\", roundedCorners)\r\n ;\r\n this._midInnerRect1\r\n .attr(\"fill\", this.innerRectColor())\r\n .attr(\"height\", candleWidth - (lineWidth * 2))\r\n .attr(\"width\", q2x - (q1x + (lineWidth * 2)))\r\n .attr(\"x\", q1x + lineWidth)\r\n .attr(\"y\", lineWidth - (candleWidth / 2))\r\n .attr(\"rx\", roundedCorners * 0.618)\r\n .attr(\"ry\", roundedCorners * 0.618)\r\n ;\r\n this._midInnerRect2\r\n .attr(\"fill\", this.innerRectColor())\r\n .attr(\"height\", candleWidth - (lineWidth * 2))\r\n .attr(\"width\", q3x - q2x - lineWidth)\r\n .attr(\"x\", q2x)\r\n .attr(\"y\", lineWidth - (candleWidth / 2))\r\n .attr(\"rx\", roundedCorners * 0.618)\r\n .attr(\"ry\", roundedCorners * 0.618)\r\n ;\r\n this._q0text\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showLabels() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q0x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", labelFontSize)\r\n .attr(\"text-anchor\", labelAnchor)\r\n .attr(\"alignment-baseline\", \"hanging\")\r\n .text(this.columns()[0])\r\n ;\r\n this._q1text\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showLabels() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q1x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", labelFontSize)\r\n .attr(\"text-anchor\", labelAnchor)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .text(this.columns()[1])\r\n ;\r\n this._q2text\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showLabels() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q2x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", labelFontSize)\r\n .attr(\"text-anchor\", labelAnchor)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .text(this.columns()[2])\r\n ;\r\n this._q3text\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showLabels() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q3x}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", labelFontSize)\r\n .attr(\"text-anchor\", labelAnchor)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .text(this.columns()[3])\r\n ;\r\n this._q4text\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showLabels() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q4x + lineWidth}, ${dataTop - padding})rotate(${upperTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", labelFontSize)\r\n .attr(\"text-anchor\", labelAnchor)\r\n .attr(\"alignment-baseline\", \"baseline\")\r\n .text(this.columns()[4])\r\n ;\r\n this._q0val\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showValues() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q0x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", valueFontSize)\r\n .attr(\"text-anchor\", valueAnchor)\r\n .attr(\"alignment-baseline\", \"hanging\")\r\n .text(this.data()[0])\r\n ;\r\n this._q1val\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showValues() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q1x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", valueFontSize)\r\n .attr(\"text-anchor\", valueAnchor)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .text(this.data()[1])\r\n ;\r\n this._q2val\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showValues() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q2x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", valueFontSize)\r\n .attr(\"text-anchor\", valueAnchor)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .text(this.data()[2])\r\n ;\r\n this._q3val\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showValues() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q3x}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", valueFontSize)\r\n .attr(\"text-anchor\", valueAnchor)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .text(this.data()[3])\r\n ;\r\n this._q4val\r\n .attr(\"height\", candleWidth)\r\n .attr(\"width\", q3x - q1x)\r\n .attr(\"display\", this.showValues() ? null : \"none\")\r\n .attr(\"fill\", this.textColor())\r\n .attr(\"x\", 0)\r\n .attr(\"y\", 0)\r\n .attr(\"transform\", `translate(${q4x + lineWidth}, ${dataBottom + padding})rotate(${lowerTextRotation})scale(${textScale})`)\r\n .attr(\"font-size\", valueFontSize)\r\n .attr(\"text-anchor\", valueAnchor)\r\n .attr(\"alignment-baseline\", \"baseline\")\r\n .text(this.data()[4])\r\n ;\r\n }\r\n}\r\nQuartileCandlestick.prototype._class += \" chart_QuartileCandlestick\";\r\n\r\nexport interface QuartileCandlestick {\r\n orientation(): \"horizontal\" | \"vertical\";\r\n orientation(_: \"horizontal\" | \"vertical\"): this;\r\n textPadding(): number;\r\n textPadding(_: number): this;\r\n edgePadding(): number;\r\n edgePadding(_: number): this;\r\n candleWidth(): number;\r\n candleWidth(_: number): this;\r\n candleWidth_exists(): boolean;\r\n lineWidth(): number;\r\n lineWidth(_: number): this;\r\n lineColor(): string;\r\n lineColor(_: string): this;\r\n innerRectColor(): string;\r\n innerRectColor(_: string): this;\r\n lowerTextRotation(): number;\r\n lowerTextRotation(_: number): this;\r\n upperTextRotation(): number;\r\n upperTextRotation(_: number): this;\r\n roundedCorners(): number;\r\n roundedCorners(_: number): this;\r\n labelFontSize(): number;\r\n labelFontSize(_: number): this;\r\n valueFontSize(): number;\r\n valueFontSize(_: number): this;\r\n textColor(): string;\r\n textColor(_: string): this;\r\n showLabels(): boolean;\r\n showLabels(_: boolean): this;\r\n showValues(): boolean;\r\n showValues(_: boolean): this;\r\n}\r\nQuartileCandlestick.prototype.publish(\"textColor\", \"black\", \"html-color\", \"Color of label and value text\");\r\nQuartileCandlestick.prototype.publish(\"showLabels\", true, \"boolean\", \"If true, labels will be shown\");\r\nQuartileCandlestick.prototype.publish(\"showValues\", true, \"boolean\", \"If true, values will be shown\");\r\nQuartileCandlestick.prototype.publish(\"orientation\", \"horizontal\", \"set\", \"Determines layout\", [\"horizontal\", \"vertical\"]);\r\nQuartileCandlestick.prototype.publish(\"valueFontSize\", 12, \"number\", \"Font size of value text (pixels)\");\r\nQuartileCandlestick.prototype.publish(\"labelFontSize\", 12, \"number\", \"Font size of label text (pixels)\");\r\nQuartileCandlestick.prototype.publish(\"roundedCorners\", 8, \"number\", \"Radius of rounded rect corners (pixels)\");\r\nQuartileCandlestick.prototype.publish(\"lineWidth\", 4, \"number\", \"Width of lines (pixels)\");\r\nQuartileCandlestick.prototype.publish(\"candleWidth\", null, \"number\", \"Height of outer rect (pixels)\", null, {optional: true});\r\nQuartileCandlestick.prototype.publish(\"textPadding\", 8, \"number\", \"Padding between outer rect and text (pixels)\");\r\nQuartileCandlestick.prototype.publish(\"edgePadding\", 30, \"number\", \"Padding between outer rect and left/right sides (pixels)\");\r\nQuartileCandlestick.prototype.publish(\"lineColor\", \"#333\", \"html-color\", \"Color of outer rect and lines\");\r\nQuartileCandlestick.prototype.publish(\"innerRectColor\", \"white\", \"html-color\", \"Color of the inner rects\");\r\nQuartileCandlestick.prototype.publish(\"upperTextRotation\", -60, \"number\", \"Rotation of label text (degrees)\");\r\nQuartileCandlestick.prototype.publish(\"lowerTextRotation\", -60, \"number\", \"Rotation of value text (degrees)\");\r\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\r\nimport { SVGWidget, Utility } from \"@hpcc-js/common\";\r\nimport { select as d3Select } from \"d3-selection\";\r\n\r\nimport \"../src/Radar.css\";\r\nexport class Radar extends SVGWidget {\r\n\r\n constructor() {\r\n super();\r\n INDChart.call(this);\r\n ITooltip.call(this);\r\n Utility.SimpleSelectionMixin.call(this);\r\n }\r\n\r\n mapShape(shape) {\r\n switch (shape) {\r\n case \"rectangle\":\r\n return \"rect\";\r\n case \"circle\":\r\n return \"circle\";\r\n case \"cross\":\r\n return \"path\";\r\n default:\r\n }\r\n }\r\n setPointAttributes(element, x, y) {\r\n const shape = this.mapShape(this.pointShape());\r\n const context = this;\r\n switch (shape) {\r\n case \"rect\":\r\n element\r\n .attr(\"width\", context.pointSize())\r\n .attr(\"height\", context.pointSize())\r\n .style(\"fill\", d => this.strokeColor(d.data, d.column, d.value))\r\n ;\r\n break;\r\n case \"circle\":\r\n element\r\n .attr(\"r\", context.pointSize() / 2)\r\n .attr(\"cx\", x)\r\n .attr(\"cy\", y)\r\n .style(\"fill\", d => this.strokeColor(d.data, d.column, d.value))\r\n ;\r\n break;\r\n case \"path\":\r\n const half_size = context.pointSize() / 2;\r\n element\r\n .attr(\"d\", function (d: any) {\r\n return \"M\" + (x - half_size) + \" \" + (y - half_size) + \" \" +\r\n \"L\" + (x + half_size) + \" \" + (y + half_size) + \" \" +\r\n \"M\" + (x - half_size) + \" \" + (y + half_size) + \" \" +\r\n \"L\" + (x + half_size) + \" \" + (y - half_size);\r\n })\r\n .style(\"stroke\", d => this.strokeColor(d.data, d.column, d.value))\r\n ;\r\n break;\r\n default:\r\n }\r\n }\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this._selection.widgetElement(element);\r\n\r\n this\r\n .tooltipHTML(d => {\r\n return this.tooltipFormat({ label: d.label, series: d.column, value: d.value });\r\n })\r\n ;\r\n }\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n this._palette = this._palette.switch(this.paletteID());\r\n const context = this;\r\n const h = this.height();\r\n const w = this.width();\r\n const half_h = (h / 2);\r\n const half_w = (w / 2);\r\n\r\n const columns = this.columns();\r\n const data = this.data();\r\n const flatData = this.flattenData(columns, data).map((d: any, idx: number) => {\r\n d.shape = this.mapShape(this.pointShape());\r\n d.column = columns[d.colIdx];\r\n d.row = data[idx];\r\n return d;\r\n });\r\n const domain_points = [];\r\n const arc = this.degrees2radians(360 / this.data().length);\r\n const max_label_h = this.fontSize();\r\n let max_label_w = 0;\r\n flatData.filter(n => n.colIdx === 1).forEach(n => {\r\n const isize = super.textSize(n.label, `${this.fontFamily()}`, this.fontSize());\r\n if (max_label_w < isize.width) max_label_w = isize.width;\r\n });\r\n const radius = Math.min(half_h - max_label_h, half_w - max_label_w);\r\n const labels = element\r\n .selectAll(\".label\")\r\n .data(flatData.filter(n => n.colIdx === 1))\r\n ;\r\n const max_val = Math.max.apply(context, flatData.map(n => n.value));\r\n labels.enter()\r\n .append(\"text\")\r\n .attr(\"class\", \"label\")\r\n .attr(\"text-anchor\", \"middle\")\r\n .merge(labels)\r\n .attr(\"font-size\", this.fontSize())\r\n .attr(\"font-family\", this.fontFamily())\r\n .each(function (this: SVGElement, n, i) {\r\n const xy = context.polar2cartesian(radius, (i * arc) - (Math.PI / 2));\r\n domain_points.push(xy.map(n => n * context.labelPaddingRatio()));\r\n let text_anchor = \"middle\";\r\n const _x = Math.round(xy[0]);\r\n text_anchor = _x > 0 ? \"start\" : text_anchor;\r\n text_anchor = _x < 0 ? \"end\" : text_anchor;\r\n d3Select(this)\r\n .attr(\"text-anchor\", text_anchor)\r\n .attr(\"x\", xy[0])\r\n .attr(\"y\", xy[1])\r\n ;\r\n })\r\n .text(n => n.label)\r\n ;\r\n labels.exit().remove();\r\n const domains = element\r\n .selectAll(\".domain\")\r\n .data(flatData.filter(n => n.colIdx === 1));\r\n domains.enter()\r\n .append(\"line\")\r\n .classed(\"domain\", true)\r\n .style(\"stroke\", \"#000\")\r\n .style(\"stroke-opacity\", \"0.75\")\r\n .style(\"stroke-width\", \"1px\")\r\n .merge(domains)\r\n .attr(\"x1\", 0)\r\n .attr(\"y1\", 0)\r\n .attr(\"x2\", (n, i) => domain_points[i][0])\r\n .attr(\"y2\", (n, i) => domain_points[i][1]);\r\n domains.exit().remove();\r\n const value_guides = element\r\n .selectAll(\".value_guide\")\r\n .data(this.valueGuideRatios())\r\n ;\r\n value_guides.enter()\r\n .append(\"polygon\")\r\n .classed(\"value_guide\", true)\r\n .style(\"stroke\", \"grey\")\r\n .style(\"stroke-opacity\", \"0.75\")\r\n .style(\"stroke-width\", \"0.3px\")\r\n .merge(value_guides)\r\n .each(function (mult, i) {\r\n const poly_points = [];\r\n domain_points.forEach((domain_point, row_idx) => {\r\n poly_points.push([\r\n domain_point[0] * mult,\r\n domain_point[1] * mult\r\n ]);\r\n });\r\n d3Select(this)\r\n .attr(\"points\", poly_points.join(\" \"))\r\n .attr(\"stroke\", \"rgb(0, 0, 0)\")\r\n .attr(\"stroke-opacity\", 0.75)\r\n .attr(\"stroke-width\", 0.3)\r\n .attr(\"fill-opacity\", 0)\r\n ;\r\n })\r\n ;\r\n value_guides.exit().remove();\r\n\r\n const value_guide_text = element\r\n .selectAll(\".value_guide_text\")\r\n .data(this.valueGuideRatios())\r\n ;\r\n value_guide_text.enter()\r\n .append(\"text\")\r\n .attr(\"class\", \"value_guide_text\")\r\n .attr(\"text-anchor\", \"start\")\r\n .attr(\"font-size\", this.fontSize())\r\n .attr(\"font-family\", this.fontFamily())\r\n .merge(value_guide_text)\r\n .attr(\"x\", 2)\r\n .attr(\"y\", mult => domain_points[0][1] * mult)\r\n .text((mult, i) => Math.round(mult * max_val))\r\n ;\r\n value_guides.exit().remove();\r\n\r\n // Polygon shapes ---\r\n const series_polygons = element\r\n .selectAll(\".area\")\r\n .data(columns.filter((n, i) => i > 0));\r\n series_polygons.enter()\r\n .append(\"polygon\")\r\n .attr(\"class\", \"area\")\r\n .style(\"stroke-opacity\", \"0.75\")\r\n .style(\"stroke-width\", \"0.3px\")\r\n .merge(series_polygons)\r\n .style(\"stroke\", d => this.strokeColor([], d, 0))\r\n .style(\"fill\", d => this.fillColor([], d, 0))\r\n .style(\"fill-opacity\", this.fillOpacity())\r\n .attr(\"points\", (d, col_idx) => {\r\n return domain_points.map((domain_point, row_idx) => {\r\n const val = data[row_idx][col_idx + 1];\r\n const val_mult = val === 0 ? 0 : val / max_val;\r\n return domain_point[0] * val_mult + \",\" + domain_point[1] * val_mult;\r\n }).join(\" \");\r\n });\r\n series_polygons.exit().remove();\r\n\r\n // Points ---\r\n const point_elm = element\r\n .selectAll(\".point\")\r\n .data(flatData);\r\n point_elm.enter()\r\n .append(\"g\")\r\n .attr(\"class\", \"point\")\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n .on(\"click\", function (d: any, _idx) {\r\n const data_row = context.data()[d.rowIdx];\r\n const row_obj = context.rowToObj(data_row);\r\n const selected = context._selection.selected(this);\r\n context.click(row_obj, context.columns()[d.colIdx], selected);\r\n })\r\n .on(\"dblclick\", function (d: any, _idx) {\r\n context.dblclick(context.rowToObj(context.data()[d.rowIdx]), d.column, context._selection.selected(this));\r\n })\r\n .each(function (d) {\r\n const element = d3Select(this);\r\n element.append(\"circle\")\r\n .attr(\"class\", \"pointSelection\")\r\n .attr(\"r\", context.pointSize())\r\n .call(context._selection.enter.bind(context._selection))\r\n ;\r\n element.append(context.mapShape(context.pointShape()))\r\n .attr(\"class\", \"pointShape\")\r\n ;\r\n })\r\n .merge(point_elm)\r\n .each(function (d) {\r\n const element = d3Select(this);\r\n const val_mult = d.value === 0 ? 0 : d.value / max_val;\r\n const x = domain_points[d.rowIdx][0] * val_mult;\r\n const y = domain_points[d.rowIdx][1] * val_mult;\r\n element.select(\".pointSelection\")\r\n .attr(\"cx\", x)\r\n .attr(\"cy\", y)\r\n ;\r\n\r\n const pointElement = element.select(\".pointShape\")\r\n .style(\"stroke\", context.strokeColor(d.row, d.column, d.value))\r\n .style(\"fill\", context.fillColor(d.row, d.column, d.value))\r\n ;\r\n context.setPointAttributes(pointElement, x, y);\r\n })\r\n ;\r\n point_elm.exit().remove();\r\n }\r\n\r\n polar2cartesian(r, theta) {\r\n return [r * Math.cos(theta), r * Math.sin(theta)];\r\n }\r\n cartesian2polar(x, y) {\r\n return [Math.atan2(y, x), Math.sqrt(x * x + y * y)];\r\n }\r\n degrees2radians(d) {\r\n return d / 57.295779513;\r\n }\r\n radians2degrees(r) {\r\n return r * 57.295779513;\r\n }\r\n point_in_polygon(point, vs) {\r\n const x = point[0];\r\n const y = point[1];\r\n let inside = false;\r\n for (let i = 0, j = vs.length - 1; i < vs.length; j = i++) {\r\n const xi = vs[i][0];\r\n const yi = vs[i][1];\r\n const xj = vs[j][0];\r\n const yj = vs[j][1];\r\n const intersect = ((yi > y) !== (yj > y))\r\n && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);\r\n if (intersect) inside = !inside;\r\n }\r\n return inside;\r\n }\r\n\r\n // INDChart\r\n _palette;\r\n fillColor: (row, column, value) => string;\r\n strokeColor: (row, column, value) => string;\r\n textColor: (row, column, value) => string;\r\n click: (row, column, selected) => void;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n\r\n _selection;\r\n}\r\nRadar.prototype._class += \" chart_Radar\";\r\nRadar.prototype.implements(INDChart.prototype);\r\nRadar.prototype.implements(ITooltip.prototype);\r\nRadar.prototype.mixin(Utility.SimpleSelectionMixin);\r\n\r\nexport interface Radar {\r\n labelPaddingRatio(): number;\r\n labelPaddingRatio(_: number): this;\r\n fillOpacity(): number;\r\n fillOpacity(_: number): this;\r\n fontFamily(): string;\r\n fontFamily(_: string): this;\r\n fontSize(): number;\r\n fontSize(_: number): this;\r\n valueGuideRatios(): any;\r\n valueGuideRatios(_: any): this;\r\n valueGuideFontSize(): number;\r\n valueGuideFontSize(_: number): this;\r\n valueGuideFontFamily(): string;\r\n valueGuideFontFamily(_: string): this;\r\n paletteID(): string;\r\n paletteID(_: string): this;\r\n pointShape(): string;\r\n pointShape(_: string): this;\r\n pointSize(): number;\r\n pointSize(_: number): this;\r\n}\r\n\r\nRadar.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", Radar.prototype._palette.switch());\r\nRadar.prototype.publish(\"pointShape\", \"cross\", \"set\", \"pointShape\", [\"circle\", \"rectangle\", \"cross\"]);\r\nRadar.prototype.publish(\"pointSize\", 6, \"number\", \"Point Size\", null, { range: { min: 1, step: 1, max: 200 } });\r\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\");\r\nRadar.prototype.publish(\"fillOpacity\", 0.66, \"number\", \"Opacity of the data polygon(s)\");\r\nRadar.prototype.publish(\"fontFamily\", \"\", \"string\", \"fontFamily\");\r\nRadar.prototype.publish(\"fontSize\", 16, \"number\", \"fontSize\");\r\nRadar.prototype.publish(\"labelPaddingRatio\", 0.9, \"number\", \"labelPaddingRatio\");\r\n","import { INDChart, ITooltip } from \"@hpcc-js/api\";\r\nimport { InputField, SVGWidget, Utility } from \"@hpcc-js/common\";\r\nimport { interpolate as d3Interpolate } from \"d3-interpolate\";\r\nimport { scaleBand as d3ScaleBand, scaleLinear as d3ScaleLinear } from \"d3-scale\";\r\nimport { arc as d3Arc } from \"d3-shape\";\r\n\r\nimport \"../src/RadialBar.css\";\r\n\r\nexport class RadialBar extends SVGWidget {\r\n static __inputs: InputField[] = [{\r\n id: \"label\",\r\n type: \"any\"\r\n }, {\r\n id: \"values\",\r\n type: \"number\"\r\n }];\r\n\r\n private _domainScale = d3ScaleBand();\r\n private _valueScale = d3ScaleLinear();\r\n private _d3Arc = d3Arc<[string, number]>()\r\n .startAngle(0)\r\n .endAngle((d) => this._valueScale(d[1]))\r\n ;\r\n\r\n protected _arcs;\r\n protected _axialAxis;\r\n protected _radialAxis;\r\n\r\n constructor() {\r\n super();\r\n INDChart.call(this);\r\n ITooltip.call(this);\r\n Utility.SimpleSelectionMixin.call(this);\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this._selection.widgetElement(element);\r\n this.tooltipHTML(d => {\r\n return this.tooltipFormat({ label: d[0], value: d[1] });\r\n });\r\n\r\n this._radialAxis = element.append(\"g\")\r\n .attr(\"class\", \"r axis\")\r\n ;\r\n this._axialAxis = element.append(\"g\")\r\n .attr(\"class\", \"a axis\")\r\n ;\r\n this._arcs = element.append(\"g\")\r\n .attr(\"class\", \"data\")\r\n ;\r\n }\r\n\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n const context = this;\r\n const maxValue = Math.max(this.valueDomainHigh_exists() ? this.valueDomainHigh() : 0, ...this.data().map(d => d[1]));\r\n\r\n this._valueScale\r\n .domain([0, maxValue])\r\n .range([0, this.radians(this.valueMaxAngle())])\r\n ;\r\n\r\n const ticks = this._valueScale.ticks(this.tickCount());\r\n\r\n const maxTextWidth = this.textSize(ticks.map(d => \"\" + d), \"Verdana\", 12).width;\r\n const chartRadius = (Math.min(this.width() - (10 + maxTextWidth) * 2, this.height() - (10 + 12) * 2) / 2);\r\n\r\n // Domain Axis (x-axis) ---\r\n const domainData = this.data().map(d => d[0]);\r\n\r\n this._domainScale\r\n .domain(domainData)\r\n .range([0, chartRadius])\r\n .padding(this.domainPadding())\r\n ;\r\n const domainPadding = this._domainScale.step() * this._domainScale.padding();\r\n\r\n const domainCircles = this._radialAxis.selectAll(\"circle\").data(domainData);\r\n domainCircles.enter().append(\"circle\")\r\n .attr(\"fill\", \"transparent\")\r\n .merge(domainCircles)\r\n .attr(\"r\", d => this._domainScale(d) + this._domainScale.step() - domainPadding / 2)\r\n ;\r\n domainCircles.exit().remove();\r\n\r\n const domainText = this._radialAxis.selectAll(\".arc-text\").data(domainData);\r\n domainText.enter().append(\"text\")\r\n .attr(\"class\", \"arc-text\")\r\n .attr(\"x\", -4)\r\n .attr(\"alignment-baseline\", \"middle\")\r\n .attr(\"text-anchor\", \"end\")\r\n .merge(domainText)\r\n .attr(\"y\", d => -this._domainScale(d) - this._domainScale.bandwidth() / 2)\r\n .text(d => d);\r\n domainText.exit().remove();\r\n\r\n // Value Axis (y-axis) ---\r\n const valueLines = this._axialAxis.selectAll(\"line\").data(ticks);\r\n valueLines.enter().append(\"line\")\r\n .merge(valueLines)\r\n .attr(\"x2\", d => chartRadius * Math.cos(this._valueScale(d) - this.radians(90)))\r\n .attr(\"y2\", d => chartRadius * Math.sin(this._valueScale(d) - this.radians(90)))\r\n ;\r\n valueLines.exit().remove();\r\n\r\n const valueText = this._axialAxis.selectAll(\"text\").data(ticks);\r\n valueText.enter().append(\"text\")\r\n .style(\"dominant-baseline\", \"central\")\r\n .merge(valueText)\r\n .attr(\"x\", d => (chartRadius + 10) * Math.cos(this._valueScale(d) - this.radians(90)))\r\n .attr(\"y\", d => (chartRadius + 10) * Math.sin(this._valueScale(d) - this.radians(90)))\r\n .style(\"text-anchor\", d => {\r\n const middleZone = 20;\r\n const angle = this.degrees(this._valueScale(d));\r\n if (angle >= 0 && angle <= middleZone ||\r\n angle >= 180 - middleZone && angle <= 180 + middleZone ||\r\n angle >= 360 - middleZone && angle <= 360\r\n ) {\r\n return \"middle\";\r\n } else if (angle >= 180 && angle <= 360) {\r\n return \"end\";\r\n } else {\r\n return null;\r\n }\r\n })\r\n .text(d => d)\r\n ;\r\n valueText.exit().remove();\r\n\r\n const valueColumn = this.columns().length > 1 ? this.columns()[1] : \"\";\r\n // Data (arcs) ---\r\n this._d3Arc\r\n .innerRadius(d => this._domainScale(d[0]))\r\n .outerRadius(d => this._domainScale(d[0]) + this._domainScale.bandwidth())\r\n ;\r\n const arcs = this._arcs.selectAll(\"path\").data(this.data(), d => d[0]);\r\n arcs.enter().append(\"path\")\r\n .attr(\"class\", \"arc\")\r\n .call(this._selection.enter.bind(this._selection))\r\n .on(\"mouseout.tooltip\", this.tooltip.hide)\r\n .on(\"mousemove.tooltip\", this.tooltip.show)\r\n .on(\"click\", function (d: any, _idx) {\r\n context.click(context.rowToObj(d), valueColumn, context._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d: any, _idx) {\r\n context.dblclick(context.rowToObj(d), valueColumn, context._selection.selected(this));\r\n })\r\n .merge(arcs)\r\n .style(\"fill\", (d, i) => this.fillColor(d, d[0], d[1]))\r\n .transition()\r\n .delay((d, i) => i * this.transitionDelay())\r\n .duration(this.transitionDuration())\r\n .attrTween(\"d\", (d, indx) => {\r\n const interpolate = d3Interpolate(d._current || 0, d[1]);\r\n d._current = d[1];\r\n return t => this._d3Arc([d[0], interpolate(t)], indx);\r\n })\r\n ;\r\n arcs.exit().remove();\r\n }\r\n\r\n degrees(radians) {\r\n return radians * 180 / Math.PI;\r\n }\r\n\r\n radians(degrees) {\r\n return degrees * Math.PI / 180;\r\n }\r\n\r\n // INDChart\r\n _palette;\r\n fillColor: (row, column, value) => string;\r\n strokeColor: (row, column, value) => string;\r\n textColor: (row, column, value) => string;\r\n click: (row, column, selected) => void;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip\r\n tooltip;\r\n tooltipHTML: (_) => string;\r\n tooltipFormat: (_) => string;\r\n _selection;\r\n}\r\nRadialBar.prototype._class += \" chart_RadialBar\";\r\nRadialBar.prototype.implements(INDChart.prototype);\r\nRadialBar.prototype.implements(ITooltip.prototype);\r\nRadialBar.prototype.mixin(Utility.SimpleSelectionMixin);\r\nexport interface RadialBar {\r\n paletteID(): string;\r\n paletteID(_: string): this;\r\n tickCount(): number;\r\n tickCount(_: number): this;\r\n domainPadding(): number;\r\n domainPadding(_: number): this;\r\n valueMaxAngle(): number;\r\n valueMaxAngle(_: number): this;\r\n valueDomainHigh(): number;\r\n valueDomainHigh(_: number): this;\r\n valueDomainHigh_exists(): boolean;\r\n transitionDelay(): number;\r\n transitionDelay(_: number): this;\r\n transitionDuration(): number;\r\n transitionDuration(_: number): this;\r\n}\r\nRadialBar.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", RadialBar.prototype._palette.switch());\r\nRadialBar.prototype.publish(\"tickCount\", 10, \"number\", \"Number of ticks to display\");\r\nRadialBar.prototype.publish(\"domainPadding\", 0.25, \"number\", \"Padding between chart edge and container edge (0..1)\");\r\nRadialBar.prototype.publish(\"valueMaxAngle\", 270, \"number\", \"Maximum angular length of a bar (degrees)\");\r\nRadialBar.prototype.publish(\"valueDomainHigh\", null, \"number\", \"Value domain high\", undefined, { optional: true });\r\nRadialBar.prototype.publish(\"transitionDelay\", 100, \"number\", \"Delay between the start of each row animation (ms)\");\r\nRadialBar.prototype.publish(\"transitionDuration\", 750, \"number\", \"Duration of a row's animation (ms)\");\r\n","import { format as d3Format, HTMLWidget, Palette } from \"@hpcc-js/common\";\r\nimport { QuartileCandlestick } from \"./QuartileCandlestick\";\r\nimport { Scatter } from \"./Scatter\";\r\n\r\nconst rainbow = Palette.rainbow(\"Blues\");\r\nconst palette = Palette.ordinal(\"Quartile\", [rainbow(100, 0, 100), rainbow(50, 0, 100), rainbow(50, 0, 100), rainbow(75, 0, 100)]);\r\npalette(\"Std. Dev.\");\r\npalette(\"MinMax\");\r\npalette(\"25%\");\r\npalette(\"50%\");\r\n\r\ntype View = \"min_max\" | \"25_75\" | \"normal\";\r\ntype Tick = { label: string, value: number };\r\ntype Ticks = Tick[];\r\ntype AxisTick = { label: string, value: string };\r\ntype AxisTicks = AxisTick[];\r\n\r\nfunction myFormatter(format: string): (num: number) => string {\r\n const formatter = d3Format(format);\r\n return function (num: number) {\r\n const strVal = (Math.round(num * 100) / 100).toString();\r\n if (strVal.length <= 4) return strVal;\r\n return formatter(num);\r\n };\r\n}\r\n\r\nexport type StatChartView = \"min_max\" | \"25_75\" | \"normal\";\r\nexport type Quartiles = [number, number, number, number, number];\r\nexport type Data = [[number, number, number, number, number, number, number]];\r\n\r\nexport class StatChart extends HTMLWidget {\r\n\r\n protected _selectElement: any;\r\n protected _tickFormatter: (_: number) => string;\r\n\r\n protected _bellCurve: Scatter = new Scatter()\r\n .columns([\"\", \"Std. Dev.\"])\r\n .paletteID(\"Quartile\")\r\n .interpolate_default(\"basis\")\r\n .pointSize(0)\r\n .xAxisType(\"linear\")\r\n .xAxisOverlapMode(\"none\")\r\n .xAxisTickFormat(\",\")\r\n .yAxisHidden(true)\r\n .yAxisDomainLow(0)\r\n .yAxisDomainHigh(110)\r\n .yAxisGuideLines(false) as Scatter\r\n ;\r\n\r\n protected _candle = new QuartileCandlestick()\r\n .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\"])\r\n .edgePadding(0)\r\n .roundedCorners(1)\r\n .lineWidth(1)\r\n .upperTextRotation(-90)\r\n .lowerTextRotation(-90)\r\n .labelFontSize(0)\r\n .valueFontSize(0)\r\n .lineColor(rainbow(90, 0, 100))\r\n .innerRectColor(rainbow(10, 0, 100))\r\n ;\r\n\r\n constructor() {\r\n super();\r\n this\r\n .columns([\"Min\", \"25%\", \"50%\", \"75%\", \"Max\", \"Mean\", \"Std. Dev.\"])\r\n ;\r\n }\r\n\r\n protected stdDev(degrees: number): number {\r\n return this.mean() + degrees * this.standardDeviation();\r\n }\r\n\r\n protected formatStdDev(degrees: number): string {\r\n return this._tickFormatter(this.stdDev(degrees));\r\n }\r\n\r\n protected quartile(q: 0 | 1 | 2 | 3 | 4): number {\r\n return this.quartiles()[q];\r\n }\r\n\r\n protected formatQ(q: 0 | 1 | 2 | 3 | 4): string {\r\n return this._tickFormatter(this.quartile(q));\r\n }\r\n\r\n protected domain(mode: View): [number, number] {\r\n switch (mode) {\r\n case \"25_75\":\r\n return [this.quartile(1), this.quartile(3)];\r\n case \"normal\":\r\n return [this.stdDev(-4), this.stdDev(4)];\r\n case \"min_max\":\r\n default:\r\n return [this.quartile(0), this.quartile(4)];\r\n }\r\n }\r\n\r\n protected min(): number {\r\n return this.quartile(0);\r\n }\r\n\r\n protected max(): number {\r\n return this.quartile(4);\r\n }\r\n\r\n data(): Data;\r\n data(_: Data): this;\r\n data(_?: Data): Data | this {\r\n if (!arguments.length) return [[...this.quartiles(), this.mean(), this.standardDeviation()]];\r\n const row = _[0];\r\n this.quartiles([row[0], row[1], row[2], row[3], row[4]]);\r\n this.mean(row[5]);\r\n this.standardDeviation(row[6]);\r\n return this;\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n\r\n this._bellCurve.target(element.append(\"div\").node());\r\n\r\n this._candle.target(element.append(\"div\").node());\r\n\r\n this._selectElement = element.append(\"div\")\r\n .style(\"position\", \"absolute\")\r\n .style(\"top\", \"0px\")\r\n .style(\"right\", \"0px\").append(\"select\")\r\n .on(\"change\", () => {\r\n this.view(this._selectElement.node().value);\r\n this.lazyRender();\r\n })\r\n ;\r\n this._selectElement.append(\"option\").attr(\"value\", \"min_max\").text(\"Min / Max\");\r\n this._selectElement.append(\"option\").attr(\"value\", \"25_75\").text(\"25% / 75%\");\r\n this._selectElement.append(\"option\").attr(\"value\", \"normal\").text(\"Normal\");\r\n }\r\n\r\n protected bellTicks(mode: View): AxisTicks {\r\n let ticks: Ticks;\r\n switch (mode) {\r\n case \"25_75\":\r\n ticks = [\r\n { label: this.formatQ(1), value: this.quartile(1) },\r\n { label: this.formatQ(2), value: this.quartile(2) },\r\n { label: this.formatQ(3), value: this.quartile(3) }\r\n ];\r\n break;\r\n case \"normal\":\r\n ticks = [\r\n { label: this.formatStdDev(-4), value: this.stdDev(-4) },\r\n { label: \"-3σ\", value: this.stdDev(-3) },\r\n { label: \"-2σ\", value: this.stdDev(-2) },\r\n { label: \"-1σ\", value: this.stdDev(-1) },\r\n { label: this.formatStdDev(0), value: this.stdDev(0) },\r\n { label: \"+1σ\", value: this.stdDev(1) },\r\n { label: \"+2σ\", value: this.stdDev(2) },\r\n { label: \"+3σ\", value: this.stdDev(3) },\r\n { label: this.formatStdDev(4), value: this.stdDev(4) }\r\n ];\r\n break;\r\n case \"min_max\":\r\n default:\r\n ticks = [\r\n { label: this.formatQ(0), value: this.quartile(0) },\r\n { label: this.formatQ(1), value: this.quartile(1) },\r\n { label: this.formatQ(2), value: this.quartile(2) },\r\n { label: this.formatQ(3), value: this.quartile(3) },\r\n { label: this.formatQ(4), value: this.quartile(4) }\r\n ];\r\n }\r\n\r\n const [domainLow, domainHigh] = this.domain(this._selectElement.node().value);\r\n return ticks\r\n .filter(sd => sd.value >= domainLow && sd.value <= domainHigh)\r\n .map(sd => ({ label: sd.label, value: sd.value.toString() }))\r\n ;\r\n }\r\n\r\n updateScatter() {\r\n const mode = this._selectElement.node().value;\r\n const [domainLow, domainHigh] = this.domain(mode);\r\n const padding = (domainHigh - domainLow) * (this.domainPadding() / 100);\r\n\r\n this._bellCurve\r\n .xAxisDomainLow(domainLow - padding)\r\n .xAxisDomainHigh(domainHigh + padding)\r\n .xAxisTicks(this.bellTicks(mode))\r\n .data([\r\n [this.stdDev(-4), 0],\r\n [this.stdDev(-3), 0.3],\r\n [this.stdDev(-2), 5],\r\n [this.stdDev(-1), 68],\r\n [this.stdDev(0), 100],\r\n [this.stdDev(1), 68],\r\n [this.stdDev(2), 5],\r\n [this.stdDev(3), 0.3],\r\n [this.stdDev(4), 0]\r\n ])\r\n .resize({ width: this.width(), height: this.height() - this.candleHeight() })\r\n .render()\r\n ;\r\n }\r\n\r\n updateCandle() {\r\n const candleX = this._bellCurve.dataPos(this.quartile(0));\r\n const candleW = this._bellCurve.dataPos(this.quartile(4)) - candleX;\r\n this._candle\r\n .resize({ width: this.width(), height: this.candleHeight() })\r\n .pos({ x: (candleX + candleW / 2) + 2, y: this.candleHeight() / 2 })\r\n .width(candleW)\r\n .candleWidth(this.candleHeight())\r\n .data(this.quartiles())\r\n .render()\r\n ;\r\n }\r\n\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n this._tickFormatter = myFormatter(this.tickFormat());\r\n this._selectElement.node().value = this.view();\r\n this.updateScatter();\r\n this.updateCandle();\r\n }\r\n}\r\nStatChart.prototype._class += \" chart_Stat\";\r\n\r\nexport interface StatChart {\r\n view(): StatChartView;\r\n view(_: StatChartView): this;\r\n\r\n tickFormat(): string;\r\n tickFormat(_: string): this;\r\n candleHeight(): number;\r\n candleHeight(_: number): this;\r\n domainPadding(): number;\r\n domainPadding(_: number): this;\r\n\r\n mean(): number;\r\n mean(_: number): this;\r\n standardDeviation(): number;\r\n standardDeviation(_: number): this;\r\n quartiles(): Quartiles;\r\n quartiles(_: Quartiles): this;\r\n}\r\nStatChart.prototype.publish(\"view\", \"min_max\", \"set\", \"View\", [\"min_max\", \"25_75\", \"normal\"]);\r\n\r\nStatChart.prototype.publish(\"tickFormat\", \".2e\", \"string\", \"X-Axis Tick Format\");\r\nStatChart.prototype.publish(\"candleHeight\", 20, \"number\", \"Height of candle widget (pixels)\");\r\nStatChart.prototype.publish(\"domainPadding\", 10, \"number\", \"Domain value padding\");\r\n\r\nStatChart.prototype.publish(\"mean\", .5, \"number\", \"Mean\");\r\nStatChart.prototype.publish(\"standardDeviation\", .125, \"number\", \"Standard Deviation (σ)\");\r\nStatChart.prototype.publish(\"quartiles\", [0, .25, .5, .75, 1], \"object\", \"Quartiles (Min, 25%, 50%, 75%, Max)\");\r\n","import { Scatter } from \"./Scatter\";\r\n\r\nexport class Step extends Scatter {\r\n constructor() {\r\n super();\r\n\r\n this\r\n .interpolate_default(\"step\")\r\n ;\r\n }\r\n}\r\nStep.prototype._class += \" chart_Step\";\r\n","import { I2DChart } from \"@hpcc-js/api\";\r\nimport { HTMLWidget } from \"@hpcc-js/common\";\r\nimport { rgb as d3Rgb } from \"d3-color\";\r\nimport { select as d3Select } from \"d3-selection\";\r\n\r\nimport \"../src/Summary.css\";\r\n\r\nconst TEXT = \"text\";\r\nconst HTML = \"html\";\r\n\r\nexport class Summary extends HTMLWidget {\r\n protected _playIntervalIdx = 0;\r\n protected _mainDiv;\r\n protected _headerDiv;\r\n protected _textDiv;\r\n\r\n constructor() {\r\n super();\r\n this._tag = \"div\";\r\n\r\n this._drawStartPos = \"center\";\r\n this.playInterval(this.playInterval());\r\n }\r\n\r\n lookupFieldIdx(propID, defaultIdx?: number) {\r\n let retVal = defaultIdx;\r\n if (this[propID + \"_exists\"]()) {\r\n retVal = this.columns().indexOf(this[propID]());\r\n if (retVal < 0) {\r\n return undefined;\r\n }\r\n }\r\n return retVal;\r\n }\r\n\r\n lookupFieldText(propID, defaultIdx?: number) {\r\n if (this[propID + \"_exists\"]()) {\r\n return this[propID]();\r\n }\r\n if (defaultIdx !== undefined) {\r\n return this.columns()[defaultIdx] || \"\";\r\n }\r\n return \"\";\r\n }\r\n\r\n currentRow() {\r\n return this.data()[this._playIntervalIdx];\r\n }\r\n\r\n summaryData() {\r\n let labelFieldIdx; // undefined\r\n if (!this.hideLabel()) {\r\n labelFieldIdx = this.lookupFieldIdx(\"labelColumn\", 0);\r\n }\r\n const iconFieldIdx = this.lookupFieldIdx(\"iconColumn\");\r\n const valueFieldIdx = this.lookupFieldIdx(\"valueColumn\", 1);\r\n let moreIconIdx; // undefined\r\n let moreTextIdx; // undefined\r\n if (!this.hideMore()) {\r\n moreIconIdx = this.lookupFieldIdx(\"moreIconColumn\");\r\n moreTextIdx = this.lookupFieldIdx(\"moreTextColumn\");\r\n }\r\n const colorFillIdx = this.lookupFieldIdx(\"colorFillColumn\");\r\n const colorStrokeIdx = this.lookupFieldIdx(\"colorStrokeColumn\");\r\n return this.formattedData().map(function (row) {\r\n return {\r\n icon: iconFieldIdx === undefined ? this.icon() : row[iconFieldIdx],\r\n label: labelFieldIdx === undefined ? \"\" : row[labelFieldIdx],\r\n value: row[valueFieldIdx],\r\n moreIcon: moreIconIdx === undefined ? (this.hideMore() ? \"\" : this.moreIcon()) : row[moreIconIdx],\r\n moreText: moreTextIdx === undefined ? (this.hideMore() ? \"\" : this.moreText()) : row[moreTextIdx],\r\n fill: colorFillIdx === undefined ? this.colorFill() : row[colorFillIdx],\r\n stroke: colorStrokeIdx === undefined ? this.colorStroke() : row[colorStrokeIdx]\r\n };\r\n }, this);\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this._mainDiv = element.append(\"div\")\r\n ;\r\n const context = this;\r\n this._headerDiv = this._mainDiv.append(\"h2\")\r\n .on(\"click\", function () {\r\n context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"valueColumn\", 1), true);\r\n })\r\n .on(\"dblclick\", function () {\r\n context.dblclick(context.rowToObj(context.currentRow()), context.lookupFieldText(\"valueColumn\", 1), true);\r\n })\r\n ;\r\n this._textDiv = this._mainDiv.append(\"div\")\r\n .attr(\"class\", \"text\")\r\n .on(\"click\", function () {\r\n context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"labelColumn\", 0), true);\r\n })\r\n .on(\"dblclick\", function () {\r\n context.dblclick(context.rowToObj(context.currentRow()), context.lookupFieldText(\"labelColumn\", 0), true);\r\n })\r\n ;\r\n }\r\n\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n if (this.data().length) {\r\n\r\n }\r\n const data = this.summaryData();\r\n if (this._playIntervalIdx >= data.length) {\r\n this._playIntervalIdx = 0;\r\n }\r\n const row: any = this._playIntervalIdx < data.length ? data[this._playIntervalIdx] : [\"\", \"\"];\r\n element\r\n .style(\"width\", this.fixedSize() ? this.minWidth_exists() ? this.minWidth() + \"px\" : null : \"100%\")\r\n .style(\"height\", this.fixedSize() ? this.minHeight_exists() ? this.minHeight() + \"px\" : null : \"100%\")\r\n ;\r\n this._mainDiv\r\n .attr(\"class\", \"content bgIcon \" + row.icon)\r\n .transition()\r\n .style(\"background-color\", row.fill)\r\n .style(\"color\", row.stroke)\r\n .style(\"min-width\", this.minWidth_exists() ? this.minWidth() + \"px\" : null)\r\n .style(\"min-height\", this.minHeight_exists() ? this.minHeight() + \"px\" : null)\r\n .style(\"font-size\", this.iconFontSize() + \"px\")\r\n ;\r\n this._headerDiv\r\n .transition()\r\n .style(\"color\", row.stroke)\r\n .style(\"font-size\", this.headerFontSize() + \"px\")\r\n [this.valueHTML() ? HTML : TEXT](row.value)\r\n ;\r\n this._textDiv\r\n .style(\"font-size\", this.textFontSize() + \"px\")\r\n [this.labelHTML() ? HTML : TEXT](row.label)\r\n ;\r\n const context = this;\r\n const moreDivs = this._mainDiv.selectAll(\".more\").data([row]);\r\n const moreDivsEnter = moreDivs.enter()\r\n .append(\"div\")\r\n .attr(\"class\", \"more\")\r\n .on(\"click\", function (d) {\r\n context.click(context.rowToObj(context.currentRow()), context.lookupFieldText(\"moreTextColumn\") || \"more\", true);\r\n })\r\n .each(function () {\r\n const element2 = d3Select(this);\r\n element2.append(\"i\");\r\n element2.append(\"span\");\r\n })\r\n ;\r\n const moreDivsUpdate = moreDivsEnter\r\n .merge(moreDivs)\r\n .style(\"display\", this.hideMoreWrapper() ? \"none\" : null)\r\n .style(\"font-size\", this.moreFontSize() + \"px\")\r\n .style(\"height\", this.moreWrapperHeight_exists() ? this.moreWrapperHeight() + \"px\" : null)\r\n .transition()\r\n .style(\"background-color\", d3Rgb(row.fill).darker(0.75).toString())\r\n ;\r\n moreDivsUpdate\r\n .select(\"i\")\r\n .attr(\"class\", function (d) {\r\n return \"fa \" + d.moreIcon;\r\n })\r\n ;\r\n if (this.moreTextHTML()) {\r\n moreDivsUpdate.select(\"span\")\r\n .each(function (d) {\r\n this.innerHTML = d.moreText;\r\n });\r\n } else {\r\n moreDivsUpdate.select(\"span\").text(d => d.moreText);\r\n }\r\n moreDivs.exit().remove();\r\n }\r\n\r\n exit(domNode, element) {\r\n super.exit(domNode, element);\r\n }\r\n}\r\nSummary.prototype._class += \" chart_Summary\";\r\nSummary.prototype.implements(I2DChart.prototype);\r\n\r\nexport interface Summary {\r\n iconColumn(): string;\r\n iconColumn(_: string): this;\r\n iconColumn_exists(): boolean;\r\n icon(): string;\r\n icon(_: string): this;\r\n icon_exists(): boolean;\r\n\r\n headerFontSize(): number;\r\n headerFontSize(_: number): this;\r\n textFontSize(): number;\r\n textFontSize(_: number): this;\r\n moreFontSize(): number;\r\n moreFontSize(_: number): this;\r\n iconFontSize(): number;\r\n iconFontSize(_: number): this;\r\n\r\n hideLabel(): boolean;\r\n hideLabel(_: boolean): this;\r\n hideLabel_exists(): boolean;\r\n labelColumn(): string;\r\n labelColumn(_: string): this;\r\n labelColumn_exists(): boolean;\r\n labelHTML(): boolean;\r\n labelHTML(_: boolean): this;\r\n labelHTML_exists(): boolean;\r\n\r\n valueColumn(): string;\r\n valueColumn(_: string): this;\r\n valueColumn_exists(): boolean;\r\n valueHTML(): boolean;\r\n valueHTML(_: boolean): this;\r\n valueHTML_exists(): boolean;\r\n\r\n hideMore(): boolean;\r\n hideMore(_: boolean): this;\r\n hideMore_exists(): boolean;\r\n hideMoreWrapper(): boolean;\r\n hideMoreWrapper(_: boolean): this;\r\n moreWrapperHeight(): number;\r\n moreWrapperHeight(_: number): this;\r\n moreWrapperHeight_exists(): boolean;\r\n moreIconColumn(): string;\r\n moreIconColumn(_: string): this;\r\n moreIconColumn_exists(): boolean;\r\n moreIcon(): string;\r\n moreIcon(_: string): this;\r\n moreIcon_exists(): boolean;\r\n moreTextColumn(): string;\r\n moreTextColumn(_: string): this;\r\n moreTextColumn_exists(): boolean;\r\n moreText(): string;\r\n moreText(_: string): this;\r\n moreText_exists(): boolean;\r\n moreTextHTML(): boolean;\r\n moreTextHTML(_: boolean): this;\r\n moreTextHTML_exists(): boolean;\r\n\r\n colorFillColumn(): string;\r\n colorFillColumn(_: string): this;\r\n colorFillColumn_exists(): boolean;\r\n colorFill(): string;\r\n colorFill(_: string): this;\r\n colorFill_exists(): boolean;\r\n colorStrokeColumn(): string;\r\n colorStrokeColumn(_: string): this;\r\n colorStrokeColumn_exists(): boolean;\r\n colorStroke(): string;\r\n colorStroke(_: string): this;\r\n colorStroke_exists(): boolean;\r\n\r\n fixedSize(): boolean;\r\n fixedSize(_: boolean): this;\r\n fixedSize_exists(): boolean;\r\n minWidth(): number;\r\n minWidth(_: number): this;\r\n minWidth_exists(): boolean;\r\n minHeight(): number;\r\n minHeight(_: number): this;\r\n minHeight_exists(): boolean;\r\n playInterval(): number;\r\n playInterval(_: number): this;\r\n playInterval_exists(): boolean;\r\n\r\n // I2DChart ---\r\n click(row, column, selected);\r\n dblclick(row, column, selected);\r\n}\r\n\r\nSummary.prototype.publish(\"iconColumn\", null, \"set\", \"Select Icon Column\", function () { return this.columns(); }, { optional: true });\r\nSummary.prototype.publish(\"icon\", \"fa-briefcase\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.iconColumn() });\r\n\r\nSummary.prototype.publish(\"headerFontSize\", null, \"number\", \"headerFontSize\");\r\nSummary.prototype.publish(\"textFontSize\", null, \"number\", \"textFontSize\");\r\nSummary.prototype.publish(\"moreFontSize\", null, \"number\", \"moreFontSize\");\r\nSummary.prototype.publish(\"iconFontSize\", null, \"number\", \"iconFontSize\");\r\n\r\nSummary.prototype.publish(\"hideLabel\", false, \"boolean\", \"Hide label column\");\r\nSummary.prototype.publish(\"labelColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideLabel() });\r\nSummary.prototype.publish(\"labelHTML\", false, \"boolean\", \"Allow HTML\", null, { disable: (w) => w.hideLabel() });\r\n\r\nSummary.prototype.publish(\"valueColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\r\nSummary.prototype.publish(\"valueHTML\", false, \"boolean\", \"Allow HTML\");\r\n\r\nSummary.prototype.publish(\"hideMore\", false, \"boolean\", \"Hide More Information\");\r\nSummary.prototype.publish(\"hideMoreWrapper\", false, \"boolean\", \"Hide More Information Wrapper\");\r\nSummary.prototype.publish(\"moreWrapperHeight\", null, \"number\", \"Height of the 'more' text wrapper (pixels)\");\r\nSummary.prototype.publish(\"moreIconColumn\", null, \"set\", \"Select More Icon Column\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideMore() });\r\nSummary.prototype.publish(\"moreIcon\", \"fa-info-circle\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.hideMore() || w.moreIconColumn() });\r\nSummary.prototype.publish(\"moreTextColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true, disable: (w) => w.hideMore() });\r\nSummary.prototype.publish(\"moreText\", \"More Info\", \"string\", \"More text\", null, { disable: (w) => w.hideMore() || w.moreTextColumn() });\r\nSummary.prototype.publish(\"moreTextHTML\", false, \"boolean\", \"Allow HTML\", null, { disable: (w) => w.hideMore() });\r\n\r\nSummary.prototype.publish(\"colorFillColumn\", null, \"set\", \"Column for color\", function () { return this.columns(); }, { optional: true });\r\nSummary.prototype.publish(\"colorFill\", \"#3498db\", \"html-color\", \"Fill Color\", null, { disable: (w) => w.colorFillColumn() });\r\nSummary.prototype.publish(\"colorStrokeColumn\", null, \"set\", \"Column for color\", function () { return this.columns(); }, { optional: true });\r\nSummary.prototype.publish(\"colorStroke\", \"#ffffff\", \"html-color\", \"Fill Color\", null, { disable: (w) => w.colorStrokeColumn() });\r\n\r\nSummary.prototype.publish(\"fixedSize\", true, \"boolean\", \"Fix Size to Min Width/Height\");\r\nSummary.prototype.publish(\"minWidth\", 225, \"number\", \"Minimum Width\");\r\nSummary.prototype.publish(\"minHeight\", 150, \"number\", \"Minimum Height\");\r\nSummary.prototype.publish(\"playInterval\", null, \"number\", \"Play Interval\", null, { optional: true });\r\n\r\nconst playInterval = Summary.prototype.playInterval;\r\nSummary.prototype.playInterval = function (_?: number): number | any {\r\n const retVal = playInterval.apply(this, arguments);\r\n if (arguments.length) {\r\n if (this._playIntervalHandle) {\r\n clearInterval(this._playIntervalHandle);\r\n }\r\n const context = this;\r\n if (_) {\r\n this._playIntervalHandle = setInterval(function () {\r\n context._playIntervalIdx++;\r\n if (context._renderCount && context.data().length) {\r\n context.render();\r\n }\r\n }, _);\r\n }\r\n }\r\n return retVal;\r\n};\r\n","import { I2DChart } from \"@hpcc-js/api\";\r\nimport { CanvasWidget, Utility } from \"@hpcc-js/common\";\r\n\r\nexport class SummaryC extends CanvasWidget {\r\n protected _playIntervalIdx = 0;\r\n\r\n constructor() {\r\n super();\r\n I2DChart.call(this);\r\n this.playInterval(this.playInterval());\r\n }\r\n\r\n currentRow() {\r\n return this.data()[this._playIntervalIdx];\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter.apply(this, arguments);\r\n const { width, height } = this.size();\r\n domNode.height = height;\r\n domNode.width = width;\r\n }\r\n\r\n update(domNode, element) {\r\n super.update.apply(this, arguments);\r\n const context = this;\r\n if (this._playIntervalIdx >= this.data().length) {\r\n this._playIntervalIdx = 0;\r\n }\r\n const size = this.size();\r\n const minDimension = Math.min(size.width, size.height);\r\n const sizeRatio = this.fontSizeRatio();\r\n const labelIdx = this.columns().indexOf(this.labelColumn());\r\n const valueIdx = this.columns().indexOf(this.valueColumn());\r\n const bgColorIdx = this.columns().indexOf(this.colorFillColumn());\r\n const fontColorIdx = this.columns().indexOf(this.colorStrokeColumn());\r\n const iconIdx = this.columns().indexOf(this.iconColumn());\r\n const icon = iconIdx !== -1 ? this.currentRow()[iconIdx] : this.icon();\r\n const label = labelIdx !== -1 ? this.currentRow()[labelIdx] : \"\";\r\n const value = valueIdx !== -1 ? this.currentRow()[valueIdx] : \"\";\r\n const bgColor = bgColorIdx !== -1 ? this.currentRow()[bgColorIdx] : this.colorFill();\r\n const fontColor = fontColorIdx !== -1 ? this.currentRow()[fontColorIdx] : this.colorStroke();\r\n\r\n let mainFontSize = size.height * (sizeRatio - this.paddingSizeRatio());\r\n const subFontSize = size.height * (1 - sizeRatio - this.paddingSizeRatio());\r\n const iconSize = size.height * (this.iconSizeRatio() - this.paddingSizeRatio());\r\n const p = minDimension * this.paddingSizeRatio();\r\n const ctx = domNode.getContext(\"2d\");\r\n\r\n ctx.clearRect(0, 0, size.width, size.height);\r\n\r\n const fontFamily = context.fontFamily();\r\n\r\n ctx.fillStyle = bgColor;\r\n ctx.fillRect(0, 0, size.width, size.height);\r\n\r\n ctx.globalAlpha = this.iconOpacity();\r\n drawIcon(Utility.faChar(icon), iconSize, context.iconAnchor());\r\n\r\n ctx.globalAlpha = this.valueOpacity();\r\n mainFontSize = drawText(value, p, mainFontSize, context.valueAnchor());\r\n\r\n ctx.globalAlpha = this.labelOpacity();\r\n drawText(label, mainFontSize + p, subFontSize, context.labelAnchor());\r\n\r\n function drawText(text, y, fontSize, anchorMode) {\r\n ctx.textBaseline = \"top\";\r\n ctx.font = `${fontSize}px ${fontFamily}`;\r\n ctx.fillStyle = fontColor;\r\n let measurement = ctx.measureText(text);\r\n if (measurement.width > (size.width - (p * 2))) {\r\n const fontSizeMult = (size.width - (p * 2)) / measurement.width;\r\n fontSize = fontSize * fontSizeMult;\r\n ctx.font = `${fontSize}px ${fontFamily}`;\r\n measurement = ctx.measureText(text);\r\n }\r\n const x = getTextOffsetX(measurement.width, anchorMode);\r\n ctx.fillText(text, x, y);\r\n return fontSize;\r\n }\r\n\r\n function drawIcon(text, fontSize, anchorMode) {\r\n if (typeof text === \"undefined\") return;\r\n ctx.textBaseline = context.iconBaseline();\r\n ctx.font = `${fontSize}px FontAwesome`;\r\n ctx.fillStyle = fontColor;\r\n let measurement = ctx.measureText(text);\r\n if (measurement.width > (size.width - (p * 2))) {\r\n const fontSizeMult = (size.width - (p * 2)) / measurement.width;\r\n ctx.font = `${fontSize * fontSizeMult}px FontAwesome`;\r\n measurement = ctx.measureText(text);\r\n }\r\n const x = getTextOffsetX(measurement.width, anchorMode);\r\n const y = getTextOffsetY(context.iconBaseline());\r\n ctx.fillText(text, x, y);\r\n }\r\n\r\n function getTextOffsetX(width, anchorMode) {\r\n switch (anchorMode) {\r\n case \"start\":\r\n return p;\r\n case \"middle\":\r\n return (size.width / 2) - (width / 2);\r\n case \"end\":\r\n return size.width - width - p;\r\n }\r\n }\r\n function getTextOffsetY(anchorMode) {\r\n switch (anchorMode) {\r\n case \"top\":\r\n return p;\r\n case \"middle\":\r\n return size.height / 2;\r\n case \"bottom\":\r\n return size.height - p;\r\n }\r\n }\r\n }\r\n}\r\nSummaryC.prototype._class += \" chart_SummaryC\";\r\nSummaryC.prototype.implements(I2DChart.prototype);\r\n\r\nexport interface SummaryC {\r\n iconColumn(): string;\r\n iconColumn(_: string): this;\r\n iconColumn_exists(): boolean;\r\n icon(): string;\r\n icon(_: string): this;\r\n icon_exists(): boolean;\r\n iconOpacity(): number;\r\n iconOpacity(_: number): this;\r\n\r\n fontFamily(): string;\r\n fontFamily(_: string): this;\r\n\r\n labelColumn(): string;\r\n labelColumn(_: string): this;\r\n labelColumn_exists(): boolean;\r\n labelOpacity(): number;\r\n labelOpacity(_: number): this;\r\n\r\n valueColumn(): string;\r\n valueColumn(_: string): this;\r\n valueColumn_exists(): boolean;\r\n valueOpacity(): number;\r\n valueOpacity(_: number): this;\r\n\r\n fontSizeRatio(): number;\r\n fontSizeRatio(_: number): this;\r\n\r\n colorFillColumn(): string;\r\n colorFillColumn(_: string): this;\r\n colorFillColumn_exists(): boolean;\r\n colorFill(): string;\r\n colorFill(_: string): this;\r\n colorFill_exists(): boolean;\r\n colorStrokeColumn(): string;\r\n colorStrokeColumn(_: string): this;\r\n colorStrokeColumn_exists(): boolean;\r\n colorStroke(): string;\r\n colorStroke(_: string): this;\r\n colorStroke_exists(): boolean;\r\n\r\n fixedSize(): boolean;\r\n fixedSize(_: boolean): this;\r\n fixedSize_exists(): boolean;\r\n minWidth(): number;\r\n minWidth(_: number): this;\r\n minWidth_exists(): boolean;\r\n minHeight(): number;\r\n minHeight(_: number): this;\r\n minHeight_exists(): boolean;\r\n playInterval(): number;\r\n playInterval(_: number): this;\r\n playInterval_exists(): boolean;\r\n paddingSizeRatio(): number;\r\n paddingSizeRatio(_: number): this;\r\n iconSizeRatio(): number;\r\n iconSizeRatio(_: number): this;\r\n\r\n iconAnchor(): \"start\" | \"middle\" | \"end\";\r\n iconAnchor(_: \"start\" | \"middle\" | \"end\"): this;\r\n labelAnchor(): \"start\" | \"middle\" | \"end\";\r\n labelAnchor(_: \"start\" | \"middle\" | \"end\"): this;\r\n valueAnchor(): \"start\" | \"middle\" | \"end\";\r\n valueAnchor(_: \"start\" | \"middle\" | \"end\"): this;\r\n\r\n iconBaseline(): \"top\" | \"middle\" | \"bottom\";\r\n iconBaseline(_: \"top\" | \"middle\" | \"bottom\"): this;\r\n}\r\n\r\nSummaryC.prototype.publish(\"iconBaseline\", \"bottom\", \"string\", \"Text baseline for the icon\", [\"top\", \"middle\", \"bottom\"]);\r\nSummaryC.prototype.publish(\"iconAnchor\", \"end\", \"set\", \"Anchors the icon either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\r\nSummaryC.prototype.publish(\"valueAnchor\", \"start\", \"set\", \"Anchors the value either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\r\nSummaryC.prototype.publish(\"labelAnchor\", \"start\", \"set\", \"Anchors the label either at the start, middle, or end of the summary\", [\"start\", \"middle\", \"end\"]);\r\nSummaryC.prototype.publish(\"iconColumn\", null, \"set\", \"Select Icon Column\", function () { return this.columns(); }, { optional: true });\r\nSummaryC.prototype.publish(\"icon\", \"fa-briefcase\", \"string\", \"FA Char icon class\", null, { disable: (w) => w.iconColumn() });\r\n\r\nSummaryC.prototype.publish(\"fontFamily\", \"Arial\", \"string\", \"Font Family\");\r\n\r\nSummaryC.prototype.publish(\"labelColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\r\nSummaryC.prototype.publish(\"valueColumn\", null, \"set\", \"Select display value\", function () { return this.columns(); }, { optional: true });\r\n\r\nSummaryC.prototype.publish(\"colorFillColumn\", null, \"set\", \"Column for background color\", function () { return this.columns(); }, { optional: true });\r\nSummaryC.prototype.publish(\"colorFill\", \"#0097e6\", \"html-color\", \"Background Color\", null, { disable: (w) => w.colorFillColumn() });\r\nSummaryC.prototype.publish(\"colorStrokeColumn\", null, \"set\", \"Column for font color\", function () { return this.columns(); }, { optional: true });\r\nSummaryC.prototype.publish(\"colorStroke\", \"#2f3640\", \"html-color\", \"Font Color\", null, { disable: (w) => w.colorStrokeColumn() });\r\n\r\nSummaryC.prototype.publish(\"fixedSize\", true, \"boolean\", \"Fix Size to Min Width/Height\");\r\nSummaryC.prototype.publish(\"minWidth\", 225, \"number\", \"Minimum Width\");\r\nSummaryC.prototype.publish(\"minHeight\", 150, \"number\", \"Minimum Height\");\r\nSummaryC.prototype.publish(\"playInterval\", null, \"number\", \"Play Interval\", null, { optional: true });\r\n\r\nSummaryC.prototype.publish(\"fontSizeRatio\", 0.618, \"number\", \"Ratio between widget height and value font size\");\r\nSummaryC.prototype.publish(\"valueOpacity\", 1, \"number\", \"Opacity of value text (0..1)\");\r\nSummaryC.prototype.publish(\"labelOpacity\", 0.9, \"number\", \"Opacity of label text (0..1)\");\r\nSummaryC.prototype.publish(\"iconOpacity\", 0.3, \"number\", \"Opacity of icon text (0..1)\");\r\n\r\nSummaryC.prototype.publish(\"paddingSizeRatio\", 0.1, \"number\", \"Ratio of the smallest dimension for edge padding (0..1)\");\r\nSummaryC.prototype.publish(\"iconSizeRatio\", 0.9, \"number\", \"Ratio of the height for icon size (0..1)\");\r\n\r\nconst playInterval = SummaryC.prototype.playInterval;\r\nSummaryC.prototype.playInterval = function (_?: number): number | any {\r\n const retVal = playInterval.apply(this, arguments);\r\n if (arguments.length) {\r\n if (this._playIntervalHandle) {\r\n clearInterval(this._playIntervalHandle);\r\n }\r\n const context = this;\r\n if (_) {\r\n this._playIntervalHandle = setInterval(function () {\r\n context._playIntervalIdx++;\r\n if (context._renderCount && context.data().length) {\r\n context.render();\r\n }\r\n }, _);\r\n }\r\n }\r\n return retVal;\r\n};\r\n","// Word cloud layout by Jason Davies, https://www.jasondavies.com/wordcloud/\r\n// Algorithm due to Jonathan Feinberg, http://static.mrfeinberg.com/bv_ch03.pdf\r\n\r\nimport { dispatch } from \"d3-dispatch\";\r\n\r\nconst cloudRadians = Math.PI / 180;\r\nconst cw = 1 << 11 >> 5;\r\nconst ch = 1 << 11;\r\n\r\nexport function d3Cloud() {\r\n const event = dispatch(\"word\", \"end\");\r\n const cloud: any = {};\r\n\r\n let size = [256, 256];\r\n let text = cloudText;\r\n let font = cloudFont;\r\n let fontSize = cloudFontSize;\r\n let fontStyle = cloudFontNormal;\r\n let fontWeight = cloudFontNormal;\r\n let rotate = cloudRotate;\r\n let padding = cloudPadding;\r\n let words = [];\r\n let spiral = archimedeanSpiral;\r\n let timeInterval = Infinity;\r\n let timer = null;\r\n let random = Math.random;\r\n let canvas = cloudCanvas;\r\n\r\n cloud.canvas = function (_) {\r\n return arguments.length ? (canvas = functor(_), cloud) : canvas;\r\n };\r\n\r\n cloud.start = function () {\r\n const contextAndRatio = getContext(canvas());\r\n const board = zeroArray((size[0] >> 5) * size[1]);\r\n let bounds = null;\r\n const n = words.length;\r\n let i = -1;\r\n const tags = [];\r\n const data = words.map(function (d, i) {\r\n d.text = text.call(this, d, i);\r\n d.font = font.call(this, d, i);\r\n d.style = fontStyle.call(this, d, i);\r\n d.weight = fontWeight.call(this, d, i);\r\n d.rotate = rotate.call(this, d, i);\r\n d.size = ~~fontSize.call(this, d, i);\r\n d.padding = padding.call(this, d, i);\r\n return d;\r\n }).sort(function (a, b) { return b.size - a.size; });\r\n\r\n if (timer) clearInterval(timer);\r\n timer = setInterval(step, 0);\r\n step();\r\n\r\n return cloud;\r\n\r\n function step() {\r\n const start = Date.now();\r\n while (Date.now() - start < timeInterval && ++i < n && timer) {\r\n const d = data[i];\r\n d.x = (size[0] * (random() + .5)) >> 1;\r\n d.y = (size[1] * (random() + .5)) >> 1;\r\n cloudSprite(contextAndRatio, d, data, i);\r\n if (d.hasText && place(board, d, bounds)) {\r\n tags.push(d);\r\n event.call(\"word\", cloud, d);\r\n if (bounds) cloudBounds(bounds, d);\r\n else bounds = [{ x: d.x + d.x0, y: d.y + d.y0 }, { x: d.x + d.x1, y: d.y + d.y1 }];\r\n // Temporary hack\r\n d.x -= size[0] >> 1;\r\n d.y -= size[1] >> 1;\r\n }\r\n }\r\n if (i >= n) {\r\n cloud.stop();\r\n event.call(\"end\", cloud, tags, bounds);\r\n }\r\n }\r\n };\r\n\r\n cloud.stop = function () {\r\n if (timer) {\r\n clearInterval(timer);\r\n timer = null;\r\n }\r\n return cloud;\r\n };\r\n\r\n function getContext(canvas) {\r\n canvas.width = canvas.height = 1;\r\n const ratio = Math.sqrt(canvas.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\r\n canvas.width = (cw << 5) / ratio;\r\n canvas.height = ch / ratio;\r\n\r\n const context = canvas.getContext(\"2d\");\r\n context.fillStyle = context.strokeStyle = \"red\";\r\n context.textAlign = \"center\";\r\n\r\n return { context, ratio };\r\n }\r\n\r\n function place(board, tag, bounds) {\r\n const startX = tag.x;\r\n const startY = tag.y;\r\n const maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]);\r\n const s = spiral(size);\r\n const dt = random() < .5 ? 1 : -1;\r\n let t = -dt;\r\n let dxdy;\r\n let dx;\r\n let dy;\r\n\r\n // eslint-disable-next-line no-cond-assign\r\n while (dxdy = s(t += dt)) {\r\n dx = ~~dxdy[0];\r\n dy = ~~dxdy[1];\r\n\r\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\r\n\r\n tag.x = startX + dx;\r\n tag.y = startY + dy;\r\n\r\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\r\n tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\r\n // TODO only check for collisions within current bounds.\r\n if (!bounds || !cloudCollide(tag, board, size[0])) {\r\n if (!bounds || collideRects(tag, bounds)) {\r\n const sprite = tag.sprite;\r\n const w = tag.width >> 5;\r\n const sw = size[0] >> 5;\r\n const lx = tag.x - (w << 4);\r\n const sx = lx & 0x7f;\r\n const msx = 32 - sx;\r\n const h = tag.y1 - tag.y0;\r\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\r\n let last;\r\n for (let j = 0; j < h; j++) {\r\n last = 0;\r\n for (let i = 0; i <= w; i++) {\r\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\r\n }\r\n x += sw;\r\n }\r\n delete tag.sprite;\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n cloud.timeInterval = function (_) {\r\n return arguments.length ? (timeInterval = _ == null ? Infinity : _, cloud) : timeInterval;\r\n };\r\n\r\n cloud.words = function (_) {\r\n return arguments.length ? (words = _, cloud) : words;\r\n };\r\n\r\n cloud.size = function (_) {\r\n return arguments.length ? (size = [+_[0], +_[1]], cloud) : size;\r\n };\r\n\r\n cloud.font = function (_) {\r\n return arguments.length ? (font = functor(_), cloud) : font;\r\n };\r\n\r\n cloud.fontStyle = function (_) {\r\n return arguments.length ? (fontStyle = functor(_), cloud) : fontStyle;\r\n };\r\n\r\n cloud.fontWeight = function (_) {\r\n return arguments.length ? (fontWeight = functor(_), cloud) : fontWeight;\r\n };\r\n\r\n cloud.rotate = function (_) {\r\n return arguments.length ? (rotate = functor(_), cloud) : rotate;\r\n };\r\n\r\n cloud.text = function (_) {\r\n return arguments.length ? (text = functor(_), cloud) : text;\r\n };\r\n\r\n cloud.spiral = function (_) {\r\n return arguments.length ? (spiral = spirals[_] || _, cloud) : spiral;\r\n };\r\n\r\n cloud.fontSize = function (_) {\r\n return arguments.length ? (fontSize = functor(_), cloud) : fontSize;\r\n };\r\n\r\n cloud.padding = function (_) {\r\n return arguments.length ? (padding = functor(_), cloud) : padding;\r\n };\r\n\r\n cloud.random = function (_) {\r\n return arguments.length ? (random = _, cloud) : random;\r\n };\r\n\r\n cloud.on = function () {\r\n const value = event.on.apply(event, arguments);\r\n return value === event ? cloud : value;\r\n };\r\n\r\n return cloud;\r\n}\r\n\r\nfunction cloudText(d) {\r\n return d.text;\r\n}\r\n\r\nfunction cloudFont() {\r\n return \"serif\";\r\n}\r\n\r\nfunction cloudFontNormal() {\r\n return \"normal\";\r\n}\r\n\r\nfunction cloudFontSize(d) {\r\n return Math.sqrt(d.value);\r\n}\r\n\r\nfunction cloudRotate() {\r\n return (~~(Math.random() * 6) - 3) * 30;\r\n}\r\n\r\nfunction cloudPadding() {\r\n return 1;\r\n}\r\n\r\n// Fetches a monochrome sprite bitmap for the specified text.\r\n// Load in batches for speed.\r\nfunction cloudSprite(contextAndRatio, d, data, di) {\r\n if (d.sprite) return;\r\n const c = contextAndRatio.context;\r\n const ratio = contextAndRatio.ratio;\r\n\r\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\r\n let x = 0;\r\n let y = 0;\r\n let maxh = 0;\r\n const n = data.length;\r\n --di;\r\n while (++di < n) {\r\n d = data[di];\r\n c.save();\r\n c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\r\n let w = c.measureText(d.text + \"m\").width * ratio;\r\n let h = d.size << 1;\r\n if (d.rotate) {\r\n const sr = Math.sin(d.rotate * cloudRadians);\r\n const cr = Math.cos(d.rotate * cloudRadians);\r\n const wcr = w * cr;\r\n const wsr = w * sr;\r\n const hcr = h * cr;\r\n const hsr = h * sr;\r\n w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\r\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\r\n } else {\r\n w = (w + 0x1f) >> 5 << 5;\r\n }\r\n if (h > maxh) maxh = h;\r\n if (x + w >= (cw << 5)) {\r\n x = 0;\r\n y += maxh;\r\n maxh = 0;\r\n }\r\n if (y + h >= ch) break;\r\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\r\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\r\n c.fillText(d.text, 0, 0);\r\n if (d.padding) c.lineWidth = 2 * d.padding, c.strokeText(d.text, 0, 0);\r\n c.restore();\r\n d.width = w;\r\n d.height = h;\r\n d.xoff = x;\r\n d.yoff = y;\r\n d.x1 = w >> 1;\r\n d.y1 = h >> 1;\r\n d.x0 = -d.x1;\r\n d.y0 = -d.y1;\r\n d.hasText = true;\r\n x += w;\r\n }\r\n const pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;\r\n const sprite = [];\r\n while (--di >= 0) {\r\n d = data[di];\r\n if (!d.hasText) continue;\r\n const w = d.width;\r\n const w32 = w >> 5;\r\n let h = d.y1 - d.y0;\r\n // Zero the buffer\r\n for (let i = 0; i < h * w32; i++) sprite[i] = 0;\r\n x = d.xoff;\r\n if (x == null) return;\r\n y = d.yoff;\r\n let seen = 0;\r\n let seenRow = -1;\r\n for (let j = 0; j < h; j++) {\r\n for (let i = 0; i < w; i++) {\r\n const k = w32 * j + (i >> 5);\r\n const m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\r\n sprite[k] |= m;\r\n seen |= m;\r\n }\r\n if (seen) seenRow = j;\r\n else {\r\n d.y0++;\r\n h--;\r\n j--;\r\n y++;\r\n }\r\n }\r\n d.y1 = d.y0 + seenRow;\r\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\r\n }\r\n}\r\n\r\n// Use mask-based collision detection.\r\nfunction cloudCollide(tag, board, sw) {\r\n sw >>= 5;\r\n const sprite = tag.sprite;\r\n const w = tag.width >> 5;\r\n const lx = tag.x - (w << 4);\r\n const sx = lx & 0x7f;\r\n const msx = 32 - sx;\r\n const h = tag.y1 - tag.y0;\r\n let x = (tag.y + tag.y0) * sw + (lx >> 5);\r\n let last;\r\n for (let j = 0; j < h; j++) {\r\n last = 0;\r\n for (let i = 0; i <= w; i++) {\r\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\r\n & board[x + i]) return true;\r\n }\r\n x += sw;\r\n }\r\n return false;\r\n}\r\n\r\nfunction cloudBounds(bounds, d) {\r\n const b0 = bounds[0];\r\n const b1 = bounds[1];\r\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\r\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\r\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\r\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\r\n}\r\n\r\nfunction collideRects(a, b) {\r\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;\r\n}\r\n\r\nfunction archimedeanSpiral(size) {\r\n const e = size[0] / size[1];\r\n return function (t) {\r\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\r\n };\r\n}\r\n\r\nfunction rectangularSpiral(size) {\r\n const dy = 4;\r\n const dx = dy * size[0] / size[1];\r\n let x = 0;\r\n let y = 0;\r\n return function (t) {\r\n const sign = t < 0 ? -1 : 1;\r\n // See triangular numbers: T_n = n * (n + 1) / 2.\r\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\r\n case 0: x += dx; break;\r\n case 1: y += dy; break;\r\n case 2: x -= dx; break;\r\n default: y -= dy; break;\r\n }\r\n return [x, y];\r\n };\r\n}\r\n\r\n// TODO reuse arrays?\r\nfunction zeroArray(n) {\r\n const a = [];\r\n let i = -1;\r\n while (++i < n) a[i] = 0;\r\n return a;\r\n}\r\n\r\nfunction cloudCanvas() {\r\n return document.createElement(\"canvas\");\r\n}\r\n\r\nfunction functor(d) {\r\n return typeof d === \"function\" ? d : function () { return d; };\r\n}\r\n\r\nconst spirals = {\r\n archimedean: archimedeanSpiral,\r\n rectangular: rectangularSpiral\r\n};\r\n","import { I2DChart, ITooltip } from \"@hpcc-js/api\";\r\nimport { d3Event, InputField, SVGWidget, Utility, zoom as d3Zoom } from \"@hpcc-js/common\";\r\nimport { extent as d3Extent } from \"d3-array\";\r\nimport { scaleLinear as d3ScaleLinear, scaleLog as d3ScaleLog, scalePow as d3ScalePow, scaleSqrt as d3ScaleSqrt } from \"d3-scale\";\r\nimport { d3Cloud } from \"./D3Cloud\";\r\n\r\nimport \"../src/WordCloud.css\";\r\n\r\nexport class WordCloud extends SVGWidget {\r\n static __inputs: InputField[] = [{\r\n id: \"label\",\r\n type: \"string\"\r\n }, {\r\n id: \"value\",\r\n type: \"number\"\r\n }];\r\n\r\n private _prevOffsetX;\r\n private _prevOffsetY;\r\n private _prevZoom;\r\n private _root;\r\n private _canvas;\r\n private _d3Cloud;\r\n private _d3Zoom;\r\n\r\n constructor() {\r\n super();\r\n I2DChart.call(this);\r\n ITooltip.call(this);\r\n Utility.SimpleSelectionMixin.call(this);\r\n\r\n this._prevOffsetX = this.offsetX();\r\n this._prevOffsetY = this.offsetY();\r\n this._prevZoom = this.zoom();\r\n }\r\n\r\n calcData() {\r\n return this.data().map(row => {\r\n return {\r\n __viz_label: row[0],\r\n __viz_weight: row[1],\r\n __viz_row: row\r\n };\r\n });\r\n }\r\n\r\n enter(domNode, element) {\r\n super.enter(domNode, element);\r\n this._selection.widgetElement(element);\r\n\r\n this._root = element.append(\"g\");\r\n this._canvas = document.createElement(\"canvas\");\r\n\r\n const context = this;\r\n this._d3Zoom = d3Zoom()\r\n .scaleExtent([0.1, 10])\r\n ;\r\n this._d3Zoom\r\n .on(\"zoom\", function (evt) {\r\n const event = d3Event();\r\n if (event && event.transform) {\r\n context.zoomed(context._d3Zoom, [event.transform.x, event.transform.y], event.transform.k);\r\n }\r\n })\r\n ;\r\n element.call(this._d3Zoom);\r\n\r\n this\r\n .tooltipHTML(function (d) {\r\n const columns = context.columns();\r\n const series = columns && columns.length ? columns[0] : \"Word\";\r\n return context.tooltipFormat({ label: d.__viz_label, series, value: d.__viz_weight });\r\n })\r\n ;\r\n }\r\n\r\n update(domNode, element) {\r\n super.update(domNode, element);\r\n\r\n this._palette = this._palette.switch(this.paletteID());\r\n if (this.useClonedPalette()) {\r\n this._palette = this._palette.cloneNotExists(this.paletteID() + \"_\" + this.id());\r\n }\r\n\r\n this._d3Cloud = d3Cloud()\r\n .canvas(() => this._canvas)\r\n ;\r\n\r\n this.zoomed(this, [this.offsetX(), this.offsetY()], this.zoom());\r\n\r\n const data = this.calcData();\r\n const context = this;\r\n const extent = d3Extent(data, function (d: any) { return d.__viz_weight; });\r\n let scaler;\r\n switch (this.scaleMode()) {\r\n case \"log\":\r\n scaler = d3ScaleLog;\r\n break;\r\n case \"sqrt\":\r\n scaler = d3ScaleSqrt;\r\n break;\r\n case \"pow\":\r\n scaler = d3ScalePow;\r\n break;\r\n case \"linear\":\r\n default:\r\n scaler = d3ScaleLinear;\r\n break;\r\n }\r\n const scale = scaler().domain(extent).range([this.fontSizeFrom(), this.fontSizeTo()]);\r\n const angleDomain = d3ScaleLinear().domain([0, context.angleCount() - 1]).range([context.angleFrom(), context.angleTo()]);\r\n\r\n this._d3Cloud.stop()\r\n .size([this.width(), this.height()])\r\n .words(data)\r\n .font(this.fontFamily())\r\n .padding(this.padding())\r\n .spiral(this.spiral())\r\n .text(function (d) {\r\n return d.__viz_label.trim();\r\n })\r\n .fontSize(function (d) {\r\n return scale(d.__viz_weight);\r\n })\r\n .rotate((d, i) => angleDomain(i % context.angleCount()))\r\n .on(\"word\", w => {\r\n })\r\n .on(\"end\", draw)\r\n .start()\r\n ;\r\n\r\n function draw(data, bounds) {\r\n const text = context._root.selectAll(\"text\")\r\n .data(data, function (d) { return d.__viz_label ? d.__viz_label.toLowerCase() : \"\"; })\r\n ;\r\n text.enter().append(\"text\")\r\n .attr(\"text-anchor\", \"middle\")\r\n .call(context._selection.enter.bind(context._selection))\r\n .text(function (d) { return d.__viz_label; })\r\n .on(\"click\", function (d) {\r\n context.click(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\r\n })\r\n .on(\"dblclick\", function (d) {\r\n context.dblclick(context.rowToObj(d.__viz_row), context.columns()[1], context._selection.selected(this));\r\n })\r\n .on(\"mouseout.tooltip\", context.tooltip.hide)\r\n .on(\"mousemove.tooltip\", context.tooltip.show)\r\n .style(\"opacity\", 1e-6)\r\n .merge(text)\r\n .style(\"font-size\", function (d) { return scale(d.__viz_weight) + \"px\"; })\r\n .style(\"font-family\", context.fontFamily())\r\n .transition().duration(1000)\r\n .attr(\"transform\", function (d) { return \"translate(\" + [d.x, d.y] + \")rotate(\" + d.rotate + \")\"; })\r\n .style(\"fill\", function (d) { return context._palette(d.__viz_label ? d.__viz_label.toLowerCase() : \"\"); })\r\n .style(\"opacity\", 1)\r\n ;\r\n text.exit().transition().duration(1000)\r\n .style(\"opacity\", 1e-4)\r\n .remove()\r\n ;\r\n }\r\n }\r\n\r\n zoomed(source, translate, scale) {\r\n if (translate[0] !== this._prevOffsetX || translate[1] !== this._prevOffsetY || scale !== this._prevZoom) {\r\n this._root.attr(\"transform\", translate);\r\n switch (source) {\r\n case this:\r\n /*\r\n this._d3Zoom\r\n .scale(scale)\r\n .translate(translate)\r\n ;\r\n */\r\n break;\r\n case this._d3Zoom:\r\n this.offsetX(translate[0]);\r\n this.offsetY(translate[1]);\r\n this.zoom(scale);\r\n break;\r\n }\r\n this._prevOffsetX = translate[0];\r\n this._prevOffsetY = translate[1];\r\n this._prevZoom = scale;\r\n }\r\n }\r\n\r\n paletteID: { (): string; (_: string): WordCloud };\r\n paletteID_exists: () => boolean;\r\n useClonedPalette: { (): boolean; (_: boolean): WordCloud };\r\n useClonedPalette_exists: () => boolean;\r\n fontFamily: { (): string; (_: string): WordCloud };\r\n fontFamily_exists: () => boolean;\r\n fontSizeFrom: { (): number; (_: number): WordCloud };\r\n fontSizeFrom_exists: () => boolean;\r\n fontSizeTo: { (): number; (_: number): WordCloud };\r\n fontSizeTo_exists: () => boolean;\r\n angleFrom: { (): number; (_: number): WordCloud };\r\n angleFrom_exists: () => boolean;\r\n angleTo: { (): number; (_: number): WordCloud };\r\n angleTo_exists: () => boolean;\r\n angleCount: { (): number; (_: number): WordCloud };\r\n angleCount_exists: () => boolean;\r\n padding: { (): number; (_: number): WordCloud };\r\n padding_exists: () => boolean;\r\n scaleMode: { (): string; (_: string): WordCloud };\r\n scaleMode_exists: () => boolean;\r\n spiral: { (): string; (_: string): WordCloud };\r\n spiral_exists: () => boolean;\r\n offsetX: { (): number; (_: number): WordCloud };\r\n offsetX_exists: () => boolean;\r\n offsetY: { (): number; (_: number): WordCloud };\r\n offsetY_exists: () => boolean;\r\n zoom: { (): number; (_: number): WordCloud };\r\n zoom_exists: () => boolean;\r\n\r\n // I2DChart\r\n _palette;\r\n click: (row, column, selected) => void;\r\n dblclick: (row, column, selected) => void;\r\n\r\n // ITooltip ---\r\n tooltip;\r\n tooltipHTML: (_?) => any;\r\n tooltipFormat: (opts) => any;\r\n tooltipStyle: { (): string; (_: string): WordCloud };\r\n tooltipStyle_exists: () => boolean;\r\n tooltipValueFormat: { (): string; (_: string): WordCloud };\r\n tooltipValueFormat_exists: () => boolean;\r\n tooltipSeriesColor: { (): string; (_: string): WordCloud };\r\n tooltipSeriesColor_exists: () => boolean;\r\n tooltipLabelColor: { (): string; (_: string): WordCloud };\r\n tooltipLabelColor_exists: () => boolean;\r\n tooltipValueColor: { (): string; (_: string): WordCloud };\r\n tooltipValueColor_exists: () => boolean;\r\n tooltipTick: { (): boolean; (_: boolean): WordCloud };\r\n tooltipTick_exists: () => boolean;\r\n tooltipOffset: { (): number; (_: number): WordCloud };\r\n tooltipOffset_exists: () => boolean;\r\n\r\n // SimpleSelectionMixin\r\n _selection: Utility.SimpleSelection;\r\n}\r\nWordCloud.prototype._class += \" chart_WordCloud\";\r\nWordCloud.prototype.implements(I2DChart.prototype);\r\nWordCloud.prototype.implements(ITooltip.prototype);\r\nWordCloud.prototype.mixin(Utility.SimpleSelectionMixin);\r\n\r\nWordCloud.prototype.publish(\"paletteID\", \"default\", \"set\", \"Color palette for this widget\", WordCloud.prototype._palette.switch(), { tags: [\"Basic\", \"Shared\"] });\r\nWordCloud.prototype.publish(\"useClonedPalette\", false, \"boolean\", \"Enable or disable using a cloned palette\", null, { tags: [\"Intermediate\", \"Shared\"] });\r\n\r\nWordCloud.prototype.publish(\"fontFamily\", \"Impact\", \"string\", \"Font Name\", null, { tags: [\"Basic\"] });\r\nWordCloud.prototype.publish(\"fontSizeFrom\", 6, \"number\", \"Minimum font size (pixels)\", null, { tags: [\"Basic\"] });\r\nWordCloud.prototype.publish(\"fontSizeTo\", 48, \"number\", \"Maximum font size (pixels)\", null, { tags: [\"Basic\"] });\r\nWordCloud.prototype.publish(\"angleFrom\", -60, \"number\", \"Minimum angle (degrees)\", null, { tags: [\"Basic\"] });\r\nWordCloud.prototype.publish(\"angleTo\", 60, \"number\", \"Maximum angle (degrees)\", null, { tags: [\"Basic\"] });\r\nWordCloud.prototype.publish(\"angleCount\", 5, \"number\", \"Number of different angles\", null, { tags: [\"Basic\"] });\r\nWordCloud.prototype.publish(\"padding\", 0, \"number\", \"Padding between words (pixels)\", null, { tags: [\"Intermediate\"] });\r\nWordCloud.prototype.publish(\"scaleMode\", \"linear\", \"set\", \"Text scaling mode\", [\"linear\", \"log\", \"sqrt\", \"pow\"], { tags: [\"Intermediate\"] });\r\nWordCloud.prototype.publish(\"spiral\", \"archimedean\", \"set\", \"Text scaling mode\", [\"archimedean\", \"rectangular\"], { tags: [\"Intermediate\"] });\r\nWordCloud.prototype.publish(\"offsetX\", 0, \"number\", \"X offset\", null, { tags: [\"Advanced\"] });\r\nWordCloud.prototype.publish(\"offsetY\", 0, \"number\", \"Y offset\", null, { tags: [\"Advanced\"] });\r\nWordCloud.prototype.publish(\"zoom\", 1, \"number\", \"Zoom\", null, { tags: [\"Advanced\"] });\r\n"],"mappings":"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","ignoreList":[]}