@app-studio/web 0.9.48 → 0.9.50

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.
@@ -4882,17 +4882,28 @@
4882
4882
  borderStyle: 'solid',
4883
4883
  borderColor: 'transparent',
4884
4884
  _hover: {
4885
- opacity: 0.9,
4886
- color: textColor
4885
+ opacity: 0.9
4887
4886
  },
4888
4887
  _active: {
4889
- opacity: 0.95,
4890
- color: textColor
4888
+ opacity: 0.95
4891
4889
  },
4892
4890
  _focusVisible: {
4893
4891
  outline: 'none',
4894
- boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color,
4895
- color: textColor
4892
+ boxShadow: "0 0 0 2px rgba(255, 255, 255, 1), 0 0 0 4px " + color
4893
+ },
4894
+ transition: 'background-color 0.2s ease, opacity 0.2s ease'
4895
+ },
4896
+ reversed: {
4897
+ backgroundColor: textColor,
4898
+ color: color,
4899
+ borderWidth: 1,
4900
+ borderStyle: 'solid',
4901
+ borderColor: textColor,
4902
+ _hover: {
4903
+ opacity: 0.9
4904
+ },
4905
+ _active: {
4906
+ opacity: 0.95
4896
4907
  },
4897
4908
  transition: 'background-color 0.2s ease, opacity 0.2s ease'
4898
4909
  },
@@ -4932,7 +4943,6 @@
4932
4943
  opacity: 0.9
4933
4944
  },
4934
4945
  _active: {
4935
- color: color,
4936
4946
  opacity: 0.95
4937
4947
  },
4938
4948
  _focusVisible: {
@@ -4952,11 +4962,9 @@
4952
4962
  textDecorationThickness: '1px',
4953
4963
  textDecorationColor: color,
4954
4964
  _hover: {
4955
- color: color,
4956
4965
  opacity: 0.8
4957
4966
  },
4958
4967
  _active: {
4959
- color: color,
4960
4968
  opacity: 0.9
4961
4969
  },
4962
4970
  _focusVisible: {
@@ -6496,12 +6504,14 @@
6496
6504
  var groupWidth = chartWidth / barCount;
6497
6505
  var barWidth = groupWidth * 0.8 / seriesCount;
6498
6506
  var barSpacing = groupWidth * 0.2 / (seriesCount + 1);
6507
+ // Calculate effective max value
6508
+ var effectiveMaxValue = maxValue || 10;
6499
6509
  // Generate y-axis ticks
6500
6510
  var yAxisTicks = React.useMemo(() => {
6501
6511
  var tickCount = 5;
6502
6512
  var ticks = [];
6503
6513
  for (var i = 0; i <= tickCount; i++) {
6504
- var value = maxValue / tickCount * i;
6514
+ var value = effectiveMaxValue / tickCount * i;
6505
6515
  ticks.push(value);
6506
6516
  }
6507
6517
  return ticks;
@@ -6534,7 +6544,7 @@
6534
6544
  }
6535
6545
  }), label);
