From 9c6b91c5629c302eb88f3769ddac939446e92868 Mon Sep 17 00:00:00 2001
From: eggy <eggyrules@gmail.com>
Date: Thu, 21 Jul 2022 22:03:35 -0400
Subject: [PATCH] feat: add dark mode

---
 app.vue                      |  34 +++++++--
 assets/images/moon.svg       |   3 +
 assets/images/sun.svg        |   7 ++
 components/ColourPicker.vue  | 112 ++++++++++++++++++++++++++++++
 components/Navbar.vue        |  38 ++++++++++
 data/projects.ts             |   1 +
 layouts/base.vue             |  21 ++++++
 layouts/default.vue          |  39 ++++++++++-
 nuxt.config.ts               |  23 +++++-
 package.json                 |   4 +-
 pages/blog.vue               |   0
 pages/index.vue              |   2 +
 pages/stories.vue            |   0
 public/favicon.ico           | Bin 0 -> 2238 bytes
 public/robots.txt            |   3 +
 server/routes/sitemap.xml.ts |  11 ---
 tailwind.config.ts           |   1 +
 yarn.lock                    | 131 ++++++++++++++++++++++++++++++-----
 18 files changed, 394 insertions(+), 36 deletions(-)
 create mode 100644 assets/images/moon.svg
 create mode 100644 assets/images/sun.svg
 create mode 100644 components/ColourPicker.vue
 create mode 100644 components/Navbar.vue
 create mode 100644 data/projects.ts
 create mode 100644 layouts/base.vue
 create mode 100644 pages/blog.vue
 create mode 100644 pages/stories.vue
 create mode 100644 public/favicon.ico
 create mode 100644 public/robots.txt
 delete mode 100644 server/routes/sitemap.xml.ts

diff --git a/app.vue b/app.vue
index 8e7f33e..7b70722 100644
--- a/app.vue
+++ b/app.vue
@@ -1,7 +1,31 @@
 <template>
-  <div>
-    <NuxtLayout>
-      <NuxtPage />
-    </NuxtLayout>
-  </div>
+  <NuxtLayout>
+    <NuxtPage />
+  </NuxtLayout>
 </template>
