CalendarHeader.mjs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { createVNode as _createVNode } from "vue";
  2. import { defineComponent } from "vue";
  3. import { createNamespace } from "../utils/index.mjs";
  4. import { t, bem } from "./utils.mjs";
  5. const [name] = createNamespace("calendar-header");
  6. var stdin_default = defineComponent({
  7. name,
  8. props: {
  9. date: Date,
  10. title: String,
  11. subtitle: String,
  12. showTitle: Boolean,
  13. showSubtitle: Boolean,
  14. firstDayOfWeek: Number
  15. },
  16. emits: ["clickSubtitle"],
  17. setup(props, {
  18. slots,
  19. emit
  20. }) {
  21. const renderTitle = () => {
  22. if (props.showTitle) {
  23. const text = props.title || t("title");
  24. const title = slots.title ? slots.title() : text;
  25. return _createVNode("div", {
  26. "class": bem("header-title")
  27. }, [title]);
  28. }
  29. };
  30. const onClickSubtitle = (event) => emit("clickSubtitle", event);
  31. const renderSubtitle = () => {
  32. if (props.showSubtitle) {
  33. const title = slots.subtitle ? slots.subtitle({
  34. date: props.date,
  35. text: props.subtitle
  36. }) : props.subtitle;
  37. return _createVNode("div", {
  38. "class": bem("header-subtitle"),
  39. "onClick": onClickSubtitle
  40. }, [title]);
  41. }
  42. };
  43. const renderWeekDays = () => {
  44. const {
  45. firstDayOfWeek
  46. } = props;
  47. const weekdays = t("weekdays");
  48. const renderWeekDays2 = [...weekdays.slice(firstDayOfWeek, 7), ...weekdays.slice(0, firstDayOfWeek)];
  49. return _createVNode("div", {
  50. "class": bem("weekdays")
  51. }, [renderWeekDays2.map((text) => _createVNode("span", {
  52. "class": bem("weekday")
  53. }, [text]))]);
  54. };
  55. return () => _createVNode("div", {
  56. "class": bem("header")
  57. }, [renderTitle(), renderSubtitle(), renderWeekDays()]);
  58. }
  59. });
  60. export {
  61. stdin_default as default
  62. };