calendar

Calendar with presets

Calendar with presets

Загрузка превью…

src/calendar/c-calendar-15.vue

<script setup lang="ts">
import { ref } from "vue"
import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"
import { Calendar as CCalendar } from "@/components/ui/calendar"

const today = new Date(2026, 0, 15)
function addDays(d: Date, n: number): Date {
  return new Date(d.getFullYear(), d.getMonth(), d.getDate() + n)
}
const yesterday = addDays(today, -1)
const lastWeek = addDays(today, -7)
const lastMonth = new Date(2025, 11, 15)
const lastYear = new Date(2025, 0, 15)

const month = ref<Date>(today)
const date = ref<Date>(today)

function pick(d: Date) {
  date.value = d
  month.value = d
}
</script>

<template>
  <Card class="p-0">
    <CardContent class="p-0">
      <div class="flex max-sm:flex-col">
        <div class="relative py-4 max-sm:order-1 max-sm:border-t sm:w-32">
          <div class="h-full sm:border-e">
            <div class="flex flex-col px-2">
              <Button class="w-full justify-start" size="sm" variant="ghost" @click="pick(today)">Today</Button>
              <Button class="w-full justify-start" size="sm" variant="ghost" @click="pick(yesterday)">Yesterday</Button>
              <Button class="w-full justify-start" size="sm" variant="ghost" @click="pick(lastWeek)">Last week</Button>
              <Button class="w-full justify-start" size="sm" variant="ghost" @click="pick(lastMonth)">Last month</Button>
              <Button class="w-full justify-start" size="sm" variant="ghost" @click="pick(lastYear)">Last year</Button>
            </div>
          </div>
        </div>
        <CCalendar mode="single" v-model="date" :month="month" @update:month="month = $event" :disabled-fn="(d: Date) => d > today" />
      </div>
    </CardContent>
  </Card>
</template>

Установка

npx shadcn-vue@latest add https://revueui.rootapi.dev/r/c-calendar-15.json

Зависимости реестра

Источник: порт из ReUI (Keenthemes, MIT)