@vizzly/dashboard 0.15.0-dev-307a9830cb4e82f036693ccfe2634f74381a2b72 → 0.15.0-dev-d949562f7d69a747b6f32349c6a53a2dc3ed06f9

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.
@@ -44199,11 +44199,12 @@ var AxisLeft = function AxisLeft(_ref) {
44199
44199
  });
44200
44200
  };
44201
44201
 
44202
- var GRID_STYLES = {
44202
+ var LINE_STYLES = {
44203
44203
  strokeWidth: 2,
44204
44204
  strokeOpacity: 0.8,
44205
44205
  strokeLinecap: 'round',
44206
- strokeDasharray: '0.5 5'
44206
+ strokeDasharray: '0.5 5',
44207
+ stroke: 'rgba(0, 0, 0, 0.1)'
44207
44208
  };
44208
44209
 
44209
44210
  var GridRows = function GridRows(_ref) {
@@ -44223,7 +44224,7 @@ var GridRows = function GridRows(_ref) {
44223
44224
  strokeWidth: removeStroke ? 0 : 2,
44224
44225
  lineStyle: _extends({
44225
44226
  stroke: themeCSS.grid.stroke
44226
- }, GRID_STYLES)
44227
+ }, LINE_STYLES)
44227
44228
  });
44228
44229
  };
44229
44230
 
@@ -46024,6 +46025,58 @@ function Bubbles(_ref2) {
46024
46025
  });
46025
46026
  }
46026
46027
 
46028
+ var RadarCrosshairCircle = function RadarCrosshairCircle(_ref) {
46029
+ var tooltipData = _ref.tooltipData,
46030
+ yKeys = _ref.yKeys,
46031
+ legendItems = _ref.legendItems,
46032
+ conditionalFormattingRules = _ref.conditionalFormattingRules,
46033
+ visibleYKeys = _ref.visibleYKeys,
46034
+ radius = _ref.radius,
46035
+ yScale = _ref.yScale,
46036
+ dataPointIndex = _ref.dataPointIndex,
46037
+ totalDataPoints = _ref.totalDataPoints;
46038
+ var radiusScale = scaleLinear({
46039
+ range: [0, radius],
46040
+ domain: [0, yScale.max],
46041
+ nice: true
46042
+ });
46043
+ var step = Math.PI * 2 / totalDataPoints;
46044
+ var yKeysTest = [].concat(yKeys);
46045
+ if (yKeysTest.length > 1) {
46046
+ var lastItem = yKeysTest.pop();
46047
+ yKeysTest.unshift(lastItem);
46048
+ }
46049
+ return jsx(Fragment, {
46050
+ children: yKeysTest.map(function (yKey) {
46051
+ var _legendItems$filter$;
46052
+ if (!tooltipData[yKey] || tooltipData[yKey].value === null || !visibleYKeys.includes(yKey)) {
46053
+ return null;
46054
+ }
46055
+ var value = tooltipData[yKey].value;
46056
+ var scaledRadius = radiusScale(value);
46057
+ var angle = (dataPointIndex + 1) * step;
46058
+ var x = scaledRadius * Math.sin(angle);
46059
+ var y = scaledRadius * Math.cos(angle);
46060
+ return jsx("circle", {
46061
+ cx: x,
46062
+ cy: y,
46063
+ r: 6,
46064
+ fill: getColor({
46065
+ defaultColor: ((_legendItems$filter$ = legendItems.filter(function (legendItem) {
46066
+ return legendItem.yKey === yKey;
46067
+ })[0]) == null ? void 0 : _legendItems$filter$.color) || '#000',
46068
+ yKey: yKey,
46069
+ value: tooltipData[yKey].value,
46070
+ conditionalFormattingRules: conditionalFormattingRules
46071
+ }),
46072
+ strokeWidth: 2,
46073
+ stroke: "#fff",
46074
+ pointerEvents: "none"
46075
+ }, "radar-crosshair-" + yKey);
46076
+ })
46077
+ });
46078
+ };
46079
+
46027
46080
  var getValue = function getValue(d, key) {
46028
46081
  return d[key].value;
46029
46082
  };