6536
6546
  }), yAxisTicks.map((tick, index) => {
6537
- var y = height - padding.bottom - tick / maxValue * chartHeight;
6547
+ var y = height - padding.bottom - tick / effectiveMaxValue * chartHeight;
6538
6548
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
6539
6549
  key: "y-tick-" + index
6540
6550
  }, /*#__PURE__*/React__default.createElement("text", Object.assign({
@@ -6556,7 +6566,7 @@
6556
6566
  }), data.series.map((series, seriesIndex) => (/*#__PURE__*/React__default.createElement(React__default.Fragment, {
6557
6567
  key: "series-" + seriesIndex
6558
6568
  }, series.data.map((value, dataIndex) => {
6559
- var barHeight = value / maxValue * chartHeight * animationProgress;
6569
+ var barHeight = value / effectiveMaxValue * chartHeight * animationProgress;
6560
6570
  var x = padding.left + dataIndex * groupWidth + barSpacing * (seriesIndex + 1) + barWidth * seriesIndex;
6561
6571
  var y = height - padding.bottom - barHeight;
6562
6572
  var categoryLabel = data.labels[dataIndex];
@@ -6669,12 +6679,14 @@
6669
6679
  });
6670
6680
  return max;
6671
6681
  }, [data]);
6682
+ // Calculate effective max value
6683
+ var effectiveMaxValue = maxValue || 10;
6672
6684
  // Generate y-axis ticks
6673
6685
  var yAxisTicks = React.useMemo(() => {
6674
6686
  var tickCount = 5;
6675
6687
  var ticks = [];
6676
6688
  for (var i = 0; i <= tickCount; i++) {
6677
- var value = maxValue / tickCount * i;
6689
+ var value = effectiveMaxValue / tickCount * i;
6678
6690
  ticks.push(value);
6679
6691
  }
6680
6692
  return ticks;
@@ -6683,7 +6695,7 @@
6683
6695
  var generatePath = series => {
6684
6696
  var points = series.map((value, index) => {
6685
6697
  var x = padding.left + index / (data.labels.length - 1) * chartWidth;
6686
- var y = height - padding.bottom - value / maxValue * chartHeight * animationProgress;
6698
+ var y = height - padding.bottom - value / effectiveMaxValue * chartHeight * animationProgress;
6687
6699
  return x + "," + y;
6688
6700
  });
6689
6701
  return "M " + points.join(' L ');
@@ -6695,7 +6707,7 @@
6695
6707
  var baseY = height - padding.bottom;
6696
6708
  var points = series.map((value, index) => {
6697
6709
  var x = padding.left + index / (data.labels.length - 1) * chartWidth;
6698
- var y = height - padding.bottom - value / maxValue * chartHeight * animationProgress;
6710
+ var y = height - padding.bottom - value / effectiveMaxValue * chartHeight * animationProgress;
6699
6711
  return x + "," + y;
6700
6712
  });
6701
6713
  return "M " + startX + "," + baseY + " L " + points.join(' L ') + " L " + endX + "," + baseY + " Z";
@@ -6728,7 +6740,7 @@
6728
6740
  }
6729
6741
  }), label);
6730
6742
  }), yAxisTicks.map((tick, index) => {
6731
- var y = height - padding.bottom - tick / maxValue * chartHeight;
6743
+ var y = height - padding.bottom - tick / effectiveMaxValue * chartHeight;
6732
6744
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
6733
6745
  key: "y-tick-" + index
6734
6746
  }, /*#__PURE__*/React__default.createElement("text", Object.assign({
@@ -6760,7 +6772,7 @@
6760
6772
  stroke: lineColor
6761
6773
  }, LineStyles, views == null ? void 0 : views.line)), series.data.map((value, dataIndex) => {
6762
6774
  var x = padding.left + dataIndex / (data.labels.length - 1) * chartWidth;
6763
- var y = height - padding.bottom - value / maxValue * chartHeight * animationProgress;
6775
+ var y = height - padding.bottom - value / effectiveMaxValue * chartHeight * animationProgress;
6764
6776
  var categoryLabel = data.labels[dataIndex];
6765
6777
  var categoryTotal = data.series.reduce((sum, currentSeries) => {
6766
6778
  var seriesValue = currentSeries.data[dataIndex];
@@ -6892,6 +6904,22 @@
6892
6904
  }, [dataPoints]);
6893
6905
  // Generate pie slices
6894
6906
  var slices = React.useMemo(() => {
6907
+ if (total === 0) {
6908
+ // Return a single placeholder slice
6909
+ var path = isDonut ? ["M " + centerX + " " + (centerY - radius), "A " + radius + " " + radius + " 0 1 1 " + centerX + " " + (centerY + radius), "A " + radius + " " + radius + " 0 1 1 " + centerX + " " + (centerY - radius), "M " + centerX + " " + (centerY - donutRadius), "A " + donutRadius + " " + donutRadius + " 0 1 0 " + centerX + " " + (centerY + donutRadius), "A " + donutRadius + " " + donutRadius + " 0 1 0 " + centerX + " " + (centerY - donutRadius), 'Z'].join(' ') : ["M " + centerX + " " + centerY, "M " + centerX + " " + (centerY - radius), "A " + radius + " " + radius + " 0 1 1 " + centerX + " " + (centerY + radius), "A " + radius + " " + radius + " 0 1 1 " + centerX + " " + (centerY - radius), 'Z'].join(' ');
6910
+ return [{
6911
+ path,
6912
+ color: '#E2E8F0',
6913
+ label: 'Total',
6914
+ value: 0,
6915
+ percentage: '0%',
6916
+ labelX: centerX,
6917
+ labelY: centerY,
6918
+ startAngle: 0,
6919
+ endAngle: Math.PI * 2,
6920
+ index: -1
6921
+ }];
6922
+ }
6895
6923
  var result = [];
6896
6924
  var startAngle = -Math.PI / 2; // Start from top (12 o'clock position)
6897
6925
  for (var i = 0; i < dataPoints.length; i++) {
@@ -6912,13 +6940,13 @@
6912
6940
  // Create arc flag
6913
6941
  var largeArcFlag = angle > Math.PI ? 1 : 0;
6914
6942
  // Create path
6915
- var path = void 0;
6943
+ var _path = void 0;
6916
6944
  if (isDonut) {
6917
6945
  // Donut slice path
6918
- path = ["M " + startX + " " + startY, "A " + radius + " " + radius + " 0 " + largeArcFlag + " 1 " + endX + " " + endY, "L " + innerEndX + " " + innerEndY, "A " + donutRadius + " " + donutRadius + " 0 " + largeArcFlag + " 0 " + innerStartX + " " + innerStartY, 'Z'].join(' ');
6946
+ _path = ["M " + startX + " " + startY, "A " + radius + " " + radius + " 0 " + largeArcFlag + " 1 " + endX + " " + endY, "L " + innerEndX + " " + innerEndY, "A " + donutRadius + " " + donutRadius + " 0 " + largeArcFlag + " 0 " + innerStartX + " " + innerStartY, 'Z'].join(' ');
6919
6947
  } else {
6920
6948
  // Regular pie slice path
6921
- path = ["M " + centerX + " " + centerY, "L " + startX + " " + startY, "A " + radius + " " + radius + " 0 " + largeArcFlag + " 1 " + endX + " " + endY, 'Z'].join(' ');
6949
+ _path = ["M " + centerX + " " + centerY, "L " + startX + " " + startY, "A " + radius + " " + radius + " 0 " + largeArcFlag + " 1 " + endX + " " + endY, 'Z'].join(' ');
6922
6950
  }
6923
6951
  // Calculate label position
6924
6952
  var labelAngle = startAngle + angle / 2;
@@ -6932,7 +6960,7 @@
6932
6960
  // Resolve the color through the theme system
6933
6961
  var resolvedColor = getColor(colorValue);
6934
6962
  result.push({
6935
- path,
6963
+ path: _path,
6936
6964
  color: resolvedColor,
6937
6965
  label: dataPoints[i].label,
6938
6966
  value: dataPoints[i].value,
@@ -7039,19 +7067,24 @@
7039
7067
  showTooltip(x, y, tooltipContent);
7040
7068
  };
7041
7069
  var handleClick = () => {
7042
- if (onSliceClick) {
7070
+ if (slice.index !== -1 && onSliceClick) {
7043
7071
  onSliceClick(dataPoints[slice.index], slice.index);
7044
7072
  }
7045
7073
  };
7074
+ var isPlaceholder = slice.index === -1;
7046
7075
  return /*#__PURE__*/React__default.createElement("g", {
7047
7076
  key: "slice-" + index
7048
7077
  }, /*#__PURE__*/React__default.createElement("path", Object.assign({
7049
7078
  d: slice.path,
7050
7079
  fill: slice.color,
7051
- onMouseEnter: handleMouseEnter,
7052
- onMouseLeave: hideTooltip,
7080
+ onMouseEnter: !isPlaceholder ? handleMouseEnter : undefined,
7081
+ onMouseLeave: !isPlaceholder ? hideTooltip : undefined,
7053
7082
  onClick: handleClick
7054
- }, PieSliceStyles, views == null ? void 0 : views.pie)), slice.endAngle - slice.startAngle > 0.2 && (/*#__PURE__*/React__default.createElement("text", {
7083
+ }, PieSliceStyles, {
7084
+ style: Object.assign({}, PieSliceStyles == null ? void 0 : PieSliceStyles.style, {
7085
+ cursor: isPlaceholder ? 'default' : 'pointer'
7086
+ })
7087
+ }, views == null ? void 0 : views.pie)), !isPlaceholder && slice.endAngle - slice.startAngle > 0.2 && (/*#__PURE__*/React__default.createElement("text", {
7055
7088
  x: slice.labelX,
7056
7089
  y: slice.labelY,
7057
7090
  textAnchor: "middle",