@dialpad/dialtone
Version:
Dialpad's Dialtone design system monorepo
1 lines • 6.53 kB
Source Map (JSON)
{"version":3,"file":"useCalendar.cjs","sources":["../../../../components/datepicker/composables/useCalendar.js"],"sourcesContent":["import { computed, ref, watch, nextTick } from 'vue';\nimport { getWeekDayNames, calculateNextFocusDate, calculatePrevFocusDate } from '@/components/datepicker/utils.js';\nimport { MONTH_FORMAT, WEEK_START } from '@/components/datepicker/datepicker_constants.js';\nimport { format, getYear } from 'date-fns';\nimport { returnFirstEl } from '@/common/utils';\n\nexport function useCalendar (props, emits) {\n const selectedDay = ref(null);\n const focusDay = ref(0);\n const daysRef = ref([]);\n\n const weekDays = computed(() => {\n return getWeekDayNames(props.locale, WEEK_START);\n });\n\n watch(() => props.calendarDays, () => {\n focusDay.value = 0;\n daysRef.value = [];\n selectedDay.value = null;\n });\n\n function dayAriaLabel (day) {\n return `${props.selectDayLabel} ${day.text} ${format(day.value, MONTH_FORMAT)} ${getYear(day.value)}`;\n }\n\n function setDayRef (el, day) {\n if (!daysRef.value.some(day => day.el === el) && day.currentMonth) {\n daysRef.value.push({ el, day });\n }\n }\n\n function handleKeyDown (event) {\n switch (event.key) {\n case 'ArrowUp':\n event.preventDefault();\n focusDay.value -= 7;\n try {\n returnFirstEl(daysRef.value[focusDay.value].el.$el).focus();\n } catch (error) {\n const prevFocusDate = calculatePrevFocusDate(daysRef.value[focusDay.value + 7].day.value);\n emits('go-to-prev-month');\n\n nextTick(() => {\n returnFirstEl(daysRef.value[prevFocusDate - 1].el.$el).focus();\n focusDay.value += prevFocusDate - 1;\n });\n }\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n focusDay.value += 7;\n try {\n returnFirstEl(daysRef.value[focusDay.value].el.$el).focus();\n } catch (error) {\n const nextFocusDate = calculateNextFocusDate(daysRef.value[focusDay.value - 7].day.value);\n emits('go-to-next-month');\n\n nextTick(() => {\n returnFirstEl(daysRef.value[nextFocusDate - 1].el.$el).focus();\n focusDay.value += nextFocusDate - 1;\n });\n }\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n if (focusDay.value > 0) {\n focusDay.value -= 1;\n returnFirstEl(daysRef.value[focusDay.value].el.$el).focus();\n } else {\n // if we are on month first day, jump to last day of prev month\n emits('go-to-prev-month');\n focusLastDay();\n }\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (focusDay.value < daysRef.value.length - 1) {\n focusDay.value += 1;\n returnFirstEl(daysRef.value[focusDay.value].el.$el).focus();\n } else {\n // if we are on month last day, jump to first day of next month\n emits('go-to-next-month');\n\n focusFirstDay();\n }\n break;\n\n case 'Tab':\n event.preventDefault();\n emits('focus-month-year-picker');\n break;\n\n case 'Escape':\n emits('close-datepicker');\n break;\n }\n }\n\n function focusFirstDay () {\n focusDay.value = 0;\n\n nextTick(() => {\n returnFirstEl(daysRef.value[focusDay.value].el.$el).focus();\n });\n }\n\n function focusLastDay () {\n nextTick(() => {\n focusDay.value = daysRef.value.length - 1;\n returnFirstEl(daysRef.value[focusDay.value].el.$el).focus();\n });\n }\n\n function selectDay (day) {\n if (!day.currentMonth) { return; }\n\n // local selectedDay is updated when a day is selected\n selectedDay.value = day.text;\n emits('select-date', day.value);\n }\n\n return {\n selectedDay,\n weekDays,\n dayAriaLabel,\n setDayRef,\n handleKeyDown,\n focusFirstDay,\n selectDay,\n };\n}\n"],"names":["ref","computed","getWeekDayNames","WEEK_START","watch","format","MONTH_FORMAT","getYear","day","returnFirstEl","calculatePrevFocusDate","nextTick","calculateNextFocusDate"],"mappings":"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"}