PXD

Calendar

Display and select a date.

Default

2026 Oct
Mon
Tue
Wed
Thu
Fri
Sat
Sun
<script setup>
import { ref } from 'vue'

const value = ref(Date.now())
</script>

<template>
  <PCalendar v-model="value" />
</template>

Custom Content

2026 Oct
Mon
Tue
Wed
Thu
Fri
Sat
Sun
<script setup>
import { ref } from 'vue'

const value = ref(Date.now())
</script>

<template>
  <PCalendar v-model="value">
    <template #item="{ date }">
      <span>{{ date }}</span>

      <span v-if="date === 1" class="ml-1 text-xs font-medium text-red-900">New</span>
    </template>
  </PCalendar>
</template>

Disabled Dates

2026 Oct
Mon
Tue
Wed
Thu
Fri
Sat
Sun
<script setup>
import { ref } from 'vue'

const value = ref(Date.now())

function isDateDisabled(timestamp) {
  return new Date(timestamp).getDay() === 0
}
</script>

<template>
  <PCalendar v-model="value" :is-date-disabled="isDateDisabled" />
</template>

Formatter

Use value-format to control the data written back to v-model. Pass 'timestamp' to emit a number, or any Day.js format string.

Value formatted: 1791607287662

2026 Oct
Mon
Tue
Wed
Thu
Fri
Sat
Sun

Value formatted: 2024-08-15

2024 Aug
Mon
Tue
Wed
Thu
Fri
Sat
Sun
<script setup>
import { ref } from 'vue'

const value1 = ref(Date.now())
const value2 = ref('2024-08-15')
</script>

<template>
  <PStack direction="vertical" gap="4">
    <div>
      <PText class="mb-2">Value formatted: {{ value1 }}</PText>
      <PCalendar v-model="value1" value-format="timestamp" />
    </div>
    <div>
      <PText class="mb-2">Value formatted: {{ value2 }}</PText>
      <PCalendar v-model="value2" value-format="YYYY-MM-DD" />
    </div>
  </PStack>
</template>

Compact

Use a compact layout for narrow containers or picker panels.

2026 Oct
Mon
Tue
Wed
Thu
Fri
Sat
Sun
<script setup>
import { ref } from 'vue'

const value = ref(Date.now())
</script>

<template>
  <div class="max-w-max max-sm:mx-auto">
    <PCalendar v-model="value" compact />
  </div>
</template>

Props

NameTypeDefaultDescription
default-valuenumber | string | Date | nullnullDefault selected date
model-valuenumber | string | Date | null-Selected date
value-formatstring'YYYY-MM-DD'Output format for v-model. Use 'timestamp' or a Day.js format string
is-date-disabled(timestamp: number) => boolean-Date disabled validator
compactbooleanfalseUse a compact layout for narrow containers

Events

NameTypeDescription
panel-change(info: CalendarPanelInfo) => voidEmitted when the visible month or year of the panel changes.
change(value: number | string | Date | null) => voidEmitted when a non-disabled date is selected.
update:modelValue(value: number | string | Date | null) => voidEmitted when a non-disabled date is selected.

Slots

NameParametersDescription
item{ year, month, date, timestamp }Content rendered inside each date
header{ year, month }Calendar header

Source

Source