Skip to content

Vue

sh
npm install @jalali-js/vue

useCalendar()

composable سطح پایین: یک ref برای date (نه جفت [date, setDate] مثل هوک React؛ Vue اصطلاحی مستقیم ref را می‌خواند و می‌نویسد)، به‌همراه format() بسته‌شده به زبان composable، و isLeapYear() / daysInMonth() / today() سامانه تقویم.

vue
<script setup lang="ts">
import { useCalendar } from '@jalali-js/vue';

const jalali = useCalendar({ system: 'jalali', locale: 'fa' });
</script>

<template>
  <p>امروز: {{ jalali.format(jalali.today(), { style: 'long', weekday: true }) }}</p>
</template>

امضای کامل: مرجع API.

Calendar: ابتدایی بدون ظاهر

شبکه ماه با ویژگی‌های data-jalali-calendar-* و بدون CSS اجباری.

vue
<script setup lang="ts">
import { Calendar } from '@jalali-js/vue';
</script>

<template>
  <Calendar system="jalali" locale="en" :value="selected" @select="selected = $event" />
</template>

یک scoped slot با نام day نشانه‌گذاری سلول را یکسره عوض می‌کند، کنار همان ویژگی‌های data-jalali-calendar-*، برای مصرف‌کننده‌ای که فقط می‌خواهد ظاهر را عوض کند نه اینکه جایگزین کامل بسازد.

DatePicker: انتخابگر کارآمد با ظاهر پیش‌فرض

v-model مقدار ذخیره را حمل می‌کند (شکل‌گرفته با valueFormat)، نه CalendarDate خام، پس یک کانال نوشتن مؤثر است: انتخاب تاریخ مقدار بسته‌شده را مستقیم به‌روز می‌کند. مقدار را دوباره نمی‌خواند (برگرداندن هر valueFormat به CalendarDate خارج از محدوده است)؛ برای دانه انتخاب اولیه به‌جای آن از defaultDate استفاده کنید.

vue
<script setup lang="ts">
import '@jalali-js/vue/date-picker.css';
import { DatePicker } from '@jalali-js/vue';
import type { StorageValue } from 'jalali-js';
import { ref } from 'vue';

const stored = ref<StorageValue>();
</script>

<template>
  <DatePicker v-model="stored" system="jalali" locale="fa" />
</template>

variant="dropdown" پاپ‌آپ شبکه تقویم را با سه <select> ساده سال/ماه/روز عوض می‌کند:

vue
<DatePicker system="jalali" locale="en" variant="dropdown" />

در پاپ‌آپ شبکه (و مستقیم در Calendar)، شخص می‌تواند ماه یا سال سربرگ را کلیک کند تا مستقیم به شبکه ماه یا شبکه سال برود، به‌جای ورق زدن ماه به ماه. این به‌صورت پیش‌فرض روشن است؛ برای خاموش کردن :quick-nav="false" بدهید. برای بدون انتخاب اولیه :default-date="null" بدهید، تا انتخابگر خالی باز شود و جایگاه‌نما را نشان دهد تا کسی تاریخ بگزیند.

useResolvedTimeZone()

با تقویم 'zoned-datetime' و timeZone: 'auto' زیر SSR جفت می‌شود. برخلاف Next.js، Nuxt مفهوم جدا «مؤلفه کلاینت» برای opt-in ندارد: هر مؤلفه به‌صورت پیش‌فرض سرور-رندر و سپس hydrate می‌شود، پس پیچیدن اضافه لازم نیست. onMounted داخلی composable پس از mount منطقه زمانی واقعی مرورگر را دوباره حل می‌کند، بدون هشدار هیدراسیون.

vue
<script setup lang="ts">
import { useResolvedTimeZone } from '@jalali-js/vue';

const timeZone = useResolvedTimeZone('auto'); // هنگام SSR برابر 'UTC'، پس از mount منطقه واقعی
</script>

انتخابگر بازه، تقویم رویداد، و تقویم درون‌خطی

@jalali-js/ui-vue مقادیر RangePicker، EventCalendar و InlineCalendar را روی همان ابتدایی‌ها اضافه می‌کند؛ ببینید پیکربندی و قالب ظاهری و تقویم رویداد.

sh
npm install @jalali-js/ui-vue
vue
<script setup lang="ts">
import { EventCalendar, InlineCalendar, RangePicker } from '@jalali-js/ui-vue';
import type { RangeStorageValue } from '@jalali-js/ui-vue';
import { ref } from 'vue';

