1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import { createVNode as _createVNode, mergeProps as _mergeProps } from "vue";
- // Styles
- import "./VDatePickerMonths.css";
- // Components
- import { VBtn } from "../VBtn/index.mjs"; // Composables
- import { useDate } from "../../composables/date/index.mjs";
- import { useProxiedModel } from "../../composables/proxiedModel.mjs"; // Utilities
- import { computed, watchEffect } from 'vue';
- import { convertToUnit, createRange, genericComponent, propsFactory, useRender } from "../../util/index.mjs"; // 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.mjs.map
|