@mamrp/components 1.3.2 → 1.4.1
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/date-pickers/index.d.mts +391 -0
- package/dist/date-pickers/index.d.ts +391 -0
- package/dist/date-pickers/index.js +752 -0
- package/dist/date-pickers/index.js.map +1 -0
- package/dist/date-pickers/index.mjs +737 -0
- package/dist/date-pickers/index.mjs.map +1 -0
- package/dist/index.d.mts +7 -5
- package/dist/index.d.ts +7 -5
- package/dist/index.js +31 -59
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +31 -59
- package/dist/index.mjs.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { Control } from 'react-hook-form';
|
|
3
|
+
import { DateView } from '@mui/x-date-pickers';
|
|
4
|
+
import { Moment } from 'moment-jalaali';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* DateRangePicker - کامپوننت پیشرفته انتخاب بازه تاریخ شمسی
|
|
8
|
+
*
|
|
9
|
+
* یک کامپوننت کامل و حرفهای برای انتخاب بازه تاریخ با پشتیبانی از تقویم فارسی/شمسی
|
|
10
|
+
* این کامپوننت از کتابخانههای MUI، moment-jalaali و react-icons استفاده میکند
|
|
11
|
+
*
|
|
12
|
+
* @version 3.0.0
|
|
13
|
+
* @author Frontend Team
|
|
14
|
+
* @since 2024
|
|
15
|
+
* @updated October 2025
|
|
16
|
+
*
|
|
17
|
+
* ویژگیهای کلیدی:
|
|
18
|
+
* ✅ پشتیبانی کامل از تقویم شمسی (فارسی)
|
|
19
|
+
* ✅ انتخاب بازه تاریخ با نمایش visual و range highlighting
|
|
20
|
+
* ✅ Responsive design - سازگار با موبایل و دسکتاپ (breakpoint: 700px)
|
|
21
|
+
* ✅ سه حالت نمایش: تقویم popup، DatePicker جداگانه، یا تک/دوتایی
|
|
22
|
+
* ✅ تبهای هوشمند: حالت خودکار و دستی برای انتخاب تاریخ
|
|
23
|
+
* ✅ آیکونهای حرفهای React Icons در تمام بخشها
|
|
24
|
+
* ✅ آیکون پاک کردن در input با UX بهبود یافته
|
|
25
|
+
* ✅ سفارشیسازی کامل استایل و رنگبندی
|
|
26
|
+
* ✅ پشتیبانی از validation با React Hook Form
|
|
27
|
+
* ✅ قابلیت تنظیم محدوده تاریخ (min/max)
|
|
28
|
+
* ✅ حالت loading و disabled
|
|
29
|
+
* ✅ چندین حالت text alignment (left, center, right)
|
|
30
|
+
* ✅ لیست ماهها به صورت 3 ستونی با CSS Grid
|
|
31
|
+
* ✅ هایلایت روزهای جمعه، امروز و بازه انتخاب شده
|
|
32
|
+
* ✅ انیمیشن و hover effects
|
|
33
|
+
* ✅ تغییر خودکار تب در حالت دستی
|
|
34
|
+
* ✅ عدم بسته شدن پنجره بعد از پاک کردن
|
|
35
|
+
* ✅ راهنمای هوشمند برای کاربر
|
|
36
|
+
*
|
|
37
|
+
* نحوه استفاده:
|
|
38
|
+
* ```tsx
|
|
39
|
+
* import DateRangePicker from './components/date-range-picker';
|
|
40
|
+
* import { useForm } from 'react-hook-form';
|
|
41
|
+
*
|
|
42
|
+
* const MyComponent = () => {
|
|
43
|
+
* const { control } = useForm();
|
|
44
|
+
*
|
|
45
|
+
* return (
|
|
46
|
+
* <DateRangePicker
|
|
47
|
+
* fromDate="startDate"
|
|
48
|
+
* toDate="endDate"
|
|
49
|
+
* control={control}
|
|
50
|
+
* label="انتخاب بازه تاریخ"
|
|
51
|
+
* persian={true}
|
|
52
|
+
* align="center"
|
|
53
|
+
* clear={true}
|
|
54
|
+
* dualCalendar={false} // جدید: کنترل تقویم دوم
|
|
55
|
+
* singleCalendar={false}
|
|
56
|
+
* useMobilePickers={false}
|
|
57
|
+
* />
|
|
58
|
+
* );
|
|
59
|
+
* };
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* مثالهای مختلف:
|
|
63
|
+
*
|
|
64
|
+
* 1. حالت پایه (پیشفرض - تک تقویم با تبهای هوشمند):
|
|
65
|
+
* ```tsx
|
|
66
|
+
* <DateRangePicker
|
|
67
|
+
* fromDate="from"
|
|
68
|
+
* toDate="to"
|
|
69
|
+
* control={control}
|
|
70
|
+
* />
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* 2. فعال کردن تقویم دوم:
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <DateRangePicker
|
|
76
|
+
* fromDate="from"
|
|
77
|
+
* toDate="to"
|
|
78
|
+
* control={control}
|
|
79
|
+
* dualCalendar={true} // تقویم دوم فعال میشود
|
|
80
|
+
* />
|
|
81
|
+
* ```
|
|
82
|
+
*
|
|
83
|
+
* 3. تک تقویم بدون تبهای هوشمند:
|
|
84
|
+
* ```tsx
|
|
85
|
+
* <DateRangePicker
|
|
86
|
+
* fromDate="from"
|
|
87
|
+
* toDate="to"
|
|
88
|
+
* control={control}
|
|
89
|
+
* singleCalendar={true}
|
|
90
|
+
* />
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* 4. حالت DatePicker جداگانه:
|
|
94
|
+
* ```tsx
|
|
95
|
+
* <DateRangePicker
|
|
96
|
+
* fromDate="from"
|
|
97
|
+
* toDate="to"
|
|
98
|
+
* control={control}
|
|
99
|
+
* useMobilePickers={true}
|
|
100
|
+
* />
|
|
101
|
+
* ```
|
|
102
|
+
*
|
|
103
|
+
* 5. با محدودیت تاریخ و سفارشیسازی:
|
|
104
|
+
* ```tsx
|
|
105
|
+
* <DateRangePicker
|
|
106
|
+
* fromDate="from"
|
|
107
|
+
* toDate="to"
|
|
108
|
+
* control={control}
|
|
109
|
+
* minDate={moment().subtract(1, 'year')}
|
|
110
|
+
* maxDate={moment()}
|
|
111
|
+
* label="بازه زمانی گزارش"
|
|
112
|
+
* size="small"
|
|
113
|
+
* align="center"
|
|
114
|
+
* dualCalendar={true}
|
|
115
|
+
* />
|
|
116
|
+
* ```
|
|
117
|
+
*
|
|
118
|
+
* ویژگیهای تبهای هوشمند (جدید در v3.0):
|
|
119
|
+
*
|
|
120
|
+
* ```tsx
|
|
121
|
+
* // حالت هوشمند (پیشفرض): 🤖
|
|
122
|
+
* // - خودکار تشخیص میدهد کاربر کدام تاریخ را میخواهد
|
|
123
|
+
* // - اولین کلیک: تاریخ شروع ← تب "تا تاریخ" فعال
|
|
124
|
+
* // - دومین کلیک: تاریخ پایان (با تشخیص ترتیب)
|
|
125
|
+
* // - کلیک سوم: شروع مجدد
|
|
126
|
+
*
|
|
127
|
+
* // حالت دستی: 👤
|
|
128
|
+
* // - کاربر خودش تب را انتخاب میکند
|
|
129
|
+
* // - بعد از انتخاب "از تاریخ" ← خودکار به "تا تاریخ" میرود
|
|
130
|
+
* // - بعد از انتخاب "تا تاریخ" ← خودکار به "از تاریخ" برمیگردد
|
|
131
|
+
* ```
|
|
132
|
+
*
|
|
133
|
+
* آیکونهای استفاده شده (React Icons):
|
|
134
|
+
*
|
|
135
|
+
* ```tsx
|
|
136
|
+
* // Input Icons:
|
|
137
|
+
* MdCalendarToday // آیکون تقویم
|
|
138
|
+
* MdClear // آیکون پاک کردن
|
|
139
|
+
*
|
|
140
|
+
* // Tab Icons:
|
|
141
|
+
* MdSmartToy // حالت هوشمند
|
|
142
|
+
* MdPerson // حالت دستی
|
|
143
|
+
* MdDateRange // از تاریخ
|
|
144
|
+
* MdEvent // تا تاریخ
|
|
145
|
+
*
|
|
146
|
+
* // Guide Icons:
|
|
147
|
+
* MdGpsFixed // راهنمای انتخاب
|
|
148
|
+
* MdCheckCircle // تأیید انتخاب
|
|
149
|
+
* ```
|
|
150
|
+
*
|
|
151
|
+
* @interface DateRangePickerProps
|
|
152
|
+
* @property {string} fromDate - نام فیلد تاریخ شروع در form
|
|
153
|
+
* @property {string} toDate - نام فیلد تاریخ پایان در form
|
|
154
|
+
* @property {Control<any>} control - React Hook Form control object
|
|
155
|
+
* @property {DateView[]} [fromViews] - نماهای قابل نمایش برای تاریخ شروع (پیشفرض: ["year", "month", "day"])
|
|
156
|
+
* @property {DateView} [fromOpenTo] - نمای ابتدایی برای تاریخ شروع (پیشفرض: "day")
|
|
157
|
+
* @property {DateView[]} [toViews] - نماهای قابل نمایش برای تاریخ پایان (پیشفرض: ["year", "month", "day"])
|
|
158
|
+
* @property {DateView} [toOpenTo] - نمای ابتدایی برای تاریخ پایان (پیشفرض: "day")
|
|
159
|
+
* @property {string} [label] - برچسب فیلد (پیشفرض: "انتخاب بازه")
|
|
160
|
+
* @property {"small" | "medium"} [size] - اندازه فیلد (پیشفرض: "medium")
|
|
161
|
+
* @property {boolean} [disabled] - غیرفعال کردن کامپوننت (پیشفرض: false)
|
|
162
|
+
* @property {boolean} [persian] - استفاده از تاریخ فارسی (پیشفرض: true)
|
|
163
|
+
* @property {"right" | "center" | "left"} [align] - تراز متن (پیشفرض: "left")
|
|
164
|
+
* @property {boolean} [isLoading] - نمایش حالت loading (پیشفرض: false)
|
|
165
|
+
* @property {Moment} [minDate] - حداقل تاریخ قابل انتخاب
|
|
166
|
+
* @property {Moment} [maxDate] - حداکثر تاریخ قابل انتخاب
|
|
167
|
+
* @property {boolean} [clear] - نمایش دکمه پاک کردن (پیشفرض: true)
|
|
168
|
+
* @property {boolean} [singleCalendar] - نمایش تک تقویم بدون تبها (پیشفرض: false)
|
|
169
|
+
* @property {boolean} [useMobilePickers] - استفاده از DatePicker جداگانه (پیشفرض: false)
|
|
170
|
+
* @property {boolean} [dualCalendar] - فعالسازی تقویم دوم (پیشفرض: false)
|
|
171
|
+
*
|
|
172
|
+
* منطق نمایش تقویمها:
|
|
173
|
+
* - اگر dualCalendar = true ← دو تقویم کنار هم
|
|
174
|
+
* - اگر singleCalendar = true ← تک تقویم بدون تب
|
|
175
|
+
* - اگر useMobilePickers = true ← دو DatePicker جداگانه
|
|
176
|
+
* - پیشفرض ← تک تقویم با تبهای هوشمند
|
|
177
|
+
*
|
|
178
|
+
* نکات مهم:
|
|
179
|
+
* - کامپوننت خودکار mobile detection دارد (breakpoint: 700px)
|
|
180
|
+
* - در حالت موبایل، تقویمها responsive میشوند
|
|
181
|
+
* - فرمت خروجی همیشه "YYYY-MM-DD" است
|
|
182
|
+
* - روزهای جمعه با رنگ قرمز نمایش داده میشوند
|
|
183
|
+
* - امکان انتخاب بازه با کلیک و visual feedback وجود دارد
|
|
184
|
+
* - validation errors از React Hook Form پشتیبانی میشود
|
|
185
|
+
* - آیکون پاک کردن فقط در صورت وجود تاریخ نمایش داده میشود
|
|
186
|
+
* - پاک کردن از داخل popup، پنجره را نمیبندد
|
|
187
|
+
* - پاک کردن از input icon، پنجره را باز نمیکند
|
|
188
|
+
*
|
|
189
|
+
* Dependencies:
|
|
190
|
+
* - @mui/material
|
|
191
|
+
* - @mui/x-date-pickers
|
|
192
|
+
* - @mui/x-date-pickers/AdapterMomentJalaali
|
|
193
|
+
* - moment-jalaali
|
|
194
|
+
* - react-hook-form
|
|
195
|
+
* - react-icons/md
|
|
196
|
+
*
|
|
197
|
+
* @example
|
|
198
|
+
* // استفاده در فرم با تمام قابلیتها
|
|
199
|
+
* const form = useForm({
|
|
200
|
+
* defaultValues: {
|
|
201
|
+
* startDate: '',
|
|
202
|
+
* endDate: ''
|
|
203
|
+
* }
|
|
204
|
+
* });
|
|
205
|
+
*
|
|
206
|
+
* // حالت پیشفرض با تبهای هوشمند
|
|
207
|
+
* <DateRangePicker
|
|
208
|
+
* fromDate="startDate"
|
|
209
|
+
* toDate="endDate"
|
|
210
|
+
* control={form.control}
|
|
211
|
+
* label="انتخاب دوره زمانی"
|
|
212
|
+
* />
|
|
213
|
+
*
|
|
214
|
+
* // حالت dual calendar
|
|
215
|
+
* <DateRangePicker
|
|
216
|
+
* fromDate="startDate"
|
|
217
|
+
* toDate="endDate"
|
|
218
|
+
* control={form.control}
|
|
219
|
+
* dualCalendar={true}
|
|
220
|
+
* label="انتخاب بازه با دو تقویم"
|
|
221
|
+
* />
|
|
222
|
+
*/
|
|
223
|
+
|
|
224
|
+
interface DateRangePickerProps {
|
|
225
|
+
fromDate: string;
|
|
226
|
+
toDate: string;
|
|
227
|
+
fromViews?: DateView[] | undefined;
|
|
228
|
+
fromOpenTo?: DateView | undefined;
|
|
229
|
+
toViews?: DateView[] | undefined;
|
|
230
|
+
toOpenTo?: DateView | undefined;
|
|
231
|
+
control: Control<any>;
|
|
232
|
+
label?: string;
|
|
233
|
+
size?: "small" | "medium";
|
|
234
|
+
disabled?: boolean;
|
|
235
|
+
persian?: boolean;
|
|
236
|
+
align?: "right" | "center" | "left";
|
|
237
|
+
isLoading?: boolean;
|
|
238
|
+
minDate?: Moment;
|
|
239
|
+
maxDate?: Moment;
|
|
240
|
+
clear?: boolean;
|
|
241
|
+
singleCalendar?: boolean;
|
|
242
|
+
useMobilePickers?: boolean;
|
|
243
|
+
dualCalendar?: boolean;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* DateRangePicker - کامپوننت انتخاب بازه تاریخ شمسی
|
|
247
|
+
*
|
|
248
|
+
* یک کامپوننت پیشرفته و کامل برای انتخاب بازه تاریخ با پشتیبانی از تقویم فارسی/شمسی
|
|
249
|
+
* این کامپوننت از کتابخانههای MUI و moment-jalaali استفاده میکند
|
|
250
|
+
*
|
|
251
|
+
* @version 2.0.0
|
|
252
|
+
* @author Frontend MAMRP Team
|
|
253
|
+
* @since 2024
|
|
254
|
+
*
|
|
255
|
+
*
|
|
256
|
+
* نحوه استفاده:
|
|
257
|
+
* ```tsx
|
|
258
|
+
* import DateRangePicker from './components/date-range-picker';
|
|
259
|
+
* import { useForm } from 'react-hook-form';
|
|
260
|
+
*
|
|
261
|
+
* const MyComponent = () => {
|
|
262
|
+
* const { control } = useForm();
|
|
263
|
+
*
|
|
264
|
+
* return (
|
|
265
|
+
* <DateRangePicker
|
|
266
|
+
* fromDate="startDate"
|
|
267
|
+
* toDate="endDate"
|
|
268
|
+
* control={control}
|
|
269
|
+
* label="انتخاب بازه تاریخ"
|
|
270
|
+
* persian={true}
|
|
271
|
+
* align="center"
|
|
272
|
+
* clear={true}
|
|
273
|
+
* singleCalendar={false}
|
|
274
|
+
* useMobilePickers={false}
|
|
275
|
+
* />
|
|
276
|
+
* );
|
|
277
|
+
* };
|
|
278
|
+
* ```
|
|
279
|
+
*
|
|
280
|
+
* مثالهای مختلف:
|
|
281
|
+
*
|
|
282
|
+
* 1. حالت پایه:
|
|
283
|
+
* ```tsx
|
|
284
|
+
* <DateRangePicker
|
|
285
|
+
* fromDate="from"
|
|
286
|
+
* toDate="to"
|
|
287
|
+
* control={control}
|
|
288
|
+
* />
|
|
289
|
+
* ```
|
|
290
|
+
*
|
|
291
|
+
* 2. با تک تقویم:
|
|
292
|
+
* ```tsx
|
|
293
|
+
* <DateRangePicker
|
|
294
|
+
* fromDate="from"
|
|
295
|
+
* toDate="to"
|
|
296
|
+
* control={control}
|
|
297
|
+
* singleCalendar={true}
|
|
298
|
+
* />
|
|
299
|
+
* ```
|
|
300
|
+
*
|
|
301
|
+
* 3. با DatePicker جداگانه:
|
|
302
|
+
* ```tsx
|
|
303
|
+
* <DateRangePicker
|
|
304
|
+
* fromDate="from"
|
|
305
|
+
* toDate="to"
|
|
306
|
+
* control={control}
|
|
307
|
+
* useMobilePickers={true}
|
|
308
|
+
* />
|
|
309
|
+
* ```
|
|
310
|
+
*
|
|
311
|
+
* 4. با محدودیت تاریخ:
|
|
312
|
+
* ```tsx
|
|
313
|
+
* <DateRangePicker
|
|
314
|
+
* fromDate="from"
|
|
315
|
+
* toDate="to"
|
|
316
|
+
* control={control}
|
|
317
|
+
* minDate={moment().subtract(1, 'year')}
|
|
318
|
+
* maxDate={moment()}
|
|
319
|
+
* />
|
|
320
|
+
* ```
|
|
321
|
+
*
|
|
322
|
+
* 5. سفارشیسازی کامل:
|
|
323
|
+
* ```tsx
|
|
324
|
+
* <DateRangePicker
|
|
325
|
+
* fromDate="startDate"
|
|
326
|
+
* toDate="endDate"
|
|
327
|
+
* control={control}
|
|
328
|
+
* label="بازه زمانی گزارش"
|
|
329
|
+
* size="small"
|
|
330
|
+
* align="center"
|
|
331
|
+
* persian={true}
|
|
332
|
+
* clear={true}
|
|
333
|
+
* disabled={false}
|
|
334
|
+
* isLoading={false}
|
|
335
|
+
* singleCalendar={false}
|
|
336
|
+
* useMobilePickers={false}
|
|
337
|
+
* fromViews={["year", "month", "day"]}
|
|
338
|
+
* fromOpenTo="day"
|
|
339
|
+
* toViews={["year", "month", "day"]}
|
|
340
|
+
* toOpenTo="day"
|
|
341
|
+
* />
|
|
342
|
+
* ```
|
|
343
|
+
*
|
|
344
|
+
* @interface DateRangePickerProps
|
|
345
|
+
* @property {string} fromDate - نام فیلد تاریخ شروع در form
|
|
346
|
+
* @property {string} toDate - نام فیلد تاریخ پایان در form
|
|
347
|
+
* @property {Control<any>} control - React Hook Form control object
|
|
348
|
+
* @property {DateView[]} [fromViews] - نماهای قابل نمایش برای تاریخ شروع (پیشفرض: ["year", "month", "day"])
|
|
349
|
+
* @property {DateView} [fromOpenTo] - نمای ابتدایی برای تاریخ شروع (پیشفرض: "day")
|
|
350
|
+
* @property {DateView[]} [toViews] - نماهای قابل نمایش برای تاریخ پایان (پیشفرض: ["year", "month", "day"])
|
|
351
|
+
* @property {DateView} [toOpenTo] - نمای ابتدایی برای تاریخ پایان (پیشفرض: "day")
|
|
352
|
+
* @property {string} [label] - برچسب فیلد (پیشفرض: "انتخاب بازه")
|
|
353
|
+
* @property {"small" | "medium"} [size] - اندازه فیلد (پیشفرض: "medium")
|
|
354
|
+
* @property {boolean} [disabled] - غیرفعال کردن کامپوننت (پیشفرض: false)
|
|
355
|
+
* @property {boolean} [persian] - استفاده از تاریخ فارسی (پیشفرض: true)
|
|
356
|
+
* @property {"right" | "center" | "left"} [align] - تراز متن (پیشفرض: "left")
|
|
357
|
+
* @property {boolean} [isLoading] - نمایش حالت loading (پیشفرض: false)
|
|
358
|
+
* @property {Moment} [minDate] - حداقل تاریخ قابل انتخاب
|
|
359
|
+
* @property {Moment} [maxDate] - حداکثر تاریخ قابل انتخاب
|
|
360
|
+
* @property {boolean} [clear] - نمایش دکمه پاک کردن (پیشفرض: true)
|
|
361
|
+
* @property {boolean} [singleCalendar] - نمایش تک تقویم به جای دوتایی (پیشفرض: false)
|
|
362
|
+
* @property {boolean} [useMobilePickers] - استفاده از DatePicker جداگانه به جای popup (پیشفرض: false)
|
|
363
|
+
*
|
|
364
|
+
* نکات مهم:
|
|
365
|
+
* - کامپوننت خودکار mobile detection دارد (breakpoint: 700px)
|
|
366
|
+
* - در حالت موبایل، تقویمها responsive میشوند
|
|
367
|
+
* - فرمت خروجی همیشه "YYYY-MM-DD" است
|
|
368
|
+
* - روزهای جمعه با رنگ قرمز نمایش داده میشوند
|
|
369
|
+
* - امکان انتخاب بازه با کلیک و drag وجود دارد
|
|
370
|
+
* - validation errors از React Hook Form پشتیبانی میشود
|
|
371
|
+
*
|
|
372
|
+
*
|
|
373
|
+
* @example
|
|
374
|
+
* // استفاده در فرم ساده
|
|
375
|
+
* const form = useForm({
|
|
376
|
+
* defaultValues: {
|
|
377
|
+
* startDate: '',
|
|
378
|
+
* endDate: ''
|
|
379
|
+
* }
|
|
380
|
+
* });
|
|
381
|
+
*
|
|
382
|
+
* <DateRangePicker
|
|
383
|
+
* fromDate="startDate"
|
|
384
|
+
* toDate="endDate"
|
|
385
|
+
* control={form.control}
|
|
386
|
+
* label="انتخاب دوره زمانی"
|
|
387
|
+
* />
|
|
388
|
+
*/
|
|
389
|
+
declare const DateRangePicker: React__default.FC<DateRangePickerProps>;
|
|
390
|
+
|
|
391
|
+
export { DateRangePicker };
|