+
+<style>
+* {
+  box-sizing: border-box;
+  /* for that cool wave dark mode effect */
+  z-index: 1;
+  position: relative;
+}
+
+html,
+body,
+div#__nuxt {
+  height: 100%;
+  width: 100%;
+}
+
+:root {
+  --text-color: #243746;
+  --bg: #f1e7d0;
+}
+
+.dark {
+  --text-color: #ebf4f1;
+  --bg: #091a28;
+}
+</style>
diff --git a/assets/images/moon.svg b/assets/images/moon.svg
new file mode 100644
index 0000000..8cab6ac
--- /dev/null
+++ b/assets/images/moon.svg
@@ -0,0 +1,3 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12 11.807C10.7418 10.5483 9.88488 8.94484 9.53762 7.1993C9.19037 5.45375 9.36832 3.64444 10.049 2C8.10826 2.38205 6.3256 3.33431 4.92899 4.735C1.02399 8.64 1.02399 14.972 4.92899 18.877C8.83499 22.783 15.166 22.782 19.072 18.877C20.4723 17.4805 21.4245 15.6983 21.807 13.758C20.1625 14.4385 18.3533 14.6164 16.6077 14.2692C14.8622 13.9219 13.2588 13.0651 12 11.807V11.807Z" />
+</svg>
diff --git a/assets/images/sun.svg b/assets/images/sun.svg
new file mode 100644
index 0000000..4c29540
--- /dev/null
+++ b/assets/images/sun.svg
@@ -0,0 +1,7 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6.995 12C6.995 14.761 9.241 17.007 12.002 17.007C14.763 17.007 17.009 14.761 17.009 12C17.009 9.239 14.763 6.993 12.002 6.993C9.241 6.993 6.995 9.239 6.995 12ZM11 19H13V22H11V19ZM11 2H13V5H11V2ZM2 11H5V13H2V11ZM19 11H22V13H19V11Z" />
+<path d="M5.63702 19.778L4.22302 18.364L6.34402 16.243L7.75802 17.657L5.63702 19.778Z" />
+<path d="M16.242 6.34405L18.364 4.22205L19.778 5.63605L17.656 7.75805L16.242 6.34405Z" />
+<path d="M6.34402 7.75902L4.22302 5.63702L5.63802 4.22302L7.75802 6.34502L6.34402 7.75902Z" />
+<path d="M19.778 18.3639L18.364 19.7779L16.242 17.6559L17.656 16.2419L19.778 18.3639Z" />
+</svg>
diff --git a/components/ColourPicker.vue b/components/ColourPicker.vue
new file mode 100644
index 0000000..e6c65b4
--- /dev/null
+++ b/components/ColourPicker.vue
@@ -0,0 +1,112 @@
+<script setup lang="ts">
+import { type Ref, ref } from "vue";
+import IconSun from "@/assets/images/sun.svg?component";
+import IconMoon from "../assets/images/moon.svg?component";
+
+const colorMode = useColorMode();
+
+const isToggled = ref(colorMode.value === "dark");
+
+const toggle = () => {
+  isToggled.value = !isToggled.value;
+  colorMode.preference = isToggled.value ? "dark" : "light";
+};
+
+/*
+// it unchecks on refresh and i can't make it automatically
+// check itself
+
+const darkToggleEl: Ref<HTMLInputElement> = ref(null);
+
+onMounted(() => {
+  if (isToggled.value) {
+    darkToggleEl.value.checked = true;
+  }
+});
+*/
+</script>
+
+<template>
+  <label for="toggle" :class="['toggle-wrapper']">
+    <div :class="['toggle', isToggled ? 'enabled' : 'disabled']">
+      <div class="icons">
+        <IconMoon />
+        <IconSun />
+      </div>
+      <input
+        id="toggle"
+        name="toggle"
+        type="checkbox"
+        :checked="isToggled"
+        ref="darkToggleEl"
+        @click="toggle"
+      />
+    </div>
+  </label>
+</template>
+
+<style scoped>
+.toggle-wrapper {
+  width: 6rem;
+  display: block;
+  --black: #333333;
+  --white: #f5f5f5;
+  --scale: 2rem;
+  --transition: 0.2s ease;
+  --bg: var(--white);
+  --fg: var(--black);
+}
+
+html.dark .toggle-wrapper {
+  --black: #f5f5f5;
+  --white: #333333;
+}
+
+.toggle {
+  height: var(--scale);
+  width: calc(var(--scale) * 2);
+  background: var(--fg);
+  border-radius: var(--scale);
+  padding: calc(var(--scale) * 0.175);
+  position: relative;
+  margin: auto;
+  cursor: pointer;
+  transition: background var(--transition);
+}
+
+.toggle::before {
+  content: "";
+  display: block;
+  height: calc(var(--scale) * 0.65);
+  width: calc(var(--scale) * 0.65);
+  border-radius: 50%;
+  background: var(--bg);
+  position: absolute;
+  z-index: 2;
+  transform: translate(0);
+  transition: transform var(--transition), background var(--transition);
+}
+
+.toggle.enabled::before {
+  transform: translateX(calc(var(--scale)));
+}
+
+.toggle input {
+  position: absolute;
+  top: 0;
+  opacity: 0;
+}
+
+.toggle .icons {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  height: 100%;
+}
+
+.toggle .icons svg {
+  transform: scale(0.7);
+  z-index: 0;
+  fill: var(--bg);
+}
+</style>
diff --git a/components/Navbar.vue b/components/Navbar.vue
new file mode 100644
index 0000000..d5121b3
--- /dev/null
+++ b/components/Navbar.vue
@@ -0,0 +1,38 @@
+<script setup lang="ts">
+import ColourPicker from "./ColourPicker.vue";
+</script>
+<template>
+  <nav class="flex items-center justify-between">
+    <ul>
+      <li class="home-text"><a href="/">Eggworld</a></li>
+      <li><a href="/about">About</a></li>
+      <li><a href="/blog">Blog</a></li>
+      <li><a href="/stories">Stories</a></li>
+    </ul>
+    <ColourPicker />
+  </nav>
+</template>
+
+<style scoped>
+nav {
+  height: 5rem;
+  width: 100%;
+  border: 1px solid red;
+  padding: 1rem;
+}
+
+ul {
+  width: 100%;
+  display: flex;
+  align-items: center;
+  gap: 3rem;
+}
+
+li {
+  font-size: large;
+}
+li.home-text {
+  font-size: x-large;
+  font-weight: bold;
+}
+</style>
diff --git a/data/projects.ts b/data/projects.ts
new file mode 100644
index 0000000..ff8b4c5
--- /dev/null
+++ b/data/projects.ts
@@ -0,0 +1 @@
+export default {};
diff --git a/layouts/base.vue b/layouts/base.vue
new file mode 100644
index 0000000..4304644
--- /dev/null
+++ b/layouts/base.vue
@@ -0,0 +1,21 @@
+<template>
+  <div class="container">
+    <slot />
+  </div>
+</template>
+
+<style scoped>
+.container {
+  display: flex;
+  flex-direction: column;
+  margin-left: 10%;
+  margin-right: 10%;
+  height: 100%;
+  width: 100%;
+}
+
+.dark-mode body {
+  background-color: #091a28;
+  color: #ebf4f1;
+}
+</style>
diff --git a/layouts/default.vue b/layouts/default.vue
index a971c34..5bc57d4 100644
--- a/layouts/default.vue
+++ b/layouts/default.vue
@@ -1,6 +1,41 @@
+<script setup lang="ts">
+import Default from "./base.vue";
+import Navbar from "../components/Navbar.vue";
+</script>
+
 <template>
   <div>
