تقویم رویدادها
event-calendarکامپوننت تقویمتقویم کامل با نمای ماه، هفته، روز و فهرست، نوار ابزار مشترک و تعطیلات رسمی ایران، مثل تقویم گوگل ولی راستچین و شمسی.
مهر ۱۴۰۵
ربیعالثانی – جمادیالاول ۱۴۴۸
۲۸۷
۲۹۸
۳۰۹
۳۱۱۰
۱۱۱
۲۱۲
۳۱۳
۴۱۴
۵۱۵
۶۱۶
۷۱۷
۸۱۸
۹۱۹
۱۰۲۰
۱۱۲۱
۱۲۲۲
۱۳۲۳
۱۴۲۴
۱۵۲۵
۱۶۲۶
۱۷۲۷
۱۸۲۸
۱۹۲۹
۲۰۱
۲۱۲
۲۲۳
۲۳۴
۲۴۵
۲۵۶
۲۶۷
۲۷۸
۲۸۹
۲۹۱۰
۳۰۱۱
۱۱۲
۲۱۳
۳۱۴
۴۱۵
۵۱۶
۶۱۷
۷۱۸
۸۱۹
روی زمان خالی در نمای هفته بکشید تا رویداد بسازید، یا رویدادی را جابهجا کنید.
نصب
با CLI
اگر هنوز init نکردید، اول از راهنمای نصب پروژه را آماده کنید. بعد این دستور کامپوننت و وابستگیهاش را مینویسه.
$ npx vibefarsi add event-calendarنصب دستی
محتوای تب «کد» را در
components/calendar/event-calendar.tsxبگذارید. پیشنیاز: calendar-core، month-view، time-grid، agenda-view، segmented-control.$ npm i lucide-reactکپی کل فایلregistry json
استفاده
usage.tsx
1import { EventCalendar } from "@/components/calendar/event-calendar"23const [events, setEvents] = useState<CalendarEvent[]>(initial)45<EventCalendar6 events={events}7 defaultView="week"8 onSlotSelect={(start, end) => openNewEventDialog(start, end)}9 onEventClick={(e) => openEvent(e.id)}10 onEventChange={(e, start, end) =>11 setEvents((list) => list.map((x) => (x.id === e.id ? { ...x, start, end } : x)))12 }13/>پراپها
| پراپ | نوع | پیشفرض | توضیح |
|---|---|---|---|
| events | CalendarEvent[] | - | هر رویداد id، title، start و end داره و allDay، color (۱ تا ۷ یا رنگ CSS) و location اختیاریه. |
| view / defaultView | "month" | "week" | "day" | "agenda" | "month" | نمای فعلی، کنترلشده یا آزاد. |
| views | CalendarView[] | - | نماهایی که سوییچ نشون میده. اگه فقط یکی بدید، سوییچ پنهان میشه. |
| onSlotSelect | (start, end) => void | - | بعد از کشیدن روی زمان خالی در نمای هفته یا روز صدا زده میشه. |
| onEventChange | (event, start, end) => void | - | کشیدن و تغییر اندازهی رویداد را روشن میکنه. state را خودتون بهروز کنید. |
| startHour / endHour / slotMinutes | number | 7 / 22 / 30 | ساعتهای نمایش دادهشده و گام چسبیدن. |
| occasions / secondary / weekend / timeZone | … | - | مثل CalendarProvider. |
نکتهها
- کلیک روی یک روز در نمای ماه همون روز را در نمای روز باز میکنه، مگه اینکه onDayClick بدید.
- هر نما جدا هم کامپوننت خودشه، پس اگه فقط نمای ماه لازم دارید MonthView را نصب کنید.