@mamrp/components 1.7.30 → 1.7.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,145 +1,23 @@
1
1
  import * as React from 'react';
2
2
 
3
+ interface Dataset {
4
+ label: string;
5
+ data: (number | null)[];
6
+ backgroundColor: string;
7
+ borderColor?: string;
8
+ borderWidth?: number;
9
+ type?: "line";
10
+ order?: number;
11
+ tension?: number;
12
+ pointRadius?: number;
13
+ fill?: boolean;
14
+ }
3
15
  interface Props$1 {
4
16
  labels: string[];
5
- datasets: {
6
- label: string;
7
- data: (number | null)[];
8
- backgroundColor: string;
9
- borderColor?: string;
10
- borderWidth?: number;
11
- type?: "line";
12
- order?: number;
13
- tension?: number;
14
- pointRadius?: number;
15
- fill?: boolean;
16
- }[];
17
+ datasets: Dataset[];
17
18
  height?: number;
18
- /**
19
- * حداقل مقدار محور Y (اختیاری)
20
- * اگر ست نشود، Chart.js خودش محاسبه می‌کند
21
- * ⚠️ نکته: اگر این مقدار ست شود، beginAtZero نادیده گرفته می‌شود
22
- */
23
- yAxisMin?: number;
24
- /**
25
- * حداکثر مقدار محور Y (اختیاری)
26
- * اگر ست نشود، Chart.js خودش محاسبه می‌کند
27
- */
28
- yAxisMax?: number;
29
- /**
30
- * آیا محور Y از صفر شروع شود؟
31
- * پیش‌فرض: true
32
- * ⚠️ نکته: اگر yAxisMin ست شود، این گزینه نادیده گرفته می‌شود
33
- */
34
- beginAtZero?: boolean;
35
- /**
36
- * استفاده از مقیاس لگاریتمی برای محور Y
37
- * مناسب برای داده‌هایی که اختلاف خیلی زیادی دارند
38
- * پیش‌فرض: false
39
- * ⚠️ نکته: مقادیر 0 یا منفی در مقیاس لگاریتمی نمایش داده نمی‌شوند
40
- */
41
- logarithmic?: boolean;
42
- /**
43
- * حداقل ارتفاع میله برای داده‌های خیلی کوچک (پیکسل)
44
- * مقادیر خیلی کوچک (مثل 1) در کنار مقادیر بزرگ (مثل 10000) گم نمی‌شوند
45
- * پیش‌فرض: 0 (غیرفعال)
46
- */
47
- minBarLength?: number;
48
19
  }
