{"version":3,"file":"useMonthYearPicker.cjs","sources":["../../../../components/datepicker/composables/useMonthYearPicker.js"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport { addMonths, getDate, getMonth, getYear, set, subMonths } from 'date-fns';\nimport { formatMonth, getCalendarDays } from '@/components/datepicker/utils.js';\nimport { returnFirstEl } from '@/common/utils';\n\nexport function useMonthYearPicker (props, emits) {\n  const selectMonth = ref(getMonth(props.selectedDate));\n  const selectYear = ref(getYear(props.selectedDate));\n  const highlightedDay = ref(null);\n  const focusPicker = ref(0);\n  const focusRefs = ref([]);\n\n  const calendarDays = computed(() => {\n    return getCalendarDays(selectMonth.value, selectYear.value, highlightedDay.value);\n  });\n\n  const formattedMonth = computed(() => {\n    return (month, format, locale) => formatMonth(month, format, locale);\n  });\n\n  watch(selectMonth, () => {\n    highlightDay();\n    emits('calendar-days', calendarDays.value);\n  }, { immediate: true });\n\n  watch(selectYear, () => {\n    highlightDay();\n    emits('calendar-days', calendarDays.value);\n  }, { immediate: true });\n\n  function setDayRef (el) {\n    if (!focusRefs.value.includes(el)) {\n      focusRefs.value.push(el);\n    }\n  }\n\n  function focusMonthYearPicker () {\n    returnFirstEl(focusRefs.value[0].$el).focus();\n  }\n\n  function handleKeyDown (event) {\n    switch (event.key) {\n      case 'ArrowLeft':\n        event.preventDefault();\n        if (focusPicker.value === 0) {\n          focusPicker.value = 3;\n          returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n        } else {\n          focusPicker.value--;\n          returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n        }\n        break;\n\n      case 'ArrowRight':\n        event.preventDefault();\n        if (focusPicker.value === 3) {\n          focusPicker.value = 0;\n          returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n        } else {\n          focusPicker.value++;\n          returnFirstEl(focusRefs.value[focusPicker.value].$el).focus();\n        }\n        break;\n\n      case 'ArrowDown':\n        event.preventDefault();\n        emits('focus-first-day');\n        break;\n\n      case 'Tab':\n        event.preventDefault();\n        emits('focus-first-day');\n        break;\n\n      case 'Escape':\n        emits('close-datepicker');\n        break;\n    }\n  }\n\n  function highlightDay () {\n    const year = getYear(props.selectedDate);\n    const month = getMonth(props.selectedDate);\n\n    if (year !== selectYear.value || month !== selectMonth.value) {\n      highlightedDay.value = null;\n    } else {\n      highlightedDay.value = getDate(props.selectedDate);\n    }\n  }\n\n  function changeMonth (value) {\n    // Adjust year when changing from January to December or vice versa\n    if ((selectMonth.value === 0 && value === -1) || (selectMonth.value === 11 && value === 1)) {\n      selectYear.value += value;\n    }\n\n    // Calculate the new date by adding or subtracting months\n    const initialDate = set(props.selectedDate, { month: selectMonth.value, year: selectYear.value });\n    const newDate = value === 1 ? addMonths(initialDate, 1) : subMonths(initialDate, 1);\n\n    // Update the selected month\n    selectMonth.value = getMonth(newDate);\n  }\n\n  function changeYear (value) {\n    selectYear.value = selectYear.value + value;\n  }\n\n  function goToNextMonth () {\n    changeMonth(1);\n  }\n\n  function goToPrevMonth () {\n    changeMonth(-1);\n  }\n\n  return {\n    selectMonth,\n    selectYear,\n    formattedMonth,\n    setDayRef,\n    focusMonthYearPicker,\n    handleKeyDown,\n    changeMonth,\n    changeYear,\n    goToNextMonth,\n    goToPrevMonth,\n  };\n}\n"],"names":["ref","getMonth","getYear","computed","getCalendarDays","formatMonth","watch","returnFirstEl","getDate","set","addMonths","subMonths"],"mappings":"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"}