Skip to content

@doranjs/react

کامپوننت‌های تقویمِ React با پشتیبانی RTL و accessible.

ts
import '@doranjs/ui/styles.css';
import '@doranjs/react/styles.css';

کامپوننت‌ها

کامپوننتتوضیح
DoranCalendarتقویم کامل ماه با ناوبریِ header
DoranMonthViewیک گریدِ ماهِ accessible (بلوک سازنده)
DoranDatePickerورودی همراه با تقویم pop-over
DoranRangePickerانتخاب بازهٔ تاریخ با دو کلیک
DoranTimePickerانتخابگرِ مستقلِ ساعت/دقیقه
DoranNlpInputورودیِ زبان طبیعی با autocomplete + راهنما
DoranAgendaاجندای عمودیِ روزبه‌روز همراه با رویدادها
tsx
import { DoranCalendar, DoranDatePicker } from '@doranjs/react';

<DoranCalendar defaultValue={DoranDate.now()} onChange={(d) => ...} />
<DoranDatePicker placeholder="انتخاب تاریخ" />

propهای DoranDatePicker

PropTypeپیش‌فرضتوضیح
valueDoranDate | nullمقدار controlled
defaultValueDoranDate | nullمقدار اولیهٔ uncontrolled
onChange(date: DoranDate | null, gregorian: Date | null) => voidهنگام انتخاب یا پاک‌کردن؛ آرگومان دوم Date نیتیو برای backend
localeLocale | stringgetDefaultLocale()locale قالب‌بندی — از پیش‌فرض جهانی fallback می‌کند
formatstring'YYYY/MM/DD'الگوی نمایش
placeholderstring'انتخاب تاریخ'placeholder ورودی
footerActionsreadonly ('today' | 'clear')[]['today']اکشن‌های مرتبِ فوتر؛ آرایهٔ خالی فوتر را پنهان می‌کند
hideFooterbooleanfalseمنسوخ؛ به‌جای آن footerActions={[]} را استفاده کنید
iconPosition'left' | 'right''left'جای آیکن در trigger
textAlign'left' | 'right''right'تراز متن trigger
inputWidthCSSProperties['width']عرض trigger؛ عددها برحسب پیکسل‌اند
dropdownWidth'auto' | 'trigger' | CSSProperties['width']'auto'عرض ذاتی، برابر trigger، یا یک عرض CSS سفارشی
minDoranDateزودترین تاریخ قابل انتخاب
maxDoranDateدیرترین تاریخ قابل انتخاب
disabledbooleanfalseغیرفعال کردن ورودی
classNamestringکلاس اضافه‌شده به عنصر root
styleCSSPropertiesاستایل inline فوروارد به root
idstringid فوروارد به root
size'sm' | 'md' | 'lg'ارتفاع‌های پیش‌تعریف: 32 / 40 / 48 پیکسل
withTimebooleanfalseنمایش انتخابگر ساعت
headerMode'dropdown' | 'separate''dropdown'پنل‌های ماه/سال یا <select>های نیتیو
minuteStepnumber1گام دقیقه
isHoliday(day: DoranDate) => booleanنشانه‌گذاری تعطیل
weekendsnumber[][6]اندیس‌های آخر هفته (۰ = شنبه)
arrows{ prev, next }chevronگره‌های فلش سفارشی
showOutsideDaysbooleanنمایش روزهای ماه‌های مجاور
tsx
// ارسال تاریخ به backend
<DoranDatePicker
  size="md"
  style={{ width: 200 }}
  onChange={(d, gregorian) => {
    if (d && gregorian) await api.post('/events', { date: gregorian.toISOString() });
  }}
/>;

// locale جهانی — یک بار در root برنامه:
setDefaultLocale(enUS); // نام‌ها، ارقام و دکمه‌های فوتر همهٔ pickerها انگلیسی می‌شوند

propهای DoranRangePicker

