UNPKG

@dialpad/dialtone

Version:

Dialpad's Dialtone design system monorepo

1 lines 33.3 kB
{"version":3,"file":"datepicker-DprRX9AH.cjs","names":["DialtoneLocalization","getCalendarDays","formatMonth","INTL_MONTH_FORMAT","DialtoneLocalization","getWeekDayNames","formatDate","INTL_MONTH_FORMAT","calculatePrevFocusDate","calculateNextFocusDate","$refs","$emit"],"sources":["../components/datepicker/composables/useMonthYearPicker.js","../components/datepicker/modules/month-year-picker.vue","../components/datepicker/composables/useCalendar.js","../components/datepicker/modules/calendar.vue","../components/datepicker/datepicker.vue"],"sourcesContent":["import { computed, ref, watch } from 'vue';\nimport { addMonths, endOfMonth, getDate, getMonth, getYear, set, startOfDay, startOfMonth, subMonths } from 'date-fns';\nimport { formatMonth, getCalendarDays } from '../utils.js';\nimport { INTL_MONTH_FORMAT } from '../datepicker_constants';\nimport { returnFirstEl } from '@/common/utils';\nimport { DialtoneLocalization } from '@/localization';\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 const i18n = new DialtoneLocalization();\n\n const calendarDays = computed(() => {\n return getCalendarDays(\n selectMonth.value, selectYear.value, highlightedDay.value,\n props.minDate, props.maxDate, props.weekStartsOn,\n );\n });\n\n const isPrevMonthDisabled = computed(() => {\n if (!props.minDate) return false;\n const prevMonth = subMonths(new Date(selectYear.value, selectMonth.value, 1), 1);\n return endOfMonth(prevMonth) < startOfDay(props.minDate);\n });\n\n const isNextMonthDisabled = computed(() => {\n if (!props.maxDate) return false;\n const nextMonth = addMonths(new Date(selectYear.value, selectMonth.value, 1), 1);\n return startOfMonth(nextMonth) > startOfDay(props.maxDate);\n });\n\n const isPrevYearDisabled = computed(() => {\n if (!props.minDate) return false;\n const prevYearMonth = new Date(selectYear.value - 1, selectMonth.value, 1);\n return endOfMonth(prevYearMonth) < startOfDay(props.minDate);\n });\n\n const isNextYearDisabled = computed(() => {\n if (!props.maxDate) return false;\n const nextYearMonth = new Date(selectYear.value + 1, selectMonth.value, 1);\n return startOfMonth(nextYearMonth) > startOfDay(props.maxDate);\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 watch(() => props.minDate, () => {\n emits('calendar-days', calendarDays.value);\n });\n\n watch(() => props.maxDate, () => {\n emits('calendar-days', calendarDays.value);\n });\n\n function formattedMonth (month) {\n return formatMonth(month, INTL_MONTH_FORMAT, i18n.currentLocale);\n }\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 if (value === -1 && isPrevMonthDisabled.value) return;\n if (value === 1 && isNextMonthDisabled.value) return;\n\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 if (value === -1 && isPrevYearDisabled.value) return;\n if (value === 1 && isNextYearDisabled.value) return;\n\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 function previousYearAriaLabel () {\n return `${i18n.$t('DIALTONE_DATEPICKER_CHANGE_TO')} ${i18n.$t('DIALTONE_DATEPICKER_PREVIOUS_YEAR')} ${selectYear.value - 1}`;\n }\n\n function previousMonthAriaLabel () {\n return `${i18n.$t('DIALTONE_DATEPICKER_CHANGE_TO')} ${i18n.$t('DIALTONE_DATEPICKER_PREVIOUS_MONTH')} ${formattedMonth(selectMonth.value - 1)}`;\n }\n\n function nextYearAriaLabel () {\n return `${i18n.$t('DIALTONE_DATEPICKER_CHANGE_TO')} ${i18n.$t('DIALTONE_DATEPICKER_NEXT_YEAR')} ${selectYear.value + 1}`;\n }\n\n function nextMonthAriaLabel () {\n return `${i18n.$t('DIALTONE_DATEPICKER_CHANGE_TO')} ${i18n.$t('DIALTONE_DATEPICKER_NEXT_MONTH')} ${formattedMonth(selectMonth.value + 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 isPrevMonthDisabled,\n isNextMonthDisabled,\n isPrevYearDisabled,\n isNextYearDisabled,\n previousYearAriaLabel,\n previousMonthAriaLabel,\n nextYearAriaLabel,\n nextMonthAriaLabel,\n };\n}\n","<template>\n <dt-stack\n class=\"d-datepicker__month-year\"\n direction=\"row\"\n gap=\"300\"\n >\n <dt-stack\n as=\"nav\"\n class=\"d-datepicker__nav\"\n direction=\"row\"\n gap=\"200\"\n >\n <dt-tooltip\n :fallback-placements=\"['top-start', 'auto']\"\n :message=\"i18n.$t('DIALTONE_DATEPICKER_PREVIOUS_YEAR')\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"prevYearButton\"\n :ref=\"el => { if (el) setDayRef(el) }\"\n :aria-label=\"previousYearAriaLabel()\"\n :circle=\"true\"\n :disabled=\"isPrevYearDisabled\"\n class=\"d-datepicker__nav-btn\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n type=\"button\"\n @click=\"changeYear(-1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon-chevrons-left\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n <dt-tooltip\n :fallback-placements=\"['top-start', 'auto']\"\n :message=\"i18n.$t('DIALTONE_DATEPICKER_PREVIOUS_MONTH')\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"prevMonthButton\"\n :ref=\"el => { if (el) setDayRef(el) }\"\n :aria-label=\"previousMonthAriaLabel()\"\n :circle=\"true\"\n :disabled=\"isPrevMonthDisabled\"\n class=\"d-datepicker__nav-btn\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n type=\"button\"\n @click=\"changeMonth(-1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon-chevron-left\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n </dt-stack>\n <div\n id=\"calendar-heading\"\n class=\"d-datepicker__month-year-title\"\n >\n {{ formattedMonth(selectMonth) }}\n\n {{ selectYear }}\n </div>\n <dt-stack\n as=\"nav\"\n class=\"d-datepicker__nav\"\n direction=\"row\"\n gap=\"200\"\n >\n <dt-tooltip\n :fallback-placements=\"['top-end', 'auto']\"\n :message=\"i18n.$t('DIALTONE_DATEPICKER_NEXT_MONTH')\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"nextMonthButton\"\n :ref=\"el => { if (el) setDayRef(el) }\"\n :aria-label=\"nextMonthAriaLabel()\"\n :circle=\"true\"\n :disabled=\"isNextMonthDisabled\"\n class=\"d-datepicker__nav-btn\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n type=\"button\"\n @click=\"changeMonth(1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon-chevron-right\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n <dt-tooltip\n :fallback-placements=\"['top-end', 'auto']\"\n :message=\"i18n.$t('DIALTONE_DATEPICKER_NEXT_YEAR')\"\n placement=\"top\"\n >\n <template #anchor>\n <dt-button\n id=\"nextYearButton\"\n :ref=\"el => { if (el) setDayRef(el) }\"\n :aria-label=\"nextYearAriaLabel()\"\n :circle=\"true\"\n :disabled=\"isNextYearDisabled\"\n class=\"d-datepicker__nav-btn\"\n importance=\"clear\"\n kind=\"muted\"\n size=\"xs\"\n type=\"button\"\n @click=\"changeYear(1)\"\n @keydown=\"handleKeyDown($event)\"\n >\n <dt-icon-chevrons-right\n size=\"200\"\n />\n </dt-button>\n </template>\n </dt-tooltip>\n </dt-stack>\n </dt-stack>\n</template>\n\n<script setup>\nimport {\n DtIconChevronLeft,\n DtIconChevronsLeft,\n DtIconChevronRight,\n DtIconChevronsRight,\n} from '@dialpad/dialtone-icons/vue3';\nimport { DtStack } from '@/components/stack';\nimport { DtButton } from '@/components/button';\nimport { DtTooltip } from '@/components/tooltip';\nimport { onMounted } from 'vue';\nimport { useMonthYearPicker } from '../composables/useMonthYearPicker.js';\nimport { DialtoneLocalization } from '@/localization';\n\nconst props = defineProps({\n selectedDate: {\n type: Date,\n required: true,\n },\n\n minDate: {\n type: Date,\n default: null,\n },\n\n maxDate: {\n type: Date,\n default: null,\n },\n\n weekStartsOn: {\n type: Number,\n default: 0,\n validator: (v) => Number.isInteger(v) && v >= 0 && v <= 6,\n },\n});\n\nconst emits = defineEmits([\n /**\n * Will retrieve the calendar days of the given date\n *\n * @event calendar-days\n * @type {Array}\n */\n 'calendar-days',\n\n /**\n * Will focus first day in calendar\n *\n * @event focus-first-day\n */\n 'focus-first-day',\n\n /**\n * Will focus last day in calendar\n *\n * @event focus-last-day\n */\n 'focus-last-day',\n\n /**\n * Will close the datepicker\n *\n * @event close-datepicker\n */\n 'close-datepicker',\n]);\n\nconst i18n = new DialtoneLocalization();\n\nconst {\n selectMonth,\n selectYear,\n formattedMonth,\n setDayRef,\n focusMonthYearPicker,\n handleKeyDown,\n changeMonth,\n changeYear,\n goToNextMonth,\n goToPrevMonth,\n isPrevMonthDisabled,\n isNextMonthDisabled,\n isPrevYearDisabled,\n isNextYearDisabled,\n previousYearAriaLabel,\n previousMonthAriaLabel,\n nextMonthAriaLabel,\n nextYearAriaLabel,\n} = useMonthYearPicker(props, emits);\n\nonMounted(() => {\n focusMonthYearPicker();\n});\n\ndefineExpose({\n focusMonthYearPicker,\n goToNextMonth,\n goToPrevMonth,\n});\n</script>\n","import { computed, ref, watch, nextTick } from 'vue';\nimport { getWeekDayNames, calculateNextFocusDate, calculatePrevFocusDate, formatDate } from '../utils.js';\nimport { INTL_MONTH_FORMAT } from '../datepicker_constants.js';\nimport { returnFirstEl } from '@/common/utils';\nimport { DialtoneLocalization } from '@/localization';\n\nexport function useCalendar (props, emits) {\n const selectedDay = ref(null);\n const focusDay = ref(0);\n const daysRef = ref([]);\n const i18n = new DialtoneLocalization();\n\n const weekDays = computed(() => {\n return getWeekDayNames(props.locale, props.weekStartsOn);\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 i18n.$t('DIALTONE_DATEPICKER_SELECT_DAY') + ` ${formatDate(day.value, INTL_MONTH_FORMAT, i18n.currentLocale)}`;\n }\n\n function setDayRef (el, day) {\n if (!daysRef.value.some(day => day.el === el) && !day.disabled) {\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 {\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 {\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.disabled) { 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","<template>\n <table\n class=\"d-datepicker__calendar\"\n aria-labelledby=\"calendar-heading\"\n >\n <thead>\n <tr>\n <th\n v-for=\"day in weekDays\"\n :key=\"day\"\n scope=\"col\"\n class=\"d-datepicker__cell d-datepicker__cell--header\"\n >\n <span\n class=\"d-datepicker__weekday\"\n :title=\"day\"\n :aria-label=\"day\"\n > {{ day }}</span>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n v-for=\"(week, indexWeek) in calendarDays\"\n :key=\"indexWeek\"\n >\n <td\n v-for=\"(day, indexDays) in week.days\"\n :key=\"indexWeek + indexDays\"\n class=\"d-datepicker__cell\"\n role=\"listbox\"\n >\n <dt-button\n :ref=\"el => { if (el) setDayRef(el, day) }\"\n class=\"d-datepicker__day\"\n :circle=\"true\"\n size=\"sm\"\n importance=\"clear\"\n :disabled=\"day.disabled\"\n :class=\"{\n 'd-datepicker__day--disabled': day.disabled,\n 'd-datepicker__day--selected': selectedDay\n ? ((day.text === selectedDay) && !day.disabled)\n : day.selected,\n }\"\n type=\"button\"\n :aria-selected=\"!!selectedDay ? ((day.text === selectedDay) && !day.disabled) : day.selected\"\n :aria-label=\"dayAriaLabel(day)\"\n role=\"option\"\n @click=\"selectDay(day)\"\n @keydown=\"handleKeyDown($event)\"\n >\n {{ day.text }}\n </dt-button>\n </td>\n </tr>\n </tbody>\n </table>\n</template>\n\n<script setup>\nimport { useCalendar } from '../composables/useCalendar.js';\nimport { DtButton } from '@/components/button';\n\nconst props = defineProps({\n calendarDays: {\n type: Array,\n required: true,\n },\n\n weekStartsOn: {\n type: Number,\n default: 0,\n validator: (v) => Number.isInteger(v) && v >= 0 && v <= 6,\n },\n});\n\nconst emits = defineEmits([\n /**\n * Event fired when a date is selected\n *\n * @event select-date\n * @type {Date}\n */\n 'select-date',\n\n /**\n * Will focus the month and year picker\n *\n * @event focus-month-year-picker\n */\n 'focus-month-year-picker',\n\n /**\n * Will close the datepicker\n *\n * @event close-datepicker\n */\n 'close-datepicker',\n\n /**\n * Will go to the next month\n *\n * @event go-to-next-month\n */\n 'go-to-next-month',\n\n /**\n * Will go to the previous month\n *\n * @event go-to-prev-month\n */\n 'go-to-prev-month',\n]);\n\nconst {\n selectedDay,\n weekDays,\n dayAriaLabel,\n setDayRef,\n handleKeyDown,\n focusFirstDay,\n selectDay,\n} = useCalendar(props, emits);\n\ndefineExpose({\n focusFirstDay,\n});\n</script>\n","<!-- eslint-disable vue/multi-word-component-names -->\n<template>\n <dt-stack\n class=\"d-datepicker\"\n gap=\"400\"\n >\n <div class=\"d-datepicker__hd\">\n <month-year-picker\n ref=\"monthYearPicker\"\n :selected-date=\"selectedDate\"\n :min-date=\"minDate\"\n :max-date=\"maxDate\"\n :week-starts-on=\"weekStartsOn\"\n @calendar-days=\"updateCalendarDays\"\n @focus-first-day=\"$refs.calendar.focusFirstDay()\"\n @focus-last-day=\"$refs.calendar.focusLastDay()\"\n @close-datepicker=\"$emit('close-datepicker')\"\n />\n </div>\n <div class=\"d-datepicker__bd\">\n <calendar\n ref=\"calendar\"\n :calendar-days=\"calendarDays\"\n :week-starts-on=\"weekStartsOn\"\n @select-date=\"$emit('selected-date', $event)\"\n @focus-month-year-picker=\"$refs.monthYearPicker.focusMonthYearPicker()\"\n @close-datepicker=\"$emit('close-datepicker')\"\n @go-to-next-month=\"$refs.monthYearPicker.goToNextMonth()\"\n @go-to-prev-month=\"$refs.monthYearPicker.goToPrevMonth()\"\n />\n </div>\n </dt-stack>\n</template>\n\n<script setup>\nimport MonthYearPicker from './modules/month-year-picker.vue';\nimport Calendar from './modules/calendar.vue';\nimport { DtStack } from '@/components/stack';\nimport { returnFirstEl, warnIfUnmounted } from '@/common/utils';\nimport { onMounted, ref, getCurrentInstance } from 'vue';\n\ndefineProps({\n /**\n * Selected date\n *\n * @type {Date}\n */\n selectedDate: {\n type: Date,\n default: () => (new Date()),\n },\n\n /**\n * Minimum selectable date. Days before this date will be disabled.\n * Must be before or equal to maxDate when both are provided.\n *\n * @type {Date}\n */\n minDate: {\n type: Date,\n default: null,\n },\n\n /**\n * Maximum selectable date. Days after this date will be disabled.\n * Must be after or equal to minDate when both are provided.\n *\n * @type {Date}\n */\n maxDate: {\n type: Date,\n default: null,\n validator: (value, props) => {\n if (value && props.minDate && value < props.minDate) {\n console.warn('[DtDatepicker]: maxDate must be after or equal to minDate.');\n return false;\n }\n return true;\n },\n },\n\n /**\n * Day the week starts on. 0 = Sunday, 1 = Monday, ... 6 = Saturday.\n *\n * @values 0, 1, 2, 3, 4, 5, 6\n */\n weekStartsOn: {\n type: Number,\n default: 0,\n validator: (v) => Number.isInteger(v) && v >= 0 && v <= 6,\n },\n});\n\ndefineEmits([\n /**\n * Event fired when a date is selected\n *\n * @event selected-date\n * @type {Date}\n */\n 'selected-date',\n\n /**\n * Event fired when user presses the esc key\n *\n * @event close-datepicker\n */\n 'close-datepicker',\n]);\n\nconst calendarDays = ref([]);\n\nfunction updateCalendarDays (days) {\n calendarDays.value = days;\n}\n\nonMounted(() => {\n const instance = getCurrentInstance();\n warnIfUnmounted(returnFirstEl(instance.proxy.$el), 'datepicker');\n});\n</script>\n"],"mappings":"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"}