@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.
- package/dist/charts/index.d.mts +14 -136
- package/dist/charts/index.d.ts +14 -136
- package/dist/charts/index.js +80 -140
- package/dist/charts/index.js.map +1 -1
- package/dist/charts/index.mjs +83 -143
- package/dist/charts/index.mjs.map +1 -1
- package/dist/date-pickers/index.d.mts +0 -0
- package/dist/date-pickers/index.d.ts +0 -0
- package/dist/date-pickers/index.js +0 -0
- package/dist/date-pickers/index.js.map +0 -0
- package/dist/date-pickers/index.mjs +0 -0
- package/dist/date-pickers/index.mjs.map +0 -0
- package/dist/index.d.mts +0 -0
- package/dist/index.d.ts +0 -0
- package/dist/index.js +1 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/pagination/index.d.mts +0 -0
- package/dist/pagination/index.d.ts +0 -0
- package/dist/pagination/index.js +0 -0
- package/dist/pagination/index.js.map +0 -0
- package/dist/pagination/index.mjs +0 -0
- package/dist/pagination/index.mjs.map +0 -0
- package/dist/selectors/index.d.mts +0 -0
- package/dist/selectors/index.d.ts +0 -0
- package/dist/selectors/index.js +0 -0
- package/dist/selectors/index.js.map +1 -1
- package/dist/selectors/index.mjs +0 -0
- package/dist/selectors/index.mjs.map +1 -1
- package/package.json +2 -3
package/dist/charts/index.d.mts
CHANGED
|
@@ -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[];
|
package/dist/charts/index.d.ts
CHANGED
|
@@ -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[];
|
package/dist/charts/index.js
CHANGED
|
@@ -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
|
-
|
|
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 [
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
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:
|
|
143
|
-
|
|
144
|
-
|
|
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
|
-
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
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
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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
|