moelove commited on
Commit
ddac6a2
·
0 Parent(s):

init version

Browse files

Signed-off-by: Jintao Zhang <zhangjintao9020@gmail.com>

.dockerignore ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ node_modules
2
+ npm-debug.log
3
+ Dockerfile
4
+ .dockerignore
5
+ .git
6
+ .gitignore
7
+ README.md
8
+ .env
.gitignore ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Dependencies
2
+ node_modules
3
+ .pnp
4
+ .pnp.js
5
+
6
+ # Testing
7
+ coverage
8
+
9
+ # Production
10
+ dist
11
+ build
12
+
13
+ # Misc
14
+ .DS_Store
15
+ .env.local
16
+ .env.development.local
17
+ .env.test.local
18
+ .env.production.local
19
+
20
+ # Logs
21
+ npm-debug.log*
22
+ yarn-debug.log*
23
+ yarn-error.log*
24
+
25
+ # Editor directories and files
26
+ .vscode/*
27
+ !.vscode/extensions.json
28
+ .idea
29
+ *.suo
30
+ *.ntvs*
31
+ *.njsproj
32
+ *.sln
33
+ *.sw?
Dockerfile ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Build stage
2
+ FROM node:20 AS builder
3
+
4
+ WORKDIR /app
5
+
6
+ # Copy package files
7
+ COPY package*.json ./
8
+
9
+ # Install dependencies
10
+ RUN npm ci
11
+
12
+ # Copy source code
13
+ COPY . .
14
+
15
+ # Build the application
16
+ RUN npm run build
17
+
18
+ # Production stage
19
+ FROM node:20-slim
20
+
21
+ WORKDIR /app
22
+
23
+ # Copy package files
24
+ COPY package*.json ./
25
+
26
+ # Install only production dependencies
27
+ RUN npm ci --production
28
+
29
+ # Copy built assets from builder stage
30
+ COPY --from=builder /app/dist ./dist
31
+ COPY --from=builder /app/server ./server
32
+
33
+ # Expose the port your app runs on
34
+ EXPOSE 7860
35
+
36
+ # Set production environment
37
+ ENV NODE_ENV=production
38
+
39
+ # Start the server
40
+ CMD ["node", "server/index.js"]
README.md ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Thinking Model Client
2
+
3
+ A modern React-based chat application that integrates with AI models and displays their thinking process alongside responses.
4
+
5
+ ## Features
6
+
7
+ - 💬 Real-time chat interface
8
+ - 🤖 AI model integration
9
+ - 📝 Multiple conversation management
10
+ - ⚙️ Configurable API settings
11
+ - 💾 Local storage persistence
12
+ - 100% code generated by DeepSeek-R1
13
+
14
+ ## Getting Started
15
+
16
+ ### Prerequisites
17
+
18
+ - Node.js (v14 or higher)
19
+ - npm or yarn
20
+
21
+ ### Installation
22
+
23
+ 1. Clone the repository:
24
+
25
+ ```bash
26
+ git clone https://github.com/tao12345666333/thinking-model-client.git
27
+ cd thinking-model-client
28
+ ```
29
+
30
+ 2. Install dependencies:
31
+
32
+ ```bash
33
+ npm install
34
+ ```
35
+
36
+ 3. Start the development server:
37
+
38
+ ```bash
39
+ npm start
40
+ ```
41
+
42
+ This will concurrently run both the frontend development server and the backend proxy server.
43
+
44
+ 4. Open your browser and navigate to `http://localhost:5173` to use the application.
45
+
46
+ ## Configuration
47
+
48
+ Configure the application through the settings panel with:
49
+
50
+ - API Endpoint
51
+ - API Key
52
+ - Model Name (e.g., DeepSeek-R1)
index.html ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!DOCTYPE html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>Thinking Model Client</title>
7
+ <link rel="preconnect" href="https://fonts.googleapis.com">
8
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
9
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
10
+ </head>
11
+ <body>
12
+ <div id="root"></div>
13
+ <script type="module" src="/src/main.jsx"></script>
14
+ </body>
15
+ </html>
package-lock.json ADDED
@@ -0,0 +1,2435 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ai-chat-app",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "ai-chat-app",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "cors": "^2.8.5",
12
+ "express": "^4.18.2",
13
+ "node-fetch": "^3.3.2",
14
+ "react": "^18.2.0",
15
+ "react-dom": "^18.2.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/react": "^18.2.15",
19
+ "@types/react-dom": "^18.2.7",
20
+ "@vitejs/plugin-react": "^4.0.3",
21
+ "concurrently": "^8.2.0",
22
+ "vite": "^4.4.5"
23
+ }
24
+ },
25
+ "node_modules/@ampproject/remapping": {
26
+ "version": "2.3.0",
27
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
28
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
29
+ "dev": true,
30
+ "dependencies": {
31
+ "@jridgewell/gen-mapping": "^0.3.5",
32
+ "@jridgewell/trace-mapping": "^0.3.24"
33
+ },
34
+ "engines": {
35
+ "node": ">=6.0.0"
36
+ }
37
+ },
38
+ "node_modules/@babel/code-frame": {
39
+ "version": "7.26.2",
40
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
41
+ "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
42
+ "dev": true,
43
+ "dependencies": {
44
+ "@babel/helper-validator-identifier": "^7.25.9",
45
+ "js-tokens": "^4.0.0",
46
+ "picocolors": "^1.0.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=6.9.0"
50
+ }
51
+ },
52
+ "node_modules/@babel/compat-data": {
53
+ "version": "7.26.5",
54
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.5.tgz",
55
+ "integrity": "sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==",
56
+ "dev": true,
57
+ "engines": {
58
+ "node": ">=6.9.0"
59
+ }
60
+ },
61
+ "node_modules/@babel/core": {
62
+ "version": "7.26.7",
63
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.7.tgz",
64
+ "integrity": "sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==",
65
+ "dev": true,
66
+ "dependencies": {
67
+ "@ampproject/remapping": "^2.2.0",
68
+ "@babel/code-frame": "^7.26.2",
69
+ "@babel/generator": "^7.26.5",
70
+ "@babel/helper-compilation-targets": "^7.26.5",
71
+ "@babel/helper-module-transforms": "^7.26.0",
72
+ "@babel/helpers": "^7.26.7",
73
+ "@babel/parser": "^7.26.7",
74
+ "@babel/template": "^7.25.9",
75
+ "@babel/traverse": "^7.26.7",
76
+ "@babel/types": "^7.26.7",
77
+ "convert-source-map": "^2.0.0",
78
+ "debug": "^4.1.0",
79
+ "gensync": "^1.0.0-beta.2",
80
+ "json5": "^2.2.3",
81
+ "semver": "^6.3.1"
82
+ },
83
+ "engines": {
84
+ "node": ">=6.9.0"
85
+ },
86
+ "funding": {
87
+ "type": "opencollective",
88
+ "url": "https://opencollective.com/babel"
89
+ }
90
+ },
91
+ "node_modules/@babel/generator": {
92
+ "version": "7.26.5",
93
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.5.tgz",
94
+ "integrity": "sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==",
95
+ "dev": true,
96
+ "dependencies": {
97
+ "@babel/parser": "^7.26.5",
98
+ "@babel/types": "^7.26.5",
99
+ "@jridgewell/gen-mapping": "^0.3.5",
100
+ "@jridgewell/trace-mapping": "^0.3.25",
101
+ "jsesc": "^3.0.2"
102
+ },
103
+ "engines": {
104
+ "node": ">=6.9.0"
105
+ }
106
+ },
107
+ "node_modules/@babel/helper-compilation-targets": {
108
+ "version": "7.26.5",
109
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz",
110
+ "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==",
111
+ "dev": true,
112
+ "dependencies": {
113
+ "@babel/compat-data": "^7.26.5",
114
+ "@babel/helper-validator-option": "^7.25.9",
115
+ "browserslist": "^4.24.0",
116
+ "lru-cache": "^5.1.1",
117
+ "semver": "^6.3.1"
118
+ },
119
+ "engines": {
120
+ "node": ">=6.9.0"
121
+ }
122
+ },
123
+ "node_modules/@babel/helper-module-imports": {
124
+ "version": "7.25.9",
125
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz",
126
+ "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==",
127
+ "dev": true,
128
+ "dependencies": {
129
+ "@babel/traverse": "^7.25.9",
130
+ "@babel/types": "^7.25.9"
131
+ },
132
+ "engines": {
133
+ "node": ">=6.9.0"
134
+ }
135
+ },
136
+ "node_modules/@babel/helper-module-transforms": {
137
+ "version": "7.26.0",
138
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz",
139
+ "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==",
140
+ "dev": true,
141
+ "dependencies": {
142
+ "@babel/helper-module-imports": "^7.25.9",
143
+ "@babel/helper-validator-identifier": "^7.25.9",
144
+ "@babel/traverse": "^7.25.9"
145
+ },
146
+ "engines": {
147
+ "node": ">=6.9.0"
148
+ },
149
+ "peerDependencies": {
150
+ "@babel/core": "^7.0.0"
151
+ }
152
+ },
153
+ "node_modules/@babel/helper-plugin-utils": {
154
+ "version": "7.26.5",
155
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz",
156
+ "integrity": "sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==",
157
+ "dev": true,
158
+ "engines": {
159
+ "node": ">=6.9.0"
160
+ }
161
+ },
162
+ "node_modules/@babel/helper-string-parser": {
163
+ "version": "7.25.9",
164
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
165
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
166
+ "dev": true,
167
+ "engines": {
168
+ "node": ">=6.9.0"
169
+ }
170
+ },
171
+ "node_modules/@babel/helper-validator-identifier": {
172
+ "version": "7.25.9",
173
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
174
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
175
+ "dev": true,
176
+ "engines": {
177
+ "node": ">=6.9.0"
178
+ }
179
+ },
180
+ "node_modules/@babel/helper-validator-option": {
181
+ "version": "7.25.9",
182
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz",
183
+ "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==",
184
+ "dev": true,
185
+ "engines": {
186
+ "node": ">=6.9.0"
187
+ }
188
+ },
189
+ "node_modules/@babel/helpers": {
190
+ "version": "7.26.7",
191
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.7.tgz",
192
+ "integrity": "sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==",
193
+ "dev": true,
194
+ "dependencies": {
195
+ "@babel/template": "^7.25.9",
196
+ "@babel/types": "^7.26.7"
197
+ },
198
+ "engines": {
199
+ "node": ">=6.9.0"
200
+ }
201
+ },
202
+ "node_modules/@babel/parser": {
203
+ "version": "7.26.7",
204
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz",
205
+ "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==",
206
+ "dev": true,
207
+ "dependencies": {
208
+ "@babel/types": "^7.26.7"
209
+ },
210
+ "bin": {
211
+ "parser": "bin/babel-parser.js"
212
+ },
213
+ "engines": {
214
+ "node": ">=6.0.0"
215
+ }
216
+ },
217
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
218
+ "version": "7.25.9",
219
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz",
220
+ "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==",
221
+ "dev": true,
222
+ "dependencies": {
223
+ "@babel/helper-plugin-utils": "^7.25.9"
224
+ },
225
+ "engines": {
226
+ "node": ">=6.9.0"
227
+ },
228
+ "peerDependencies": {
229
+ "@babel/core": "^7.0.0-0"
230
+ }
231
+ },
232
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
233
+ "version": "7.25.9",
234
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz",
235
+ "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==",
236
+ "dev": true,
237
+ "dependencies": {
238
+ "@babel/helper-plugin-utils": "^7.25.9"
239
+ },
240
+ "engines": {
241
+ "node": ">=6.9.0"
242
+ },
243
+ "peerDependencies": {
244
+ "@babel/core": "^7.0.0-0"
245
+ }
246
+ },
247
+ "node_modules/@babel/runtime": {
248
+ "version": "7.26.7",
249
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.7.tgz",
250
+ "integrity": "sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==",
251
+ "dev": true,
252
+ "dependencies": {
253
+ "regenerator-runtime": "^0.14.0"
254
+ },
255
+ "engines": {
256
+ "node": ">=6.9.0"
257
+ }
258
+ },
259
+ "node_modules/@babel/template": {
260
+ "version": "7.25.9",
261
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz",
262
+ "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==",
263
+ "dev": true,
264
+ "dependencies": {
265
+ "@babel/code-frame": "^7.25.9",
266
+ "@babel/parser": "^7.25.9",
267
+ "@babel/types": "^7.25.9"
268
+ },
269
+ "engines": {
270
+ "node": ">=6.9.0"
271
+ }
272
+ },
273
+ "node_modules/@babel/traverse": {
274
+ "version": "7.26.7",
275
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.7.tgz",
276
+ "integrity": "sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==",
277
+ "dev": true,
278
+ "dependencies": {
279
+ "@babel/code-frame": "^7.26.2",
280
+ "@babel/generator": "^7.26.5",
281
+ "@babel/parser": "^7.26.7",
282
+ "@babel/template": "^7.25.9",
283
+ "@babel/types": "^7.26.7",
284
+ "debug": "^4.3.1",
285
+ "globals": "^11.1.0"
286
+ },
287
+ "engines": {
288
+ "node": ">=6.9.0"
289
+ }
290
+ },
291
+ "node_modules/@babel/types": {
292
+ "version": "7.26.7",
293
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz",
294
+ "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==",
295
+ "dev": true,
296
+ "dependencies": {
297
+ "@babel/helper-string-parser": "^7.25.9",
298
+ "@babel/helper-validator-identifier": "^7.25.9"
299
+ },
300
+ "engines": {
301
+ "node": ">=6.9.0"
302
+ }
303
+ },
304
+ "node_modules/@esbuild/android-arm": {
305
+ "version": "0.18.20",
306
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
307
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
308
+ "cpu": [
309
+ "arm"
310
+ ],
311
+ "dev": true,
312
+ "optional": true,
313
+ "os": [
314
+ "android"
315
+ ],
316
+ "engines": {
317
+ "node": ">=12"
318
+ }
319
+ },
320
+ "node_modules/@esbuild/android-arm64": {
321
+ "version": "0.18.20",
322
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
323
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
324
+ "cpu": [
325
+ "arm64"
326
+ ],
327
+ "dev": true,
328
+ "optional": true,
329
+ "os": [
330
+ "android"
331
+ ],
332
+ "engines": {
333
+ "node": ">=12"
334
+ }
335
+ },
336
+ "node_modules/@esbuild/android-x64": {
337
+ "version": "0.18.20",
338
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
339
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
340
+ "cpu": [
341
+ "x64"
342
+ ],
343
+ "dev": true,
344
+ "optional": true,
345
+ "os": [
346
+ "android"
347
+ ],
348
+ "engines": {
349
+ "node": ">=12"
350
+ }
351
+ },
352
+ "node_modules/@esbuild/darwin-arm64": {
353
+ "version": "0.18.20",
354
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
355
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
356
+ "cpu": [
357
+ "arm64"
358
+ ],
359
+ "dev": true,
360
+ "optional": true,
361
+ "os": [
362
+ "darwin"
363
+ ],
364
+ "engines": {
365
+ "node": ">=12"
366
+ }
367
+ },
368
+ "node_modules/@esbuild/darwin-x64": {
369
+ "version": "0.18.20",
370
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
371
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
372
+ "cpu": [
373
+ "x64"
374
+ ],
375
+ "dev": true,
376
+ "optional": true,
377
+ "os": [
378
+ "darwin"
379
+ ],
380
+ "engines": {
381
+ "node": ">=12"
382
+ }
383
+ },
384
+ "node_modules/@esbuild/freebsd-arm64": {
385
+ "version": "0.18.20",
386
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
387
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
388
+ "cpu": [
389
+ "arm64"
390
+ ],
391
+ "dev": true,
392
+ "optional": true,
393
+ "os": [
394
+ "freebsd"
395
+ ],
396
+ "engines": {
397
+ "node": ">=12"
398
+ }
399
+ },
400
+ "node_modules/@esbuild/freebsd-x64": {
401
+ "version": "0.18.20",
402
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
403
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
404
+ "cpu": [
405
+ "x64"
406
+ ],
407
+ "dev": true,
408
+ "optional": true,
409
+ "os": [
410
+ "freebsd"
411
+ ],
412
+ "engines": {
413
+ "node": ">=12"
414
+ }
415
+ },
416
+ "node_modules/@esbuild/linux-arm": {
417
+ "version": "0.18.20",
418
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
419
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
420
+ "cpu": [
421
+ "arm"
422
+ ],
423
+ "dev": true,
424
+ "optional": true,
425
+ "os": [
426
+ "linux"
427
+ ],
428
+ "engines": {
429
+ "node": ">=12"
430
+ }
431
+ },
432
+ "node_modules/@esbuild/linux-arm64": {
433
+ "version": "0.18.20",
434
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
435
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
436
+ "cpu": [
437
+ "arm64"
438
+ ],
439
+ "dev": true,
440
+ "optional": true,
441
+ "os": [
442
+ "linux"
443
+ ],
444
+ "engines": {
445
+ "node": ">=12"
446
+ }
447
+ },
448
+ "node_modules/@esbuild/linux-ia32": {
449
+ "version": "0.18.20",
450
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
451
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
452
+ "cpu": [
453
+ "ia32"
454
+ ],
455
+ "dev": true,
456
+ "optional": true,
457
+ "os": [
458
+ "linux"
459
+ ],
460
+ "engines": {
461
+ "node": ">=12"
462
+ }
463
+ },
464
+ "node_modules/@esbuild/linux-loong64": {
465
+ "version": "0.18.20",
466
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
467
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
468
+ "cpu": [
469
+ "loong64"
470
+ ],
471
+ "dev": true,
472
+ "optional": true,
473
+ "os": [
474
+ "linux"
475
+ ],
476
+ "engines": {
477
+ "node": ">=12"
478
+ }
479
+ },
480
+ "node_modules/@esbuild/linux-mips64el": {
481
+ "version": "0.18.20",
482
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
483
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
484
+ "cpu": [
485
+ "mips64el"
486
+ ],
487
+ "dev": true,
488
+ "optional": true,
489
+ "os": [
490
+ "linux"
491
+ ],
492
+ "engines": {
493
+ "node": ">=12"
494
+ }
495
+ },
496
+ "node_modules/@esbuild/linux-ppc64": {
497
+ "version": "0.18.20",
498
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
499
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
500
+ "cpu": [
501
+ "ppc64"
502
+ ],
503
+ "dev": true,
504
+ "optional": true,
505
+ "os": [
506
+ "linux"
507
+ ],
508
+ "engines": {
509
+ "node": ">=12"
510
+ }
511
+ },
512
+ "node_modules/@esbuild/linux-riscv64": {
513
+ "version": "0.18.20",
514
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
515
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
516
+ "cpu": [
517
+ "riscv64"
518
+ ],
519
+ "dev": true,
520
+ "optional": true,
521
+ "os": [
522
+ "linux"
523
+ ],
524
+ "engines": {
525
+ "node": ">=12"
526
+ }
527
+ },
528
+ "node_modules/@esbuild/linux-s390x": {
529
+ "version": "0.18.20",
530
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
531
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
532
+ "cpu": [
533
+ "s390x"
534
+ ],
535
+ "dev": true,
536
+ "optional": true,
537
+ "os": [
538
+ "linux"
539
+ ],
540
+ "engines": {
541
+ "node": ">=12"
542
+ }
543
+ },
544
+ "node_modules/@esbuild/linux-x64": {
545
+ "version": "0.18.20",
546
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
547
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
548
+ "cpu": [
549
+ "x64"
550
+ ],
551
+ "dev": true,
552
+ "optional": true,
553
+ "os": [
554
+ "linux"
555
+ ],
556
+ "engines": {
557
+ "node": ">=12"
558
+ }
559
+ },
560
+ "node_modules/@esbuild/netbsd-x64": {
561
+ "version": "0.18.20",
562
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
563
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
564
+ "cpu": [
565
+ "x64"
566
+ ],
567
+ "dev": true,
568
+ "optional": true,
569
+ "os": [
570
+ "netbsd"
571
+ ],
572
+ "engines": {
573
+ "node": ">=12"
574
+ }
575
+ },
576
+ "node_modules/@esbuild/openbsd-x64": {
577
+ "version": "0.18.20",
578
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
579
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
580
+ "cpu": [
581
+ "x64"
582
+ ],
583
+ "dev": true,
584
+ "optional": true,
585
+ "os": [
586
+ "openbsd"
587
+ ],
588
+ "engines": {
589
+ "node": ">=12"
590
+ }
591
+ },
592
+ "node_modules/@esbuild/sunos-x64": {
593
+ "version": "0.18.20",
594
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
595
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
596
+ "cpu": [
597
+ "x64"
598
+ ],
599
+ "dev": true,
600
+ "optional": true,
601
+ "os": [
602
+ "sunos"
603
+ ],
604
+ "engines": {
605
+ "node": ">=12"
606
+ }
607
+ },
608
+ "node_modules/@esbuild/win32-arm64": {
609
+ "version": "0.18.20",
610
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
611
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
612
+ "cpu": [
613
+ "arm64"
614
+ ],
615
+ "dev": true,
616
+ "optional": true,
617
+ "os": [
618
+ "win32"
619
+ ],
620
+ "engines": {
621
+ "node": ">=12"
622
+ }
623
+ },
624
+ "node_modules/@esbuild/win32-ia32": {
625
+ "version": "0.18.20",
626
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
627
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
628
+ "cpu": [
629
+ "ia32"
630
+ ],
631
+ "dev": true,
632
+ "optional": true,
633
+ "os": [
634
+ "win32"
635
+ ],
636
+ "engines": {
637
+ "node": ">=12"
638
+ }
639
+ },
640
+ "node_modules/@esbuild/win32-x64": {
641
+ "version": "0.18.20",
642
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
643
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
644
+ "cpu": [
645
+ "x64"
646
+ ],
647
+ "dev": true,
648
+ "optional": true,
649
+ "os": [
650
+ "win32"
651
+ ],
652
+ "engines": {
653
+ "node": ">=12"
654
+ }
655
+ },
656
+ "node_modules/@jridgewell/gen-mapping": {
657
+ "version": "0.3.8",
658
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz",
659
+ "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==",
660
+ "dev": true,
661
+ "dependencies": {
662
+ "@jridgewell/set-array": "^1.2.1",
663
+ "@jridgewell/sourcemap-codec": "^1.4.10",
664
+ "@jridgewell/trace-mapping": "^0.3.24"
665
+ },
666
+ "engines": {
667
+ "node": ">=6.0.0"
668
+ }
669
+ },
670
+ "node_modules/@jridgewell/resolve-uri": {
671
+ "version": "3.1.2",
672
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
673
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
674
+ "dev": true,
675
+ "engines": {
676
+ "node": ">=6.0.0"
677
+ }
678
+ },
679
+ "node_modules/@jridgewell/set-array": {
680
+ "version": "1.2.1",
681
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
682
+ "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
683
+ "dev": true,
684
+ "engines": {
685
+ "node": ">=6.0.0"
686
+ }
687
+ },
688
+ "node_modules/@jridgewell/sourcemap-codec": {
689
+ "version": "1.5.0",
690
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
691
+ "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
692
+ "dev": true
693
+ },
694
+ "node_modules/@jridgewell/trace-mapping": {
695
+ "version": "0.3.25",
696
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
697
+ "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
698
+ "dev": true,
699
+ "dependencies": {
700
+ "@jridgewell/resolve-uri": "^3.1.0",
701
+ "@jridgewell/sourcemap-codec": "^1.4.14"
702
+ }
703
+ },
704
+ "node_modules/@types/babel__core": {
705
+ "version": "7.20.5",
706
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
707
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
708
+ "dev": true,
709
+ "dependencies": {
710
+ "@babel/parser": "^7.20.7",
711
+ "@babel/types": "^7.20.7",
712
+ "@types/babel__generator": "*",
713
+ "@types/babel__template": "*",
714
+ "@types/babel__traverse": "*"
715
+ }
716
+ },
717
+ "node_modules/@types/babel__generator": {
718
+ "version": "7.6.8",
719
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz",
720
+ "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==",
721
+ "dev": true,
722
+ "dependencies": {
723
+ "@babel/types": "^7.0.0"
724
+ }
725
+ },
726
+ "node_modules/@types/babel__template": {
727
+ "version": "7.4.4",
728
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
729
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
730
+ "dev": true,
731
+ "dependencies": {
732
+ "@babel/parser": "^7.1.0",
733
+ "@babel/types": "^7.0.0"
734
+ }
735
+ },
736
+ "node_modules/@types/babel__traverse": {
737
+ "version": "7.20.6",
738
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz",
739
+ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==",
740
+ "dev": true,
741
+ "dependencies": {
742
+ "@babel/types": "^7.20.7"
743
+ }
744
+ },
745
+ "node_modules/@types/prop-types": {
746
+ "version": "15.7.14",
747
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz",
748
+ "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==",
749
+ "dev": true
750
+ },
751
+ "node_modules/@types/react": {
752
+ "version": "18.3.18",
753
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.18.tgz",
754
+ "integrity": "sha512-t4yC+vtgnkYjNSKlFx1jkAhH8LgTo2N/7Qvi83kdEaUtMDiwpbLAktKDaAMlRcJ5eSxZkH74eEGt1ky31d7kfQ==",
755
+ "dev": true,
756
+ "dependencies": {
757
+ "@types/prop-types": "*",
758
+ "csstype": "^3.0.2"
759
+ }
760
+ },
761
+ "node_modules/@types/react-dom": {
762
+ "version": "18.3.5",
763
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz",
764
+ "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==",
765
+ "dev": true,
766
+ "peerDependencies": {
767
+ "@types/react": "^18.0.0"
768
+ }
769
+ },
770
+ "node_modules/@vitejs/plugin-react": {
771
+ "version": "4.3.4",
772
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz",
773
+ "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==",
774
+ "dev": true,
775
+ "dependencies": {
776
+ "@babel/core": "^7.26.0",
777
+ "@babel/plugin-transform-react-jsx-self": "^7.25.9",
778
+ "@babel/plugin-transform-react-jsx-source": "^7.25.9",
779
+ "@types/babel__core": "^7.20.5",
780
+ "react-refresh": "^0.14.2"
781
+ },
782
+ "engines": {
783
+ "node": "^14.18.0 || >=16.0.0"
784
+ },
785
+ "peerDependencies": {
786
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0"
787
+ }
788
+ },
789
+ "node_modules/accepts": {
790
+ "version": "1.3.8",
791
+ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
792
+ "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
793
+ "dependencies": {
794
+ "mime-types": "~2.1.34",
795
+ "negotiator": "0.6.3"
796
+ },
797
+ "engines": {
798
+ "node": ">= 0.6"
799
+ }
800
+ },
801
+ "node_modules/ansi-regex": {
802
+ "version": "5.0.1",
803
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
804
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
805
+ "dev": true,
806
+ "engines": {
807
+ "node": ">=8"
808
+ }
809
+ },
810
+ "node_modules/ansi-styles": {
811
+ "version": "4.3.0",
812
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
813
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
814
+ "dev": true,
815
+ "dependencies": {
816
+ "color-convert": "^2.0.1"
817
+ },
818
+ "engines": {
819
+ "node": ">=8"
820
+ },
821
+ "funding": {
822
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
823
+ }
824
+ },
825
+ "node_modules/array-flatten": {
826
+ "version": "1.1.1",
827
+ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
828
+ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
829
+ },
830
+ "node_modules/body-parser": {
831
+ "version": "1.20.3",
832
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
833
+ "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
834
+ "dependencies": {
835
+ "bytes": "3.1.2",
836
+ "content-type": "~1.0.5",
837
+ "debug": "2.6.9",
838
+ "depd": "2.0.0",
839
+ "destroy": "1.2.0",
840
+ "http-errors": "2.0.0",
841
+ "iconv-lite": "0.4.24",
842
+ "on-finished": "2.4.1",
843
+ "qs": "6.13.0",
844
+ "raw-body": "2.5.2",
845
+ "type-is": "~1.6.18",
846
+ "unpipe": "1.0.0"
847
+ },
848
+ "engines": {
849
+ "node": ">= 0.8",
850
+ "npm": "1.2.8000 || >= 1.4.16"
851
+ }
852
+ },
853
+ "node_modules/body-parser/node_modules/debug": {
854
+ "version": "2.6.9",
855
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
856
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
857
+ "dependencies": {
858
+ "ms": "2.0.0"
859
+ }
860
+ },
861
+ "node_modules/body-parser/node_modules/ms": {
862
+ "version": "2.0.0",
863
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
864
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
865
+ },
866
+ "node_modules/browserslist": {
867
+ "version": "4.24.4",
868
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.4.tgz",
869
+ "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==",
870
+ "dev": true,
871
+ "funding": [
872
+ {
873
+ "type": "opencollective",
874
+ "url": "https://opencollective.com/browserslist"
875
+ },
876
+ {
877
+ "type": "tidelift",
878
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
879
+ },
880
+ {
881
+ "type": "github",
882
+ "url": "https://github.com/sponsors/ai"
883
+ }
884
+ ],
885
+ "dependencies": {
886
+ "caniuse-lite": "^1.0.30001688",
887
+ "electron-to-chromium": "^1.5.73",
888
+ "node-releases": "^2.0.19",
889
+ "update-browserslist-db": "^1.1.1"
890
+ },
891
+ "bin": {
892
+ "browserslist": "cli.js"
893
+ },
894
+ "engines": {
895
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
896
+ }
897
+ },
898
+ "node_modules/bytes": {
899
+ "version": "3.1.2",
900
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
901
+ "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
902
+ "engines": {
903
+ "node": ">= 0.8"
904
+ }
905
+ },
906
+ "node_modules/call-bind-apply-helpers": {
907
+ "version": "1.0.1",
908
+ "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz",
909
+ "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==",
910
+ "dependencies": {
911
+ "es-errors": "^1.3.0",
912
+ "function-bind": "^1.1.2"
913
+ },
914
+ "engines": {
915
+ "node": ">= 0.4"
916
+ }
917
+ },
918
+ "node_modules/call-bound": {
919
+ "version": "1.0.3",
920
+ "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz",
921
+ "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==",
922
+ "dependencies": {
923
+ "call-bind-apply-helpers": "^1.0.1",
924
+ "get-intrinsic": "^1.2.6"
925
+ },
926
+ "engines": {
927
+ "node": ">= 0.4"
928
+ },
929
+ "funding": {
930
+ "url": "https://github.com/sponsors/ljharb"
931
+ }
932
+ },
933
+ "node_modules/caniuse-lite": {
934
+ "version": "1.0.30001696",
935
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001696.tgz",
936
+ "integrity": "sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==",
937
+ "dev": true,
938
+ "funding": [
939
+ {
940
+ "type": "opencollective",
941
+ "url": "https://opencollective.com/browserslist"
942
+ },
943
+ {
944
+ "type": "tidelift",
945
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
946
+ },
947
+ {
948
+ "type": "github",
949
+ "url": "https://github.com/sponsors/ai"
950
+ }
951
+ ]
952
+ },
953
+ "node_modules/chalk": {
954
+ "version": "4.1.2",
955
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
956
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
957
+ "dev": true,
958
+ "dependencies": {
959
+ "ansi-styles": "^4.1.0",
960
+ "supports-color": "^7.1.0"
961
+ },
962
+ "engines": {
963
+ "node": ">=10"
964
+ },
965
+ "funding": {
966
+ "url": "https://github.com/chalk/chalk?sponsor=1"
967
+ }
968
+ },
969
+ "node_modules/chalk/node_modules/supports-color": {
970
+ "version": "7.2.0",
971
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
972
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
973
+ "dev": true,
974
+ "dependencies": {
975
+ "has-flag": "^4.0.0"
976
+ },
977
+ "engines": {
978
+ "node": ">=8"
979
+ }
980
+ },
981
+ "node_modules/cliui": {
982
+ "version": "8.0.1",
983
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
984
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
985
+ "dev": true,
986
+ "dependencies": {
987
+ "string-width": "^4.2.0",
988
+ "strip-ansi": "^6.0.1",
989
+ "wrap-ansi": "^7.0.0"
990
+ },
991
+ "engines": {
992
+ "node": ">=12"
993
+ }
994
+ },
995
+ "node_modules/color-convert": {
996
+ "version": "2.0.1",
997
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
998
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
999
+ "dev": true,
1000
+ "dependencies": {
1001
+ "color-name": "~1.1.4"
1002
+ },
1003
+ "engines": {
1004
+ "node": ">=7.0.0"
1005
+ }
1006
+ },
1007
+ "node_modules/color-name": {
1008
+ "version": "1.1.4",
1009
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1010
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1011
+ "dev": true
1012
+ },
1013
+ "node_modules/concurrently": {
1014
+ "version": "8.2.2",
1015
+ "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz",
1016
+ "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==",
1017
+ "dev": true,
1018
+ "dependencies": {
1019
+ "chalk": "^4.1.2",
1020
+ "date-fns": "^2.30.0",
1021
+ "lodash": "^4.17.21",
1022
+ "rxjs": "^7.8.1",
1023
+ "shell-quote": "^1.8.1",
1024
+ "spawn-command": "0.0.2",
1025
+ "supports-color": "^8.1.1",
1026
+ "tree-kill": "^1.2.2",
1027
+ "yargs": "^17.7.2"
1028
+ },
1029
+ "bin": {
1030
+ "conc": "dist/bin/concurrently.js",
1031
+ "concurrently": "dist/bin/concurrently.js"
1032
+ },
1033
+ "engines": {
1034
+ "node": "^14.13.0 || >=16.0.0"
1035
+ },
1036
+ "funding": {
1037
+ "url": "https://github.com/open-cli-tools/concurrently?sponsor=1"
1038
+ }
1039
+ },
1040
+ "node_modules/content-disposition": {
1041
+ "version": "0.5.4",
1042
+ "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
1043
+ "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
1044
+ "dependencies": {
1045
+ "safe-buffer": "5.2.1"
1046
+ },
1047
+ "engines": {
1048
+ "node": ">= 0.6"
1049
+ }
1050
+ },
1051
+ "node_modules/content-type": {
1052
+ "version": "1.0.5",
1053
+ "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
1054
+ "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
1055
+ "engines": {
1056
+ "node": ">= 0.6"
1057
+ }
1058
+ },
1059
+ "node_modules/convert-source-map": {
1060
+ "version": "2.0.0",
1061
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1062
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1063
+ "dev": true
1064
+ },
1065
+ "node_modules/cookie": {
1066
+ "version": "0.7.1",
1067
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
1068
+ "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
1069
+ "engines": {
1070
+ "node": ">= 0.6"
1071
+ }
1072
+ },
1073
+ "node_modules/cookie-signature": {
1074
+ "version": "1.0.6",
1075
+ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
1076
+ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
1077
+ },
1078
+ "node_modules/cors": {
1079
+ "version": "2.8.5",
1080
+ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
1081
+ "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
1082
+ "dependencies": {
1083
+ "object-assign": "^4",
1084
+ "vary": "^1"
1085
+ },
1086
+ "engines": {
1087
+ "node": ">= 0.10"
1088
+ }
1089
+ },
1090
+ "node_modules/csstype": {
1091
+ "version": "3.1.3",
1092
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1093
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1094
+ "dev": true
1095
+ },
1096
+ "node_modules/data-uri-to-buffer": {
1097
+ "version": "4.0.1",
1098
+ "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
1099
+ "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
1100
+ "engines": {
1101
+ "node": ">= 12"
1102
+ }
1103
+ },
1104
+ "node_modules/date-fns": {
1105
+ "version": "2.30.0",
1106
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz",
1107
+ "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==",
1108
+ "dev": true,
1109
+ "dependencies": {
1110
+ "@babel/runtime": "^7.21.0"
1111
+ },
1112
+ "engines": {
1113
+ "node": ">=0.11"
1114
+ },
1115
+ "funding": {
1116
+ "type": "opencollective",
1117
+ "url": "https://opencollective.com/date-fns"
1118
+ }
1119
+ },
1120
+ "node_modules/debug": {
1121
+ "version": "4.4.0",
1122
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
1123
+ "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
1124
+ "dev": true,
1125
+ "dependencies": {
1126
+ "ms": "^2.1.3"
1127
+ },
1128
+ "engines": {
1129
+ "node": ">=6.0"
1130
+ },
1131
+ "peerDependenciesMeta": {
1132
+ "supports-color": {
1133
+ "optional": true
1134
+ }
1135
+ }
1136
+ },
1137
+ "node_modules/depd": {
1138
+ "version": "2.0.0",
1139
+ "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
1140
+ "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
1141
+ "engines": {
1142
+ "node": ">= 0.8"
1143
+ }
1144
+ },
1145
+ "node_modules/destroy": {
1146
+ "version": "1.2.0",
1147
+ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
1148
+ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
1149
+ "engines": {
1150
+ "node": ">= 0.8",
1151
+ "npm": "1.2.8000 || >= 1.4.16"
1152
+ }
1153
+ },
1154
+ "node_modules/dunder-proto": {
1155
+ "version": "1.0.1",
1156
+ "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
1157
+ "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
1158
+ "dependencies": {
1159
+ "call-bind-apply-helpers": "^1.0.1",
1160
+ "es-errors": "^1.3.0",
1161
+ "gopd": "^1.2.0"
1162
+ },
1163
+ "engines": {
1164
+ "node": ">= 0.4"
1165
+ }
1166
+ },
1167
+ "node_modules/ee-first": {
1168
+ "version": "1.1.1",
1169
+ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
1170
+ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
1171
+ },
1172
+ "node_modules/electron-to-chromium": {
1173
+ "version": "1.5.90",
1174
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.90.tgz",
1175
+ "integrity": "sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==",
1176
+ "dev": true
1177
+ },
1178
+ "node_modules/emoji-regex": {
1179
+ "version": "8.0.0",
1180
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
1181
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
1182
+ "dev": true
1183
+ },
1184
+ "node_modules/encodeurl": {
1185
+ "version": "2.0.0",
1186
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
1187
+ "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
1188
+ "engines": {
1189
+ "node": ">= 0.8"
1190
+ }
1191
+ },
1192
+ "node_modules/es-define-property": {
1193
+ "version": "1.0.1",
1194
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
1195
+ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
1196
+ "engines": {
1197
+ "node": ">= 0.4"
1198
+ }
1199
+ },
1200
+ "node_modules/es-errors": {
1201
+ "version": "1.3.0",
1202
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1203
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1204
+ "engines": {
1205
+ "node": ">= 0.4"
1206
+ }
1207
+ },
1208
+ "node_modules/es-object-atoms": {
1209
+ "version": "1.1.1",
1210
+ "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
1211
+ "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
1212
+ "dependencies": {
1213
+ "es-errors": "^1.3.0"
1214
+ },
1215
+ "engines": {
1216
+ "node": ">= 0.4"
1217
+ }
1218
+ },
1219
+ "node_modules/esbuild": {
1220
+ "version": "0.18.20",
1221
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
1222
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
1223
+ "dev": true,
1224
+ "hasInstallScript": true,
1225
+ "bin": {
1226
+ "esbuild": "bin/esbuild"
1227
+ },
1228
+ "engines": {
1229
+ "node": ">=12"
1230
+ },
1231
+ "optionalDependencies": {
1232
+ "@esbuild/android-arm": "0.18.20",
1233
+ "@esbuild/android-arm64": "0.18.20",
1234
+ "@esbuild/android-x64": "0.18.20",
1235
+ "@esbuild/darwin-arm64": "0.18.20",
1236
+ "@esbuild/darwin-x64": "0.18.20",
1237
+ "@esbuild/freebsd-arm64": "0.18.20",
1238
+ "@esbuild/freebsd-x64": "0.18.20",
1239
+ "@esbuild/linux-arm": "0.18.20",
1240
+ "@esbuild/linux-arm64": "0.18.20",
1241
+ "@esbuild/linux-ia32": "0.18.20",
1242
+ "@esbuild/linux-loong64": "0.18.20",
1243
+ "@esbuild/linux-mips64el": "0.18.20",
1244
+ "@esbuild/linux-ppc64": "0.18.20",
1245
+ "@esbuild/linux-riscv64": "0.18.20",
1246
+ "@esbuild/linux-s390x": "0.18.20",
1247
+ "@esbuild/linux-x64": "0.18.20",
1248
+ "@esbuild/netbsd-x64": "0.18.20",
1249
+ "@esbuild/openbsd-x64": "0.18.20",
1250
+ "@esbuild/sunos-x64": "0.18.20",
1251
+ "@esbuild/win32-arm64": "0.18.20",
1252
+ "@esbuild/win32-ia32": "0.18.20",
1253
+ "@esbuild/win32-x64": "0.18.20"
1254
+ }
1255
+ },
1256
+ "node_modules/escalade": {
1257
+ "version": "3.2.0",
1258
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1259
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1260
+ "dev": true,
1261
+ "engines": {
1262
+ "node": ">=6"
1263
+ }
1264
+ },
1265
+ "node_modules/escape-html": {
1266
+ "version": "1.0.3",
1267
+ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
1268
+ "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
1269
+ },
1270
+ "node_modules/etag": {
1271
+ "version": "1.8.1",
1272
+ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
1273
+ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
1274
+ "engines": {
1275
+ "node": ">= 0.6"
1276
+ }
1277
+ },
1278
+ "node_modules/express": {
1279
+ "version": "4.21.2",
1280
+ "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
1281
+ "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
1282
+ "dependencies": {
1283
+ "accepts": "~1.3.8",
1284
+ "array-flatten": "1.1.1",
1285
+ "body-parser": "1.20.3",
1286
+ "content-disposition": "0.5.4",
1287
+ "content-type": "~1.0.4",
1288
+ "cookie": "0.7.1",
1289
+ "cookie-signature": "1.0.6",
1290
+ "debug": "2.6.9",
1291
+ "depd": "2.0.0",
1292
+ "encodeurl": "~2.0.0",
1293
+ "escape-html": "~1.0.3",
1294
+ "etag": "~1.8.1",
1295
+ "finalhandler": "1.3.1",
1296
+ "fresh": "0.5.2",
1297
+ "http-errors": "2.0.0",
1298
+ "merge-descriptors": "1.0.3",
1299
+ "methods": "~1.1.2",
1300
+ "on-finished": "2.4.1",
1301
+ "parseurl": "~1.3.3",
1302
+ "path-to-regexp": "0.1.12",
1303
+ "proxy-addr": "~2.0.7",
1304
+ "qs": "6.13.0",
1305
+ "range-parser": "~1.2.1",
1306
+ "safe-buffer": "5.2.1",
1307
+ "send": "0.19.0",
1308
+ "serve-static": "1.16.2",
1309
+ "setprototypeof": "1.2.0",
1310
+ "statuses": "2.0.1",
1311
+ "type-is": "~1.6.18",
1312
+ "utils-merge": "1.0.1",
1313
+ "vary": "~1.1.2"
1314
+ },
1315
+ "engines": {
1316
+ "node": ">= 0.10.0"
1317
+ },
1318
+ "funding": {
1319
+ "type": "opencollective",
1320
+ "url": "https://opencollective.com/express"
1321
+ }
1322
+ },
1323
+ "node_modules/express/node_modules/debug": {
1324
+ "version": "2.6.9",
1325
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1326
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1327
+ "dependencies": {
1328
+ "ms": "2.0.0"
1329
+ }
1330
+ },
1331
+ "node_modules/express/node_modules/ms": {
1332
+ "version": "2.0.0",
1333
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1334
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1335
+ },
1336
+ "node_modules/fetch-blob": {
1337
+ "version": "3.2.0",
1338
+ "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
1339
+ "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
1340
+ "funding": [
1341
+ {
1342
+ "type": "github",
1343
+ "url": "https://github.com/sponsors/jimmywarting"
1344
+ },
1345
+ {
1346
+ "type": "paypal",
1347
+ "url": "https://paypal.me/jimmywarting"
1348
+ }
1349
+ ],
1350
+ "dependencies": {
1351
+ "node-domexception": "^1.0.0",
1352
+ "web-streams-polyfill": "^3.0.3"
1353
+ },
1354
+ "engines": {
1355
+ "node": "^12.20 || >= 14.13"
1356
+ }
1357
+ },
1358
+ "node_modules/finalhandler": {
1359
+ "version": "1.3.1",
1360
+ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
1361
+ "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
1362
+ "dependencies": {
1363
+ "debug": "2.6.9",
1364
+ "encodeurl": "~2.0.0",
1365
+ "escape-html": "~1.0.3",
1366
+ "on-finished": "2.4.1",
1367
+ "parseurl": "~1.3.3",
1368
+ "statuses": "2.0.1",
1369
+ "unpipe": "~1.0.0"
1370
+ },
1371
+ "engines": {
1372
+ "node": ">= 0.8"
1373
+ }
1374
+ },
1375
+ "node_modules/finalhandler/node_modules/debug": {
1376
+ "version": "2.6.9",
1377
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
1378
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
1379
+ "dependencies": {
1380
+ "ms": "2.0.0"
1381
+ }
1382
+ },
1383
+ "node_modules/finalhandler/node_modules/ms": {
1384
+ "version": "2.0.0",
1385
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1386
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1387
+ },
1388
+ "node_modules/formdata-polyfill": {
1389
+ "version": "4.0.10",
1390
+ "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
1391
+ "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
1392
+ "dependencies": {
1393
+ "fetch-blob": "^3.1.2"
1394
+ },
1395
+ "engines": {
1396
+ "node": ">=12.20.0"
1397
+ }
1398
+ },
1399
+ "node_modules/forwarded": {
1400
+ "version": "0.2.0",
1401
+ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
1402
+ "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
1403
+ "engines": {
1404
+ "node": ">= 0.6"
1405
+ }
1406
+ },
1407
+ "node_modules/fresh": {
1408
+ "version": "0.5.2",
1409
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
1410
+ "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
1411
+ "engines": {
1412
+ "node": ">= 0.6"
1413
+ }
1414
+ },
1415
+ "node_modules/fsevents": {
1416
+ "version": "2.3.3",
1417
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1418
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1419
+ "dev": true,
1420
+ "hasInstallScript": true,
1421
+ "optional": true,
1422
+ "os": [
1423
+ "darwin"
1424
+ ],
1425
+ "engines": {
1426
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1427
+ }
1428
+ },
1429
+ "node_modules/function-bind": {
1430
+ "version": "1.1.2",
1431
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1432
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1433
+ "funding": {
1434
+ "url": "https://github.com/sponsors/ljharb"
1435
+ }
1436
+ },
1437
+ "node_modules/gensync": {
1438
+ "version": "1.0.0-beta.2",
1439
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1440
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1441
+ "dev": true,
1442
+ "engines": {
1443
+ "node": ">=6.9.0"
1444
+ }
1445
+ },
1446
+ "node_modules/get-caller-file": {
1447
+ "version": "2.0.5",
1448
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
1449
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
1450
+ "dev": true,
1451
+ "engines": {
1452
+ "node": "6.* || 8.* || >= 10.*"
1453
+ }
1454
+ },
1455
+ "node_modules/get-intrinsic": {
1456
+ "version": "1.2.7",
1457
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz",
1458
+ "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==",
1459
+ "dependencies": {
1460
+ "call-bind-apply-helpers": "^1.0.1",
1461
+ "es-define-property": "^1.0.1",
1462
+ "es-errors": "^1.3.0",
1463
+ "es-object-atoms": "^1.0.0",
1464
+ "function-bind": "^1.1.2",
1465
+ "get-proto": "^1.0.0",
1466
+ "gopd": "^1.2.0",
1467
+ "has-symbols": "^1.1.0",
1468
+ "hasown": "^2.0.2",
1469
+ "math-intrinsics": "^1.1.0"
1470
+ },
1471
+ "engines": {
1472
+ "node": ">= 0.4"
1473
+ },
1474
+ "funding": {
1475
+ "url": "https://github.com/sponsors/ljharb"
1476
+ }
1477
+ },
1478
+ "node_modules/get-proto": {
1479
+ "version": "1.0.1",
1480
+ "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
1481
+ "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
1482
+ "dependencies": {
1483
+ "dunder-proto": "^1.0.1",
1484
+ "es-object-atoms": "^1.0.0"
1485
+ },
1486
+ "engines": {
1487
+ "node": ">= 0.4"
1488
+ }
1489
+ },
1490
+ "node_modules/globals": {
1491
+ "version": "11.12.0",
1492
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
1493
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
1494
+ "dev": true,
1495
+ "engines": {
1496
+ "node": ">=4"
1497
+ }
1498
+ },
1499
+ "node_modules/gopd": {
1500
+ "version": "1.2.0",
1501
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
1502
+ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
1503
+ "engines": {
1504
+ "node": ">= 0.4"
1505
+ },
1506
+ "funding": {
1507
+ "url": "https://github.com/sponsors/ljharb"
1508
+ }
1509
+ },
1510
+ "node_modules/has-flag": {
1511
+ "version": "4.0.0",
1512
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1513
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1514
+ "dev": true,
1515
+ "engines": {
1516
+ "node": ">=8"
1517
+ }
1518
+ },
1519
+ "node_modules/has-symbols": {
1520
+ "version": "1.1.0",
1521
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
1522
+ "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
1523
+ "engines": {
1524
+ "node": ">= 0.4"
1525
+ },
1526
+ "funding": {
1527
+ "url": "https://github.com/sponsors/ljharb"
1528
+ }
1529
+ },
1530
+ "node_modules/hasown": {
1531
+ "version": "2.0.2",
1532
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
1533
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
1534
+ "dependencies": {
1535
+ "function-bind": "^1.1.2"
1536
+ },
1537
+ "engines": {
1538
+ "node": ">= 0.4"
1539
+ }
1540
+ },
1541
+ "node_modules/http-errors": {
1542
+ "version": "2.0.0",
1543
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
1544
+ "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
1545
+ "dependencies": {
1546
+ "depd": "2.0.0",
1547
+ "inherits": "2.0.4",
1548
+ "setprototypeof": "1.2.0",
1549
+ "statuses": "2.0.1",
1550
+ "toidentifier": "1.0.1"
1551
+ },
1552
+ "engines": {
1553
+ "node": ">= 0.8"
1554
+ }
1555
+ },
1556
+ "node_modules/iconv-lite": {
1557
+ "version": "0.4.24",
1558
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
1559
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
1560
+ "dependencies": {
1561
+ "safer-buffer": ">= 2.1.2 < 3"
1562
+ },
1563
+ "engines": {
1564
+ "node": ">=0.10.0"
1565
+ }
1566
+ },
1567
+ "node_modules/inherits": {
1568
+ "version": "2.0.4",
1569
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1570
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1571
+ },
1572
+ "node_modules/ipaddr.js": {
1573
+ "version": "1.9.1",
1574
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
1575
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
1576
+ "engines": {
1577
+ "node": ">= 0.10"
1578
+ }
1579
+ },
1580
+ "node_modules/is-fullwidth-code-point": {
1581
+ "version": "3.0.0",
1582
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1583
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1584
+ "dev": true,
1585
+ "engines": {
1586
+ "node": ">=8"
1587
+ }
1588
+ },
1589
+ "node_modules/js-tokens": {
1590
+ "version": "4.0.0",
1591
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1592
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
1593
+ },
1594
+ "node_modules/jsesc": {
1595
+ "version": "3.1.0",
1596
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
1597
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
1598
+ "dev": true,
1599
+ "bin": {
1600
+ "jsesc": "bin/jsesc"
1601
+ },
1602
+ "engines": {
1603
+ "node": ">=6"
1604
+ }
1605
+ },
1606
+ "node_modules/json5": {
1607
+ "version": "2.2.3",
1608
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1609
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1610
+ "dev": true,
1611
+ "bin": {
1612
+ "json5": "lib/cli.js"
1613
+ },
1614
+ "engines": {
1615
+ "node": ">=6"
1616
+ }
1617
+ },
1618
+ "node_modules/lodash": {
1619
+ "version": "4.17.21",
1620
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1621
+ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
1622
+ "dev": true
1623
+ },
1624
+ "node_modules/loose-envify": {
1625
+ "version": "1.4.0",
1626
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1627
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1628
+ "dependencies": {
1629
+ "js-tokens": "^3.0.0 || ^4.0.0"
1630
+ },
1631
+ "bin": {
1632
+ "loose-envify": "cli.js"
1633
+ }
1634
+ },
1635
+ "node_modules/lru-cache": {
1636
+ "version": "5.1.1",
1637
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1638
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1639
+ "dev": true,
1640
+ "dependencies": {
1641
+ "yallist": "^3.0.2"
1642
+ }
1643
+ },
1644
+ "node_modules/math-intrinsics": {
1645
+ "version": "1.1.0",
1646
+ "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
1647
+ "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
1648
+ "engines": {
1649
+ "node": ">= 0.4"
1650
+ }
1651
+ },
1652
+ "node_modules/media-typer": {
1653
+ "version": "0.3.0",
1654
+ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
1655
+ "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
1656
+ "engines": {
1657
+ "node": ">= 0.6"
1658
+ }
1659
+ },
1660
+ "node_modules/merge-descriptors": {
1661
+ "version": "1.0.3",
1662
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
1663
+ "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
1664
+ "funding": {
1665
+ "url": "https://github.com/sponsors/sindresorhus"
1666
+ }
1667
+ },
1668
+ "node_modules/methods": {
1669
+ "version": "1.1.2",
1670
+ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
1671
+ "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
1672
+ "engines": {
1673
+ "node": ">= 0.6"
1674
+ }
1675
+ },
1676
+ "node_modules/mime": {
1677
+ "version": "1.6.0",
1678
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1679
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1680
+ "bin": {
1681
+ "mime": "cli.js"
1682
+ },
1683
+ "engines": {
1684
+ "node": ">=4"
1685
+ }
1686
+ },
1687
+ "node_modules/mime-db": {
1688
+ "version": "1.52.0",
1689
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
1690
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
1691
+ "engines": {
1692
+ "node": ">= 0.6"
1693
+ }
1694
+ },
1695
+ "node_modules/mime-types": {
1696
+ "version": "2.1.35",
1697
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
1698
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
1699
+ "dependencies": {
1700
+ "mime-db": "1.52.0"
1701
+ },
1702
+ "engines": {
1703
+ "node": ">= 0.6"
1704
+ }
1705
+ },
1706
+ "node_modules/ms": {
1707
+ "version": "2.1.3",
1708
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1709
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1710
+ },
1711
+ "node_modules/nanoid": {
1712
+ "version": "3.3.8",
1713
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz",
1714
+ "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
1715
+ "dev": true,
1716
+ "funding": [
1717
+ {
1718
+ "type": "github",
1719
+ "url": "https://github.com/sponsors/ai"
1720
+ }
1721
+ ],
1722
+ "bin": {
1723
+ "nanoid": "bin/nanoid.cjs"
1724
+ },
1725
+ "engines": {
1726
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1727
+ }
1728
+ },
1729
+ "node_modules/negotiator": {
1730
+ "version": "0.6.3",
1731
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1732
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1733
+ "engines": {
1734
+ "node": ">= 0.6"
1735
+ }
1736
+ },
1737
+ "node_modules/node-domexception": {
1738
+ "version": "1.0.0",
1739
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
1740
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
1741
+ "funding": [
1742
+ {
1743
+ "type": "github",
1744
+ "url": "https://github.com/sponsors/jimmywarting"
1745
+ },
1746
+ {
1747
+ "type": "github",
1748
+ "url": "https://paypal.me/jimmywarting"
1749
+ }
1750
+ ],
1751
+ "engines": {
1752
+ "node": ">=10.5.0"
1753
+ }
1754
+ },
1755
+ "node_modules/node-fetch": {
1756
+ "version": "3.3.2",
1757
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
1758
+ "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
1759
+ "dependencies": {
1760
+ "data-uri-to-buffer": "^4.0.0",
1761
+ "fetch-blob": "^3.1.4",
1762
+ "formdata-polyfill": "^4.0.10"
1763
+ },
1764
+ "engines": {
1765
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1766
+ },
1767
+ "funding": {
1768
+ "type": "opencollective",
1769
+ "url": "https://opencollective.com/node-fetch"
1770
+ }
1771
+ },
1772
+ "node_modules/node-releases": {
1773
+ "version": "2.0.19",
1774
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
1775
+ "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==",
1776
+ "dev": true
1777
+ },
1778
+ "node_modules/object-assign": {
1779
+ "version": "4.1.1",
1780
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1781
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1782
+ "engines": {
1783
+ "node": ">=0.10.0"
1784
+ }
1785
+ },
1786
+ "node_modules/object-inspect": {
1787
+ "version": "1.13.3",
1788
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz",
1789
+ "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==",
1790
+ "engines": {
1791
+ "node": ">= 0.4"
1792
+ },
1793
+ "funding": {
1794
+ "url": "https://github.com/sponsors/ljharb"
1795
+ }
1796
+ },
1797
+ "node_modules/on-finished": {
1798
+ "version": "2.4.1",
1799
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1800
+ "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1801
+ "dependencies": {
1802
+ "ee-first": "1.1.1"
1803
+ },
1804
+ "engines": {
1805
+ "node": ">= 0.8"
1806
+ }
1807
+ },
1808
+ "node_modules/parseurl": {
1809
+ "version": "1.3.3",
1810
+ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1811
+ "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1812
+ "engines": {
1813
+ "node": ">= 0.8"
1814
+ }
1815
+ },
1816
+ "node_modules/path-to-regexp": {
1817
+ "version": "0.1.12",
1818
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
1819
+ "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ=="
1820
+ },
1821
+ "node_modules/picocolors": {
1822
+ "version": "1.1.1",
1823
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1824
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1825
+ "dev": true
1826
+ },
1827
+ "node_modules/postcss": {
1828
+ "version": "8.5.1",
1829
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz",
1830
+ "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==",
1831
+ "dev": true,
1832
+ "funding": [
1833
+ {
1834
+ "type": "opencollective",
1835
+ "url": "https://opencollective.com/postcss/"
1836
+ },
1837
+ {
1838
+ "type": "tidelift",
1839
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1840
+ },
1841
+ {
1842
+ "type": "github",
1843
+ "url": "https://github.com/sponsors/ai"
1844
+ }
1845
+ ],
1846
+ "dependencies": {
1847
+ "nanoid": "^3.3.8",
1848
+ "picocolors": "^1.1.1",
1849
+ "source-map-js": "^1.2.1"
1850
+ },
1851
+ "engines": {
1852
+ "node": "^10 || ^12 || >=14"
1853
+ }
1854
+ },
1855
+ "node_modules/proxy-addr": {
1856
+ "version": "2.0.7",
1857
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1858
+ "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1859
+ "dependencies": {
1860
+ "forwarded": "0.2.0",
1861
+ "ipaddr.js": "1.9.1"
1862
+ },
1863
+ "engines": {
1864
+ "node": ">= 0.10"
1865
+ }
1866
+ },
1867
+ "node_modules/qs": {
1868
+ "version": "6.13.0",
1869
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
1870
+ "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
1871
+ "dependencies": {
1872
+ "side-channel": "^1.0.6"
1873
+ },
1874
+ "engines": {
1875
+ "node": ">=0.6"
1876
+ },
1877
+ "funding": {
1878
+ "url": "https://github.com/sponsors/ljharb"
1879
+ }
1880
+ },
1881
+ "node_modules/range-parser": {
1882
+ "version": "1.2.1",
1883
+ "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1884
+ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1885
+ "engines": {
1886
+ "node": ">= 0.6"
1887
+ }
1888
+ },
1889
+ "node_modules/raw-body": {
1890
+ "version": "2.5.2",
1891
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
1892
+ "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
1893
+ "dependencies": {
1894
+ "bytes": "3.1.2",
1895
+ "http-errors": "2.0.0",
1896
+ "iconv-lite": "0.4.24",
1897
+ "unpipe": "1.0.0"
1898
+ },
1899
+ "engines": {
1900
+ "node": ">= 0.8"
1901
+ }
1902
+ },
1903
+ "node_modules/react": {
1904
+ "version": "18.3.1",
1905
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
1906
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
1907
+ "dependencies": {
1908
+ "loose-envify": "^1.1.0"
1909
+ },
1910
+ "engines": {
1911
+ "node": ">=0.10.0"
1912
+ }
1913
+ },
1914
+ "node_modules/react-dom": {
1915
+ "version": "18.3.1",
1916
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
1917
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
1918
+ "dependencies": {
1919
+ "loose-envify": "^1.1.0",
1920
+ "scheduler": "^0.23.2"
1921
+ },
1922
+ "peerDependencies": {
1923
+ "react": "^18.3.1"
1924
+ }
1925
+ },
1926
+ "node_modules/react-refresh": {
1927
+ "version": "0.14.2",
1928
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz",
1929
+ "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==",
1930
+ "dev": true,
1931
+ "engines": {
1932
+ "node": ">=0.10.0"
1933
+ }
1934
+ },
1935
+ "node_modules/regenerator-runtime": {
1936
+ "version": "0.14.1",
1937
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
1938
+ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
1939
+ "dev": true
1940
+ },
1941
+ "node_modules/require-directory": {
1942
+ "version": "2.1.1",
1943
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1944
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
1945
+ "dev": true,
1946
+ "engines": {
1947
+ "node": ">=0.10.0"
1948
+ }
1949
+ },
1950
+ "node_modules/rollup": {
1951
+ "version": "3.29.5",
1952
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.5.tgz",
1953
+ "integrity": "sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==",
1954
+ "dev": true,
1955
+ "bin": {
1956
+ "rollup": "dist/bin/rollup"
1957
+ },
1958
+ "engines": {
1959
+ "node": ">=14.18.0",
1960
+ "npm": ">=8.0.0"
1961
+ },
1962
+ "optionalDependencies": {
1963
+ "fsevents": "~2.3.2"
1964
+ }
1965
+ },
1966
+ "node_modules/rxjs": {
1967
+ "version": "7.8.1",
1968
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz",
1969
+ "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==",
1970
+ "dev": true,
1971
+ "dependencies": {
1972
+ "tslib": "^2.1.0"
1973
+ }
1974
+ },
1975
+ "node_modules/safe-buffer": {
1976
+ "version": "5.2.1",
1977
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1978
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1979
+ "funding": [
1980
+ {
1981
+ "type": "github",
1982
+ "url": "https://github.com/sponsors/feross"
1983
+ },
1984
+ {
1985
+ "type": "patreon",
1986
+ "url": "https://www.patreon.com/feross"
1987
+ },
1988
+ {
1989
+ "type": "consulting",
1990
+ "url": "https://feross.org/support"
1991
+ }
1992
+ ]
1993
+ },
1994
+ "node_modules/safer-buffer": {
1995
+ "version": "2.1.2",
1996
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1997
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1998
+ },
1999
+ "node_modules/scheduler": {
2000
+ "version": "0.23.2",
2001
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
2002
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
2003
+ "dependencies": {
2004
+ "loose-envify": "^1.1.0"
2005
+ }
2006
+ },
2007
+ "node_modules/semver": {
2008
+ "version": "6.3.1",
2009
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2010
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2011
+ "dev": true,
2012
+ "bin": {
2013
+ "semver": "bin/semver.js"
2014
+ }
2015
+ },
2016
+ "node_modules/send": {
2017
+ "version": "0.19.0",
2018
+ "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
2019
+ "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
2020
+ "dependencies": {
2021
+ "debug": "2.6.9",
2022
+ "depd": "2.0.0",
2023
+ "destroy": "1.2.0",
2024
+ "encodeurl": "~1.0.2",
2025
+ "escape-html": "~1.0.3",
2026
+ "etag": "~1.8.1",
2027
+ "fresh": "0.5.2",
2028
+ "http-errors": "2.0.0",
2029
+ "mime": "1.6.0",
2030
+ "ms": "2.1.3",
2031
+ "on-finished": "2.4.1",
2032
+ "range-parser": "~1.2.1",
2033
+ "statuses": "2.0.1"
2034
+ },
2035
+ "engines": {
2036
+ "node": ">= 0.8.0"
2037
+ }
2038
+ },
2039
+ "node_modules/send/node_modules/debug": {
2040
+ "version": "2.6.9",
2041
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
2042
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
2043
+ "dependencies": {
2044
+ "ms": "2.0.0"
2045
+ }
2046
+ },
2047
+ "node_modules/send/node_modules/debug/node_modules/ms": {
2048
+ "version": "2.0.0",
2049
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
2050
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
2051
+ },
2052
+ "node_modules/send/node_modules/encodeurl": {
2053
+ "version": "1.0.2",
2054
+ "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
2055
+ "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
2056
+ "engines": {
2057
+ "node": ">= 0.8"
2058
+ }
2059
+ },
2060
+ "node_modules/serve-static": {
2061
+ "version": "1.16.2",
2062
+ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
2063
+ "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
2064
+ "dependencies": {
2065
+ "encodeurl": "~2.0.0",
2066
+ "escape-html": "~1.0.3",
2067
+ "parseurl": "~1.3.3",
2068
+ "send": "0.19.0"
2069
+ },
2070
+ "engines": {
2071
+ "node": ">= 0.8.0"
2072
+ }
2073
+ },
2074
+ "node_modules/setprototypeof": {
2075
+ "version": "1.2.0",
2076
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
2077
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
2078
+ },
2079
+ "node_modules/shell-quote": {
2080
+ "version": "1.8.2",
2081
+ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz",
2082
+ "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==",
2083
+ "dev": true,
2084
+ "engines": {
2085
+ "node": ">= 0.4"
2086
+ },
2087
+ "funding": {
2088
+ "url": "https://github.com/sponsors/ljharb"
2089
+ }
2090
+ },
2091
+ "node_modules/side-channel": {
2092
+ "version": "1.1.0",
2093
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
2094
+ "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
2095
+ "dependencies": {
2096
+ "es-errors": "^1.3.0",
2097
+ "object-inspect": "^1.13.3",
2098
+ "side-channel-list": "^1.0.0",
2099
+ "side-channel-map": "^1.0.1",
2100
+ "side-channel-weakmap": "^1.0.2"
2101
+ },
2102
+ "engines": {
2103
+ "node": ">= 0.4"
2104
+ },
2105
+ "funding": {
2106
+ "url": "https://github.com/sponsors/ljharb"
2107
+ }
2108
+ },
2109
+ "node_modules/side-channel-list": {
2110
+ "version": "1.0.0",
2111
+ "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
2112
+ "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
2113
+ "dependencies": {
2114
+ "es-errors": "^1.3.0",
2115
+ "object-inspect": "^1.13.3"
2116
+ },
2117
+ "engines": {
2118
+ "node": ">= 0.4"
2119
+ },
2120
+ "funding": {
2121
+ "url": "https://github.com/sponsors/ljharb"
2122
+ }
2123
+ },
2124
+ "node_modules/side-channel-map": {
2125
+ "version": "1.0.1",
2126
+ "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
2127
+ "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
2128
+ "dependencies": {
2129
+ "call-bound": "^1.0.2",
2130
+ "es-errors": "^1.3.0",
2131
+ "get-intrinsic": "^1.2.5",
2132
+ "object-inspect": "^1.13.3"
2133
+ },
2134
+ "engines": {
2135
+ "node": ">= 0.4"
2136
+ },
2137
+ "funding": {
2138
+ "url": "https://github.com/sponsors/ljharb"
2139
+ }
2140
+ },
2141
+ "node_modules/side-channel-weakmap": {
2142
+ "version": "1.0.2",
2143
+ "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
2144
+ "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
2145
+ "dependencies": {
2146
+ "call-bound": "^1.0.2",
2147
+ "es-errors": "^1.3.0",
2148
+ "get-intrinsic": "^1.2.5",
2149
+ "object-inspect": "^1.13.3",
2150
+ "side-channel-map": "^1.0.1"
2151
+ },
2152
+ "engines": {
2153
+ "node": ">= 0.4"
2154
+ },
2155
+ "funding": {
2156
+ "url": "https://github.com/sponsors/ljharb"
2157
+ }
2158
+ },
2159
+ "node_modules/source-map-js": {
2160
+ "version": "1.2.1",
2161
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2162
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2163
+ "dev": true,
2164
+ "engines": {
2165
+ "node": ">=0.10.0"
2166
+ }
2167
+ },
2168
+ "node_modules/spawn-command": {
2169
+ "version": "0.0.2",
2170
+ "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz",
2171
+ "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==",
2172
+ "dev": true
2173
+ },
2174
+ "node_modules/statuses": {
2175
+ "version": "2.0.1",
2176
+ "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
2177
+ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
2178
+ "engines": {
2179
+ "node": ">= 0.8"
2180
+ }
2181
+ },
2182
+ "node_modules/string-width": {
2183
+ "version": "4.2.3",
2184
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2185
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2186
+ "dev": true,
2187
+ "dependencies": {
2188
+ "emoji-regex": "^8.0.0",
2189
+ "is-fullwidth-code-point": "^3.0.0",
2190
+ "strip-ansi": "^6.0.1"
2191
+ },
2192
+ "engines": {
2193
+ "node": ">=8"
2194
+ }
2195
+ },
2196
+ "node_modules/strip-ansi": {
2197
+ "version": "6.0.1",
2198
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2199
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2200
+ "dev": true,
2201
+ "dependencies": {
2202
+ "ansi-regex": "^5.0.1"
2203
+ },
2204
+ "engines": {
2205
+ "node": ">=8"
2206
+ }
2207
+ },
2208
+ "node_modules/supports-color": {
2209
+ "version": "8.1.1",
2210
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
2211
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
2212
+ "dev": true,
2213
+ "dependencies": {
2214
+ "has-flag": "^4.0.0"
2215
+ },
2216
+ "engines": {
2217
+ "node": ">=10"
2218
+ },
2219
+ "funding": {
2220
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
2221
+ }
2222
+ },
2223
+ "node_modules/toidentifier": {
2224
+ "version": "1.0.1",
2225
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
2226
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
2227
+ "engines": {
2228
+ "node": ">=0.6"
2229
+ }
2230
+ },
2231
+ "node_modules/tree-kill": {
2232
+ "version": "1.2.2",
2233
+ "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
2234
+ "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
2235
+ "dev": true,
2236
+ "bin": {
2237
+ "tree-kill": "cli.js"
2238
+ }
2239
+ },
2240
+ "node_modules/tslib": {
2241
+ "version": "2.8.1",
2242
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
2243
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
2244
+ "dev": true
2245
+ },
2246
+ "node_modules/type-is": {
2247
+ "version": "1.6.18",
2248
+ "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
2249
+ "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
2250
+ "dependencies": {
2251
+ "media-typer": "0.3.0",
2252
+ "mime-types": "~2.1.24"
2253
+ },
2254
+ "engines": {
2255
+ "node": ">= 0.6"
2256
+ }
2257
+ },
2258
+ "node_modules/unpipe": {
2259
+ "version": "1.0.0",
2260
+ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
2261
+ "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
2262
+ "engines": {
2263
+ "node": ">= 0.8"
2264
+ }
2265
+ },
2266
+ "node_modules/update-browserslist-db": {
2267
+ "version": "1.1.2",
2268
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz",
2269
+ "integrity": "sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==",
2270
+ "dev": true,
2271
+ "funding": [
2272
+ {
2273
+ "type": "opencollective",
2274
+ "url": "https://opencollective.com/browserslist"
2275
+ },
2276
+ {
2277
+ "type": "tidelift",
2278
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
2279
+ },
2280
+ {
2281
+ "type": "github",
2282
+ "url": "https://github.com/sponsors/ai"
2283
+ }
2284
+ ],
2285
+ "dependencies": {
2286
+ "escalade": "^3.2.0",
2287
+ "picocolors": "^1.1.1"
2288
+ },
2289
+ "bin": {
2290
+ "update-browserslist-db": "cli.js"
2291
+ },
2292
+ "peerDependencies": {
2293
+ "browserslist": ">= 4.21.0"
2294
+ }
2295
+ },
2296
+ "node_modules/utils-merge": {
2297
+ "version": "1.0.1",
2298
+ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
2299
+ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
2300
+ "engines": {
2301
+ "node": ">= 0.4.0"
2302
+ }
2303
+ },
2304
+ "node_modules/vary": {
2305
+ "version": "1.1.2",
2306
+ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
2307
+ "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
2308
+ "engines": {
2309
+ "node": ">= 0.8"
2310
+ }
2311
+ },
2312
+ "node_modules/vite": {
2313
+ "version": "4.5.9",
2314
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.9.tgz",
2315
+ "integrity": "sha512-qK9W4xjgD3gXbC0NmdNFFnVFLMWSNiR3swj957yutwzzN16xF/E7nmtAyp1rT9hviDroQANjE4HK3H4WqWdFtw==",
2316
+ "dev": true,
2317
+ "dependencies": {
2318
+ "esbuild": "^0.18.10",
2319
+ "postcss": "^8.4.27",
2320
+ "rollup": "^3.27.1"
2321
+ },
2322
+ "bin": {
2323
+ "vite": "bin/vite.js"
2324
+ },
2325
+ "engines": {
2326
+ "node": "^14.18.0 || >=16.0.0"
2327
+ },
2328
+ "funding": {
2329
+ "url": "https://github.com/vitejs/vite?sponsor=1"
2330
+ },
2331
+ "optionalDependencies": {
2332
+ "fsevents": "~2.3.2"
2333
+ },
2334
+ "peerDependencies": {
2335
+ "@types/node": ">= 14",
2336
+ "less": "*",
2337
+ "lightningcss": "^1.21.0",
2338
+ "sass": "*",
2339
+ "stylus": "*",
2340
+ "sugarss": "*",
2341
+ "terser": "^5.4.0"
2342
+ },
2343
+ "peerDependenciesMeta": {
2344
+ "@types/node": {
2345
+ "optional": true
2346
+ },
2347
+ "less": {
2348
+ "optional": true
2349
+ },
2350
+ "lightningcss": {
2351
+ "optional": true
2352
+ },
2353
+ "sass": {
2354
+ "optional": true
2355
+ },
2356
+ "stylus": {
2357
+ "optional": true
2358
+ },
2359
+ "sugarss": {
2360
+ "optional": true
2361
+ },
2362
+ "terser": {
2363
+ "optional": true
2364
+ }
2365
+ }
2366
+ },
2367
+ "node_modules/web-streams-polyfill": {
2368
+ "version": "3.3.3",
2369
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
2370
+ "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==",
2371
+ "engines": {
2372
+ "node": ">= 8"
2373
+ }
2374
+ },
2375
+ "node_modules/wrap-ansi": {
2376
+ "version": "7.0.0",
2377
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
2378
+ "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
2379
+ "dev": true,
2380
+ "dependencies": {
2381
+ "ansi-styles": "^4.0.0",
2382
+ "string-width": "^4.1.0",
2383
+ "strip-ansi": "^6.0.0"
2384
+ },
2385
+ "engines": {
2386
+ "node": ">=10"
2387
+ },
2388
+ "funding": {
2389
+ "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
2390
+ }
2391
+ },
2392
+ "node_modules/y18n": {
2393
+ "version": "5.0.8",
2394
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
2395
+ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
2396
+ "dev": true,
2397
+ "engines": {
2398
+ "node": ">=10"
2399
+ }
2400
+ },
2401
+ "node_modules/yallist": {
2402
+ "version": "3.1.1",
2403
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
2404
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
2405
+ "dev": true
2406
+ },
2407
+ "node_modules/yargs": {
2408
+ "version": "17.7.2",
2409
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
2410
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
2411
+ "dev": true,
2412
+ "dependencies": {
2413
+ "cliui": "^8.0.1",
2414
+ "escalade": "^3.1.1",
2415
+ "get-caller-file": "^2.0.5",
2416
+ "require-directory": "^2.1.1",
2417
+ "string-width": "^4.2.3",
2418
+ "y18n": "^5.0.5",
2419
+ "yargs-parser": "^21.1.1"
2420
+ },
2421
+ "engines": {
2422
+ "node": ">=12"
2423
+ }
2424
+ },
2425
+ "node_modules/yargs-parser": {
2426
+ "version": "21.1.1",
2427
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
2428
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
2429
+ "dev": true,
2430
+ "engines": {
2431
+ "node": ">=12"
2432
+ }
2433
+ }
2434
+ }
2435
+ }
package.json ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "thinking-model-client",
3
+ "private": true,
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "server": "node server/index.js",
11
+ "start": "concurrently \"npm run dev\" \"npm run server\"",
12
+ "prod": "NODE_ENV=production node server/index.js"
13
+ },
14
+ "dependencies": {
15
+ "react": "^18.2.0",
16
+ "react-dom": "^18.2.0",
17
+ "express": "^4.18.2",
18
+ "cors": "^2.8.5",
19
+ "node-fetch": "^3.3.2"
20
+ },
21
+ "devDependencies": {
22
+ "@types/react": "^18.2.15",
23
+ "@types/react-dom": "^18.2.7",
24
+ "@vitejs/plugin-react": "^4.0.3",
25
+ "vite": "^4.4.5",
26
+ "concurrently": "^8.2.0"
27
+ }
28
+ }
server/index.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import express from 'express';
2
+ import cors from 'cors';
3
+ import fetch from 'node-fetch';
4
+ import path from 'path'
5
+ import { fileURLToPath } from 'url'
6
+
7
+ const app = express();
8
+ const port = 7860;
9
+
10
+ const __filename = fileURLToPath(import.meta.url)
11
+ const __dirname = path.dirname(__filename)
12
+
13
+ app.use(cors());
14
+ app.use(express.json());
15
+
16
+ app.post('/api/chat', async (req, res) => {
17
+ const { messages, apiEndpoint, apiKey, model } = req.body;
18
+
19
+ try {
20
+ const response = await fetch(`${apiEndpoint}/v1/chat/completions`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'Content-Type': 'application/json',
24
+ 'Authorization': `Bearer ${apiKey}`
25
+ },
26
+ body: JSON.stringify({
27
+ model: model,
28
+ messages: messages
29
+ })
30
+ });
31
+
32
+ if (!response.ok) {
33
+ const errorData = await response.text();
34
+ throw new Error(`API error: ${response.status} - ${errorData}`);
35
+ }
36
+
37
+ const data = await response.json();
38
+ res.json(data);
39
+ } catch (error) {
40
+ console.error('Error:', error);
41
+ res.status(500).json({ error: error.message });
42
+ }
43
+ });
44
+
45
+ if (process.env.NODE_ENV === 'production') {
46
+ // Serve static files from the dist directory
47
+ app.use(express.static(path.join(__dirname, '../dist')))
48
+
49
+ // Handle all other routes by serving the index.html
50
+ app.get('*', (req, res) => {
51
+ res.sendFile(path.join(__dirname, '../dist/index.html'))
52
+ })
53
+ }
54
+
55
+ app.listen(port, () => {
56
+ console.log(`Server running at http://localhost:${port}`);
57
+ });
src/App.jsx ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState } from 'react';
2
+ import ChatList from './components/ChatList';
3
+ import ChatWindow from './components/ChatWindow';
4
+ import Settings from './components/Settings';
5
+ import useLocalStorage from './hooks/useLocalStorage';
6
+
7
+ function App() {
8
+ const [settings, setSettings] = useLocalStorage('settings', {
9
+ apiEndpoint: '',
10
+ apiKey: ''
11
+ });
12
+
13
+ const [chats, setChats] = useLocalStorage('chats', []);
14
+ const [currentChatId, setCurrentChatId] = useState(null);
15
+ const [error, setError] = useState(null);
16
+ const [loading, setLoading] = useState(false);
17
+
18
+ const createNewChat = () => {
19
+ const newChat = {
20
+ id: Date.now(),
21
+ title: 'New Conversation',
22
+ messages: []
23
+ };
24
+ setChats([...chats, newChat]);
25
+ setCurrentChatId(newChat.id);
26
+ };
27
+
28
+ const deleteChat = (chatId) => {
29
+ setChats(chats.filter(chat => chat.id !== chatId));
30
+ if (currentChatId === chatId) {
31
+ setCurrentChatId(null);
32
+ }
33
+ };
34
+
35
+ return (
36
+ <div className="app-container">
37
+ <div className="sidebar">
38
+ <ChatList
39
+ chats={chats}
40
+ currentChat={chats.find(c => c.id === currentChatId)}
41
+ onSelectChat={setCurrentChatId}
42
+ onDeleteChat={deleteChat}
43
+ onCreateNewChat={createNewChat}
44
+ />
45
+ <div className="settings-wrapper">
46
+ <Settings
47
+ settings={settings}
48
+ onSave={setSettings}
49
+ setSettings={setSettings}
50
+ />
51
+ </div>
52
+ </div>
53
+ <div className="main-content">
54
+ {currentChatId && (
55
+ <ChatWindow
56
+ chat={chats.find(c => c.id === currentChatId)}
57
+ settings={settings}
58
+ onUpdateChat={(updatedChat) => {
59
+ setChats(chats.map(c =>
60
+ c.id === updatedChat.id ? updatedChat : c
61
+ ));
62
+ }}
63
+ />
64
+ )}
65
+ </div>
66
+ {error && (
67
+ <div className="error-message">
68
+ Error: {error}
69
+ </div>
70
+ )}
71
+ {loading && (
72
+ <div className="loading">
73
+ Loading...
74
+ </div>
75
+ )}
76
+ </div>
77
+ );
78
+ }
79
+
80
+ export default App;
src/components/ChatList.jsx ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react';
2
+
3
+ function ChatList({ chats, currentChat, onSelectChat, onDeleteChat, onCreateNewChat }) {
4
+ return (
5
+ <div className="chat-list">
6
+ <h2>Conversations</h2>
7
+ <button className="new-chat" onClick={onCreateNewChat}>
8
+ New Chat
9
+ </button>
10
+ {chats.length === 0 ? (
11
+ <div className="empty-state">No conversations yet</div>
12
+ ) : (
13
+ chats.map(chat => (
14
+ <div
15
+ key={chat.id}
16
+ className={`chat-item ${chat.id === currentChat?.id ? 'active' : ''}`}
17
+ onClick={() => onSelectChat(chat.id)}
18
+ >
19
+ <span>{chat.title}</span>
20
+ <button
21
+ className="delete-btn"
22
+ onClick={(e) => {
23
+ e.stopPropagation();
24
+ onDeleteChat(chat.id);
25
+ }}
26
+ >
27
+ Delete
28
+ </button>
29
+ </div>
30
+ ))
31
+ )}
32
+ </div>
33
+ );
34
+ }
35
+
36
+ export default ChatList;
src/components/ChatWindow.jsx ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React, { useState } from 'react';
2
+
3
+ function ChatWindow({ chat, settings, onUpdateChat }) {
4
+ const [input, setInput] = useState('');
5
+ const [isLoading, setIsLoading] = useState(false);
6
+ const [collapsedThinks, setCollapsedThinks] = useState(new Set());
7
+
8
+ // 添加解析消息的函数
9
+ const parseMessage = (content) => {
10
+ const thinkMatch = content.match(/<think>([\s\S]*?)<\/think>/);
11
+ const mainContent = content.replace(/<think>[\s\S]*?<\/think>/, '').trim();
12
+ return {
13
+ think: thinkMatch ? thinkMatch[1].trim() : null,
14
+ content: mainContent
15
+ };
16
+ };
17
+
18
+ // 添加切换折叠状态的函数
19
+ const toggleThink = (timestamp) => {
20
+ const newCollapsed = new Set(collapsedThinks);
21
+ if (newCollapsed.has(timestamp)) {
22
+ newCollapsed.delete(timestamp);
23
+ } else {
24
+ newCollapsed.add(timestamp);
25
+ }
26
+ setCollapsedThinks(newCollapsed);
27
+ };
28
+
29
+ const handleSendMessage = async () => {
30
+ if (!input.trim()) return;
31
+
32
+ const newMessage = {
33
+ role: 'user',
34
+ content: input,
35
+ timestamp: Date.now() // 确保添加时间戳
36
+ };
37
+
38
+ const updatedChat = {
39
+ ...chat,
40
+ messages: [...chat.messages, newMessage]
41
+ };
42
+ onUpdateChat(updatedChat);
43
+ setInput('');
44
+
45
+ // 发送API请求
46
+ setIsLoading(true);
47
+ try {
48
+ const response = await fetch('/api/chat', {
49
+ method: 'POST',
50
+ headers: {
51
+ 'Content-Type': 'application/json',
52
+ },
53
+ body: JSON.stringify({
54
+ messages: [...updatedChat.messages.map(msg => ({
55
+ role: msg.role,
56
+ content: msg.content
57
+ }))],
58
+ apiKey: settings.apiKey,
59
+ model: settings.model,
60
+ apiEndpoint: settings.apiEndpoint,
61
+ }),
62
+ });
63
+
64
+ if (!response.ok) {
65
+ const errorData = await response.text();
66
+ throw new Error(`HTTP error! status: ${response.status}, message: ${errorData}`);
67
+ }
68
+
69
+ const data = await response.json();
70
+
71
+ // 添加AI回复
72
+ const aiMessage = {
73
+ role: 'assistant',
74
+ content: data.choices[0].message.content,
75
+ timestamp: Date.now()
76
+ };
77
+
78
+ const finalChat = {
79
+ ...updatedChat,
80
+ messages: [...updatedChat.messages, aiMessage]
81
+ };
82
+ onUpdateChat(finalChat);
83
+ } catch (error) {
84
+ console.error('Failed to send message:', error);
85
+ alert(`Failed to send message: ${error.message}`);
86
+ } finally {
87
+ setIsLoading(false);
88
+ }
89
+ };
90
+
91
+ return (
92
+ <div className="chat-window">
93
+ <div className="chat-messages">
94
+ {chat.messages.map((message, index) => {
95
+ const parsedMessage = message.role === 'assistant'
96
+ ? parseMessage(message.content)
97
+ : { content: message.content, think: null };
98
+
99
+ return (
100
+ <div key={index} className={`message ${message.role}`}>
101
+ <div className="message-content">
102
+ {message.role === 'assistant' && parsedMessage.think && (
103
+ <div className="think-block">
104
+ <div
105
+ className="think-header"
106
+ onClick={() => toggleThink(message.timestamp)}
107
+ >
108
+ Thinking Process {collapsedThinks.has(message.timestamp) ? '▼' : '▲'}
109
+ </div>
110
+ {!collapsedThinks.has(message.timestamp) && (
111
+ <div className="think-content">
112
+ {parsedMessage.think}
113
+ </div>
114
+ )}
115
+ </div>
116
+ )}
117
+ <div className="content-text">
118
+ {parsedMessage.content}
119
+ </div>
120
+ </div>
121
+ {message.timestamp && (
122
+ <div className="message-time">
123
+ {new Date(message.timestamp).toLocaleTimeString()}
124
+ </div>
125
+ )}
126
+ </div>
127
+ );
128
+ })}
129
+ {isLoading && (
130
+ <div className="message assistant">
131
+ <div className="message-content">
132
+ <div className="loading-indicator">Thinking...</div>
133
+ </div>
134
+ </div>
135
+ )}
136
+ </div>
137
+ <div className="chat-input">
138
+ <textarea
139
+ className="message-input"
140
+ value={input}
141
+ onChange={(e) => setInput(e.target.value)}
142
+ placeholder="Type your message..."
143
+ onKeyDown={(e) => {
144
+ if (e.key === 'Enter' && !e.shiftKey) {
145
+ e.preventDefault();
146
+ handleSendMessage();
147
+ }
148
+ }}
149
+ />
150
+ <button onClick={handleSendMessage}>Send</button>
151
+ </div>
152
+ </div>
153
+ );
154
+ }
155
+
156
+ export default ChatWindow;
src/components/Settings.jsx ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState } from 'react';
2
+
3
+ function Settings({ settings, onSave, setSettings }) {
4
+ const [formData, setFormData] = useState(settings);
5
+
6
+ const handleSubmit = (e) => {
7
+ e.preventDefault();
8
+ onSave(formData);
9
+ };
10
+
11
+ return (
12
+ <div className="settings-panel">
13
+ <h2>Settings</h2>
14
+ <form onSubmit={handleSubmit}>
15
+ <div className="setting-item">
16
+ <label>API Endpoint:</label>
17
+ <input
18
+ type="text"
19
+ value={formData.apiEndpoint}
20
+ onChange={(e) => setFormData({
21
+ ...formData,
22
+ apiEndpoint: e.target.value
23
+ })}
24
+ placeholder="Enter API endpoint"
25
+ />
26
+ </div>
27
+ <div className="setting-item">
28
+ <label>API Key:</label>
29
+ <input
30
+ type="password"
31
+ value={formData.apiKey}
32
+ onChange={(e) => setFormData({
33
+ ...formData,
34
+ apiKey: e.target.value
35
+ })}
36
+ placeholder="Enter your API key"
37
+ />
38
+ </div>
39
+ <div className="setting-item">
40
+ <label>Model:</label>
41
+ <input
42
+ type="text"
43
+ value={formData.model}
44
+ onChange={(e) => setFormData({
45
+ ...formData,
46
+ model: e.target.value
47
+ })}
48
+ placeholder="Enter model name (e.g., gpt-3.5-turbo)"
49
+ />
50
+ </div>
51
+ <button type="submit" className="save-button">Save Settings</button>
52
+ </form>
53
+ </div>
54
+ );
55
+ }
56
+
57
+ export default Settings;
src/hooks/useLocalStorage.js ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState, useEffect } from 'react';
2
+
3
+ function useLocalStorage(key, initialValue) {
4
+ // 获取初始值
5
+ const [storedValue, setStoredValue] = useState(() => {
6
+ try {
7
+ const item = window.localStorage.getItem(key);
8
+ return item ? JSON.parse(item) : initialValue;
9
+ } catch (error) {
10
+ console.error(error);
11
+ return initialValue;
12
+ }
13
+ });
14
+
15
+ // 监听值的变化并更新到 localStorage
16
+ useEffect(() => {
17
+ try {
18
+ window.localStorage.setItem(key, JSON.stringify(storedValue));
19
+ } catch (error) {
20
+ console.error(error);
21
+ }
22
+ }, [key, storedValue]);
23
+
24
+ return [storedValue, setStoredValue];
25
+ }
26
+
27
+ export default useLocalStorage;
src/index.css ADDED
@@ -0,0 +1,566 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .app {
2
+ display: flex;
3
+ flex-direction: column;
4
+ height: 100vh;
5
+ position: relative;
6
+ }
7
+
8
+ .settings {
9
+ margin-bottom: 20px;
10
+ padding: 15px;
11
+ background: #f5f5f5;
12
+ border-radius: 8px;
13
+ }
14
+
15
+ .settings form {
16
+ display: flex;
17
+ gap: 15px;
18
+ align-items: center;
19
+ }
20
+
21
+ .main-content {
22
+ display: flex;
23
+ gap: 20px;
24
+ flex: 1;
25
+ overflow: hidden;
26
+ padding: 20px 20px 80px 20px;
27
+ white-space: pre-wrap;
28
+ }
29
+
30
+ .chat-list {
31
+ flex: 1;
32
+ padding: 15px;
33
+ display: flex;
34
+ flex-direction: column;
35
+ gap: 10px;
36
+ overflow-y: auto;
37
+ padding-bottom: 200px;
38
+ position: relative;
39
+ }
40
+
41
+ .chat-list h2 {
42
+ font-size: 16px;
43
+ font-weight: 500;
44
+ color: #333;
45
+ margin-bottom: 12px;
46
+ }
47
+
48
+ .new-chat {
49
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-hover) 100%);
50
+ color: white;
51
+ padding: 8px 16px;
52
+ border: none;
53
+ border-radius: 6px;
54
+ cursor: pointer;
55
+ font-size: 0.875rem;
56
+ font-weight: 500;
57
+ width: 100%;
58
+ margin-bottom: 15px;
59
+ transition: all 0.2s ease;
60
+ z-index: 1;
61
+ }
62
+
63
+ .new-chat:hover {
64
+ background: linear-gradient(135deg, var(--primary-hover) 0%, #1d4ed8 100%);
65
+ transform: translateY(-1px);
66
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
67
+ }
68
+
69
+ .chat-item {
70
+ display: flex;
71
+ justify-content: space-between;
72
+ align-items: center;
73
+ padding: 8px 12px;
74
+ margin-bottom: 6px;
75
+ border-radius: 6px;
76
+ cursor: pointer;
77
+ font-size: 12px;
78
+ transition: all 0.2s ease;
79
+ }
80
+
81
+ .chat-item:hover {
82
+ background: #f5f5f5;
83
+ }
84
+
85
+ .chat-item.active {
86
+ background: #e3f2fd;
87
+ }
88
+
89
+ .delete-btn {
90
+ padding: 4px 8px;
91
+ background: #fee2e2;
92
+ color: #dc2626;
93
+ border: none;
94
+ border-radius: 4px;
95
+ font-size: 11px;
96
+ cursor: pointer;
97
+ opacity: 0;
98
+ transition: opacity 0.2s ease;
99
+ }
100
+
101
+ .chat-item:hover .delete-btn {
102
+ opacity: 1;
103
+ }
104
+
105
+ .delete-btn:hover {
106
+ background: #fecaca;
107
+ }
108
+
109
+ .empty-state {
110
+ text-align: center;
111
+ color: #666;
112
+ font-size: 12px;
113
+ margin-top: 20px;
114
+ }
115
+
116
+ /* 聊天窗口的基础样式 */
117
+ .chat-window {
118
+ flex: 1;
119
+ display: flex;
120
+ flex-direction: column;
121
+ height: 100%;
122
+ }
123
+
124
+ /* 消息列表区域 */
125
+ .chat-messages {
126
+ flex: 1;
127
+ overflow-y: auto;
128
+ padding: 20px;
129
+ display: flex;
130
+ flex-direction: column;
131
+ }
132
+
133
+ /* 消息样式 */
134
+ .message {
135
+ margin-bottom: 16px;
136
+ max-width: 85%;
137
+ display: flex;
138
+ flex-direction: column;
139
+ }
140
+
141
+ .message.user {
142
+ margin-left: auto;
143
+ align-items: flex-end;
144
+ }
145
+
146
+ .message.assistant {
147
+ margin-right: auto;
148
+ align-items: flex-start;
149
+ }
150
+
151
+ .message-content {
152
+ padding: 12px 16px;
153
+ border-radius: 12px;
154
+ font-size: 14px;
155
+ line-height: 1.5;
156
+ width: fit-content;
157
+ max-width: 100%;
158
+ }
159
+
160
+ .content-text {
161
+ white-space: pre-wrap;
162
+ word-break: break-word;
163
+ }
164
+
165
+ .message.user .message-content {
166
+ background: var(--primary-color);
167
+ color: white;
168
+ }
169
+
170
+ .message.assistant .message-content {
171
+ background: #f8f9fa;
172
+ color: #333;
173
+ }
174
+
175
+ .message-time {
176
+ font-size: 12px;
177
+ color: #666;
178
+ margin-top: 4px;
179
+ opacity: 0.8;
180
+ }
181
+
182
+ /* 思考过程块样式 */
183
+ .think-block {
184
+ margin-bottom: 8px;
185
+ width: 100%;
186
+ background: #f8f9fa;
187
+ border: 1px solid #eee;
188
+ border-radius: 8px;
189
+ padding: 8px 12px;
190
+ }
191
+
192
+ .think-header {
193
+ font-size: 12px;
194
+ color: #666;
195
+ cursor: pointer;
196
+ padding: 4px 0;
197
+ display: flex;
198
+ align-items: center;
199
+ gap: 4px;
200
+ }
201
+
202
+ .think-content {
203
+ font-size: 12px;
204
+ color: #666;
205
+ padding: 8px 0;
206
+ white-space: pre-wrap;
207
+ word-break: break-word;
208
+ }
209
+
210
+ .message-time {
211
+ font-size: 12px;
212
+ color: #666;
213
+ margin-top: 4px;
214
+ opacity: 0.8;
215
+ }
216
+
217
+ /* 输入区域样式 */
218
+ .chat-input {
219
+ padding: 16px;
220
+ background: #ffffff;
221
+ border-top: 1px solid var(--border-color);
222
+ display: flex;
223
+ gap: 12px;
224
+ align-items: flex-start;
225
+ }
226
+
227
+ .message-input {
228
+ flex: 1;
229
+ padding: 10px;
230
+ border: 1px solid var(--border-color);
231
+ border-radius: 8px;
232
+ font-size: 14px;
233
+ min-height: 40px;
234
+ max-height: 120px;
235
+ resize: none;
236
+ line-height: 1.5;
237
+ }
238
+
239
+ .message-input:focus {
240
+ outline: none;
241
+ border-color: var(--primary-color);
242
+ box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.1);
243
+ }
244
+
245
+ .chat-input button {
246
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
247
+ color: white;
248
+ padding: 10px 20px;
249
+ border: none;
250
+ border-radius: 8px;
251
+ font-size: 13px;
252
+ font-weight: 500;
253
+ cursor: pointer;
254
+ transition: all 0.2s ease;
255
+ height: fit-content;
256
+ }
257
+
258
+ .chat-input button:hover {
259
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
260
+ transform: translateY(-1px);
261
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
262
+ }
263
+
264
+ .chat-input button:disabled {
265
+ background: #e2e8f0;
266
+ cursor: not-allowed;
267
+ transform: none;
268
+ box-shadow: none;
269
+ }
270
+
271
+ /* Loading状态 */
272
+ .loading {
273
+ padding: 12px 16px;
274
+ background: #f8f9fa;
275
+ border-radius: 8px;
276
+ color: #666;
277
+ font-size: 13px;
278
+ display: flex;
279
+ align-items: center;
280
+ gap: 8px;
281
+ margin-bottom: 16px;
282
+ width: fit-content;
283
+ }
284
+
285
+ /* 添加滚动条样式 */
286
+ .chat-messages::-webkit-scrollbar {
287
+ width: 6px;
288
+ }
289
+
290
+ .chat-messages::-webkit-scrollbar-track {
291
+ background: #f1f1f1;
292
+ }
293
+
294
+ .chat-messages::-webkit-scrollbar-thumb {
295
+ background: #ccc;
296
+ border-radius: 3px;
297
+ }
298
+
299
+ .chat-messages::-webkit-scrollbar-thumb:hover {
300
+ background: #999;
301
+ }
302
+
303
+ .settings-wrapper {
304
+ position: fixed;
305
+ left: 20px;
306
+ bottom: 20px;
307
+ width: 250px;
308
+ z-index: 100;
309
+ }
310
+
311
+ .settings-container {
312
+ background: #ffffff;
313
+ border-radius: 8px;
314
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
315
+ padding: 15px;
316
+ margin: 0;
317
+ }
318
+
319
+ .setting-item {
320
+ margin-bottom: 12px;
321
+ }
322
+
323
+ .setting-item:last-child {
324
+ margin-bottom: 0;
325
+ }
326
+
327
+ .setting-item label {
328
+ display: block;
329
+ margin-bottom: 4px;
330
+ font-weight: 500;
331
+ color: #333;
332
+ font-size: 12px;
333
+ }
334
+
335
+ .setting-item input {
336
+ width: 100%;
337
+ padding: 6px 8px;
338
+ border: 1px solid #ddd;
339
+ border-radius: 4px;
340
+ font-size: 12px;
341
+ }
342
+
343
+ .setting-item input:focus {
344
+ outline: none;
345
+ border-color: #007bff;
346
+ box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
347
+ }
348
+
349
+ button[type="submit"] {
350
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
351
+ color: white;
352
+ padding: 8px 16px;
353
+ border: none;
354
+ border-radius: 6px;
355
+ cursor: pointer;
356
+ font-size: 0.875rem;
357
+ font-weight: 500;
358
+ width: 100%;
359
+ margin-top: 8px;
360
+ transition: all 0.2s ease;
361
+ }
362
+
363
+ button[type="submit"]:hover {
364
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
365
+ transform: translateY(-1px);
366
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
367
+ }
368
+
369
+ button[type="submit"]:disabled {
370
+ background: #e2e8f0;
371
+ cursor: not-allowed;
372
+ transform: none;
373
+ box-shadow: none;
374
+ }
375
+
376
+ .assistant .message-content .think-block {
377
+ margin: 0 0 8px 0;
378
+ }
379
+
380
+ /* 添加一些基础变量 */
381
+ :root {
382
+ --sidebar-width: 260px;
383
+ --primary-color: #3b82f6;
384
+ --primary-hover: #2563eb;
385
+ --border-color: #e5e5e5;
386
+ }
387
+
388
+ /* 重置一些基础样式 */
389
+ .app-container {
390
+ display: flex;
391
+ height: 100vh;
392
+ width: 100vw;
393
+ overflow: hidden;
394
+ }
395
+
396
+ .sidebar {
397
+ width: var(--sidebar-width);
398
+ border-right: 1px solid var(--border-color);
399
+ height: 100vh;
400
+ background: #ffffff;
401
+ position: relative;
402
+ display: flex;
403
+ flex-direction: column;
404
+ }
405
+
406
+ .main-content {
407
+ flex: 1;
408
+ height: 100vh;
409
+ overflow: hidden;
410
+ display: flex;
411
+ flex-direction: column;
412
+ background: #ffffff;
413
+ position: relative; /* 添加相对定位 */
414
+ }
415
+
416
+ /* 统一按钮样式 */
417
+ button {
418
+ background: linear-gradient(135deg, var(--primary-color) 0%, var(--primary-hover) 100%);
419
+ color: white;
420
+ padding: 8px 16px;
421
+ border: none;
422
+ border-radius: 6px;
423
+ cursor: pointer;
424
+ font-size: 0.875rem;
425
+ font-weight: 500;
426
+ transition: all 0.2s ease;
427
+ }
428
+
429
+ button:hover {
430
+ background: linear-gradient(135deg, var(--primary-hover) 0%, #1d4ed8 100%);
431
+ transform: translateY(-1px);
432
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
433
+ }
434
+
435
+ /* ChatList 样式优化 */
436
+ .chat-list {
437
+ flex: 1;
438
+ padding: 15px;
439
+ display: flex;
440
+ flex-direction: column;
441
+ gap: 10px;
442
+ overflow-y: auto;
443
+ padding-bottom: 200px;
444
+ }
445
+
446
+ .chat-item {
447
+ display: flex;
448
+ justify-content: space-between;
449
+ align-items: center;
450
+ padding: 8px 12px;
451
+ border-radius: 6px;
452
+ cursor: pointer;
453
+ transition: background-color 0.2s;
454
+ }
455
+
456
+ .chat-item:hover {
457
+ background-color: #f5f5f5;
458
+ }
459
+
460
+ .chat-item.active {
461
+ background-color: #e3f2fd;
462
+ }
463
+
464
+ /* Settings 样式调整 */
465
+ .settings-wrapper {
466
+ position: absolute;
467
+ left: 0;
468
+ bottom: 0;
469
+ width: 100%;
470
+ background: #ffffff;
471
+ border-top: 1px solid var(--border-color);
472
+ padding: 15px;
473
+ }
474
+
475
+ .settings-container {
476
+ background: #ffffff;
477
+ border-radius: 8px;
478
+ }
479
+
480
+ .setting-item {
481
+ margin-bottom: 12px;
482
+ }
483
+
484
+ .setting-item:last-child {
485
+ margin-bottom: 0;
486
+ }
487
+
488
+ .setting-item label {
489
+ display: block;
490
+ margin-bottom: 4px;
491
+ font-weight: 500;
492
+ color: #333;
493
+ font-size: 12px;
494
+ }
495
+
496
+ .setting-item input {
497
+ width: 100%;
498
+ padding: 6px 8px;
499
+ border: 1px solid #ddd;
500
+ border-radius: 4px;
501
+ font-size: 12px;
502
+ }
503
+
504
+ .setting-item input:focus {
505
+ outline: none;
506
+ border-color: #007bff;
507
+ box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
508
+ }
509
+
510
+ button[type="submit"] {
511
+ background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
512
+ color: white;
513
+ padding: 8px 16px;
514
+ border: none;
515
+ border-radius: 6px;
516
+ cursor: pointer;
517
+ font-size: 0.875rem;
518
+ font-weight: 500;
519
+ width: 100%;
520
+ margin-top: 8px;
521
+ transition: all 0.2s ease;
522
+ }
523
+
524
+ button[type="submit"]:hover {
525
+ background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);
526
+ transform: translateY(-1px);
527
+ box-shadow: 0 4px 12px rgba(37, 99, 235, 0.2);
528
+ }
529
+
530
+ button[type="submit"]:disabled {
531
+ background: #e2e8f0;
532
+ cursor: not-allowed;
533
+ transform: none;
534
+ box-shadow: none;
535
+ }
536
+
537
+ .assistant .message-content .think-block {
538
+ margin: 0 0 8px 0;
539
+ }
540
+
541
+ /* 状态提示样式 */
542
+ .error-message,
543
+ .loading {
544
+ position: fixed;
545
+ bottom: 20px;
546
+ right: 20px;
547
+ padding: 12px 20px;
548
+ border-radius: 8px;
549
+ background: #ffffff;
550
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
551
+ z-index: 1000;
552
+ }
553
+
554
+ .error-message {
555
+ background: #fee2e2;
556
+ color: #dc2626;
557
+ }
558
+
559
+ /* Loading indicator */
560
+ .loading-indicator {
561
+ display: flex;
562
+ align-items: center;
563
+ gap: 8px;
564
+ color: #666;
565
+ font-size: 14px;
566
+ }
src/main.jsx ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from 'react'
2
+ import ReactDOM from 'react-dom/client'
3
+ import App from './App'
4
+ import './index.css'
5
+
6
+ ReactDOM.createRoot(document.getElementById('root')).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>,
10
+ )
vite.config.js ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { defineConfig } from 'vite'
2
+ import react from '@vitejs/plugin-react'
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ server: {
7
+ proxy: {
8
+ '/v1': {
9
+ target: 'https://moelove.info',
10
+ changeOrigin: true,
11
+ secure: false,
12
+ headers: {
13
+ 'Access-Control-Allow-Origin': '*'
14
+ }
15
+ },
16
+ '/api': {
17
+ target: 'http://localhost:3600',
18
+ changeOrigin: true
19
+ }
20
+ }
21
+ }
22
+ })