@@ -46053,7 +46106,9 @@ var genPolygonPoints = function genPolygonPoints(dataArray, scale, yKey) {
46053
46106
  var Polygons = function Polygons(_ref) {
46054
46107
  var chart = _ref.chart,
46055
46108
  radius = _ref.radius,
46056
- visibleYKeys = _ref.visibleYKeys;
46109
+ visibleYKeys = _ref.visibleYKeys,
46110
+ tooltipData = _ref.tooltipData,
46111
+ hoveredDataPointIndex = _ref.hoveredDataPointIndex;
46057
46112
  var yKeys = chart.y.keys;
46058
46113
  var yScale = scaleLinear({
46059
46114
  range: [0, radius],
@@ -46066,16 +46121,26 @@ var Polygons = function Polygons(_ref) {
46066
46121
  return (_yScale = yScale(d)) != null ? _yScale : 0;
46067
46122
  }, yKey);
46068
46123
  });
46069
- return jsx(Fragment$1, {
46070
- children: polygonsPoints.map(function (polygonPoints) {
46124
+ return jsxs(Fragment$1, {
46125
+ children: [polygonsPoints.map(function (polygonPoints) {
46071
46126
  return jsx(SinglePolygon, {
46072
46127
  isVisible: visibleYKeys.includes(polygonPoints.yKey),
46073
46128
  polygonPoints: polygonPoints,
46074
46129
  colors: chart.lines.filter(function (legendItem) {
46075
46130
  return legendItem.yKey === polygonPoints.yKey;
46076
46131
  })[0].color
46077
- });
46078
- })
46132
+ }, polygonPoints.yKey);
46133
+ }), tooltipData && hoveredDataPointIndex !== undefined && hoveredDataPointIndex >= 0 && jsx(RadarCrosshairCircle, {
46134
+ tooltipData: tooltipData,
46135
+ yKeys: chart.y.keys,
46136
+ legendItems: chart.lines,
46137
+ conditionalFormattingRules: [],
46138
+ visibleYKeys: visibleYKeys,
46139
+ radius: radius,
46140
+ yScale: chart.y.scale,
46141
+ dataPointIndex: hoveredDataPointIndex,
46142
+ totalDataPoints: chart.data.length
46143
+ })]
46079
46144
  });
46080
46145
  };
46081
46146
  var SinglePolygon = function SinglePolygon(_ref2) {
@@ -46102,15 +46167,6 @@ var SinglePolygon = function SinglePolygon(_ref2) {
46102
46167
  });
46103
46168
  };
46104
46169
 
