calendar

Year select with navigation

Year select with navigation

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

src/calendar/c-calendar-9.vue

<!--
  АДАПТАЦИЯ (docs/PORTING.md §4a/§5): та же подмена `Dropdown` → `Select`,
  что и в `c-calendar-8`, но здесь оригинал подменяет только
  `YearsDropdown` (`captionLayout="dropdown-years"`): месяц остаётся
  обычным текстом, навигация по месяцам — стрелками. Реализовано через
  слот `#caption` `CCalendar` (закрытое состояние `Select`, см. §5
  `ui-select`).
-->
<script setup lang="ts">
import { ref } from "vue"
import { Card, CardContent } from "@/components/ui/card"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Calendar as CCalendar } from "@/components/ui/calendar"

const fixedMonth = new Date(2026, 0, 15)
const date = ref<Date | undefined>(fixedMonth)
const years = [2024, 2025, 2026, 2027, 2028]
</script>

<template>
  <Card class="p-0">
    <CardContent class="p-0">
      <CCalendar
        mode="single"
        v-model="date"
        :month="fixedMonth"
        nav-class="flex items-center w-full absolute top-0 inset-x-0 justify-between pointer-events-none [&>button]:pointer-events-auto"
      >
        <template #caption>
          <div class="flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)">
            <div class="flex w-full items-center justify-center gap-3 [&>span]:text-sm [&>span]:font-medium">
              <span>Jan</span>
              <Select model-value="2026">
                <SelectTrigger>
                  <SelectValue>{{ `2026` }}</SelectValue>
                </SelectTrigger>
                <SelectContent>
                  <SelectItem v-for="y in years" :key="y" :value="String(y)">{{ y }}</SelectItem>
                </SelectContent>
              </Select>
            </div>
          </div>
        </template>
      </CCalendar>
    </CardContent>
  </Card>
</template>

Установка

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

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

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