فارسی
انتخاب نوبت
رزرو نوبت با روزهای شمسی و ساعتهای خالی هر روز؛ برای مطب، آرایشگاه، مشاوره و هر سرویس نوبتدهی. جمعهها و تعطیلات رسمی بستهاند و نوبتهای پر و گذشته غیرفعال.
npm i @kashi-ui/react @kashi-ui/cssimport { AppointmentPicker } from "@kashi-ui/react";CSS را یک بار در ریشهٔ برنامه وارد کنید: import "@kashi-ui/css"راهنمای نصب
npx shadcn@latest add @kashi/appointment-pickerکد خودِ کامپوننت در پوشهٔ components/kashi پروژهٔ شما کپی میشود. برای نسخههای قدیمی shadcn، راهنمای «دربارهٔ shadcn» را ببینید.دربارهٔ shadcn
npm i @kashi-ui/elements @kashi-ui/cssimport "@kashi-ui/elements/appointment.js";<kashi-appointment-picker></kashi-appointment-picker>بدون React، برای HTML، وردپرس، Vue و Angular.CDN، نمونه و ویژگیها
import { AppointmentPicker } from "@kashi-ui/react";
نمونه
روزها با تاریخ شمسی و تعداد نوبت خالیشان در یک ردیف میآیند و ساعتهای همان روز در گروههای صبح، بعدازظهر و عصر. جمعهها و تعطیلات رسمی ثابت بستهاند، نوبتهای پرشده خط خوردهاند و ساعتهایی از امروز که گذشتهاند قابل انتخاب نیستند.
انتخاب نوبت
صبح
بعدازظهر
هنوز نوبتی انتخاب نشده
const [visit, setVisit] = useState<AppointmentValue | null>(null);
<AppointmentPicker
value={visit}
onChange={setVisit}
from="09:00"
to="17:00"
step={30}
booked={{ "2026-11-04": ["09:30", "10:00"] }}
name="visit"
/>با from، to و step ساعت کاری و طول هر نوبت را بدهید و نوبتهای پرشده را با booked (کلید تاریخ میلادی YYYY-MM-DD). با name دو فیلد visit_date و visit_time در فرم HTML ارسال میشوند.
ساعتهای دلخواه هر روز
اگر ساعتها هر روز فرق میکنند (نیمهوقت پنجشنبه، استراحت ظهر، چند پزشک)، getSlots را بدهید. برای هر روز فهرست ساعتها را برمیگرداند؛ هر ساعت یک رشته یا { time, available } است.
نوبت مشاوره
صبح
عصر
<AppointmentPicker
label="نوبت مشاوره"
days={10}
getSlots={(date) =>
date.getDay() === 4
? ["09:00", "10:00", "11:00"]
: ["09:00", "10:00", "11:00", "17:00", "18:00", { time: "19:00", available: false }]
}
/>روزهای تعطیل را با closed عوض کنید: false برای باز بودن همهٔ روزها، یا تابعی مثل (d) => d.getDay() === 4 برای تعطیلی پنجشنبهها. تابع appointmentSlots هم جدا در دسترس است تا همان ساعتها را در سرور حساب کنید.
ویژگیها
| نام | توضیح، نوع و پیشفرض |
|---|---|
value / defaultValue | نوبت انتخابشده |
onChange | با انتخاب هر ساعت |
start | اولین روز |
days | تعداد روزهای قابل انتخاب |
from / to | ساعت شروع و پایان کار |
step | طول هر نوبت به دقیقه |
booked | نوبتهای پرشده؛ کلید YYYY-MM-DD |
getSlots | ساعتهای هر روز بهجای from، to، step و booked |
closed | روزهای تعطیل؛ true یعنی جمعهها و تعطیلات رسمی ثابت |
label | برچسب و نام گروه |
name | فیلدهای name_date و name_time در فرم |
digits | خط ارقام |
دسترسپذیری
- روزها و ساعتها گروههای رادیوییاند (
role="radiogroup") با فوکوس گردشی: فقط یک گزینه در ترتیب Tab است و کلیدهای جهت بین بقیه حرکت میکنند؛ در راستبهچپ، فلش چپ یعنی گزینهٔ بعد. - صفحهخوان هر روز را با تاریخ کامل و وضعیتش میخواند: «سهشنبه ۱۳ آبان ۱۴۰۵، ۶ نوبت خالی» یا «تعطیل».
- نوبت انتخابشده در یک ناحیهٔ زنده (
aria-live) اعلام میشود. - نوبت پر فقط با خطخوردگی نشان داده نمیشود؛ غیرفعال است و صفحهخوان «پر» را میخواند.
وب کامپوننت
همین کامپوننت بدون React، برای HTML، وردپرس، Vue، Svelte و Angular: <kashi-appointment-picker> در @kashi-ui/elements. با name دو فیلد visit_date و visit_time ارسال میشوند؛ ساعتهای دلخواه هر روز با element.getSlots.
نصب
بدون ابزار ساخت، این دو خط را در <head> صفحه بگذارید:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@kashi-ui/css/dist/kashi.css">
<script type="module" src="https://cdn.jsdelivr.net/npm/@kashi-ui/elements/dist/cdn/kashi-elements.js"></script>یا با npm، و فقط همین بخش را وارد کنید:
npm i @kashi-ui/elements @kashi-ui/cssimport "@kashi-ui/css";
import "@kashi-ui/elements/appointment.js";نمونه
<kashi-appointment-picker name="visit" from="09:00" to="17:00" step="30" booked='{"2026-11-04": ["09:30", "10:00"]}'></kashi-appointment-picker>ویژگیها
| نام | توضیح، نوع و پیشفرض |
|---|---|
start | اولین روز |
days | تعداد روزها |
from / to / step | ساعت کاری و طول هر نوبت |
booked | نوبتهای پر: {"2026-11-04": ["09:30"]} |
closed | همهٔ روزها باز، حتی جمعه و تعطیلات |
value | نوبت اولیه |
label / name / digits | برچسب، نام فرم و خط ارقام |
رویدادها و JavaScript
| نام | توضیح |
|---|---|
kashi-change | detail: { date: "YYYY-MM-DD", time, value } |
element.getSlots | (date) => ["09:00", { time, available }] |
element.isClosed | (date) => boolean برای روزهای تعطیل دلخواه |
element.value | { date, time } |