UNPKG

vuetify

Version:

Vue Material Component Framework

86 lines (85 loc) 2.74 kB
import { mergeProps as _mergeProps, createVNode as _createVNode } from "vue"; // Styles import "./VDatePickerMonths.css"; // Components import { VBtn } from "../VBtn/index.js"; // Composables import { useDate } from "../../composables/date/index.js"; import { useProxiedModel } from "../../composables/proxiedModel.js"; // Utilities import { computed, watchEffect } from 'vue'; import { convertToUnit, createRange, genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types export const makeVDatePickerMonthsProps = propsFactory({ color: String, height: [String, Number], min: null, max: null, modelValue: Number, year: Number }, 'VDatePickerMonths'); export const VDatePickerMonths = genericComponent()({ name: 'VDatePickerMonths', props: makeVDatePickerMonthsProps(), emits: { 'update:modelValue': date => true }, setup(props, _ref) { let { emit, slots } = _ref; const adapter = useDate(); const model = useProxiedModel(props, 'modelValue'); const months = computed(() => { let date = adapter.startOfYear(adapter.date()); if (props.year) { date = adapter.setYear(date, props.year); } return createRange(12).map(i => { const text = adapter.format(date, 'monthShort'); const isDisabled = !!(props.min && adapter.isAfter(adapter.startOfMonth(adapter.date(props.min)), date) || props.max && adapter.isAfter(date, adapter.startOfMonth(adapter.date(props.max)))); date = adapter.getNextMonth(date); return { isDisabled, text, value: i }; }); }); watchEffect(() => { model.value = model.value ?? adapter.getMonth(adapter.date()); }); useRender(() => _createVNode("div", { "class": "v-date-picker-months", "style": { height: convertToUnit(props.height) } }, [_createVNode("div", { "class": "v-date-picker-months__content" }, [months.value.map((month, i) => { const btnProps = { active: model.value === i, color: model.value === i ? props.color : undefined, disabled: month.isDisabled, rounded: true, text: month.text, variant: model.value === month.value ? 'flat' : 'text', onClick: () => onClick(i) }; function onClick(i) { if (model.value === i) { emit('update:modelValue', model.value); return; } model.value = i; } return slots.month?.({ month, i, props: btnProps }) ?? _createVNode(VBtn, _mergeProps({ "key": "month" }, btnProps), null); })])])); return {}; } }); //# sourceMappingURL=VDatePickerMonths.js.map