@@ -12,6 +12,7 @@ const { monthNameLong } = useTranslation();
1212const route = useRoute ();
1313
1414const currentDatetime = ref <DateTime >(DateTime .now ());
15+ const isMonthView = computed (() => route .params .view === ' m' );
1516const monthTracker = ref (currentDatetime .value .month );
1617const yearTracker = ref (currentDatetime .value .year );
1718
@@ -60,6 +61,12 @@ watch(
6061 const viewStart = getCurrentViewDatetime (route .params );
6162 currentDatetime .value = viewStart ;
6263
64+ if (isMonthView .value ) {
65+ monthTracker .value = viewStart .month ;
66+ yearTracker .value = viewStart .year ;
67+ return ;
68+ }
69+
6370 const viewEnd = viewStart .plus ({
6471 days: getViewLengthInDays (route .params ),
6572 });
@@ -102,6 +109,11 @@ function changeMonthNum(up: boolean) {
102109function jumpToInterval(clickedDay : DateTime ) {
103110 if (route .params .view === ' w' ) {
104111 router .replace (getWeekAlignedRedirect (clickedDay ));
112+ } else if (isMonthView .value ) {
113+ router .replace ({
114+ name: ' calendar' ,
115+ params: { view: ' m' , year: clickedDay .year , month: clickedDay .month , day: clickedDay .day },
116+ });
105117 } else {
106118 router .replace ({ params: { year: clickedDay .year , month: clickedDay .month , day: clickedDay .day } });
107119 }
@@ -131,11 +143,15 @@ function getIntervalFromDay(day: DateTime) {
131143const hoverInterval = computed (() => {
132144 if (! hoveredDay .value ) return null ;
133145
146+ if (isMonthView .value ) {
147+ return { start: hoveredDay .value , end: hoveredDay .value };
148+ }
149+
134150 return getIntervalFromDay (hoveredDay .value );
135151});
136152
137153const pressedInterval = computed (() => {
138- if (! pressedDay .value ) return null ;
154+ if (isMonthView . value || ! pressedDay .value ) return null ;
139155
140156 return getIntervalFromDay (pressedDay .value );
141157});
@@ -172,10 +188,11 @@ const pressedInterval = computed(() => {
172188 class =" day"
173189 :class =" {
174190 today: d.hasSame(DateTime.now(), 'day'),
191+ 'selected-day': isMonthView && d.hasSame(currentDatetime, 'day'),
175192 'not-this-month': d.month !== monthTracker,
176- 'in-range': d >= viewInterval.start && d <= viewInterval.end,
177- 'range-start': d.hasSame(viewInterval.start, 'day'),
178- 'range-end': d.hasSame(viewInterval.end, 'day'),
193+ 'in-range': !isMonthView && d >= viewInterval.start && d <= viewInterval.end,
194+ 'range-start': !isMonthView && d.hasSame(viewInterval.start, 'day'),
195+ 'range-end': !isMonthView && d.hasSame(viewInterval.end, 'day'),
179196 'pressed-range': pressedInterval && d >= pressedInterval.start && d <= pressedInterval.end,
180197 }"
181198 @click =" jumpToInterval(d)"
@@ -270,7 +287,7 @@ const pressedInterval = computed(() => {
270287 text-decoration-thickness: 0.15rem;
271288 text-underline-offset: 0.2rem;*/
272289
273- &:not(.in-range) {
290+ &:not(.in-range):not(.selected-day) {
274291 color : var (--git-color );
275292 }
276293
@@ -306,6 +323,16 @@ const pressedInterval = computed(() => {
306323 }
307324 }
308325
326+ &.today.not-this-month :not (.selected-day ) {
327+ color : color-mix(in srgb , var (--git-color ) 45% , transparent );
328+ }
329+
330+ &.selected-day {
331+ border-radius : var (--small-border-radius );
332+ background-color : var (--git-bg-color );
333+ color : var (--text-color-hard );
334+ }
335+
309336 &.range-start {
310337 border-top-left-radius : var (--small-border-radius );
311338 border-bottom-left-radius : var (--small-border-radius );
0 commit comments