-
Notifications
You must be signed in to change notification settings - Fork 3
/
Day.svelte
100 lines (83 loc) · 2.14 KB
/
Day.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<script lang="ts">
import { createEventDispatcher } from 'svelte';
import { getDoy } from '../../../utilities/time';
export let date: Date;
export let maxDate: Date;
export let minDate: Date;
export let month: number;
export let selectedDate: Date | null = null;
const dispatch = createEventDispatcher();
let isSelected: boolean = false;
let isOutsideBounds: boolean = false;
let isToday: boolean = false;
$: isToday = isSameDay(date, new Date());
$: isSelected = isSameDay(date, selectedDate);
$: isOutsideBounds = minDate.getTime() > date.getTime() || date.getTime() > maxDate.getTime();
$: isOutsideCurrentMonth = month !== date.getUTCMonth();
function isSameDay(date1: Date, date2: Date) {
if (date1 && date2) {
return (
date1.getUTCDate() === date2.getUTCDate() &&
date1.getUTCMonth() === date2.getUTCMonth() &&
date1.getUTCFullYear() === date2.getUTCFullYear()
);
}
return false;
}
function onSelect() {
if (!isOutsideBounds) {
dispatch('select', date);
}
}
</script>
<!-- svelte-ignore a11y-click-events-have-key-events -->
<div
class="date-picker-day"
class:isOutsideBounds
class:isOutsideCurrentMonth
class:isSelected
class:isToday
on:click|stopPropagation={onSelect}
>
<div class="doy">{getDoy(date)}</div>
<div class="date">{date.getUTCDate()}</div>
</div>
<style>
.date-picker-day {
border-radius: 5px;
cursor: pointer;
font-weight: 400;
padding: 2px 0;
position: relative;
text-align: center;
}
.date-picker-day:hover {
background-color: var(--st-primary-10);
}
.date-picker-day .doy {
color: var(--st-gray-90);
}
.date-picker-day .date {
color: var(--st-gray-50);
font-weight: 500;
}
.date-picker-day.isSelected {
background-color: var(--st-primary-50);
}
.date-picker-day.isSelected .doy {
color: var(--st-gray-10);
}
.date-picker-day.isSelected .date {
color: var(--st-gray-30);
}
.isToday {
background-color: var(--st-gray-20);
}
.isOutsideCurrentMonth {
opacity: 0.4;
}
.isOutsideBounds {
cursor: not-allowed;
opacity: 0.3;
}
</style>