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