-    DEFAULT TEMPLATE LAYOUT
-    <slot />
+    <Navbar />
+    <Default>
+      <slot />
+    </Default>
   </div>
 </template>
+
+<style>
+html {
+  background: white;
+  color: black;
+  transition: color 0.2s ease, background 0.2s ease;
+}
+
+html.dark {
+  background: #222;
+  color: white;
+}
+
+html::before {
+  content: "";
+  position: fixed;
+  height: 100%;
+  width: 100%;
+  background: #222;
+  transform: translateX(-100%);
+  transition: transform 0.2s ease;
+  z-index: 0;
+}
+
+html.dark::before {
+  transform: translateX(0);
+}
+</style>
diff --git a/nuxt.config.ts b/nuxt.config.ts
index a37738d..e8d81d5 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -1,8 +1,14 @@
 import { defineNuxtConfig } from "nuxt";
+import svgLoader from "vite-svg-loader";
 
 // https://v3.nuxtjs.org/api/configuration/nuxt.config
 export default defineNuxtConfig({
-  modules: ["@nuxt/content", "@nuxtjs/tailwindcss"],
+  modules: [
+    "@nuxt/content",
+    "@nuxtjs/color-mode",
+    "@nuxtjs/tailwindcss",
+    "@nuxtjs/sitemap",
+  ],
   nitro: {
     prerender: {
       routes: ["/sitemap.xml"],
@@ -11,5 +17,20 @@ export default defineNuxtConfig({
   typescript: {
     shim: false,
   },
+  sitemap: {
+    hostname: process.env.BASE_URL || "https://eggworld.tk",
+  },
   tailwindcss: {},
+  colorMode: {
+    classSuffix: "",
+  },
+  vite: {
+    plugins: [svgLoader()],
+  },
+  head: {
+    meta: [
+      { name: "viewport", content: " width=device-width,initial-scale=1" },
+    ],
+    link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.ico" }],
+  },
 });
diff --git a/package.json b/package.json
index 61f9a4e..8527956 100644
--- a/package.json
+++ b/package.json
@@ -8,8 +8,10 @@
   },
   "devDependencies": {
     "@nuxt/content": "^2.0.1",
+    "@nuxtjs/color-mode": "^3.1.4",
+    "@nuxtjs/sitemap": "^2.4.0",
     "@nuxtjs/tailwindcss": "^5.3.0",
     "nuxt": "3.0.0-rc.6",
-    "sitemap": "^7.1.1"
+    "vite-svg-loader": "^3.4.0"
   }
 }
diff --git a/pages/blog.vue b/pages/blog.vue
new file mode 100644
index 0000000..e69de29
diff --git a/pages/index.vue b/pages/index.vue
index 2d61764..755f6ee 100644
--- a/pages/index.vue
+++ b/pages/index.vue
@@ -1 +1,3 @@
+<script setup lang="ts"></script>
+
 <template>HELLO</template>
diff --git a/pages/stories.vue b/pages/stories.vue
new file mode 100644
index 0000000..e69de29
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..d6bd4b988f598ee4c14a77f2db3f6b74979bd667
GIT binary patch
literal 2238
zcmeHI2UlBV7=F-du_`!Q>2+YVwp!ad;$Efh8F99Ck80g@uhzOctfEzHAp{b#NCYWb
zwI>jgNRtLK$smMKC}k7@g#Za5Aqn{2sE5$<3q1XDzAyJa&-*^_`p&sP3jH!OL1!wI
zslaRi3uqIBrL<W*v1a`9mpD`Cq&+b)fr;@r{C+>2O)XHHT=-e<z)ph`)n+$bzE%tl
z4k8c;KxcMAsBxpPwj0Hc0Hh6J+N1P5OxOX4G%nOw+z1APIPgagWNHfv&3!0oibL5v
z4n<Q8g>}7<6W-I?hwh#p2rI3SxI$3+;wbS(k*DuKN#htK&H%*DAVexNdi(yw$Vd?K
zDifsc5H^+9VarZC@c}5+CX9wc*lls5z}QVX<0!KH1-T~znJ0__Lnn-OH-?6WP^7X_
zj2O1p?8nwBFU0l3*j!<ToZ^ZqEeKMLjz%B&`gY`MTaa()0-rQ<cDcZ>*#}Q^3x3mE
zQA~a^s$D@ji|l>~t^E+%22o|SBNmN9QEjH!5lARkiF*_>sz*V2m1@k0$76_uM<J=Q
zK=i8~yNoXUVsN1JcL(G;C&bjlB5fn`w0jX9i;!&?615cq>RYwJMEYYGq5gJsbYR;K
z9pt1fQ<H8i3MIvrQe2^R0BWNRcDEM-Lp#c}W{gu@)gBw=J4kbgL#i^8PJre*42h}^
zn!0*;d{i^lDWsW|R-4e?*+sqYLxt9aeBEC7TH9#00g4%gK-Y|7Z3Bv_ewk+s;z|=j
zp%IuI9`JX!!RBs4m~t1|{3s{?F{-7%e*hA)6WNF0r#sa@Fn}`ZNx_~jno|eLbrzUi
zUPv|d5a`<=q&W&mOHS{$1|K4k2wL}dqSoPshVEvq(~EuWT}hYv@Z<lv1Gztz&)iY*
z)5X)*m?x8$WT&Mmls}Y~O=BS{7Uys|48!5Bkw}Gy7zhfBxXizco4@d2gS?Gv$@jm-
z$>$eLRrvm9)_dK`3?7d);%?hMh5u?<4xzjyUw^Y|Yr^2$?{bq3KKq>9c^fuvnzi|h
z4Xgoo%a_Ughilg{O!`Ob3H$hyhghk%KTYD_c=Ih5dM5$B`yQLh^7lWOG+6yY78U;D
zOGtTn^((Kwwubl>uRlM@KlV7wXFu`eQ%^th?5gMHvHYAQ{(%SCn9My7FJF<Bv67W%
z(jR$r(jRx-o#4rlcW*Y^DBgYdC(*cxZ4dXBTe%G9w%b{M?j3g~^H*PUEn(MPKbK){
zSjtLeExR$9$0e7N>t%~c`tn6rkm;3IO`&nY!ucHL!bNQ6i<dB*w2KbDBxhxw%{k{>
zmOpPEXa0ior@GVI>^Y}pP<V!!n{oOXXC6WWvyMIP__XvBPCV)4Q%;?RCg_MGXB>6(
T%+zD1XA@`&``JCbCOhyqM_3EQ

literal 0
HcmV?d00001

diff --git a/public/robots.txt b/public/robots.txt
new file mode 100644
index 0000000..18679ee
--- /dev/null
+++ b/public/robots.txt
@@ -0,0 +1,3 @@
+Sitemap: https://eggworld.tk/sitemap.xml
+User-agent: *
+Disallow:
\ No newline at end of file
diff --git a/server/routes/sitemap.xml.ts b/server/routes/sitemap.xml.ts
deleted file mode 100644
index 7d8467a..0000000
--- a/server/routes/sitemap.xml.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { SitemapStream, streamToPromise } from "sitemap";
-export default defineEventHandler(async (event) => {
-  // Fetch all documents
-  const docs = await serverQueryContent(event).find();
-  const sitemap = new SitemapStream({ hostname: "https://example.com" });
-  for (const doc of docs) {
-    sitemap.write({ url: doc._path, changefreq: "monthly" });
-  }
-  sitemap.end();
-  return streamToPromise(sitemap);
-});
diff --git a/tailwind.config.ts b/tailwind.config.ts
index 83317e0..90ce358 100644
--- a/tailwind.config.ts
+++ b/tailwind.config.ts
@@ -1,6 +1,7 @@
 import { Config } from "tailwindcss";
 
 export default <Config>{
+  darkMode: "class",
   theme: {
     extend: {},
   },
diff --git a/yarn.lock b/yarn.lock
index a2efdfe..cb0d59a 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -589,6 +589,30 @@
     vite-node "^0.18.1"
     vite-plugin-checker "^0.4.9"
 
+"@nuxtjs/color-mode@^3.1.4":
+  version "3.1.4"
+  resolved "https://registry.yarnpkg.com/@nuxtjs/color-mode/-/color-mode-3.1.4.tgz#7b54af2b3a21d07acac158ded8b2e8f45b4d4a24"
+  integrity sha512-3pxZNbZCFCzBgkyJLU/YvC2L2l1yRvITuD91zfJoIGm52PTx66y/Q1/UW8i9YFDVhJvvRd67s6eWvgaKQtTPlw==
+  dependencies:
+    "@nuxt/kit" "^3.0.0-rc.3"
+    lodash.template "^4.5.0"
+    pathe "^0.3.0"
+
+"@nuxtjs/sitemap@^2.4.0":
+  version "2.4.0"
+  resolved "https://registry.yarnpkg.com/@nuxtjs/sitemap/-/sitemap-2.4.0.tgz#6a9fa1c35e161f87375d59949d973568cec40614"
+  integrity sha512-TVgIYOtPp7KAfaUo76WRpGbO20j4D/xi/A7shFIGjARHs+FvfAWXNCtBT87dTwe/RoYzAsEKtijFFUTaSu5bUA==
+  dependencies:
+    async-cache "^1.1.0"
+    consola "^2.13.0"
+    etag "^1.8.1"
+    fresh "^0.5.2"
+    fs-extra "^8.1.0"
+    is-https "^2.0.2"
+    lodash.unionby "^4.8.0"
+    minimatch "^3.0.4"
+    sitemap "^4.1.1"
+
 "@nuxtjs/tailwindcss@^5.3.0":
   version "5.3.0"
   resolved "https://registry.yarnpkg.com/@nuxtjs/tailwindcss/-/tailwindcss-5.3.0.tgz#7bd85d46909d151902e7267e6c1653e3cf6eb567"
@@ -752,10 +776,10 @@
   resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7"
   integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==
 
-"@types/node@^17.0.5":
-  version "17.0.45"
-  resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190"
-  integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==
+"@types/node@^12.0.2":
+  version "12.20.55"
+  resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240"
+  integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==
 
 "@types/parse-json@^4.0.0":
   version "4.0.0"
@@ -774,7 +798,7 @@
   dependencies:
     "@types/node" "*"
 
-"@types/sax@^1.2.1":
+"@types/sax@^1.2.0":
   version "1.2.4"
   resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e"
   integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==
@@ -869,7 +893,7 @@
     "@vue/compiler-core" "3.2.37"
     "@vue/shared" "3.2.37"
 
-"@vue/compiler-sfc@3.2.37":
+"@vue/compiler-sfc@3.2.37", "@vue/compiler-sfc@^3.2.20":
   version "3.2.37"
   resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz#3103af3da2f40286edcd85ea495dcb35bc7f5ff4"
   integrity sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==
@@ -1101,7 +1125,12 @@ are-we-there-yet@^2.0.0:
     delegates "^1.0.0"
     readable-stream "^3.6.0"
 
-arg@^5.0.0, arg@^5.0.2:
+arg@^4.1.1:
+  version "4.1.3"
+  resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+  integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+arg@^5.0.2:
   version "5.0.2"
   resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
   integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
@@ -1116,6 +1145,13 @@ astral-regex@^2.0.0:
   resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
   integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
 
+async-cache@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/async-cache/-/async-cache-1.1.0.tgz#4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a"
+  integrity sha512-YDQc4vBn5NFhY6g6HhVshyi3Fy9+SQ5ePnE7JLDJn1DoL+i7ER+vMwtTNOYk9leZkYMnOwpBCWqyLDPw8Aig8g==
+  dependencies:
+    lru-cache "^4.0.0"
+
 async@^2.6.2:
   version "2.6.4"
   resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221"
@@ -1541,7 +1577,7 @@ concat-map@0.0.1:
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
   integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
 
-consola@^2.15.3:
+consola@^2.13.0, consola@^2.15.3:
   version "2.15.3"
   resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550"
   integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==
@@ -2319,7 +2355,7 @@ fraction.js@^4.2.0:
   resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950"
   integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==
 
-fresh@0.5.2, fresh@~0.5.2:
+fresh@0.5.2, fresh@^0.5.2, fresh@~0.5.2:
   version "0.5.2"
   resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
   integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
@@ -2338,6 +2374,15 @@ fs-extra@^10.1.0:
     jsonfile "^6.0.1"
     universalify "^2.0.0"
 
+fs-extra@^8.1.0:
+  version "8.1.0"
+  resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
+  integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
+  dependencies:
+    graceful-fs "^4.2.0"
+    jsonfile "^4.0.0"
+    universalify "^0.1.0"
+
 fs-extra@^9.0.1:
   version "9.1.0"
   resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
@@ -2934,6 +2979,11 @@ is-hexadecimal@^2.0.0:
   resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz#86b5bf668fca307498d319dfc03289d781a90027"
   integrity sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==
 
+is-https@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/is-https/-/is-https-2.0.2.tgz#7009d303c72580f15897d5c063d6b6bc1f838fef"
+  integrity sha512-UfUCKVQH/6PQRCh5Qk9vNu4feLZiFmV/gr8DjbtJD0IrCRIDTA6E+d/AVFGPulI5tqK5W45fYbn1Nir1O99rFw==
+
 is-interactive@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
@@ -3066,6 +3116,13 @@ jsonc-parser@^3.0.0:
   resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.1.0.tgz#73b8f0e5c940b83d03476bc2e51a20ef0932615d"
   integrity sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==
 
+jsonfile@^4.0.0:
+  version "4.0.0"
+  resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
+  integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
+  optionalDependencies:
+    graceful-fs "^4.1.6"
+
 jsonfile@^6.0.1:
   version "6.1.0"
   resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
@@ -3275,6 +3332,11 @@ lodash.union@^4.6.0:
   resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88"
   integrity sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==
 
+lodash.unionby@^4.8.0:
+  version "4.8.0"
+  resolved "https://registry.yarnpkg.com/lodash.unionby/-/lodash.unionby-4.8.0.tgz#883f098ff78f564a727b7508e09cdd539734bb83"
+  integrity sha512-e60kn4GJIunNkw6v9MxRnUuLYI/Tyuanch7ozoCtk/1irJTYBj+qNTxr5B3qVflmJhwStJBv387Cb+9VOfABMg==
+
 lodash.uniq@^4.5.0:
   version "4.5.0"
   resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
@@ -3298,6 +3360,14 @@ longest-streak@^3.0.0:
   resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-3.0.1.tgz#c97315b7afa0e7d9525db9a5a2953651432bdc5d"
   integrity sha512-cHlYSUpL2s7Fb3394mYxwTYj8niTaNHUCLr0qdiCXQfSjfuA7CKofpX2uSwEfFDQ0EB7JcnMnm+GjbqqoinYYg==
 
+lru-cache@^4.0.0:
+  version "4.1.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
+  integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
+  dependencies:
+    pseudomap "^1.0.2"
+    yallist "^2.1.2"
+
 lru-cache@^6.0.0:
   version "6.0.0"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -4744,6 +4814,11 @@ prr@~1.0.1:
   resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
   integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==
 
+pseudomap@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
+  integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
+
 punycode@^2.1.0:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
@@ -5230,15 +5305,16 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
   resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
   integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
 
-sitemap@^7.1.1:
-  version "7.1.1"
-  resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef"
-  integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==
+sitemap@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-4.1.1.tgz#c9b459c7d797e629c61f56b86586d4f67dbf250b"
+  integrity sha512-+8yd66IxyIFEMFkFpVoPuoPwBvdiL7Ap/HS5YD7igqO4phkyTPFIprCAE9NMHehAY5ZGN3MkAze4lDrOAX3sVQ==
   dependencies:
-    "@types/node" "^17.0.5"
-    "@types/sax" "^1.2.1"
-    arg "^5.0.0"
+    "@types/node" "^12.0.2"
+    "@types/sax" "^1.2.0"
+    arg "^4.1.1"
     sax "^1.2.4"
+    xmlbuilder "^13.0.0"
 
 slash@^3.0.0:
   version "3.0.0"
@@ -5758,6 +5834,11 @@ unist-util-visit@^4.0.0, unist-util-visit@^4.1.0:
     unist-util-is "^5.0.0"
     unist-util-visit-parents "^5.0.0"
 
+universalify@^0.1.0:
+  version "0.1.2"
+  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
+  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
+
 universalify@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
@@ -5917,6 +5998,14 @@ vite-plugin-checker@^0.4.9:
     vscode-languageserver-textdocument "^1.0.1"
     vscode-uri "^3.0.2"
 
+vite-svg-loader@^3.4.0:
+  version "3.4.0"
+  resolved "https://registry.yarnpkg.com/vite-svg-loader/-/vite-svg-loader-3.4.0.tgz#4638827fe86b85ecfcea1ad61dd972c351d5befd"
+  integrity sha512-xD3yb1FX+f4l9/TmsYIqyki8ncpcVsZ2gEJFh/wLuNNqt55C8OJ+JlcMWOA/Z9gRA+ylV/TA1wmJLxzZkCRqlA==
+  dependencies:
+    "@vue/compiler-sfc" "^3.2.20"
+    svgo "^2.7.0"
+
 "vite@^2.9.12 || ^3.0.0-0":
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.2.tgz#2a7b4642c53ae066cf724e7e581d6c1fd24e2c32"
@@ -6083,6 +6172,11 @@ ws@^8.6.0, ws@^8.7.0, ws@^8.8.0:
   resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
   integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
 
+xmlbuilder@^13.0.0:
+  version "13.0.2"
+  resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-13.0.2.tgz#02ae33614b6a047d1c32b5389c1fdacb2bce47a7"
+  integrity sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==
+
 xtend@^4.0.2:
   version "4.0.2"
   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
@@ -6100,6 +6194,11 @@ y18n@^5.0.5:
   resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
   integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
 
+yallist@^2.1.2:
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
+  integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
+
 yallist@^3.0.0, yallist@^3.1.1:
   version "3.1.1"
   resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"