diff --git a/package-lock.json b/package-lock.json
index b29eefc..0a58998 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -13,6 +13,7 @@
"@astrojs/tailwind": "^2.1.3",
"@astrojs/vue": "^1.2.2",
"@fortawesome/fontawesome-free": "^6.2.1",
+ "@vuepic/vue-datepicker": "^3.6.4",
"astro": "^1.8.0",
"daisyui": "^2.46.0",
"debounce": "^1.2.1",
@@ -1171,6 +1172,21 @@
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
+ "node_modules/@vuepic/vue-datepicker": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-3.6.4.tgz",
+ "integrity": "sha512-A13K+UNf29H2kQK4RYbFwqgkAFnWxArqW3AD3inhtIDmhI5n3QsUIvSTWJBszYcuhx2k2f2mD6dEPncOtsZi3A==",
+ "dependencies": {
+ "date-fns": "^2.29.3",
+ "date-fns-tz": "^1.3.7"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "peerDependencies": {
+ "vue": ">=3.2.0"
+ }
+ },
"node_modules/acorn": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
@@ -1949,6 +1965,26 @@
"node": ">= 12"
}
},
+ "node_modules/date-fns": {
+ "version": "2.29.3",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
+ "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==",
+ "engines": {
+ "node": ">=0.11"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/date-fns"
+ }
+ },
+ "node_modules/date-fns-tz": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.7.tgz",
+ "integrity": "sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g==",
+ "peerDependencies": {
+ "date-fns": ">=2.0.0"
+ }
+ },
"node_modules/debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -7508,6 +7544,15 @@
"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.45.tgz",
"integrity": "sha512-Ewzq5Yhimg7pSztDV+RH1UDKBzmtqieXQlpTVm2AwraoRL/Rks96mvd8Vgi7Lj+h+TH8dv7mXD3FRZR3TUvbSg=="
},
+ "@vuepic/vue-datepicker": {
+ "version": "3.6.4",
+ "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-3.6.4.tgz",
+ "integrity": "sha512-A13K+UNf29H2kQK4RYbFwqgkAFnWxArqW3AD3inhtIDmhI5n3QsUIvSTWJBszYcuhx2k2f2mD6dEPncOtsZi3A==",
+ "requires": {
+ "date-fns": "^2.29.3",
+ "date-fns-tz": "^1.3.7"
+ }
+ },
"acorn": {
"version": "8.8.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
@@ -8032,6 +8077,17 @@
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz",
"integrity": "sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA=="
},
+ "date-fns": {
+ "version": "2.29.3",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz",
+ "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA=="
+ },
+ "date-fns-tz": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.7.tgz",
+ "integrity": "sha512-1t1b8zyJo+UI8aR+g3iqr5fkUHWpd58VBx8J/ZSQ+w7YrGlw80Ag4sA86qkfCXRBLmMc4I2US+aPMd4uKvwj5g==",
+ "requires": {}
+ },
"debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
diff --git a/package.json b/package.json
index c3a973b..84ed544 100644
--- a/package.json
+++ b/package.json
@@ -23,6 +23,7 @@
"@astrojs/tailwind": "^2.1.3",
"@astrojs/vue": "^1.2.2",
"@fortawesome/fontawesome-free": "^6.2.1",
+ "@vuepic/vue-datepicker": "^3.6.4",
"astro": "^1.8.0",
"daisyui": "^2.46.0",
"debounce": "^1.2.1",
diff --git a/src/components/vue/SnapshotCalendar.vue b/src/components/vue/SnapshotCalendar.vue
index 574d3fb..8dadc35 100644
--- a/src/components/vue/SnapshotCalendar.vue
+++ b/src/components/vue/SnapshotCalendar.vue
@@ -1,3 +1,140 @@
+
+
- TODO: implement snapshot calendar.
+
+
+
+
diff --git a/src/models/update-month-year-payload.ts b/src/models/update-month-year-payload.ts
new file mode 100644
index 0000000..7a646da
--- /dev/null
+++ b/src/models/update-month-year-payload.ts
@@ -0,0 +1,4 @@
+export interface UpdateMonthYearPayload {
+ month: number;
+ year: number;
+}