Date Pickerv1.0.0

دکمه‌ای که تاریخ انتخاب‌شده را نشان می‌دهد و با کلیک، Calendar را داخل Popover باز می‌کند؛ همان ترکیب Button و Popover و Calendar که در مستندات Calendar هم توضیح داده شده، اینجا به‌عنوان یک کامپوننت آماده.

ری‌اکت ۱۹ و Next.js با پیاده‌سازی دسترس‌پذیری داخلی دیگویو ۳ با Composition API — هنوز برای این کامپوننت پورت نشدهSvelte ۵ با runes — هنوز برای این کامپوننت پورت نشدهانگولار با signals و دایرکتیوهای standalone — هنوز برای این کامپوننت پورت نشده

این کامپوننت فعلاً برای ۱ فریم‌ورک از ۴ فریم‌ورک آماده است.

این نمونه هنوز برای Vue پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Svelte پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

این نمونه هنوز برای Angular پورت نشده است؛ آنچه می‌بینید نسخهٔ ری‌اکت است.

نصب

با CLI اختصاصی digdesign کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگی‌ها و فایل‌ها خودکار اضافه می‌شوند.

پکیج‌منیجر پیش‌فرض Node.jsنصب سریع با لینک سخت و دیسک مشترکYarn نسخهٔ ۲ به بالا (Berry)رانتایم و پکیج‌منیجر Bun
npx digdesign@latest add https://docs.digdesign.ir/r/date-picker.json
pnpm dlx digdesign@latest add https://docs.digdesign.ir/r/date-picker.json
yarn dlx digdesign@latest add https://docs.digdesign.ir/r/date-picker.json
bunx --bun digdesign@latest add https://docs.digdesign.ir/r/date-picker.json

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

استفاده

import { DatePicker } from "@/components/ui/date-picker"

<DatePicker value={date} onChange={setDate} calendar="jalali" aria-label="تاریخ سفر" />

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

ترکیب اجزا

مقدار یک Date میلادیِ خام است (نه y/m/d شمسی)، دقیقاً همان چیزی که خودِ Calendar می‌گیرد؛ پراپ calendar فقط فرمت متنِ دکمه و اعداد گرید را عوض می‌کند.

با انتخاب یک روز، Popover خودکار بسته می‌شود.

برای فیلد قابل‌تایپ (بدون تقویم شناور) به‌جای این از DateField استفاده کنید.

دسترس‌پذیری

  • دکمهٔ باز کننده یک Button معمولی است؛ با Space/Enter باز می‌شود و Popover خودش فوکوس و Escape را مدیریت می‌کند.
  • با label، نامِ دسترس‌پذیرِ دکمه برچسب به‌علاوهٔ تاریخِ فعلی است (aria-labelledby به برچسب و خودِ دکمه)، تا صفحه‌خوان هم «تاریخ سفر» و هم مقدار را بخواند. بدون برچسبِ قابل‌دیدن، aria-label بدهید.
  • وقتی مقداری انتخاب نشده، متن دکمه با رنگ کم‌رنگ‌تر (text-muted-foreground) نشان داده می‌شود تا از مقدار واقعی متمایز باشد.

مرجع API

DatePicker

ویژگینوعپیش‌فرضتوضیح
value / defaultValueDate—مقدار کنترل‌شده یا اولیه.
onChange(date: Date | undefined) => void—فراخوانی هنگام انتخاب یک روز.
calendar"jalali" | "gregorian""jalali"تقویمِ نمایش (متن دکمه و گرید Calendar).
minDateDate—کم‌ترین تاریخِ قابل‌انتخاب؛ روزهای قبلش غیرفعال‌اند.
maxDateDate—بیش‌ترین تاریخِ قابل‌انتخاب؛ برای تاریخ تولد new Date() یا ۱۸ سال پیش. با minDate یا maxDate سربرگِ تقویم منوی ماه و سال می‌گیرد و تقویم روی ماهِ تاریخِ انتخاب‌شده باز می‌شود.
placeholderstring"انتخاب تاریخ"متن دکمه وقتی هنوز چیزی انتخاب نشده.
disabledbooleanfalseغیرفعال کردن دکمه.
idstringReact.useId()id دکمهٔ تریگر؛ برای اتصالِ یک <Label htmlFor> بیرونی.
labelReact.ReactNode—برچسبِ قابل‌دیدن بالای دکمه، هم‌شکلِ TextField و متصل با aria-labelledby.
descriptionReact.ReactNode—متنِ راهنمای زیرِ دکمه، متصل با aria-describedby.
invalid / errorMessageboolean / React.ReactNodefalseحالتِ خطا؛ aria-invalid روی دکمه و پیامِ خطا به‌جای description.
required / optionalbooleanfalseستارهٔ اجباری یا «(اختیاری)» کنارِ label.
aria-labelstring—نامِ دسترس‌پذیر وقتی برچسبِ قابل‌دیدن ندارید.

این کامپوننت هنوز برای Vue پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Svelte پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.

این کامپوننت هنوز برای Angular پورت نشده است.

نسخهٔ ری‌اکت آماده است؛ پورت این فریم‌ورک در دست کار است.