49
- /**
50
- * 📊 BarChart — کامپوننت نمودار میله‌ای (Bar/Combo)
51
- *
52
- * @component BarChart
53
- *
54
- * @param {string[]} labels - آرایه‌ای از برچسب‌ها برای محور افقی (X).
55
- * @param {Array<{
56
- * label: string,
57
- * data: number[],
58
- * backgroundColor: string,
59
- * borderColor?: string,
60
- * borderWidth?: number,
61
- * type?: "line",
62
- * order?: number,
63
- * tension?: number,
64
- * pointRadius?: number,
65
- * fill?: boolean
66
- * }>} datasets - آرایه‌ای از آبجکت‌های داده برای هر سری نمودار.
67
- * - label: عنوان داده‌ها (نمایش در legend)
68
- * - data: آرایه‌ای از مقادیر هر سری
69
- * - backgroundColor: رنگ میله یا خط
70
- * - borderColor: (اختیاری) رنگ خط دور میله یا خط
71
- * - borderWidth: (اختیاری) ضخامت خط دور میله یا خط
72
- * - type: (اختیاری) اگر "line" باشد، سری به صورت خطی نمایش داده می‌شود (نمودار ترکیبی)
73
- * - order: (اختیاری) ترتیب رسم سری (سری با order بالاتر روی بقیه قرار می‌گیرد)
74
- * - tension: (اختیاری) میزان خمیدگی خط (برای سری‌های خطی)
75
- * - pointRadius: (اختیاری) شعاع نقاط روی خط (برای سری‌های خطی)
76
- * - fill: (اختیاری) پر شدن زیر خط (برای سری‌های خطی)
77
- *
78
- * @param {number} [height] - ارتفاع نمودار (پیش‌فرض: 600 پیکسل)
79
- * @param {number} [yAxisMin] - حداقل مقدار محور Y (نادیده‌گرفتن beginAtZero)
80
- * @param {number} [yAxisMax] - حداکثر مقدار محور Y
81
- * @param {boolean} [beginAtZero=true] - آیا محور Y از صفر شروع شود؟ (اگر yAxisMin ست شود نادیده گرفته می‌شود)
82
- * @param {boolean} [logarithmic=false] - استفاده از مقیاس لگاریتمی (مقادیر 0 یا منفی نمایش داده نمی‌شوند)
83
- * @param {number} [minBarLength=0] - حداقل ارتفاع میله (پیکسل) - برای جلوگیری از گم شدن داده‌های کوچک
84
- *
85
- * @description
86
- * این کامپوننت یک نمودار میله‌ای (Bar) یا ترکیبی Bar/Line با قابلیت شخصی‌سازی کامل است.
87
- * - پشتیبانی از فونت وزیر و راست‌چین
88
- * - ریسپانسیو و مناسب صفحات فارسی
89
- * - امکان نمایش چند سری داده به صورت میله‌ای و خطی همزمان (Combo)
90
- * - شخصی‌سازی رنگ، ضخامت، ترتیب و استایل هر سری
91
- * - پشتیبانی از مقیاس لگاریتمی برای داده‌های با اختلاف زیاد
92
- * - minBarLength برای نمایش داده‌های خیلی کوچک در کنار بزرگ‌ها
93
- *
94
- * @returns {JSX.Element} یک نمودار میله‌ای یا ترکیبی با داده‌های ورودی
95
- *
96
- * @example
97
- * ```jsx
98
- * // نمودار ساده
99
- * <BarChart
100
- * labels={["شنبه", "یکشنبه", "دوشنبه"]}
101
- * datasets={[
102
- * {
103
- * label: "فروش",
104
- * data: [10, 20, 15],
105
- * backgroundColor: "rgba(75,192,192,0.7)",
106
- * },
107
- * ]}
108
- * height={400}
109
- * />
110
- *
111
- * // نمودار با داده‌های اختلاف زیاد (مقیاس لگاریتمی)
112
- * <BarChart
113
- * labels={["A", "B", "C", "D"]}
114
- * datasets={[
115
- * {
116
- * label: "مقادیر",
117
- * data: [5, 50, 5000, 50000],
118
- * backgroundColor: "rgba(75,192,192,0.7)",
119
- * },
120
- * ]}
121
- * logarithmic={true}
122
- * height={400}
123
- * />
124
- *
125
- * // نمودار با کنترل دستی بازه محور Y
126
- * <BarChart
127
- * labels={["A", "B", "C"]}
128
- * datasets={[
129
- * {
130
- * label: "مقادیر",
131
- * data: [100, 150, 120],
132
- * backgroundColor: "rgba(75,192,192,0.7)",
133
- * },
134
- * ]}
135
- * yAxisMin={80}
136
- * yAxisMax={200}
137
- * beginAtZero={false}
138
- * height={400}
139
- * />
140
- * ```
141
- */
142
- declare function BarChart({ labels, datasets, height, yAxisMin, yAxisMax, beginAtZero, logarithmic, minBarLength, }: Props$1): React.JSX.Element;
20
+ declare function BarChart({ labels, datasets, height }: Props$1): React.JSX.Element;
143
21
 
