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 |