LeoMoulin/Backend/Leo #55
@ -20,16 +20,3 @@ jobs:
 | 
				
			|||||||
    - run: npm run build --if-present
 | 
					    - run: npm run build --if-present
 | 
				
			||||||
      name: build
 | 
					      name: build
 | 
				
			||||||
      working-directory: ./frontend
 | 
					      working-directory: ./frontend
 | 
				
			||||||
  Test-frontend:
 | 
					 | 
				
			||||||
    runs-on: ubuntu-latest
 | 
					 | 
				
			||||||
    steps:
 | 
					 | 
				
			||||||
    - uses: actions/checkout@v4
 | 
					 | 
				
			||||||
    - name: Use Node.js ${{ matrix.node-version }}
 | 
					 | 
				
			||||||
      uses: actions/setup-node@v3
 | 
					 | 
				
			||||||
      working-directory: ./frontend
 | 
					 | 
				
			||||||
    - run: npm ci
 | 
					 | 
				
			||||||
      name: clean install
 | 
					 | 
				
			||||||
      working-directory: ./frontend
 | 
					 | 
				
			||||||
    - run: npm run test:unit
 | 
					 | 
				
			||||||
      name: test
 | 
					 | 
				
			||||||
      working-directory: ./frontend
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										48
									
								
								Documents/JournalDeBord/29-02.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								Documents/JournalDeBord/29-02.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					# Journal de bord du 29 février
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Ce premier journal de bord permet d'initier une tendance a garder une trace des choix fait lors du dévelopement du
 | 
				
			||||||
 | 
					projet de génie logiciel. Ces journaux pourront alors être consultés par la suite, pour la rédaction du rapport.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Choix des technologies utilisées
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Backend: spring.io
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le backend est imposé, nous devons utiliser spring boots. La courbe d'aprentisage nous semble difficile mais après de
 | 
				
			||||||
 | 
					longues documentations nous commençons à comprendre son fonctionnement.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Frontend: Vue.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le frontend n'est pas imposé, nous devons utiliser javascript mais le choix du framework (si utilisé) est libre. Nous
 | 
				
			||||||
 | 
					avons pris la recomendation du cours: vue.js qui est un framework simple d'aprentisage et très performant.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### Librairies
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- **Vue3-toastify:** Nous avons opté pour l'utilisation d'une librarie de "notification". cette librairie permet 
 | 
				
			||||||
 | 
					d'afficher des notifications sur la page. Elle nous est utile autant pour l'application finale que pour le
 | 
				
			||||||
 | 
					dévelopement.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Database: postgresql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					C'est une base de données très efficace qui est déjà installé
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### VCS: Gitea
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					C'est une alternative a github mais self-hosted. Nous avons accés à un serveur sur lequel gitea est installé
 | 
				
			||||||
 | 
					(https://git.herisson.ovh/).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### CI/CD: Gitea Actions
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Gitea a récement implémenter l'équivalent de github actions dans gitea et qui est complètement compatible avec github
 | 
				
			||||||
 | 
					actions. Nous avons donc implémentés les test et build en continu lors des pr et merge. Lorsqu'un merge est fait avec la
 | 
				
			||||||
 | 
					branche master, le site est instentanément mis à jours (après une dernière verification du build et test) sur l'adresse
 | 
				
			||||||
 | 
					http://clyde.herisson.ovh pour le frontent et http://clyde.herisson.ovh/api pour le backend.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Répartition des taches
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Nous nous répartisons les taches par familiarité et préférences avec les différentes partie du projet.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Wiliam: Frontend visuel
 | 
				
			||||||
 | 
					- Anthony: Frontend technique
 | 
				
			||||||
 | 
					- Max: Backend Endpoints
 | 
				
			||||||
 | 
					- Léo: Backend Data
 | 
				
			||||||
							
								
								
									
										45
									
								
								Documents/JournalDeBord/i18n.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Documents/JournalDeBord/i18n.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					# Internationalization (i18n)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					L'un des critère du projet est de donner la possibilité aux utilisateur de choisir entre différentes
 | 
				
			||||||
 | 
					langues. Minimum 2 sont a implémenter, le français et l'anglais.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Intention 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					La gestion des langue au niveau backend peut sembler être une bonne idée aux premier abord car celà
 | 
				
			||||||
 | 
					permeterais de laisser la possibilité a différents frontend utilisant la meme api de traduction.
 | 
				
			||||||
 | 
					cependant, peu d'éléments venant de la base de données sont traduisible. Nous alons alors opter pour
 | 
				
			||||||
 | 
					une internationalization au niveau du frontend. Dans le cas ou un éléments venant du frontend
 | 
				
			||||||
 | 
					devrait être traduit, Il suffirait alors de le faire traduire par le frontend directement
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Implémentation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Le frontend va se voir équiper d'une collection de fonctions permettant la traduction. notament
 | 
				
			||||||
 | 
					`i18n(key: str) -> str` qui prendrait en entrée une "clé" identifiant la traduction à aller
 | 
				
			||||||
 | 
					chercher. Cette clé serait sous la forme : `<context>.<element>`. La fonctions retournera alors la
 | 
				
			||||||
 | 
					traduction du texte dans la langue choisie par l'utilisateur. cette langue sera stockée dans les
 | 
				
			||||||
 | 
					cookies pour qu'un utilisateur non enregistré puisse naviguer sur le site sans problèmes. Si
 | 
				
			||||||
 | 
					l'utilisateur est enregistré elle pourra également être ajouter à son profil pour que la langue soit
 | 
				
			||||||
 | 
					mise à jours lors de son prochain passage.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### Base de données de traduction
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Les traductions seront rassembler dans fichier txt. Une langue sera présente par fichier et une
 | 
				
			||||||
 | 
					traduction par ligne. (Ce format semble être utilisé par certaines librairies de spring. Malgré le
 | 
				
			||||||
 | 
					fait que nous ne l'utiliserons finalement pas, ce format semble efficace est facile à utilsier).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Chaque ligne commence par la clé. suivi immédiatement d'un "=". le contenu après ce égale est la
 | 
				
			||||||
 | 
					traduction jusqu'au égale.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Considérations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Il existe certainemnt des librairies prète à l'emploi de traduction mais celà semble être
 | 
				
			||||||
 | 
					  relativement simple à implémenter manuellement.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Dans l'éventualité où nous voudrions implémenter des éléments au milieu d'une traduction (example:
 | 
				
			||||||
 | 
					  Veuillez vérifier votre addresse mail: `tonitch@herisson.ovh` puis revenir sur le site!). Dans ce
 | 
				
			||||||
 | 
					  cas nous pouvons utiliser le regex et simplement renseigner ces éléments par \1, \2, \3, ... puis
 | 
				
			||||||
 | 
					  créer une fonction qui s'occuperais de remplacer ces éléments dans le texte avant de le mettre en
 | 
				
			||||||
 | 
					  avant.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Il ne devrait pas etre trop compliqué d'écrire un script qui vérifie que toutes les traductions
 | 
				
			||||||
 | 
					  sont présente dans tout les fichiers en vérifiant que toutes les clés d'un fichiers sont présente.
 | 
				
			||||||
@ -17,6 +17,7 @@ repositories {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
dependencies {
 | 
					dependencies {
 | 
				
			||||||
	implementation("org.springframework.boot:spring-boot-starter-jdbc")
 | 
						implementation("org.springframework.boot:spring-boot-starter-jdbc")
 | 
				
			||||||
 | 
						implementation("org.springframework.boot:spring-boot-starter-data-jpa")
 | 
				
			||||||
	implementation("org.springframework.boot:spring-boot-starter-mail")
 | 
						implementation("org.springframework.boot:spring-boot-starter-mail")
 | 
				
			||||||
	implementation("org.springframework.boot:spring-boot-starter-web")
 | 
						implementation("org.springframework.boot:spring-boot-starter-web")
 | 
				
			||||||
	implementation("org.springframework.boot:spring-boot-starter-data-jpa")
 | 
						implementation("org.springframework.boot:spring-boot-starter-data-jpa")
 | 
				
			||||||
 | 
				
			|||||||
@ -4,15 +4,15 @@ import org.springframework.web.bind.annotation.GetMapping;
 | 
				
			|||||||
import org.springframework.web.bind.annotation.CrossOrigin;
 | 
					import org.springframework.web.bind.annotation.CrossOrigin;
 | 
				
			||||||
import org.springframework.web.bind.annotation.RestController;
 | 
					import org.springframework.web.bind.annotation.RestController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import ovh.herisson.Clyde.Ping;
 | 
					import ovh.herisson.Clyde.Responses.PingResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@RestController
 | 
					@RestController
 | 
				
			||||||
@CrossOrigin(origins = "http://localhost:5173")
 | 
					@CrossOrigin(origins = "http://localhost:5173")
 | 
				
			||||||
public class PingController {
 | 
					public class PingController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@GetMapping("/ping")
 | 
						@GetMapping("/ping")
 | 
				
			||||||
	public Ping ping(){
 | 
						public PingResponse ping(){
 | 
				
			||||||
		return new Ping(1, "pong");
 | 
							return new PingResponse(1, "pong");
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -34,16 +34,4 @@ public class JdbcConfig {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		return source;
 | 
							return source;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@Bean
 | 
					 | 
				
			||||||
	public WebMvcConfigurer corsConfigurer() {
 | 
					 | 
				
			||||||
		return new WebMvcConfigurer() {
 | 
					 | 
				
			||||||
			@Override
 | 
					 | 
				
			||||||
			public void addCorsMappings(CorsRegistry registry) {
 | 
					 | 
				
			||||||
				registry.addMapping("/greeting-javaconfig").allowedOrigins("*");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		};
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,3 +0,0 @@
 | 
				
			|||||||
package ovh.herisson.Clyde;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
public record Ping(int id, String txt){};
 | 
					 | 
				
			||||||
@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					package ovh.herisson.Clyde.Responses;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public record PingResponse(int id, String txt){};
 | 
				
			||||||
							
								
								
									
										192
									
								
								backend/src/main/resources/static/assets/index-BP8s9Pse.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								backend/src/main/resources/static/assets/index-BP8s9Pse.js
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										12
									
								
								backend/src/main/resources/static/index.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								backend/src/main/resources/static/index.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
				
			|||||||
 | 
					<!doctype html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
					  <head>
 | 
				
			||||||
 | 
					    <meta charset="UTF-8" />
 | 
				
			||||||
 | 
					    <title>Clyde's api</title>
 | 
				
			||||||
 | 
					    <script type="module" crossorigin src="assets/index-BP8s9Pse.js"></script>
 | 
				
			||||||
 | 
					    <link rel="stylesheet" crossorigin href="assets/index-rZb_qAw7.css">
 | 
				
			||||||
 | 
					  </head>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <div id="app"></div>
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										1897
									
								
								backend/src/main/resources/static/openapi.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1897
									
								
								backend/src/main/resources/static/openapi.yaml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -1,10 +1,9 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					<!DOCTYPE html>
 | 
				
			||||||
<html lang="en">
 | 
					<html>
 | 
				
			||||||
  <head>
 | 
					  <head>
 | 
				
			||||||
    <meta charset="UTF-8">
 | 
					    <meta charset="UTF-8">
 | 
				
			||||||
    <link rel="icon" href="/favicon.ico">
 | 
					    <link rel="icon" href="/favicon.ico">
 | 
				
			||||||
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | 
					    <title> Clyde 🪦</title>
 | 
				
			||||||
    <title>Vite App</title>
 | 
					 | 
				
			||||||
  </head>
 | 
					  </head>
 | 
				
			||||||
  <body>
 | 
					  <body>
 | 
				
			||||||
    <div id="app"></div>
 | 
					    <div id="app"></div>
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								frontend/login.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								frontend/login.html
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
				
			|||||||
 | 
					<!DOCTYPE html>
 | 
				
			||||||
 | 
					<html>
 | 
				
			||||||
 | 
						<head>
 | 
				
			||||||
 | 
							<meta charset="utf-8">
 | 
				
			||||||
 | 
							<title>Clyde - Login</title>
 | 
				
			||||||
 | 
						</head>
 | 
				
			||||||
 | 
						<body>
 | 
				
			||||||
 | 
							<div id="app"></div>
 | 
				
			||||||
 | 
							<script type=module src="/src/login.js"></script>
 | 
				
			||||||
 | 
						</body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
							
								
								
									
										632
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										632
									
								
								frontend/package-lock.json
									
									
									
										generated
									
									
									
								
							@ -15,8 +15,7 @@
 | 
				
			|||||||
        "@vitejs/plugin-vue": "^5.0.3",
 | 
					        "@vitejs/plugin-vue": "^5.0.3",
 | 
				
			||||||
        "@vue/test-utils": "^2.4.4",
 | 
					        "@vue/test-utils": "^2.4.4",
 | 
				
			||||||
        "jsdom": "^24.0.0",
 | 
					        "jsdom": "^24.0.0",
 | 
				
			||||||
        "vite": "^5.0.11",
 | 
					        "vite": "^5.0.11"
 | 
				
			||||||
        "vitest": "^1.2.2"
 | 
					 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@babel/parser": {
 | 
					    "node_modules/@babel/parser": {
 | 
				
			||||||
@ -415,18 +414,6 @@
 | 
				
			|||||||
        "node": ">=12"
 | 
					        "node": ">=12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@jest/schemas": {
 | 
					 | 
				
			||||||
      "version": "29.6.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@sinclair/typebox": "^0.27.8"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@jridgewell/sourcemap-codec": {
 | 
					    "node_modules/@jridgewell/sourcemap-codec": {
 | 
				
			||||||
      "version": "1.4.15",
 | 
					      "version": "1.4.15",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
 | 
				
			||||||
@ -617,12 +604,6 @@
 | 
				
			|||||||
        "win32"
 | 
					        "win32"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@sinclair/typebox": {
 | 
					 | 
				
			||||||
      "version": "0.27.8",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@types/estree": {
 | 
					    "node_modules/@types/estree": {
 | 
				
			||||||
      "version": "1.0.5",
 | 
					      "version": "1.0.5",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
 | 
				
			||||||
@ -642,75 +623,6 @@
 | 
				
			|||||||
        "vue": "^3.2.25"
 | 
					        "vue": "^3.2.25"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/@vitest/expect": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-7bWt0vBTZj08B+Ikv70AnLRicohYwFgzNjFqo9SxxqHHxSlUJGSXmCRORhOnRMisiUryKMdvsi1n27Bc6jL9DQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@vitest/spy": "1.3.0",
 | 
					 | 
				
			||||||
        "@vitest/utils": "1.3.0",
 | 
					 | 
				
			||||||
        "chai": "^4.3.10"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@vitest/runner": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-1Jb15Vo/Oy7mwZ5bXi7zbgszsdIBNjc4IqP8Jpr/8RdBC4nF1CTzIAn2dxYvpF1nGSseeL39lfLQ2uvs5u1Y9A==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@vitest/utils": "1.3.0",
 | 
					 | 
				
			||||||
        "p-limit": "^5.0.0",
 | 
					 | 
				
			||||||
        "pathe": "^1.1.1"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@vitest/snapshot": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-swmktcviVVPYx9U4SEQXLV6AEY51Y6bZ14jA2yo6TgMxQ3h+ZYiO0YhAHGJNp0ohCFbPAis1R9kK0cvN6lDPQA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "magic-string": "^0.30.5",
 | 
					 | 
				
			||||||
        "pathe": "^1.1.1",
 | 
					 | 
				
			||||||
        "pretty-format": "^29.7.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@vitest/spy": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-AkCU0ThZunMvblDpPKgjIi025UxR8V7MZ/g/EwmAGpjIujLVV2X6rGYGmxE2D4FJbAy0/ijdROHMWa2M/6JVMw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "tinyspy": "^2.2.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@vitest/utils": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-/LibEY/fkaXQufi4GDlQZhikQsPO2entBKtfuyIpr1jV4DpaeasqkeHjhdOhU24vSHshcSuEyVlWdzvv2XmYCw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "diff-sequences": "^29.6.3",
 | 
					 | 
				
			||||||
        "estree-walker": "^3.0.3",
 | 
					 | 
				
			||||||
        "loupe": "^2.3.7",
 | 
					 | 
				
			||||||
        "pretty-format": "^29.7.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/@vue/compiler-core": {
 | 
					    "node_modules/@vue/compiler-core": {
 | 
				
			||||||
      "version": "3.4.19",
 | 
					      "version": "3.4.19",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.19.tgz",
 | 
				
			||||||
@ -839,27 +751,6 @@
 | 
				
			|||||||
        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
 | 
					        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/acorn": {
 | 
					 | 
				
			||||||
      "version": "8.11.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "bin": {
 | 
					 | 
				
			||||||
        "acorn": "bin/acorn"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=0.4.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/acorn-walk": {
 | 
					 | 
				
			||||||
      "version": "8.3.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=0.4.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/agent-base": {
 | 
					    "node_modules/agent-base": {
 | 
				
			||||||
      "version": "7.1.0",
 | 
					      "version": "7.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
 | 
				
			||||||
@ -884,27 +775,6 @@
 | 
				
			|||||||
        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
 | 
					        "url": "https://github.com/chalk/ansi-regex?sponsor=1"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/ansi-styles": {
 | 
					 | 
				
			||||||
      "version": "5.2.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=10"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/assertion-error": {
 | 
					 | 
				
			||||||
      "version": "1.1.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "*"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/asynckit": {
 | 
					    "node_modules/asynckit": {
 | 
				
			||||||
      "version": "0.4.0",
 | 
					      "version": "0.4.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
 | 
				
			||||||
@ -926,45 +796,6 @@
 | 
				
			|||||||
        "balanced-match": "^1.0.0"
 | 
					        "balanced-match": "^1.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/cac": {
 | 
					 | 
				
			||||||
      "version": "6.7.14",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=8"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/chai": {
 | 
					 | 
				
			||||||
      "version": "4.4.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "assertion-error": "^1.1.0",
 | 
					 | 
				
			||||||
        "check-error": "^1.0.3",
 | 
					 | 
				
			||||||
        "deep-eql": "^4.1.3",
 | 
					 | 
				
			||||||
        "get-func-name": "^2.0.2",
 | 
					 | 
				
			||||||
        "loupe": "^2.3.6",
 | 
					 | 
				
			||||||
        "pathval": "^1.1.1",
 | 
					 | 
				
			||||||
        "type-detect": "^4.0.8"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=4"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/check-error": {
 | 
					 | 
				
			||||||
      "version": "1.0.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "get-func-name": "^2.0.2"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "*"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/color-convert": {
 | 
					    "node_modules/color-convert": {
 | 
				
			||||||
      "version": "2.0.1",
 | 
					      "version": "2.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
				
			||||||
@ -1081,18 +912,6 @@
 | 
				
			|||||||
      "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
 | 
					      "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/deep-eql": {
 | 
					 | 
				
			||||||
      "version": "4.1.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "type-detect": "^4.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=6"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/delayed-stream": {
 | 
					    "node_modules/delayed-stream": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
 | 
				
			||||||
@ -1102,15 +921,6 @@
 | 
				
			|||||||
        "node": ">=0.4.0"
 | 
					        "node": ">=0.4.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/diff-sequences": {
 | 
					 | 
				
			||||||
      "version": "29.6.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/eastasianwidth": {
 | 
					    "node_modules/eastasianwidth": {
 | 
				
			||||||
      "version": "0.2.0",
 | 
					      "version": "0.2.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
 | 
				
			||||||
@ -1190,38 +1000,6 @@
 | 
				
			|||||||
        "@esbuild/win32-x64": "0.19.12"
 | 
					        "@esbuild/win32-x64": "0.19.12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/estree-walker": {
 | 
					 | 
				
			||||||
      "version": "3.0.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@types/estree": "^1.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/execa": {
 | 
					 | 
				
			||||||
      "version": "8.0.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "cross-spawn": "^7.0.3",
 | 
					 | 
				
			||||||
        "get-stream": "^8.0.1",
 | 
					 | 
				
			||||||
        "human-signals": "^5.0.0",
 | 
					 | 
				
			||||||
        "is-stream": "^3.0.0",
 | 
					 | 
				
			||||||
        "merge-stream": "^2.0.0",
 | 
					 | 
				
			||||||
        "npm-run-path": "^5.1.0",
 | 
					 | 
				
			||||||
        "onetime": "^6.0.0",
 | 
					 | 
				
			||||||
        "signal-exit": "^4.1.0",
 | 
					 | 
				
			||||||
        "strip-final-newline": "^3.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=16.17"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sindresorhus/execa?sponsor=1"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/foreground-child": {
 | 
					    "node_modules/foreground-child": {
 | 
				
			||||||
      "version": "3.1.1",
 | 
					      "version": "3.1.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
 | 
				
			||||||
@ -1266,27 +1044,6 @@
 | 
				
			|||||||
        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
 | 
					        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/get-func-name": {
 | 
					 | 
				
			||||||
      "version": "2.0.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "*"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/get-stream": {
 | 
					 | 
				
			||||||
      "version": "8.0.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=16"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/glob": {
 | 
					    "node_modules/glob": {
 | 
				
			||||||
      "version": "10.3.10",
 | 
					      "version": "10.3.10",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
 | 
				
			||||||
@ -1347,15 +1104,6 @@
 | 
				
			|||||||
        "node": ">= 14"
 | 
					        "node": ">= 14"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/human-signals": {
 | 
					 | 
				
			||||||
      "version": "5.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=16.17.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/iconv-lite": {
 | 
					    "node_modules/iconv-lite": {
 | 
				
			||||||
      "version": "0.6.3",
 | 
					      "version": "0.6.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
 | 
				
			||||||
@ -1389,18 +1137,6 @@
 | 
				
			|||||||
      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
 | 
					      "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/is-stream": {
 | 
					 | 
				
			||||||
      "version": "3.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/isexe": {
 | 
					    "node_modules/isexe": {
 | 
				
			||||||
      "version": "2.0.0",
 | 
					      "version": "2.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
 | 
				
			||||||
@ -1455,12 +1191,6 @@
 | 
				
			|||||||
        "node": ">=14"
 | 
					        "node": ">=14"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/js-tokens": {
 | 
					 | 
				
			||||||
      "version": "8.0.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/jsdom": {
 | 
					    "node_modules/jsdom": {
 | 
				
			||||||
      "version": "24.0.0",
 | 
					      "version": "24.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.0.0.tgz",
 | 
				
			||||||
@ -1501,37 +1231,6 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/jsonc-parser": {
 | 
					 | 
				
			||||||
      "version": "3.2.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/local-pkg": {
 | 
					 | 
				
			||||||
      "version": "0.5.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "mlly": "^1.4.2",
 | 
					 | 
				
			||||||
        "pkg-types": "^1.0.3"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=14"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/antfu"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/loupe": {
 | 
					 | 
				
			||||||
      "version": "2.3.7",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "get-func-name": "^2.0.1"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/lru-cache": {
 | 
					    "node_modules/lru-cache": {
 | 
				
			||||||
      "version": "10.2.0",
 | 
					      "version": "10.2.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
 | 
				
			||||||
@ -1552,12 +1251,6 @@
 | 
				
			|||||||
        "node": ">=12"
 | 
					        "node": ">=12"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/merge-stream": {
 | 
					 | 
				
			||||||
      "version": "2.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/mime-db": {
 | 
					    "node_modules/mime-db": {
 | 
				
			||||||
      "version": "1.52.0",
 | 
					      "version": "1.52.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
 | 
				
			||||||
@ -1579,18 +1272,6 @@
 | 
				
			|||||||
        "node": ">= 0.6"
 | 
					        "node": ">= 0.6"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/mimic-fn": {
 | 
					 | 
				
			||||||
      "version": "4.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=12"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/minimatch": {
 | 
					    "node_modules/minimatch": {
 | 
				
			||||||
      "version": "9.0.1",
 | 
					      "version": "9.0.1",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz",
 | 
				
			||||||
@ -1615,18 +1296,6 @@
 | 
				
			|||||||
        "node": ">=16 || 14 >=14.17"
 | 
					        "node": ">=16 || 14 >=14.17"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/mlly": {
 | 
					 | 
				
			||||||
      "version": "1.5.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "acorn": "^8.11.3",
 | 
					 | 
				
			||||||
        "pathe": "^1.1.2",
 | 
					 | 
				
			||||||
        "pkg-types": "^1.0.3",
 | 
					 | 
				
			||||||
        "ufo": "^1.3.2"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/ms": {
 | 
					    "node_modules/ms": {
 | 
				
			||||||
      "version": "2.1.2",
 | 
					      "version": "2.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
				
			||||||
@ -1665,69 +1334,12 @@
 | 
				
			|||||||
        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
 | 
					        "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/npm-run-path": {
 | 
					 | 
				
			||||||
      "version": "5.2.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "path-key": "^4.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/npm-run-path/node_modules/path-key": {
 | 
					 | 
				
			||||||
      "version": "4.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=12"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/nwsapi": {
 | 
					    "node_modules/nwsapi": {
 | 
				
			||||||
      "version": "2.2.7",
 | 
					      "version": "2.2.7",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz",
 | 
				
			||||||
      "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
 | 
					      "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/onetime": {
 | 
					 | 
				
			||||||
      "version": "6.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "mimic-fn": "^4.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=12"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/p-limit": {
 | 
					 | 
				
			||||||
      "version": "5.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "yocto-queue": "^1.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=18"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/parse5": {
 | 
					    "node_modules/parse5": {
 | 
				
			||||||
      "version": "7.1.2",
 | 
					      "version": "7.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz",
 | 
				
			||||||
@ -1765,37 +1377,11 @@
 | 
				
			|||||||
        "url": "https://github.com/sponsors/isaacs"
 | 
					        "url": "https://github.com/sponsors/isaacs"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/pathe": {
 | 
					 | 
				
			||||||
      "version": "1.1.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/pathval": {
 | 
					 | 
				
			||||||
      "version": "1.1.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "*"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/picocolors": {
 | 
					    "node_modules/picocolors": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
 | 
					      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/pkg-types": {
 | 
					 | 
				
			||||||
      "version": "1.0.3",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "jsonc-parser": "^3.2.0",
 | 
					 | 
				
			||||||
        "mlly": "^1.2.0",
 | 
					 | 
				
			||||||
        "pathe": "^1.1.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/postcss": {
 | 
					    "node_modules/postcss": {
 | 
				
			||||||
      "version": "8.4.35",
 | 
					      "version": "8.4.35",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
 | 
				
			||||||
@ -1823,20 +1409,6 @@
 | 
				
			|||||||
        "node": "^10 || ^12 || >=14"
 | 
					        "node": "^10 || ^12 || >=14"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/pretty-format": {
 | 
					 | 
				
			||||||
      "version": "29.7.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@jest/schemas": "^29.6.3",
 | 
					 | 
				
			||||||
        "ansi-styles": "^5.0.0",
 | 
					 | 
				
			||||||
        "react-is": "^18.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/proto-list": {
 | 
					    "node_modules/proto-list": {
 | 
				
			||||||
      "version": "1.2.4",
 | 
					      "version": "1.2.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
 | 
				
			||||||
@ -1864,12 +1436,6 @@
 | 
				
			|||||||
      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
 | 
					      "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/react-is": {
 | 
					 | 
				
			||||||
      "version": "18.2.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/requires-port": {
 | 
					    "node_modules/requires-port": {
 | 
				
			||||||
      "version": "1.0.0",
 | 
					      "version": "1.0.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
 | 
				
			||||||
@ -1980,12 +1546,6 @@
 | 
				
			|||||||
        "node": ">=8"
 | 
					        "node": ">=8"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/siginfo": {
 | 
					 | 
				
			||||||
      "version": "2.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/signal-exit": {
 | 
					    "node_modules/signal-exit": {
 | 
				
			||||||
      "version": "4.1.0",
 | 
					      "version": "4.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
 | 
				
			||||||
@ -2006,18 +1566,6 @@
 | 
				
			|||||||
        "node": ">=0.10.0"
 | 
					        "node": ">=0.10.0"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/stackback": {
 | 
					 | 
				
			||||||
      "version": "0.0.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/std-env": {
 | 
					 | 
				
			||||||
      "version": "3.7.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/string-width": {
 | 
					    "node_modules/string-width": {
 | 
				
			||||||
      "version": "5.1.2",
 | 
					      "version": "5.1.2",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
 | 
				
			||||||
@ -2114,60 +1662,12 @@
 | 
				
			|||||||
        "node": ">=8"
 | 
					        "node": ">=8"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/strip-final-newline": {
 | 
					 | 
				
			||||||
      "version": "3.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=12"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/strip-literal": {
 | 
					 | 
				
			||||||
      "version": "2.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "js-tokens": "^8.0.2"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/antfu"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/symbol-tree": {
 | 
					    "node_modules/symbol-tree": {
 | 
				
			||||||
      "version": "3.2.4",
 | 
					      "version": "3.2.4",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",
 | 
				
			||||||
      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
 | 
					      "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/tinybench": {
 | 
					 | 
				
			||||||
      "version": "2.6.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/tinypool": {
 | 
					 | 
				
			||||||
      "version": "0.8.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=14.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/tinyspy": {
 | 
					 | 
				
			||||||
      "version": "2.2.1",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=14.0.0"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/tough-cookie": {
 | 
					    "node_modules/tough-cookie": {
 | 
				
			||||||
      "version": "4.1.3",
 | 
					      "version": "4.1.3",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz",
 | 
				
			||||||
@ -2195,21 +1695,6 @@
 | 
				
			|||||||
        "node": ">=18"
 | 
					        "node": ">=18"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/type-detect": {
 | 
					 | 
				
			||||||
      "version": "4.0.8",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=4"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/ufo": {
 | 
					 | 
				
			||||||
      "version": "1.4.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==",
 | 
					 | 
				
			||||||
      "dev": true
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/universalify": {
 | 
					    "node_modules/universalify": {
 | 
				
			||||||
      "version": "0.2.0",
 | 
					      "version": "0.2.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
 | 
				
			||||||
@ -2284,93 +1769,6 @@
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/vite-node": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-D/oiDVBw75XMnjAXne/4feCkCEwcbr2SU1bjAhCcfI5Bq3VoOHji8/wCPAfUkDIeohJ5nSZ39fNxM3dNZ6OBOA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "cac": "^6.7.14",
 | 
					 | 
				
			||||||
        "debug": "^4.3.4",
 | 
					 | 
				
			||||||
        "pathe": "^1.1.1",
 | 
					 | 
				
			||||||
        "picocolors": "^1.0.0",
 | 
					 | 
				
			||||||
        "vite": "^5.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "bin": {
 | 
					 | 
				
			||||||
        "vite-node": "vite-node.mjs"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^18.0.0 || >=20.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/vitest": {
 | 
					 | 
				
			||||||
      "version": "1.3.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.3.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-V9qb276J1jjSx9xb75T2VoYXdO1UKi+qfflY7V7w93jzX7oA/+RtYE6TcifxksxsZvygSSMwu2Uw6di7yqDMwg==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "@vitest/expect": "1.3.0",
 | 
					 | 
				
			||||||
        "@vitest/runner": "1.3.0",
 | 
					 | 
				
			||||||
        "@vitest/snapshot": "1.3.0",
 | 
					 | 
				
			||||||
        "@vitest/spy": "1.3.0",
 | 
					 | 
				
			||||||
        "@vitest/utils": "1.3.0",
 | 
					 | 
				
			||||||
        "acorn-walk": "^8.3.2",
 | 
					 | 
				
			||||||
        "chai": "^4.3.10",
 | 
					 | 
				
			||||||
        "debug": "^4.3.4",
 | 
					 | 
				
			||||||
        "execa": "^8.0.1",
 | 
					 | 
				
			||||||
        "local-pkg": "^0.5.0",
 | 
					 | 
				
			||||||
        "magic-string": "^0.30.5",
 | 
					 | 
				
			||||||
        "pathe": "^1.1.1",
 | 
					 | 
				
			||||||
        "picocolors": "^1.0.0",
 | 
					 | 
				
			||||||
        "std-env": "^3.5.0",
 | 
					 | 
				
			||||||
        "strip-literal": "^2.0.0",
 | 
					 | 
				
			||||||
        "tinybench": "^2.5.1",
 | 
					 | 
				
			||||||
        "tinypool": "^0.8.2",
 | 
					 | 
				
			||||||
        "vite": "^5.0.0",
 | 
					 | 
				
			||||||
        "vite-node": "1.3.0",
 | 
					 | 
				
			||||||
        "why-is-node-running": "^2.2.2"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "bin": {
 | 
					 | 
				
			||||||
        "vitest": "vitest.mjs"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": "^18.0.0 || >=20.0.0"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://opencollective.com/vitest"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "peerDependencies": {
 | 
					 | 
				
			||||||
        "@edge-runtime/vm": "*",
 | 
					 | 
				
			||||||
        "@types/node": "^18.0.0 || >=20.0.0",
 | 
					 | 
				
			||||||
        "@vitest/browser": "1.3.0",
 | 
					 | 
				
			||||||
        "@vitest/ui": "1.3.0",
 | 
					 | 
				
			||||||
        "happy-dom": "*",
 | 
					 | 
				
			||||||
        "jsdom": "*"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "peerDependenciesMeta": {
 | 
					 | 
				
			||||||
        "@edge-runtime/vm": {
 | 
					 | 
				
			||||||
          "optional": true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "@types/node": {
 | 
					 | 
				
			||||||
          "optional": true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "@vitest/browser": {
 | 
					 | 
				
			||||||
          "optional": true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "@vitest/ui": {
 | 
					 | 
				
			||||||
          "optional": true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "happy-dom": {
 | 
					 | 
				
			||||||
          "optional": true
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "jsdom": {
 | 
					 | 
				
			||||||
          "optional": true
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/vue": {
 | 
					    "node_modules/vue": {
 | 
				
			||||||
      "version": "3.4.19",
 | 
					      "version": "3.4.19",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.19.tgz",
 | 
				
			||||||
@ -2488,22 +1886,6 @@
 | 
				
			|||||||
        "node": ">= 8"
 | 
					        "node": ">= 8"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "node_modules/why-is-node-running": {
 | 
					 | 
				
			||||||
      "version": "2.2.2",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "dependencies": {
 | 
					 | 
				
			||||||
        "siginfo": "^2.0.0",
 | 
					 | 
				
			||||||
        "stackback": "0.0.2"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "bin": {
 | 
					 | 
				
			||||||
        "why-is-node-running": "cli.js"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=8"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/wrap-ansi": {
 | 
					    "node_modules/wrap-ansi": {
 | 
				
			||||||
      "version": "8.1.0",
 | 
					      "version": "8.1.0",
 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
 | 
				
			||||||
@ -2648,18 +2030,6 @@
 | 
				
			|||||||
      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
					      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
				
			||||||
      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 | 
					      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
 | 
				
			||||||
      "dev": true
 | 
					      "dev": true
 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "node_modules/yocto-queue": {
 | 
					 | 
				
			||||||
      "version": "1.0.0",
 | 
					 | 
				
			||||||
      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
 | 
					 | 
				
			||||||
      "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
 | 
					 | 
				
			||||||
      "dev": true,
 | 
					 | 
				
			||||||
      "engines": {
 | 
					 | 
				
			||||||
        "node": ">=12.20"
 | 
					 | 
				
			||||||
      },
 | 
					 | 
				
			||||||
      "funding": {
 | 
					 | 
				
			||||||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -6,8 +6,7 @@
 | 
				
			|||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "dev": "vite",
 | 
					    "dev": "vite",
 | 
				
			||||||
    "build": "vite build",
 | 
					    "build": "vite build",
 | 
				
			||||||
    "preview": "vite preview",
 | 
					    "preview": "vite preview"
 | 
				
			||||||
    "test:unit": "vitest"
 | 
					 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "vue": "^3.4.15",
 | 
					    "vue": "^3.4.15",
 | 
				
			||||||
@ -15,9 +14,7 @@
 | 
				
			|||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "@vitejs/plugin-vue": "^5.0.3",
 | 
					    "@vitejs/plugin-vue": "^5.0.3",
 | 
				
			||||||
    "@vue/test-utils": "^2.4.4",
 | 
					 | 
				
			||||||
    "jsdom": "^24.0.0",
 | 
					    "jsdom": "^24.0.0",
 | 
				
			||||||
    "vite": "^5.0.11",
 | 
					    "vite": "^5.0.11"
 | 
				
			||||||
    "vitest": "^1.2.2"
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 318 B  | 
							
								
								
									
										8
									
								
								frontend/public/i18n/EN.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								frontend/public/i18n/EN.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					# English translations (some examples to remove)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					login.guest.login=log in
 | 
				
			||||||
 | 
					login.guest.register=register
 | 
				
			||||||
 | 
					login.guest.welcome=Please Register here
 | 
				
			||||||
 | 
					login.success=You are now registered as $name 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#=====================================================
 | 
				
			||||||
							
								
								
									
										8
									
								
								frontend/public/i18n/FR.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								frontend/public/i18n/FR.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
				
			|||||||
 | 
					# Traductions françaises (Quelques examples a enlever)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					login.guest.login=s'identifier
 | 
				
			||||||
 | 
					login.guest.register=s'enregistrer
 | 
				
			||||||
 | 
					login.guest.welcome=Veuillez vous enregistrer ici
 | 
				
			||||||
 | 
					login.success=Vous êtes maintenant identifié comme $name 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#=====================================================
 | 
				
			||||||
@ -13,55 +13,102 @@
 | 
				
			|||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<template>
 | 
					<template>
 | 
				
			||||||
    <ul style="padding-top:60px"class="vertical">
 | 
					  <div class="container">
 | 
				
			||||||
        <li style="margin-top: 25px;" ><a href="#Messages"><item class="fa-solid fa-comment" style="font-size: 40px;" ></item>
 | 
					 | 
				
			||||||
            <div class="text">Messages</div> </a></li>
 | 
					 | 
				
			||||||
        <li ><a href="#Notifications"><item class="fa-solid fa-bell" style="font-size: 40px;" ></item>
 | 
					 | 
				
			||||||
            <div class="text">Notifications</div></a></li>
 | 
					 | 
				
			||||||
        <li ><a href="#Schedule"><item class="fa-solid fa-calendar-days" style="font-size: 40px;" ></item>
 | 
					 | 
				
			||||||
            <div class="text">Schedules</div></a></li>
 | 
					 | 
				
			||||||
        <li ><a href="#Forum"><item class="fa-solid fa-envelope" style="font-size: 40px;" ></item>
 | 
					 | 
				
			||||||
            <div class="text">Forum</div></a></li>
 | 
					 | 
				
			||||||
    </ul>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    <ul class="horizontal" style="box-shadow: 0px 3px 3px rgb(0, 0, 0);">
 | 
					    <div class="topBar">
 | 
				
			||||||
 | 
					      <ul class="horizontal">
 | 
				
			||||||
        <li title="Home">
 | 
					        <li title="Home">
 | 
				
			||||||
            <a href="#home">
 | 
					            <a href="#home">
 | 
				
			||||||
                <img @click="draw" src="./assets/Clyde.png" style="width: 40px; height: auto; margin-top:4px">
 | 
					                <img @click="draw" src="./assets/Clyde.png" style="width: 40px; height: auto; margin-top:4px">
 | 
				
			||||||
            </a>
 | 
					            </a></li>
 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
        <li title="Home">
 | 
					        <li title="Home">
 | 
				
			||||||
            <a href="#home">
 | 
					            <a href="#home">
 | 
				
			||||||
                <item class=" fa-solid fa-house" style="margin-top: 7px; margin-bottom: 3px;"></item>
 | 
					                <div class=" fa-solid fa-house" style="margin-top: 7px; margin-bottom: 3px;"></div>
 | 
				
			||||||
            </a>
 | 
					            </a></li>
 | 
				
			||||||
        </li>
 | 
					 | 
				
			||||||
        <li style="float: right;" title="Account">
 | 
					        <li style="float: right;" title="Account">
 | 
				
			||||||
            <a href="#Account"> 
 | 
					            <a href="/login">
 | 
				
			||||||
                <item class="fa-solid fa-user"  style="margin-top: 7px; margin-bottom: 3px;"></item>
 | 
					                <div class="fa-solid fa-user"  style="margin-top: 7px; margin-bottom: 3px;"></div>
 | 
				
			||||||
            </a></li>
 | 
					            </a></li>
 | 
				
			||||||
        <li style="float: right;" title="Notifications">
 | 
					        <li style="float: right;" title="Notifications">
 | 
				
			||||||
            <a href="#Notifications">
 | 
					            <a href="#Notifications">
 | 
				
			||||||
                <item class="fa-solid fa-bell"  style="margin-top: 7px; margin-bottom: 3px;"></item>
 | 
					                <div class="fa-solid fa-bell"  style="margin-top: 7px; margin-bottom: 3px;"></div>
 | 
				
			||||||
            </a></li>
 | 
					            </a></li>
 | 
				
			||||||
        <li style="float: right;" title="Options">
 | 
					        <li style="float: right;" title="Options">
 | 
				
			||||||
            <a href="#Options">
 | 
					            <a href="#Options">
 | 
				
			||||||
                <item  class="fa-solid fa-gear"  style="margin-top: 7px; margin-bottom: 3px;"></item>
 | 
					                <div  class="fa-solid fa-gear"  style="margin-top: 7px; margin-bottom: 3px;"></div>
 | 
				
			||||||
            </a></li>
 | 
					            </a></li>
 | 
				
			||||||
      </ul>
 | 
					      </ul>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <div class="leftBar">
 | 
				
			||||||
 | 
					    <ul class="vertical">
 | 
				
			||||||
 | 
					        <li style="margin-top: 25px;" >
 | 
				
			||||||
 | 
					          <a href="#Messages">
 | 
				
			||||||
 | 
					            <div class="fa-solid fa-comment" style="font-size: 40px;"></div>
 | 
				
			||||||
 | 
					            <div class="text">Messages</div>
 | 
				
			||||||
 | 
					          </a></li>
 | 
				
			||||||
 | 
					        <li >
 | 
				
			||||||
 | 
					          <a href="#Notifications">
 | 
				
			||||||
 | 
					            <div class="fa-solid fa-bell" style="font-size: 40px;" ></div>
 | 
				
			||||||
 | 
					            <div class="text">Notifications</div>
 | 
				
			||||||
 | 
					          </a></li>
 | 
				
			||||||
 | 
					        <li >
 | 
				
			||||||
 | 
					          <a href="#Schedule">
 | 
				
			||||||
 | 
					            <div class="fa-solid fa-calendar-days" style="font-size: 40px;"></div>
 | 
				
			||||||
 | 
					            <div class="text">Schedules</div>
 | 
				
			||||||
 | 
					          </a></li>
 | 
				
			||||||
 | 
					        <li ><a href="#Forum">
 | 
				
			||||||
 | 
					            <div class="fa-solid fa-envelope" style="font-size: 40px;" ></div>
 | 
				
			||||||
 | 
					            <div class="text">Forum</div></a></li>
 | 
				
			||||||
 | 
					    </ul>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="page">
 | 
				
			||||||
 | 
					      <div style="background-color: rgb(239,50,168); margin:50px;">Il FAUDRA INSERER LA PAGE ICI</div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
</template>
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<style scoped>
 | 
					<style scoped>
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					  .container{
 | 
				
			||||||
 | 
					    display:grid;
 | 
				
			||||||
 | 
					    grid-template-columns:[firstCol-start]70px[firstCol-end secondCol-start]auto[endCol];
 | 
				
			||||||
 | 
					    grid-template-rows:[firstRow-start]61px[firstRow-end secondRow-start] auto [endRow];
 | 
				
			||||||
 | 
					    grid-template-areas:
 | 
				
			||||||
 | 
					    "topBar topBar" 
 | 
				
			||||||
 | 
					    "leftBar page";
 | 
				
			||||||
 | 
					    row-gap:0px;
 | 
				
			||||||
 | 
					    column-gap:0px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .page {
 | 
				
			||||||
 | 
					    grid-area:page;
 | 
				
			||||||
 | 
					    place-self:center;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .topBar{
 | 
				
			||||||
 | 
					    grid-area:topBar;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  .leftBar{
 | 
				
			||||||
 | 
					    grid-area:leftBar;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ul.vertical{
 | 
						ul.vertical{
 | 
				
			||||||
		list-style-type: none;
 | 
							list-style-type: none;
 | 
				
			||||||
		margin: 0;
 | 
							margin-top: 61px;
 | 
				
			||||||
		padding: 0;
 | 
					    top:0;
 | 
				
			||||||
 | 
					    left:0;
 | 
				
			||||||
 | 
							padding: 25px 0 0;
 | 
				
			||||||
		width: 70px ;
 | 
							width: 70px ;
 | 
				
			||||||
		background-color: rgb(53, 53, 53);
 | 
							background-color: rgb(53, 53, 53);
 | 
				
			||||||
		border-right:5px;
 | 
							border-right:5px;
 | 
				
			||||||
		border-color:black;
 | 
							border-color:black;
 | 
				
			||||||
		height: 100%;
 | 
							height: 100%;
 | 
				
			||||||
		position: fixed;
 | 
							position: fixed;
 | 
				
			||||||
		overflow:auto;
 | 
							overflow:;
 | 
				
			||||||
		transition-duration: .3s;
 | 
							transition-duration: .3s;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -76,7 +123,6 @@
 | 
				
			|||||||
		background-color: rgb(112, 112, 112);
 | 
							background-color: rgb(112, 112, 112);
 | 
				
			||||||
		border-radius:6px;
 | 
							border-radius:6px;
 | 
				
			||||||
		color: white;
 | 
							color: white;
 | 
				
			||||||
		
 | 
					 | 
				
			||||||
		transform: translate(0px ,1px);
 | 
							transform: translate(0px ,1px);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -91,11 +137,14 @@
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	ul.horizontal {
 | 
						ul.horizontal {
 | 
				
			||||||
		z-index: 101;
 | 
							z-index: 101;
 | 
				
			||||||
 | 
					    box-shadow: 0px 3px 3px rgb(0, 0, 0);
 | 
				
			||||||
		display: block ;
 | 
							display: block ;
 | 
				
			||||||
		list-style-type:none;
 | 
							list-style-type:none;
 | 
				
			||||||
		margin:0;
 | 
							margin:0;
 | 
				
			||||||
		padding: 0;
 | 
							padding: 0;
 | 
				
			||||||
		top: 0; 
 | 
							top: 0; 
 | 
				
			||||||
 | 
					    left:0;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
		position: fixed;
 | 
							position: fixed;
 | 
				
			||||||
		height:61px;
 | 
							height:61px;
 | 
				
			||||||
		width: 100%;
 | 
							width: 100%;
 | 
				
			||||||
@ -121,7 +170,8 @@
 | 
				
			|||||||
	  ul.vertical:hover {
 | 
						  ul.vertical:hover {
 | 
				
			||||||
		z-index: 100;
 | 
							z-index: 100;
 | 
				
			||||||
		width: 250px;
 | 
							width: 250px;
 | 
				
			||||||
		border-radius: 40px;
 | 
							border-top-right-radius: 40px;
 | 
				
			||||||
 | 
					    box-shadow: 3px 0px 3px rgb(0, 0, 0);
 | 
				
			||||||
		transition-duration: .3s;
 | 
							transition-duration: .3s;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	  }
 | 
						  }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										105
									
								
								frontend/src/Login.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								frontend/src/Login.vue
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,105 @@
 | 
				
			|||||||
 | 
					<template>
 | 
				
			||||||
 | 
					  <body>
 | 
				
			||||||
 | 
					    <div class="logBoxCenterer">
 | 
				
			||||||
 | 
					      <div class='loginBox'>
 | 
				
			||||||
 | 
					        <div class="form">
 | 
				
			||||||
 | 
					          <h1 style="color:rgb(239,60,168); font-family: sans-serif;">SIGN IN</h1>
 | 
				
			||||||
 | 
					          <div class="inputBox">
 | 
				
			||||||
 | 
					            <p>USERNAME</p>
 | 
				
			||||||
 | 
					            <input type="text" required>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="inputBox">
 | 
				
			||||||
 | 
					            <p>PASSWORD</p>
 | 
				
			||||||
 | 
					            <input type="password" required>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="register">
 | 
				
			||||||
 | 
					            <a>Register</a>
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					          <div class="inputBox">
 | 
				
			||||||
 | 
					            <input type="submit" value="Login">
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </body>
 | 
				
			||||||
 | 
					</template>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<style scoped>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.logBoxCenterer {
 | 
				
			||||||
 | 
					  position: absolute;
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  height:  100%;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  align-items: center;
 | 
				
			||||||
 | 
					  justify-content: center; 
 | 
				
			||||||
 | 
					  overflow: hidden;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.loginBox {
 | 
				
			||||||
 | 
					  background-color: rgb(24,24,24);
 | 
				
			||||||
 | 
					  position : absolute;
 | 
				
			||||||
 | 
					  width: 400px;
 | 
				
			||||||
 | 
					  display:flex;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  padding: 40px;
 | 
				
			||||||
 | 
					  border-radius: 20px;
 | 
				
			||||||
 | 
					  box-shadow:0 5px 25px #000000;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					.form {
 | 
				
			||||||
 | 
					  position:relative;
 | 
				
			||||||
 | 
					  width:100%;
 | 
				
			||||||
 | 
					  display: flex;
 | 
				
			||||||
 | 
					  flex-direction: column;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  align-items:center;
 | 
				
			||||||
 | 
					  gap: 15px;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inputBox input {
 | 
				
			||||||
 | 
					  width:100%;
 | 
				
			||||||
 | 
					  background:rgb(255, 0 255);
 | 
				
			||||||
 | 
					  border: none;
 | 
				
			||||||
 | 
					  margin-right: 50px;
 | 
				
			||||||
 | 
					  padding-left: 10px;
 | 
				
			||||||
 | 
					  padding-top:10px;
 | 
				
			||||||
 | 
					  padding-bottom:10px;
 | 
				
			||||||
 | 
					  outline:none;
 | 
				
			||||||
 | 
					  border-radius: 4px;
 | 
				
			||||||
 | 
					  font-size:1.35em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.inputBox p{
 | 
				
			||||||
 | 
					  position:relative;
 | 
				
			||||||
 | 
					  z-index: 100;
 | 
				
			||||||
 | 
					  font-family:sans-serif ; 
 | 
				
			||||||
 | 
					  color:rgb(239,60,168);
 | 
				
			||||||
 | 
					  transition:0.5;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.register{
 | 
				
			||||||
 | 
					  color:rgb(239,60,168);
 | 
				
			||||||
 | 
					  width: 100%;
 | 
				
			||||||
 | 
					  align-items:center;
 | 
				
			||||||
 | 
					  display:flex;
 | 
				
			||||||
 | 
					  justify-content: center;
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type = "submit"] {
 | 
				
			||||||
 | 
					  background-color: rgb(239,60,168);
 | 
				
			||||||
 | 
					  cursor: pointer;
 | 
				
			||||||
 | 
					  padding:10px;
 | 
				
			||||||
 | 
					  font-size:1.35em;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					input[type = "submit"]:active{
 | 
				
			||||||
 | 
					  opacity:0.8;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					</style>
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB  | 
@ -2,4 +2,3 @@ body {
 | 
				
			|||||||
   background-color: rgb(53, 25, 60);
 | 
					   background-color: rgb(53, 25, 60);
 | 
				
			||||||
   margin:0;
 | 
					   margin:0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										84
									
								
								frontend/src/i18n.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								frontend/src/i18n.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,84 @@
 | 
				
			|||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Usage:
 | 
				
			||||||
 | 
					 * import i18n from './i18n.js'
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * console.log( i18n('parentcontext.childcontext.key', {user: username}) );
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * language is loaded from cookie: lang=XX
 | 
				
			||||||
 | 
					 * translations are loaded from /public/i18n/XX.txt
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const default_lang = "EN";
 | 
				
			||||||
 | 
					let langs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Fetch the translation from a key using the current language.
 | 
				
			||||||
 | 
					 * could also replace certain value of the form `$variable` by providing an object
 | 
				
			||||||
 | 
					 * with { variable: "value" }
 | 
				
			||||||
 | 
					 * @param key :string translation key (can be null)
 | 
				
			||||||
 | 
					 * @param options: Object element to replace in the translation
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @return :string The translated text
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function i18n(key, options) {
 | 
				
			||||||
 | 
						let ret = langs[key];
 | 
				
			||||||
 | 
						if(options != null){
 | 
				
			||||||
 | 
							for (let key in options) {
 | 
				
			||||||
 | 
								ret = ret.replaceAll("$" + key, options[key]);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ret;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function reloadLang(){
 | 
				
			||||||
 | 
						langs = await loadLangs();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					reloadLang();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default i18n;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// Those functions are utility functions use by previous exported functions.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Return the content of a cookie with specified key
 | 
				
			||||||
 | 
					 * @param key cookie name
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					function getCookie(key){
 | 
				
			||||||
 | 
						key = key + "="
 | 
				
			||||||
 | 
						let cookies = decodeURIComponent(document.cookie).split(";");
 | 
				
			||||||
 | 
						for (let el of cookies) {
 | 
				
			||||||
 | 
							el = el.trimStart();
 | 
				
			||||||
 | 
							if(el.indexOf(key) == 0){
 | 
				
			||||||
 | 
								return el.substr(key.length, el.length);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return "";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Function that load the file with translation from the specified lang and return a dictionnary
 | 
				
			||||||
 | 
					 * @param select the language to load. could be null to fetch the cookies for an answer
 | 
				
			||||||
 | 
					 * if nothing is found. default to EN.txt
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					async function loadLangs(lang){
 | 
				
			||||||
 | 
						lang = lang != null ? lang : getCookie("lang");
 | 
				
			||||||
 | 
						lang = lang != "" ? lang : default_lang;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						const filename = "./i18n/" + lang.toUpperCase() + ".txt";
 | 
				
			||||||
 | 
						const content = await (await fetch(filename)).text();
 | 
				
			||||||
 | 
						const lines = content.split("\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						let filteredLines = {};
 | 
				
			||||||
 | 
						for (let line of lines) {
 | 
				
			||||||
 | 
							if(!line.trim().startsWith("#") && line.trim() != ""){
 | 
				
			||||||
 | 
								let split = line.indexOf("=")
 | 
				
			||||||
 | 
								filteredLines[line.substr(0, split)] = line.substr(split+1, line.length);
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return filteredLines;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								frontend/src/login.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								frontend/src/login.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					import './assets/main.css'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import { createApp } from 'vue'
 | 
				
			||||||
 | 
					import App from './Login.vue'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					createApp(App).mount('#app')
 | 
				
			||||||
@ -1,5 +1,4 @@
 | 
				
			|||||||
import './assets/main.css'
 | 
					import './assets/main.css'
 | 
				
			||||||
 | 
					 | 
				
			||||||
import 'vue3-toastify/dist/index.css';
 | 
					import 'vue3-toastify/dist/index.css';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import { createApp } from 'vue'
 | 
					import { createApp } from 'vue'
 | 
				
			||||||
 | 
				
			|||||||
@ -1,14 +0,0 @@
 | 
				
			|||||||
import { fileURLToPath } from 'node:url'
 | 
					 | 
				
			||||||
import { mergeConfig, defineConfig, configDefaults } from 'vitest/config'
 | 
					 | 
				
			||||||
import viteConfig from './vite.config'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export default mergeConfig(
 | 
					 | 
				
			||||||
  viteConfig,
 | 
					 | 
				
			||||||
  defineConfig({
 | 
					 | 
				
			||||||
    test: {
 | 
					 | 
				
			||||||
      environment: 'jsdom',
 | 
					 | 
				
			||||||
      exclude: [...configDefaults.exclude, 'e2e/*'],
 | 
					 | 
				
			||||||
      root: fileURLToPath(new URL('./', import.meta.url))
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  })
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user