UNPKG

vexip-ui

Version:

A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good

1 lines 12.3 kB
{"version":3,"file":"calendar.vue2.cjs","sources":["../../../components/calendar/calendar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Column } from '@/components/column'\nimport { NumberInput } from '@/components/number-input'\nimport { Renderer } from '@/components/renderer'\nimport { Row } from '@/components/row'\n\nimport { ref, toRef, watch } from 'vue'\n\nimport CalendarPanel from './calendar-panel.vue'\nimport { emitEvent, useLocale, useNameHelper, useProps } from '@vexip-ui/config'\nimport { calendarProps } from './props'\n\nimport type { CalendarSlots } from './symbol'\n\ndefineOptions({ name: 'Calendar' })\n\nconst _props = defineProps(calendarProps)\nconst props = useProps('calendar', _props, {\n locale: null,\n value: {\n default: null,\n static: true,\n },\n year: () => new Date().getFullYear(),\n month: {\n default: () => new Date().getMonth() + 1,\n validator: value => value > 0 && value <= 12,\n },\n weekDays: {\n default: null,\n validator: value => !value || value.length === 0 || value.length === 7,\n },\n weekStart: {\n default: 0,\n validator: value => value >= 0 && value < 7,\n },\n today: {\n default: () => new Date(),\n validator: value => !Number.isNaN(+new Date(value)),\n },\n disabledDate: {\n default: () => false,\n isFunc: true,\n },\n slots: () => ({}),\n})\n\nconst emit = defineEmits(['update:value', 'update:year', 'update:month'])\n\ndefineSlots<CalendarSlots>()\n\nconst nh = useNameHelper('calendar')\nconst locale = useLocale('calendar', toRef(props, 'locale'))\n\nconst calendarValue = ref(props.value)\nconst calendarYear = ref(props.year)\nconst calendarMonth = ref(props.month)\n\nwatch(\n () => props.value,\n value => {\n calendarValue.value = value\n },\n)\nwatch(\n () => props.year,\n value => {\n calendarYear.value = value\n },\n)\nwatch(\n () => props.month,\n value => {\n calendarMonth.value = value\n },\n)\n\ndefineExpose({ calendarValue, calendarYear, calendarMonth })\n\nfunction formatYearInput(value: number) {\n return `${value}${locale.value.year}`\n}\n\nfunction formatMonthInput(value: number) {\n return `${value}${locale.value.month}`\n}\n\nfunction isDisabled(date: Date) {\n if (typeof props.disabledDate !== 'function') {\n return true\n }\n\n return props.disabledDate(date)\n}\n\nfunction handleClick(date: Date) {\n if (!isDisabled(date)) {\n calendarValue.value = date\n }\n\n emitEvent(props.onSelect, date)\n emit('update:value', date)\n}\n\nfunction handleYearChange(value: number) {\n calendarYear.value = value\n\n emitEvent(props.onYearChange, value, calendarMonth.value)\n emit('update:year', value)\n}\n\nfunction handleMonthChange(value: number) {\n calendarMonth.value = value\n\n emitEvent(props.onMonthChange, calendarYear.value, value)\n emit('update:month', value)\n}\n</script>\n\n<template>\n <CalendarPanel\n v-model:value=\"calendarValue\"\n :inherit=\"props.inherit\"\n :class=\"[nh.b()]\"\n :year=\"calendarYear\"\n :month=\"calendarMonth\"\n :week-start=\"props.weekStart\"\n :today=\"props.today\"\n :disabled-date=\"props.disabledDate\"\n >\n <template #header>\n <slot name=\"header\">\n <Renderer :renderer=\"props.slots.header\">\n <Row inherit :class=\"nh.be('header')\" align=\"middle\">\n <Column flex=\"auto\">\n <slot name=\"title\">\n <Renderer :renderer=\"props.slots.title\"></Renderer>\n </slot>\n </Column>\n <Column :class=\"nh.be('actions')\" flex=\"0\">\n <NumberInput\n :value=\"calendarYear\"\n inherit\n :class=\"nh.be('year-input')\"\n :min=\"1970\"\n :max=\"2300\"\n :formatter=\"formatYearInput\"\n @change=\"handleYearChange\"\n ></NumberInput>\n <NumberInput\n :value=\"calendarMonth\"\n inherit\n :class=\"nh.be('month-input')\"\n :min=\"1\"\n :max=\"12\"\n :formatter=\"formatMonthInput\"\n @change=\"handleMonthChange\"\n ></NumberInput>\n </Column>\n </Row>\n </Renderer>\n </slot>\n </template>\n <template #week=\"{ label, index, week }\">\n <div :class=\"nh.be('week')\">\n <slot\n name=\"week\"\n :label=\"label\"\n :index=\"index\"\n :week=\"week\"\n >\n <Renderer :renderer=\"props.slots.week\" :data=\"{ label, index, week }\">\n <div :class=\"nh.be('week-value')\">\n {{ label }}\n </div>\n </Renderer>\n </slot>\n </div>\n </template>\n <template #item=\"{ date, label, selected, hovered, isPrev, isNext, isToday, disabled }\">\n <div\n :class=\"{\n [nh.be('date')]: true,\n [nh.bem('date', 'selected')]: selected,\n [nh.bem('date', 'prev')]: isPrev,\n [nh.bem('date', 'next')]: isNext,\n [nh.bem('date', 'today')]: isToday,\n [nh.bem('date', 'disabled')]: disabled\n }\"\n tabindex=\"0\"\n @click=\"handleClick(date)\"\n @keydown.enter.prevent=\"handleClick(date)\"\n @keydown.space.prevent=\"handleClick(date)\"\n >\n <div :class=\"nh.be('date-header')\">\n <slot\n name=\"date\"\n :selected=\"selected\"\n :hovered=\"hovered\"\n :date=\"date\"\n :is-prev=\"isPrev\"\n :is-next=\"isNext\"\n :is-today=\"isToday\"\n :disabled=\"disabled\"\n >\n <Renderer\n :renderer=\"props.slots.date\"\n :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\n >\n <div :class=\"nh.be('date-value')\" :aria-label=\"label\">\n {{ date.getDate() }}\n </div>\n </Renderer>\n </slot>\n </div>\n <div :class=\"nh.be('date-content')\">\n <slot\n name=\"content\"\n :selected=\"selected\"\n :hovered=\"hovered\"\n :date=\"date\"\n :is-prev=\"isPrev\"\n :is-next=\"isNext\"\n :is-today=\"isToday\"\n :disabled=\"disabled\"\n >\n <Renderer\n :renderer=\"props.slots.content\"\n :data=\"{ selected, hovered, date, isPrev, isNext, isToday, disabled }\"\n ></Renderer>\n </slot>\n </div>\n </div>\n </template>\n </CalendarPanel>\n</template>\n"],"names":["_props","__props","props","useProps","value","emit","__emit","nh","useNameHelper","locale","useLocale","toRef","calendarValue","ref","calendarYear","calendarMonth","watch","__expose","formatYearInput","formatMonthInput","isDisabled","date","handleClick","emitEvent","handleYearChange","handleMonthChange","_createBlock","CalendarPanel","$event","_unref","_normalizeClass","_renderSlot","_ctx","_createVNode","Renderer","Row","Column","NumberInput","label","index","week","_createElementVNode","selected","hovered","isPrev","isNext","isToday","disabled","_withKeys","_withModifiers","_toDisplayString","_hoisted_2"],"mappings":"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"}