vexip-ui
Version: 
A Vue 3 UI library, Highly customizability, full TypeScript, performance pretty good
1 lines • 12.3 kB
Source Map (JSON)
{"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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"}