46105
- var genPoints = function genPoints(length, radius) {
46106
- var step = Math.PI * 2 / length;
46107
- return [].concat(new Array(length)).map(function (_, i) {
46108
- return {
46109
- x: radius * Math.sin(i * step),
46110
- y: radius * Math.cos(i * step)
46111
- };
46112
- });
46113
- };
46114
46170
  var MiddleLine = function MiddleLine(_ref) {
46115
46171
  var chart = _ref.chart,
46116
46172
  radius = _ref.radius,
@@ -46120,7 +46176,6 @@ var MiddleLine = function MiddleLine(_ref) {
46120
46176
  var _useState = useState([]),
46121
46177
  textWidths = _useState[0],
46122
46178
  setTextWidths = _useState[1];
46123
- var points = genPoints(chart.x.ticks.length, radius);
46124
46179
  var zeroPoint = new Point({
46125
46180
  x: 0,
46126
46181
  y: 0
@@ -46129,22 +46184,33 @@ var MiddleLine = function MiddleLine(_ref) {
46129
46184
  var _tick$formattedValue;
46130
46185
  return (_tick$formattedValue = tick.formattedValue) != null ? _tick$formattedValue : tick.value;
46131
46186
  });
46187
+ var genPoints = function genPoints(length, radius) {
46188
+ var step = Math.PI * 2 / length;
46189
+ return new Array(length).fill(0).map(function (_, i) {
46190
+ return {
46191
+ x: radius * Math.sin(i * step),
46192
+ y: radius * Math.cos(i * step)
46193
+ };
46194
+ });
46195
+ };
46132
46196
  useEffect(function () {
46133
46197
  var newWidths = textRefs.current.map(function (ref) {
46134
46198
  return ref ? ref.getComputedTextLength() : 0;
46135
46199
  });
46136
46200
  setTextWidths(newWidths);
46137
- }, [categoryValues]);
46201
+ }, []);
46202
+ var points = genPoints(chart.x.ticks.length, radius);
46138
46203
  points.push(points.shift());
46139
46204
  return jsx(Fragment$1, {
46140
- children: [].concat(new Array(chart.x.ticks.length)).map(function (_, i) {
46205
+ children: new Array(chart.x.ticks.length).fill(0).map(function (_, i) {
46141
46206
  var xOffset = points[i].x >= 0 ? textWidths[i] / 2 : -(textWidths[i] / 2);
46142
- return jsxs(Fragment$1, {
46207
+ return jsxs(React__default.Fragment, {
46143
46208
  children: [jsx(Line$1, {
46144
46209
  from: zeroPoint,
46145
46210
  to: points[i],
46146
- stroke: themeCSS.axis.stroke,
46147
- strokeDasharray: "0.5 5"
46211
+ style: _extends({
46212
+ stroke: themeCSS.axis.stroke
46213
+ }, LINE_STYLES)
46148
46214
  }, "radar-line-" + i), show && jsx("text", {
46149
46215
  ref: function ref(el) {
46150
46216
  return textRefs.current[i] = el;
@@ -46155,13 +46221,13 @@ var MiddleLine = function MiddleLine(_ref) {
46155
46221
  textAnchor: "middle",
46156
46222
  children: categoryValues[i]
46157
46223
  })]
46158
- });
46224
+ }, "middle-line-" + i);
46159
46225
  })
46160
46226
  });
46161
46227
  };
46162
46228
 
46163
46229
  var genAngles = function genAngles(length, degrees) {
46164
- return [].concat(new Array(length + 1)).map(function (_, i) {
46230
+ return new Array(length + 1).fill(0).map(function (_, i) {
46165
46231
  return {
46166
46232
  angle: i * (degrees / length) + (length % 2 === 0 ? 0 : degrees / length / 2)
46167
46233
  };
@@ -46193,9 +46259,9 @@ var Grid$1 = function Grid(_ref) {
46193
46259
  }, [chart.y.ticks]);
46194
46260
  var chartValue = (_chart$y$ticks$scaleV = chart.y.ticks[levels - 1].scaleValue) != null ? _chart$y$ticks$scaleV : chart.y.ticks[levels - 1].value;
46195
46261
  return jsx(Fragment$1, {
46196
- children: [].concat(new Array(levels)).map(function (_, i) {
46262
+ children: new Array(levels).fill(0).map(function (_, i) {
46197
46263
  var levelRadius = chart.y.ticks[i].value / chartValue * radius;
46198
- return jsxs(Fragment$1, {
46264
+ return jsxs(React__default.Fragment, {
46199
46265
  children: [jsx(LineRadial, {
46200
46266
  data: webs,
46201
46267
  angle: function angle(d) {
@@ -46206,7 +46272,7 @@ var Grid$1 = function Grid(_ref) {
46206
46272
  fill: "none",
46207
46273
  style: _extends({
46208
46274
  stroke: themeCSS.axis.stroke
46209
- }, GRID_STYLES)
46275
+ }, LINE_STYLES)
46210
46276
  }, "web-" + i), jsx("text", {
46211
46277
  x: 0,
46212
46278
  y: levelRadius,
@@ -46216,11 +46282,40 @@ var Grid$1 = function Grid(_ref) {
46216
46282
  textAnchor: "middle",
46217
46283
  children: tickFormat(chart.y.ticks[i].value)
46218
46284
  })]
46219
- });
46285
+ }, "grid-level-" + i);
46220
46286
  })
46221
46287
  });
46222
46288
  };
46223
46289
 
46290
+ var getRadarTooltipData = function getRadarTooltipData(_ref) {
46291
+ var data = _ref.data,
46292
+ event = _ref.event,
46293
+ totalDataPoints = _ref.totalDataPoints,
46294
+ centerX = _ref.centerX,
46295
+ centerY = _ref.centerY;
46296
+ var point = localPoint(event) || {
46297
+ x: 0,
46298
+ y: 0
46299
+ };
46300
+ if (!point) return;
46301
+ var mouseX = point.x - centerX;
46302
+ var mouseY = point.y - centerY;
46303
+ var mouseAngle = Math.atan2(mouseX, mouseY);
46304
+ if (mouseAngle < 0) {
46305
+ mouseAngle += 2 * Math.PI;
46306
+ }
46307
+ var step = Math.PI * 2 / totalDataPoints;
46308
+ var dataPointIndex = Math.round(mouseAngle / step) % totalDataPoints;
46309
+ dataPointIndex = (dataPointIndex - 1 + totalDataPoints) % totalDataPoints;
46310
+ var tooltipData = data[dataPointIndex] || null;
46311
+ var angle = (dataPointIndex + 1) * step;
46312
+ return {
46313
+ tooltipData: tooltipData,
46314
+ dataPointIndex: dataPointIndex,
46315
+ angle: angle
46316
+ };
46317
+ };
46318
+
46224
46319
  var WIDTH_MULTIPLIER_TO_SCROLL = 1.2;
46225
46320
  var LEGEND_PADDING = 40;
46226
46321
  var RadarChart$2 = function RadarChart(_ref) {
@@ -46229,6 +46324,15 @@ var RadarChart$2 = function RadarChart(_ref) {
46229
46324
  height = _ref.height,
46230
46325
  options = _ref.options,
46231
46326
  theme = _ref.theme;
46327
+ var _useTooltip = useTooltip$1(),
46328
+ tooltipOpen = _useTooltip.tooltipOpen,
46329
+ _useTooltip$tooltipLe = _useTooltip.tooltipLeft,
46330
+ tooltipLeft = _useTooltip$tooltipLe === void 0 ? 0 : _useTooltip$tooltipLe,
46331
+ _useTooltip$tooltipTo = _useTooltip.tooltipTop,
46332
+ tooltipTop = _useTooltip$tooltipTo === void 0 ? 0 : _useTooltip$tooltipTo,
46333
+ tooltipData = _useTooltip.tooltipData,
46334
+ hideTooltip = _useTooltip.hideTooltip,
46335
+ showTooltip = _useTooltip.showTooltip;
46232
46336
  var ref = useRef(null);
46233
46337
  var _useState = useState(0),
46234
46338
  groupWidth = _useState[0],
@@ -46238,13 +46342,17 @@ var RadarChart$2 = function RadarChart(_ref) {
46238
46342
  })),
46239
46343
  visibleYKeys = _useState2[0],
46240
46344
  setVisibleYKeys = _useState2[1];
46345
+ var _useState3 = useState(),
46346
+ hoveredDataPointIndex = _useState3[0],
46347
+ setHoveredDataPointIndex = _useState3[1];
46241
46348
  var themeCSS = useMemo(function () {
46242
- return getChartThemeCSS(theme);
46349
+ var css = getChartThemeCSS(theme);
46350
+ return css;
46243
46351
  }, [theme]);
46244
46352
  var margin = buildMargin(chart.y.ticks, options.axis.showYAxisLabels, chart.y.title != null, chart.x.title != null);
46245
46353
  var innerWidth = width - margin.left - margin.right - (options.showLegend ? LEGEND_PADDING : 0);
46246
46354
  var innerHeight = height - margin.top - margin.bottom - (options.showLegend ? LEGEND_PADDING : 0);
46247
- var radius = Math.min(innerWidth, innerHeight) / 2;
46355
+ var radius = Math.min(innerWidth, innerHeight) / 2 * 0.93;
46248
46356
  useEffect(function () {
46249
46357
  var _ref$current;
46250
46358
  setVisibleYKeys(chart.lines.map(function (legendItem) {
@@ -46255,16 +46363,41 @@ var RadarChart$2 = function RadarChart(_ref) {
46255
46363
  setVisibleYKeys([]);
46256
46364
  };
46257
46365
  }, [chart.lines]);
46366
+ var centerX = (groupWidth > width ? width * WIDTH_MULTIPLIER_TO_SCROLL : width) / 2;
46367
+ var centerY = height / 2 - margin.top * 2;
46368
+ var handleMouseMove = useCallback(function (event) {
46369
+ var radarTooltipData = getRadarTooltipData({
46370
+ data: chart.data,
46371
+ event: event,
46372
+ totalDataPoints: chart.data.length,
46373
+ centerX: centerX,
46374
+ centerY: centerY
46375
+ });
46376
+ if (radarTooltipData) {
46377
+ setHoveredDataPointIndex(radarTooltipData.dataPointIndex);
46378
+ showTooltip({
46379
+ tooltipLeft: event.pageX,
46380
+ tooltipTop: event.pageY,
46381
+ tooltipData: radarTooltipData.tooltipData
46382
+ });
46383
+ }
46384
+ }, [showTooltip, chart.data, centerX, centerY]);
46385
+ var handleMouseLeave = useCallback(function () {
46386
+ hideTooltip();
46387
+ setHoveredDataPointIndex(-1);
46388
+ }, [hideTooltip]);
46258
46389
  if (width < 10) return null;
46259
46390
  return jsxs(Fragment, {
46260
46391
  children: [jsx(ChartWrapper$1, {
46261
46392
  width: groupWidth > width ? width * WIDTH_MULTIPLIER_TO_SCROLL : width,
46262
46393
  height: height,
46263
46394
  showLegend: options.showLegend,
46395
+ onMouseMove: handleMouseMove,
46396
+ onMouseLeave: handleMouseLeave,
46264
46397
  children: jsxs(Group$2, {
46265
46398
  innerRef: ref,
46266
- top: height / 2 - margin.top * 2,
46267
- left: (groupWidth > width ? width * WIDTH_MULTIPLIER_TO_SCROLL : width) / 2,
46399
+ top: centerY,
46400
+ left: centerX,
46268
46401
  children: [jsx(MiddleLine, {
46269
46402
  chart: chart,
46270
46403
  radius: radius,
@@ -46277,7 +46410,9 @@ var RadarChart$2 = function RadarChart(_ref) {
46277
46410
  }), jsx(Polygons, {
46278
46411
  chart: chart,
46279
46412
  radius: radius,
46280
- visibleYKeys: visibleYKeys
46413
+ visibleYKeys: visibleYKeys,
46414
+ tooltipData: tooltipData,
46415
+ hoveredDataPointIndex: hoveredDataPointIndex
46281
46416
  })]
46282
46417
  })
46283
46418
  }), options.showLegend && jsx(Legend$1, {
@@ -46289,6 +46424,21 @@ var RadarChart$2 = function RadarChart(_ref) {
46289
46424
  setVisibleYKeys: setVisibleYKeys,
46290
46425
  keys: chart.keys,
46291
46426
  marginLeft: margin.left - margin.leftTitleOffset
46427
+ }), tooltipOpen && tooltipData && chart.x.key && jsx(Tooltip$1, {
46428
+ items: [{
46429
+ legendItems: chart.lines,
46430
+ visibleYKeys: visibleYKeys,
46431
+ conditionalFormattingRules: []
46432
+ }],
46433
+ tooltipData: tooltipData,
46434
+ tooltipLeft: tooltipLeft,
46435
+ tooltipTop: tooltipTop,
46436
+ xKey: chart.x.key,
46437
+ keys: chart.keys,
46438
+ yKeys: chart.y.keys,
46439
+ showRoundedTotal: options.showRoundedTotal,
46440
+ theme: themeCSS.popoverMenus,
46441
+ shouldShowColorLegend: false
46292
46442
  })]
46293
46443
  });
46294
46444
  };
@@ -52624,7 +52774,7 @@ var getScaleAndTicks$2 = function getScaleAndTicks(_ref) {
52624
52774
  var maxY = y.max || 0;
52625
52775
  var minY = Math.min(y.min || 0, 0);
52626
52776
  var yTickInterval = getNiceInterval$2((maxY - minY) / (tickCountYAxis - 1));
52627
- for (var i = 0; i <= tickCountYAxis; i++) {
52777
+ for (var i = 0; i <= Math.ceil(maxY / yTickInterval); i++) {
52628
52778
  var _value = yTickInterval * i;
52629
52779
  var formattedValue = formattingFunctionY(_value, nullValue);
52630
52780
  yTicks.push({
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vizzly/dashboard",
3
3
  "author": "james@vizzly.co",
4
- "version": "0.15.0-dev-307a9830cb4e82f036693ccfe2634f74381a2b72",
4
+ "version": "0.15.0-dev-d949562f7d69a747b6f32349c6a53a2dc3ed06f9",
5
5
  "source": "src/index.tsx",
6
6
  "types": "./dist/dashboard/src/index.d.ts",
7
7
  "module": "./dist/dashboard.esm.js",
@@ -1,2 +0,0 @@
1
- /// <reference types="react" />
2
- export declare const GRID_STYLES: React.CSSProperties;