diff --git a/.gitignore b/.gitignore
index 73ba48def..5106ffb2d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,8 @@
# production
/build
/data
-/bin
\ No newline at end of file
+/bin
+
+# docs
+/docs/.vitepress/dist
+/docs/.vitepress/cache
\ No newline at end of file
diff --git a/docs/.vitepress/config/de.mjs b/docs/.vitepress/config/de.mjs
new file mode 100644
index 000000000..49de45b3f
--- /dev/null
+++ b/docs/.vitepress/config/de.mjs
@@ -0,0 +1,32 @@
+import { defineConfig } from 'vitepress'
+
+export const de = defineConfig({
+ lang: "de",
+ description: "MySpeed ist eine selbstgehostete Speedtest-Analyse-Software, die die Geschwindigkeit Ihres Internets bis zu 30 Tage lang speichert.",
+ themeConfig: {
+ nav: [
+ { text: 'Häufig gestellte Fragen', link: 'de/faq' },
+ {
+ text: 'Einrichtung',
+ items: [
+ { text: 'Linux', link: 'de/setup/linux' },
+ { text: 'Windows', link: 'de/setup/windows' }
+ ]
+ },
+ {
+ text: 'Anleitungen',
+ items: [
+ { text: 'Einrichten eines Reverse Proxys', link: 'de/guides/reverse-proxy' }
+ ]
+ },
+ { text: 'Fehlerbehebung', link: 'de/troubleshooting' },
+ {
+ text: 'Anweisungen',
+ items: [
+ { text: 'Die Benutzeroberfläche', link: 'de/instructions/main' },
+ { text: 'Einstellungen', link: 'de/instructions/settings' }
+ ]
+ }
+ ]
+ },
+})
diff --git a/docs/.vitepress/config/en.mjs b/docs/.vitepress/config/en.mjs
new file mode 100644
index 000000000..80242a484
--- /dev/null
+++ b/docs/.vitepress/config/en.mjs
@@ -0,0 +1,32 @@
+import { defineConfig } from 'vitepress'
+
+export const en = defineConfig({
+ lang: "en-US",
+ description: "MySpeed is a self-hosted speedtest analysis software that stores the speed of your internet for up to 30 days.",
+ themeConfig: {
+ nav: [
+ { text: 'Frequently Asked Questions', link: 'faq' },
+ {
+ text: 'Setup',
+ items: [
+ { text: 'Linux', link: 'setup/linux' },
+ { text: 'Windows', link: 'setup/windows' }
+ ]
+ },
+ {
+ text: 'Guides',
+ items: [
+ { text: 'Configuring a Reverse Proxy', link: 'guides/reverse-proxy' }
+ ]
+ },
+ { text: 'Troubleshooting', link: 'troubleshooting' },
+ {
+ text: 'Instructions',
+ items: [
+ { text: 'The Interface', link: 'instructions/main' },
+ { text: 'Settings', link: 'instructions/settings' }
+ ]
+ }
+ ]
+ },
+})
diff --git a/docs/.vitepress/config/index.mjs b/docs/.vitepress/config/index.mjs
new file mode 100644
index 000000000..81d0fc98e
--- /dev/null
+++ b/docs/.vitepress/config/index.mjs
@@ -0,0 +1,12 @@
+import { defineConfig } from 'vitepress'
+import { shared } from './shared.mjs';
+import { en } from './en.mjs'
+import { de } from './de.mjs'
+
+export default defineConfig({
+ ...shared,
+ locales: {
+ root: { label: 'English', ...en },
+ de: { label: 'Deutsch', ...de }
+ }
+})
\ No newline at end of file
diff --git a/docs/.vitepress/config/shared.mjs b/docs/.vitepress/config/shared.mjs
new file mode 100644
index 000000000..ec9c2da7d
--- /dev/null
+++ b/docs/.vitepress/config/shared.mjs
@@ -0,0 +1,45 @@
+import { defineConfig } from 'vitepress'
+
+export const shared = defineConfig({
+ rewrites: {
+ 'en/:rest*': ':rest*'
+ },
+
+ title: 'MySpeed',
+
+ lastUpdated: true,
+ cleanUrls: true,
+ metaChunk: true,
+
+ sitemap: {
+ hostname: 'https://myspeed.gnmyt.dev',
+ transformItems(items) {
+ return items.filter((item) => !item.url.includes('migration'))
+ }
+ },
+
+ /* prettier-ignore */
+ head: [
+ ['link', { rel: 'icon', type: 'image/png', href: '/logo.png' }],
+ ['meta', { name: 'theme-color', content: '#1C2232' }],
+ ['meta', { property: 'og:type', content: 'website' }],
+ ['meta', { property: 'og:locale', content: 'en' }],
+ ['meta', { property: 'og:title', content: 'MySpeed | Self-hosted speedtest analysis software' }],
+ ['meta', { property: 'og:site_name', content: 'MySpeed' }],
+ ['meta', { property: 'og:image', content: 'https://myspeed.gnmyt.dev/assets/images/thumbnail.png' }],
+ ['meta', { property: 'og:url', content: 'https://myspeed.gnmyt.dev/' }]
+ ],
+ themeConfig: {
+ logo: '/logo.png',
+ footer: {
+ copyright: '© 2024 Mathias Wagner',
+ },
+ search: {
+ provider: 'local'
+ },
+ socialLinks: [
+ {icon: 'github', link: 'https://github.com/gnmyt/myspeed'},
+ {icon: 'discord', link: 'https://discord.com/users/386242172632170496'}
+ ],
+ }
+})
\ No newline at end of file
diff --git a/docs/de/faq.md b/docs/de/faq.md
new file mode 100644
index 000000000..90663ba0d
--- /dev/null
+++ b/docs/de/faq.md
@@ -0,0 +1,71 @@
+# Fragen & Antworten
+
+Hier beantworten wir die Fragen, die Sie haben könnten.
+
+::: details Wie installiere ich MySpeed?
+Je nach Betriebssystem sind diese Anweisungen unterschiedlich. Hier finden Sie die Anweisungen für [Windows](setup/windows) und [Linux](setup/linux).
+Es wird jedoch dringend empfohlen, MySpeed unter Linux zu installieren.
+:::
+
+::: details Was sind die Anforderungen?
+Es hängt davon ab, welche Art von Bandbreite Sie haben. Für Linux könnte es so aussehen:
+Wenn Sie maximal 100 Mbps haben, reicht ein Raspberry Pi 1 oder ein anderer alter Computer aus.
+Bei einer Gbit-Leitung sind ein Raspberry Pi 4 oder ein PC mit 1Gbit LAN-Unterstützung wichtig.
+:::
+
+::: details Kann ich MySpeed trotz VPN verwenden?
+Solange Sie Ihren VPN-Dienst nicht auf dem gleichen System verwenden, auf dem MySpeed läuft, gibt es kein Problem.
+Andernfalls könnten Ihre VPN-Einstellungen die Ergebnisse verzerren oder diese nicht realistisch widerspiegeln.
+:::
+
+::: details Dient diese Information als offizieller Nachweis für meinen ISP?
+Nein. Die Geschwindigkeitstests müssen vom Geschwindigkeitstestdienst Ihres Anbieters durchgeführt werden.
+In diesem Fall dient MySpeed nur zu Informationszwecken und bietet keine rechtliche Garantie.
+:::
+
+::: details Was kann die Geschwindigkeitstests beeinflussen?
+Es gibt viele Faktoren, die die Geschwindigkeitstests beeinflussen können. Zum Beispiel können Hintergrunddienste
+die Ergebnisse beeinflussen. Es ist am besten, sie während der jeweiligen Testzeiten auszuschalten, da sonst Ihre
+Ergebnisse manipuliert werden könnten.
+:::
+
+::: details Was passiert mit den alten Testergebnissen?
+Die alten Testergebnisse werden automatisch gelöscht, sobald sie älter als 30 Tage sind.
+:::
+
+::: details Muss MySpeed dauerhaft laufen?
+Wir empfehlen es, um bessere Ergebnisse zu erzielen. Wenn es Sie beim Streamen von Filmen usw. stört,
+können Sie es über die Web-Schnittstelle für eine bestimmte Zeit pausieren oder manuell anhalten.
+Für den 24/7-Betrieb empfehlen wir ein System, das nicht viel Strom verbraucht. In diesem Fall empfehlen wir einen Raspberry Pi.
+Wenn Sie bereits einen Server haben, der ständig läuft, können Sie es auch dort parallel laufen lassen.
+:::
+
+::: details Wie kann ich zwischen manuellen und automatischen Geschwindigkeitstests unterscheiden?
+Klicken Sie auf das Uhrsymbol des jeweiligen Tests. Dort finden Sie alle Informationen zum Geschwindigkeitstest.
+:::
+
+::: details Zeigt die "Empfehlungen"-Funktion meine tatsächliche Bandbreite an?
+Nein, dies ist ein berechneter Wert aus Ihren letzten 10 Geschwindigkeitstests. Die verfügbare Bandbreite finden Sie in Ihrem Vertragsangebot.
+:::
+
+::: details Kann der Entwickler meine Testergebnisse sehen?
+Nein, die Testergebnisse sind nur lokal auf dem Server sichtbar.
+:::
+
+::: details Warum sollte ich Frequenzen konfigurieren?
+Es hängt stark von Ihrem Internet ab. Wenn Sie z.B. eine sehr schlechte Internetverbindung haben, sollten Sie die Frequenz eher verringern.
+Wenn Ihr Internet jedoch recht schnell ist, können Sie sie erhöhen. Auf dieser Grundlage werden mehr oder weniger Tests je nach Situation durchgeführt.
+
+::: warning Achtung
+Es ist sehr wahrscheinlich, dass Hintergrunddienste Ihre Geschwindigkeiten beeinflussen. Es ist am besten, sie während der jeweiligen Testzeiten auszuschalten, da sonst Ihre Ergebnisse manipuliert werden könnten.
+:::
+
+::: details Wie setze ich mein Passwort zurück?
+Sie haben Ihr MySpeed-Passwort vergessen? Kein Problem. Um es zurückzusetzen, navigieren Sie zum Installationsort (`cd /opt/myspeed`) und führen Sie den folgenden Befehl aus:
+
+```sh
+node -e "const {Sequelize} = require('sequelize');const db = new Sequelize({dialect: 'sqlite', storage: 'data/storage.db'});db.query('UPDATE config SET value=? WHERE key=?', {replacements: ['none', 'password']})"
+```
+
+Dann können Sie die Seite erneut aufrufen und Ihr Passwort manuell setzen :)
+:::
\ No newline at end of file
diff --git a/docs/de/guides/reverse-proxy.md b/docs/de/guides/reverse-proxy.md
new file mode 100644
index 000000000..a2b3bee62
--- /dev/null
+++ b/docs/de/guides/reverse-proxy.md
@@ -0,0 +1,106 @@
+# Konfiguration eines Reverse Proxies
+
+::: Tipp Warum einen Reverse Proxy verwenden?
+In diesem Fall verwenden wir einen Reverse Proxy als Zwischenschicht zwischen dir und MySpeed.
+Der Vorteil dabei ist, dass du MySpeed nicht über einen Port aufrufen musst, sondern über eine normale Domain.
+:::
+
+## Installation
+
+Falls du bereits einen Reverse Proxy installiert hast, kannst du diesen Schritt überspringen. Welchen der beiden Reverse Proxies du verwenden möchtest,
+liegt bei dir. Wir empfehlen jedoch `nginx` für diese Anleitung.
+
+::: code-group
+
+```sh [nginx]
+sudo apt-get install nginx -y
+```
+
+```sh [apache]
+sudo apt-get install apache2 -y
+```
+
+:::
+
+## Konfiguration von MySpeed
+
+In diesem Abschnitt wird erklärt, wie du MySpeed mit deinem Reverse Proxy verbinden kannst. Wähle hier erneut aus, welchen Reverse Proxy du verwendet hast.
+
+::: code-group
+
+```sh [nginx]
+# Erstelle eine Datei namens myspeed.conf unter /etc/nginx/sites-available. Hier verwenden wir nano
+sudo nano /etc/nginx/sites-available/myspeed.conf
+```
+
+```nginx [myspeed.conf]
+server {
+ listen 80;
+ listen [::]:80;
+
+ server_name deine-domain.de;
+
+ location / {
+ proxy_pass http://localhost:5216;
+ }
+}
+```
+
+```sh [nginx]
+# Aktiviere die Datei und starte den Reverse Proxy neu
+sudo ln -s /etc/nginx/sites-available/myspeed.conf /etc/nginx/sites-enabled/myspeed.conf
+sudo systemctl restart nginx
+```
+
+```sh [apache]
+# Erstelle eine Datei namens myspeed.conf unter /etc/apache2/sites-available. Hier verwenden wir nano
+sudo nano /etc/apache2/sites-available/myspeed.conf
+```
+
+```apache [myspeed.conf]
+
+ ServerName deine-domain.de
+
+ ProxyPreserveHost On
+ ProxyPass / http://localhost:5216/
+ ProxyPassReverse / http://localhost:5216/
+
+```
+
+```sh [apache]
+# Aktiviere die Module mod_proxy und mod_proxy_http
+sudo a2enmod proxy
+sudo a2enmod proxy_http
+
+# Aktiviere die Datei und starte den Reverse Proxy neu
+sudo a2ensite myspeed.conf
+sudo systemctl restart apache2
+```
+
+:::
+
+## Konfiguration eines SSL-Zertifikats mit Let's Encrypt
+
+In diesem Abschnitt wird erklärt, wie du ein SSL-Zertifikat von Let's Encrypt für MySpeed einrichtest.
+
+::: Tipp Verwendest du Cloudflare?
+Wenn du Cloudflare nutzt und kein SSL-Zertifikat von Let's Encrypt einrichten möchtest, kannst du einfach die Cloudflare Proxy-Funktion aktivieren. Das ist in den meisten Fällen ausreichend. Wenn du dich dafür entscheidest, die Cloudflare-Proxy zu verwenden, kannst du diesen Abschnitt überspringen.
+:::
+
+::: code-group
+
+```sh [nginx]
+# Installiere Certbot
+sudo apt-get install certbot python3-certbot-nginx -y
+
+# Führe Certbot aus und gib die Domain an
+sudo certbot --nginx -d deine-domain.de
+```
+
+```sh [apache]
+# Installiere Certbot
+sudo apt-get install certbot python3-certbot-apache -y
+
+# Führe Certbot aus und gib die Domain an
+sudo certbot --apache -d deine-domain.de
+```
\ No newline at end of file
diff --git a/docs/de/index.md b/docs/de/index.md
new file mode 100644
index 000000000..24da119a6
--- /dev/null
+++ b/docs/de/index.md
@@ -0,0 +1,62 @@
+---
+layout: home
+
+hero:
+ name: MySpeed
+ text: Automatisiere Speedtests
+ tagline: Ein selbstgehostetes Speedtest-Tracking-Tool, das es dir ermöglicht, deine Internetverbindung zu überwachen.
+ actions:
+ - theme: brand
+ text: Loslegen
+ link: /de/setup/linux
+ - theme: alt
+ text: GitHub
+ link: https://github.com/gnmyt/myspeed
+ image:
+ src: /logo.png
+ alt: MySpeed
+
+features:
+ - icon: 📊
+ title: Detaillierte Statistiken
+ details: MySpeed generiert klare Statistiken zu Geschwindigkeit, Ping und mehr.
+ - icon: ⏰
+ title: Testautomatisierung
+ details: MySpeed automatisiert Speedtests und ermöglicht es dir, die Zeit zwischen den Tests mit Cron-Ausdrücken festzulegen.
+ - icon: 🗄️
+ title: Mehrere Server hinzufügen
+ details: Füge deiner MySpeed-Instanz mehrere Server hinzu und wechsle zwischen ihnen.
+ - icon: 🩺
+ title: Verwende Gesundheitsprüfungen
+ details: Konfiguriere Gesundheitsprüfungen, um dich bei Fehlern oder Ausfällen per E-Mail, Signal, WhatsApp oder Telegram zu benachrichtigen.
+ - icon: 🔥
+ title: Unterstützung für Prometheus und Grafana
+ details: Integriere direkt mit Prometheus und Grafana, um deine MySpeed-Instanz zu überwachen.
+ - icon: 🗳️
+ title: Wähle deinen Anbieter
+ details: Wähle zwischen Ookla, LibreSpeed und Cloudflare Speedtest-Servern.
+
+
+---
+
+
\ No newline at end of file
diff --git a/docs/de/instructions/main.md b/docs/de/instructions/main.md
new file mode 100644
index 000000000..6f15f8e42
--- /dev/null
+++ b/docs/de/instructions/main.md
@@ -0,0 +1,32 @@
+# Die Benutzeroberfläche
+
+Die Benutzeroberfläche von MySpeed wurde von Grund auf benutzerfreundlich gestaltet. Um jedoch mögliche Verwirrung zu
+vermeiden, ist hier alles erklärt.
+
+## Die Benutzeroberfläche
+
+
+
+Die Benutzeroberfläche von MySpeed ist in **3** Teile unterteilt.
+
+Der **erste** Teil ist der sogenannte Header und bietet direkten Zugriff auf die Einstellungen und den Start eines
+Geschwindigkeitstests. Die Einstellungen werden ausführlicher [hier](settings) beschrieben.
+
+Der **zweite** Teil zeigt immer den neuesten Geschwindigkeitstest an.
+
+Der **dritte** Teil zeigt alle erstellten Geschwindigkeitstests an.
+
+## Letzter Test
+
+
+
+Dieser Teil zeigt immer den neuesten, also zuletzt erstellten Geschwindigkeitstest an. Wenn du auf ein Symbol klickst,
+öffnet sich das entsprechende Hilfemenü mit weiteren Informationen.
+
+## Übersicht aller Tests
+
+
+
+Hier lassen sich alle Tests anzeigen, die erstellt wurden. Es lässt sich jetzt auch auf die Uhr links klicken, um
+einen Dialog mit weiteren Informationen zu öffnen. Dieser Dialog zeigt nun weitere Informationen über den Test und
+bietet sogar die Möglichkeit, ihn direkt zu löschen (falls nötig).
diff --git a/docs/de/instructions/settings.md b/docs/de/instructions/settings.md
new file mode 100644
index 000000000..fad265d24
--- /dev/null
+++ b/docs/de/instructions/settings.md
@@ -0,0 +1,99 @@
+# Settings
+
+{align="right"}
+
+Clicking on the **settings-icon** ⚙️ opens the settings page. You can find an example on the right.
+
+In this menu you can find settings as well as functions like exporting tests.
+
+To make the design clearer, the settings related to the internet can be found in the first 4 lines.
+
+All options related to speed tests can be found in the 2nd box. Here you can e.g. set the frequency of the tests or
+select a server.
+
+In the 3rd box you can find settings related to the interface. Here you can change the language or the view.
+
+
+
+## Internet related settings
+
+Here are settings that relate to your optimal Internet.
+
+::: tip What's the point?
+MySpeed uses colored icons to symbolize the quality of your internet connection. If you enter these values here, MySpeed
+will show you by icons if your internet is good, medium or bad.
+:::
+
+### 🏓 Ping
+
+The ping is a value that shows the duration of the connection between your computer and the internet in **ms**.
+The faster (i.e. lower), the better.
+
+### ⬆️ Up-Speed
+
+The up-speed is the speed at which your computer sends data. The higher the value, the better.
+
+### ⬇️ Down-Speed
+
+The down-speed is the speed at which your computer receives data. The higher the value, the better.
+
+### 🛠️ Optimal values
+
+If you don't know what values you should enter here, you can use this button. MySpeed will then try to determine the
+optimal values for you.
+
+## Speedtest settings
+
+### 🖥️ Change server
+
+MySpeed chooses the next server automatically at startup. But if you find a closer server, you can select it here. You
+can choose one from the list or enter an ID. You can read more about this [here](https://www.ookla.com/network).
+
+### 🔑 Change password
+
+Is your MySpeed instance public and you don't want others or only authorized people to see your internet speed? Then you
+can protect MySpeed with a password here, which has to be entered when visiting the site.
+
+### 🕒 Set frequency
+
+Here you can set the frequency in which MySpeed performs your tests. This setting can be relevant for slower
+connections.
+
+### ⏸️ Pause speed tests
+
+Do you have to upload an important document right now and MySpeed is affecting your internet speed a lot? Then you can
+pause it here for a certain time. This can be relevant especially for slow connections.
+
+### 🌐 Integrations
+
+MySpeed uses integrations to notify you when your internet is down. You have services like Discord, Telegram, or Gotify
+to choose from. If you want to process the data yourself, you can also specify a webhook and have all events sent to
+you.
+
+## Interface settings
+
+### 📅 Set period
+
+Here you can define how many tests will be displayed in the specified period. You can choose between the last 24 and 48
+hours as well as the last 7 or 30 days. If you select one of the last two, you will be shown averages to make the
+interface clearer.
+
+### 📤 Export tests
+
+Do you want to be sure and download your tests to your computer? Then you can export your tests here.
+
+### 🌍 Change language
+
+MySpeed is currently available in English and German languages. With this option you can change the language. Do you
+want to participate and translate MySpeed into another language? Then have a
+look [here](https://crowdin.com/project/myspeed).
+
+### 📊 Change view
+
+
+MySpeed offers you two views. The first one is the default view you already know. The second one is the **Test
+Statistics**. Here you can see all tests with the help of widgets and diagrams.
+
+### ℹ️ Information
+
+This section shows you information about your MySpeed instance. Nothing important, just a little info. :)
\ No newline at end of file
diff --git a/docs/de/setup/linux.md b/docs/de/setup/linux.md
new file mode 100644
index 000000000..c1616aa42
--- /dev/null
+++ b/docs/de/setup/linux.md
@@ -0,0 +1,178 @@
+# Einrichtung unter Linux
+
+Hier wird die Einrichtung von MySpeed unter Linux beschrieben. MySpeed kann auf verschiedene Arten installiert werden.
+
+## Installation mit Docker
+
+::: tip Hilfe
+Du weißt nicht, wie man Docker installiert? Schau dir [diese Anleitung](https://docs.docker.com/engine/install/#server) an.
+:::
+
+::: code-group
+
+```sh [Stabile Version]
+docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed
+```
+
+```sh [Entwicklerversion]
+docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed:development
+```
+
+:::
+
+## Automatische Installation
+
+::: code-group
+
+```sh [Stabile Version]
+bash <(curl -sSL https://install.myspeed.dev)
+```
+
+```sh [Entwicklerversion]
+curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/install.sh | bash -s -- --beta
+```
+
+:::
+
+## Automatischer Deinstallationsprozess
+Möchtest du MySpeed nicht mehr verwenden? Du kannst es leicht entfernen. Entscheide hier, ob du deine Daten behalten oder löschen möchtest.
+
+::: warning Führe diese Befehle vorsichtig aus
+Das Ausführen der Befehle führt zur Löschung / Deinstallation von MySpeed. Bitte sei dir dessen bewusst.
+:::
+
+::: code-group
+
+```sh [Daten behalten]
+curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash -s -- --keep-data
+```
+
+```sh [Daten löschen]
+curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash
+```
+
+:::
+
+## Manuelle Installation
+```sh
+sudo apt-get install wget curl unzip -y #(1)
+
+# Dies ist nur erforderlich, wenn NodeJS noch nicht installiert ist
+curl -sSL https://deb.nodesource.com/setup_18.x | bash
+sudo apt-get install nodejs -y #(2)
+
+mkdir /opt/myspeed && cd /opt/myspeed #(3)
+
+wget $(curl -s https://api.github.com/repos/gnmyt/myspeed/releases/latest | grep browser_download_url | cut -d '"' -f 4) #(4)
+
+unzip MySpeed-*.zip && rm MySpeed-*.zip #(5)
+
+npm install #(6)
+
+NODE_ENV=production node server #(7)
+```
+
+1. Hier werden alle notwendigen Pakete für die Installation des Projekts installiert.
+2. Dieser Schritt installiert die neueste Version von NodeJS.
+3. Erstelle nun den Ordner, in dem du MySpeed installieren möchtest. In diesem Fall ist es der Ordner `/opt/myspeed`.
+4. Installiere nun die neueste Version von MySpeed.
+5. Entpacke die gerade heruntergeladene Datei (danach kannst du sie löschen).
+6. Installiere nun alle Abhängigkeiten.
+7. Starte nun MySpeed. MySpeed ist jetzt auf Port 5216 verfügbar.
+ Wenn du planst, MySpeed im Hintergrund laufen zu lassen, siehe die Anleitung unten.
+
+## Installation von MySpeed aus dem Quellcode
+::: warning Achtung
+Dieser Prozess installiert die neuste Entwicklungsversion von MySpeed. Fehler können auftreten.
+:::
+
+```sh
+sudo apt-get install git curl -y #(1)
+
+# Dies ist nur erforderlich, wenn NodeJS noch nicht installiert ist
+curl -sSL https://deb.nodesource.com/setup_18.x | bash
+sudo apt-get install nodejs -y #(2)
+
+mkdir /opt/myspeed && cd /opt/myspeed #(3)
+
+git clone https://github.com/gnmyt/myspeed.git . #(4)
+
+npm install #(5)
+
+cd client && npm install && npm run build && cd .. && mv client/build . #(6)
+
+NODE_ENV=production node server #(7)
+```
+
+1. Hier installierst du alle notwendigen Pakete, um das Projekt zu installieren.
+2. Dieser Schritt installiert die neuste Version von NodeJS.
+3. Erstelle nun den Ordner, in welchen du MySpeed installieren möchtest. In diesem Fall ist das der Ordner `/opt/myspeed`.
+4. Klone nun das MySpeed Repository, um Zugriff auf den Code zu erhalten.
+5. Installiere nun alle Abhängigkeiten des Servers.
+6. Jetzt kompilierst du die Oberfläche von MySpeed und verschiebst sie in den Ordner wo MySpeed sie lesen kann.
+7. Jetzt wird MySpeed gestartet. MySpeed ist nun unter dem Port 5216 erreichbar.
+ Wenn du planst, MySpeed im Hintergrund laufen zu lassen, dann schau dir den Guide dafür unten an.
+
+
+## MySpeed 24/7 installieren
+::: warning Wichtig
+Hast du das Installations-Script verwendet? Dann musst du diesen Schritt überhaupt nicht ausführen.
+:::
+
+Die Installation als Systemdienst ist nicht schwer. In diesem Fall verwenden wir `systemd`, da es in den meisten Linux-Distributionen direkt integriert ist.
+
+1. Erstelle eine Datei namens `myspeed.service` unter `/etc/systemd/system`. Hier verwenden wir `nano`
+ ```sh
+ nano /etc/systemd/system/myspeed.service
+ ```
+
+2. Füge nun den Inhalt der Datei ein.
+ ```ini
+ [Unit]
+ Description=MySpeed
+ After=network.target
+
+ [Service]
+ Type=simple
+ ExecStart=/usr/bin/node server
+ Restart=always
+ # \/ Es wird dringend empfohlen, hier deinen eigenen Benutzer zu erstellen
+ User=root
+ Environment=NODE_ENV=production
+ # \/ Gib hier deinen Installationsort an
+ WorkingDirectory=/opt/myspeed
+
+ [Install]
+ WantedBy=multi-user.target
+ ```
+
+3. Speichere die Datei. Dies variiert je nach Editor.
+
+ ::: code-group
+ ```sh [nano]
+ Drücke `STRG` + `X`, dann drücke `Y` und drücke `Enter`, um die Datei zu speichern und den Editor zu verlassen.
+ ```
+
+ ```sh [vim]
+ Drücke `ESC`, tippe dann `:wq` und drücke `Enter`, um die Datei zu speichern und den Editor zu verlassen.
+ ```
+
+4. Lade nun systemd neu.
+ ```sh
+ systemctl daemon-reload
+ ```
+
+5. Wenn du möchtest, dass MySpeed beim Start von systemd startet, gib diesen Befehl ein:
+ ```sh
+ systemctl enable myspeed
+ ```
+
+6. Fertig! Jetzt kannst du MySpeed starten.
+ ```sh
+ systemctl start myspeed
+ ```
+
+7. Überprüfe nun den Status von MySpeed.
+ ```sh
+ systemctl status myspeed
+ ```
diff --git a/docs/de/setup/windows.md b/docs/de/setup/windows.md
new file mode 100644
index 000000000..d9522d099
--- /dev/null
+++ b/docs/de/setup/windows.md
@@ -0,0 +1,62 @@
+# Windows Setup
+Hier beschreiben wir die Einrichtung für Windows.
+
+## Installation von MySpeed
+
+1. NodeJS herunterladen
+ Um MySpeed zu verwenden, benötigst du zuerst **NodeJS**. Du kannst den Installer ganz einfach [hier](https://nodejs.org/en/download/) herunterladen. Empfohlen wird die LTS-Version 18 von NodeJS.
+
+2. MySpeed herunterladen
+ Lade jetzt die neueste Version von MySpeed herunter. Die aktuellste Version findest du [hier](https://github.com/gnmyt/myspeed/releases/latest). Lade die Datei "MySpeed-x.x.x-zip" von hier herunter.
+
+3. Datei entpacken
+ Entpacke nun die heruntergeladene Datei an einen Ort deiner Wahl. Am besten an einen Ort, den du später wiederfindest 🌚.
+
+4. Installation testen
+ Navigiere zuerst in den Ordner, wo du die Datei entpackt hast. Klicke in einen leeren Bereich dieses Ordners mit `Shift` + `Rechtsklick` und wähle "Öffnen in Powershell".
+ Füge nun diesen Befehl in das Konsolenfenster ein und drücke `Enter`:
+ ```sh
+ npm install
+ ```
+
+ ::: warning Schlägt die NPM-Installation fehl?
+ Möglicherweise gibt es keine vorkompilierten Module für dein System. In diesem Fall musst du die Module selbst kompilieren.
+ Folge diesen Schritten:
+
+ 1. Python herunterladen
+ Um das Projekt zu "bauen", benötigst du auch Python. Du kannst es [hier](https://www.python.org/downloads/) herunterladen.
+
+ 2. Visual Studio BuildTools herunterladen
+ Das Tool "node-gyp" erfordert auch Visual Studio BuildTools, um das Projekt erfolgreich zu "bauen". So funktioniert es:
+ 1. Klicke [auf diesen Link](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) und warte einen Moment, bis der Download startet.
+ 2. Öffne die Datei und klicke auf "Weiter".
+ 3. Wähle jetzt die optionale Workload "Desktopentwicklung mit C++" aus und bestätige deine Auswahl durch Klicken auf "Installieren".
+ 3. Führe `npm install` erneut aus.
+ :::
+ Wenn alles erfolgreich durchläuft, hast du alles richtig gemacht! Herzlichen Glückwunsch. :)
+ Du kannst MySpeed jetzt mit diesem Befehl in Powershell starten.
+
+5. MySpeed starten
+ ```powershell
+ $env:NODE_ENV="production"; node server
+ ```
+
+## Automatischer Start mit dem Autostart-Ordner in Windows
+
+1. Autostart-Ordner in Windows öffnen
+ Drücke gleichzeitig die Tasten (`Windows` + `R`) auf deiner Tastatur, bis ein Ausführen-Dialog erscheint. Gib dann `%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` ein und drücke `Enter`.
+
+2. Autostart-Datei erstellen
+ Stelle sicher, dass du [Dateinamenerweiterungen aktiviert](https://support.microsoft.com/en-us/windows/common-file-name-extensions-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01) hast. Wenn das erledigt ist, erstelle ein neues Dokument mit `Rechtsklick` > `Neu` > `Textdokument`.
+ Drücke dann `Strg` + `A` und benenne es als "MySpeed.bat". Drücke dann zweimal `Enter`.
+
+3. Inhalt erstellen
+ Klicke mit `Rechtsklick` und wähle `Bearbeiten`. Füge dann den folgenden Code ein und passe den Installationsort an:
+ ```batch
+ @echo off
+ cd "C:\Users\Desktop\MySpeed"
+ set NODE_ENV=production
+ node server
+ ```
+
+4. Wenn alles funktioniert hat, sollte MySpeed jetzt automatisch starten, wenn das System hochfährt.
diff --git a/docs/de/troubleshooting.md b/docs/de/troubleshooting.md
new file mode 100644
index 000000000..8fab69ee5
--- /dev/null
+++ b/docs/de/troubleshooting.md
@@ -0,0 +1,31 @@
+# Fehlerbehebung
+
+In diesem Guide erfährst du, wie du bekannte Fehler mit diesem Dienst behebst.
+
+::: danger Could not open the database file. Maybe it is damaged?
+Bei diesem Fehler kann es mehrere Lösungen geben. Arbeite einfach alle Möglichkeiten durch und dein Problem sollte
+gelöst sein. :)
+
+1. Berechtigungen setzen
+ Um die Berechtigungen zu setzen, gib den Befehl `chmod 700 /opt/myspeed` ein. (Ersetze /opt/myspeed mit deinem
+ Installationsort)
+
+2. Build Essentials Installieren
+ Es ist aktuell möglich, dass der Fehler auftritt, weil das Paket `build-essential` nicht installiert ist. Installiere
+ es ganz einfach mit dem Befehl `sudo apt-get install build-essential` nach.
+
+3. Führe eine Neuinstallation der Module aus
+ Gib zuerst den Befehl `rm -R node_modules` im Installationsordner ein, um die Module zu löschen und installiere sie
+ dann mit `npm install` nach.
+ :::
+
+::: danger Diese MySpeed-Instanz befindet sich aktuell im Entwicklungsmodus
+Das ist nicht wirklich ein Fehler, lediglich eine Sicherung um das Tool nur in Produktionsumgebungen verwenden zu
+können. Setze dazu die Umgebungsvariable `NODE_ENV` auf den Wert `production`.
+
+Unter Linux erreichst du das mit `export NODE_ENV=production` und unter Windows in der Powershell
+mit `$env:NODE_ENV="production"`.
+
+Lies dir auch mal den [Guide zur 24/7 Installation](setup/linux) durch, wenn du planst, MySpeed im Hintergrund laufen
+zu lassen und beim Systemstart automatisch hochzufahren.
+:::
\ No newline at end of file
diff --git a/docs/en/faq.md b/docs/en/faq.md
new file mode 100644
index 000000000..34d56a704
--- /dev/null
+++ b/docs/en/faq.md
@@ -0,0 +1,76 @@
+# Questions & Answers
+
+Here we answer the questions you might have.
+
+::: details How do I install MySpeed?
+Depending on your operating system these instructions are different. Here you can find the instructions
+for [Windows](setup/windows) and [Linux](setup/linux).
+However, it is strongly recommended to install MySpeed on Linux.
+:::
+
+::: details What are the requirements?
+It depends on what kind of bandwidth you have. For Linux, for example, it would be like this:
+If you have a maximum of 100 Mbps on, then a RaspberryPi 1 or any other old computer will do the trick.
+If you have a Gbit line, a Raspberry Pi 4 or a PC with 1Gbit LAN support would be important.
+:::
+
+::: details Can I use MySpeed despite VPN?
+As long as you don't use your VPN service on the same system as the one where MySpeed is running, it's not a problem.
+Otherwise, your VPN might distort the results or not reflect them realistically.
+:::
+
+::: details Does this information serve as official proof for my ISP?
+No. The speed tests have to be done by the speed test service of your provider.
+In this case MySpeed serves only for information purposes and has no legal guarantees.
+:::
+
+::: details What can influence the speed tests?
+There are many factors that can influence the speed tests. For example, if you have a lot of background services
+running, they can affect the results. It is best to turn them off at the respective test times, otherwise your
+results could be manipulated.
+:::
+
+::: details What happens to the old test results?
+The old test results are automatically deleted as soon as they are older than 30 days.
+:::
+
+::: details Does it have to run permanently?
+We recommend it to get better results. If it bothers you while streaming movies etc.,
+you can also pause it via the web interface for a certain time or manually.
+For 24/7 operation, we recommend a system that doesn't need a lot of watts. In this case we recommend a Raspberry Pi.
+If you already have a server running all the time, you can also run it there in parallel.
+:::
+
+::: details How can I distinguish between manual and automatic speed tests?
+Click on the clock symbol of the respective test. There you will find all information about the speed test.
+:::
+
+::: details Does the "Recommendations" function show my correct bandwidth?
+No, this is a calculated value from your last 10 speed tests. The available bandwidth will be found in your connection
+contract.
+:::
+
+::: details Can the developer see my test results?
+No, the test results are only visible locally on the server.
+:::
+
+::: details Why should I configure frequencies?
+It depends very much on your internet. For example, if you have a very bad internet, you should rather decrease the
+frequency. If your internet is quite fast, you can increase it. On this basis, more or less tests will be made,
+depending on the situation.
+
+::: warning Attention
+It is very likely that background services are affecting your speeds. It is best to turn them off at the respective test
+times, otherwise your results could be manipulated.
+:::
+
+::: details How do I reset my password?
+You forgot your MySpeed password? It happens, no problem. To reset it, navigate to the installation
+location (`cd /opt/myspeed`) and execute the following command:
+
+```sh
+node -e "const {Sequelize} = require('sequelize');const db = new Sequelize({dialect: 'sqlite', storage: 'data/storage.db'});db.query('UPDATE config SET value=? WHERE key=?', {replacements: ['none', 'password']})"
+```
+
+Then you can go to the page again and set your password manually :)
+:::
\ No newline at end of file
diff --git a/docs/en/guides/reverse-proxy.md b/docs/en/guides/reverse-proxy.md
new file mode 100644
index 000000000..0a50829c6
--- /dev/null
+++ b/docs/en/guides/reverse-proxy.md
@@ -0,0 +1,108 @@
+# Setting up a Reverse Proxy with MySpeed
+
+::: tip Why use a reverse proxy?
+In this case we use a reverse proxy as an intermediate layer between you and MySpeed.
+This has the advantage that you don't have to call MySpeed via a port, but via a normal domain.
+:::
+
+## Installation
+
+If you already have a reverse proxy installed, you can skip this step. Which of the two reverse proxies you want to use
+is up to you. However, we recommend `nginx` for this guide.
+
+::: code-group
+
+```sh [nginx]
+sudo apt-get install nginx -y
+```
+
+```sh [apache]
+sudo apt-get install apache2 -y
+```
+
+:::
+
+## Configuring MySpeed
+
+This section explains how to connect MySpeed to your reverse proxy. Again, select here which reverse proxy you used.
+
+::: code-group
+
+```sh [nginx]
+# Create a file named myspeed.conf under /etc/nginx/sites-available. Here we use nano
+sudo nano /etc/nginx/sites-available/myspeed.conf
+```
+
+```nginx [myspeed.conf]
+server {
+ listen 80;
+ listen [::]:80;
+
+ server_name your-domain.com;
+
+ location / {
+ proxy_pass http://localhost:5216;
+ }
+}
+```
+
+```sh [nginx]
+# Activate the file and restart the reverse proxy
+sudo ln -s /etc/nginx/sites-available/myspeed.conf /etc/nginx/sites-enabled/myspeed.conf
+sudo systemctl restart nginx
+```
+
+```sh [apache]
+# Create a file named myspeed.conf under /etc/apache2/sites-available. Here we use nano
+sudo nano /etc/apache2/sites-available/myspeed.conf
+```
+
+```apache [myspeed.conf]
+
+ ServerName your-domain.com
+
+ ProxyPreserveHost On
+ ProxyPass / http://localhost:5216/
+ ProxyPassReverse / http://localhost:5216/
+
+```
+
+```sh [apache]
+# Enable the mod_proxy and mod_proxy_http modules
+sudo a2enmod proxy
+sudo a2enmod proxy_http
+
+# Activate the file and restart the reverse proxy
+sudo a2ensite myspeed.conf
+sudo systemctl restart apache2
+```
+
+:::
+
+## Configuring an SSL certificate with Let's Encrypt
+
+This section explains how to set up an SSL certificate from Let's Encrypt for MySpeed.
+
+::: tip Are you using Cloudflare?
+If you use Cloudflare and don't want to set up an SSL certificate from Let's Encrypt, you can just use the simply
+activate the Cloudflare proxy function. This is sufficient in most cases. If you decide to use the Cloudflare proxy, you
+can skip this section.
+:::
+
+::: code-group
+
+```sh [nginx]
+# Install certbot
+sudo apt-get install certbot python3-certbot-nginx -y
+
+# Run Certbot and specify the domain
+sudo certbot --nginx -d your-domain.com
+```
+
+```sh [apache]
+# Install certbot
+sudo apt-get install certbot python3-certbot-apache -y
+
+# Run Certbot and specify the domain
+sudo certbot --apache -d your-domain.com
+```
\ No newline at end of file
diff --git a/docs/en/index.md b/docs/en/index.md
new file mode 100644
index 000000000..9f48a1516
--- /dev/null
+++ b/docs/en/index.md
@@ -0,0 +1,60 @@
+---
+layout: home
+
+hero:
+ name: MySpeed
+ text: Automate Speedtests
+ tagline: A self-hosted speedtest tracking tool that allows you to monitor your internet connection.
+ actions:
+ - theme: brand
+ text: Get started
+ link: /setup/linux
+ - theme: alt
+ text: GitHub
+ link: https://github.com/gnmyt/myspeed
+ image:
+ src: /logo.png
+ alt: MySpeed
+
+features:
+ - icon: 📊
+ title: Detailed statistics
+ details: MySpeed generates clear statistics on speed, ping, and more.
+ - icon: ⏰
+ title: Test automation
+ details: MySpeed automates speed tests and allows you to set the time between tests using Cron expressions.
+ - icon: 🗄️
+ title: Add multiple servers
+ details: Add multiple servers to your MySpeed instance and switch between them.
+ - icon: 🩺
+ title: Use Health Checks
+ details: Configure health checks to notify you via email, Signal, WhatsApp, or Telegram in case of errors or downtime.
+ - icon: 🔥
+ title: Support for Prometheus and Grafana
+ details: Integrate directly with Prometheus and Grafana to monitor your MySpeed instance.
+ - icon: 🗳️
+ title: Choose your provider
+ details: Choose between Ookla, LibreSpeed and Cloudflare speed test servers.
+---
+
+
\ No newline at end of file
diff --git a/docs/instructions/main.en.md b/docs/en/instructions/main.md
similarity index 54%
rename from docs/instructions/main.en.md
rename to docs/en/instructions/main.md
index 9cd3be1d5..4b74787da 100644
--- a/docs/instructions/main.en.md
+++ b/docs/en/instructions/main.md
@@ -1,35 +1,32 @@
# The interface
-MySpeed's interface is designed from the ground up to be easy to use. However, to avoid possible confusion,
-everything is explained here.
+MySpeed's interface is designed from the ground up to be easy to use. However, to avoid possible confusion, everything
+is explained here.
## The user interface
-{: align="left" }
+
The interface of MySpeed is divided into **3** parts.
-The **first** part is the so-called header and contains direct access to the settings and the start of a speed test.
-The settings are described in more detail [here](../settings).
+The **first** part is the so-called header and contains direct access to the settings and the start of a speed test. The
+settings are described in more detail [here](settings).
The **second** part always shows the most recent speedtest.
The **third** part shows all created speedtests.
-
-
## Last test
-{align="left"}
-This part always shows the most recent, i.e. last created speedtest. If you click on an icon, the respective help menu will open
-with more information
+
-
+This part always shows the most recent, i.e. last created speedtest. If you click on an icon, the respective help menu
+will open with more information.
## Overview of all tests
-{align="left"}
+
-Here you can view all tests that have been created. Now you can also click on the clock on the left to open a dialog
+Here you can view all tests that have been created. Now you can also click on the clock on the left to open a dialog
with more information. This dialog now shows more information about the test and even offers the possibility to delete
it directly (if necessary).
\ No newline at end of file
diff --git a/docs/en/instructions/settings.md b/docs/en/instructions/settings.md
new file mode 100644
index 000000000..3fbd341ad
--- /dev/null
+++ b/docs/en/instructions/settings.md
@@ -0,0 +1,98 @@
+# Settings
+
+{align="right"}
+
+Clicking on the **settings-icon** ⚙️ opens the settings page. You can find an example on the right.
+
+In this menu you can find settings as well as functions like exporting tests.
+
+To make the design clearer, the settings related to the internet can be found in the first 4 lines.
+
+All options related to speed tests can be found in the 2nd box. Here you can e.g. set the frequency of the tests or
+select a server.
+
+In the 3rd box you can find settings related to the interface. Here you can change the language or the view.
+
+
+
+## Internet related settings
+
+Here are settings that relate to your optimal Internet.
+
+::: tip What's the point?
+MySpeed uses colored icons to symbolize the quality of your internet connection. If you enter these values here, MySpeed
+will show you by icons if your internet is good, medium or bad.
+:::
+
+### 🏓 Ping
+
+The ping is a value that shows the duration of the connection between your computer and the internet in **ms**.
+The faster (i.e. lower), the better.
+
+### ⬆️ Up-Speed
+
+The up-speed is the speed at which your computer sends data. The higher the value, the better.
+
+### ⬇️ Down-Speed
+
+The down-speed is the speed at which your computer receives data. The higher the value, the better.
+
+### 🛠️ Optimal values
+
+If you don't know what values you should enter here, you can use this button. MySpeed will then try to determine the
+optimal values for you.
+
+## Speedtest settings
+
+### 🖥️ Change server
+
+MySpeed chooses the next server automatically at startup. But if you find a closer server, you can select it here. You
+can choose one from the list or enter an ID. You can read more about this [here](https://www.ookla.com/network).
+
+### 🔑 Change password
+
+Is your MySpeed instance public and you don't want others or only authorized people to see your internet speed? Then you
+can protect MySpeed with a password here, which has to be entered when visiting the site.
+
+### 🕒 Set frequency
+
+Here you can set the frequency in which MySpeed performs your tests. This setting can be relevant for slower
+connections.
+
+### ⏸️ Pause speed tests
+
+Do you have to upload an important document right now and MySpeed is affecting your internet speed a lot? Then you can
+pause it here for a certain time. This can be relevant especially for slow connections.
+
+### 🌐 Integrations
+
+MySpeed uses integrations to notify you when your internet is down. You have services like Discord, Telegram, or Gotify
+to choose from. If you want to process the data yourself, you can also specify a webhook and have all events sent to
+you.
+
+## Interface settings
+
+### 📅 Set period
+
+Here you can define how many tests will be displayed in the specified period. You can choose between the last 24 and 48
+hours as well as the last 7 or 30 days. If you select one of the last two, you will be shown averages to make the
+interface clearer.
+
+### 📤 Export tests
+
+Do you want to be sure and download your tests to your computer? Then you can export your tests here.
+
+### 🌍 Change language
+
+MySpeed is currently available in English and German languages. With this option you can change the language. Do you
+want to participate and translate MySpeed into another language? Then have a
+look [here](https://crowdin.com/project/myspeed).
+
+### 📊 Change view
+
+MySpeed offers you two views. The first one is the default view you already know. The second one is the **Test
+Statistics**. Here you can see all tests with the help of widgets and diagrams.
+
+### ℹ️ Information
+
+This section shows you information about your MySpeed instance. Nothing important, just a little info. :)
\ No newline at end of file
diff --git a/docs/setup/linux.en.md b/docs/en/setup/linux.md
similarity index 68%
rename from docs/setup/linux.en.md
rename to docs/en/setup/linux.md
index 1ceb23d1a..ac89383b4 100644
--- a/docs/setup/linux.en.md
+++ b/docs/en/setup/linux.md
@@ -2,46 +2,57 @@
Here the setup for Linux is described. MySpeed can be installed in several ways.
## Installation with Docker
-!!! help "Help"
- You don't know how to install Docker? Then check out [this guide](https://docs.docker.com/engine/install/#server)
-=== "Stable Version"
- ```sh
- docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed
- ```
+::: tip Help
+ You don't know how to install Docker? Then check out [this guide](https://docs.docker.com/engine/install/#server)
+:::
+
+
+::: code-group
+
+```sh [Stable Version]
+docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed
+```
-=== "Development Version"
- ```sh
- docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed:development
- ```
+
+```sh [Development Version]
+docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed:development
+```
+
+:::
## Automatic installation
-=== "Stable Version"
- ```sh
- bash <(curl -sSL https://install.myspeed.dev)
- ```
+::: code-group
-=== "Development Version"
- ```sh
- curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/install.sh | bash -s -- --beta
- ```
+```sh [Stable Version]
+bash <(curl -sSL https://install.myspeed.dev)
+```
+
+```sh [Development Version]
+curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/install.sh | bash -s -- --beta
+```
+
+:::
## Automatic uninstall process
Don't want to use MySpeed anymore? You can easily remove MySpeed. Decide here if you want to keep or delete your data.
-!!! warning "Execute these commands carefully"
- Executing the commands will result in deletion / uninstallation of MySpeed. Please be aware of this.
+::: warning Execute these commands with caution
+Executing the commands will result in deletion / uninstallation of MySpeed. Please be aware of this.
+:::
-=== "Keep data"
- ```sh
- curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash -s -- --keep-data
- ```
+::: code-group
-=== "Delete data"
- ```sh
- curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash
- ```
+```sh [Keep data]
+curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash -s -- --keep-data
+```
+
+```sh [Delete data]
+curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash
+```
+
+:::
## Manual installation
```sh
@@ -72,8 +83,10 @@ NODE_ENV=production node server #(7)
If you plan to run MySpeed in the background, see the guide below.
## Install MySpeed from the source code
-!!! warning "Attention"
- This process installs the latest development version of MySpeed. Errors may occur.
+::: warning Attention
+This process installs the latest development version of MySpeed. Errors may occur.
+
+:::
```sh
sudo apt-get install git curl -y #(1)
@@ -104,8 +117,9 @@ NODE_ENV=production node server #(7)
## Install MySpeed 24/7
-!!! warning "Important"
- You have used the installation script? Then you don't need to do this step at all.
+::: warning Important
+You have used the installation script? Then you don't need to do this step at all.
+:::
Installing as a system service is not even that hard. In this case we use `systemd`, because it is directly integrated in most Linux distributions.
@@ -115,7 +129,7 @@ Installing as a system service is not even that hard. In this case we use `syste
```
2. Now paste the content of the file.
- ```ini linenums="1"
+ ```ini
[Unit]
Description=MySpeed
After=network.target
@@ -136,17 +150,21 @@ Installing as a system service is not even that hard. In this case we use `syste
3. Save the file. This varies a bit depending on the editor
- === "Nano"
- `CTRL` + `X`, then `Y` and then `Enter`
- === "Vim"
- Press `ESC`, then type `:wq` and press `Enter`
+ ::: code-group
+ ```sh [nano]
+ Press `CTRL` + `X`, then press `Y` and press `Enter` to save the file and exit the editor.
+ ```
+
+ ```sh [vim]
+ Press `ESC`, then type `:wq` and press `Enter` to save the file and exit the editor.
+ ```
-4. Now reload systemd
+4. Now reload systemd
```sh
systemctl daemon-reload
```
-5. If you want MySpeed to boot at systemd startup, type this command:
+5. If you want MySpeed to boot at systemd startup, type this command:
```sh
systemctl enable myspeed
```
diff --git a/docs/setup/windows.en.md b/docs/en/setup/windows.md
similarity index 69%
rename from docs/setup/windows.en.md
rename to docs/en/setup/windows.md
index abc89d477..2869f213e 100644
--- a/docs/setup/windows.en.md
+++ b/docs/en/setup/windows.md
@@ -1,6 +1,8 @@
# Setup Windows
Here we describe the setup for Windows.
+## Installing MySpeed
+
1. Download NodeJS
To use MySpeed, you first need **NodeJS**. You can easily download the installer [here](https://nodejs.org/en/download/). Recommended is the LTS version 18 of NodeJS.
@@ -17,19 +19,20 @@ Here we describe the setup for Windows.
npm install
```
- ??? warning "Does the NPM installation fail?"
- There is a possibility that there are no precompiled modules for your system. In this case you have to compile the modules yourself.
- Follow these steps:
-
- 1. Download Python
- To "build" the project, you also need to download Python. You can do this [here](https://www.python.org/downloads/).
-
- 2. Download the Visual Studio BuildTools
- The "node-gyp" tool also requires Visual Studio's BuildTools to successfully "build" the project. Here's how it works:
- 1. click [on this link](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) and wait a short time until the download starts
- 2. open the file and click "continue
- 3. now select the optional workload "Desktop development with C++" and confirm your selection by clicking on "Install
- 3. run `npm install` again
+ ::: warning Does the NPM installation fail?
+ There is a possibility that there are no precompiled modules for your system. In this case you have to compile the modules yourself.
+ Follow these steps:
+
+ 1. Download Python
+ To "build" the project, you also need to download Python. You can do this [here](https://www.python.org/downloads/).
+
+ 2. Download the Visual Studio BuildTools
+ The "node-gyp" tool also requires Visual Studio's BuildTools to successfully "build" the project. Here's how it works:
+ 1. click [on this link](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) and wait a short time until the download starts
+ 2. open the file and click "continue
+ 3. now select the optional workload "Desktop development with C++" and confirm your selection by clicking on "Install
+ 3. run `npm install` again
+ :::
If everything runs successfully, you did everything right! Congratulations. :)
You can now start MySpeed with this command in your Powershell.
diff --git a/docs/en/troubleshooting.md b/docs/en/troubleshooting.md
new file mode 100644
index 000000000..d1c3a3658
--- /dev/null
+++ b/docs/en/troubleshooting.md
@@ -0,0 +1,23 @@
+# Troubleshooting
+
+In this guide, you will learn how to fix known errors with this service.
+
+::: danger Could not open the database file. Maybe it is damaged?
+There can be several solutions to this error. Just work through all possibilities and your problem should be solved. :)
+
+1. **Set the required permissions**
+ To set the permissions, enter the command `chmod 700 /opt/myspeed`. (Replace /opt/myspeed with your installation location).
+
+2. **Install the build essentials**
+ It is currently possible that the error occurs because the `build-essential` package is not installed. Simply reinstall it with the command `sudo apt-get install build-essential`.
+
+3. **Perform a new installation of the modules**
+ First, enter the command `rm -R node_modules` in the installation folder to delete the modules and then reinstall them with `npm install`.
+ :::
+
+::: danger This MySpeed instance is currently in development mode
+This is not really an error, just a backup to use the tool only in production environments.
+Set the environment variable `NODE_ENV` to the value `production`.
+On Linux, you can do this with `export NODE_ENV=production` and on Windows in the PowerShell with `$env:NODE_ENV="production"`.
+Also, read the [guide for 24/7 installation](setup/linux) if you plan to run MySpeed in the background and start it automatically at system startup.
+:::
\ No newline at end of file
diff --git a/docs/faq.de.md b/docs/faq.de.md
deleted file mode 100644
index 03a590745..000000000
--- a/docs/faq.de.md
+++ /dev/null
@@ -1,55 +0,0 @@
-# Fragen & Antworten
-Hier beantworten wir dir die Fragen, die möglicherweise auftreten könnten.
-
-??? question "Wie installiere ich MySpeed?"
- Je nach Betriebssystem ist diese Anleitung unterschiedlich. Hier findest du die Anleitung für [Windows](../setup/windows) und [Linux](../setup/linux).
- Allerdings wird es stark empfohlen, MySpeed unter Linux zu installieren.
-
-??? question "Was sind die Anforderungen?"
- Es kommt darauf an, was für eine Bandbreite du hast. Bei Linux wäre es zum Beispiel so:
- Wenn du ein Maximum von 100 Mbit/s anliegen hast, dann reicht ein RaspberryPi 1 oder ein anderer alter Computer.
- Wenn du eine Gbit-Leitung hast, wäre schon ein Raspberry Pi 4 oder ein PC mit 1Gbit LAN Support wichtig.
-
-??? question "Kann ich trotz VPN MySpeed verwenden?"
- Solange du dein VPN Dienst nicht auf demselben System nutzt wie auf dem, wo MySpeed läuft, ist das kein Problem.
- Andernfalls kann dein VPN die Ergebnisse verfälschen bzw. nicht realistisch wiedergeben.
-
-??? question "Dienen diese Informationen als offizieller Nachweis für meinen Internetanbieter?"
- Nein. Die Speedtests müssen dann eigenhändig vom Speedtest deines Anbieters ausgeführt werden.
- MySpeed dient in dem Fall nur zu Informationszwecken und hat keinerlei rechtliche Garantien.
-
-??? question "Was kann die Speedtests beeinflussen?"
- Es gibt viele Faktoren, die die Geschwindigkeitstests beeinflussen können. Wenn Sie zum Beispiel viele Hintergrunddienste haben
- laufen, können diese die Ergebnisse beeinflussen. Am besten schalten Sie diese zu den jeweiligen Testzeiten ab, da sonst die
- Ergebnisse verfälscht werden könnten.
-
-??? question "Was passiert mit den alten Testergebnissen?"
- Die alten Testergebnisse werden automatisch gelöscht, sobald sie älter als 30 Tage sind.
-
-??? question "Muss es dauerhaft laufen?"
- Wir empfehlen es, um bessere Ergebnisse zu erhalten. Wenn es dich beim Filme streamen etc. stört,
- kannst du es auch über die Weboberfläche für eine bestimmte Zeit oder manuell pausieren.
- Bei einem 24/7 Betrieb empfehlen wir ein System, das nicht viel Watt benötigt. In dem Fall empfehlen wir ein Raspberry Pi.
- Solltest du bereits einen Server immer laufen haben, kannst du es auch dort parallel laufen lassen.
-
-??? question "Wie kann ich manuelle und automatische Speedtests unterscheiden?"
- Klicke bei dem jeweiligen Test auf das Uhrsymbol. Dort stehen alle Informationen zum Speedtest.
-
-??? question "Zeigt die Funktion "Optimale Werte" meine korrekte Bandbreite an?"
- Nein, das ist ein gerechneter Wert von deinen 10 letzten Speedtests. Die verfügbare Bandbreite wird in deinem Anschlussvertrag zu finden sein.
-
-??? question "Kann der Entwickler meine Testergebnisse einsehen?"
- Nein, die Testergebnisse sind nur lokal auf dem Server sichtbar.
-
-??? question "Warum sollte ich Häufigkeiten konfigurieren?"
- Das kommt sehr stark auf dein Internet an. Hast du beispielsweise ein sehr schlechtes Internet, so solltest du die Häufigkeit eher verringern. Ist dein Internet recht schnell, kannst du diese vergrößern. Auf dieser Basis werden dann je nachdem mehr oder weniger Tests gemacht.
-
- ???+ warning "Achtung"
- Es ist sehr wahrscheinlich, dass Hintergrunddienste deine Geschwindigkeiten beeinflussen. Schalte diese am besten bei den jeweiligen Testzeiten ab, da sonst dein Ergebnis manipuliert werden könnte.
-
-??? question "Wie setze ich mein Passwort zurück?"
- Du hast dein MySpeed-Passwort vergessen? Das passiert, kein Problem. Zum Zurücksetzen navigiere in den Installationsort (`cd /opt/myspeed`) und führe den folgenden Befehl aus:
- ```sh
- node -e "const {Sequelize} = require('sequelize');const db = new Sequelize({dialect: 'sqlite', storage: 'data/storage.db'});db.query('UPDATE config SET value=? WHERE key=?', {replacements: ['none', 'password']})"
- ```
- Dann kannst du die Seite erneut aufrufen und dein Passwort manuell festlegen :)
diff --git a/docs/faq.en.md b/docs/faq.en.md
deleted file mode 100644
index d9d24ec64..000000000
--- a/docs/faq.en.md
+++ /dev/null
@@ -1,61 +0,0 @@
-# Questions & Answers
-
-Here we answer the questions you might have.
-
-??? question "How do I install MySpeed?"
- Depending on your operating system these instructions are different. Here you can find the instructions
- for [Windows](../setup/windows) and [Linux](../setup/linux).
- However, it is strongly recommended to install MySpeed on Linux.
-
-??? question "What are the requirements?"
- It depends on what kind of bandwidth you have. For Linux, for example, it would be like this:
- If you have a maximum of 100 Mbps on, then a RaspberryPi 1 or any other old computer will do the trick.
- If you have a Gbit line, a Raspberry Pi 4 or a PC with 1Gbit LAN support would be important.
-
-??? question "Can I use MySpeed despite VPN?"
- As long as you don't use your VPN service on the same system as the one where MySpeed is running, it's not a problem.
- Otherwise, your VPN might distort the results or not reflect them realistically.
-
-??? question "Does this information serve as official proof for my ISP?"
- No. The speed tests have to be done by the speed test service of your provider.
- In this case MySpeed serves only for information purposes and has no legal guarantees.
-
-??? question "What can influence the speed tests?"
- There are many factors that can influence the speed tests. For example, if you have a lot of background services
- running, they can affect the results. It is best to turn them off at the respective test times, otherwise your
- results could be manipulated.
-
-??? question "What happens to the old test results?"
- The old test results are automatically deleted as soon as they are older than 30 days.
-
-??? question "Does it have to run permanently?"
- We recommend it to get better results. If it bothers you while streaming movies etc.,
- you can also pause it via the web interface for a certain time or manually.
- For 24/7 operation, we recommend a system that doesn't need a lot of watts. In this case we recommend a Raspberry Pi.
- If you already have a server running all the time, you can also run it there in parallel.
-
-??? question "How can I distinguish between manual and automatic speed tests?"
- Click on the clock symbol of the respective test. There you will find all information about the speed test.
-
-??? question "Does the "Recommendations" function show my correct bandwidth?"
- No, this is a calculated value from your last 10 speed tests. The available bandwidth will be found in your connection
- contract.
-
-??? question "Can the developer see my test results?"
- No, the test results are only visible locally on the server.
-
-??? question "Why should I configure frequencies?"
- It depends very much on your internet. For example, if you have a very bad internet, you should rather decrease the
- frequency. If your internet is quite fast, you can increase it. On this basis, more or less tests will be made,
- depending on the situation.
-
- ???+ warning "Attention"
- It is very likely that background services are affecting your speeds. It is best to turn them off at the respective test times, otherwise your results could be manipulated.
-
-??? question "How do I reset my password?"
- You forgot your MySpeed password? It happens, no problem. To reset it, navigate to the installation
- location (`cd /opt/myspeed`) and execute the following command:
- ```sh
- node -e "const {Sequelize} = require('sequelize');const db = new Sequelize({dialect: 'sqlite', storage: 'data/storage.db'});db.query('UPDATE config SET value=? WHERE key=?', {replacements: ['none', 'password']})"
- ```
- Then you can go to the page again and set your password manually :)
\ No newline at end of file
diff --git a/docs/guides/reverse-proxy.de.md b/docs/guides/reverse-proxy.de.md
deleted file mode 100644
index 378a9251c..000000000
--- a/docs/guides/reverse-proxy.de.md
+++ /dev/null
@@ -1,105 +0,0 @@
-# Konfiguration eines Reverse Proxies
-
-In diesem Guide wird erklärt, wie du mithilfe von `apache` oder `nginx` einen Reverse Proxy mit MySpeed einrichtest.
-
-!!! tip "Warum einen Reverse Proxy verwenden?"
- In diesem Fall verwenden wir einen Reverse Proxy als Zwischenschicht zwischen dir und MySpeed.
- Dies hat den Vorteil, dass du MySpeed nicht über einen Port aufrufen musst, sondern über eine normale Domain.
-
-## Installation
-Solltest du bereits einen Reverse Proxy installiert haben, kannst du diesen Schritt überspringen. Welchen der beiden
-Reverse Proxies du verwenden möchtest, ist dir überlassen. Wir empfehlen dir jedoch für diesen Guide `nginx`.
-
-=== "nginx"
- ```sh
- sudo apt-get install nginx -y
- ```
-
-=== "apache"
- ```sh
- sudo apt-get install apache2 -y
- ```
-
-## Konfiguration von MySpeed
-
-In diesem Abschnitt wird erklärt, wie du MySpeed mit deinem Reverse Proxy verbindest. Wähle hier auch wieder aus,
-welchen Reverse Proxy du verwendet hast.
-
-=== "nginx"
- Erstelle nun eine Datei mit dem Namen `myspeed.conf` unter `/etc/nginx/sites-available`. Hier verwenden wir `nano`
- ```sh
- sudo nano /etc/nginx/sites-available/myspeed.conf
- ```
- Füge nun folgenden Inhalt in die Datei ein:
- ```nginx
- server {
- listen 80;
- listen [::]:80;
-
- server_name deine-domain.de;
-
- location / {
- proxy_pass http://localhost:5216;
- }
- }
- ```
- Nun musst du nur noch die Datei aktivieren und den Reverse Proxy neustarten.
- ```sh
- sudo ln -s /etc/nginx/sites-available/myspeed.conf /etc/nginx/sites-enabled/myspeed.conf
- sudo systemctl restart nginx
- ```
-
-=== "apache"
- Erstelle nun eine Datei mit dem Namen `myspeed.conf` unter `/etc/apache2/sites-available`. Hier verwenden wir `nano`
- ```sh
- sudo nano /etc/apache2/sites-available/myspeed.conf
- ```
- Füge nun folgenden Inhalt in die Datei ein:
- ```apache
-
- ServerName deine-domain.de
-
- ProxyPreserveHost On
- ProxyPass / http://localhost:5216/
- ProxyPassReverse / http://localhost:5216/
-
- ```
- Aktiviere nun die `mod_proxy` und `mod_proxy_http` Module.
- ```sh
- sudo a2enmod proxy
- sudo a2enmod proxy_http
- ```
- Nun musst du nur noch die Datei aktivieren und den Reverse Proxy neustarten.
- ```sh
- sudo a2ensite myspeed.conf
- sudo systemctl restart apache2
- ```
-
-## Konfiguration eines SSL Zertifikats mit Let's Encrypt
-
-In diesem Abschnitt wird erklärt, wie du ein SSL Zertifikat von Let's Encrypt für MySpeed einrichtest.
-
-!!! tip "Verwendest du Cloudflare?"
- Wenn du Cloudflare verwendest und nicht extra ein SSL Zertifikat von Let's Encrypt einrichten möchtest, kannst du
- auch einfach die Cloudflare Proxy Funktion aktivieren. Das genügt in den meisten Fällen vollkommen. Wenn du
- dich für den Cloudflare Proxy entscheidest, kannst du diesen Abschnitt überspringen.
-
-=== "nginx"
- Zuerst musst du Certbot installieren. Hierfür verwenden wir `apt`.
- ```sh
- sudo apt-get install certbot python3-certbot-nginx -y
- ```
- Nun musst du Certbot ausführen und die Domain angeben, für die du das Zertifikat einrichten möchtest.
- ```sh
- sudo certbot --nginx -d deine-domain.de
- ```
-
-=== "apache"
- Zuerst musst du Certbot installieren. Hierfür verwenden wir `apt`.
- ```sh
- sudo apt-get install certbot python3-certbot-apache -y
- ```
- Nun musst du Certbot ausführen und die Domain angeben, für die du das Zertifikat einrichten möchtest.
- ```sh
- sudo certbot --apache -d deine-domain.de
- ```
\ No newline at end of file
diff --git a/docs/guides/reverse-proxy.en.md b/docs/guides/reverse-proxy.en.md
deleted file mode 100644
index c2bc47f12..000000000
--- a/docs/guides/reverse-proxy.en.md
+++ /dev/null
@@ -1,103 +0,0 @@
-This guide explains how to set up a reverse proxy with MySpeed using `apache` or `nginx`.
-
-!!! tip "Why use a reverse proxy?"
- In this case we use a reverse proxy as an intermediate layer between you and MySpeed.
- This has the advantage that you don't have to call MySpeed via a port, but via a normal domain.
-
-## Installation
-If you already have a reverse proxy installed, you can skip this step. Which of the two
-reverse proxies you want to use is up to you. However, we recommend `nginx` for this guide.
-
-=== "nginx"
- ```sh
- sudo apt-get install nginx -y
- ```
-
-=== "apache"
- ```sh
- sudo apt-get install apache2 -y
- ```
-
-## Configuring MySpeed
-
-This section explains how to connect MySpeed to your reverse proxy. Again, select here
-which reverse proxy you used.
-
-=== "nginx"
- Now create a file named `myspeed.conf` under `/etc/nginx/sites-available`. Here we use `nano`
- ```sh
- sudo nano /etc/nginx/sites-available/myspeed.conf
- ```
- Now add the following content to the file:
- ```nginx
- server {
- listen 80;
- listen [::]:80;
-
- server_name your-domain.com;
-
- location / {
- proxy_pass http://localhost:5216;
- }
- }
- ```
- Now you just have to activate the file and restart the reverse proxy.
- ```sh
- sudo ln -s /etc/nginx/sites-available/myspeed.conf /etc/nginx/sites-enabled/myspeed.conf
- sudo systemctl restart nginx
- ```
-
-=== "apache"
- Now create a file named `myspeed.conf` under `/etc/apache2/sites-available`. Here we use `nano`
- ```sh
- sudo nano /etc/apache2/sites-available/myspeed.conf
- ```
- Now add the following content to the file:
- ```apache
-
- ServerName your-domain.com
-
- ProxyPreserveHost On
- ProxyPass / http://localhost:5216/
- ProxyPassReverse / http://localhost:5216/
-
- ```
- Now enable the `mod_proxy` and `mod_proxy_http` modules.
- ```sh
- sudo a2enmod proxy
- sudo a2enmod proxy_http
- ```
- Now you just have to activate the file and restart the reverse proxy.
- ```sh
- sudo a2ensite myspeed.conf
- sudo systemctl restart apache2
- ```
-
-## Configuring an SSL certificate with Let's Encrypt
-
-This section explains how to set up an SSL certificate from Let's Encrypt for MySpeed.
-
-!!! tip "Are you using Cloudflare?"
- If you use Cloudflare and don't want to set up an SSL certificate from Let's Encrypt, you can just use the
- simply activate the Cloudflare proxy function. This is sufficient in most cases. If you
- decide to use the Cloudflare proxy, you can skip this section.
-
-=== "nginx"
- First you need to install certbot. For this we use `apt`.
- ```sh
- sudo apt-get install certbot python3-certbot-nginx -y
- ```
- Now you need to run Certbot and specify the domain you want to set up the certificate for.
- ```sh
- sudo certbot --nginx -d your-domain.com
- ```
-
-=== "apache"
- First you need to install certbot. For this we use `apt`.
- ```sh
- sudo apt-get install certbot python3-certbot-apache -y
- ```
- Now you need to run Certbot and specify the domain you want to set up the certificate for.
- ```sh
- sudo certbot --apache -d your-domain.com
- ```
\ No newline at end of file
diff --git a/docs/index.de.md b/docs/index.de.md
deleted file mode 100644
index 66abfddce..000000000
--- a/docs/index.de.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# MySpeed Dokumentation
-
-In dieser Dokumentation wird dir erklärt, wie du MySpeed auf einem Server deiner Wahl installierst, einstellst und
-verwendest.
-
-!!! note ""
- Hast du noch einen Vorschlag oder einen Bug gefunden? Dann öffne doch
- ein [Issue](https://github.com/gnmyt/myspeed/issues) oder schreibe mir eine Nachricht
- auf [Discord (@GNM)](https://discord.com/users/386242172632170496)
-
-## Was ist das überhaupt?
-
-MySpeed ist eine Speedtest-Analyse-Software, welche die Geschwindigkeit deines Internets bis zu 30 Tage lang speichert.
-Das kann auch dann nützlich sein, wenn du wissen möchtest, wann dein Netzwerk möglicherweise Einbrüche hat oder wenn du
-überprüfen möchtest, ob dein Internet mit den gebuchten Werten aus deinem Vertrag übereinstimmt.
-
-Es wird empfohlen, die Software Zuhause zu installieren. Sie lässt sich selbstverständlich aber auch auf einem Server in
-einem Rechenzentrum installieren, falls du das möchtest. ;)
-
-## Wie funktioniert das?
-
-MySpeed erstellt jede Stunde automatisiert Tests, welche du dir in einem Dashboard dann ansehen kannst. Ist ein Test
-älter als 30 Tage, so wird er gelöscht, um das Dashboard übersichtlicher zu halten.
-
-## Was brauche ich?
-
-Zusammengefasst nur ein Gerät, welches in der Lage ist, **24/7** zu laufen und von **NodeJS** unterstützt wird. Dazu
-gehören unter anderem Windows, macOS oder Linux.
-
-Auch wenn es möglich ist, das System auf einem normalen Rechner zu installieren, wird es empfohlen, es auf einem Gerät
-zu installieren, welches wenig Strom verbraucht. Perfekt dafür geeignet wäre beispielsweise ein
-sogenannter [Raspberry Pi](https://www.raspberrypi.com/) oder andere [Mini-PCs](https://www.amazon.de/s?k=mini+pc).
-
-## :heart: Und ein großes Danke an ...
-
-- [Sierra Devoplers](https://sierra-dev.de/myspeed) für die dort erstellte Seite
-- [Ookla](https://www.ookla.com/) für die Testdaten und das großartige Testnetzwerk
-- [Alle Übersetzer](https://crowdin.com/project/myspeed) für das Anbieten in verschiedenen Sprachen
-- [Alle Mitwirkende](https://github.com/gnmyt/myspeed/graphs/contributors) für ihre Hilfe und die Arbeit in das Projekt
\ No newline at end of file
diff --git a/docs/index.en.md b/docs/index.en.md
deleted file mode 100644
index 9b58a2442..000000000
--- a/docs/index.en.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# MySpeed Documentation
-
-This documentation explains how to install, configure and use MySpeed on a server of your choice.
-
-!!! note ""
- Did you find another suggestion or bug? Then open an [Issue](https://github.com/gnmyt/myspeed/issues) or write me a
- message on [Discord (@GNM)](https://discord.com/users/386242172632170496)
-
-## What is it?
-
-MySpeed is a speed test analysis software that stores the speed of your internet for up to 30 days. This can also be
-useful if you want to know when your network might have drops or if you want to check if your internet matches the
-booked values from your contract.
-
-It is recommended to install the software at home. Of course, it can also be installed on a server in a data center, if
-you wish ;)
-
-## How does it work?
-
-MySpeed automatically creates tests every hour, which you can view in a dashboard. If a test is older than 30 days, it
-will be deleted to keep the dashboard clearer.
-
-## What do I need?
-
-In summary, just a device that is capable of running **24/7** and is supported by **NodeJS**. This includes Windows,
-macOS or Linux, among others.
-
-Even though it is possible to install the system on a normal computer, it is recommended to install it on a device that
-consumes little power. Perfect for this would be for example a so-called [Raspberry Pi](https://www.raspberrypi.com/) or
-other [Mini-PCs](https://www.amazon.de/s?k=mini+pc).
-
-## :heart: And a big thanks to ...
-
-- [Sierra Devoplers](https://sierra-dev.de/myspeed) for the page created there
-- [Ookla](https://www.ookla.com/) for the test data and the great test network
-- [All translators](https://crowdin.com/project/myspeed) for providing it in different languages
-- [All contributors](https://github.com/gnmyt/myspeed/graphs/contributors) for their help and work into the project
\ No newline at end of file
diff --git a/docs/instructions/main.de.md b/docs/instructions/main.de.md
deleted file mode 100644
index 7d8ba62dc..000000000
--- a/docs/instructions/main.de.md
+++ /dev/null
@@ -1,35 +0,0 @@
-# Die Oberfläche
-
-Die Oberfläche von MySpeed ist vom Grund auf so konzipiert, dass sie einfach zu bedienen ist. Um mögliche Verwirrungen
-jedoch zu vermeiden, wird alles hier noch einmal erklärt.
-
-## Die Oberfläche
-
-{: align="left" }
-
-Die Oberfläche von MySpeed ist in **3** Teile unterteilt.
-
-Der **erste** Teil ist der sogenannte Header und enthält einen direkten Zugriff auf die Einstellungen und das Starten
-eines Speedtests. Auf die Einstellungen wird [hier](../settings) genauer eingegangen.
-
-Im **zweiten** Teil wird immer der aktuellste Speedtest angezeigt.
-
-Der **dritte** Teil zeigt alle erstellten Speedtests an.
-
-
-
-## Letzter Test
-{align="left"}
-
-Dieses Teil zeigt immer den aktuellsten, also zuletzt erstellten Speedtest an. Klickt man auf ein Icon, öffnet sich
-das jeweilige Hilfe-Menü mit mehr Informationen
-
-
-
-## Übersicht aller Tests
-
-{align="left"}
-
-Hier lassen sich alle Tests anzeigen, die erstellt wurden. Es lässt sich jetzt auch auf die Uhr links klicken, um
-einen Dialog mit weiteren Informationen zu öffnen. Dieser Dialog zeigt nun weitere Informationen über den Test und
-bietet sogar die Möglichkeit, ihn direkt zu löschen (falls nötig).
diff --git a/docs/instructions/settings.de.md b/docs/instructions/settings.de.md
deleted file mode 100644
index 5bb6d5a24..000000000
--- a/docs/instructions/settings.de.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# Einstellungen
-
-{align="right"}
-
-Mit einem Klick auf das **Einstellungs-Icon :material-cog:** öffnet sich die Einstellungsseite. Du findest ein Beispiel
-dazu rechts.
-
-In diesem Menü lassen sich sowohl Einstellungen als auch Funktionen wie das Exportieren von Tests wiederfinden.
-
-Um das Design übersichtlicher zu gestalten, finden sich die Einstellungen bezogen auf das Internet in den ersten 4
-Zeilen.
-
-Alle Optionen, die sich auf Speedtests beziehen, sind im 2. Kasten zu finden. Hier kannst du z.B. die Häufigkeit der
-Tests einstellen oder einen Server auswählen.
-
-Im 3. Kasten findest du Einstellungen, die sich auf das Interface beziehen. Hier kannst du z.B. die Sprache ändern oder
-die Ansicht wechseln.
-
-
-
-## Internetbezogene Einstellungen
-
-Hierbei handelt es sich um Einstellungen, die sich auf dein optimales Internet beziehen.
-
-!!! tip "Was ist der Sinn dahinter?"
- MySpeed verwendet farbige Icons, um die Qualität deiner Internetverbindung zu symbolisieren. Gibst du in diesen
- Einstellungen das Internet deines Anbieters an, wird MySpeed dir anhand von Symbolen zeigen, ob dein Internet gut,
- mittelmäßig oder schlecht ist.
-
-=== ":material-tennis: Ping"
- Der Ping ist ein Wert, der die Dauer der Verbindung zwischen deinem Computer und dem Internet in **ms** anzeigt.
- Je schneller (also niedriger), desto besser.
-
-=== ":material-arrow-up: Up-Speed"
- Der Up-Speed ist die Geschwindigkeit, mit der dein Computer Daten sendet. Je höher der Wert, desto besser.
-
-=== ":material-arrow-down: Down-Speed"
- Der Down-Speed ist die Geschwindigkeit, mit der dein Computer Daten empfängt. Je höher der Wert, desto besser.
-
-=== ":material-auto-fix: Optimale Werte"
- Wenn du nicht weißt, welche Werte du hier eingeben sollst, kannst du diese Schaltfläche verwenden. MySpeed wird
- dann versuchen, die optimalen Werte für dich zu ermitteln.
-
-## Speedtest-Einstellungen
-
-=== ":material-server: Server wechseln"
- MySpeed sucht sich schon beim Start automatisch den nächsten Server aus. Solltest du allerdings einen näheren
- Server finden, kannst du diesen hier auswählen. Du kannst hierbei einen aus der Liste wählen oder eine ID eingeben.
- Mehr dazu erfährst du [hier](https://www.ookla.com/network)
-
-=== ":material-key: Passwort ändern"
- Ist deine MySpeed-Instanz öffentlich und du möchtest nicht, dass andere oder nur autorisierte Personen deine Internetgeschwindigkeit
- einsehen können? Dann kannst du hier MySpeed mit einem Passwort schützen, welches beim Besuch der Seite eingegeben werden muss.
-
-=== ":material-clock: Häufigkeit einstellen"
- Hier kannst du die Häufigkeit angeben, in der MySpeed deine Tests durchführt. Diese Einstellung kann gerade bei
- langsameren Verbindungen relevant sein.
-
-=== ":material-pause: Speedtests pausieren"
- Musst du gerade ein wichtiges Dokument hochladen und MySpeed beeinträchtigt deine Internetgeschwindigkeit sehr? Dann
- kannst du sie hier für eine bestimmte Zeit pausieren. Dies kann gerade bei langsamen Verbindungen relevant sein.
-
-=== ":material-webhook: Integrationen"
- {align="right"}
-
- MySpeed verwendet Integrationen, um dich zu benachrichtigen, wenn dein Internet ausfällt.
- Dabei hast du Dienste wie Discord, Telegram oder Gotify zur Auswahl. Möchtest du die Daten selbst verarbeiten, kannst du
- auch einen Webhook angeben und dir alle Events zuschicken lassen.
-
-## Interface-Einstellungen
-
-=== ":material-calendar-month: Zeitraum festlegen"
- Hier kannst du festlegen, wie viele Tests dir im angegebenen Zeitraum angezeigt werden. Dabei kannst du auswählen zwischen den
- letzten 24 und 48 Stunden sowie den letzten 7 oder 30 Tagen. Wählst du eines der beiden letzten aus, so werden dir Durchschnitte
- angezeigt, um das Interface übersichtlich zu gestalten.
-
-=== ":material-file-export: Tests exportieren"
- Möchtest du mal sicher gehen und deine Tests auf deinen Computer laden? Dann kannst du hier deine Tests exportieren.
-
-=== ":material-globe-model: Sprache ändern"
- MySpeed ist derzeit in Deutsch und Englisch Sprachen verfügbar. Mit dieser Option kannst du die Sprache ändern.
- Möchtest du mitwirken und MySpeed in eine weitere Sprache übersetzen? Dann schau doch mal [hier](https://crowdin.com/project/myspeed).
-
-=== ":material-equalizer: Ansicht wechseln"
- {align="right"}
-
- MySpeed bietet dir zwei Ansichten an. Die erste ist die Standardansicht, die du bereits kennst. Die zweite ist die
- **Test-Statistik**. Hier werden dir alle Tests mithilfe von Widgets und Diagrammen angezeigt.
-
-=== ":material-information: Information"
- Dieser Bereich zeigt dir Informationen über deine MySpeed-Instanz. Nichts Wichtiges, einfach nur eine kleine Info. :)
\ No newline at end of file
diff --git a/docs/instructions/settings.en.md b/docs/instructions/settings.en.md
deleted file mode 100644
index d554e5d4b..000000000
--- a/docs/instructions/settings.en.md
+++ /dev/null
@@ -1,89 +0,0 @@
-# settings
-
-{align="right"}
-
-Clicking on the **settings-icon :material-cog:** opens the settings page. You can find an example
-on the right.
-
-In this menu you can find settings as well as functions like exporting tests.
-
-To make the design clearer, the settings related to the internet can be found in the first 4
-lines.
-
-All options related to speed tests can be found in the 2nd box. Here you can e.g. set the frequency of the
-tests or select a server.
-
-In the 3rd box you can find settings related to the interface. Here you can change the language or the view.
-change the view.
-
-
-
-## Internet related settings
-
-Here are settings that relate to your optimal Internet.
-
-!!! tip "What's the point?"
- MySpeed uses colored icons to symbolize the quality of your internet connection.
- If you enter these values here, MySpeed will show you by icons if your internet is good, medium or bad.
-
-=== ":material-tennis: Ping"
- The ping is a value that shows the duration of the connection between your computer and the internet in **ms**.
- The faster (i.e. lower), the better.
-
-=== ":material-arrow-up: Up-Speed"
- The up-speed is the speed at which your computer sends data. The higher the value, the better.
-
-=== ":material-arrow-down: Down-Speed"
- The down-speed is the speed at which your computer receives data. The higher the value, the better.
-
-=== ":material-auto-fix: Optimal values"
- If you don't know what values you should enter here, you can use this button. MySpeed will then try to determine the optimal values for you.
-
-## Speedtest settings
-
-=== ":material-server: Change server"
- MySpeed chooses the next server automatically at startup. But if you find a closer server,
- you can select it here. You can choose one from the list or enter an ID.
- You can read more about this [here](https://www.ookla.com/network)
-
-=== ":material-key: Change password"
- Is your MySpeed instance public and you don't want others or only authorized people to see your internet speed?
- Then you can protect MySpeed with a password here, which has to be entered when visiting the site.
-
-=== ":material-clock: Set frequency"
- Here you can set the frequency in which MySpeed performs your tests. This setting can be relevant for
- slower connections.
-
-=== ":material-pause: Pause speed tests"
- Do you have to upload an important document right now and MySpeed is affecting your internet speed a lot? Then
- you can pause it here for a certain time. This can be relevant especially for slow connections.
-
-=== ":material-webhook: Integrations"
- {align="right"}
-
- MySpeed uses integrations to notify you when your internet is down.
- You have services like Discord, Telegram or Gotify to choose from. If you want to process the data yourself, you can also specify a
- webhook and have all events sent to you.
-
-## Interface settings
-
-=== ":material-calendar-month: Set period"
- Here you can define how many tests will be displayed in the specified period. You can choose between
- the last 24 and 48 hours as well as the last 7 or 30 days. If you select one of the last two, you will be shown averages to make the
- to make the interface clearer.
-
-=== ":material-file-export: Export tests"
- Do you want to be sure and download your tests to your computer? Then you can export your tests here.
-
-=== ":material-globe-model: Change language"
- MySpeed is currently available in English and German languages. With this option you can change the language.
- Do you want to participate and translate MySpeed into another language? Then have a look [here](https://crowdin.com/project/myspeed).
-
-=== ":material-equalizer: Change view"
- {align="right"}
-
- MySpeed offers you two views. The first one is the default view you already know. The second one is the
- **Test Statistics**. Here you can see all tests with the help of widgets and diagrams.
-
-=== ":material-information: Information"
- This section shows you information about your MySpeed instance. Nothing important, just a little info. :)
\ No newline at end of file
diff --git a/docs/public/logo.png b/docs/public/logo.png
new file mode 100644
index 000000000..38cc2059c
Binary files /dev/null and b/docs/public/logo.png differ
diff --git a/docs/public/thumbnail.png b/docs/public/thumbnail.png
new file mode 100644
index 000000000..779e83adc
Binary files /dev/null and b/docs/public/thumbnail.png differ
diff --git a/docs/setup/linux.de.md b/docs/setup/linux.de.md
deleted file mode 100644
index 0aa3520bc..000000000
--- a/docs/setup/linux.de.md
+++ /dev/null
@@ -1,161 +0,0 @@
-# Einrichtung Linux
-Hier wird die Einrichtung für Linux beschrieben. MySpeed lässt sich über verschiedene Wege installieren.
-
-## Installation mit Docker
-!!! help "Hilfe"
- Du weißt nicht wie man Docker installiert? Dann schau dir mal [diese Anleitung](https://docs.docker.com/engine/install/#server) an
-
-=== "Stabile Version"
- ```sh
- docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed
- ```
-
-=== "Entwicklungsversion"
- ```sh
- docker run -d -p 5216:5216 -v myspeed:/myspeed/data --restart=unless-stopped --name MySpeed germannewsmaker/myspeed:development
- ```
-
-## Automatische Installation
-=== "Stabile Version"
- ```sh
- bash <(curl -sSL https://install.myspeed.dev)
- ```
-
-=== "Entwicklungsversion"
- ```sh
- curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/install.sh | bash -s -- --beta
- ```
-
-## Automatischer Deinstallationsprozess
-Keine Lust mehr? Du kannst MySpeed ganz einfach wieder entfernen. Entscheide hier, ob du deine Daten behalten oder löschen möchtest.
-
-!!! warning "Führe diese Befehle mit Bedacht aus"
- Das Ausführen der Befehle führt zur Löschung / Deinstallation von MySpeed. Sei dir bitte dessen bewusst.
-
-=== "Daten behalten"
- ```sh
- curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash -s -- --keep-data
- ```
-
-=== "Daten löschen"
- ```sh
- curl -sSL https://raw.githubusercontent.com/gnmyt/myspeed/development/scripts/uninstall.sh | bash
- ```
-
-## Manuelle Installation
-```sh
-sudo apt-get install wget curl unzip -y #(1)
-
-# Dies brauchst du nur ausführen, wenn du NodeJS noch nicht installiert hast
-curl -sSL https://deb.nodesource.com/setup_18.x | bash
-sudo apt-get install nodejs -y #(2)
-
-mkdir /opt/myspeed && cd /opt/myspeed #(3)
-
-wget $(curl -s https://api.github.com/repos/gnmyt/myspeed/releases/latest | grep browser_download_url | cut -d '"' -f 4) #(4)
-
-unzip MySpeed-*.zip && rm MySpeed-*.zip #(5)
-
-npm install #(6)
-
-NODE_ENV=production node server #(7)
-```
-
-1. Hier installierst du alle notwendigen Pakete, um das Projekt zu installieren.
-2. Dieser Schritt installiert die neuste Version von NodeJS.
-3. Erstelle nun den Ordner, in welchen du MySpeed installieren möchtest. In diesem Fall ist das der Ordner `/opt/myspeed`.
-4. Jetzt installierst du dir die neuste Version von MySpeed.
-5. Nun entpackst du die gerade heruntergeladene Datei (dann kannst du sie löschen)
-6. Installiere nun alle Abhängigkeiten.
-7. Jetzt wird MySpeed gestartet. MySpeed ist nun unter dem Port 5216 erreichbar.
- Wenn du planst, MySpeed im Hintergrund laufen zu lassen, dann schau dir den Guide dafür unten an.
-
-## MySpeed vom Source-Code installieren
-!!! warning "Achtung"
- Dieser Prozess installiert die neuste Entwicklungsversion von MySpeed. Fehler können auftreten.
-
-```sh
-sudo apt-get install git curl -y #(1)
-
-# Dies brauchst du nur ausführen, wenn du NodeJS noch nicht installiert hast
-curl -sSL https://deb.nodesource.com/setup_18.x | bash
-sudo apt-get install nodejs -y #(2)
-
-mkdir /opt/myspeed && cd /opt/myspeed #(3)
-
-git clone https://github.com/gnmyt/myspeed.git . #(4)
-
-npm install #(5)
-
-cd client && npm install && npm run build && cd .. && mv client/build . #(6)
-
-NODE_ENV=production node server #(7)
-```
-
-1. Hier installierst du alle notwendigen Pakete, um das Projekt zu installieren.
-2. Dieser Schritt installiert die neuste Version von NodeJS.
-3. Erstelle nun den Ordner, in welchen du MySpeed installieren möchtest. In diesem Fall ist das der Ordner `/opt/myspeed`.
-4. Klone nun das MySpeed Repository, um Zugriff auf den Code zu erhalten.
-5. Installiere nun alle Abhängigkeiten des Servers.
-6. Jetzt kompilierst du die Oberfläche von MySpeed und verschiebst sie in den Ordner wo MySpeed sie lesen kann.
-7. Jetzt wird MySpeed gestartet. MySpeed ist nun unter dem Port 5216 erreichbar.
- Wenn du planst, MySpeed im Hintergrund laufen zu lassen, dann schau dir den Guide dafür unten an.
-
-
-## MySpeed 24/7 installieren
-!!! warning "Wichtig"
- Du hast das Installationsskript verwendet? Dann brauchst du diesen Schritt gar nicht mehr ausführen.
-
-Die Installation als Systemdienst ist gar nicht mal so schwer. In diesem Fall nutzen wir `systemd`, weil es direkt in den meisten Linux-Distributionen integriert ist.
-
-1. Erstelle eine Datei mit dem Namen `myspeed.service` unter `/etc/systemd/system`. Hier verwenden wir `nano`
- ```sh
- nano /etc/systemd/system/myspeed.service
- ```
-
-2. Füge nun den Inhalt der Datei ein.
- ```ini linenums="1"
- [Unit]
- Description=MySpeed
- After=network.target
-
- [Service]
- Type=simple
- ExecStart=/usr/bin/node server
- Restart=always
- # \/ Es wird stark empfohlen, einen eigenen Nutzer hier zu erstellen
- User=root
- Environment=NODE_ENV=production
- # \/ Gib hier deinen Installationsort an
- WorkingDirectory=/opt/myspeed
-
- [Install]
- WantedBy=multi-user.target
- ```
-
-3. Speicher die Datei ab. Das variiert je nach Editor ein wenig
-
- === "Nano"
- `STRG` + `X`, dann `Y` und dann `Enter`
- === "Vim"
- Drücke `ESC`, gib dann `:wq` ein und drücke `Enter`
-
-4. Lade nun systemd neu
- ```sh
- systemctl daemon-reload
- ```
-
-5. Wenn du möchtest, dass MySpeed beim Systemstart hochfährt, gib diesen Befehl ein:
- ```sh
- systemctl enable myspeed
- ```
-
-6. Fertig! Nun kannst du MySpeed endlich starten.
- ```sh
- systemctl start myspeed
- ```
-
-7. Überprüfe jetzt noch am besten den Status von MySpeed
- ```sh
- systemctl status myspeed
- ```
diff --git a/docs/setup/windows.de.md b/docs/setup/windows.de.md
deleted file mode 100644
index 70fb3ed59..000000000
--- a/docs/setup/windows.de.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# Einrichtung Windows
-Hier wird die Einrichtung für Windows beschrieben.
-
-1. Lade NodeJS herunter
- Um MySpeed nutzen zu können, benötigst du zuerst **NodeJS**. Du kannst dir den Installer ganz einfach [hier](https://nodejs.org/de/download/) herunterladen. Empfohlen wird die LTS-Version 18 von NodeJS
-
-2. Lade MySpeed herunter
- Lade nun die neuste Version von MySpeed herunter. Du findest [hier](https://github.com/gnmyt/myspeed/releases/latest) den neusten Release. Lade dir hiervon die Datei "MySpeed-x.x.x-zip" herunter
-
-3. Entpacke die Datei
- Entpacke nun die gerade heruntergeladene Datei an einen Ort deiner Wahl. Am besten an einen Ort, den du nachher noch kennst 🌚
-
-4. Teste deine Installation
- Navigiere zuerst in den Ordner, in welchen du die Datei entpackt hast. Klicke mit `Shift` + `Rechtsklick` in einen leeren Bereich in diesem Ordner und wähle "In Powershell öffnen".
- Nun fügst du diesen Befehl in das Konsolenfenster ein und drückst `Enter`:
- ```sh
- npm install
- ```
-
- ??? warning "Schlägt die NPM-Installation fehl?"
- Es besteht die Möglichkeit, dass es für dein System keine vorkompilierten Module gibt. In diesem Fall musst du die Module selbst kompilieren.
- Folge dazu diesen Schritten:
-
- 1. Lade Python herunter
- Um das Projekt "bauen" zu können, musst du dir ebenfalls noch Python herunterladen. Dies kannst du [hier](https://www.python.org/downloads/).
-
- 2. Lade die Visual Studio BuildTools herunter
- Das Tool "node-gyp" benötigt ebenfalls die BuildTools von Visual Studio, um das Projekt erfolgreich "bauen" zu können. So funktioniert das:
- 1. Klicke [auf diesen Link](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=BuildTools) und warte kurz, bis der Download startet
- 2. Öffne die Datei und klicke "Fortfahren"
- 3. Wähle nun noch den optionalen Workload "Desktopentwicklung mit C++" aus und bestätige deine Auswahl mit einem Klick auf "Install"
- 3. Führe `npm install` erneut aus
- Wird alles erfolgreich ausgeführt, dann hast du alles richtig gemacht! Glückwunsch. :)
- Du kannst nun MySpeed mit diesem Befehl in deiner Powershell starten.
-
-5. MySpeed starten
- ```powershell
- $env:NODE_ENV="production"; node server
- ```
-
-## Automatisches hochfahren mithilfe des Autostartordners in Windows
-
-1. Öffne den Autostart-Ordner in Windows
- Drücke auf deiner Tastatur die beiden Tasten `Windows` + `R` gleichzeitig, bis ein Ausführen-Dialog erscheint. Gib dort dann `%USERPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup` ein und drücke `Enter`.
-
-2. Erstellen der Autostart-Datei
- Stelle zuerst sicher, dass du die [Dateinamenerweiterungen aktiv hast](https://support.microsoft.com/de-de/windows/allgemeine-dateierweiterungen-in-windows-da4a4430-8e76-89c5-59f7-1cdbbc75cb01). Ist das getan. Erstelle mit `Rechtsklick` > `Neu` > `Textdokument` ein neues Dokument.
- Drücke dann `STRG` + `A` und schreibe als Dateinamen "MySpeed.bat". Drücke dann 2 mal `Enter`
-
-3. Erstellen des Inhalts
- Mache einen Rechtsklick und wähle `Bearbeiten`. Füge dort dann den Code von unten ein und passe deinen Installationsort an.
- ```batch
- @echo off
- cd "C:\Users\Benutzer\Desktop\MySpeed"
- set NODE_ENV=production
- node server
- ```
-
-4. Hat alles funktioniert, sollte MySpeed nun automatisch beim Start des Systems ebenfalls hochfahren.
\ No newline at end of file
diff --git a/docs/troubleshooting.de.md b/docs/troubleshooting.de.md
deleted file mode 100644
index 8e5deec27..000000000
--- a/docs/troubleshooting.de.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Fehlerbehebung
-
-In diesem Guide erfährst du, wie du bekannte Fehler mit diesem Dienst behebst.
-
-??? failure "Could not open the database file. Maybe it is damaged?"
- Bei diesem Fehler kann es mehrere Lösungen geben. Arbeite einfach alle Möglichkeiten durch und dein Problem sollte gelöst sein. :)
-
- 1. Berechtigungen setzen
- Um die Berechtigungen zu setzen, gib den Befehl `chmod 700 /opt/myspeed` ein. (Ersetze /opt/myspeed mit deinem Installationsort)
-
- 2. Build Essentials Installieren
- Es ist aktuell möglich, dass der Fehler auftritt, weil das Paket `build-essential` nicht installiert ist. Installiere es ganz einfach mit dem Befehl `sudo apt-get install build-essential` nach.
-
- 3. Führe eine Neuinstallation der Module aus
- Gib zuerst den Befehl `rm -R node_modules` im Installationsordner ein, um die Module zu löschen und installiere sie dann mit `npm install` nach.
-
-??? failure "Diese MySpeed-Instanz befindet sich aktuell im Entwicklungsmodus"
- Das ist nicht wirklich ein Fehler, lediglich eine Sicherung um das Tool nur in Produktionsumgebungen verwenden zu können.
- Setze dazu die Umgebungsvariable `NODE_ENV` auf den Wert `production`.
- Unter Linux erreichst du das mit `export NODE_ENV=production` und unter Windows in der Powershell mit `$env:NODE_ENV="production"`
- Lies dir auch mal den [Guide zur 24/7 Installation](../setup/linux) durch,
- wenn du planst, MySpeed im Hintergrund laufen zu lassen und beim Systemstart automatisch hochzufahren.
\ No newline at end of file
diff --git a/docs/troubleshooting.en.md b/docs/troubleshooting.en.md
deleted file mode 100644
index bea35eba4..000000000
--- a/docs/troubleshooting.en.md
+++ /dev/null
@@ -1,22 +0,0 @@
-# Troubleshooting
-
-In this guide you will learn how to fix known errors with this service.
-
-??? failure "Could not open the database file. Maybe it is damaged?"
- There can be several solutions to this error. Just work through all possibilities and your problem should be solved. :)
-
- 1. Set the required permissions
- To set the permissions, enter the command `chmod 700 /opt/myspeed`. (Replace /opt/myspeed with your installation location).
-
- 2. Install the build essentials
- It is currently possible that the error occurs because the `build-essential` package is not installed. Simply reinstall it with the command `sudo apt-get install build-essential`.
-
- 3. Perform a new installation of the modules
- First enter the command `rm -R node_modules` in the installation folder to delete the modules and then reinstall them with `npm install`.
-
-??? failure "This MySpeed instance is currently in development mode"
- This is not really an error, just a backup to use the tool only in production environments.
- Set the environment variable `NODE_ENV` to the value `production`.
- On Linux you can do this with `export NODE_ENV=production` and on Windows in the Powershell with `$env:NODE_ENV="production"`.
- Also read the [guide for 24/7 installation](../setup/linux), if you plan to run MySpeed in the background and start it automatically
- at system startup.
\ No newline at end of file
diff --git a/mkdocs.yml b/mkdocs.yml
deleted file mode 100644
index 9fe6b2040..000000000
--- a/mkdocs.yml
+++ /dev/null
@@ -1,88 +0,0 @@
-site_name: MySpeed Documentation
-site_url: https://docs.myspeed.dev
-site_description: MySpeed is a self-hosted speedtest analysis software that stores the speed of your internet for up to 30 days.
-site_author: Mathias Wagner
-copyright: Copyright © 2021 - 2023 Mathias Wagner
-
-repo_name: MySpeed
-repo_url: https://github.com/gnmyt/myspeed
-edit_uri: https://github.com/gnmyt/myspeed/edit/development/docs
-
-plugins:
- - i18n:
- default_language: en
- languages:
- - locale: en
- default: true
- name: English
- - locale: de
- name: Deutsch
- nav_translations:
- Start: Startseite
- Frequently Asked Questions: Häufig gestellte Fragen
- Setup: Einrichtung
- Guides: Anleitungen
- Configuring a Reverse Proxy: Einrichten eines Reverse Proxys
- Troubleshooting: Fehlerbehebung
- Instructions: Anweisungen
- The Interface: Die Benutzeroberfläche
- Settings: Einstellungen
-
-theme:
- name: material
- logo: assets/images/logo.png
- features:
- - toc.integrate
- - content.code.annotate
- - content.code.copy
- favicon: assets/images/logo.png
- palette:
- - media: "(prefers-color-scheme: light)"
- schema: default
- primary: teal
- toggle:
- icon: material/brightness-7
- name: Switch to dark mode
- - media: "(prefers-color-scheme: dark)"
- scheme: slate
- primary: teal
- toggle:
- icon: material/brightness-4
- name: Switch to light mode
-
-extra:
- generator: false
- social:
- - icon: fontawesome/brands/github
- link: https://github.com/gnmyt/myspeed
- - icon: fontawesome/solid/heart
- link: https://ko-fi.com/gnmyt
- - icon: fontawesome/brands/twitter
- link: https://twitter.com/germannewsmaker
- - icon: fontawesome/brands/discord
- link: https://discord.com/users/386242172632170496
-
-markdown_extensions:
- - attr_list
- - md_in_html
- - admonition
- - pymdownx.details
- - pymdownx.superfences
- - pymdownx.tabbed:
- alternate_style: true
- - pymdownx.emoji:
- emoji_index: !!python/name:materialx.emoji.twemoji
- emoji_generator: !!python/name:materialx.emoji.to_svg
-
-nav:
- - Start: index.md
- - Frequently Asked Questions: faq.md
- - Setup:
- - Linux: setup/linux.md
- - Windows: setup/windows.md
- - Guides:
- - Configuring a Reverse Proxy: guides/reverse-proxy.md
- - Troubleshooting: troubleshooting.md
- - Instructions:
- - The Interface: instructions/main.md
- - Settings: instructions/settings.md
diff --git a/package-lock.json b/package-lock.json
index b6cc4c4bf..28d7f43fe 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -27,394 +27,1623 @@
},
"devDependencies": {
"concurrently": "^8.2.2",
- "nodemon": "^3.1.4"
+ "nodemon": "^3.1.4",
+ "vitepress": "^1.3.0"
}
},
- "node_modules/@babel/runtime": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
- "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "node_modules/@algolia/autocomplete-core": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz",
+ "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==",
"dev": true,
"dependencies": {
- "regenerator-runtime": "^0.13.11"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@algolia/autocomplete-plugin-algolia-insights": "1.9.3",
+ "@algolia/autocomplete-shared": "1.9.3"
}
},
- "node_modules/@gar/promisify": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
- "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
- "optional": true
- },
- "node_modules/@mapbox/node-pre-gyp": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
- "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+ "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz",
+ "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==",
+ "dev": true,
"dependencies": {
- "detect-libc": "^2.0.0",
- "https-proxy-agent": "^5.0.0",
- "make-dir": "^3.1.0",
- "node-fetch": "^2.6.7",
- "nopt": "^5.0.0",
- "npmlog": "^5.0.1",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
- "tar": "^6.1.11"
+ "@algolia/autocomplete-shared": "1.9.3"
},
- "bin": {
- "node-pre-gyp": "bin/node-pre-gyp"
+ "peerDependencies": {
+ "search-insights": ">= 1 < 3"
}
},
- "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "node_modules/@algolia/autocomplete-preset-algolia": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz",
+ "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==",
+ "dev": true,
"dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
+ "@algolia/autocomplete-shared": "1.9.3"
},
- "engines": {
- "node": ">=10"
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
}
},
- "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
- "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "node_modules/@algolia/autocomplete-shared": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz",
+ "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==",
+ "dev": true,
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/cache-browser-local-storage": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz",
+ "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==",
+ "dev": true,
"dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
- },
- "engines": {
- "node": ">=10"
+ "@algolia/cache-common": "4.24.0"
}
},
- "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
- "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "node_modules/@algolia/cache-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz",
+ "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==",
+ "dev": true
+ },
+ "node_modules/@algolia/cache-in-memory": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz",
+ "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==",
+ "dev": true,
"dependencies": {
- "abbrev": "1"
- },
- "bin": {
- "nopt": "bin/nopt.js"
- },
- "engines": {
- "node": ">=6"
+ "@algolia/cache-common": "4.24.0"
}
},
- "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "node_modules/@algolia/client-account": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz",
+ "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==",
+ "dev": true,
"dependencies": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/transporter": "4.24.0"
}
},
- "node_modules/@mapbox/node-pre-gyp/node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "node_modules/@algolia/client-analytics": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz",
+ "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==",
+ "dev": true,
"dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
}
},
- "node_modules/@npmcli/fs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
- "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
- "optional": true,
+ "node_modules/@algolia/client-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
+ "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
+ "dev": true,
"dependencies": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
}
},
- "node_modules/@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "optional": true,
+ "node_modules/@algolia/client-personalization": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz",
+ "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==",
+ "dev": true,
"dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
+ "@algolia/client-common": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "node_modules/@algolia/client-search": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
+ "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/client-common": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "node_modules/@algolia/logger-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz",
+ "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==",
+ "dev": true
+ },
+ "node_modules/@algolia/logger-console": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz",
+ "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/logger-common": "4.24.0"
+ }
+ },
+ "node_modules/@algolia/recommend": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz",
+ "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-browser-local-storage": "4.24.0",
+ "@algolia/cache-common": "4.24.0",
+ "@algolia/cache-in-memory": "4.24.0",
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/logger-common": "4.24.0",
+ "@algolia/logger-console": "4.24.0",
+ "@algolia/requester-browser-xhr": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/requester-node-http": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "node_modules/@algolia/requester-browser-xhr": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz",
+ "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/requester-common": "4.24.0"
+ }
+ },
+ "node_modules/@algolia/requester-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz",
+ "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==",
+ "dev": true
+ },
+ "node_modules/@algolia/requester-node-http": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz",
+ "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/requester-common": "4.24.0"
+ }
+ },
+ "node_modules/@algolia/transporter": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz",
+ "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-common": "4.24.0",
+ "@algolia/logger-common": "4.24.0",
+ "@algolia/requester-common": "4.24.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+ "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
},
"engines": {
- "node": ">=10"
+ "node": ">=6.0.0"
}
},
- "node_modules/@opentelemetry/api": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz",
- "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==",
+ "node_modules/@babel/runtime": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
+ "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
+ "dev": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.13.11"
+ },
"engines": {
- "node": ">=8.0.0"
+ "node": ">=6.9.0"
}
},
- "node_modules/@resvg/resvg-js": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz",
- "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==",
- "engines": {
- "node": ">= 10"
+ "node_modules/@docsearch/css": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz",
+ "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==",
+ "dev": true
+ },
+ "node_modules/@docsearch/js": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz",
+ "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==",
+ "dev": true,
+ "dependencies": {
+ "@docsearch/react": "3.6.0",
+ "preact": "^10.0.0"
+ }
+ },
+ "node_modules/@docsearch/react": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz",
+ "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/autocomplete-core": "1.9.3",
+ "@algolia/autocomplete-preset-algolia": "1.9.3",
+ "@docsearch/css": "3.6.0",
+ "algoliasearch": "^4.19.1"
},
- "optionalDependencies": {
- "@resvg/resvg-js-android-arm-eabi": "2.6.2",
- "@resvg/resvg-js-android-arm64": "2.6.2",
- "@resvg/resvg-js-darwin-arm64": "2.6.2",
- "@resvg/resvg-js-darwin-x64": "2.6.2",
- "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2",
- "@resvg/resvg-js-linux-arm64-gnu": "2.6.2",
- "@resvg/resvg-js-linux-arm64-musl": "2.6.2",
- "@resvg/resvg-js-linux-x64-gnu": "2.6.2",
- "@resvg/resvg-js-linux-x64-musl": "2.6.2",
- "@resvg/resvg-js-win32-arm64-msvc": "2.6.2",
- "@resvg/resvg-js-win32-ia32-msvc": "2.6.2",
- "@resvg/resvg-js-win32-x64-msvc": "2.6.2"
+ "peerDependencies": {
+ "@types/react": ">= 16.8.0 < 19.0.0",
+ "react": ">= 16.8.0 < 19.0.0",
+ "react-dom": ">= 16.8.0 < 19.0.0",
+ "search-insights": ">= 1 < 3"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ },
+ "search-insights": {
+ "optional": true
+ }
}
},
- "node_modules/@resvg/resvg-js-android-arm-eabi": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz",
- "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==",
+ "node_modules/@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
"cpu": [
- "arm"
+ "ppc64"
],
+ "dev": true,
"optional": true,
"os": [
- "android"
+ "aix"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-android-arm64": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz",
- "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==",
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
"cpu": [
- "arm64"
+ "arm"
],
+ "dev": true,
"optional": true,
"os": [
"android"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-darwin-arm64": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz",
- "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==",
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
- "darwin"
+ "android"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-darwin-x64": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz",
- "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==",
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
- "darwin"
+ "android"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz",
- "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==",
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
"cpu": [
- "arm"
+ "arm64"
],
+ "dev": true,
"optional": true,
"os": [
- "linux"
+ "darwin"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-linux-arm64-gnu": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz",
- "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==",
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
"cpu": [
- "arm64"
+ "x64"
],
+ "dev": true,
"optional": true,
"os": [
- "linux"
+ "darwin"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-linux-arm64-musl": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz",
- "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==",
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
"cpu": [
"arm64"
],
+ "dev": true,
"optional": true,
"os": [
- "linux"
+ "freebsd"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-linux-x64-gnu": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz",
- "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==",
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
"cpu": [
"x64"
],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
}
},
- "node_modules/@resvg/resvg-js-linux-x64-musl": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz",
- "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==",
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
"cpu": [
"x64"
],
+ "dev": true,
"optional": true,
"os": [
"linux"
],
"engines": {
- "node": ">= 10"
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@gar/promisify": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
+ "optional": true
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
+ },
+ "node_modules/@mapbox/node-pre-gyp": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
+ "dependencies": {
+ "detect-libc": "^2.0.0",
+ "https-proxy-agent": "^5.0.0",
+ "make-dir": "^3.1.0",
+ "node-fetch": "^2.6.7",
+ "nopt": "^5.0.0",
+ "npmlog": "^5.0.1",
+ "rimraf": "^3.0.2",
+ "semver": "^7.3.5",
+ "tar": "^6.1.11"
+ },
+ "bin": {
+ "node-pre-gyp": "bin/node-pre-gyp"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/are-we-there-yet": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
+ "dependencies": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^3.6.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/gauge": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
+ "dependencies": {
+ "aproba": "^1.0.3 || ^2.0.0",
+ "color-support": "^1.1.2",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.1",
+ "object-assign": "^4.1.1",
+ "signal-exit": "^3.0.0",
+ "string-width": "^4.2.3",
+ "strip-ansi": "^6.0.1",
+ "wide-align": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
+ "dependencies": {
+ "abbrev": "1"
+ },
+ "bin": {
+ "nopt": "bin/nopt.js"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/npmlog": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
+ "dependencies": {
+ "are-we-there-yet": "^2.0.0",
+ "console-control-strings": "^1.1.0",
+ "gauge": "^3.0.0",
+ "set-blocking": "^2.0.0"
+ }
+ },
+ "node_modules/@mapbox/node-pre-gyp/node_modules/readable-stream": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@npmcli/fs": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "optional": true,
+ "dependencies": {
+ "@gar/promisify": "^1.0.1",
+ "semver": "^7.3.5"
+ }
+ },
+ "node_modules/@npmcli/move-file": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "optional": true,
+ "dependencies": {
+ "mkdirp": "^1.0.4",
+ "rimraf": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@opentelemetry/api": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz",
+ "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@resvg/resvg-js": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz",
+ "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==",
+ "engines": {
+ "node": ">= 10"
+ },
+ "optionalDependencies": {
+ "@resvg/resvg-js-android-arm-eabi": "2.6.2",
+ "@resvg/resvg-js-android-arm64": "2.6.2",
+ "@resvg/resvg-js-darwin-arm64": "2.6.2",
+ "@resvg/resvg-js-darwin-x64": "2.6.2",
+ "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2",
+ "@resvg/resvg-js-linux-arm64-gnu": "2.6.2",
+ "@resvg/resvg-js-linux-arm64-musl": "2.6.2",
+ "@resvg/resvg-js-linux-x64-gnu": "2.6.2",
+ "@resvg/resvg-js-linux-x64-musl": "2.6.2",
+ "@resvg/resvg-js-win32-arm64-msvc": "2.6.2",
+ "@resvg/resvg-js-win32-ia32-msvc": "2.6.2",
+ "@resvg/resvg-js-win32-x64-msvc": "2.6.2"
+ }
+ },
+ "node_modules/@resvg/resvg-js-android-arm-eabi": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz",
+ "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-android-arm64": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz",
+ "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-darwin-arm64": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz",
+ "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-darwin-x64": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz",
+ "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz",
+ "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==",
+ "cpu": [
+ "arm"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-arm64-gnu": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz",
+ "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-arm64-musl": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz",
+ "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-x64-gnu": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz",
+ "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-linux-x64-musl": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz",
+ "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-win32-arm64-msvc": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz",
+ "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-win32-ia32-msvc": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz",
+ "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==",
+ "cpu": [
+ "ia32"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@resvg/resvg-js-win32-x64-msvc": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz",
+ "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==",
+ "cpu": [
+ "x64"
+ ],
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz",
+ "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz",
+ "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz",
+ "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz",
+ "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz",
+ "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz",
+ "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz",
+ "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz",
+ "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz",
+ "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz",
+ "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz",
+ "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz",
+ "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz",
+ "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz",
+ "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz",
+ "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz",
+ "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@shikijs/core": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz",
+ "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==",
+ "dev": true,
+ "dependencies": {
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "node_modules/@shikijs/transformers": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.10.3.tgz",
+ "integrity": "sha512-MNjsyye2WHVdxfZUSr5frS97sLGe6G1T+1P41QjyBFJehZphMcr4aBlRLmq6OSPBslYe9byQPVvt/LJCOfxw8Q==",
+ "dev": true,
+ "dependencies": {
+ "shiki": "1.10.3"
+ }
+ },
+ "node_modules/@shuding/opentype.js": {
+ "version": "1.4.0-beta.0",
+ "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz",
+ "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==",
+ "dependencies": {
+ "fflate": "^0.7.3",
+ "string.prototype.codepointat": "^0.2.1"
+ },
+ "bin": {
+ "ot": "bin/ot"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/@tootallnate/once": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
+ "optional": true,
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/@types/debug": {
+ "version": "4.1.8",
+ "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
+ "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
+ "dependencies": {
+ "@types/ms": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "node_modules/@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/unist": "*"
+ }
+ },
+ "node_modules/@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "dev": true
+ },
+ "node_modules/@types/markdown-it": {
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz",
+ "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==",
+ "dev": true,
+ "dependencies": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "node_modules/@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "dev": true
+ },
+ "node_modules/@types/ms": {
+ "version": "0.7.31",
+ "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
+ "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
+ },
+ "node_modules/@types/node": {
+ "version": "18.6.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz",
+ "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg=="
+ },
+ "node_modules/@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
+ "dev": true
+ },
+ "node_modules/@types/validator": {
+ "version": "13.7.17",
+ "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz",
+ "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ=="
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.20",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
+ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
+ "dev": true
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz",
+ "integrity": "sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==",
+ "dev": true,
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^5.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz",
+ "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/shared": "3.4.31",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz",
+ "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz",
+ "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.24.7",
+ "@vue/compiler-core": "3.4.31",
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.10",
+ "postcss": "^8.4.38",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz",
+ "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.5.tgz",
+ "integrity": "sha512-BSdBBu5hOIv+gBJC9jzYMh5bC27FQwjWLSb8fVAniqlL9gvsqvK27xTgczMf+hgctlszMYQnRm3bpY/j8vhPqw==",
+ "dev": true,
+ "dependencies": {
+ "@vue/devtools-kit": "^7.3.5"
+ }
+ },
+ "node_modules/@vue/devtools-kit": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.5.tgz",
+ "integrity": "sha512-wwfi10gJ1HMtjzcd8aIOnzBHlIRqsYDgcDyrKvkeyc0Gbcoe7UrkXRVHZUOtcxxoplHA0PwpT6wFg0uUCmi8Ww==",
+ "dev": true,
+ "dependencies": {
+ "@vue/devtools-shared": "^7.3.5",
+ "birpc": "^0.2.17",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.1"
+ }
+ },
+ "node_modules/@vue/devtools-shared": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.5.tgz",
+ "integrity": "sha512-Rqii3VazmWTi67a86rYopi61n5Ved05EybJCwyrfoO9Ok3MaS/4yRFl706ouoISMlyrASJFEzM0/AiDA6w4f9A==",
+ "dev": true,
+ "dependencies": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.31.tgz",
+ "integrity": "sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==",
+ "dev": true,
+ "dependencies": {
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.31.tgz",
+ "integrity": "sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==",
+ "dev": true,
+ "dependencies": {
+ "@vue/reactivity": "3.4.31",
+ "@vue/shared": "3.4.31"
}
},
- "node_modules/@resvg/resvg-js-win32-arm64-msvc": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz",
- "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==",
- "cpu": [
- "arm64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz",
+ "integrity": "sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==",
+ "dev": true,
+ "dependencies": {
+ "@vue/reactivity": "3.4.31",
+ "@vue/runtime-core": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "csstype": "^3.1.3"
}
},
- "node_modules/@resvg/resvg-js-win32-ia32-msvc": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz",
- "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==",
- "cpu": [
- "ia32"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
+ "node_modules/@vue/server-renderer": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.31.tgz",
+ "integrity": "sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31"
+ },
+ "peerDependencies": {
+ "vue": "3.4.31"
}
},
- "node_modules/@resvg/resvg-js-win32-x64-msvc": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz",
- "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==",
- "cpu": [
- "x64"
- ],
- "optional": true,
- "os": [
- "win32"
- ],
+ "node_modules/@vue/shared": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz",
+ "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==",
+ "dev": true
+ },
+ "node_modules/@vueuse/core": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.0.tgz",
+ "integrity": "sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==",
+ "dev": true,
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.20",
+ "@vueuse/metadata": "10.11.0",
+ "@vueuse/shared": "10.11.0",
+ "vue-demi": ">=0.14.8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/core/node_modules/vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
"engines": {
- "node": ">= 10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
}
},
- "node_modules/@shuding/opentype.js": {
- "version": "1.4.0-beta.0",
- "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz",
- "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==",
+ "node_modules/@vueuse/integrations": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.11.0.tgz",
+ "integrity": "sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==",
+ "dev": true,
"dependencies": {
- "fflate": "^0.7.3",
- "string.prototype.codepointat": "^0.2.1"
+ "@vueuse/core": "10.11.0",
+ "@vueuse/shared": "10.11.0",
+ "vue-demi": ">=0.14.8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
},
+ "peerDependencies": {
+ "async-validator": "^4",
+ "axios": "^1",
+ "change-case": "^4",
+ "drauu": "^0.3",
+ "focus-trap": "^7",
+ "fuse.js": "^6",
+ "idb-keyval": "^6",
+ "jwt-decode": "^3",
+ "nprogress": "^0.2",
+ "qrcode": "^1.5",
+ "sortablejs": "^1",
+ "universal-cookie": "^6"
+ },
+ "peerDependenciesMeta": {
+ "async-validator": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "change-case": {
+ "optional": true
+ },
+ "drauu": {
+ "optional": true
+ },
+ "focus-trap": {
+ "optional": true
+ },
+ "fuse.js": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "jwt-decode": {
+ "optional": true
+ },
+ "nprogress": {
+ "optional": true
+ },
+ "qrcode": {
+ "optional": true
+ },
+ "sortablejs": {
+ "optional": true
+ },
+ "universal-cookie": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/integrations/node_modules/vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "dev": true,
+ "hasInstallScript": true,
"bin": {
- "ot": "bin/ot"
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
},
"engines": {
- "node": ">= 8.0.0"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
}
},
- "node_modules/@tootallnate/once": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
- "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
- "optional": true,
- "engines": {
- "node": ">= 6"
+ "node_modules/@vueuse/metadata": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.0.tgz",
+ "integrity": "sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
}
},
- "node_modules/@types/debug": {
- "version": "4.1.8",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.8.tgz",
- "integrity": "sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==",
+ "node_modules/@vueuse/shared": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.0.tgz",
+ "integrity": "sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==",
+ "dev": true,
"dependencies": {
- "@types/ms": "*"
+ "vue-demi": ">=0.14.8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
}
},
- "node_modules/@types/ms": {
- "version": "0.7.31",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
- "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA=="
- },
- "node_modules/@types/node": {
- "version": "18.6.4",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz",
- "integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg=="
- },
- "node_modules/@types/validator": {
- "version": "13.7.17",
- "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz",
- "integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ=="
+ "node_modules/@vueuse/shared/node_modules/vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
},
"node_modules/abbrev": {
"version": "1.1.1",
@@ -524,6 +1753,29 @@
"node": ">=8"
}
},
+ "node_modules/algoliasearch": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz",
+ "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-browser-local-storage": "4.24.0",
+ "@algolia/cache-common": "4.24.0",
+ "@algolia/cache-in-memory": "4.24.0",
+ "@algolia/client-account": "4.24.0",
+ "@algolia/client-analytics": "4.24.0",
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-personalization": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/logger-common": "4.24.0",
+ "@algolia/logger-console": "4.24.0",
+ "@algolia/recommend": "4.24.0",
+ "@algolia/requester-browser-xhr": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/requester-node-http": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
"node_modules/ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -644,6 +1896,15 @@
"resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz",
"integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="
},
+ "node_modules/birpc": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz",
+ "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/bl": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
@@ -1012,6 +2273,21 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
+ "node_modules/copy-anything": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
+ "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+ "dev": true,
+ "dependencies": {
+ "is-what": "^4.1.8"
+ },
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -1061,6 +2337,12 @@
"postcss-value-parser": "^4.0.2"
}
},
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
+ },
"node_modules/date-fns": {
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
@@ -1329,6 +2611,18 @@
"once": "^1.4.0"
}
},
+ "node_modules/entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/entities?sponsor=1"
+ }
+ },
"node_modules/env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
@@ -1363,6 +2657,44 @@
"node": ">= 0.4"
}
},
+ "node_modules/esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -1377,6 +2709,12 @@
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
"node_modules/etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -1489,6 +2827,15 @@
"node": ">= 0.8"
}
},
+ "node_modules/focus-trap": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz",
+ "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
+ "dev": true,
+ "dependencies": {
+ "tabbable": "^6.2.0"
+ }
+ },
"node_modules/follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -1559,9 +2906,9 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"node_modules/fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
"optional": true,
@@ -1748,6 +3095,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "dev": true
+ },
"node_modules/http-cache-semantics": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
@@ -2023,6 +3376,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-what": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
+ "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.13"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mesqueeb"
+ }
+ },
"node_modules/isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -2085,6 +3450,15 @@
"node": ">=12"
}
},
+ "node_modules/magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
"node_modules/make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -2134,6 +3508,12 @@
"node": ">= 10"
}
},
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "dev": true
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -2291,6 +3671,12 @@
"node": ">=8"
}
},
+ "node_modules/minisearch": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz",
+ "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==",
+ "dev": true
+ },
"node_modules/minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -2303,6 +3689,12 @@
"node": ">= 8"
}
},
+ "node_modules/mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true
+ },
"node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -2399,6 +3791,24 @@
"node": ">=12"
}
},
+ "node_modules/nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
"node_modules/napi-build-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
@@ -2746,11 +4156,23 @@
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
+ "node_modules/perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "dev": true
+ },
"node_modules/pg-connection-string": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz",
"integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA=="
},
+ "node_modules/picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true
+ },
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -2784,10 +4206,38 @@
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dependencies": {
- "pinkie": "^2.0.0"
+ "pinkie": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
+ "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": "^10 || ^12 || >=14"
}
},
"node_modules/postcss-value-parser": {
@@ -2795,6 +4245,16 @@
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
+ "node_modules/preact": {
+ "version": "10.22.1",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz",
+ "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
"node_modules/prebuild-install": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -2998,6 +4458,12 @@
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz",
"integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA=="
},
+ "node_modules/rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -3012,6 +4478,41 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/rollup": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz",
+ "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "1.0.5"
+ },
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=18.0.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.18.1",
+ "@rollup/rollup-android-arm64": "4.18.1",
+ "@rollup/rollup-darwin-arm64": "4.18.1",
+ "@rollup/rollup-darwin-x64": "4.18.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.18.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.18.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.18.1",
+ "@rollup/rollup-linux-arm64-musl": "4.18.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.18.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.18.1",
+ "@rollup/rollup-linux-x64-gnu": "4.18.1",
+ "@rollup/rollup-linux-x64-musl": "4.18.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.18.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.18.1",
+ "@rollup/rollup-win32-x64-msvc": "4.18.1",
+ "fsevents": "~2.3.2"
+ }
+ },
"node_modules/rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -3078,6 +4579,13 @@
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz",
"integrity": "sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw=="
},
+ "node_modules/search-insights": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.15.0.tgz",
+ "integrity": "sha512-ch2sPCUDD4sbPQdknVl9ALSi9H7VyoeVbsxznYz6QV55jJ8CI3EtwpO1i84keN4+hF5IeHWIeGvc08530JkVXQ==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/seek-bzip": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
@@ -3276,6 +4784,16 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/shiki": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz",
+ "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==",
+ "dev": true,
+ "dependencies": {
+ "@shikijs/core": "1.10.3",
+ "@types/hast": "^3.0.4"
+ }
+ },
"node_modules/side-channel": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
@@ -3419,12 +4937,30 @@
"resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz",
"integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA=="
},
+ "node_modules/source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/spawn-command": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
"integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
"dev": true
},
+ "node_modules/speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
"node_modules/sqlite3": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz",
@@ -3539,6 +5075,18 @@
"node": ">=0.10.0"
}
},
+ "node_modules/superjson": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz",
+ "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==",
+ "dev": true,
+ "dependencies": {
+ "copy-anything": "^3.0.2"
+ },
+ "engines": {
+ "node": ">=16"
+ }
+ },
"node_modules/supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -3554,6 +5102,12 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
+ "node_modules/tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+ "dev": true
+ },
"node_modules/tar": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
@@ -3855,6 +5409,121 @@
"node": ">= 0.8"
}
},
+ "node_modules/vite": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
+ "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.21.3",
+ "postcss": "^8.4.39",
+ "rollup": "^4.13.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^18.0.0 || >=20.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/vitejs/vite?sponsor=1"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.3"
+ },
+ "peerDependencies": {
+ "@types/node": "^18.0.0 || >=20.0.0",
+ "less": "*",
+ "lightningcss": "^1.21.0",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "lightningcss": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitepress": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.0.tgz",
+ "integrity": "sha512-Cbm2AgXcCrukUeV+/24g1ZDSvw8blamh/1uf2pz3ApFpaYb9T7mo4imWDZ6APn2uPo4bJ6sgOzvsJ4aH+oLbBA==",
+ "dev": true,
+ "dependencies": {
+ "@docsearch/css": "^3.6.0",
+ "@docsearch/js": "^3.6.0",
+ "@shikijs/core": "^1.10.3",
+ "@shikijs/transformers": "^1.10.3",
+ "@types/markdown-it": "^14.1.1",
+ "@vitejs/plugin-vue": "^5.0.5",
+ "@vue/devtools-api": "^7.3.5",
+ "@vue/shared": "^3.4.31",
+ "@vueuse/core": "^10.11.0",
+ "@vueuse/integrations": "^10.11.0",
+ "focus-trap": "^7.5.4",
+ "mark.js": "8.11.1",
+ "minisearch": "^6.3.0",
+ "shiki": "^1.10.3",
+ "vite": "^5.3.3",
+ "vue": "^3.4.31"
+ },
+ "bin": {
+ "vitepress": "bin/vitepress.js"
+ },
+ "peerDependencies": {
+ "markdown-it-mathjax3": "^4",
+ "postcss": "^8"
+ },
+ "peerDependenciesMeta": {
+ "markdown-it-mathjax3": {
+ "optional": true
+ },
+ "postcss": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz",
+ "integrity": "sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-sfc": "3.4.31",
+ "@vue/runtime-dom": "3.4.31",
+ "@vue/server-renderer": "3.4.31",
+ "@vue/shared": "3.4.31"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
@@ -3987,14 +5656,392 @@
}
},
"dependencies": {
+ "@algolia/autocomplete-core": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz",
+ "integrity": "sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==",
+ "dev": true,
+ "requires": {
+ "@algolia/autocomplete-plugin-algolia-insights": "1.9.3",
+ "@algolia/autocomplete-shared": "1.9.3"
+ }
+ },
+ "@algolia/autocomplete-plugin-algolia-insights": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz",
+ "integrity": "sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==",
+ "dev": true,
+ "requires": {
+ "@algolia/autocomplete-shared": "1.9.3"
+ }
+ },
+ "@algolia/autocomplete-preset-algolia": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz",
+ "integrity": "sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==",
+ "dev": true,
+ "requires": {
+ "@algolia/autocomplete-shared": "1.9.3"
+ }
+ },
+ "@algolia/autocomplete-shared": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz",
+ "integrity": "sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "@algolia/cache-browser-local-storage": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.24.0.tgz",
+ "integrity": "sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==",
+ "dev": true,
+ "requires": {
+ "@algolia/cache-common": "4.24.0"
+ }
+ },
+ "@algolia/cache-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.24.0.tgz",
+ "integrity": "sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==",
+ "dev": true
+ },
+ "@algolia/cache-in-memory": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.24.0.tgz",
+ "integrity": "sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==",
+ "dev": true,
+ "requires": {
+ "@algolia/cache-common": "4.24.0"
+ }
+ },
+ "@algolia/client-account": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.24.0.tgz",
+ "integrity": "sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==",
+ "dev": true,
+ "requires": {
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "@algolia/client-analytics": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.24.0.tgz",
+ "integrity": "sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==",
+ "dev": true,
+ "requires": {
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "@algolia/client-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.24.0.tgz",
+ "integrity": "sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==",
+ "dev": true,
+ "requires": {
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "@algolia/client-personalization": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.24.0.tgz",
+ "integrity": "sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==",
+ "dev": true,
+ "requires": {
+ "@algolia/client-common": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "@algolia/client-search": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.24.0.tgz",
+ "integrity": "sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==",
+ "dev": true,
+ "requires": {
+ "@algolia/client-common": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "@algolia/logger-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.24.0.tgz",
+ "integrity": "sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==",
+ "dev": true
+ },
+ "@algolia/logger-console": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.24.0.tgz",
+ "integrity": "sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==",
+ "dev": true,
+ "requires": {
+ "@algolia/logger-common": "4.24.0"
+ }
+ },
+ "@algolia/recommend": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-4.24.0.tgz",
+ "integrity": "sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==",
+ "dev": true,
+ "requires": {
+ "@algolia/cache-browser-local-storage": "4.24.0",
+ "@algolia/cache-common": "4.24.0",
+ "@algolia/cache-in-memory": "4.24.0",
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/logger-common": "4.24.0",
+ "@algolia/logger-console": "4.24.0",
+ "@algolia/requester-browser-xhr": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/requester-node-http": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
+ "@algolia/requester-browser-xhr": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.24.0.tgz",
+ "integrity": "sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==",
+ "dev": true,
+ "requires": {
+ "@algolia/requester-common": "4.24.0"
+ }
+ },
+ "@algolia/requester-common": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.24.0.tgz",
+ "integrity": "sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==",
+ "dev": true
+ },
+ "@algolia/requester-node-http": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.24.0.tgz",
+ "integrity": "sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==",
+ "dev": true,
+ "requires": {
+ "@algolia/requester-common": "4.24.0"
+ }
+ },
+ "@algolia/transporter": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.24.0.tgz",
+ "integrity": "sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==",
+ "dev": true,
+ "requires": {
+ "@algolia/cache-common": "4.24.0",
+ "@algolia/logger-common": "4.24.0",
+ "@algolia/requester-common": "4.24.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.24.8",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz",
+ "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==",
+ "dev": true
+ },
"@babel/runtime": {
"version": "7.22.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz",
"integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==",
"dev": true,
- "requires": {
- "regenerator-runtime": "^0.13.11"
- }
+ "requires": {
+ "regenerator-runtime": "^0.13.11"
+ }
+ },
+ "@docsearch/css": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.6.0.tgz",
+ "integrity": "sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==",
+ "dev": true
+ },
+ "@docsearch/js": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.6.0.tgz",
+ "integrity": "sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==",
+ "dev": true,
+ "requires": {
+ "@docsearch/react": "3.6.0",
+ "preact": "^10.0.0"
+ }
+ },
+ "@docsearch/react": {
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.6.0.tgz",
+ "integrity": "sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==",
+ "dev": true,
+ "requires": {
+ "@algolia/autocomplete-core": "1.9.3",
+ "@algolia/autocomplete-preset-algolia": "1.9.3",
+ "@docsearch/css": "3.6.0",
+ "algoliasearch": "^4.19.1"
+ }
+ },
+ "@esbuild/aix-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
+ "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
+ "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
+ "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
+ "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
+ "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
+ "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
+ "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
+ "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
+ "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
+ "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
+ "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
+ "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
+ "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
+ "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
+ "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
+ "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
+ "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
+ "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
+ "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
+ "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
+ "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
+ "dev": true,
+ "optional": true
},
"@gar/promisify": {
"version": "1.1.3",
@@ -4002,6 +6049,12 @@
"integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
"optional": true
},
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
+ "dev": true
+ },
"@mapbox/node-pre-gyp": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
@@ -4190,6 +6243,136 @@
"integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==",
"optional": true
},
+ "@rollup/rollup-android-arm-eabi": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz",
+ "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-android-arm64": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz",
+ "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-arm64": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz",
+ "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-darwin-x64": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz",
+ "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz",
+ "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm-musleabihf": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz",
+ "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz",
+ "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-arm64-musl": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz",
+ "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-powerpc64le-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz",
+ "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz",
+ "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-s390x-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz",
+ "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-gnu": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz",
+ "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-linux-x64-musl": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz",
+ "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz",
+ "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz",
+ "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==",
+ "dev": true,
+ "optional": true
+ },
+ "@rollup/rollup-win32-x64-msvc": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz",
+ "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==",
+ "dev": true,
+ "optional": true
+ },
+ "@shikijs/core": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz",
+ "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==",
+ "dev": true,
+ "requires": {
+ "@types/hast": "^3.0.4"
+ }
+ },
+ "@shikijs/transformers": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-1.10.3.tgz",
+ "integrity": "sha512-MNjsyye2WHVdxfZUSr5frS97sLGe6G1T+1P41QjyBFJehZphMcr4aBlRLmq6OSPBslYe9byQPVvt/LJCOfxw8Q==",
+ "dev": true,
+ "requires": {
+ "shiki": "1.10.3"
+ }
+ },
"@shuding/opentype.js": {
"version": "1.4.0-beta.0",
"resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz",
@@ -4213,6 +6396,43 @@
"@types/ms": "*"
}
},
+ "@types/estree": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
+ "dev": true
+ },
+ "@types/hast": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz",
+ "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==",
+ "dev": true,
+ "requires": {
+ "@types/unist": "*"
+ }
+ },
+ "@types/linkify-it": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
+ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
+ "dev": true
+ },
+ "@types/markdown-it": {
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.1.tgz",
+ "integrity": "sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==",
+ "dev": true,
+ "requires": {
+ "@types/linkify-it": "^5",
+ "@types/mdurl": "^2"
+ }
+ },
+ "@types/mdurl": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
+ "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
+ "dev": true
+ },
"@types/ms": {
"version": "0.7.31",
"resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz",
@@ -4223,11 +6443,225 @@
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.6.4.tgz",
"integrity": "sha512-I4BD3L+6AWiUobfxZ49DlU43gtI+FTHSv9pE2Zekg6KjMpre4ByusaljW3vYSLJrvQ1ck1hUaeVu8HVlY3vzHg=="
},
+ "@types/unist": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz",
+ "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==",
+ "dev": true
+ },
"@types/validator": {
"version": "13.7.17",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.17.tgz",
"integrity": "sha512-aqayTNmeWrZcvnG2MG9eGYI6b7S5fl+yKgPs6bAjOTwPS316R5SxBGKvtSExfyoJU7pIeHJfsHI0Ji41RVMkvQ=="
},
+ "@types/web-bluetooth": {
+ "version": "0.0.20",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
+ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
+ "dev": true
+ },
+ "@vitejs/plugin-vue": {
+ "version": "5.0.5",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.0.5.tgz",
+ "integrity": "sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==",
+ "dev": true,
+ "requires": {}
+ },
+ "@vue/compiler-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.31.tgz",
+ "integrity": "sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.24.7",
+ "@vue/shared": "3.4.31",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.31.tgz",
+ "integrity": "sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-core": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.31.tgz",
+ "integrity": "sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.24.7",
+ "@vue/compiler-core": "3.4.31",
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.10",
+ "postcss": "^8.4.38",
+ "source-map-js": "^1.2.0"
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.31.tgz",
+ "integrity": "sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "@vue/devtools-api": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.3.5.tgz",
+ "integrity": "sha512-BSdBBu5hOIv+gBJC9jzYMh5bC27FQwjWLSb8fVAniqlL9gvsqvK27xTgczMf+hgctlszMYQnRm3bpY/j8vhPqw==",
+ "dev": true,
+ "requires": {
+ "@vue/devtools-kit": "^7.3.5"
+ }
+ },
+ "@vue/devtools-kit": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.3.5.tgz",
+ "integrity": "sha512-wwfi10gJ1HMtjzcd8aIOnzBHlIRqsYDgcDyrKvkeyc0Gbcoe7UrkXRVHZUOtcxxoplHA0PwpT6wFg0uUCmi8Ww==",
+ "dev": true,
+ "requires": {
+ "@vue/devtools-shared": "^7.3.5",
+ "birpc": "^0.2.17",
+ "hookable": "^5.5.3",
+ "mitt": "^3.0.1",
+ "perfect-debounce": "^1.0.0",
+ "speakingurl": "^14.0.1",
+ "superjson": "^2.2.1"
+ }
+ },
+ "@vue/devtools-shared": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.3.5.tgz",
+ "integrity": "sha512-Rqii3VazmWTi67a86rYopi61n5Ved05EybJCwyrfoO9Ok3MaS/4yRFl706ouoISMlyrASJFEzM0/AiDA6w4f9A==",
+ "dev": true,
+ "requires": {
+ "rfdc": "^1.4.1"
+ }
+ },
+ "@vue/reactivity": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.31.tgz",
+ "integrity": "sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==",
+ "dev": true,
+ "requires": {
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.31.tgz",
+ "integrity": "sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==",
+ "dev": true,
+ "requires": {
+ "@vue/reactivity": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.31.tgz",
+ "integrity": "sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==",
+ "dev": true,
+ "requires": {
+ "@vue/reactivity": "3.4.31",
+ "@vue/runtime-core": "3.4.31",
+ "@vue/shared": "3.4.31",
+ "csstype": "^3.1.3"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.31.tgz",
+ "integrity": "sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-ssr": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.31.tgz",
+ "integrity": "sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==",
+ "dev": true
+ },
+ "@vueuse/core": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.0.tgz",
+ "integrity": "sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==",
+ "dev": true,
+ "requires": {
+ "@types/web-bluetooth": "^0.0.20",
+ "@vueuse/metadata": "10.11.0",
+ "@vueuse/shared": "10.11.0",
+ "vue-demi": ">=0.14.8"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "@vueuse/integrations": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.11.0.tgz",
+ "integrity": "sha512-Pp6MtWEIr+NDOccWd8j59Kpjy5YDXogXI61Kb1JxvSfVBO8NzFQkmrKmSZz47i+ZqHnIzxaT38L358yDHTncZg==",
+ "dev": true,
+ "requires": {
+ "@vueuse/core": "10.11.0",
+ "@vueuse/shared": "10.11.0",
+ "vue-demi": ">=0.14.8"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
+ "@vueuse/metadata": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.0.tgz",
+ "integrity": "sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==",
+ "dev": true
+ },
+ "@vueuse/shared": {
+ "version": "10.11.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.0.tgz",
+ "integrity": "sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==",
+ "dev": true,
+ "requires": {
+ "vue-demi": ">=0.14.8"
+ },
+ "dependencies": {
+ "vue-demi": {
+ "version": "0.14.8",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.8.tgz",
+ "integrity": "sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==",
+ "dev": true,
+ "requires": {}
+ }
+ }
+ },
"abbrev": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -4309,6 +6743,29 @@
"indent-string": "^4.0.0"
}
},
+ "algoliasearch": {
+ "version": "4.24.0",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.24.0.tgz",
+ "integrity": "sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==",
+ "dev": true,
+ "requires": {
+ "@algolia/cache-browser-local-storage": "4.24.0",
+ "@algolia/cache-common": "4.24.0",
+ "@algolia/cache-in-memory": "4.24.0",
+ "@algolia/client-account": "4.24.0",
+ "@algolia/client-analytics": "4.24.0",
+ "@algolia/client-common": "4.24.0",
+ "@algolia/client-personalization": "4.24.0",
+ "@algolia/client-search": "4.24.0",
+ "@algolia/logger-common": "4.24.0",
+ "@algolia/logger-console": "4.24.0",
+ "@algolia/recommend": "4.24.0",
+ "@algolia/requester-browser-xhr": "4.24.0",
+ "@algolia/requester-common": "4.24.0",
+ "@algolia/requester-node-http": "4.24.0",
+ "@algolia/transporter": "4.24.0"
+ }
+ },
"ansi-regex": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
@@ -4396,6 +6853,12 @@
"resolved": "https://registry.npmjs.org/bintrees/-/bintrees-1.0.2.tgz",
"integrity": "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="
},
+ "birpc": {
+ "version": "0.2.17",
+ "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz",
+ "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==",
+ "dev": true
+ },
"bl": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz",
@@ -4672,6 +7135,15 @@
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
+ "copy-anything": {
+ "version": "3.0.5",
+ "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz",
+ "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==",
+ "dev": true,
+ "requires": {
+ "is-what": "^4.1.8"
+ }
+ },
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
@@ -4715,6 +7187,12 @@
"postcss-value-parser": "^4.0.2"
}
},
+ "csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
+ },
"date-fns": {
"version": "2.30.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
@@ -4922,6 +7400,12 @@
"once": "^1.4.0"
}
},
+ "entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
+ "dev": true
+ },
"env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
@@ -4947,6 +7431,37 @@
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="
},
+ "esbuild": {
+ "version": "0.21.5",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
+ "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
+ "dev": true,
+ "requires": {
+ "@esbuild/aix-ppc64": "0.21.5",
+ "@esbuild/android-arm": "0.21.5",
+ "@esbuild/android-arm64": "0.21.5",
+ "@esbuild/android-x64": "0.21.5",
+ "@esbuild/darwin-arm64": "0.21.5",
+ "@esbuild/darwin-x64": "0.21.5",
+ "@esbuild/freebsd-arm64": "0.21.5",
+ "@esbuild/freebsd-x64": "0.21.5",
+ "@esbuild/linux-arm": "0.21.5",
+ "@esbuild/linux-arm64": "0.21.5",
+ "@esbuild/linux-ia32": "0.21.5",
+ "@esbuild/linux-loong64": "0.21.5",
+ "@esbuild/linux-mips64el": "0.21.5",
+ "@esbuild/linux-ppc64": "0.21.5",
+ "@esbuild/linux-riscv64": "0.21.5",
+ "@esbuild/linux-s390x": "0.21.5",
+ "@esbuild/linux-x64": "0.21.5",
+ "@esbuild/netbsd-x64": "0.21.5",
+ "@esbuild/openbsd-x64": "0.21.5",
+ "@esbuild/sunos-x64": "0.21.5",
+ "@esbuild/win32-arm64": "0.21.5",
+ "@esbuild/win32-ia32": "0.21.5",
+ "@esbuild/win32-x64": "0.21.5"
+ }
+ },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -4958,6 +7473,12 @@
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
},
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
@@ -5052,6 +7573,15 @@
"unpipe": "~1.0.0"
}
},
+ "focus-trap": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz",
+ "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
+ "dev": true,
+ "requires": {
+ "tabbable": "^6.2.0"
+ }
+ },
"follow-redirects": {
"version": "1.15.6",
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
@@ -5096,9 +7626,9 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"optional": true
},
@@ -5224,6 +7754,12 @@
"resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz",
"integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw=="
},
+ "hookable": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz",
+ "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==",
+ "dev": true
+ },
"http-cache-semantics": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
@@ -5431,6 +7967,12 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ=="
},
+ "is-what": {
+ "version": "4.1.16",
+ "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz",
+ "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==",
+ "dev": true
+ },
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
@@ -5486,6 +8028,15 @@
"resolved": "https://registry.npmjs.org/luxon/-/luxon-3.2.1.tgz",
"integrity": "sha512-QrwPArQCNLAKGO/C+ZIilgIuDnEnKx5QYODdDtbFaxzsbZcc/a7WFq7MhsVYgRlwawLtvOUESTlfJ+hc/USqPg=="
},
+ "magic-string": {
+ "version": "0.30.10",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
+ "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
@@ -5525,6 +8076,12 @@
"ssri": "^8.0.0"
}
},
+ "mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "dev": true
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -5632,6 +8189,12 @@
"minipass": "^3.0.0"
}
},
+ "minisearch": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz",
+ "integrity": "sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==",
+ "dev": true
+ },
"minizlib": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
@@ -5641,6 +8204,12 @@
"yallist": "^4.0.0"
}
},
+ "mitt": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz",
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true
+ },
"mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
@@ -5714,6 +8283,12 @@
}
}
},
+ "nanoid": {
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
+ "dev": true
+ },
"napi-build-utils": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
@@ -5967,11 +8542,23 @@
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
"integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg=="
},
+ "perfect-debounce": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
+ "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
+ "dev": true
+ },
"pg-connection-string": {
"version": "2.6.2",
"resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz",
"integrity": "sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA=="
},
+ "picocolors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true
+ },
"picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
@@ -5996,11 +8583,28 @@
"pinkie": "^2.0.0"
}
},
+ "postcss": {
+ "version": "8.4.39",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz",
+ "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==",
+ "dev": true,
+ "requires": {
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.1",
+ "source-map-js": "^1.2.0"
+ }
+ },
"postcss-value-parser": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
},
+ "preact": {
+ "version": "10.22.1",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.22.1.tgz",
+ "integrity": "sha512-jRYbDDgMpIb5LHq3hkI0bbl+l/TQ9UnkdQ0ww+lp+4MMOdqaUYdFc5qeyP+IV8FAd/2Em7drVPeKdQxsiWCf/A==",
+ "dev": true
+ },
"prebuild-install": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -6167,6 +8771,12 @@
"resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz",
"integrity": "sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA=="
},
+ "rfdc": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
+ "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
+ "dev": true
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -6175,6 +8785,32 @@
"glob": "^7.1.3"
}
},
+ "rollup": {
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz",
+ "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==",
+ "dev": true,
+ "requires": {
+ "@rollup/rollup-android-arm-eabi": "4.18.1",
+ "@rollup/rollup-android-arm64": "4.18.1",
+ "@rollup/rollup-darwin-arm64": "4.18.1",
+ "@rollup/rollup-darwin-x64": "4.18.1",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.18.1",
+ "@rollup/rollup-linux-arm-musleabihf": "4.18.1",
+ "@rollup/rollup-linux-arm64-gnu": "4.18.1",
+ "@rollup/rollup-linux-arm64-musl": "4.18.1",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1",
+ "@rollup/rollup-linux-riscv64-gnu": "4.18.1",
+ "@rollup/rollup-linux-s390x-gnu": "4.18.1",
+ "@rollup/rollup-linux-x64-gnu": "4.18.1",
+ "@rollup/rollup-linux-x64-musl": "4.18.1",
+ "@rollup/rollup-win32-arm64-msvc": "4.18.1",
+ "@rollup/rollup-win32-ia32-msvc": "4.18.1",
+ "@rollup/rollup-win32-x64-msvc": "4.18.1",
+ "@types/estree": "1.0.5",
+ "fsevents": "~2.3.2"
+ }
+ },
"rxjs": {
"version": "7.8.1",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
@@ -6226,6 +8862,13 @@
"ultrahtml": "^1.2.0"
}
},
+ "search-insights": {
+ "version": "2.15.0",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.15.0.tgz",
+ "integrity": "sha512-ch2sPCUDD4sbPQdknVl9ALSi9H7VyoeVbsxznYz6QV55jJ8CI3EtwpO1i84keN4+hF5IeHWIeGvc08530JkVXQ==",
+ "dev": true,
+ "peer": true
+ },
"seek-bzip": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz",
@@ -6357,6 +9000,16 @@
"integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==",
"dev": true
},
+ "shiki": {
+ "version": "1.10.3",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz",
+ "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==",
+ "dev": true,
+ "requires": {
+ "@shikijs/core": "1.10.3",
+ "@types/hast": "^3.0.4"
+ }
+ },
"side-channel": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz",
@@ -6446,12 +9099,24 @@
"resolved": "https://registry.npmjs.org/sorted-array-functions/-/sorted-array-functions-1.3.0.tgz",
"integrity": "sha512-2sqgzeFlid6N4Z2fUQ1cvFmTOLRi/sEDzSQ0OKYchqgoPmQBVyM3959qYx3fpS6Esef80KjmpgPeEr028dP3OA=="
},
+ "source-map-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "dev": true
+ },
"spawn-command": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
"integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
"dev": true
},
+ "speakingurl": {
+ "version": "14.0.1",
+ "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz",
+ "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==",
+ "dev": true
+ },
"sqlite3": {
"version": "5.1.7",
"resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz",
@@ -6541,6 +9206,15 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ=="
},
+ "superjson": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz",
+ "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==",
+ "dev": true,
+ "requires": {
+ "copy-anything": "^3.0.2"
+ }
+ },
"supports-color": {
"version": "8.1.1",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
@@ -6550,6 +9224,12 @@
"has-flag": "^4.0.0"
}
},
+ "tabbable": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz",
+ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+ "dev": true
+ },
"tar": {
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
@@ -6801,6 +9481,55 @@
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
},
+ "vite": {
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz",
+ "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==",
+ "dev": true,
+ "requires": {
+ "esbuild": "^0.21.3",
+ "fsevents": "~2.3.3",
+ "postcss": "^8.4.39",
+ "rollup": "^4.13.0"
+ }
+ },
+ "vitepress": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.3.0.tgz",
+ "integrity": "sha512-Cbm2AgXcCrukUeV+/24g1ZDSvw8blamh/1uf2pz3ApFpaYb9T7mo4imWDZ6APn2uPo4bJ6sgOzvsJ4aH+oLbBA==",
+ "dev": true,
+ "requires": {
+ "@docsearch/css": "^3.6.0",
+ "@docsearch/js": "^3.6.0",
+ "@shikijs/core": "^1.10.3",
+ "@shikijs/transformers": "^1.10.3",
+ "@types/markdown-it": "^14.1.1",
+ "@vitejs/plugin-vue": "^5.0.5",
+ "@vue/devtools-api": "^7.3.5",
+ "@vue/shared": "^3.4.31",
+ "@vueuse/core": "^10.11.0",
+ "@vueuse/integrations": "^10.11.0",
+ "focus-trap": "^7.5.4",
+ "mark.js": "8.11.1",
+ "minisearch": "^6.3.0",
+ "shiki": "^1.10.3",
+ "vite": "^5.3.3",
+ "vue": "^3.4.31"
+ }
+ },
+ "vue": {
+ "version": "3.4.31",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.31.tgz",
+ "integrity": "sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==",
+ "dev": true,
+ "requires": {
+ "@vue/compiler-dom": "3.4.31",
+ "@vue/compiler-sfc": "3.4.31",
+ "@vue/runtime-dom": "3.4.31",
+ "@vue/server-renderer": "3.4.31",
+ "@vue/shared": "3.4.31"
+ }
+ },
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
diff --git a/package.json b/package.json
index 1c245e2db..9034f1771 100644
--- a/package.json
+++ b/package.json
@@ -27,6 +27,7 @@
},
"devDependencies": {
"concurrently": "^8.2.2",
- "nodemon": "^3.1.4"
+ "nodemon": "^3.1.4",
+ "vitepress": "^1.3.0"
}
}