PropTypeپیش‌فرضتوضیح
valueDateRangeبازهٔ controlled
defaultValueDateRangeبازهٔ اولیه
onChange(range: DateRange, gregorian: GregorianDateRange) => voidآرگومان دوم، شامل Date نیتیو برای start/end
localeLocale | stringgetDefaultLocale()از پیش‌فرض جهانی fallback می‌کند
numberOfMonthsnumber1تعداد ماه‌های نمایش داده‌شده
presetsboolean | RangePreset[]true برای presetهای آماده
footerActionsreadonly 'clear'[]['clear']کنترل پاک‌کردن فوتر؛ آرایهٔ خالی فوتر را پنهان می‌کند
isHoliday(day: DoranDate) => booleanنشانه‌گذاری تعطیل
weekendsnumber[][6]اندیس‌های آخر هفته
tsx
import { DoranRangePicker, type GregorianDateRange } from '@doranjs/react';

<DoranRangePicker
  presets
  onChange={(range, { start, end }) => {
    if (start && end) {
      setFilter({ from: start.toISOString(), to: end.toISOString() });
    }
  }}
/>;

اکشن‌های فوتر

DoranCalendar و DoranDatePicker با footerActions ترتیب دکمه‌های today و clear را می‌گیرند؛ مثلاً ['today', 'clear']. آرایهٔ خالی کل فوتر را پنهان می‌کند. «امروز» تاریخ امروز را انتخاب می‌کند و onChange را صدا می‌زند؛ «پاک کردن» مقدار را پاک می‌کند و onChange(null) (و در DatePicker آرگومان دوم null) را emit می‌کند.

DoranRangePicker به‌صورت پیش‌فرض کنترل clear را در فوتر نشان می‌دهد؛ footerActions={[]} آن را همراه با خلاصهٔ بازه پنهان می‌کند. hideFooter فقط برای سازگاری قدیمی باقی مانده و منسوخ است. متن دکمه‌ها از locale فعال می‌آید: faIR «امروز»/«پاک کردن» و enUS، Today/Clear را نشان می‌دهد.

انتخاب ماه، سال و ساعت

DoranCalendarDoranDatePicker) این propها را می‌پذیرند:

PropTypeپیش‌فرضتوضیح
headerMode'dropdown' | 'separate''dropdown'پنل‌های درجای ماه/سال، یا <select>های نیتیو
withTimebooleanfalseنمایش انتخابگر ساعت و حمل زمان روی مقدار
minuteStepnumber1گام افزایش دقیقه در stepperِ زمان
isHoliday(day) => booleanنشانه‌گذاری روزهای تعطیل (نقطه + رنگ تعطیل)
weekendsnumber[][6]اندیس روزهایی که آخر هفته شمرده می‌شوند (۰ = شنبه)
arrows{ prev, next }chevronگره‌های سفارشیِ فلش ناوبری
tsx
import { getHolidaysOn } from '@doranjs/holidays';

<DoranCalendar
  withTime
  headerMode="dropdown"
  isHoliday={(d) => getHolidaysOn(d).some((h) => h.official)}
/>;

ورودیِ زبان طبیعی

tsx
import { DoranNlpInput } from '@doranjs/react';

<DoranNlpInput placeholder="مثلاً: جمعه ساعت ۷ شب" onResolve={(r) => console.log(r?.date)} />;

یک dropdownِ autocompleteِ زنده و یک راهنمای تاریخِ resolve‌شده نشان می‌دهد که به سرِ مخالف (LTR)ِ فیلد سنجاق می‌شود. هوک headlessِ useNlpSuggest(text, options) مقدار { result, suggestions } را برای ساخت UI دلخواهتان برمی‌گرداند.

Theming

هر بخش CSS variable مخصوص خودش را می‌خواند، پس می‌توانید یک instance را بدون override کردنِ کل کامپوننت‌ها بازطراحی کنید — رنگ‌ها، فونت‌ها، سایه‌ها، borderها، گردی‌ها و فلش‌ها:

tsx
<div style={{ '--doran-day-selected-bg': '#e11d48', '--doran-calendar-radius': '22px' }}>
  <DoranCalendar />
</div>

برای فهرست کامل tokenها @doranjs/ui را ببینید.

Primitiveهای headless

tsx
import { useCalendar, useDateRange, buildMonthGrid } from '@doranjs/react';

const { grid, goToNextMonth, select, isSelected } = useCalendar();
const grid = buildMonthGrid(1405, 3); // خالص، بدون React

همهٔ کامپوننت‌ها از ناوبریِ کیبورد (فلش‌ها، Home/End، Enter/Space)، semanticهای گریدِ ARIA، dark mode و چیدمان‌های موبایل پشتیبانی می‌کنند.

Released under the MIT License.