@dialpad/dialtone
Version:
Dialpad's Dialtone design system monorepo
139 lines (138 loc) • 4.57 kB
JavaScript
import { openBlock, createElementBlock, createElementVNode, Fragment, renderList, unref, toDisplayString, createVNode, normalizeClass, withCtx, createTextVNode } from "vue";
import { useCalendar } from "../composables/useCalendar.js";
import DtButton from "../../button/button.vue.js";
const _hoisted_1 = {
class: "d-datepicker__calendar",
"aria-labelledby": "calendar-heading"
};
const _hoisted_2 = ["title", "aria-label"];
const _sfc_main = {
__name: "calendar",
props: {
calendarDays: {
type: Array,
required: true
},
locale: {
type: String,
required: true
},
selectDayLabel: {
type: String,
required: true
}
},
emits: [
/**
* Event fired when a date is selected
*
* @event select-date
* @type {Date}
*/
"select-date",
/**
* Will focus the month and year picker
*
* @event focus-month-year-picker
*/
"focus-month-year-picker",
/**
* Will close the datepicker
*
* @event close-datepicker
*/
"close-datepicker",
/**
* Will go to the next month
*
* @event go-to-next-month
*/
"go-to-next-month",
/**
* Will go to the previous month
*
* @event go-to-prev-month
*/
"go-to-prev-month"
],
setup(__props, { expose: __expose, emit: __emit }) {
const props = __props;
const emits = __emit;
const {
selectedDay,
weekDays,
dayAriaLabel,
setDayRef,
handleKeyDown,
focusFirstDay,
selectDay
} = useCalendar(props, emits);
__expose({
focusFirstDay
});
return (_ctx, _cache) => {
return openBlock(), createElementBlock("table", _hoisted_1, [
createElementVNode("thead", null, [
createElementVNode("tr", null, [
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(weekDays), (day) => {
return openBlock(), createElementBlock("th", {
key: day,
scope: "col",
class: "d-datepicker__cell d-datepicker__cell--header"
}, [
createElementVNode("span", {
class: "d-datepicker__weekday",
title: day,
"aria-label": day
}, toDisplayString(day), 9, _hoisted_2)
]);
}), 128))
])
]),
createElementVNode("tbody", null, [
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.calendarDays, (week, indexWeek) => {
return openBlock(), createElementBlock("tr", { key: indexWeek }, [
(openBlock(true), createElementBlock(Fragment, null, renderList(week.days, (day, indexDays) => {
return openBlock(), createElementBlock("td", {
key: indexWeek + indexDays,
class: "d-datepicker__cell",
role: "listbox"
}, [
createVNode(unref(DtButton), {
ref_for: true,
ref: (el) => {
if (el) unref(setDayRef)(el, day);
},
class: normalizeClass(["d-datepicker__day", {
"d-datepicker__day--disabled": !day.currentMonth,
"d-datepicker__day--selected": unref(selectedDay) ? day.text === unref(selectedDay) && day.currentMonth : day.selected
}]),
circle: true,
size: "sm",
importance: "clear",
disabled: !day.currentMonth,
type: "button",
"aria-selected": !!unref(selectedDay) ? day.text === unref(selectedDay) && day.currentMonth : day.selected,
"aria-label": unref(dayAriaLabel)(day),
role: "option",
onClick: ($event) => unref(selectDay)(day),
onKeydown: _cache[0] || (_cache[0] = ($event) => unref(handleKeyDown)($event))
}, {
default: withCtx(() => [
createTextVNode(toDisplayString(day.text), 1)
]),
_: 2
}, 1032, ["disabled", "class", "aria-selected", "aria-label", "onClick"])
]);
}), 128))
]);
}), 128))
])
]);
};
}
};
export {
_sfc_main as default
};
//# sourceMappingURL=calendar.vue.js.map