144
22
  interface Props {
145
23
  labels: string[];
@@ -1,145 +1,23 @@
1
1
  import * as React from 'react';
2
2
 
3
+ interface Dataset {
4
+ label: string;
5
+ data: (number | null)[];
6
+ backgroundColor: string;
7
+ borderColor?: string;
8
+ borderWidth?: number;
9
+ type?: "line";
10
+ order?: number;
11
+ tension?: number;
12
+ pointRadius?: number;
13
+ fill?: boolean;
14
+ }
3
15
  interface Props$1 {
4
16
  labels: string[];
5
- datasets: {
6
- label: string;
7
- data: (number | null)[];
8
- backgroundColor: string;
9
- borderColor?: string;
10
- borderWidth?: number;
11
- type?: "line";
12
- order?: number;
13
- tension?: number;
14
- pointRadius?: number;
15
- fill?: boolean;
16
- }[];
17
+ datasets: Dataset[];
17
18
  height?: number;
18
- /**
19
- * حداقل مقدار محور Y (اختیاری)
20
- * اگر ست نشود، Chart.js خودش محاسبه می‌کند
21
- * ⚠️ نکته: اگر این مقدار ست شود، beginAtZero نادیده گرفته می‌شود
22
- */
23
- yAxisMin?: number;
24
- /**
25
- * حداکثر مقدار محور Y (اختیاری)
26
- * اگر ست نشود، Chart.js خودش محاسبه می‌کند
27
- */
28
- yAxisMax?: number;
29
- /**
30
- * آیا محور Y از صفر شروع شود؟
31
- * پیش‌فرض: true
32
- * ⚠️ نکته: اگر yAxisMin ست شود، این گزینه نادیده گرفته می‌شود
33
- */
34
- beginAtZero?: boolean;
35
- /**
36
- * استفاده از مقیاس لگاریتمی برای محور Y
37
- * مناسب برای داده‌هایی که اختلاف خیلی زیادی دارند
38
- * پیش‌فرض: false
39
- * ⚠️ نکته: مقادیر 0 یا منفی در مقیاس لگاریتمی نمایش داده نمی‌شوند
40
- */
41
- logarithmic?: boolean;
42
- /**
43
- * حداقل ارتفاع میله برای داده‌های خیلی کوچک (پیکسل)
44
- * مقادیر خیلی کوچک (مثل 1) در کنار مقادیر بزرگ (مثل 10000) گم نمی‌شوند
45
- * پیش‌فرض: 0 (غیرفعال)
46
- */
47
- minBarLength?: number;
48
19
  }
49
- /**
50
- * 📊 BarChart — کامپوننت نمودار میله‌ای (Bar/Combo)
51
- *
52
- * @component BarChart
53
- *
54
- * @param {string[]} labels - آرایه‌ای از برچسب‌ها برای محور افقی (X).
55
- * @param {Array<{
56
- * label: string,
57
- * data: number[],
58
- * backgroundColor: string,
59
- * borderColor?: string,
60
- * borderWidth?: number,
61
- * type?: "line",
62
- * order?: number,
63
- * tension?: number,
64
- * pointRadius?: number,
65
- * fill?: boolean
66
- * }>} datasets - آرایه‌ای از آبجکت‌های داده برای هر سری نمودار.
67
- * - label: عنوان داده‌ها (نمایش در legend)
68
- * - data: آرایه‌ای از مقادیر هر سری
69
- * - backgroundColor: رنگ میله یا خط
70
- * - borderColor: (اختیاری) رنگ خط دور میله یا خط
71
- * - borderWidth: (اختیاری) ضخامت خط دور میله یا خط
72
- * - type: (اختیاری) اگر "line" باشد، سری به صورت خطی نمایش داده می‌شود (نمودار ترکیبی)
73
- * - order: (اختیاری) ترتیب رسم سری (سری با order بالاتر روی بقیه قرار می‌گیرد)
74
- * - tension: (اختیاری) میزان خمیدگی خط (برای سری‌های خطی)
75
- * - pointRadius: (اختیاری) شعاع نقاط روی خط (برای سری‌های خطی)
76
- * - fill: (اختیاری) پر شدن زیر خط (برای سری‌های خطی)
77
- *
78
- * @param {number} [height] - ارتفاع نمودار (پیش‌فرض: 600 پیکسل)
79
- * @param {number} [yAxisMin] - حداقل مقدار محور Y (نادیده‌گرفتن beginAtZero)
80
- * @param {number} [yAxisMax] - حداکثر مقدار محور Y
81
- * @param {boolean} [beginAtZero=true] - آیا محور Y از صفر شروع شود؟ (اگر yAxisMin ست شود نادیده گرفته می‌شود)
82
- * @param {boolean} [logarithmic=false] - استفاده از مقیاس لگاریتمی (مقادیر 0 یا منفی نمایش داده نمی‌شوند)
83
- * @param {number} [minBarLength=0] - حداقل ارتفاع میله (پیکسل) - برای جلوگیری از گم شدن داده‌های کوچک
84
- *
85
- * @description
86
- * این کامپوننت یک نمودار میله‌ای (Bar) یا ترکیبی Bar/Line با قابلیت شخصی‌سازی کامل است.
87
- * - پشتیبانی از فونت وزیر و راست‌چین
88
- * - ریسپانسیو و مناسب صفحات فارسی
89
- * - امکان نمایش چند سری داده به صورت میله‌ای و خطی همزمان (Combo)
90
- * - شخصی‌سازی رنگ، ضخامت، ترتیب و استایل هر سری
91
- * - پشتیبانی از مقیاس لگاریتمی برای داده‌های با اختلاف زیاد
92
- * - minBarLength برای نمایش داده‌های خیلی کوچک در کنار بزرگ‌ها
93
- *
94
- * @returns {JSX.Element} یک نمودار میله‌ای یا ترکیبی با داده‌های ورودی
95
- *
96
- * @example
97
- * ```jsx
98
- * // نمودار ساده
99
- * <BarChart
100
- * labels={["شنبه", "یکشنبه", "دوشنبه"]}
101
- * datasets={[
102
- * {
103
- * label: "فروش",
104
- * data: [10, 20, 15],
105
- * backgroundColor: "rgba(75,192,192,0.7)",
106
- * },
107
- * ]}
108
- * height={400}
109
- * />
110
- *
111
- * // نمودار با داده‌های اختلاف زیاد (مقیاس لگاریتمی)
112
- * <BarChart
113
- * labels={["A", "B", "C", "D"]}
114
- * datasets={[
115
- * {
116
- * label: "مقادیر",
117
- * data: [5, 50, 5000, 50000],
118
- * backgroundColor: "rgba(75,192,192,0.7)",
119
- * },
120
- * ]}
121
- * logarithmic={true}
122
- * height={400}
123
- * />
124
- *
125
- * // نمودار با کنترل دستی بازه محور Y
126
- * <BarChart
127
- * labels={["A", "B", "C"]}
128
- * datasets={[
129
- * {
130
- * label: "مقادیر",
131
- * data: [100, 150, 120],
132
- * backgroundColor: "rgba(75,192,192,0.7)",
133
- * },
134
- * ]}
135
- * yAxisMin={80}
136
- * yAxisMax={200}
137
- * beginAtZero={false}
138
- * height={400}
139
- * />
140
- * ```
141
- */
142
- declare function BarChart({ labels, datasets, height, yAxisMin, yAxisMax, beginAtZero, logarithmic, minBarLength, }: Props$1): React.JSX.Element;
20
+ declare function BarChart({ labels, datasets, height }: Props$1): React.JSX.Element;
143
21
 
144
22
  interface Props {
145
23
  labels: string[];
@@ -39,10 +39,10 @@ module.exports = __toCommonJS(charts_exports);
39
39
  var React = __toESM(require("react"));
40
40
 
41
41
  // src/charts/bar/index.tsx
42
+ var import_react = require("react");
42
43
  var import_react_chartjs_2 = require("react-chartjs-2");
43
44
  var import_chart = require("chart.js");
44
45
  var import_material = require("@mui/material");
45
- var import_react = require("react");
46
46
  import_chart.Chart.register(
47
47
  import_chart.CategoryScale,
48
48
  import_chart.LinearScale,
@@ -55,169 +55,109 @@ import_chart.Chart.register(
55
55
  import_chart.BarController,
56
56
  import_chart.LineController
57
57
  );
58
- import_chart.Chart.defaults.font.family = "Vazir, sans-serif";
59
- function BarChart({
60
- labels,
61
- datasets,
62
- height,
63
- yAxisMin,
64
- yAxisMax,
65
- beginAtZero = true,
66
- logarithmic = false,
67
- minBarLength = 0
68
- }) {
58
+ function BarChart({ labels, datasets, height }) {
69
59
  const chartRef = (0, import_react.useRef)(null);
70
- const [fontLoaded, setFontLoaded] = (0, import_react.useState)(false);
71
- (0, import_react.useEffect)(() => {
72
- let isMounted = true;
73
- const loadFont = async () => {
74
- if (typeof document !== "undefined" && document.fonts) {
75
- try {
76
- await document.fonts.load("16px Vazir");
77
- await document.fonts.ready;
78
- } catch (e) {
79
- }
80
- if (isMounted) {
81
- setFontLoaded(true);
82
- setTimeout(() => {
83
- if (chartRef.current) {
84
- chartRef.current.update();
85
- }
86
- }, 100);
87
- }
88
- } else {
89
- if (isMounted) setFontLoaded(true);
90
- }
91
- };
92
- loadFont();
93
- return () => {
94
- isMounted = false;
95
- };
96
- }, []);
97
- const getVisibleData = () => {
98
- if (!chartRef.current) return [];
99
- return datasets.reduce((acc, ds, i) => {
100
- if ((ds.type === void 0 || ds.type === "bar") && chartRef.current && typeof chartRef.current.isDatasetVisible === "function" && chartRef.current.isDatasetVisible(i)) {
101
- ds.data.forEach((v) => {
102
- if (typeof v === "number" && v > 0) acc.push(v);
103
- });
104
- }
105
- return acc;
106
- }, []);
107
- };
108
- let autoMin = yAxisMin;
109
- let autoMax = yAxisMax;
110
- if (logarithmic && yAxisMin === void 0 && yAxisMax === void 0) {
111
- const visibleData = getVisibleData();
112
- if (visibleData.length) {
113
- const minVal = Math.min(...visibleData);
114
- const maxVal = Math.max(...visibleData);
115
- autoMin = minVal < 1 ? 0.5 : minVal * 0.7;
116
- autoMax = minVal === maxVal ? maxVal * 1.2 : maxVal * 1.1;
117
- }
60
+ const [hiddenIndices, setHiddenIndices] = (0, import_react.useState)(/* @__PURE__ */ new Set());
61
+ const visibleDatasets = datasets.filter((_, i) => !hiddenIndices.has(i));
62
+ const allValues = [].concat(
63
+ ...visibleDatasets.map(
64
+ (ds) => ds.data.filter((v) => v !== null)
65
+ )
66
+ );
67
+ const minValue = allValues.length ? Math.min(...allValues) : 0;
68
+ const maxValue = allValues.length ? Math.max(...allValues) : 1;
69
+ const useLogScale = maxValue / (minValue || 1) > 50;
70
+ const scaleType = useLogScale ? "logarithmic" : "linear";
71
+ let yMin = minValue;
72
+ let yMax = maxValue;
73
+ let stepSize = 1;
74
+ if (scaleType === "linear") {
75
+ const range = yMax - yMin;
76
+ const targetLines = 8;
77
+ let rawStep = range / targetLines;
78
+ const magnitude = Math.pow(10, Math.floor(Math.log10(rawStep)));
79
+ const normalized = rawStep / magnitude;
80
+ if (normalized <= 1) stepSize = 1 * magnitude;
81
+ else if (normalized <= 2) stepSize = 2 * magnitude;
82
+ else if (normalized <= 5) stepSize = 5 * magnitude;
83
+ else stepSize = 10 * magnitude;
84
+ yMin = Math.floor(yMin / stepSize) * stepSize;
85
+ yMax = Math.ceil(yMax / stepSize) * stepSize;
86
+ } else {
87
+ yMin = Math.max(minValue, 1);
88
+ yMax = maxValue;
89
+ stepSize = void 0;
118
90
  }
119
- (0, import_react.useEffect)(() => {
120
- if (!logarithmic || yAxisMin !== void 0 || yAxisMax !== void 0) return;
121
- if (!chartRef.current) return;
122
- const handler = () => {
123
- const visibleData = getVisibleData();
124
- if (visibleData.length && chartRef.current && chartRef.current.options && chartRef.current.options.scales && chartRef.current.options.scales.y) {
125
- const minVal = Math.min(...visibleData);
126
- const maxVal = Math.max(...visibleData);
127
- chartRef.current.options.scales.y.min = minVal < 1 ? 0.5 : minVal * 0.7;
128
- chartRef.current.options.scales.y.max = minVal === maxVal ? maxVal * 1.2 : maxVal * 1.1;
129
- chartRef.current.update();
130
- }
131
- };
132
- chartRef.current?.canvas?.addEventListener("click", handler);
133
- return () => {
134
- chartRef.current?.canvas?.removeEventListener("click", handler);
135
- };
136
- }, [logarithmic, yAxisMin, yAxisMax, datasets]);
137
91
  const options = {
138
92
  responsive: true,
139
93
  maintainAspectRatio: false,
94
+ animation: { duration: 500 },
140
95
  scales: {
141
96
  y: {
142
- type: logarithmic ? "logarithmic" : "linear",
143
- ...yAxisMin === void 0 && yAxisMax === void 0 && !logarithmic && {
144
- beginAtZero
145
- },
146
- ...autoMin !== void 0 && { min: autoMin },
147
- ...autoMax !== void 0 && { max: autoMax },
97
+ type: scaleType,
98
+ min: yMin,
99
+ max: yMax,
148
100
  ticks: {
149
- font: {
150
- family: "Vazir, sans-serif",
151
- size: 14
101
+ ...stepSize !== void 0 ? { stepSize } : {},
102
+ callback: (value) => {
103
+ const num = Number(value);
104
+ if (scaleType === "logarithmic") return num.toLocaleString();
105
+ if (num >= 1e3) return num.toLocaleString();
106
+ if (stepSize && stepSize < 1) return num.toFixed(2);
107
+ return num;
152
108
  },
153
- ...logarithmic && {
154
- callback: function(value) {
155
- const numValue = Number(value);
156
- if (numValue === 0) return null;
157
- const log10 = Math.log10(numValue);
158
- if (Math.abs(log10 - Math.round(log10)) < 1e-4) {
159
- if (numValue >= 1e6) return (numValue / 1e6).toFixed(1) + "M";
160
- if (numValue >= 1e3) return (numValue / 1e3).toFixed(1) + "K";
161
- return numValue;
162
- }
163
- return null;
164
- }
165
- }
109
+ font: { family: "'Vazir', sans-serif", size: 14 }
166
110
  }
167
111
  },
168
112
  x: {
169
113
  ticks: {
170
114
  autoSkip: false,
171
- font: {
172
- family: "Vazir, sans-serif",
173
- size: 13
174
- }
115
+ font: { family: "'Vazir', sans-serif", size: 13 }
175
116
  }
176
117
  }
177
118
  },
178
119
  plugins: {
179
- datalabels: {
180
- display: false
181
- // ← غیرفعال
182
- },
183
- tooltip: {
184
- bodyFont: {
185
- family: "Vazir, sans-serif",
186
- size: 14
187
- },
188
- titleFont: {
189
- family: "Vazir, sans-serif",
190
- size: 16
191
- }
192
- },
193
120
  legend: {
194
121
  labels: {
195
- generateLabels: function(chart) {
196
- const labels2 = import_chart.Chart.defaults.plugins.legend.labels.generateLabels(chart);
197
- return labels2.map((label) => ({
198
- ...label,
199
- text: " " + label.text + " ",
200
- boxWidth: 40,
201
- boxHeight: 20
202
- }));
203
- },
204
- padding: 15,
205
122
  usePointStyle: true,
206
- font: {
207
- size: 16,
208
- family: "Vazir, sans-serif"
209
- },
210
- boxWidth: 40,
211
- paddingBottom: 10
123
+ // دایره‌ای
124
+ font: { size: 16, family: "'Vazir', sans-serif" }
125
+ },
126
+ onClick: (e, legendItem, legend) => {
127
+ const index = legendItem.datasetIndex;
128
+ const newHidden = new Set(hiddenIndices);
129
+ if (hiddenIndices.has(index)) newHidden.delete(index);
130
+ else newHidden.add(index);
131
+ setHiddenIndices(newHidden);
212
132
  }
213
- }
133
+ },
134
+ tooltip: {
135
+ bodyFont: { family: "'Vazir', sans-serif", size: 14 },
136
+ titleFont: { family: "'Vazir', sans-serif", size: 16 }
137
+ },
138
+ datalabels: { display: false }
214
139
  }
215
140
  };
216
- const processedDatasets = datasets.map((ds) => ({
217
- ...ds,
218
- minBarLength
219
- }));
220
- return /* @__PURE__ */ React.createElement(import_material.Box, { height: height ?? 600 }, fontLoaded && /* @__PURE__ */ React.createElement(import_react_chartjs_2.Chart, { ref: chartRef, type: "bar", data: { labels, datasets: processedDatasets }, options }));
141
+ import_chart.Chart.defaults.elements.point.radius = 5;
142
+ import_chart.Chart.defaults.elements.point.hoverRadius = 9;
143
+ import_chart.Chart.defaults.elements.point.borderWidth = 0.2;
144
+ import_chart.Chart.defaults.elements.point.backgroundColor = "red";
145
+ import_chart.Chart.defaults.elements.point.borderColor = "black";
146
+ return /* @__PURE__ */ React.createElement(import_material.Box, { height: height ?? 600 }, /* @__PURE__ */ React.createElement(
147
+ import_react_chartjs_2.Chart,
148
+ {
149
+ ref: chartRef,
150
+ type: "bar",
151
+ data: {
152
+ labels,
153
+ datasets: datasets.map((ds, i) => ({
154
+ ...ds,
155
+ hidden: hiddenIndices.has(i)
156
+ }))
157
+ },
158
+ options
159
+ }
160
+ ));
221
161
  }
222
162
 
223
163
  // src/charts/pie/index.tsx