انتخاب نوبت

slot-pickerکامپوننت تقویم

نوار روزها با جمعه‌ها و تعطیلات غیرفعال و دلیلشون، و زیرش ساعت‌های خالی همون روز در سه دسته‌ی صبح، بعدازظهر و عصر، با ظرفیت باقی‌مانده.

صبح

بعدازظهر

عصر

۹ وقت خالی در ۱۸ مهر

نصب

  1. با CLI

    اگر هنوز init نکردید، اول از راهنمای نصب پروژه را آماده کنید. بعد این دستور کامپوننت و وابستگی‌هاش را می‌نویسه.

    $ npx vibefarsi add slot-picker
  2. نصب دستی

    محتوای تب «کد» را در components/calendar/slot-picker.tsx بگذارید. پیش‌نیاز: calendar-core.

    $ npm i lucide-react
    کپی کل فایلregistry json

استفاده

usage.tsx
1import { SlotPicker } from "@/components/calendar/slot-picker"23<SlotPicker4  value={slot}5  onChange={setSlot}6  duration={45}7  hours={{ 0: [["09:00", "13:00"], ["16:00", "20:00"]], 5: [["09:00", "13:00"]] }}8  busy={(key) => bookedIntervals[key] ?? []}9/>

پراپ‌ها

پراپنوعپیش‌فرضتوضیح
value / onChange{ start, end } | null-نوبت انتخاب‌شده به‌صورت دو لحظه‌ی واقعی.
hours[from, to][] | Record<weekday, [from, to][]>-ساعت کاری برای همه‌ی روزها یا برای هر روز هفته جدا.
duration / stepnumber30مدت هر نوبت و فاصله‌ی شروع نوبت‌ها به دقیقه.
capacitynumber1بیشتر از یک یعنی چند نفر هم‌زمان، و تعداد جای خالی نشون داده میشه.
busy{ start, end }[] | (key) => …-بازه‌های رزروشده. هر هم‌پوشانی یک جا را پر می‌کنه.
closedWeekdays / closeOnHolidays / closedDays…[6] / true / []روزهای بسته که در نوار غیرفعال میشن.
closedReason(date) => string | null-دلیل خودتون برای بسته بودن یک روز، مثلاً «دکتر سه‌شنبه‌ها نیستن». null یعنی قاعده‌های بالا تصمیم بگیرن.

نکته‌ها

  • ساعت‌های گذشته و پرشده پنهان نمیشن و خط‌خورده می‌مونن تا کاربر بدونه چرا انتخاب نمیشن.