Range Calendar
خودِ شبکهٔ روزهای Calendar، همیشه در حالت انتخاب بازه (شروع/پایان): بدون دکمه، فیلد ورودی یا Popover دورش. برای وقتی که تقویم باید مستقیم روی صفحه بنشیند، نه پشت یک دکمه؛ مثل فیلترِ گزارش یا صفحهٔ رزرو. DateRangePicker همین کامپوننت را داخل یک Popover میگذارد.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/range-calendar.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/range-calendar.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/range-calendar.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/range-calendar.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import { RangeCalendar } from "@/components/ui/range-calendar"
const [range, setRange] = useState<DateRange | undefined>()
<RangeCalendar selected={range} onSelect={setRange} calendar="jalali" />این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
یک لایهٔ نازک روی Calendar است که فقط mode را همیشه روی "range" قفل میکند؛ بقیهٔ propها (calendar, numberOfMonths, disabled, holidays, weekend, captionLayout و...) همان Calendar است، مستندات Calendar را برای اینها ببینید.
selected/onSelect همیشه نوع DateRange خودِ react-day-picker را میگیرند: یک شیء با فیلدهای اختیاری from و to (هر دو Date).
تا وقتی from انتخاب شده ولی to نه، کلیک بعدی همیشه to را میسازد (یا اگر قبل از from باشد، بازه را برعکس میکند)، همان رفتار پیشفرض react-day-picker.
دسترسپذیری
- همان دسترسپذیریِ Calendar را به ارث میبرد: ناوبری کامل با فلشها/Page Up-Down/Home-End بین روزها، و دکمههای ماه قبل/بعد با aria-label.
- روزِ شروع و پایانِ بازه، و روزهای میانی، هرکدام data-attribute جدا دارند (از react-day-picker) تا استایل بصریِ بازه با صفحهخوان هم منتقل شود، نه فقط رنگ.
مرجع API
RangeCalendar
| ویژگی | نوع | پیشفرض | توضیح |
|---|---|---|---|
| selected | DateRange | undefined | — | بازهٔ کنترلشده: { from?: Date; to?: Date }. |
| onSelect | (range: DateRange | undefined) => void | — | فراخوانی با هر تغییرِ from یا to. |
| calendar | "jalali" | "gregorian" | "gregorian" | گاهشماری نمایش؛ به Calendar پاس داده میشود. |
| numberOfMonths | number | 2 | تعداد ماههای کنار هم. |
| ...props | React.ComponentProps<typeof Calendar> | — | هر پراپ دیگر Calendar (بهجز mode): captionLayout, holidays, weekend, disabled و... |
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
کنترلشده
selected/onSelect با یک state بیرونی: همان الگویی که DateRangePicker داخلش استفاده میکند.
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
۲۰ اردیبهشت ۱۴۰۵ تا ۲۷ اردیبهشت ۱۴۰۵
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
دو ماه کنار هم
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
میلادی
| Su | Mo | Tu | We | Th | Fr | Sa |
|---|---|---|---|---|---|---|
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| کنترلشده | selected/onSelect با یک state بیرونی: همان الگویی که DateRangePicker داخلش استفاده میکند. |
| دو ماه کنار هم | رزرو بازههای بلندمدت که یک ماه برای دیدن کل بازه کافی نیست |
| میلادی | رزرو یا گزارشگیریِ بینالمللی که تقویم میلادی میخواهد |