DatePicker
عرض شاملimport { CalendarSystem, DatePicker, DatePickerFooter, DatePreset, DateRange, DateRangePicker } from '@nili/ui';هذه صفحة العرض الشامل الخاصة بالمكتبة، معروضة حيّة. غيّر اللغة أو السمة من الأعلى وسَتتبعك.
أساسي
غير متحكَّم به عبر defaultValue، أو متحكَّم به عبر value مع onChange. ويكون التقويم جلاليًا افتراضيًا في اللغة الفارسية وميلاديًا فيما عداها — ونادرًا ما تحتاج إلى تحديده.
import { DatePicker } from "@nili/ui"
export function Example() {
const [date, setDate] = useState<Date | null>(new Date())
return <DatePicker value={date} onChange={setDate} />
}أنظمة التقويم
يفرض calendar التقويم الجلالي (الهجري الشمسي) أو الميلادي، ويحدّد locale أسماء الأشهر وأيام الأسبوع والأرقام. ويضع allowCalendarSwitch مفتاحًا في الترويسة ليغيّره المستخدم بنفسه.
import { DatePicker } from "@nili/ui"
export function Example() {
return (
<>
<DatePicker calendar="jalali" locale="fa" />
<DatePicker calendar="gregorian" locale="en" />
{/* let the user pick */}
<DatePicker
allowCalendarSwitch
labels={{ calendarSwitch: "Change calendar", jalali: "شمسی", gregorian: "میلادی" }}
/>
</>
)
}الحدود والأيام المعطّلة والعلامات
تحصر minDate وmaxDate النطاق، ويتكفّل isDateDisabled بالباقي — عطل نهاية الأسبوع والأعياد والأيام المحجوزة. وتحصل markedDates على نقطة العلامة في فيجما.
import { DatePicker } from "@nili/ui"
export function Example() {
return (
<DatePicker
minDate={new Date()}
maxDate={addDays(60)}
markedDates={[addDays(3), addDays(10)]}
isDateDisabled={(date) => date.getDay() === 5}
/>
)
}التذييل
footer فتحة حرّة، وDatePickerFooter هو صفّ فيجما الذي يوضع فيها عادةً. استخدمها حين يجلس المنتقي في نافذة منبثقة ويجب ألا يسري الاختيار إلا عند الضغط على «تطبيق».
import { DatePicker, DatePickerFooter, Button } from "@nili/ui"
export function Example() {
return (
<DatePicker
footer={
<DatePickerFooter>
<Button appearance="stroke" size="xs">Cancel</Button>
<Button size="xs">Apply</Button>
</DatePickerFooter>
}
/>
)
}منتقي نطاق التواريخ
تاريخان بدل واحد. وpresets هو Period Range في فيجما — عمود الاختصارات. وكل نطاق هو { from, to }، وقد يكون أي طرف null بينما المستخدم في منتصف الاختيار.
import { DateRangePicker } from "@nili/ui"
export function Example() {
const [range, setRange] = useState({ from: new Date(), to: null })
return (
<DateRangePicker
value={range}
onChange={setRange}
presets={[
{ label: "Last 7 days", range: () => ({ from: addDays(-7), to: new Date() }) },
{ label: "Last 30 days", range: () => ({ from: addDays(-30), to: new Date() }) },
{ label: "This month", range: () => ({ from: startOfMonth(), to: new Date() }) },
]}
/>
)
}CalendarBase
داخليباقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| calendar | jalali | gregorian | — | `'jalali'` (Solar Hijri — Shamsi, also called Jalali) or `'gregorian'`. Defaults to Jalali under a Persian locale and Gregorian otherwise. |
| locale | string | — | BCP-47 tag for month names, weekday names and numerals. |
| allowCalendarSwitch | boolean | — | Let the user switch calendars from a toggle in the header. |
| minDate | Date | — | |
| maxDate | Date | — | |
| markedDates | Date[] | — | Days that get a marker dot — Figma's "Marked" state. |
| isDateDisabled | (date: Date) => boolean | — | |
| labels | { previousMonth?: string; nextMonth?: string; calendarSwitch?: string; jalali?: string; gregorian?: string; } | — |
CalendarGrid
داخليباقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| calendar* | jalali | gregorian | — | |
| locale* | string | — | |
| cursor* | { year: number; month: number } | — | |
| isSelected* | (date: Date) => boolean | — | |
| isInRange | (date: Date) => boolean | — | |
| rangeEdge | (date: Date) => 'start' | 'end' | 'both' | 'none' | — | |
| isDisabled* | (date: Date) => boolean | — | |
| isMarked* | (date: Date) => boolean | — | |
| onSelect* | (date: Date) => void | — | |
| onHover | (date: Date | null) => void | — |
CalendarToggle
داخليDatePicker
extends CalendarBaseProps, Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue'>
باقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| footer | ReactNode | — | Figma footer — typically `<DatePickerFooter>` with Cancel / Apply. |
| value | Date | null | — | |
| defaultValue | Date | null | — | |
| onChange | (date: Date | null) => void | — | |
| calendar | jalali | gregorian | — | `'jalali'` (Solar Hijri — Shamsi, also called Jalali) or `'gregorian'`. Defaults to Jalali under a Persian locale and Gregorian otherwise. |
| locale | string | en | BCP-47 tag for month names, weekday names and numerals. |
| allowCalendarSwitch | boolean | false | Let the user switch calendars from a toggle in the header. |
| minDate | Date | — | |
| maxDate | Date | — | |
| markedDates | Date[] | — | Days that get a marker dot — Figma's "Marked" state. |
| isDateDisabled | (date: Date) => boolean | — | |
| labels | { previousMonth?: string; nextMonth?: string; calendarSwitch?: string; jalali?: string; gregorian?: string; } | — |
DatePickerFooter
DateRangePicker
extends CalendarBaseProps, Omit<ComponentPropsWithoutRef<'div'>, 'onChange' | 'defaultValue'>
باقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| children | ReactNode | — | |
| aria-label | string | — | |
| value | DateRange | — | |
| defaultValue | DateRange | — | |
| onChange | (range: DateRange) => void | — | |
| presets | DatePreset[] | — | Shortcut column — Figma's "Period Range". |
| footer | ReactNode | — | |
| calendar | jalali | gregorian | — | `'jalali'` (Solar Hijri — Shamsi, also called Jalali) or `'gregorian'`. Defaults to Jalali under a Persian locale and Gregorian otherwise. |
| locale | string | en | BCP-47 tag for month names, weekday names and numerals. |
| allowCalendarSwitch | boolean | false | Let the user switch calendars from a toggle in the header. |
| minDate | Date | — | |
| maxDate | Date | — | |
| markedDates | Date[] | — | Days that get a marker dot — Figma's "Marked" state. |
| isDateDisabled | (date: Date) => boolean | — | |
| labels | { previousMonth?: string; nextMonth?: string; calendarSwitch?: string; jalali?: string; gregorian?: string; } | — |
DateSelector
داخليDayCell
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| outside | 'true' | 'false' | false | |
| selected | 'true' | 'false' | false | |
| inRange | 'true' | 'false' | false | |
| rangeEdge | start | end | both | none | none | |
| today | 'true' | 'false' | false | |
| marked | 'true' | 'false' | false |
DayLabel
داخليHeader
داخليباقي الخصائص
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| calendar* | jalali | gregorian | — | |
| locale* | string | — | |
| cursor* | { year: number; month: number } | — | |
| onStep* | (delta: number) => void | — | |
| allowCalendarSwitch* | boolean | — | |
| onCalendarChange* | (system: CalendarSystem) => void | — | |
| labels* | NonNullable<DatePickerProps['labels']> | — |
PeriodRange
داخليPeriodRangeItem
داخليمحاور التنويع — من تعريف cva للمكوّن
| الخاصيّة | النوع | الافتراضي | ملاحظات |
|---|---|---|---|
| selected | 'true' | 'false' | false |