Jayanth4577 commited on
Commit
779fa3a
·
1 Parent(s): 869514a

feat: initialize React application with Vite and TypeScript

Browse files

- Add package.json for project dependencies and scripts
- Create main application component (App.tsx) with routing
- Implement AboutPage component with project details
- Develop HomePage component with action scenarios and API integration
- Set up main entry point (main.tsx) for rendering the application
- Add global styles (styles.css) for consistent UI design
- Configure TypeScript settings (tsconfig.json) for the project
- Create Vite configuration file (vite.config.ts) for build setup

package-lock.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "name": "metaXrl",
3
+ "lockfileVersion": 3,
4
+ "requires": true,
5
+ "packages": {}
6
+ }
soc-openenv/README.md CHANGED
@@ -102,6 +102,15 @@ python server.py
102
  # API docs at http://localhost:7860/docs
103
  ```
104
 
 
 
 
 
 
 
 
 
 
105
  ### Quick API test
106
 
107
  ```bash
 
102
  # API docs at http://localhost:7860/docs
103
  ```
104
 
105
+ ### Run the web UI (React + TypeScript)
106
+
107
+ ```bash
108
+ cd web
109
+ npm install
110
+ npm run dev
111
+ # UI at http://localhost:5173
112
+ ```
113
+
114
  ### Quick API test
115
 
116
  ```bash
