react-persian-datepicker-element
Version:
React wrapper for Persian Datepicker Web Component - A beautiful and fully customizable Jalali date picker
365 lines (293 loc) • 9.77 kB
Markdown
# Persian Datepicker React Component
A modern, fully-featured Persian (Jalali) date picker component for React applications.
## Features
- 🎨 Fully customizable theme
- 📱 Responsive design
- 🔤 RTL support
- 📅 Holiday highlighting
- 🎯 Range picker mode
- ⌨️ Keyboard navigation
- 🎭 Custom holiday types
- 🚫 Disabled dates support
- 📋 Min/Max date restrictions
- 🎨 Custom scrollbar styling
## Installation
```bash
npm install react-persian-datepicker-element persian-datepicker-element
# or
yarn add react-persian-datepicker-element persian-datepicker-element
# or
pnpm add react-persian-datepicker-element persian-datepicker-element
```
## Basic Usage
```jsx
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
const handleDateChange = (event) => {
const { jalali, gregorian, isHoliday } = event.detail;
console.log('Selected date:', jalali);
};
return (
<PersianDatepicker
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
onChange={handleDateChange}
/>
);
}
```
## Advanced Examples
### With Two-way Binding
```jsx
import { useState } from 'react';
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
const [selectedDate, setSelectedDate] = useState('');
return (
<PersianDatepicker
value={selectedDate}
onChange={(event) => setSelectedDate(event.detail.formattedDate)}
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
/>
);
}
```
### With Date Limits
```jsx
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
return (
<PersianDatepicker
minDate={[1400, 1, 1]}
maxDate={[1402, 12, 29]}
disabledDates={(year, month, day) => {
// Disable weekends (Friday and Saturday)
const date = new Date(year, month - 1, day);
const dayOfWeek = date.getDay();
return dayOfWeek === 5 || dayOfWeek === 6;
}}
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
/>
);
}
```
### With Range Selection
```jsx
import { useState } from 'react';
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
const [dateRange, setDateRange] = useState({ start: null, end: null });
const handleRangeChange = (event) => {
if (event.detail.isRange) {
setDateRange({
start: event.detail.range.start,
end: event.detail.range.end
});
}
};
return (
<PersianDatepicker
rangeMode={true}
onChange={handleRangeChange}
placeholder="انتخاب بازه تاریخ"
format="YYYY/MM/DD"
/>
);
}
```
### With Custom Styling
```jsx
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
return (
<PersianDatepicker
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
className="custom-datepicker"
/>
);
}
```
### With Holiday Types
```jsx
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
return (
<div>
<PersianDatepicker
eventTypes="Iran,Afghanistan,AncientIran,International"
placeholder="نمایش همه تعطیلات"
/>
<PersianDatepicker
eventTypes="Afghanistan"
placeholder="تعطیلات افغانستان"
/>
<PersianDatepicker
eventTypes="all"
placeholder="نمایش همه انواع تعطیلات"
/>
</div>
);
}
```
## Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| value | string \| number[] | - | Selected date value |
| placeholder | string | '' | Input placeholder text |
| format | string | 'YYYY/MM/DD' | Date format pattern |
| showEvents | boolean | true | Show holiday indicators |
| rtl | boolean | true | Right-to-left layout |
| disabled | boolean | false | Disable the datepicker |
| minDate | [number, number, number] | - | Minimum selectable date [year, month, day] |
| maxDate | [number, number, number] | - | Maximum selectable date [year, month, day] |
| disabledDates | string \| Function | - | Dates to disable (string pattern or function) |
| eventTypes | string \| string[] | - | Types of holidays to highlight |
| rangeMode | boolean | false | Enable range selection mode |
| rangeStart | [number, number, number] | - | Start date for range selection |
| rangeEnd | [number, number, number] | - | End date for range selection |
## Theme Customization
You can customize the appearance using standard CSS:
```jsx
<PersianDatepicker
className="custom-datepicker"
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
/>
```
With CSS:
```css
.custom-datepicker {
/* Add your custom styles here */
}
```
## Methods
Access component methods using a ref:
```jsx
const datepickerRef = useRef();
// Available methods
datepickerRef.current.getValue();
datepickerRef.current.setValue(year, month, day);
datepickerRef.current.open();
datepickerRef.current.close();
datepickerRef.current.setRange(startDate, endDate);
datepickerRef.current.getRange();
datepickerRef.current.clear();
```
## Events
| Event | Description |
|-------|-------------|
| onChange | Fired when date selection changes |
| onOpen | Fired when datepicker opens |
| onClose | Fired when datepicker closes |
## Range Picker Example
```jsx
<PersianDatepicker
rangeMode={true}
rangeStart={[1402, 1, 1]}
rangeEnd={[1402, 1, 15]}
onChange={handleRangeChange}
/>
```
---
<div dir="rtl">
# کامپوننت React تقویم شمسی
یک کامپوننت مدرن و کامل انتخاب تاریخ شمسی (جلالی) برای برنامههای React
## ویژگیها
- 🎨 قابلیت شخصیسازی کامل ظاهر
- 📱 طراحی واکنشگرا
- 🔤 پشتیبانی از RTL
- 📅 نمایش تعطیلات
- 🎯 حالت انتخاب بازه
- ⌨️ پیمایش با کیبورد
- 🎭 انواع تعطیلات سفارشی
- 🚫 پشتیبانی از تاریخهای غیرفعال
- 📋 محدودیت حداقل/حداکثر تاریخ
- 🎨 شخصیسازی نوار اسکرول
## نصب
```bash
npm install react-persian-datepicker-element persian-datepicker-element
# یا
yarn add react-persian-datepicker-element persian-datepicker-element
# یا
pnpm add react-persian-datepicker-element persian-datepicker-element
```
## استفاده پایه
```jsx
import { PersianDatepicker } from 'react-persian-datepicker-element';
function App() {
const handleDateChange = (event) => {
const { jalali, gregorian, isHoliday } = event.detail;
console.log('تاریخ انتخاب شده:', jalali);
};
return (
<PersianDatepicker
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
onChange={handleDateChange}
/>
);
}
```
## پراپها
| پراپ | نوع | پیشفرض | توضیحات |
|------|------|---------|-------------|
| value | string \| number[] | - | مقدار تاریخ انتخاب شده |
| placeholder | string | '' | متن پیشفرض ورودی |
| format | string | 'YYYY/MM/DD' | الگوی نمایش تاریخ |
| showEvents | boolean | true | نمایش نشانگر تعطیلات |
| rtl | boolean | true | چیدمان راست به چپ |
| disabled | boolean | false | غیرفعال کردن تقویم |
| minDate | [number, number, number] | - | حداقل تاریخ قابل انتخاب [سال، ماه، روز] |
| maxDate | [number, number, number] | - | حداکثر تاریخ قابل انتخاب [سال، ماه، روز] |
| disabledDates | string \| Function | - | تاریخهای غیرفعال (الگو یا تابع) |
| eventTypes | string \| string[] | - | انواع تعطیلات برای نمایش |
| rangeMode | boolean | false | فعالسازی حالت انتخاب بازه |
| rangeStart | [number, number, number] | - | تاریخ شروع بازه |
| rangeEnd | [number, number, number] | - | تاریخ پایان بازه |
## شخصیسازی ظاهر
شما میتوانید ظاهر کامپوننت را با استفاده از CSS استاندارد شخصیسازی کنید:
```jsx
<PersianDatepicker
className="custom-datepicker"
placeholder="انتخاب تاریخ"
format="YYYY/MM/DD"
/>
```
با CSS:
```css
.custom-datepicker {
/* استایلهای سفارشی خود را اینجا اضافه کنید */
}
```
## متدها
دسترسی به متدهای کامپوننت با استفاده از ref:
```jsx
const datepickerRef = useRef();
// متدهای در دسترس
datepickerRef.current.getValue();
datepickerRef.current.setValue(year, month, day);
datepickerRef.current.open();
datepickerRef.current.close();
datepickerRef.current.setRange(startDate, endDate);
datepickerRef.current.getRange();
datepickerRef.current.clear();
```
## رویدادها
| رویداد | توضیحات |
|--------|----------|
| onChange | هنگام تغییر تاریخ انتخاب شده |
| onOpen | هنگام باز شدن تقویم |
| onClose | هنگام بسته شدن تقویم |
## مثال انتخاب بازه
```jsx
<PersianDatepicker
rangeMode={true}
rangeStart={[1402, 1, 1]}
rangeEnd={[1402, 1, 15]}
onChange={handleRangeChange}
/>
```
</div>