CalendarHeader.mjs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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. title: String,
  10. subtitle: String,
  11. showTitle: Boolean,
  12. showSubtitle: Boolean,
  13. firstDayOfWeek: Number
  14. },
  15. emits: ["click-subtitle"],
  16. setup(props, {
  17. slots,
  18. emit
  19. }) {
  20. const renderTitle = () => {
  21. if (props.showTitle) {
  22. const text = props.title || t("title");
  23. const title = slots.title ? slots.title() : text;
  24. return _createVNode("div", {
  25. "class": bem("header-title")
  26. }, [title]);
  27. }
  28. };
  29. const onClickSubtitle = (event) => emit("click-subtitle", event);
  30. const renderSubtitle = () => {
  31. if (props.showSubtitle) {
  32. const title = slots.subtitle ? slots.subtitle() : props.subtitle;
  33. return _createVNode("div", {
  34. "class": bem("header-subtitle"),
  35. "onClick": onClickSubtitle
  36. }, [title]);
  37. }
  38. };
  39. const renderWeekDays = () => {
  40. const {
  41. firstDayOfWeek
  42. } = props;
  43. const weekdays = t("weekdays");
  44. const renderWeekDays2 = [...weekdays.slice(firstDayOfWeek, 7), ...weekdays.slice(0, firstDayOfWeek)];
  45. return _createVNode("div", {
  46. "class": bem("weekdays")
  47. }, [renderWeekDays2.map((text) => _createVNode("span", {
  48. "class": bem("weekday")
  49. }, [text]))]);
  50. };
  51. return () => _createVNode("div", {
  52. "class": bem("header")
  53. }, [renderTitle(), renderSubtitle(), renderWeekDays()]);
  54. }
  55. });
  56. export {
  57. stdin_default as default
  58. };