soc-openenv/web/.gitignore ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ node_modules/
2
+ dist/
3
+ .vite/
4
+ *.tsbuildinfo
soc-openenv/web/index.html ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>SOC OpenEnv Console</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/src/main.tsx"></script>
11
+ </body>
12
+ </html>
soc-openenv/web/package-lock.json ADDED
@@ -0,0 +1,1656 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "soc-openenv-web",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "soc-openenv-web",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "react": "^18.3.1",
12
+ "react-dom": "^18.3.1",
13
+ "react-router-dom": "^6.28.0"
14
+ },
15
+ "devDependencies": {
16
+ "@types/react": "^18.3.12",
17
+ "@types/react-dom": "^18.3.1",
18
+ "@vitejs/plugin-react": "^4.3.3",
19
+ "typescript": "^5.6.3",
20
+ "vite": "^8.0.7"
21
+ }
22
+ },
23
+ "node_modules/@babel/code-frame": {
24
+ "version": "7.29.0",
25
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
26
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
27
+ "dev": true,
28
+ "license": "MIT",
29
+ "dependencies": {
30
+ "@babel/helper-validator-identifier": "^7.28.5",
31
+ "js-tokens": "^4.0.0",
32
+ "picocolors": "^1.1.1"
33
+ },
34
+ "engines": {
35
+ "node": ">=6.9.0"
36
+ }
37
+ },
38
+ "node_modules/@babel/compat-data": {
39
+ "version": "7.29.0",
40
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz",
41
+ "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==",
42
+ "dev": true,
43
+ "license": "MIT",
44
+ "engines": {
45
+ "node": ">=6.9.0"
46
+ }
47
+ },
48
+ "node_modules/@babel/core": {
49
+ "version": "7.29.0",
50
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
51
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
52
+ "dev": true,
53
+ "license": "MIT",
54
+ "dependencies": {
55
+ "@babel/code-frame": "^7.29.0",
56
+ "@babel/generator": "^7.29.0",
57
+ "@babel/helper-compilation-targets": "^7.28.6",
58
+ "@babel/helper-module-transforms": "^7.28.6",
59
+ "@babel/helpers": "^7.28.6",
60
+ "@babel/parser": "^7.29.0",
61
+ "@babel/template": "^7.28.6",
62
+ "@babel/traverse": "^7.29.0",
63
+ "@babel/types": "^7.29.0",
64
+ "@jridgewell/remapping": "^2.3.5",
65
+ "convert-source-map": "^2.0.0",
66
+ "debug": "^4.1.0",
67
+ "gensync": "^1.0.0-beta.2",
68
+ "json5": "^2.2.3",
69
+ "semver": "^6.3.1"
70
+ },
71
+ "engines": {
72
+ "node": ">=6.9.0"
73
+ },
74
+ "funding": {
75
+ "type": "opencollective",
76
+ "url": "https://opencollective.com/babel"
77
+ }
78
+ },
79
+ "node_modules/@babel/generator": {
80
+ "version": "7.29.1",
81
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
82
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
83
+ "dev": true,
84
+ "license": "MIT",
85
+ "dependencies": {
86
+ "@babel/parser": "^7.29.0",
87
+ "@babel/types": "^7.29.0",
88
+ "@jridgewell/gen-mapping": "^0.3.12",
89
+ "@jridgewell/trace-mapping": "^0.3.28",
90
+ "jsesc": "^3.0.2"
91
+ },
92
+ "engines": {
93
+ "node": ">=6.9.0"
94
+ }
95
+ },
96
+ "node_modules/@babel/helper-compilation-targets": {
97
+ "version": "7.28.6",
98
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
99
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
100
+ "dev": true,
101
+ "license": "MIT",
102
+ "dependencies": {
103
+ "@babel/compat-data": "^7.28.6",
104
+ "@babel/helper-validator-option": "^7.27.1",
105
+ "browserslist": "^4.24.0",
106
+ "lru-cache": "^5.1.1",
107
+ "semver": "^6.3.1"
108
+ },
109
+ "engines": {
110
+ "node": ">=6.9.0"
111
+ }
112
+ },
113
+ "node_modules/@babel/helper-globals": {
114
+ "version": "7.28.0",
115
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
116
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
117
+ "dev": true,
118
+ "license": "MIT",
119
+ "engines": {
120
+ "node": ">=6.9.0"
121
+ }
122
+ },
123
+ "node_modules/@babel/helper-module-imports": {
124
+ "version": "7.28.6",
125
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
126
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
127
+ "dev": true,
128
+ "license": "MIT",
129
+ "dependencies": {
130
+ "@babel/traverse": "^7.28.6",
131
+ "@babel/types": "^7.28.6"
132
+ },
133
+ "engines": {
134
+ "node": ">=6.9.0"
135
+ }
136
+ },
137
+ "node_modules/@babel/helper-module-transforms": {
138
+ "version": "7.28.6",
139
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
140
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
141
+ "dev": true,
142
+ "license": "MIT",
143
+ "dependencies": {
144
+ "@babel/helper-module-imports": "^7.28.6",
145
+ "@babel/helper-validator-identifier": "^7.28.5",
146
+ "@babel/traverse": "^7.28.6"
147
+ },
148
+ "engines": {
149
+ "node": ">=6.9.0"
150
+ },
151
+ "peerDependencies": {
152
+ "@babel/core": "^7.0.0"
153
+ }
154
+ },
155
+ "node_modules/@babel/helper-plugin-utils": {
156
+ "version": "7.28.6",
157
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
158
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
159
+ "dev": true,
160
+ "license": "MIT",
161
+ "engines": {
162
+ "node": ">=6.9.0"
163
+ }
164
+ },
165
+ "node_modules/@babel/helper-string-parser": {
166
+ "version": "7.27.1",
167
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
168
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
169
+ "dev": true,
170
+ "license": "MIT",
171
+ "engines": {
172
+ "node": ">=6.9.0"
173
+ }
174
+ },
175
+ "node_modules/@babel/helper-validator-identifier": {
176
+ "version": "7.28.5",
177
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
178
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
179
+ "dev": true,
180
+ "license": "MIT",
181
+ "engines": {
182
+ "node": ">=6.9.0"
183
+ }
184
+ },
185
+ "node_modules/@babel/helper-validator-option": {
186
+ "version": "7.27.1",
187
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
188
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
189
+ "dev": true,
190
+ "license": "MIT",
191
+ "engines": {
192
+ "node": ">=6.9.0"
193
+ }
194
+ },
195
+ "node_modules/@babel/helpers": {
196
+ "version": "7.29.2",
197
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
198
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
199
+ "dev": true,
200
+ "license": "MIT",
201
+ "dependencies": {
202
+ "@babel/template": "^7.28.6",
203
+ "@babel/types": "^7.29.0"
204
+ },
205
+ "engines": {
206
+ "node": ">=6.9.0"
207
+ }
208
+ },
209
+ "node_modules/@babel/parser": {
210
+ "version": "7.29.2",
211
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz",
212
+ "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==",
213
+ "dev": true,
214
+ "license": "MIT",
215
+ "dependencies": {
216
+ "@babel/types": "^7.29.0"
217
+ },
218
+ "bin": {
219
+ "parser": "bin/babel-parser.js"
220
+ },
221
+ "engines": {
222
+ "node": ">=6.0.0"
223
+ }
224
+ },
225
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
226
+ "version": "7.27.1",
227
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
228
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
229
+ "dev": true,
230
+ "license": "MIT",
231
+ "dependencies": {
232
+ "@babel/helper-plugin-utils": "^7.27.1"
233
+ },
234
+ "engines": {
235
+ "node": ">=6.9.0"
236
+ },
237
+ "peerDependencies": {
238
+ "@babel/core": "^7.0.0-0"
239
+ }
240
+ },
241
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
242
+ "version": "7.27.1",
243
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
244
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
245
+ "dev": true,
246
+ "license": "MIT",
247
+ "dependencies": {
248
+ "@babel/helper-plugin-utils": "^7.27.1"
249
+ },
250
+ "engines": {
251
+ "node": ">=6.9.0"
252
+ },
253
+ "peerDependencies": {
254
+ "@babel/core": "^7.0.0-0"
255
+ }
256
+ },
257
+ "node_modules/@babel/template": {
258
+ "version": "7.28.6",
259
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
260
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
261
+ "dev": true,
262
+ "license": "MIT",
263
+ "dependencies": {
264
+ "@babel/code-frame": "^7.28.6",
265
+ "@babel/parser": "^7.28.6",
266
+ "@babel/types": "^7.28.6"
267
+ },
268
+ "engines": {
269
+ "node": ">=6.9.0"
270
+ }
271
+ },
272
+ "node_modules/@babel/traverse": {
273
+ "version": "7.29.0",
274
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
275
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
276
+ "dev": true,
277
+ "license": "MIT",
278
+ "dependencies": {
279
+ "@babel/code-frame": "^7.29.0",
280
+ "@babel/generator": "^7.29.0",
281
+ "@babel/helper-globals": "^7.28.0",
282
+ "@babel/parser": "^7.29.0",
283
+ "@babel/template": "^7.28.6",
284
+ "@babel/types": "^7.29.0",
285
+ "debug": "^4.3.1"
286
+ },
287
+ "engines": {
288
+ "node": ">=6.9.0"
289
+ }
290
+ },
291
+ "node_modules/@babel/types": {
292
+ "version": "7.29.0",
293
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
294
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
295
+ "dev": true,
296
+ "license": "MIT",
297
+ "dependencies": {
298
+ "@babel/helper-string-parser": "^7.27.1",
299
+ "@babel/helper-validator-identifier": "^7.28.5"
300
+ },
301
+ "engines": {
302
+ "node": ">=6.9.0"
303
+ }
304
+ },
305
+ "node_modules/@emnapi/core": {
306
+ "version": "1.9.1",
307
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz",
308
+ "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==",
309
+ "dev": true,
310
+ "license": "MIT",
311
+ "optional": true,
312
+ "dependencies": {
313
+ "@emnapi/wasi-threads": "1.2.0",
314
+ "tslib": "^2.4.0"
315
+ }
316
+ },
317
+ "node_modules/@emnapi/runtime": {
318
+ "version": "1.9.1",
319
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz",
320
+ "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==",
321
+ "dev": true,
322
+ "license": "MIT",
323
+ "optional": true,
324
+ "dependencies": {
325
+ "tslib": "^2.4.0"
326
+ }
327
+ },
328
+ "node_modules/@emnapi/wasi-threads": {
329
+ "version": "1.2.0",
330
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz",
331
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
332
+ "dev": true,
333
+ "license": "MIT",
334
+ "optional": true,
335
+ "dependencies": {
336
+ "tslib": "^2.4.0"
337
+ }
338
+ },
339
+ "node_modules/@jridgewell/gen-mapping": {
340
+ "version": "0.3.13",
341
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
342
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
343
+ "dev": true,
344
+ "license": "MIT",
345
+ "dependencies": {
346
+ "@jridgewell/sourcemap-codec": "^1.5.0",
347
+ "@jridgewell/trace-mapping": "^0.3.24"
348
+ }
349
+ },
350
+ "node_modules/@jridgewell/remapping": {
351
+ "version": "2.3.5",
352
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
353
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
354
+ "dev": true,
355
+ "license": "MIT",
356
+ "dependencies": {
357
+ "@jridgewell/gen-mapping": "^0.3.5",
358
+ "@jridgewell/trace-mapping": "^0.3.24"
359
+ }
360
+ },
361
+ "node_modules/@jridgewell/resolve-uri": {
362
+ "version": "3.1.2",
363
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
364
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
365
+ "dev": true,
366
+ "license": "MIT",
367
+ "engines": {
368
+ "node": ">=6.0.0"
369
+ }
370
+ },
371
+ "node_modules/@jridgewell/sourcemap-codec": {
372
+ "version": "1.5.5",
373
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
374
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
375
+ "dev": true,
376
+ "license": "MIT"
377
+ },
378
+ "node_modules/@jridgewell/trace-mapping": {
379
+ "version": "0.3.31",
380
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
381
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
382
+ "dev": true,
383
+ "license": "MIT",
384
+ "dependencies": {
385
+ "@jridgewell/resolve-uri": "^3.1.0",
386
+ "@jridgewell/sourcemap-codec": "^1.4.14"
387
+ }
388
+ },
389
+ "node_modules/@napi-rs/wasm-runtime": {
390
+ "version": "1.1.2",
391
+ "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz",
392
+ "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==",
393
+ "dev": true,
394
+ "license": "MIT",
395
+ "optional": true,
396
+ "dependencies": {
397
+ "@tybys/wasm-util": "^0.10.1"
398
+ },
399
+ "funding": {
400
+ "type": "github",
401
+ "url": "https://github.com/sponsors/Brooooooklyn"
402
+ },
403
+ "peerDependencies": {
404
+ "@emnapi/core": "^1.7.1",
405
+ "@emnapi/runtime": "^1.7.1"
406
+ }
407
+ },
408
+ "node_modules/@oxc-project/types": {
409
+ "version": "0.123.0",
410
+ "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.123.0.tgz",
411
+ "integrity": "sha512-YtECP/y8Mj1lSHiUWGSRzy/C6teUKlS87dEfuVKT09LgQbUsBW1rNg+MiJ4buGu3yuADV60gbIvo9/HplA56Ew==",
412
+ "dev": true,
413
+ "license": "MIT",
414
+ "funding": {
415
+ "url": "https://github.com/sponsors/Boshen"
416
+ }
417
+ },
418
+ "node_modules/@remix-run/router": {
419
+ "version": "1.23.2",
420
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.23.2.tgz",
421
+ "integrity": "sha512-Ic6m2U/rMjTkhERIa/0ZtXJP17QUi2CbWE7cqx4J58M8aA3QTfW+2UlQ4psvTX9IO1RfNVhK3pcpdjej7L+t2w==",
422
+ "license": "MIT",
423
+ "engines": {
424
+ "node": ">=14.0.0"
425
+ }
426
+ },
427
+ "node_modules/@rolldown/binding-android-arm64": {
428
+ "version": "1.0.0-rc.13",
429
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.13.tgz",
430
+ "integrity": "sha512-5ZiiecKH2DXAVJTNN13gNMUcCDg4Jy8ZjbXEsPnqa248wgOVeYRX0iqXXD5Jz4bI9BFHgKsI2qmyJynstbmr+g==",
431
+ "cpu": [
432
+ "arm64"
433
+ ],
434
+ "dev": true,
435
+ "license": "MIT",
436
+ "optional": true,
437
+ "os": [
438
+ "android"
439
+ ],
440
+ "engines": {
441
+ "node": "^20.19.0 || >=22.12.0"
442
+ }
443
+ },
444
+ "node_modules/@rolldown/binding-darwin-arm64": {
445
+ "version": "1.0.0-rc.13",
446
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.13.tgz",
447
+ "integrity": "sha512-tz/v/8G77seu8zAB3A5sK3UFoOl06zcshEzhUO62sAEtrEuW/H1CcyoupOrD+NbQJytYgA4CppXPzlrmp4JZKA==",
448
+ "cpu": [
449
+ "arm64"
450
+ ],
451
+ "dev": true,
452
+ "license": "MIT",
453
+ "optional": true,
454
+ "os": [
455
+ "darwin"
456
+ ],
457
+ "engines": {
458
+ "node": "^20.19.0 || >=22.12.0"
459
+ }
460
+ },
461
+ "node_modules/@rolldown/binding-darwin-x64": {
462
+ "version": "1.0.0-rc.13",
463
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.13.tgz",
464
+ "integrity": "sha512-8DakphqOz8JrMYWTJmWA+vDJxut6LijZ8Xcdc4flOlAhU7PNVwo2MaWBF9iXjJAPo5rC/IxEFZDhJ3GC7NHvug==",
465
+ "cpu": [
466
+ "x64"
467
+ ],
468
+ "dev": true,
469
+ "license": "MIT",
470
+ "optional": true,
471
+ "os": [
472
+ "darwin"
473
+ ],
474
+ "engines": {
475
+ "node": "^20.19.0 || >=22.12.0"
476
+ }
477
+ },
478
+ "node_modules/@rolldown/binding-freebsd-x64": {
479
+ "version": "1.0.0-rc.13",
480
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.13.tgz",
481
+ "integrity": "sha512-4wBQFfjDuXYN/SVI8inBF3Aa+isq40rc6VMFbk5jcpolUBTe5cYnMsHZ51nFWsx3PVyyNN3vgoESki0Hmr/4BA==",
482
+ "cpu": [
483
+ "x64"
484
+ ],
485
+ "dev": true,
486
+ "license": "MIT",
487
+ "optional": true,
488
+ "os": [
489
+ "freebsd"
490
+ ],
491
+ "engines": {
492
+ "node": "^20.19.0 || >=22.12.0"
493
+ }
494
+ },
495
+ "node_modules/@rolldown/binding-linux-arm-gnueabihf": {
496
+ "version": "1.0.0-rc.13",
497
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.13.tgz",
498
+ "integrity": "sha512-JW/e4yPIXLms+jmnbwwy5LA/LxVwZUWLN8xug+V200wzaVi5TEGIWQlh8o91gWYFxW609euI98OCCemmWGuPrw==",
499
+ "cpu": [
500
+ "arm"
501
+ ],
502
+ "dev": true,
503
+ "license": "MIT",
504
+ "optional": true,
505
+ "os": [
506
+ "linux"
507
+ ],
508
+ "engines": {
509
+ "node": "^20.19.0 || >=22.12.0"
510
+ }
511
+ },
512
+ "node_modules/@rolldown/binding-linux-arm64-gnu": {
513
+ "version": "1.0.0-rc.13",
514
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.13.tgz",
515
+ "integrity": "sha512-ZfKWpXiUymDnavepCaM6KG/uGydJ4l2nBmMxg60Ci4CbeefpqjPWpfaZM7PThOhk2dssqBAcwLc6rAyr0uTdXg==",
516
+ "cpu": [
517
+ "arm64"
518
+ ],
519
+ "dev": true,
520
+ "license": "MIT",
521
+ "optional": true,
522
+ "os": [
523
+ "linux"
524
+ ],
525
+ "engines": {
526
+ "node": "^20.19.0 || >=22.12.0"
527
+ }
528
+ },
529
+ "node_modules/@rolldown/binding-linux-arm64-musl": {
530
+ "version": "1.0.0-rc.13",
531
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.13.tgz",
532
+ "integrity": "sha512-bmRg3O6Z0gq9yodKKWCIpnlH051sEfdVwt+6m5UDffAQMUUqU0xjnQqqAUm+Gu7ofAAly9DqiQDtKu2nPDEABA==",
533
+ "cpu": [
534
+ "arm64"
535
+ ],
536
+ "dev": true,
537
+ "license": "MIT",
538
+ "optional": true,
539
+ "os": [
540
+ "linux"
541
+ ],
542
+ "engines": {
543
+ "node": "^20.19.0 || >=22.12.0"
544
+ }
545
+ },
546
+ "node_modules/@rolldown/binding-linux-ppc64-gnu": {
547
+ "version": "1.0.0-rc.13",
548
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.13.tgz",
549
+ "integrity": "sha512-8Wtnbw4k7pMYN9B/mOEAsQ8HOiq7AZ31Ig4M9BKn2So4xRaFEhtCSa4ZJaOutOWq50zpgR4N5+L/opnlaCx8wQ==",
550
+ "cpu": [
551
+ "ppc64"
552
+ ],
553
+ "dev": true,
554
+ "license": "MIT",
555
+ "optional": true,
556
+ "os": [
557
+ "linux"
558
+ ],
559
+ "engines": {
560
+ "node": "^20.19.0 || >=22.12.0"
561
+ }
562
+ },
563
+ "node_modules/@rolldown/binding-linux-s390x-gnu": {
564
+ "version": "1.0.0-rc.13",
565
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.13.tgz",
566
+ "integrity": "sha512-D/0Nlo8mQuxSMohNJUF2lDXWRsFDsHldfRRgD9bRgktj+EndGPj4DOV37LqDKPYS+osdyhZEH7fTakTAEcW7qg==",
567
+ "cpu": [
568
+ "s390x"
569
+ ],
570
+ "dev": true,
571
+ "license": "MIT",
572
+ "optional": true,
573
+ "os": [
574
+ "linux"
575
+ ],
576
+ "engines": {
577
+ "node": "^20.19.0 || >=22.12.0"
578
+ }
579
+ },
580
+ "node_modules/@rolldown/binding-linux-x64-gnu": {
581
+ "version": "1.0.0-rc.13",
582
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.13.tgz",
583
+ "integrity": "sha512-eRrPvat2YaVQcwwKi/JzOP6MKf1WRnOCr+VaI3cTWz3ZoLcP/654z90lVCJ4dAuMEpPdke0n+qyAqXDZdIC4rA==",
584
+ "cpu": [
585
+ "x64"
586
+ ],
587
+ "dev": true,
588
+ "license": "MIT",
589
+ "optional": true,
590
+ "os": [
591
+ "linux"
592
+ ],
593
+ "engines": {
594
+ "node": "^20.19.0 || >=22.12.0"
595
+ }
596
+ },
597
+ "node_modules/@rolldown/binding-linux-x64-musl": {
598
+ "version": "1.0.0-rc.13",
599
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.13.tgz",
600
+ "integrity": "sha512-PsdONiFRp8hR8KgVjTWjZ9s7uA3uueWL0t74/cKHfM4dR5zXYv4AjB8BvA+QDToqxAFg4ZkcVEqeu5F7inoz5w==",
601
+ "cpu": [
602
+ "x64"
603
+ ],
604
+ "dev": true,
605
+ "license": "MIT",
606
+ "optional": true,
607
+ "os": [
608
+ "linux"
609
+ ],
610
+ "engines": {
611
+ "node": "^20.19.0 || >=22.12.0"
612
+ }
613
+ },
614
+ "node_modules/@rolldown/binding-openharmony-arm64": {
615
+ "version": "1.0.0-rc.13",
616
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.13.tgz",
617
+ "integrity": "sha512-hCNXgC5dI3TVOLrPT++PKFNZ+1EtS0mLQwfXXXSUD/+rGlB65gZDwN/IDuxLpQP4x8RYYHqGomlUXzpO8aVI2w==",
618
+ "cpu": [
619
+ "arm64"
620
+ ],
621
+ "dev": true,
622
+ "license": "MIT",
623
+ "optional": true,
624
+ "os": [
625
+ "openharmony"
626
+ ],
627
+ "engines": {
628
+ "node": "^20.19.0 || >=22.12.0"
629
+ }
630
+ },
631
+ "node_modules/@rolldown/binding-wasm32-wasi": {
632
+ "version": "1.0.0-rc.13",
633
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.13.tgz",
634
+ "integrity": "sha512-viLS5C5et8NFtLWw9Sw3M/w4vvnVkbWkO7wSNh3C+7G1+uCkGpr6PcjNDSFcNtmXY/4trjPBqUfcOL+P3sWy/g==",
635
+ "cpu": [
636
+ "wasm32"
637
+ ],
638
+ "dev": true,
639
+ "license": "MIT",
640
+ "optional": true,
641
+ "dependencies": {
642
+ "@emnapi/core": "1.9.1",
643
+ "@emnapi/runtime": "1.9.1",
644
+ "@napi-rs/wasm-runtime": "^1.1.2"
645
+ },
646
+ "engines": {
647
+ "node": ">=14.0.0"
648
+ }
649
+ },
650
+ "node_modules/@rolldown/binding-win32-arm64-msvc": {
651
+ "version": "1.0.0-rc.13",
652
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.13.tgz",
653
+ "integrity": "sha512-Fqa3Tlt1xL4wzmAYxGNFV36Hb+VfPc9PYU+E25DAnswXv3ODDu/yyWjQDbXMo5AGWkQVjLgQExuVu8I/UaZhPQ==",
654
+ "cpu": [
655
+ "arm64"
656
+ ],
657
+ "dev": true,
658
+ "license": "MIT",
659
+ "optional": true,
660
+ "os": [
661
+ "win32"
662
+ ],
663
+ "engines": {
664
+ "node": "^20.19.0 || >=22.12.0"
665
+ }
666
+ },
667
+ "node_modules/@rolldown/binding-win32-x64-msvc": {
668
+ "version": "1.0.0-rc.13",
669
+ "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.13.tgz",
670
+ "integrity": "sha512-/pLI5kPkGEi44TDlnbio3St/5gUFeN51YWNAk/Gnv6mEQBOahRBh52qVFVBpmrnU01n2yysvBML9Ynu7K4kGAQ==",
671
+ "cpu": [
672
+ "x64"
673
+ ],
674
+ "dev": true,
675
+ "license": "MIT",
676
+ "optional": true,
677
+ "os": [
678
+ "win32"
679
+ ],
680
+ "engines": {
681
+ "node": "^20.19.0 || >=22.12.0"
682
+ }
683
+ },
684
+ "node_modules/@rolldown/pluginutils": {
685
+ "version": "1.0.0-beta.27",
686
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
687
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
688
+ "dev": true,
689
+ "license": "MIT"
690
+ },
691
+ "node_modules/@tybys/wasm-util": {
692
+ "version": "0.10.1",
693
+ "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
694
+ "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
695
+ "dev": true,
696
+ "license": "MIT",
697
+ "optional": true,
698
+ "dependencies": {
699
+ "tslib": "^2.4.0"
700
+ }
701
+ },
702
+ "node_modules/@types/babel__core": {
703
+ "version": "7.20.5",
704
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
705
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
706
+ "dev": true,
707
+ "license": "MIT",
708
+ "dependencies": {
709
+ "@babel/parser": "^7.20.7",
710
+ "@babel/types": "^7.20.7",
711
+ "@types/babel__generator": "*",
712
+ "@types/babel__template": "*",
713
+ "@types/babel__traverse": "*"
714
+ }
715
+ },
716
+ "node_modules/@types/babel__generator": {
717
+ "version": "7.27.0",
718
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
719
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
720
+ "dev": true,
721
+ "license": "MIT",
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
+ "license": "MIT",
732
+ "dependencies": {
733
+ "@babel/parser": "^7.1.0",
734
+ "@babel/types": "^7.0.0"
735
+ }
736
+ },
737
+ "node_modules/@types/babel__traverse": {
738
+ "version": "7.28.0",
739
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
740
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
741
+ "dev": true,
742
+ "license": "MIT",
743
+ "dependencies": {
744
+ "@babel/types": "^7.28.2"
745
+ }
746
+ },
747
+ "node_modules/@types/prop-types": {
748
+ "version": "15.7.15",
749
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
750
+ "integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
751
+ "dev": true,
752
+ "license": "MIT"
753
+ },
754
+ "node_modules/@types/react": {
755
+ "version": "18.3.28",
756
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz",
757
+ "integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
758
+ "dev": true,
759
+ "license": "MIT",
760
+ "dependencies": {
761
+ "@types/prop-types": "*",
762
+ "csstype": "^3.2.2"
763
+ }
764
+ },
765
+ "node_modules/@types/react-dom": {
766
+ "version": "18.3.7",
767
+ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
768
+ "integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
769
+ "dev": true,
770
+ "license": "MIT",
771
+ "peerDependencies": {
772
+ "@types/react": "^18.0.0"
773
+ }
774
+ },
775
+ "node_modules/@vitejs/plugin-react": {
776
+ "version": "4.7.0",
777
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
778
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
779
+ "dev": true,
780
+ "license": "MIT",
781
+ "dependencies": {
782
+ "@babel/core": "^7.28.0",
783
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
784
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
785
+ "@rolldown/pluginutils": "1.0.0-beta.27",
786
+ "@types/babel__core": "^7.20.5",
787
+ "react-refresh": "^0.17.0"
788
+ },
789
+ "engines": {
790
+ "node": "^14.18.0 || >=16.0.0"
791
+ },
792
+ "peerDependencies": {
793
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
794
+ }
795
+ },
796
+ "node_modules/baseline-browser-mapping": {
797
+ "version": "2.10.16",
798
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.16.tgz",
799
+ "integrity": "sha512-Lyf3aK28zpsD1yQMiiHD4RvVb6UdMoo8xzG2XzFIfR9luPzOpcBlAsT/qfB1XWS1bxWT+UtE4WmQgsp297FYOA==",
800
+ "dev": true,
801
+ "license": "Apache-2.0",
802
+ "bin": {
803
+ "baseline-browser-mapping": "dist/cli.cjs"
804
+ },
805
+ "engines": {
806
+ "node": ">=6.0.0"
807
+ }
808
+ },
809
+ "node_modules/browserslist": {
810
+ "version": "4.28.2",
811
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
812
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
813
+ "dev": true,
814
+ "funding": [
815
+ {
816
+ "type": "opencollective",
817
+ "url": "https://opencollective.com/browserslist"
818
+ },
819
+ {
820
+ "type": "tidelift",
821
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
822
+ },
823
+ {
824
+ "type": "github",
825
+ "url": "https://github.com/sponsors/ai"
826
+ }
827
+ ],
828
+ "license": "MIT",
829
+ "dependencies": {
830
+ "baseline-browser-mapping": "^2.10.12",
831
+ "caniuse-lite": "^1.0.30001782",
832
+ "electron-to-chromium": "^1.5.328",
833
+ "node-releases": "^2.0.36",
834
+ "update-browserslist-db": "^1.2.3"
835
+ },
836
+ "bin": {
837
+ "browserslist": "cli.js"
838
+ },
839
+ "engines": {
840
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
841
+ }
842
+ },
843
+ "node_modules/caniuse-lite": {
844
+ "version": "1.0.30001787",
845
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz",
846
+ "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==",
847
+ "dev": true,
848
+ "funding": [
849
+ {
850
+ "type": "opencollective",
851
+ "url": "https://opencollective.com/browserslist"
852
+ },
853
+ {
854
+ "type": "tidelift",
855
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
856
+ },
857
+ {
858
+ "type": "github",
859
+ "url": "https://github.com/sponsors/ai"
860
+ }
861
+ ],
862
+ "license": "CC-BY-4.0"
863
+ },
864
+ "node_modules/convert-source-map": {
865
+ "version": "2.0.0",
866
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
867
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
868
+ "dev": true,
869
+ "license": "MIT"
870
+ },
871
+ "node_modules/csstype": {
872
+ "version": "3.2.3",
873
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz",
874
+ "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==",
875
+ "dev": true,
876
+ "license": "MIT"
877
+ },
878
+ "node_modules/debug": {
879
+ "version": "4.4.3",
880
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
881
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
882
+ "dev": true,
883
+ "license": "MIT",
884
+ "dependencies": {
885
+ "ms": "^2.1.3"
886
+ },
887
+ "engines": {
888
+ "node": ">=6.0"
889
+ },
890
+ "peerDependenciesMeta": {
891
+ "supports-color": {
892
+ "optional": true
893
+ }
894
+ }
895
+ },
896
+ "node_modules/detect-libc": {
897
+ "version": "2.1.2",
898
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
899
+ "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
900
+ "dev": true,
901
+ "license": "Apache-2.0",
902
+ "engines": {
903
+ "node": ">=8"
904
+ }
905
+ },
906
+ "node_modules/electron-to-chromium": {
907
+ "version": "1.5.333",
908
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.333.tgz",
909
+ "integrity": "sha512-skNh4FsE+IpCJV7xAQGbQ4eyOGvcEctVBAk7a5KPzxC3alES9rLrT+2IsPRPgeQr8LVxdJr8BHQ9481+TOr0xg==",
910
+ "dev": true,
911
+ "license": "ISC"
912
+ },
913
+ "node_modules/escalade": {
914
+ "version": "3.2.0",
915
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
916
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
917
+ "dev": true,
918
+ "license": "MIT",
919
+ "engines": {
920
+ "node": ">=6"
921
+ }
922
+ },
923
+ "node_modules/fdir": {
924
+ "version": "6.5.0",
925
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
926
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
927
+ "dev": true,
928
+ "license": "MIT",
929
+ "engines": {
930
+ "node": ">=12.0.0"
931
+ },
932
+ "peerDependencies": {
933
+ "picomatch": "^3 || ^4"
934
+ },
935
+ "peerDependenciesMeta": {
936
+ "picomatch": {
937
+ "optional": true
938
+ }
939
+ }
940
+ },
941
+ "node_modules/fsevents": {
942
+ "version": "2.3.3",
943
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
944
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
945
+ "dev": true,
946
+ "hasInstallScript": true,
947
+ "license": "MIT",
948
+ "optional": true,
949
+ "os": [
950
+ "darwin"
951
+ ],
952
+ "engines": {
953
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
954
+ }
955
+ },
956
+ "node_modules/gensync": {
957
+ "version": "1.0.0-beta.2",
958
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
959
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
960
+ "dev": true,
961
+ "license": "MIT",
962
+ "engines": {
963
+ "node": ">=6.9.0"
964
+ }
965
+ },
966
+ "node_modules/js-tokens": {
967
+ "version": "4.0.0",
968
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
969
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
970
+ "license": "MIT"
971
+ },
972
+ "node_modules/jsesc": {
973
+ "version": "3.1.0",
974
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
975
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
976
+ "dev": true,
977
+ "license": "MIT",
978
+ "bin": {
979
+ "jsesc": "bin/jsesc"
980
+ },
981
+ "engines": {
982
+ "node": ">=6"
983
+ }
984
+ },
985
+ "node_modules/json5": {
986
+ "version": "2.2.3",
987
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
988
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
989
+ "dev": true,
990
+ "license": "MIT",
991
+ "bin": {
992
+ "json5": "lib/cli.js"
993
+ },
994
+ "engines": {
995
+ "node": ">=6"
996
+ }
997
+ },
998
+ "node_modules/lightningcss": {
999
+ "version": "1.32.0",
1000
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz",
1001
+ "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==",
1002
+ "dev": true,
1003
+ "license": "MPL-2.0",
1004
+ "dependencies": {
1005
+ "detect-libc": "^2.0.3"
1006
+ },
1007
+ "engines": {
1008
+ "node": ">= 12.0.0"
1009
+ },
1010
+ "funding": {
1011
+ "type": "opencollective",
1012
+ "url": "https://opencollective.com/parcel"
1013
+ },
1014
+ "optionalDependencies": {
1015
+ "lightningcss-android-arm64": "1.32.0",
1016
+ "lightningcss-darwin-arm64": "1.32.0",
1017
+ "lightningcss-darwin-x64": "1.32.0",
1018
+ "lightningcss-freebsd-x64": "1.32.0",
1019
+ "lightningcss-linux-arm-gnueabihf": "1.32.0",
1020
+ "lightningcss-linux-arm64-gnu": "1.32.0",
1021
+ "lightningcss-linux-arm64-musl": "1.32.0",
1022
+ "lightningcss-linux-x64-gnu": "1.32.0",
1023
+ "lightningcss-linux-x64-musl": "1.32.0",
1024
+ "lightningcss-win32-arm64-msvc": "1.32.0",
1025
+ "lightningcss-win32-x64-msvc": "1.32.0"
1026
+ }
1027
+ },
1028
+ "node_modules/lightningcss-android-arm64": {
1029
+ "version": "1.32.0",
1030
+ "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz",
1031
+ "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==",
1032
+ "cpu": [
1033
+ "arm64"
1034
+ ],
1035
+ "dev": true,
1036
+ "license": "MPL-2.0",
1037
+ "optional": true,
1038
+ "os": [
1039
+ "android"
1040
+ ],
1041
+ "engines": {
1042
+ "node": ">= 12.0.0"
1043
+ },
1044
+ "funding": {
1045
+ "type": "opencollective",
1046
+ "url": "https://opencollective.com/parcel"
1047
+ }
1048
+ },
1049
+ "node_modules/lightningcss-darwin-arm64": {
1050
+ "version": "1.32.0",
1051
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz",
1052
+ "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==",
1053
+ "cpu": [
1054
+ "arm64"
1055
+ ],
1056
+ "dev": true,
1057
+ "license": "MPL-2.0",
1058
+ "optional": true,
1059
+ "os": [
1060
+ "darwin"
1061
+ ],
1062
+ "engines": {
1063
+ "node": ">= 12.0.0"
1064
+ },
1065
+ "funding": {
1066
+ "type": "opencollective",
1067
+ "url": "https://opencollective.com/parcel"
1068
+ }
1069
+ },
1070
+ "node_modules/lightningcss-darwin-x64": {
1071
+ "version": "1.32.0",
1072
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz",
1073
+ "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==",
1074
+ "cpu": [
1075
+ "x64"
1076
+ ],
1077
+ "dev": true,
1078
+ "license": "MPL-2.0",
1079
+ "optional": true,
1080
+ "os": [
1081
+ "darwin"
1082
+ ],
1083
+ "engines": {
1084
+ "node": ">= 12.0.0"
1085
+ },
1086
+ "funding": {
1087
+ "type": "opencollective",
1088
+ "url": "https://opencollective.com/parcel"
1089
+ }
1090
+ },
1091
+ "node_modules/lightningcss-freebsd-x64": {
1092
+ "version": "1.32.0",
1093
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz",
1094
+ "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==",
1095
+ "cpu": [
1096
+ "x64"
1097
+ ],
1098
+ "dev": true,
1099
+ "license": "MPL-2.0",
1100
+ "optional": true,
1101
+ "os": [
1102
+ "freebsd"
1103
+ ],
1104
+ "engines": {
1105
+ "node": ">= 12.0.0"
1106
+ },
1107
+ "funding": {
1108
+ "type": "opencollective",
1109
+ "url": "https://opencollective.com/parcel"
1110
+ }
1111
+ },
1112
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
1113
+ "version": "1.32.0",
1114
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz",
1115
+ "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==",
1116
+ "cpu": [
1117
+ "arm"
1118
+ ],
1119
+ "dev": true,
1120
+ "license": "MPL-2.0",
1121
+ "optional": true,
1122
+ "os": [
1123
+ "linux"
1124
+ ],
1125
+ "engines": {
1126
+ "node": ">= 12.0.0"
1127
+ },
1128
+ "funding": {
1129
+ "type": "opencollective",
1130
+ "url": "https://opencollective.com/parcel"
1131
+ }
1132
+ },
1133
+ "node_modules/lightningcss-linux-arm64-gnu": {
1134
+ "version": "1.32.0",
1135
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz",
1136
+ "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==",
1137
+ "cpu": [
1138
+ "arm64"
1139
+ ],
1140
+ "dev": true,
1141
+ "license": "MPL-2.0",
1142
+ "optional": true,
1143
+ "os": [
1144
+ "linux"
1145
+ ],
1146
+ "engines": {
1147
+ "node": ">= 12.0.0"
1148
+ },
1149
+ "funding": {
1150
+ "type": "opencollective",
1151
+ "url": "https://opencollective.com/parcel"
1152
+ }
1153
+ },
1154
+ "node_modules/lightningcss-linux-arm64-musl": {
1155
+ "version": "1.32.0",
1156
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz",
1157
+ "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==",
1158
+ "cpu": [
1159
+ "arm64"
1160
+ ],
1161
+ "dev": true,
1162
+ "license": "MPL-2.0",
1163
+ "optional": true,
1164
+ "os": [
1165
+ "linux"
1166
+ ],
1167
+ "engines": {
1168
+ "node": ">= 12.0.0"
1169
+ },
1170
+ "funding": {
1171
+ "type": "opencollective",
1172
+ "url": "https://opencollective.com/parcel"
1173
+ }
1174
+ },
1175
+ "node_modules/lightningcss-linux-x64-gnu": {
1176
+ "version": "1.32.0",
1177
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz",
1178
+ "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==",
1179
+ "cpu": [
1180
+ "x64"
1181
+ ],
1182
+ "dev": true,
1183
+ "license": "MPL-2.0",
1184
+ "optional": true,
1185
+ "os": [
1186
+ "linux"
1187
+ ],
1188
+ "engines": {
1189
+ "node": ">= 12.0.0"
1190
+ },
1191
+ "funding": {
1192
+ "type": "opencollective",
1193
+ "url": "https://opencollective.com/parcel"
1194
+ }
1195
+ },
1196
+ "node_modules/lightningcss-linux-x64-musl": {
1197
+ "version": "1.32.0",
1198
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz",
1199
+ "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==",
1200
+ "cpu": [
1201
+ "x64"
1202
+ ],
1203
+ "dev": true,
1204
+ "license": "MPL-2.0",
1205
+ "optional": true,
1206
+ "os": [
1207
+ "linux"
1208
+ ],
1209
+ "engines": {
1210
+ "node": ">= 12.0.0"
1211
+ },
1212
+ "funding": {
1213
+ "type": "opencollective",
1214
+ "url": "https://opencollective.com/parcel"
1215
+ }
1216
+ },
1217
+ "node_modules/lightningcss-win32-arm64-msvc": {
1218
+ "version": "1.32.0",
1219
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz",
1220
+ "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==",
1221
+ "cpu": [
1222
+ "arm64"
1223
+ ],
1224
+ "dev": true,
1225
+ "license": "MPL-2.0",
1226
+ "optional": true,
1227
+ "os": [
1228
+ "win32"
1229
+ ],
1230
+ "engines": {
1231
+ "node": ">= 12.0.0"
1232
+ },
1233
+ "funding": {
1234
+ "type": "opencollective",
1235
+ "url": "https://opencollective.com/parcel"
1236
+ }
1237
+ },
1238
+ "node_modules/lightningcss-win32-x64-msvc": {
1239
+ "version": "1.32.0",
1240
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz",
1241
+ "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==",
1242
+ "cpu": [
1243
+ "x64"
1244
+ ],
1245
+ "dev": true,
1246
+ "license": "MPL-2.0",
1247
+ "optional": true,
1248
+ "os": [
1249
+ "win32"
1250
+ ],
1251
+ "engines": {
1252
+ "node": ">= 12.0.0"
1253
+ },
1254
+ "funding": {
1255
+ "type": "opencollective",
1256
+ "url": "https://opencollective.com/parcel"
1257
+ }
1258
+ },
1259
+ "node_modules/loose-envify": {
1260
+ "version": "1.4.0",
1261
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1262
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1263
+ "license": "MIT",
1264
+ "dependencies": {
1265
+ "js-tokens": "^3.0.0 || ^4.0.0"
1266
+ },
1267
+ "bin": {
1268
+ "loose-envify": "cli.js"
1269
+ }
1270
+ },
1271
+ "node_modules/lru-cache": {
1272
+ "version": "5.1.1",
1273
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1274
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1275
+ "dev": true,
1276
+ "license": "ISC",
1277
+ "dependencies": {
1278
+ "yallist": "^3.0.2"
1279
+ }
1280
+ },
1281
+ "node_modules/ms": {
1282
+ "version": "2.1.3",
1283
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1284
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1285
+ "dev": true,
1286
+ "license": "MIT"
1287
+ },
1288
+ "node_modules/nanoid": {
1289
+ "version": "3.3.11",
1290
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
1291
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
1292
+ "dev": true,
1293
+ "funding": [
1294
+ {
1295
+ "type": "github",
1296
+ "url": "https://github.com/sponsors/ai"
1297
+ }
1298
+ ],
1299
+ "license": "MIT",
1300
+ "bin": {
1301
+ "nanoid": "bin/nanoid.cjs"
1302
+ },
1303
+ "engines": {
1304
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1305
+ }
1306
+ },
1307
+ "node_modules/node-releases": {
1308
+ "version": "2.0.37",
1309
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz",
1310
+ "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==",
1311
+ "dev": true,
1312
+ "license": "MIT"
1313
+ },
1314
+ "node_modules/picocolors": {
1315
+ "version": "1.1.1",
1316
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1317
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1318
+ "dev": true,
1319
+ "license": "ISC"
1320
+ },
1321
+ "node_modules/picomatch": {
1322
+ "version": "4.0.4",
1323
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
1324
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
1325
+ "dev": true,
1326
+ "license": "MIT",
1327
+ "engines": {
1328
+ "node": ">=12"
1329
+ },
1330
+ "funding": {
1331
+ "url": "https://github.com/sponsors/jonschlinkert"
1332
+ }
1333
+ },
1334
+ "node_modules/postcss": {
1335
+ "version": "8.5.9",
1336
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.9.tgz",
1337
+ "integrity": "sha512-7a70Nsot+EMX9fFU3064K/kdHWZqGVY+BADLyXc8Dfv+mTLLVl6JzJpPaCZ2kQL9gIJvKXSLMHhqdRRjwQeFtw==",
1338
+ "dev": true,
1339
+ "funding": [
1340
+ {
1341
+ "type": "opencollective",
1342
+ "url": "https://opencollective.com/postcss/"
1343
+ },
1344
+ {
1345
+ "type": "tidelift",
1346
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1347
+ },
1348
+ {
1349
+ "type": "github",
1350
+ "url": "https://github.com/sponsors/ai"
1351
+ }
1352
+ ],
1353
+ "license": "MIT",
1354
+ "dependencies": {
1355
+ "nanoid": "^3.3.11",
1356
+ "picocolors": "^1.1.1",
1357
+ "source-map-js": "^1.2.1"
1358
+ },
1359
+ "engines": {
1360
+ "node": "^10 || ^12 || >=14"
1361
+ }
1362
+ },
1363
+ "node_modules/react": {
1364
+ "version": "18.3.1",
1365
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
1366
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
1367
+ "license": "MIT",
1368
+ "dependencies": {
1369
+ "loose-envify": "^1.1.0"
1370
+ },
1371
+ "engines": {
1372
+ "node": ">=0.10.0"
1373
+ }
1374
+ },
1375
+ "node_modules/react-dom": {
1376
+ "version": "18.3.1",
1377
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
1378
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
1379
+ "license": "MIT",
1380
+ "dependencies": {
1381
+ "loose-envify": "^1.1.0",
1382
+ "scheduler": "^0.23.2"
1383
+ },
1384
+ "peerDependencies": {
1385
+ "react": "^18.3.1"
1386
+ }
1387
+ },
1388
+ "node_modules/react-refresh": {
1389
+ "version": "0.17.0",
1390
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
1391
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
1392
+ "dev": true,
1393
+ "license": "MIT",
1394
+ "engines": {
1395
+ "node": ">=0.10.0"
1396
+ }
1397
+ },
1398
+ "node_modules/react-router": {
1399
+ "version": "6.30.3",
1400
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.30.3.tgz",
1401
+ "integrity": "sha512-XRnlbKMTmktBkjCLE8/XcZFlnHvr2Ltdr1eJX4idL55/9BbORzyZEaIkBFDhFGCEWBBItsVrDxwx3gnisMitdw==",
1402
+ "license": "MIT",
1403
+ "dependencies": {
1404
+ "@remix-run/router": "1.23.2"
1405
+ },
1406
+ "engines": {
1407
+ "node": ">=14.0.0"
1408
+ },
1409
+ "peerDependencies": {
1410
+ "react": ">=16.8"
1411
+ }
1412
+ },
1413
+ "node_modules/react-router-dom": {
1414
+ "version": "6.30.3",
1415
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.30.3.tgz",
1416
+ "integrity": "sha512-pxPcv1AczD4vso7G4Z3TKcvlxK7g7TNt3/FNGMhfqyntocvYKj+GCatfigGDjbLozC4baguJ0ReCigoDJXb0ag==",
1417
+ "license": "MIT",
1418
+ "dependencies": {
1419
+ "@remix-run/router": "1.23.2",
1420
+ "react-router": "6.30.3"
1421
+ },
1422
+ "engines": {
1423
+ "node": ">=14.0.0"
1424
+ },
1425
+ "peerDependencies": {
1426
+ "react": ">=16.8",
1427
+ "react-dom": ">=16.8"
1428
+ }
1429
+ },
1430
+ "node_modules/rolldown": {
1431
+ "version": "1.0.0-rc.13",
1432
+ "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.13.tgz",
1433
+ "integrity": "sha512-bvVj8YJmf0rq4pSFmH7laLa6pYrhghv3PRzrCdRAr23g66zOKVJ4wkvFtgohtPLWmthgg8/rkaqRHrpUEh0Zbw==",
1434
+ "dev": true,
1435
+ "license": "MIT",
1436
+ "dependencies": {
1437
+ "@oxc-project/types": "=0.123.0",
1438
+ "@rolldown/pluginutils": "1.0.0-rc.13"
1439
+ },
1440
+ "bin": {
1441
+ "rolldown": "bin/cli.mjs"
1442
+ },
1443
+ "engines": {
1444
+ "node": "^20.19.0 || >=22.12.0"
1445
+ },
1446
+ "optionalDependencies": {
1447
+ "@rolldown/binding-android-arm64": "1.0.0-rc.13",
1448
+ "@rolldown/binding-darwin-arm64": "1.0.0-rc.13",
1449
+ "@rolldown/binding-darwin-x64": "1.0.0-rc.13",
1450
+ "@rolldown/binding-freebsd-x64": "1.0.0-rc.13",
1451
+ "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.13",
1452
+ "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.13",
1453
+ "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.13",
1454
+ "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.13",
1455
+ "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.13",
1456
+ "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.13",
1457
+ "@rolldown/binding-linux-x64-musl": "1.0.0-rc.13",
1458
+ "@rolldown/binding-openharmony-arm64": "1.0.0-rc.13",
1459
+ "@rolldown/binding-wasm32-wasi": "1.0.0-rc.13",
1460
+ "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.13",
1461
+ "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.13"
1462
+ }
1463
+ },
1464
+ "node_modules/rolldown/node_modules/@rolldown/pluginutils": {
1465
+ "version": "1.0.0-rc.13",
1466
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.13.tgz",
1467
+ "integrity": "sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==",
1468
+ "dev": true,
1469
+ "license": "MIT"
1470
+ },
1471
+ "node_modules/scheduler": {
1472
+ "version": "0.23.2",
1473
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
1474
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
1475
+ "license": "MIT",
1476
+ "dependencies": {
1477
+ "loose-envify": "^1.1.0"
1478
+ }
1479
+ },
1480
+ "node_modules/semver": {
1481
+ "version": "6.3.1",
1482
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1483
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
1484
+ "dev": true,
1485
+ "license": "ISC",
1486
+ "bin": {
1487
+ "semver": "bin/semver.js"
1488
+ }
1489
+ },
1490
+ "node_modules/source-map-js": {
1491
+ "version": "1.2.1",
1492
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1493
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1494
+ "dev": true,
1495
+ "license": "BSD-3-Clause",
1496
+ "engines": {
1497
+ "node": ">=0.10.0"
1498
+ }
1499
+ },
1500
+ "node_modules/tinyglobby": {
1501
+ "version": "0.2.16",
1502
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
1503
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
1504
+ "dev": true,
1505
+ "license": "MIT",
1506
+ "dependencies": {
1507
+ "fdir": "^6.5.0",
1508
+ "picomatch": "^4.0.4"
1509
+ },
1510
+ "engines": {
1511
+ "node": ">=12.0.0"
1512
+ },
1513
+ "funding": {
1514
+ "url": "https://github.com/sponsors/SuperchupuDev"
1515
+ }
1516
+ },
1517
+ "node_modules/tslib": {
1518
+ "version": "2.8.1",
1519
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
1520
+ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
1521
+ "dev": true,
1522
+ "license": "0BSD",
1523
+ "optional": true
1524
+ },
1525
+ "node_modules/typescript": {
1526
+ "version": "5.9.3",
1527
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
1528
+ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
1529
+ "dev": true,
1530
+ "license": "Apache-2.0",
1531
+ "bin": {
1532
+ "tsc": "bin/tsc",
1533
+ "tsserver": "bin/tsserver"
1534
+ },
1535
+ "engines": {
1536
+ "node": ">=14.17"
1537
+ }
1538
+ },
1539
+ "node_modules/update-browserslist-db": {
1540
+ "version": "1.2.3",
1541
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
1542
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
1543
+ "dev": true,
1544
+ "funding": [
1545
+ {
1546
+ "type": "opencollective",
1547
+ "url": "https://opencollective.com/browserslist"
1548
+ },
1549
+ {
1550
+ "type": "tidelift",
1551
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1552
+ },
1553
+ {
1554
+ "type": "github",
1555
+ "url": "https://github.com/sponsors/ai"
1556
+ }
1557
+ ],
1558
+ "license": "MIT",
1559
+ "dependencies": {
1560
+ "escalade": "^3.2.0",
1561
+ "picocolors": "^1.1.1"
1562
+ },
1563
+ "bin": {
1564
+ "update-browserslist-db": "cli.js"
1565
+ },
1566
+ "peerDependencies": {
1567
+ "browserslist": ">= 4.21.0"
1568
+ }
1569
+ },
1570
+ "node_modules/vite": {
1571
+ "version": "8.0.7",
1572
+ "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.7.tgz",
1573
+ "integrity": "sha512-P1PbweD+2/udplnThz3btF4cf6AgPky7kk23RtHUkJIU5BIxwPprhRGmOAHs6FTI7UiGbTNrgNP6jSYD6JaRnw==",
1574
+ "dev": true,
1575
+ "license": "MIT",
1576
+ "dependencies": {
1577
+ "lightningcss": "^1.32.0",
1578
+ "picomatch": "^4.0.4",
1579
+ "postcss": "^8.5.8",
1580
+ "rolldown": "1.0.0-rc.13",
1581
+ "tinyglobby": "^0.2.15"
1582
+ },
1583
+ "bin": {
1584
+ "vite": "bin/vite.js"
1585
+ },
1586
+ "engines": {
1587
+ "node": "^20.19.0 || >=22.12.0"
1588
+ },
1589
+ "funding": {
1590
+ "url": "https://github.com/vitejs/vite?sponsor=1"
1591
+ },
1592
+ "optionalDependencies": {
1593
+ "fsevents": "~2.3.3"
1594
+ },
1595
+ "peerDependencies": {
1596
+ "@types/node": "^20.19.0 || >=22.12.0",
1597
+ "@vitejs/devtools": "^0.1.0",
1598
+ "esbuild": "^0.27.0 || ^0.28.0",
1599
+ "jiti": ">=1.21.0",
1600
+ "less": "^4.0.0",
1601
+ "sass": "^1.70.0",
1602
+ "sass-embedded": "^1.70.0",
1603
+ "stylus": ">=0.54.8",
1604
+ "sugarss": "^5.0.0",
1605
+ "terser": "^5.16.0",
1606
+ "tsx": "^4.8.1",
1607
+ "yaml": "^2.4.2"
1608
+ },
1609
+ "peerDependenciesMeta": {
1610
+ "@types/node": {
1611
+ "optional": true
1612
+ },
1613
+ "@vitejs/devtools": {
1614
+ "optional": true
1615
+ },
1616
+ "esbuild": {
1617
+ "optional": true
1618
+ },
1619
+ "jiti": {
1620
+ "optional": true
1621
+ },
1622
+ "less": {
1623
+ "optional": true
1624
+ },
1625
+ "sass": {
1626
+ "optional": true
1627
+ },
1628
+ "sass-embedded": {
1629
+ "optional": true
1630
+ },
1631
+ "stylus": {
1632
+ "optional": true
1633
+ },
1634
+ "sugarss": {
1635
+ "optional": true
1636
+ },
1637
+ "terser": {
1638
+ "optional": true
1639
+ },
1640
+ "tsx": {
1641
+ "optional": true
1642
+ },
1643
+ "yaml": {
1644
+ "optional": true
1645
+ }
1646
+ }
1647
+ },
1648
+ "node_modules/yallist": {
1649
+ "version": "3.1.1",
1650
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1651
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
1652
+ "dev": true,
1653
+ "license": "ISC"
1654
+ }
1655
+ }
1656
+ }
soc-openenv/web/package.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "soc-openenv-web",
3
+ "private": true,
4
+ "version": "0.1.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc -b && vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "react": "^18.3.1",
13
+ "react-dom": "^18.3.1",
14
+ "react-router-dom": "^6.28.0"
15
+ },
16
+ "devDependencies": {
17
+ "@types/react": "^18.3.12",
18
+ "@types/react-dom": "^18.3.1",
19
+ "@vitejs/plugin-react": "^4.3.3",
20
+ "typescript": "^5.6.3",
21
+ "vite": "^8.0.7"
22
+ }
23
+ }
soc-openenv/web/src/App.tsx ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { NavLink, Route, Routes } from "react-router-dom";
2
+ import HomePage from "./components/HomePage";
3
+ import AboutPage from "./components/AboutPage";
4
+
5
+ function App() {
6
+ return (
7
+ <div className="app-shell">
8
+ <header className="topbar">
9
+ <div className="brand-block">
10
+ <p className="brand-eyebrow">SOC OPENENV</p>
11
+ <h1>Incident Response Console</h1>
12
+ </div>
13
+
14
+ <nav className="nav-links" aria-label="Main navigation">
15
+ <NavLink to="/" className={({ isActive }) => (isActive ? "active" : "")}
16
+ >
17
+ Home
18
+ </NavLink>
19
+ <NavLink to="/about" className={({ isActive }) => (isActive ? "active" : "")}
20
+ >
21
+ About
22
+ </NavLink>
23
+ </nav>
24
+ </header>
25
+
26
+ <main>
27
+ <Routes>
28
+ <Route path="/" element={<HomePage />} />
29
+ <Route path="/about" element={<AboutPage />} />
30
+ </Routes>
31
+ </main>
32
+ </div>
33
+ );
34
+ }
35
+
36
+ export default App;
soc-openenv/web/src/components/AboutPage.tsx ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ function AboutPage() {
2
+ return (
3
+ <section className="page page-about">
4
+ <div className="about-grid">
5
+ <article className="about-card reveal">
6
+ <p className="section-label">About The Project</p>
7
+ <h2>SOC OpenEnv</h2>
8
+ <p>
9
+ SOC OpenEnv is a simulation-driven security operations environment where AI agents practice
10
+ triage, investigation, and containment workflows in realistic incident scenarios.
11
+ </p>
12
+ <p>
13
+ It combines deterministic grading, reproducible tasks, and operational constraints so teams can
14
+ benchmark model quality and response behavior with confidence.
15
+ </p>
16
+ </article>
17
+
18
+ <article className="about-card reveal" style={{ animationDelay: "0.14s" }}>
19
+ <p className="section-label">About The Users</p>
20
+ <h2>Who Uses It</h2>
21
+ <p>
22
+ Security researchers use it to evaluate autonomous defenders, SOC engineers use it to test playbook
23
+ logic, and AI teams use it to compare model safety and containment decisions.
24
+ </p>
25
+ <p>
26
+ It is also useful for learners building practical intuition around alert quality, false positive
27
+ handling, and attack-chain context across enterprise systems.
28
+ </p>
29
+ </article>
30
+ </div>
31
+ </section>
32
+ );
33
+ }
34
+
35
+ export default AboutPage;
soc-openenv/web/src/components/HomePage.tsx ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { useState } from "react";
2
+
3
+ type Action = {
4
+ taskId: "alert_triage" | "attack_chain_reconstruction" | "constrained_incident_response";
5
+ title: string;
6
+ description: string;
7
+ endpoint: string;
8
+ };
9
+
10
+ type ResetResponse = {
11
+ active_alerts?: Array<{ alert_id?: string }>;
12
+ };
13
+
14
+ type StepResponse = {
15
+ reward?: { total?: number };
16
+ done?: boolean;
17
+ };
18
+
19
+ const actions: Action[] = [
20
+ {
21
+ taskId: "alert_triage",
22
+ title: "Alert Triage",
23
+ description: "Review mixed true/false positive alerts and contain the verified threats.",
24
+ endpoint: "POST /reset + /step (task: alert_triage)"
25
+ },
26
+ {
27
+ taskId: "attack_chain_reconstruction",
28
+ title: "Attack Chain Reconstruction",
29
+ description: "Correlate multi-host signals and map attacker behavior across ATT&CK stages.",
30
+ endpoint: "POST /step (task: attack_chain_reconstruction)"
31
+ },
32
+ {
33
+ taskId: "constrained_incident_response",
34
+ title: "Constrained Incident Response",
35
+ description: "Respond under legal and business restrictions while minimizing operational impact.",
36
+ endpoint: "POST /step (task: constrained_incident_response)"
37
+ }
38
+ ];
39
+
40
+ function HomePage() {
41
+ const [busyTask, setBusyTask] = useState<Action["taskId"] | null>(null);
42
+ const [resultText, setResultText] = useState<string>("");
43
+ const apiBase = import.meta.env.VITE_API_BASE_URL ?? "http://localhost:7860";
44
+
45
+ const buildActionPayload = (taskId: Action["taskId"], resetData: ResetResponse) => {
46
+ const firstAlertId = resetData.active_alerts?.[0]?.alert_id ?? "ALT-001";
47
+ const firstTwoAlertIds = (resetData.active_alerts ?? [])
48
+ .map((a) => a.alert_id)
49
+ .filter((id): id is string => Boolean(id))
50
+ .slice(0, 2);
51
+
52
+ if (taskId === "alert_triage") {
53
+ return {
54
+ action_type: "enrich_alert",
55
+ alert_id: firstAlertId,
56
+ source: "threat_intel"
57
+ };
58
+ }
59
+
60
+ if (taskId === "attack_chain_reconstruction") {
61
+ return {
62
+ action_type: "correlate_alerts",
63
+ alert_ids: firstTwoAlertIds.length > 0 ? firstTwoAlertIds : [firstAlertId],
64
+ correlation_hypothesis: "Potential linked attacker activity across hosts"
65
+ };
66
+ }
67
+
68
+ return {
69
+ action_type: "create_ticket",
70
+ priority: "P1",
71
+ summary: "Critical incident initiated via web console"
72
+ };
73
+ };
74
+
75
+ const runScenario = async (taskId: Action["taskId"], title: string) => {
76
+ setBusyTask(taskId);
77
+ setResultText(`Running ${title}...`);
78
+
79
+ try {
80
+ const resetResponse = await fetch(`${apiBase}/reset`, {
81
+ method: "POST",
82
+ headers: { "Content-Type": "application/json" },
83
+ body: JSON.stringify({ task_id: taskId, seed: 42 })
84
+ });
85
+
86
+ if (!resetResponse.ok) {
87
+ throw new Error(`Reset failed with status ${resetResponse.status}`);
88
+ }
89
+
90
+ const resetData = (await resetResponse.json()) as ResetResponse;
91
+ const action = buildActionPayload(taskId, resetData);
92
+
93
+ const stepResponse = await fetch(`${apiBase}/step`, {
94
+ method: "POST",
95
+ headers: { "Content-Type": "application/json" },
96
+ body: JSON.stringify({ task_id: taskId, action })
97
+ });
98
+
99
+ if (!stepResponse.ok) {
100
+ const details = await stepResponse.text();
101
+ throw new Error(`Step failed (${stepResponse.status}): ${details}`);
102
+ }
103
+
104
+ const stepData = (await stepResponse.json()) as StepResponse;
105
+ const reward = stepData.reward?.total ?? 0;
106
+ const done = stepData.done ? "yes" : "no";
107
+ setResultText(`${title} completed. Reward: ${reward.toFixed(3)} | Done: ${done}`);
108
+ } catch (error) {
109
+ const message = error instanceof Error ? error.message : "Unknown request error";
110
+ setResultText(`Request error: ${message}`);
111
+ } finally {
112
+ setBusyTask(null);
113
+ }
114
+ };
115
+
116
+ return (
117
+ <section className="page page-home">
118
+ <div className="hero-card reveal">
119
+ <p className="section-label">Mission Control</p>
120
+ <h2>Train and evaluate autonomous SOC decision-making.</h2>
121
+ <p>
122
+ This interface highlights the three core actions your environment supports. Each button is styled
123
+ as a high-contrast command switch with tactile pop animation and hover lift.
124
+ </p>
125
+ </div>
126
+
127
+ <div className="actions-grid">
128
+ {actions.map((action, index) => (
129
+ <article className="action-card reveal" style={{ animationDelay: `${index * 0.12}s` }} key={action.title}>
130
+ <h3>{action.title}</h3>
131
+ <p>{action.description}</p>
132
+ <button
133
+ type="button"
134
+ className="pop-button"
135
+ onClick={() => runScenario(action.taskId, action.title)}
136
+ disabled={busyTask !== null}
137
+ >
138
+ {busyTask === action.taskId ? "Running..." : `Run ${action.title}`}
139
+ </button>
140
+ <span>{action.endpoint}</span>
141
+ </article>
142
+ ))}
143
+ </div>
144
+
145
+ <div className="hero-card reveal" style={{ marginTop: "1rem" }}>
146
+ <p className="section-label">Live API Result</p>
147
+ <h2>Execution Output</h2>
148
+ <p>{resultText || "Click any action button to call the backend endpoints."}</p>
149
+ </div>
150
+ </section>
151
+ );
152
+ }
153
+
154
+ export default HomePage;
soc-openenv/web/src/main.tsx ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from "react";
2
+ import ReactDOM from "react-dom/client";
3
+ import { BrowserRouter } from "react-router-dom";
4
+ import App from "./App";
5
+ import "./styles.css";
6
+
7
+ ReactDOM.createRoot(document.getElementById("root")!).render(
8
+ <React.StrictMode>
9
+ <BrowserRouter>
10
+ <App />
11
+ </BrowserRouter>
12
+ </React.StrictMode>
13
+ );
soc-openenv/web/src/styles.css ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&display=swap");
2
+
3
+ :root {
4
+ --bg: #0a0a0a;
5
+ --panel: #111111;
6
+ --ink: #f5f5f5;
7
+ --muted: #c7c7c7;
8
+ --border: #2a2a2a;
9
+ --glow: rgba(255, 255, 255, 0.16);
10
+ }
11
+
12
+ * {
13
+ box-sizing: border-box;
14
+ }
15
+
16
+ body {
17
+ margin: 0;
18
+ font-family: "Space Grotesk", "Segoe UI", sans-serif;
19
+ color: var(--ink);
20
+ background:
21
+ radial-gradient(circle at 12% 18%, #1c1c1c 0%, transparent 34%),
22
+ radial-gradient(circle at 82% 78%, #1a1a1a 0%, transparent 36%),
23
+ linear-gradient(130deg, #090909 0%, #0f0f0f 42%, #151515 100%);
24
+ min-height: 100vh;
25
+ }
26
+
27
+ #root {
28
+ min-height: 100vh;
29
+ }
30
+
31
+ .app-shell {
32
+ width: min(1120px, 92vw);
33
+ margin: 0 auto;
34
+ padding: 1.4rem 0 3rem;
35
+ }
36
+
37
+ .topbar {
38
+ display: flex;
39
+ align-items: end;
40
+ justify-content: space-between;
41
+ gap: 1rem;
42
+ border-bottom: 1px solid var(--border);
43
+ padding: 0.8rem 0 1rem;
44
+ }
45
+
46
+ .brand-eyebrow {
47
+ letter-spacing: 0.14em;
48
+ text-transform: uppercase;
49
+ color: var(--muted);
50
+ font-size: 0.72rem;
51
+ margin: 0;
52
+ }
53
+
54
+ .brand-block h1 {
55
+ margin: 0.2rem 0 0;
56
+ font-size: clamp(1.3rem, 3vw, 2.1rem);
57
+ }
58
+
59
+ .nav-links {
60
+ display: flex;
61
+ gap: 0.7rem;
62
+ }
63
+
64
+ .nav-links a {
65
+ text-decoration: none;
66
+ color: var(--ink);
67
+ border: 1px solid var(--border);
68
+ padding: 0.45rem 0.9rem;
69
+ border-radius: 999px;
70
+ transition: all 180ms ease;
71
+ }
72
+
73
+ .nav-links a:hover,
74
+ .nav-links a.active {
75
+ border-color: #ffffff;
76
+ background: #ffffff;
77
+ color: #090909;
78
+ }
79
+
80
+ .page {
81
+ margin-top: 1.7rem;
82
+ }
83
+
84
+ .hero-card,
85
+ .action-card,
86
+ .about-card {
87
+ border: 1px solid var(--border);
88
+ border-radius: 1rem;
89
+ background: linear-gradient(165deg, rgba(255, 255, 255, 0.04), rgba(255, 255, 255, 0.02));
90
+ box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.02) inset;
91
+ }
92
+
93
+ .hero-card {
94
+ padding: 1.3rem 1.2rem;
95
+ }
96
+
97
+ .section-label {
98
+ margin: 0;
99
+ text-transform: uppercase;
100
+ letter-spacing: 0.11em;
101
+ color: var(--muted);
102
+ font-size: 0.72rem;
103
+ }
104
+
105
+ .hero-card h2 {
106
+ margin: 0.35rem 0 0.7rem;
107
+ font-size: clamp(1.25rem, 2.7vw, 2rem);
108
+ }
109
+
110
+ .hero-card p {
111
+ margin: 0;
112
+ color: #dddddd;
113
+ line-height: 1.55;
114
+ }
115
+
116
+ .actions-grid,
117
+ .about-grid {
118
+ margin-top: 1rem;
119
+ display: grid;
120
+ gap: 1rem;
121
+ grid-template-columns: repeat(3, minmax(0, 1fr));
122
+ }
123
+
124
+ .action-card,
125
+ .about-card {
126
+ padding: 1.05rem;
127
+ }
128
+
129
+ .action-card h3,
130
+ .about-card h2 {
131
+ margin: 0.2rem 0 0.55rem;
132
+ }
133
+
134
+ .action-card p,
135
+ .about-card p {
136
+ margin: 0 0 0.8rem;
137
+ color: #dddddd;
138
+ line-height: 1.5;
139
+ }
140
+
141
+ .action-card span {
142
+ color: var(--muted);
143
+ font-size: 0.84rem;
144
+ }
145
+
146
+ .pop-button {
147
+ width: 100%;
148
+ border: 1px solid #ffffff;
149
+ background: #fafafa;
150
+ color: #0b0b0b;
151
+ border-radius: 0.7rem;
152
+ font-weight: 700;
153
+ padding: 0.72rem 1rem;
154
+ cursor: pointer;
155
+ margin-bottom: 0.65rem;
156
+ transform: translateY(0) scale(1);
157
+ box-shadow: 0 7px 0 #8b8b8b;
158
+ transition: transform 180ms ease, box-shadow 180ms ease, background 180ms ease;
159
+ }
160
+
161
+ .pop-button:hover {
162
+ transform: translateY(-3px) scale(1.02);
163
+ box-shadow: 0 11px 0 #6d6d6d, 0 0 0 8px var(--glow);
164
+ }
165
+
166
+ .pop-button:active {
167
+ transform: translateY(4px) scale(0.99);
168
+ box-shadow: 0 2px 0 #6d6d6d;
169
+ }
170
+
171
+ .reveal {
172
+ animation: rise 420ms ease both;
173
+ }
174
+
175
+ @keyframes rise {
176
+ from {
177
+ opacity: 0;
178
+ transform: translateY(14px);
179
+ }
180
+ to {
181
+ opacity: 1;
182
+ transform: translateY(0);
183
+ }
184
+ }
185
+
186
+ @media (max-width: 980px) {
187
+ .actions-grid {
188
+ grid-template-columns: repeat(2, minmax(0, 1fr));
189
+ }
190
+
191
+ .about-grid {
192
+ grid-template-columns: 1fr;
193
+ }
194
+ }
195
+
196
+ @media (max-width: 700px) {
197
+ .topbar {
198
+ flex-direction: column;
199
+ align-items: flex-start;
200
+ }
201
+
202
+ .actions-grid {
203
+ grid-template-columns: 1fr;
204
+ }
205
+ }
soc-openenv/web/tsconfig.json ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "module": "ESNext",
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "moduleResolution": "Bundler",
7
+ "jsx": "react-jsx",
8
+ "strict": true,
9
+ "noEmit": true,
10
+ "isolatedModules": true,
11
+ "esModuleInterop": true,
12
+ "resolveJsonModule": true,
13
+ "types": ["vite/client"]
14
+ },
15
+ "include": ["src"]
16
+ }
soc-openenv/web/vite.config.ts ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ import { defineConfig } from "vite";
2
+ import react from "@vitejs/plugin-react";
3
+
4
+ export default defineConfig({
5
+ plugins: [react()]
6
+ });