const storedRange = ref<RangeStorageValue>();
</script>

<template>
  <InlineCalendar system="jalali" locale="en" :value="selected" @select="selected = $event" />
  <RangePicker v-model="storedRange" system="jalali" locale="en" />
  <EventCalendar system="jalali" locale="en" :events="events" @event-click="onEvent" />
</template>

جدول‌های prop

SFCهای .vue در API تولیدشده نیستند. این جدول‌ها با defineProps در منبع هم‌خوانی دارند.

نکته اتصال: DatePicker و RangePicker برای مقدار ذخیره از v-model استفاده می‌کنند (کانال نوشتن). با defaultDate / defaultRange دانه بگذارید. Calendar از :value و @select استفاده می‌کند. TimePicker / TimeRangePicker رویداد change می‌فرستند. EventCalendar رویدادهای eventClick و dayClick می‌فرستد.

DatePicker

Propنوعپیش‌فرضمعنا
system'jalali' | 'gregorian''jalali'تقویم نمایش
locale'en' | 'fa' | 'ps''en'زبان UI
defaultDateCalendarDate | CalendarDateTime | nullامروزانتخاب اولیه. null خالی است
precision'date' | 'datetime''date'فقط روز، یا روز به‌همراه زمان
minuteStepnumber1گام دقیقه وقتی datetime است
disabledHoursnumber[]-ساعت‌های پنهان ۰ تا ۲۳
quickNavbooleantrueشبکه‌های پرش ماه و سال
valueFormatValueFormat'gregorian-iso'شکل v-model
displayFormatFormatOptions-قالب متن ورودی
variant'grid' | 'dropdown''grid'popover شبکه یا selectهای Y/M/D
rulesSelectionRules-حداقل/حداکثر و روزهای مسدود
showHolidaysbooleanfalseعلامت تعطیلات (جلالی)
blockHolidaysbooleanfalseمسدود کردن تعطیلات (جلالی)
holidayRegion'IR' | 'AF' | 'TJ''IR'بسته تعطیلات
placeholderstringبسته زبانمتن ورودی خالی

Calendar / InlineCalendar

Propنوعپیش‌فرضمعنا
systemCalendarSystem'jalali'تقویم نمایش
localeLocaleCode'en'زبان UI
valueCalendarDate | nullnullروز انتخاب‌شده
initialDisplayedMonth{ year, month }value یا امروزماه باز شدن
quickNavbooleantrueشبکه‌های پرش ماه و سال
rulesSelectionRules-حداقل/حداکثر و روزهای مسدود
showHolidaysbooleanfalseعلامت تعطیلات
blockHolidaysbooleanfalseمسدود کردن تعطیلات
holidayRegionHolidayRegion'IR'بسته تعطیلات

Emit: select با CalendarDate انتخاب‌شده.

TimePicker

Propنوعپیش‌فرضمعنا
valueTimeOfDay-زمان کنترل‌شده
defaultValueTimeOfDay{ hour: 0, minute: 0 }دانه بدون کنترل
minuteStepnumber1گام گزینه‌های دقیقه
disabledHoursnumber[]-ساعت‌های پنهان
localeLocaleCode'en'زبان رقم‌ها

Emit: change با TimeOfDay.

RangePicker (@jalali-js/ui-vue)

Propنوعپیش‌فرضمعنا
systemCalendarSystem'jalali'تقویم نمایش
localeLocaleCode'en'زبان UI
defaultRange{ start, end }-بازه اولیه
valueFormatValueFormat'gregorian-iso'شکل v-model
displayFormatFormatOptions-قالب متن ورودی
rulesSelectionRules-حد روز و بازه
showHolidaysbooleanfalseعلامت تعطیلات
blockHolidaysbooleanfalseمسدود کردن تعطیلات
holidayRegionHolidayRegion'IR'بسته تعطیلات
placeholderstring-متن ورودی خالی

TimeRangePicker (@jalali-js/ui-vue)

Propنوعپیش‌فرضمعنا
localeLocaleCode'en'زبان رقم‌ها
defaultRange{ start, end }09:00 تا 17:00بازه اولیه
minuteStepnumber1گام دقیقه برای هر دو انتها
disabledHoursnumber[]-ساعت‌های پنهان

Emit: change با بازه زمان.

EventCalendar (@jalali-js/ui-vue)

ببینید تقویم رویداد. Propها با React هم‌خوان هستند، جز اینکه callbackها به‌صورت emitهای eventClick و dayClick هستند.