JakgritB commited on
Commit
09e2e7a
·
1 Parent(s): dbc3c35

feat(frontend): add human-ai clip editor

Browse files

Add the React and Tailwind workspace for channel onboarding, YouTube/upload input, pipeline progress, transcript review, clip trimming, subtitle editing, approval, regeneration, and download actions.

frontend/Dockerfile ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:22-alpine
2
+
3
+ WORKDIR /app
4
+ COPY package.json package-lock.json* ./
5
+ RUN npm install
6
+ COPY . .
7
+
8
+ EXPOSE 5173
9
+ CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
frontend/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>ElevenClip.AI</title>
7
+ </head>
8
+ <body>
9
+ <div id="root"></div>
10
+ <script type="module" src="/src/main.jsx"></script>
11
+ </body>
12
+ </html>
frontend/package-lock.json ADDED
@@ -0,0 +1,2623 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "elevenclip-ai-frontend",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "elevenclip-ai-frontend",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "@vitejs/plugin-react": "^4.3.4",
12
+ "lucide-react": "^0.468.0",
13
+ "react": "^18.3.1",
14
+ "react-dom": "^18.3.1",
15
+ "vite": "^6.0.1"
16
+ },
17
+ "devDependencies": {
18
+ "autoprefixer": "^10.4.20",
19
+ "postcss": "^8.4.49",
20
+ "tailwindcss": "^3.4.16"
21
+ }
22
+ },
23
+ "node_modules/@alloc/quick-lru": {
24
+ "version": "5.2.0",
25
+ "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
26
+ "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
27
+ "dev": true,
28
+ "license": "MIT",
29
+ "engines": {
30
+ "node": ">=10"
31
+ },
32
+ "funding": {
33
+ "url": "https://github.com/sponsors/sindresorhus"
34
+ }
35
+ },
36
+ "node_modules/@babel/code-frame": {
37
+ "version": "7.29.0",
38
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
39
+ "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
40
+ "license": "MIT",
41
+ "dependencies": {
42
+ "@babel/helper-validator-identifier": "^7.28.5",
43
+ "js-tokens": "^4.0.0",
44
+ "picocolors": "^1.1.1"
45
+ },
46
+ "engines": {
47
+ "node": ">=6.9.0"
48
+ }
49
+ },
50
+ "node_modules/@babel/compat-data": {
51
+ "version": "7.29.3",
52
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
53
+ "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
54
+ "license": "MIT",
55
+ "engines": {
56
+ "node": ">=6.9.0"
57
+ }
58
+ },
59
+ "node_modules/@babel/core": {
60
+ "version": "7.29.0",
61
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz",
62
+ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==",
63
+ "license": "MIT",
64
+ "dependencies": {
65
+ "@babel/code-frame": "^7.29.0",
66
+ "@babel/generator": "^7.29.0",
67
+ "@babel/helper-compilation-targets": "^7.28.6",
68
+ "@babel/helper-module-transforms": "^7.28.6",
69
+ "@babel/helpers": "^7.28.6",
70
+ "@babel/parser": "^7.29.0",
71
+ "@babel/template": "^7.28.6",
72
+ "@babel/traverse": "^7.29.0",
73
+ "@babel/types": "^7.29.0",
74
+ "@jridgewell/remapping": "^2.3.5",
75
+ "convert-source-map": "^2.0.0",
76
+ "debug": "^4.1.0",
77
+ "gensync": "^1.0.0-beta.2",
78
+ "json5": "^2.2.3",
79
+ "semver": "^6.3.1"
80
+ },
81
+ "engines": {
82
+ "node": ">=6.9.0"
83
+ },
84
+ "funding": {
85
+ "type": "opencollective",
86
+ "url": "https://opencollective.com/babel"
87
+ }
88
+ },
89
+ "node_modules/@babel/generator": {
90
+ "version": "7.29.1",
91
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
92
+ "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
93
+ "license": "MIT",
94
+ "dependencies": {
95
+ "@babel/parser": "^7.29.0",
96
+ "@babel/types": "^7.29.0",
97
+ "@jridgewell/gen-mapping": "^0.3.12",
98
+ "@jridgewell/trace-mapping": "^0.3.28",
99
+ "jsesc": "^3.0.2"
100
+ },
101
+ "engines": {
102
+ "node": ">=6.9.0"
103
+ }
104
+ },
105
+ "node_modules/@babel/helper-compilation-targets": {
106
+ "version": "7.28.6",
107
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
108
+ "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
109
+ "license": "MIT",
110
+ "dependencies": {
111
+ "@babel/compat-data": "^7.28.6",
112
+ "@babel/helper-validator-option": "^7.27.1",
113
+ "browserslist": "^4.24.0",
114
+ "lru-cache": "^5.1.1",
115
+ "semver": "^6.3.1"
116
+ },
117
+ "engines": {
118
+ "node": ">=6.9.0"
119
+ }
120
+ },
121
+ "node_modules/@babel/helper-globals": {
122
+ "version": "7.28.0",
123
+ "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
124
+ "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
125
+ "license": "MIT",
126
+ "engines": {
127
+ "node": ">=6.9.0"
128
+ }
129
+ },
130
+ "node_modules/@babel/helper-module-imports": {
131
+ "version": "7.28.6",
132
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
133
+ "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
134
+ "license": "MIT",
135
+ "dependencies": {
136
+ "@babel/traverse": "^7.28.6",
137
+ "@babel/types": "^7.28.6"
138
+ },
139
+ "engines": {
140
+ "node": ">=6.9.0"
141
+ }
142
+ },
143
+ "node_modules/@babel/helper-module-transforms": {
144
+ "version": "7.28.6",
145
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
146
+ "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
147
+ "license": "MIT",
148
+ "dependencies": {
149
+ "@babel/helper-module-imports": "^7.28.6",
150
+ "@babel/helper-validator-identifier": "^7.28.5",
151
+ "@babel/traverse": "^7.28.6"
152
+ },
153
+ "engines": {
154
+ "node": ">=6.9.0"
155
+ },
156
+ "peerDependencies": {
157
+ "@babel/core": "^7.0.0"
158
+ }
159
+ },
160
+ "node_modules/@babel/helper-plugin-utils": {
161
+ "version": "7.28.6",
162
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
163
+ "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
164
+ "license": "MIT",
165
+ "engines": {
166
+ "node": ">=6.9.0"
167
+ }
168
+ },
169
+ "node_modules/@babel/helper-string-parser": {
170
+ "version": "7.27.1",
171
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
172
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
173
+ "license": "MIT",
174
+ "engines": {
175
+ "node": ">=6.9.0"
176
+ }
177
+ },
178
+ "node_modules/@babel/helper-validator-identifier": {
179
+ "version": "7.28.5",
180
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
181
+ "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
182
+ "license": "MIT",
183
+ "engines": {
184
+ "node": ">=6.9.0"
185
+ }
186
+ },
187
+ "node_modules/@babel/helper-validator-option": {
188
+ "version": "7.27.1",
189
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
190
+ "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
191
+ "license": "MIT",
192
+ "engines": {
193
+ "node": ">=6.9.0"
194
+ }
195
+ },
196
+ "node_modules/@babel/helpers": {
197
+ "version": "7.29.2",
198
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz",
199
+ "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==",
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.3",
211
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz",
212
+ "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==",
213
+ "license": "MIT",
214
+ "dependencies": {
215
+ "@babel/types": "^7.29.0"
216
+ },
217
+ "bin": {
218
+ "parser": "bin/babel-parser.js"
219
+ },
220
+ "engines": {
221
+ "node": ">=6.0.0"
222
+ }
223
+ },
224
+ "node_modules/@babel/plugin-transform-react-jsx-self": {
225
+ "version": "7.27.1",
226
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz",
227
+ "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==",
228
+ "license": "MIT",
229
+ "dependencies": {
230
+ "@babel/helper-plugin-utils": "^7.27.1"
231
+ },
232
+ "engines": {
233
+ "node": ">=6.9.0"
234
+ },
235
+ "peerDependencies": {
236
+ "@babel/core": "^7.0.0-0"
237
+ }
238
+ },
239
+ "node_modules/@babel/plugin-transform-react-jsx-source": {
240
+ "version": "7.27.1",
241
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz",
242
+ "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==",
243
+ "license": "MIT",
244
+ "dependencies": {
245
+ "@babel/helper-plugin-utils": "^7.27.1"
246
+ },
247
+ "engines": {
248
+ "node": ">=6.9.0"
249
+ },
250
+ "peerDependencies": {
251
+ "@babel/core": "^7.0.0-0"
252
+ }
253
+ },
254
+ "node_modules/@babel/template": {
255
+ "version": "7.28.6",
256
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
257
+ "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
258
+ "license": "MIT",
259
+ "dependencies": {
260
+ "@babel/code-frame": "^7.28.6",
261
+ "@babel/parser": "^7.28.6",
262
+ "@babel/types": "^7.28.6"
263
+ },
264
+ "engines": {
265
+ "node": ">=6.9.0"
266
+ }
267
+ },
268
+ "node_modules/@babel/traverse": {
269
+ "version": "7.29.0",
270
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
271
+ "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
272
+ "license": "MIT",
273
+ "dependencies": {
274
+ "@babel/code-frame": "^7.29.0",
275
+ "@babel/generator": "^7.29.0",
276
+ "@babel/helper-globals": "^7.28.0",
277
+ "@babel/parser": "^7.29.0",
278
+ "@babel/template": "^7.28.6",
279
+ "@babel/types": "^7.29.0",
280
+ "debug": "^4.3.1"
281
+ },
282
+ "engines": {
283
+ "node": ">=6.9.0"
284
+ }
285
+ },
286
+ "node_modules/@babel/types": {
287
+ "version": "7.29.0",
288
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
289
+ "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
290
+ "license": "MIT",
291
+ "dependencies": {
292
+ "@babel/helper-string-parser": "^7.27.1",
293
+ "@babel/helper-validator-identifier": "^7.28.5"
294
+ },
295
+ "engines": {
296
+ "node": ">=6.9.0"
297
+ }
298
+ },
299
+ "node_modules/@esbuild/aix-ppc64": {
300
+ "version": "0.25.12",
301
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz",
302
+ "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
303
+ "cpu": [
304
+ "ppc64"
305
+ ],
306
+ "license": "MIT",
307
+ "optional": true,
308
+ "os": [
309
+ "aix"
310
+ ],
311
+ "engines": {
312
+ "node": ">=18"
313
+ }
314
+ },
315
+ "node_modules/@esbuild/android-arm": {
316
+ "version": "0.25.12",
317
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz",
318
+ "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
319
+ "cpu": [
320
+ "arm"
321
+ ],
322
+ "license": "MIT",
323
+ "optional": true,
324
+ "os": [
325
+ "android"
326
+ ],
327
+ "engines": {
328
+ "node": ">=18"
329
+ }
330
+ },
331
+ "node_modules/@esbuild/android-arm64": {
332
+ "version": "0.25.12",
333
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz",
334
+ "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
335
+ "cpu": [
336
+ "arm64"
337
+ ],
338
+ "license": "MIT",
339
+ "optional": true,
340
+ "os": [
341
+ "android"
342
+ ],
343
+ "engines": {
344
+ "node": ">=18"
345
+ }
346
+ },
347
+ "node_modules/@esbuild/android-x64": {
348
+ "version": "0.25.12",
349
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz",
350
+ "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
351
+ "cpu": [
352
+ "x64"
353
+ ],
354
+ "license": "MIT",
355
+ "optional": true,
356
+ "os": [
357
+ "android"
358
+ ],
359
+ "engines": {
360
+ "node": ">=18"
361
+ }
362
+ },
363
+ "node_modules/@esbuild/darwin-arm64": {
364
+ "version": "0.25.12",
365
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz",
366
+ "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
367
+ "cpu": [
368
+ "arm64"
369
+ ],
370
+ "license": "MIT",
371
+ "optional": true,
372
+ "os": [
373
+ "darwin"
374
+ ],
375
+ "engines": {
376
+ "node": ">=18"
377
+ }
378
+ },
379
+ "node_modules/@esbuild/darwin-x64": {
380
+ "version": "0.25.12",
381
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz",
382
+ "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
383
+ "cpu": [
384
+ "x64"
385
+ ],
386
+ "license": "MIT",
387
+ "optional": true,
388
+ "os": [
389
+ "darwin"
390
+ ],
391
+ "engines": {
392
+ "node": ">=18"
393
+ }
394
+ },
395
+ "node_modules/@esbuild/freebsd-arm64": {
396
+ "version": "0.25.12",
397
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz",
398
+ "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
399
+ "cpu": [
400
+ "arm64"
401
+ ],
402
+ "license": "MIT",
403
+ "optional": true,
404
+ "os": [
405
+ "freebsd"
406
+ ],
407
+ "engines": {
408
+ "node": ">=18"
409
+ }
410
+ },
411
+ "node_modules/@esbuild/freebsd-x64": {
412
+ "version": "0.25.12",
413
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz",
414
+ "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
415
+ "cpu": [
416
+ "x64"
417
+ ],
418
+ "license": "MIT",
419
+ "optional": true,
420
+ "os": [
421
+ "freebsd"
422
+ ],
423
+ "engines": {
424
+ "node": ">=18"
425
+ }
426
+ },
427
+ "node_modules/@esbuild/linux-arm": {
428
+ "version": "0.25.12",
429
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz",
430
+ "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
431
+ "cpu": [
432
+ "arm"
433
+ ],
434
+ "license": "MIT",
435
+ "optional": true,
436
+ "os": [
437
+ "linux"
438
+ ],
439
+ "engines": {
440
+ "node": ">=18"
441
+ }
442
+ },
443
+ "node_modules/@esbuild/linux-arm64": {
444
+ "version": "0.25.12",
445
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz",
446
+ "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
447
+ "cpu": [
448
+ "arm64"
449
+ ],
450
+ "license": "MIT",
451
+ "optional": true,
452
+ "os": [
453
+ "linux"
454
+ ],
455
+ "engines": {
456
+ "node": ">=18"
457
+ }
458
+ },
459
+ "node_modules/@esbuild/linux-ia32": {
460
+ "version": "0.25.12",
461
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz",
462
+ "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
463
+ "cpu": [
464
+ "ia32"
465
+ ],
466
+ "license": "MIT",
467
+ "optional": true,
468
+ "os": [
469
+ "linux"
470
+ ],
471
+ "engines": {
472
+ "node": ">=18"
473
+ }
474
+ },
475
+ "node_modules/@esbuild/linux-loong64": {
476
+ "version": "0.25.12",
477
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz",
478
+ "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
479
+ "cpu": [
480
+ "loong64"
481
+ ],
482
+ "license": "MIT",
483
+ "optional": true,
484
+ "os": [
485
+ "linux"
486
+ ],
487
+ "engines": {
488
+ "node": ">=18"
489
+ }
490
+ },
491
+ "node_modules/@esbuild/linux-mips64el": {
492
+ "version": "0.25.12",
493
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz",
494
+ "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
495
+ "cpu": [
496
+ "mips64el"
497
+ ],
498
+ "license": "MIT",
499
+ "optional": true,
500
+ "os": [
501
+ "linux"
502
+ ],
503
+ "engines": {
504
+ "node": ">=18"
505
+ }
506
+ },
507
+ "node_modules/@esbuild/linux-ppc64": {
508
+ "version": "0.25.12",
509
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz",
510
+ "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
511
+ "cpu": [
512
+ "ppc64"
513
+ ],
514
+ "license": "MIT",
515
+ "optional": true,
516
+ "os": [
517
+ "linux"
518
+ ],
519
+ "engines": {
520
+ "node": ">=18"
521
+ }
522
+ },
523
+ "node_modules/@esbuild/linux-riscv64": {
524
+ "version": "0.25.12",
525
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz",
526
+ "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
527
+ "cpu": [
528
+ "riscv64"
529
+ ],
530
+ "license": "MIT",
531
+ "optional": true,
532
+ "os": [
533
+ "linux"
534
+ ],
535
+ "engines": {
536
+ "node": ">=18"
537
+ }
538
+ },
539
+ "node_modules/@esbuild/linux-s390x": {
540
+ "version": "0.25.12",
541
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz",
542
+ "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
543
+ "cpu": [
544
+ "s390x"
545
+ ],
546
+ "license": "MIT",
547
+ "optional": true,
548
+ "os": [
549
+ "linux"
550
+ ],
551
+ "engines": {
552
+ "node": ">=18"
553
+ }
554
+ },
555
+ "node_modules/@esbuild/linux-x64": {
556
+ "version": "0.25.12",
557
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz",
558
+ "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
559
+ "cpu": [
560
+ "x64"
561
+ ],
562
+ "license": "MIT",
563
+ "optional": true,
564
+ "os": [
565
+ "linux"
566
+ ],
567
+ "engines": {
568
+ "node": ">=18"
569
+ }
570
+ },
571
+ "node_modules/@esbuild/netbsd-arm64": {
572
+ "version": "0.25.12",
573
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz",
574
+ "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
575
+ "cpu": [
576
+ "arm64"
577
+ ],
578
+ "license": "MIT",
579
+ "optional": true,
580
+ "os": [
581
+ "netbsd"
582
+ ],
583
+ "engines": {
584
+ "node": ">=18"
585
+ }
586
+ },
587
+ "node_modules/@esbuild/netbsd-x64": {
588
+ "version": "0.25.12",
589
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz",
590
+ "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
591
+ "cpu": [
592
+ "x64"
593
+ ],
594
+ "license": "MIT",
595
+ "optional": true,
596
+ "os": [
597
+ "netbsd"
598
+ ],
599
+ "engines": {
600
+ "node": ">=18"
601
+ }
602
+ },
603
+ "node_modules/@esbuild/openbsd-arm64": {
604
+ "version": "0.25.12",
605
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz",
606
+ "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
607
+ "cpu": [
608
+ "arm64"
609
+ ],
610
+ "license": "MIT",
611
+ "optional": true,
612
+ "os": [
613
+ "openbsd"
614
+ ],
615
+ "engines": {
616
+ "node": ">=18"
617
+ }
618
+ },
619
+ "node_modules/@esbuild/openbsd-x64": {
620
+ "version": "0.25.12",
621
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz",
622
+ "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
623
+ "cpu": [
624
+ "x64"
625
+ ],
626
+ "license": "MIT",
627
+ "optional": true,
628
+ "os": [
629
+ "openbsd"
630
+ ],
631
+ "engines": {
632
+ "node": ">=18"
633
+ }
634
+ },
635
+ "node_modules/@esbuild/openharmony-arm64": {
636
+ "version": "0.25.12",
637
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz",
638
+ "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
639
+ "cpu": [
640
+ "arm64"
641
+ ],
642
+ "license": "MIT",
643
+ "optional": true,
644
+ "os": [
645
+ "openharmony"
646
+ ],
647
+ "engines": {
648
+ "node": ">=18"
649
+ }
650
+ },
651
+ "node_modules/@esbuild/sunos-x64": {
652
+ "version": "0.25.12",
653
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz",
654
+ "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
655
+ "cpu": [
656
+ "x64"
657
+ ],
658
+ "license": "MIT",
659
+ "optional": true,
660
+ "os": [
661
+ "sunos"
662
+ ],
663
+ "engines": {
664
+ "node": ">=18"
665
+ }
666
+ },
667
+ "node_modules/@esbuild/win32-arm64": {
668
+ "version": "0.25.12",
669
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz",
670
+ "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
671
+ "cpu": [
672
+ "arm64"
673
+ ],
674
+ "license": "MIT",
675
+ "optional": true,
676
+ "os": [
677
+ "win32"
678
+ ],
679
+ "engines": {
680
+ "node": ">=18"
681
+ }
682
+ },
683
+ "node_modules/@esbuild/win32-ia32": {
684
+ "version": "0.25.12",
685
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz",
686
+ "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
687
+ "cpu": [
688
+ "ia32"
689
+ ],
690
+ "license": "MIT",
691
+ "optional": true,
692
+ "os": [
693
+ "win32"
694
+ ],
695
+ "engines": {
696
+ "node": ">=18"
697
+ }
698
+ },
699
+ "node_modules/@esbuild/win32-x64": {
700
+ "version": "0.25.12",
701
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz",
702
+ "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
703
+ "cpu": [
704
+ "x64"
705
+ ],
706
+ "license": "MIT",
707
+ "optional": true,
708
+ "os": [
709
+ "win32"
710
+ ],
711
+ "engines": {
712
+ "node": ">=18"
713
+ }
714
+ },
715
+ "node_modules/@jridgewell/gen-mapping": {
716
+ "version": "0.3.13",
717
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
718
+ "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
719
+ "license": "MIT",
720
+ "dependencies": {
721
+ "@jridgewell/sourcemap-codec": "^1.5.0",
722
+ "@jridgewell/trace-mapping": "^0.3.24"
723
+ }
724
+ },
725
+ "node_modules/@jridgewell/remapping": {
726
+ "version": "2.3.5",
727
+ "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
728
+ "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
729
+ "license": "MIT",
730
+ "dependencies": {
731
+ "@jridgewell/gen-mapping": "^0.3.5",
732
+ "@jridgewell/trace-mapping": "^0.3.24"
733
+ }
734
+ },
735
+ "node_modules/@jridgewell/resolve-uri": {
736
+ "version": "3.1.2",
737
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
738
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
739
+ "license": "MIT",
740
+ "engines": {
741
+ "node": ">=6.0.0"
742
+ }
743
+ },
744
+ "node_modules/@jridgewell/sourcemap-codec": {
745
+ "version": "1.5.5",
746
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
747
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
748
+ "license": "MIT"
749
+ },
750
+ "node_modules/@jridgewell/trace-mapping": {
751
+ "version": "0.3.31",
752
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
753
+ "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
754
+ "license": "MIT",
755
+ "dependencies": {
756
+ "@jridgewell/resolve-uri": "^3.1.0",
757
+ "@jridgewell/sourcemap-codec": "^1.4.14"
758
+ }
759
+ },
760
+ "node_modules/@nodelib/fs.scandir": {
761
+ "version": "2.1.5",
762
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
763
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
764
+ "dev": true,
765
+ "license": "MIT",
766
+ "dependencies": {
767
+ "@nodelib/fs.stat": "2.0.5",
768
+ "run-parallel": "^1.1.9"
769
+ },
770
+ "engines": {
771
+ "node": ">= 8"
772
+ }
773
+ },
774
+ "node_modules/@nodelib/fs.stat": {
775
+ "version": "2.0.5",
776
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
777
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
778
+ "dev": true,
779
+ "license": "MIT",
780
+ "engines": {
781
+ "node": ">= 8"
782
+ }
783
+ },
784
+ "node_modules/@nodelib/fs.walk": {
785
+ "version": "1.2.8",
786
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
787
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
788
+ "dev": true,
789
+ "license": "MIT",
790
+ "dependencies": {
791
+ "@nodelib/fs.scandir": "2.1.5",
792
+ "fastq": "^1.6.0"
793
+ },
794
+ "engines": {
795
+ "node": ">= 8"
796
+ }
797
+ },
798
+ "node_modules/@rolldown/pluginutils": {
799
+ "version": "1.0.0-beta.27",
800
+ "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz",
801
+ "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==",
802
+ "license": "MIT"
803
+ },
804
+ "node_modules/@rollup/rollup-android-arm-eabi": {
805
+ "version": "4.60.2",
806
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz",
807
+ "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==",
808
+ "cpu": [
809
+ "arm"
810
+ ],
811
+ "license": "MIT",
812
+ "optional": true,
813
+ "os": [
814
+ "android"
815
+ ]
816
+ },
817
+ "node_modules/@rollup/rollup-android-arm64": {
818
+ "version": "4.60.2",
819
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz",
820
+ "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==",
821
+ "cpu": [
822
+ "arm64"
823
+ ],
824
+ "license": "MIT",
825
+ "optional": true,
826
+ "os": [
827
+ "android"
828
+ ]
829
+ },
830
+ "node_modules/@rollup/rollup-darwin-arm64": {
831
+ "version": "4.60.2",
832
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz",
833
+ "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==",
834
+ "cpu": [
835
+ "arm64"
836
+ ],
837
+ "license": "MIT",
838
+ "optional": true,
839
+ "os": [
840
+ "darwin"
841
+ ]
842
+ },
843
+ "node_modules/@rollup/rollup-darwin-x64": {
844
+ "version": "4.60.2",
845
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz",
846
+ "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==",
847
+ "cpu": [
848
+ "x64"
849
+ ],
850
+ "license": "MIT",
851
+ "optional": true,
852
+ "os": [
853
+ "darwin"
854
+ ]
855
+ },
856
+ "node_modules/@rollup/rollup-freebsd-arm64": {
857
+ "version": "4.60.2",
858
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz",
859
+ "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==",
860
+ "cpu": [
861
+ "arm64"
862
+ ],
863
+ "license": "MIT",
864
+ "optional": true,
865
+ "os": [
866
+ "freebsd"
867
+ ]
868
+ },
869
+ "node_modules/@rollup/rollup-freebsd-x64": {
870
+ "version": "4.60.2",
871
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz",
872
+ "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==",
873
+ "cpu": [
874
+ "x64"
875
+ ],
876
+ "license": "MIT",
877
+ "optional": true,
878
+ "os": [
879
+ "freebsd"
880
+ ]
881
+ },
882
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
883
+ "version": "4.60.2",
884
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz",
885
+ "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==",
886
+ "cpu": [
887
+ "arm"
888
+ ],
889
+ "license": "MIT",
890
+ "optional": true,
891
+ "os": [
892
+ "linux"
893
+ ]
894
+ },
895
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
896
+ "version": "4.60.2",
897
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz",
898
+ "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==",
899
+ "cpu": [
900
+ "arm"
901
+ ],
902
+ "license": "MIT",
903
+ "optional": true,
904
+ "os": [
905
+ "linux"
906
+ ]
907
+ },
908
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
909
+ "version": "4.60.2",
910
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz",
911
+ "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==",
912
+ "cpu": [
913
+ "arm64"
914
+ ],
915
+ "license": "MIT",
916
+ "optional": true,
917
+ "os": [
918
+ "linux"
919
+ ]
920
+ },
921
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
922
+ "version": "4.60.2",
923
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz",
924
+ "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==",
925
+ "cpu": [
926
+ "arm64"
927
+ ],
928
+ "license": "MIT",
929
+ "optional": true,
930
+ "os": [
931
+ "linux"
932
+ ]
933
+ },
934
+ "node_modules/@rollup/rollup-linux-loong64-gnu": {
935
+ "version": "4.60.2",
936
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz",
937
+ "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==",
938
+ "cpu": [
939
+ "loong64"
940
+ ],
941
+ "license": "MIT",
942
+ "optional": true,
943
+ "os": [
944
+ "linux"
945
+ ]
946
+ },
947
+ "node_modules/@rollup/rollup-linux-loong64-musl": {
948
+ "version": "4.60.2",
949
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz",
950
+ "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==",
951
+ "cpu": [
952
+ "loong64"
953
+ ],
954
+ "license": "MIT",
955
+ "optional": true,
956
+ "os": [
957
+ "linux"
958
+ ]
959
+ },
960
+ "node_modules/@rollup/rollup-linux-ppc64-gnu": {
961
+ "version": "4.60.2",
962
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz",
963
+ "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==",
964
+ "cpu": [
965
+ "ppc64"
966
+ ],
967
+ "license": "MIT",
968
+ "optional": true,
969
+ "os": [
970
+ "linux"
971
+ ]
972
+ },
973
+ "node_modules/@rollup/rollup-linux-ppc64-musl": {
974
+ "version": "4.60.2",
975
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz",
976
+ "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==",
977
+ "cpu": [
978
+ "ppc64"
979
+ ],
980
+ "license": "MIT",
981
+ "optional": true,
982
+ "os": [
983
+ "linux"
984
+ ]
985
+ },
986
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
987
+ "version": "4.60.2",
988
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz",
989
+ "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==",
990
+ "cpu": [
991
+ "riscv64"
992
+ ],
993
+ "license": "MIT",
994
+ "optional": true,
995
+ "os": [
996
+ "linux"
997
+ ]
998
+ },
999
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
1000
+ "version": "4.60.2",
1001
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz",
1002
+ "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==",
1003
+ "cpu": [
1004
+ "riscv64"
1005
+ ],
1006
+ "license": "MIT",
1007
+ "optional": true,
1008
+ "os": [
1009
+ "linux"
1010
+ ]
1011
+ },
1012
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
1013
+ "version": "4.60.2",
1014
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz",
1015
+ "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==",
1016
+ "cpu": [
1017
+ "s390x"
1018
+ ],
1019
+ "license": "MIT",
1020
+ "optional": true,
1021
+ "os": [
1022
+ "linux"
1023
+ ]
1024
+ },
1025
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
1026
+ "version": "4.60.2",
1027
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz",
1028
+ "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==",
1029
+ "cpu": [
1030
+ "x64"
1031
+ ],
1032
+ "license": "MIT",
1033
+ "optional": true,
1034
+ "os": [
1035
+ "linux"
1036
+ ]
1037
+ },
1038
+ "node_modules/@rollup/rollup-linux-x64-musl": {
1039
+ "version": "4.60.2",
1040
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz",
1041
+ "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==",
1042
+ "cpu": [
1043
+ "x64"
1044
+ ],
1045
+ "license": "MIT",
1046
+ "optional": true,
1047
+ "os": [
1048
+ "linux"
1049
+ ]
1050
+ },
1051
+ "node_modules/@rollup/rollup-openbsd-x64": {
1052
+ "version": "4.60.2",
1053
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz",
1054
+ "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==",
1055
+ "cpu": [
1056
+ "x64"
1057
+ ],
1058
+ "license": "MIT",
1059
+ "optional": true,
1060
+ "os": [
1061
+ "openbsd"
1062
+ ]
1063
+ },
1064
+ "node_modules/@rollup/rollup-openharmony-arm64": {
1065
+ "version": "4.60.2",
1066
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz",
1067
+ "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==",
1068
+ "cpu": [
1069
+ "arm64"
1070
+ ],
1071
+ "license": "MIT",
1072
+ "optional": true,
1073
+ "os": [
1074
+ "openharmony"
1075
+ ]
1076
+ },
1077
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
1078
+ "version": "4.60.2",
1079
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz",
1080
+ "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==",
1081
+ "cpu": [
1082
+ "arm64"
1083
+ ],
1084
+ "license": "MIT",
1085
+ "optional": true,
1086
+ "os": [
1087
+ "win32"
1088
+ ]
1089
+ },
1090
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
1091
+ "version": "4.60.2",
1092
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz",
1093
+ "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==",
1094
+ "cpu": [
1095
+ "ia32"
1096
+ ],
1097
+ "license": "MIT",
1098
+ "optional": true,
1099
+ "os": [
1100
+ "win32"
1101
+ ]
1102
+ },
1103
+ "node_modules/@rollup/rollup-win32-x64-gnu": {
1104
+ "version": "4.60.2",
1105
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz",
1106
+ "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==",
1107
+ "cpu": [
1108
+ "x64"
1109
+ ],
1110
+ "license": "MIT",
1111
+ "optional": true,
1112
+ "os": [
1113
+ "win32"
1114
+ ]
1115
+ },
1116
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
1117
+ "version": "4.60.2",
1118
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz",
1119
+ "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==",
1120
+ "cpu": [
1121
+ "x64"
1122
+ ],
1123
+ "license": "MIT",
1124
+ "optional": true,
1125
+ "os": [
1126
+ "win32"
1127
+ ]
1128
+ },
1129
+ "node_modules/@types/babel__core": {
1130
+ "version": "7.20.5",
1131
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
1132
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
1133
+ "license": "MIT",
1134
+ "dependencies": {
1135
+ "@babel/parser": "^7.20.7",
1136
+ "@babel/types": "^7.20.7",
1137
+ "@types/babel__generator": "*",
1138
+ "@types/babel__template": "*",
1139
+ "@types/babel__traverse": "*"
1140
+ }
1141
+ },
1142
+ "node_modules/@types/babel__generator": {
1143
+ "version": "7.27.0",
1144
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz",
1145
+ "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==",
1146
+ "license": "MIT",
1147
+ "dependencies": {
1148
+ "@babel/types": "^7.0.0"
1149
+ }
1150
+ },
1151
+ "node_modules/@types/babel__template": {
1152
+ "version": "7.4.4",
1153
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
1154
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
1155
+ "license": "MIT",
1156
+ "dependencies": {
1157
+ "@babel/parser": "^7.1.0",
1158
+ "@babel/types": "^7.0.0"
1159
+ }
1160
+ },
1161
+ "node_modules/@types/babel__traverse": {
1162
+ "version": "7.28.0",
1163
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz",
1164
+ "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==",
1165
+ "license": "MIT",
1166
+ "dependencies": {
1167
+ "@babel/types": "^7.28.2"
1168
+ }
1169
+ },
1170
+ "node_modules/@types/estree": {
1171
+ "version": "1.0.8",
1172
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1173
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1174
+ "license": "MIT"
1175
+ },
1176
+ "node_modules/@vitejs/plugin-react": {
1177
+ "version": "4.7.0",
1178
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
1179
+ "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==",
1180
+ "license": "MIT",
1181
+ "dependencies": {
1182
+ "@babel/core": "^7.28.0",
1183
+ "@babel/plugin-transform-react-jsx-self": "^7.27.1",
1184
+ "@babel/plugin-transform-react-jsx-source": "^7.27.1",
1185
+ "@rolldown/pluginutils": "1.0.0-beta.27",
1186
+ "@types/babel__core": "^7.20.5",
1187
+ "react-refresh": "^0.17.0"
1188
+ },
1189
+ "engines": {
1190
+ "node": "^14.18.0 || >=16.0.0"
1191
+ },
1192
+ "peerDependencies": {
1193
+ "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
1194
+ }
1195
+ },
1196
+ "node_modules/any-promise": {
1197
+ "version": "1.3.0",
1198
+ "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1199
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1200
+ "dev": true,
1201
+ "license": "MIT"
1202
+ },
1203
+ "node_modules/anymatch": {
1204
+ "version": "3.1.3",
1205
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1206
+ "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1207
+ "dev": true,
1208
+ "license": "ISC",
1209
+ "dependencies": {
1210
+ "normalize-path": "^3.0.0",
1211
+ "picomatch": "^2.0.4"
1212
+ },
1213
+ "engines": {
1214
+ "node": ">= 8"
1215
+ }
1216
+ },
1217
+ "node_modules/arg": {
1218
+ "version": "5.0.2",
1219
+ "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1220
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1221
+ "dev": true,
1222
+ "license": "MIT"
1223
+ },
1224
+ "node_modules/autoprefixer": {
1225
+ "version": "10.5.0",
1226
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz",
1227
+ "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==",
1228
+ "dev": true,
1229
+ "funding": [
1230
+ {
1231
+ "type": "opencollective",
1232
+ "url": "https://opencollective.com/postcss/"
1233
+ },
1234
+ {
1235
+ "type": "tidelift",
1236
+ "url": "https://tidelift.com/funding/github/npm/autoprefixer"
1237
+ },
1238
+ {
1239
+ "type": "github",
1240
+ "url": "https://github.com/sponsors/ai"
1241
+ }
1242
+ ],
1243
+ "license": "MIT",
1244
+ "dependencies": {
1245
+ "browserslist": "^4.28.2",
1246
+ "caniuse-lite": "^1.0.30001787",
1247
+ "fraction.js": "^5.3.4",
1248
+ "picocolors": "^1.1.1",
1249
+ "postcss-value-parser": "^4.2.0"
1250
+ },
1251
+ "bin": {
1252
+ "autoprefixer": "bin/autoprefixer"
1253
+ },
1254
+ "engines": {
1255
+ "node": "^10 || ^12 || >=14"
1256
+ },
1257
+ "peerDependencies": {
1258
+ "postcss": "^8.1.0"
1259
+ }
1260
+ },
1261
+ "node_modules/baseline-browser-mapping": {
1262
+ "version": "2.10.25",
1263
+ "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.25.tgz",
1264
+ "integrity": "sha512-QO/VHsXCQdnzADMfmkeOPvHdIAkoB7i0/rGjINPJEetLx75hNttVWGQ/jycHUDP9zZ9rupbm60WRxcwViB0MiA==",
1265
+ "license": "Apache-2.0",
1266
+ "bin": {
1267
+ "baseline-browser-mapping": "dist/cli.cjs"
1268
+ },
1269
+ "engines": {
1270
+ "node": ">=6.0.0"
1271
+ }
1272
+ },
1273
+ "node_modules/binary-extensions": {
1274
+ "version": "2.3.0",
1275
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
1276
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
1277
+ "dev": true,
1278
+ "license": "MIT",
1279
+ "engines": {
1280
+ "node": ">=8"
1281
+ },
1282
+ "funding": {
1283
+ "url": "https://github.com/sponsors/sindresorhus"
1284
+ }
1285
+ },
1286
+ "node_modules/braces": {
1287
+ "version": "3.0.3",
1288
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
1289
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
1290
+ "dev": true,
1291
+ "license": "MIT",
1292
+ "dependencies": {
1293
+ "fill-range": "^7.1.1"
1294
+ },
1295
+ "engines": {
1296
+ "node": ">=8"
1297
+ }
1298
+ },
1299
+ "node_modules/browserslist": {
1300
+ "version": "4.28.2",
1301
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz",
1302
+ "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==",
1303
+ "funding": [
1304
+ {
1305
+ "type": "opencollective",
1306
+ "url": "https://opencollective.com/browserslist"
1307
+ },
1308
+ {
1309
+ "type": "tidelift",
1310
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
1311
+ },
1312
+ {
1313
+ "type": "github",
1314
+ "url": "https://github.com/sponsors/ai"
1315
+ }
1316
+ ],
1317
+ "license": "MIT",
1318
+ "dependencies": {
1319
+ "baseline-browser-mapping": "^2.10.12",
1320
+ "caniuse-lite": "^1.0.30001782",
1321
+ "electron-to-chromium": "^1.5.328",
1322
+ "node-releases": "^2.0.36",
1323
+ "update-browserslist-db": "^1.2.3"
1324
+ },
1325
+ "bin": {
1326
+ "browserslist": "cli.js"
1327
+ },
1328
+ "engines": {
1329
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1330
+ }
1331
+ },
1332
+ "node_modules/camelcase-css": {
1333
+ "version": "2.0.1",
1334
+ "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1335
+ "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1336
+ "dev": true,
1337
+ "license": "MIT",
1338
+ "engines": {
1339
+ "node": ">= 6"
1340
+ }
1341
+ },
1342
+ "node_modules/caniuse-lite": {
1343
+ "version": "1.0.30001791",
1344
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz",
1345
+ "integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==",
1346
+ "funding": [
1347
+ {
1348
+ "type": "opencollective",
1349
+ "url": "https://opencollective.com/browserslist"
1350
+ },
1351
+ {
1352
+ "type": "tidelift",
1353
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1354
+ },
1355
+ {
1356
+ "type": "github",
1357
+ "url": "https://github.com/sponsors/ai"
1358
+ }
1359
+ ],
1360
+ "license": "CC-BY-4.0"
1361
+ },
1362
+ "node_modules/chokidar": {
1363
+ "version": "3.6.0",
1364
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
1365
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
1366
+ "dev": true,
1367
+ "license": "MIT",
1368
+ "dependencies": {
1369
+ "anymatch": "~3.1.2",
1370
+ "braces": "~3.0.2",
1371
+ "glob-parent": "~5.1.2",
1372
+ "is-binary-path": "~2.1.0",
1373
+ "is-glob": "~4.0.1",
1374
+ "normalize-path": "~3.0.0",
1375
+ "readdirp": "~3.6.0"
1376
+ },
1377
+ "engines": {
1378
+ "node": ">= 8.10.0"
1379
+ },
1380
+ "funding": {
1381
+ "url": "https://paulmillr.com/funding/"
1382
+ },
1383
+ "optionalDependencies": {
1384
+ "fsevents": "~2.3.2"
1385
+ }
1386
+ },
1387
+ "node_modules/chokidar/node_modules/glob-parent": {
1388
+ "version": "5.1.2",
1389
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1390
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1391
+ "dev": true,
1392
+ "license": "ISC",
1393
+ "dependencies": {
1394
+ "is-glob": "^4.0.1"
1395
+ },
1396
+ "engines": {
1397
+ "node": ">= 6"
1398
+ }
1399
+ },
1400
+ "node_modules/commander": {
1401
+ "version": "4.1.1",
1402
+ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1403
+ "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1404
+ "dev": true,
1405
+ "license": "MIT",
1406
+ "engines": {
1407
+ "node": ">= 6"
1408
+ }
1409
+ },
1410
+ "node_modules/convert-source-map": {
1411
+ "version": "2.0.0",
1412
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1413
+ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1414
+ "license": "MIT"
1415
+ },
1416
+ "node_modules/cssesc": {
1417
+ "version": "3.0.0",
1418
+ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1419
+ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1420
+ "dev": true,
1421
+ "license": "MIT",
1422
+ "bin": {
1423
+ "cssesc": "bin/cssesc"
1424
+ },
1425
+ "engines": {
1426
+ "node": ">=4"
1427
+ }
1428
+ },
1429
+ "node_modules/debug": {
1430
+ "version": "4.4.3",
1431
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
1432
+ "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
1433
+ "license": "MIT",
1434
+ "dependencies": {
1435
+ "ms": "^2.1.3"
1436
+ },
1437
+ "engines": {
1438
+ "node": ">=6.0"
1439
+ },
1440
+ "peerDependenciesMeta": {
1441
+ "supports-color": {
1442
+ "optional": true
1443
+ }
1444
+ }
1445
+ },
1446
+ "node_modules/didyoumean": {
1447
+ "version": "1.2.2",
1448
+ "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1449
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1450
+ "dev": true,
1451
+ "license": "Apache-2.0"
1452
+ },
1453
+ "node_modules/dlv": {
1454
+ "version": "1.1.3",
1455
+ "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1456
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1457
+ "dev": true,
1458
+ "license": "MIT"
1459
+ },
1460
+ "node_modules/electron-to-chromium": {
1461
+ "version": "1.5.348",
1462
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.348.tgz",
1463
+ "integrity": "sha512-QC2X59nRlycQQMc4ZXjSVBX+tSgJfgRtcrYHbIZLgOV2dCvefoQGegLR7lLXKgpPpSuVmJU19LMzGrSa2C7k3Q==",
1464
+ "license": "ISC"
1465
+ },
1466
+ "node_modules/es-errors": {
1467
+ "version": "1.3.0",
1468
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1469
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1470
+ "dev": true,
1471
+ "license": "MIT",
1472
+ "engines": {
1473
+ "node": ">= 0.4"
1474
+ }
1475
+ },
1476
+ "node_modules/esbuild": {
1477
+ "version": "0.25.12",
1478
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz",
1479
+ "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
1480
+ "hasInstallScript": true,
1481
+ "license": "MIT",
1482
+ "bin": {
1483
+ "esbuild": "bin/esbuild"
1484
+ },
1485
+ "engines": {
1486
+ "node": ">=18"
1487
+ },
1488
+ "optionalDependencies": {
1489
+ "@esbuild/aix-ppc64": "0.25.12",
1490
+ "@esbuild/android-arm": "0.25.12",
1491
+ "@esbuild/android-arm64": "0.25.12",
1492
+ "@esbuild/android-x64": "0.25.12",
1493
+ "@esbuild/darwin-arm64": "0.25.12",
1494
+ "@esbuild/darwin-x64": "0.25.12",
1495
+ "@esbuild/freebsd-arm64": "0.25.12",
1496
+ "@esbuild/freebsd-x64": "0.25.12",
1497
+ "@esbuild/linux-arm": "0.25.12",
1498
+ "@esbuild/linux-arm64": "0.25.12",
1499
+ "@esbuild/linux-ia32": "0.25.12",
1500
+ "@esbuild/linux-loong64": "0.25.12",
1501
+ "@esbuild/linux-mips64el": "0.25.12",
1502
+ "@esbuild/linux-ppc64": "0.25.12",
1503
+ "@esbuild/linux-riscv64": "0.25.12",
1504
+ "@esbuild/linux-s390x": "0.25.12",
1505
+ "@esbuild/linux-x64": "0.25.12",
1506
+ "@esbuild/netbsd-arm64": "0.25.12",
1507
+ "@esbuild/netbsd-x64": "0.25.12",
1508
+ "@esbuild/openbsd-arm64": "0.25.12",
1509
+ "@esbuild/openbsd-x64": "0.25.12",
1510
+ "@esbuild/openharmony-arm64": "0.25.12",
1511
+ "@esbuild/sunos-x64": "0.25.12",
1512
+ "@esbuild/win32-arm64": "0.25.12",
1513
+ "@esbuild/win32-ia32": "0.25.12",
1514
+ "@esbuild/win32-x64": "0.25.12"
1515
+ }
1516
+ },
1517
+ "node_modules/escalade": {
1518
+ "version": "3.2.0",
1519
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
1520
+ "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
1521
+ "license": "MIT",
1522
+ "engines": {
1523
+ "node": ">=6"
1524
+ }
1525
+ },
1526
+ "node_modules/fast-glob": {
1527
+ "version": "3.3.3",
1528
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
1529
+ "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
1530
+ "dev": true,
1531
+ "license": "MIT",
1532
+ "dependencies": {
1533
+ "@nodelib/fs.stat": "^2.0.2",
1534
+ "@nodelib/fs.walk": "^1.2.3",
1535
+ "glob-parent": "^5.1.2",
1536
+ "merge2": "^1.3.0",
1537
+ "micromatch": "^4.0.8"
1538
+ },
1539
+ "engines": {
1540
+ "node": ">=8.6.0"
1541
+ }
1542
+ },
1543
+ "node_modules/fast-glob/node_modules/glob-parent": {
1544
+ "version": "5.1.2",
1545
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1546
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1547
+ "dev": true,
1548
+ "license": "ISC",
1549
+ "dependencies": {
1550
+ "is-glob": "^4.0.1"
1551
+ },
1552
+ "engines": {
1553
+ "node": ">= 6"
1554
+ }
1555
+ },
1556
+ "node_modules/fastq": {
1557
+ "version": "1.20.1",
1558
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
1559
+ "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
1560
+ "dev": true,
1561
+ "license": "ISC",
1562
+ "dependencies": {
1563
+ "reusify": "^1.0.4"
1564
+ }
1565
+ },
1566
+ "node_modules/fill-range": {
1567
+ "version": "7.1.1",
1568
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
1569
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
1570
+ "dev": true,
1571
+ "license": "MIT",
1572
+ "dependencies": {
1573
+ "to-regex-range": "^5.0.1"
1574
+ },
1575
+ "engines": {
1576
+ "node": ">=8"
1577
+ }
1578
+ },
1579
+ "node_modules/fraction.js": {
1580
+ "version": "5.3.4",
1581
+ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz",
1582
+ "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==",
1583
+ "dev": true,
1584
+ "license": "MIT",
1585
+ "engines": {
1586
+ "node": "*"
1587
+ },
1588
+ "funding": {
1589
+ "type": "github",
1590
+ "url": "https://github.com/sponsors/rawify"
1591
+ }
1592
+ },
1593
+ "node_modules/fsevents": {
1594
+ "version": "2.3.3",
1595
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1596
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1597
+ "hasInstallScript": true,
1598
+ "license": "MIT",
1599
+ "optional": true,
1600
+ "os": [
1601
+ "darwin"
1602
+ ],
1603
+ "engines": {
1604
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1605
+ }
1606
+ },
1607
+ "node_modules/function-bind": {
1608
+ "version": "1.1.2",
1609
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
1610
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
1611
+ "dev": true,
1612
+ "license": "MIT",
1613
+ "funding": {
1614
+ "url": "https://github.com/sponsors/ljharb"
1615
+ }
1616
+ },
1617
+ "node_modules/gensync": {
1618
+ "version": "1.0.0-beta.2",
1619
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
1620
+ "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
1621
+ "license": "MIT",
1622
+ "engines": {
1623
+ "node": ">=6.9.0"
1624
+ }
1625
+ },
1626
+ "node_modules/glob-parent": {
1627
+ "version": "6.0.2",
1628
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
1629
+ "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
1630
+ "dev": true,
1631
+ "license": "ISC",
1632
+ "dependencies": {
1633
+ "is-glob": "^4.0.3"
1634
+ },
1635
+ "engines": {
1636
+ "node": ">=10.13.0"
1637
+ }
1638
+ },
1639
+ "node_modules/hasown": {
1640
+ "version": "2.0.3",
1641
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
1642
+ "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
1643
+ "dev": true,
1644
+ "license": "MIT",
1645
+ "dependencies": {
1646
+ "function-bind": "^1.1.2"
1647
+ },
1648
+ "engines": {
1649
+ "node": ">= 0.4"
1650
+ }
1651
+ },
1652
+ "node_modules/is-binary-path": {
1653
+ "version": "2.1.0",
1654
+ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1655
+ "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1656
+ "dev": true,
1657
+ "license": "MIT",
1658
+ "dependencies": {
1659
+ "binary-extensions": "^2.0.0"
1660
+ },
1661
+ "engines": {
1662
+ "node": ">=8"
1663
+ }
1664
+ },
1665
+ "node_modules/is-core-module": {
1666
+ "version": "2.16.1",
1667
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
1668
+ "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
1669
+ "dev": true,
1670
+ "license": "MIT",
1671
+ "dependencies": {
1672
+ "hasown": "^2.0.2"
1673
+ },
1674
+ "engines": {
1675
+ "node": ">= 0.4"
1676
+ },
1677
+ "funding": {
1678
+ "url": "https://github.com/sponsors/ljharb"
1679
+ }
1680
+ },
1681
+ "node_modules/is-extglob": {
1682
+ "version": "2.1.1",
1683
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1684
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1685
+ "dev": true,
1686
+ "license": "MIT",
1687
+ "engines": {
1688
+ "node": ">=0.10.0"
1689
+ }
1690
+ },
1691
+ "node_modules/is-glob": {
1692
+ "version": "4.0.3",
1693
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1694
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1695
+ "dev": true,
1696
+ "license": "MIT",
1697
+ "dependencies": {
1698
+ "is-extglob": "^2.1.1"
1699
+ },
1700
+ "engines": {
1701
+ "node": ">=0.10.0"
1702
+ }
1703
+ },
1704
+ "node_modules/is-number": {
1705
+ "version": "7.0.0",
1706
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1707
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1708
+ "dev": true,
1709
+ "license": "MIT",
1710
+ "engines": {
1711
+ "node": ">=0.12.0"
1712
+ }
1713
+ },
1714
+ "node_modules/jiti": {
1715
+ "version": "1.21.7",
1716
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz",
1717
+ "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==",
1718
+ "devOptional": true,
1719
+ "license": "MIT",
1720
+ "bin": {
1721
+ "jiti": "bin/jiti.js"
1722
+ }
1723
+ },
1724
+ "node_modules/js-tokens": {
1725
+ "version": "4.0.0",
1726
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
1727
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
1728
+ "license": "MIT"
1729
+ },
1730
+ "node_modules/jsesc": {
1731
+ "version": "3.1.0",
1732
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
1733
+ "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
1734
+ "license": "MIT",
1735
+ "bin": {
1736
+ "jsesc": "bin/jsesc"
1737
+ },
1738
+ "engines": {
1739
+ "node": ">=6"
1740
+ }
1741
+ },
1742
+ "node_modules/json5": {
1743
+ "version": "2.2.3",
1744
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
1745
+ "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
1746
+ "license": "MIT",
1747
+ "bin": {
1748
+ "json5": "lib/cli.js"
1749
+ },
1750
+ "engines": {
1751
+ "node": ">=6"
1752
+ }
1753
+ },
1754
+ "node_modules/lilconfig": {
1755
+ "version": "3.1.3",
1756
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
1757
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
1758
+ "dev": true,
1759
+ "license": "MIT",
1760
+ "engines": {
1761
+ "node": ">=14"
1762
+ },
1763
+ "funding": {
1764
+ "url": "https://github.com/sponsors/antonk52"
1765
+ }
1766
+ },
1767
+ "node_modules/lines-and-columns": {
1768
+ "version": "1.2.4",
1769
+ "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1770
+ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
1771
+ "dev": true,
1772
+ "license": "MIT"
1773
+ },
1774
+ "node_modules/loose-envify": {
1775
+ "version": "1.4.0",
1776
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
1777
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
1778
+ "license": "MIT",
1779
+ "dependencies": {
1780
+ "js-tokens": "^3.0.0 || ^4.0.0"
1781
+ },
1782
+ "bin": {
1783
+ "loose-envify": "cli.js"
1784
+ }
1785
+ },
1786
+ "node_modules/lru-cache": {
1787
+ "version": "5.1.1",
1788
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
1789
+ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
1790
+ "license": "ISC",
1791
+ "dependencies": {
1792
+ "yallist": "^3.0.2"
1793
+ }
1794
+ },
1795
+ "node_modules/lucide-react": {
1796
+ "version": "0.468.0",
1797
+ "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.468.0.tgz",
1798
+ "integrity": "sha512-6koYRhnM2N0GGZIdXzSeiNwguv1gt/FAjZOiPl76roBi3xKEXa4WmfpxgQwTTL4KipXjefrnf3oV4IsYhi4JFA==",
1799
+ "license": "ISC",
1800
+ "peerDependencies": {
1801
+ "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc"
1802
+ }
1803
+ },
1804
+ "node_modules/merge2": {
1805
+ "version": "1.4.1",
1806
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1807
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1808
+ "dev": true,
1809
+ "license": "MIT",
1810
+ "engines": {
1811
+ "node": ">= 8"
1812
+ }
1813
+ },
1814
+ "node_modules/micromatch": {
1815
+ "version": "4.0.8",
1816
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
1817
+ "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
1818
+ "dev": true,
1819
+ "license": "MIT",
1820
+ "dependencies": {
1821
+ "braces": "^3.0.3",
1822
+ "picomatch": "^2.3.1"
1823
+ },
1824
+ "engines": {
1825
+ "node": ">=8.6"
1826
+ }
1827
+ },
1828
+ "node_modules/ms": {
1829
+ "version": "2.1.3",
1830
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1831
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1832
+ "license": "MIT"
1833
+ },
1834
+ "node_modules/mz": {
1835
+ "version": "2.7.0",
1836
+ "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1837
+ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1838
+ "dev": true,
1839
+ "license": "MIT",
1840
+ "dependencies": {
1841
+ "any-promise": "^1.0.0",
1842
+ "object-assign": "^4.0.1",
1843
+ "thenify-all": "^1.0.0"
1844
+ }
1845
+ },
1846
+ "node_modules/nanoid": {
1847
+ "version": "3.3.12",
1848
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.12.tgz",
1849
+ "integrity": "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==",
1850
+ "funding": [
1851
+ {
1852
+ "type": "github",
1853
+ "url": "https://github.com/sponsors/ai"
1854
+ }
1855
+ ],
1856
+ "license": "MIT",
1857
+ "bin": {
1858
+ "nanoid": "bin/nanoid.cjs"
1859
+ },
1860
+ "engines": {
1861
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1862
+ }
1863
+ },
1864
+ "node_modules/node-releases": {
1865
+ "version": "2.0.38",
1866
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz",
1867
+ "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==",
1868
+ "license": "MIT"
1869
+ },
1870
+ "node_modules/normalize-path": {
1871
+ "version": "3.0.0",
1872
+ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1873
+ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1874
+ "dev": true,
1875
+ "license": "MIT",
1876
+ "engines": {
1877
+ "node": ">=0.10.0"
1878
+ }
1879
+ },
1880
+ "node_modules/object-assign": {
1881
+ "version": "4.1.1",
1882
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1883
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1884
+ "dev": true,
1885
+ "license": "MIT",
1886
+ "engines": {
1887
+ "node": ">=0.10.0"
1888
+ }
1889
+ },
1890
+ "node_modules/object-hash": {
1891
+ "version": "3.0.0",
1892
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
1893
+ "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
1894
+ "dev": true,
1895
+ "license": "MIT",
1896
+ "engines": {
1897
+ "node": ">= 6"
1898
+ }
1899
+ },
1900
+ "node_modules/path-parse": {
1901
+ "version": "1.0.7",
1902
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
1903
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
1904
+ "dev": true,
1905
+ "license": "MIT"
1906
+ },
1907
+ "node_modules/picocolors": {
1908
+ "version": "1.1.1",
1909
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1910
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1911
+ "license": "ISC"
1912
+ },
1913
+ "node_modules/picomatch": {
1914
+ "version": "2.3.2",
1915
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz",
1916
+ "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==",
1917
+ "dev": true,
1918
+ "license": "MIT",
1919
+ "engines": {
1920
+ "node": ">=8.6"
1921
+ },
1922
+ "funding": {
1923
+ "url": "https://github.com/sponsors/jonschlinkert"
1924
+ }
1925
+ },
1926
+ "node_modules/pify": {
1927
+ "version": "2.3.0",
1928
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1929
+ "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
1930
+ "dev": true,
1931
+ "license": "MIT",
1932
+ "engines": {
1933
+ "node": ">=0.10.0"
1934
+ }
1935
+ },
1936
+ "node_modules/pirates": {
1937
+ "version": "4.0.7",
1938
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz",
1939
+ "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==",
1940
+ "dev": true,
1941
+ "license": "MIT",
1942
+ "engines": {
1943
+ "node": ">= 6"
1944
+ }
1945
+ },
1946
+ "node_modules/postcss": {
1947
+ "version": "8.5.13",
1948
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.13.tgz",
1949
+ "integrity": "sha512-qif0+jGGZoLWdHey3UFHHWP0H7Gbmsk8T5VEqyYFbWqPr1XqvLGBbk/sl8V5exGmcYJklJOhOQq1pV9IcsiFag==",
1950
+ "funding": [
1951
+ {
1952
+ "type": "opencollective",
1953
+ "url": "https://opencollective.com/postcss/"
1954
+ },
1955
+ {
1956
+ "type": "tidelift",
1957
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1958
+ },
1959
+ {
1960
+ "type": "github",
1961
+ "url": "https://github.com/sponsors/ai"
1962
+ }
1963
+ ],
1964
+ "license": "MIT",
1965
+ "dependencies": {
1966
+ "nanoid": "^3.3.11",
1967
+ "picocolors": "^1.1.1",
1968
+ "source-map-js": "^1.2.1"
1969
+ },
1970
+ "engines": {
1971
+ "node": "^10 || ^12 || >=14"
1972
+ }
1973
+ },
1974
+ "node_modules/postcss-import": {
1975
+ "version": "15.1.0",
1976
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
1977
+ "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
1978
+ "dev": true,
1979
+ "license": "MIT",
1980
+ "dependencies": {
1981
+ "postcss-value-parser": "^4.0.0",
1982
+ "read-cache": "^1.0.0",
1983
+ "resolve": "^1.1.7"
1984
+ },
1985
+ "engines": {
1986
+ "node": ">=14.0.0"
1987
+ },
1988
+ "peerDependencies": {
1989
+ "postcss": "^8.0.0"
1990
+ }
1991
+ },
1992
+ "node_modules/postcss-js": {
1993
+ "version": "4.1.0",
1994
+ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz",
1995
+ "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==",
1996
+ "dev": true,
1997
+ "funding": [
1998
+ {
1999
+ "type": "opencollective",
2000
+ "url": "https://opencollective.com/postcss/"
2001
+ },
2002
+ {
2003
+ "type": "github",
2004
+ "url": "https://github.com/sponsors/ai"
2005
+ }
2006
+ ],
2007
+ "license": "MIT",
2008
+ "dependencies": {
2009
+ "camelcase-css": "^2.0.1"
2010
+ },
2011
+ "engines": {
2012
+ "node": "^12 || ^14 || >= 16"
2013
+ },
2014
+ "peerDependencies": {
2015
+ "postcss": "^8.4.21"
2016
+ }
2017
+ },
2018
+ "node_modules/postcss-load-config": {
2019
+ "version": "6.0.1",
2020
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz",
2021
+ "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==",
2022
+ "dev": true,
2023
+ "funding": [
2024
+ {
2025
+ "type": "opencollective",
2026
+ "url": "https://opencollective.com/postcss/"
2027
+ },
2028
+ {
2029
+ "type": "github",
2030
+ "url": "https://github.com/sponsors/ai"
2031
+ }
2032
+ ],
2033
+ "license": "MIT",
2034
+ "dependencies": {
2035
+ "lilconfig": "^3.1.1"
2036
+ },
2037
+ "engines": {
2038
+ "node": ">= 18"
2039
+ },
2040
+ "peerDependencies": {
2041
+ "jiti": ">=1.21.0",
2042
+ "postcss": ">=8.0.9",
2043
+ "tsx": "^4.8.1",
2044
+ "yaml": "^2.4.2"
2045
+ },
2046
+ "peerDependenciesMeta": {
2047
+ "jiti": {
2048
+ "optional": true
2049
+ },
2050
+ "postcss": {
2051
+ "optional": true
2052
+ },
2053
+ "tsx": {
2054
+ "optional": true
2055
+ },
2056
+ "yaml": {
2057
+ "optional": true
2058
+ }
2059
+ }
2060
+ },
2061
+ "node_modules/postcss-nested": {
2062
+ "version": "6.2.0",
2063
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
2064
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
2065
+ "dev": true,
2066
+ "funding": [
2067
+ {
2068
+ "type": "opencollective",
2069
+ "url": "https://opencollective.com/postcss/"
2070
+ },
2071
+ {
2072
+ "type": "github",
2073
+ "url": "https://github.com/sponsors/ai"
2074
+ }
2075
+ ],
2076
+ "license": "MIT",
2077
+ "dependencies": {
2078
+ "postcss-selector-parser": "^6.1.1"
2079
+ },
2080
+ "engines": {
2081
+ "node": ">=12.0"
2082
+ },
2083
+ "peerDependencies": {
2084
+ "postcss": "^8.2.14"
2085
+ }
2086
+ },
2087
+ "node_modules/postcss-selector-parser": {
2088
+ "version": "6.1.2",
2089
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
2090
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
2091
+ "dev": true,
2092
+ "license": "MIT",
2093
+ "dependencies": {
2094
+ "cssesc": "^3.0.0",
2095
+ "util-deprecate": "^1.0.2"
2096
+ },
2097
+ "engines": {
2098
+ "node": ">=4"
2099
+ }
2100
+ },
2101
+ "node_modules/postcss-value-parser": {
2102
+ "version": "4.2.0",
2103
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2104
+ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2105
+ "dev": true,
2106
+ "license": "MIT"
2107
+ },
2108
+ "node_modules/queue-microtask": {
2109
+ "version": "1.2.3",
2110
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2111
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2112
+ "dev": true,
2113
+ "funding": [
2114
+ {
2115
+ "type": "github",
2116
+ "url": "https://github.com/sponsors/feross"
2117
+ },
2118
+ {
2119
+ "type": "patreon",
2120
+ "url": "https://www.patreon.com/feross"
2121
+ },
2122
+ {
2123
+ "type": "consulting",
2124
+ "url": "https://feross.org/support"
2125
+ }
2126
+ ],
2127
+ "license": "MIT"
2128
+ },
2129
+ "node_modules/react": {
2130
+ "version": "18.3.1",
2131
+ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
2132
+ "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
2133
+ "license": "MIT",
2134
+ "dependencies": {
2135
+ "loose-envify": "^1.1.0"
2136
+ },
2137
+ "engines": {
2138
+ "node": ">=0.10.0"
2139
+ }
2140
+ },
2141
+ "node_modules/react-dom": {
2142
+ "version": "18.3.1",
2143
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
2144
+ "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
2145
+ "license": "MIT",
2146
+ "dependencies": {
2147
+ "loose-envify": "^1.1.0",
2148
+ "scheduler": "^0.23.2"
2149
+ },
2150
+ "peerDependencies": {
2151
+ "react": "^18.3.1"
2152
+ }
2153
+ },
2154
+ "node_modules/react-refresh": {
2155
+ "version": "0.17.0",
2156
+ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz",
2157
+ "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==",
2158
+ "license": "MIT",
2159
+ "engines": {
2160
+ "node": ">=0.10.0"
2161
+ }
2162
+ },
2163
+ "node_modules/read-cache": {
2164
+ "version": "1.0.0",
2165
+ "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2166
+ "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2167
+ "dev": true,
2168
+ "license": "MIT",
2169
+ "dependencies": {
2170
+ "pify": "^2.3.0"
2171
+ }
2172
+ },
2173
+ "node_modules/readdirp": {
2174
+ "version": "3.6.0",
2175
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2176
+ "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2177
+ "dev": true,
2178
+ "license": "MIT",
2179
+ "dependencies": {
2180
+ "picomatch": "^2.2.1"
2181
+ },
2182
+ "engines": {
2183
+ "node": ">=8.10.0"
2184
+ }
2185
+ },
2186
+ "node_modules/resolve": {
2187
+ "version": "1.22.12",
2188
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
2189
+ "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
2190
+ "dev": true,
2191
+ "license": "MIT",
2192
+ "dependencies": {
2193
+ "es-errors": "^1.3.0",
2194
+ "is-core-module": "^2.16.1",
2195
+ "path-parse": "^1.0.7",
2196
+ "supports-preserve-symlinks-flag": "^1.0.0"
2197
+ },
2198
+ "bin": {
2199
+ "resolve": "bin/resolve"
2200
+ },
2201
+ "engines": {
2202
+ "node": ">= 0.4"
2203
+ },
2204
+ "funding": {
2205
+ "url": "https://github.com/sponsors/ljharb"
2206
+ }
2207
+ },
2208
+ "node_modules/reusify": {
2209
+ "version": "1.1.0",
2210
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
2211
+ "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
2212
+ "dev": true,
2213
+ "license": "MIT",
2214
+ "engines": {
2215
+ "iojs": ">=1.0.0",
2216
+ "node": ">=0.10.0"
2217
+ }
2218
+ },
2219
+ "node_modules/rollup": {
2220
+ "version": "4.60.2",
2221
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz",
2222
+ "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==",
2223
+ "license": "MIT",
2224
+ "dependencies": {
2225
+ "@types/estree": "1.0.8"
2226
+ },
2227
+ "bin": {
2228
+ "rollup": "dist/bin/rollup"
2229
+ },
2230
+ "engines": {
2231
+ "node": ">=18.0.0",
2232
+ "npm": ">=8.0.0"
2233
+ },
2234
+ "optionalDependencies": {
2235
+ "@rollup/rollup-android-arm-eabi": "4.60.2",
2236
+ "@rollup/rollup-android-arm64": "4.60.2",
2237
+ "@rollup/rollup-darwin-arm64": "4.60.2",
2238
+ "@rollup/rollup-darwin-x64": "4.60.2",
2239
+ "@rollup/rollup-freebsd-arm64": "4.60.2",
2240
+ "@rollup/rollup-freebsd-x64": "4.60.2",
2241
+ "@rollup/rollup-linux-arm-gnueabihf": "4.60.2",
2242
+ "@rollup/rollup-linux-arm-musleabihf": "4.60.2",
2243
+ "@rollup/rollup-linux-arm64-gnu": "4.60.2",
2244
+ "@rollup/rollup-linux-arm64-musl": "4.60.2",
2245
+ "@rollup/rollup-linux-loong64-gnu": "4.60.2",
2246
+ "@rollup/rollup-linux-loong64-musl": "4.60.2",
2247
+ "@rollup/rollup-linux-ppc64-gnu": "4.60.2",
2248
+ "@rollup/rollup-linux-ppc64-musl": "4.60.2",
2249
+ "@rollup/rollup-linux-riscv64-gnu": "4.60.2",
2250
+ "@rollup/rollup-linux-riscv64-musl": "4.60.2",
2251
+ "@rollup/rollup-linux-s390x-gnu": "4.60.2",
2252
+ "@rollup/rollup-linux-x64-gnu": "4.60.2",
2253
+ "@rollup/rollup-linux-x64-musl": "4.60.2",
2254
+ "@rollup/rollup-openbsd-x64": "4.60.2",
2255
+ "@rollup/rollup-openharmony-arm64": "4.60.2",
2256
+ "@rollup/rollup-win32-arm64-msvc": "4.60.2",
2257
+ "@rollup/rollup-win32-ia32-msvc": "4.60.2",
2258
+ "@rollup/rollup-win32-x64-gnu": "4.60.2",
2259
+ "@rollup/rollup-win32-x64-msvc": "4.60.2",
2260
+ "fsevents": "~2.3.2"
2261
+ }
2262
+ },
2263
+ "node_modules/run-parallel": {
2264
+ "version": "1.2.0",
2265
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2266
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2267
+ "dev": true,
2268
+ "funding": [
2269
+ {
2270
+ "type": "github",
2271
+ "url": "https://github.com/sponsors/feross"
2272
+ },
2273
+ {
2274
+ "type": "patreon",
2275
+ "url": "https://www.patreon.com/feross"
2276
+ },
2277
+ {
2278
+ "type": "consulting",
2279
+ "url": "https://feross.org/support"
2280
+ }
2281
+ ],
2282
+ "license": "MIT",
2283
+ "dependencies": {
2284
+ "queue-microtask": "^1.2.2"
2285
+ }
2286
+ },
2287
+ "node_modules/scheduler": {
2288
+ "version": "0.23.2",
2289
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
2290
+ "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
2291
+ "license": "MIT",
2292
+ "dependencies": {
2293
+ "loose-envify": "^1.1.0"
2294
+ }
2295
+ },
2296
+ "node_modules/semver": {
2297
+ "version": "6.3.1",
2298
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
2299
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
2300
+ "license": "ISC",
2301
+ "bin": {
2302
+ "semver": "bin/semver.js"
2303
+ }
2304
+ },
2305
+ "node_modules/source-map-js": {
2306
+ "version": "1.2.1",
2307
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2308
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2309
+ "license": "BSD-3-Clause",
2310
+ "engines": {
2311
+ "node": ">=0.10.0"
2312
+ }
2313
+ },
2314
+ "node_modules/sucrase": {
2315
+ "version": "3.35.1",
2316
+ "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz",
2317
+ "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==",
2318
+ "dev": true,
2319
+ "license": "MIT",
2320
+ "dependencies": {
2321
+ "@jridgewell/gen-mapping": "^0.3.2",
2322
+ "commander": "^4.0.0",
2323
+ "lines-and-columns": "^1.1.6",
2324
+ "mz": "^2.7.0",
2325
+ "pirates": "^4.0.1",
2326
+ "tinyglobby": "^0.2.11",
2327
+ "ts-interface-checker": "^0.1.9"
2328
+ },
2329
+ "bin": {
2330
+ "sucrase": "bin/sucrase",
2331
+ "sucrase-node": "bin/sucrase-node"
2332
+ },
2333
+ "engines": {
2334
+ "node": ">=16 || 14 >=14.17"
2335
+ }
2336
+ },
2337
+ "node_modules/supports-preserve-symlinks-flag": {
2338
+ "version": "1.0.0",
2339
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2340
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2341
+ "dev": true,
2342
+ "license": "MIT",
2343
+ "engines": {
2344
+ "node": ">= 0.4"
2345
+ },
2346
+ "funding": {
2347
+ "url": "https://github.com/sponsors/ljharb"
2348
+ }
2349
+ },
2350
+ "node_modules/tailwindcss": {
2351
+ "version": "3.4.19",
2352
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz",
2353
+ "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==",
2354
+ "dev": true,
2355
+ "license": "MIT",
2356
+ "dependencies": {
2357
+ "@alloc/quick-lru": "^5.2.0",
2358
+ "arg": "^5.0.2",
2359
+ "chokidar": "^3.6.0",
2360
+ "didyoumean": "^1.2.2",
2361
+ "dlv": "^1.1.3",
2362
+ "fast-glob": "^3.3.2",
2363
+ "glob-parent": "^6.0.2",
2364
+ "is-glob": "^4.0.3",
2365
+ "jiti": "^1.21.7",
2366
+ "lilconfig": "^3.1.3",
2367
+ "micromatch": "^4.0.8",
2368
+ "normalize-path": "^3.0.0",
2369
+ "object-hash": "^3.0.0",
2370
+ "picocolors": "^1.1.1",
2371
+ "postcss": "^8.4.47",
2372
+ "postcss-import": "^15.1.0",
2373
+ "postcss-js": "^4.0.1",
2374
+ "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0",
2375
+ "postcss-nested": "^6.2.0",
2376
+ "postcss-selector-parser": "^6.1.2",
2377
+ "resolve": "^1.22.8",
2378
+ "sucrase": "^3.35.0"
2379
+ },
2380
+ "bin": {
2381
+ "tailwind": "lib/cli.js",
2382
+ "tailwindcss": "lib/cli.js"
2383
+ },
2384
+ "engines": {
2385
+ "node": ">=14.0.0"
2386
+ }
2387
+ },
2388
+ "node_modules/thenify": {
2389
+ "version": "3.3.1",
2390
+ "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
2391
+ "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
2392
+ "dev": true,
2393
+ "license": "MIT",
2394
+ "dependencies": {
2395
+ "any-promise": "^1.0.0"
2396
+ }
2397
+ },
2398
+ "node_modules/thenify-all": {
2399
+ "version": "1.6.0",
2400
+ "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2401
+ "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
2402
+ "dev": true,
2403
+ "license": "MIT",
2404
+ "dependencies": {
2405
+ "thenify": ">= 3.1.0 < 4"
2406
+ },
2407
+ "engines": {
2408
+ "node": ">=0.8"
2409
+ }
2410
+ },
2411
+ "node_modules/tinyglobby": {
2412
+ "version": "0.2.16",
2413
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz",
2414
+ "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==",
2415
+ "license": "MIT",
2416
+ "dependencies": {
2417
+ "fdir": "^6.5.0",
2418
+ "picomatch": "^4.0.4"
2419
+ },
2420
+ "engines": {
2421
+ "node": ">=12.0.0"
2422
+ },
2423
+ "funding": {
2424
+ "url": "https://github.com/sponsors/SuperchupuDev"
2425
+ }
2426
+ },
2427
+ "node_modules/tinyglobby/node_modules/fdir": {
2428
+ "version": "6.5.0",
2429
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
2430
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
2431
+ "license": "MIT",
2432
+ "engines": {
2433
+ "node": ">=12.0.0"
2434
+ },
2435
+ "peerDependencies": {
2436
+ "picomatch": "^3 || ^4"
2437
+ },
2438
+ "peerDependenciesMeta": {
2439
+ "picomatch": {
2440
+ "optional": true
2441
+ }
2442
+ }
2443
+ },
2444
+ "node_modules/tinyglobby/node_modules/picomatch": {
2445
+ "version": "4.0.4",
2446
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
2447
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
2448
+ "license": "MIT",
2449
+ "engines": {
2450
+ "node": ">=12"
2451
+ },
2452
+ "funding": {
2453
+ "url": "https://github.com/sponsors/jonschlinkert"
2454
+ }
2455
+ },
2456
+ "node_modules/to-regex-range": {
2457
+ "version": "5.0.1",
2458
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2459
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2460
+ "dev": true,
2461
+ "license": "MIT",
2462
+ "dependencies": {
2463
+ "is-number": "^7.0.0"
2464
+ },
2465
+ "engines": {
2466
+ "node": ">=8.0"
2467
+ }
2468
+ },
2469
+ "node_modules/ts-interface-checker": {
2470
+ "version": "0.1.13",
2471
+ "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
2472
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
2473
+ "dev": true,
2474
+ "license": "Apache-2.0"
2475
+ },
2476
+ "node_modules/update-browserslist-db": {
2477
+ "version": "1.2.3",
2478
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",
2479
+ "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==",
2480
+ "funding": [
2481
+ {
2482
+ "type": "opencollective",
2483
+ "url": "https://opencollective.com/browserslist"
2484
+ },
2485
+ {
2486
+ "type": "tidelift",
2487
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
2488
+ },
2489
+ {
2490
+ "type": "github",
2491
+ "url": "https://github.com/sponsors/ai"
2492
+ }
2493
+ ],
2494
+ "license": "MIT",
2495
+ "dependencies": {
2496
+ "escalade": "^3.2.0",
2497
+ "picocolors": "^1.1.1"
2498
+ },
2499
+ "bin": {
2500
+ "update-browserslist-db": "cli.js"
2501
+ },
2502
+ "peerDependencies": {
2503
+ "browserslist": ">= 4.21.0"
2504
+ }
2505
+ },
2506
+ "node_modules/util-deprecate": {
2507
+ "version": "1.0.2",
2508
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2509
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
2510
+ "dev": true,
2511
+ "license": "MIT"
2512
+ },
2513
+ "node_modules/vite": {
2514
+ "version": "6.4.2",
2515
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz",
2516
+ "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==",
2517
+ "license": "MIT",
2518
+ "dependencies": {
2519
+ "esbuild": "^0.25.0",
2520
+ "fdir": "^6.4.4",
2521
+ "picomatch": "^4.0.2",
2522
+ "postcss": "^8.5.3",
2523
+ "rollup": "^4.34.9",
2524
+ "tinyglobby": "^0.2.13"
2525
+ },
2526
+ "bin": {
2527
+ "vite": "bin/vite.js"
2528
+ },
2529
+ "engines": {
2530
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
2531
+ },
2532
+ "funding": {
2533
+ "url": "https://github.com/vitejs/vite?sponsor=1"
2534
+ },
2535
+ "optionalDependencies": {
2536
+ "fsevents": "~2.3.3"
2537
+ },
2538
+ "peerDependencies": {
2539
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
2540
+ "jiti": ">=1.21.0",
2541
+ "less": "*",
2542
+ "lightningcss": "^1.21.0",
2543
+ "sass": "*",
2544
+ "sass-embedded": "*",
2545
+ "stylus": "*",
2546
+ "sugarss": "*",
2547
+ "terser": "^5.16.0",
2548
+ "tsx": "^4.8.1",
2549
+ "yaml": "^2.4.2"
2550
+ },
2551
+ "peerDependenciesMeta": {
2552
+ "@types/node": {
2553
+ "optional": true
2554
+ },
2555
+ "jiti": {
2556
+ "optional": true
2557
+ },
2558
+ "less": {
2559
+ "optional": true
2560
+ },
2561
+ "lightningcss": {
2562
+ "optional": true
2563
+ },
2564
+ "sass": {
2565
+ "optional": true
2566
+ },
2567
+ "sass-embedded": {
2568
+ "optional": true
2569
+ },
2570
+ "stylus": {
2571
+ "optional": true
2572
+ },
2573
+ "sugarss": {
2574
+ "optional": true
2575
+ },
2576
+ "terser": {
2577
+ "optional": true
2578
+ },
2579
+ "tsx": {
2580
+ "optional": true
2581
+ },
2582
+ "yaml": {
2583
+ "optional": true
2584
+ }
2585
+ }
2586
+ },
2587
+ "node_modules/vite/node_modules/fdir": {
2588
+ "version": "6.5.0",
2589
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
2590
+ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
2591
+ "license": "MIT",
2592
+ "engines": {
2593
+ "node": ">=12.0.0"
2594
+ },
2595
+ "peerDependencies": {
2596
+ "picomatch": "^3 || ^4"
2597
+ },
2598
+ "peerDependenciesMeta": {
2599
+ "picomatch": {
2600
+ "optional": true
2601
+ }
2602
+ }
2603
+ },
2604
+ "node_modules/vite/node_modules/picomatch": {
2605
+ "version": "4.0.4",
2606
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz",
2607
+ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==",
2608
+ "license": "MIT",
2609
+ "engines": {
2610
+ "node": ">=12"
2611
+ },
2612
+ "funding": {
2613
+ "url": "https://github.com/sponsors/jonschlinkert"
2614
+ }
2615
+ },
2616
+ "node_modules/yallist": {
2617
+ "version": "3.1.1",
2618
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
2619
+ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
2620
+ "license": "ISC"
2621
+ }
2622
+ }
2623
+ }
frontend/package.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "elevenclip-ai-frontend",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite --host 0.0.0.0",
8
+ "build": "vite build",
9
+ "preview": "vite preview --host 0.0.0.0"
10
+ },
11
+ "dependencies": {
12
+ "@vitejs/plugin-react": "^4.3.4",
13
+ "lucide-react": "^0.468.0",
14
+ "react": "^18.3.1",
15
+ "react-dom": "^18.3.1",
16
+ "vite": "^6.0.1"
17
+ },
18
+ "devDependencies": {
19
+ "autoprefixer": "^10.4.20",
20
+ "postcss": "^8.4.49",
21
+ "tailwindcss": "^3.4.16"
22
+ }
23
+ }
frontend/postcss.config.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {}
5
+ }
6
+ };
frontend/src/App.jsx ADDED
@@ -0,0 +1,435 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import {
2
+ Check,
3
+ Download,
4
+ Film,
5
+ Link as LinkIcon,
6
+ Loader2,
7
+ RefreshCcw,
8
+ Scissors,
9
+ Trash2,
10
+ Upload,
11
+ } from "lucide-react";
12
+ import { useEffect, useMemo, useState } from "react";
13
+
14
+ const API_BASE = import.meta.env.VITE_API_BASE_URL || "http://localhost:8000";
15
+
16
+ const defaultProfile = {
17
+ niche: "education",
18
+ clip_style: "informative",
19
+ clip_length_seconds: 60,
20
+ primary_language: "Thai",
21
+ target_platform: "tiktok",
22
+ };
23
+
24
+ function App() {
25
+ const [profile, setProfile] = useState(defaultProfile);
26
+ const [sourceMode, setSourceMode] = useState("youtube");
27
+ const [youtubeUrl, setYoutubeUrl] = useState("");
28
+ const [file, setFile] = useState(null);
29
+ const [job, setJob] = useState(null);
30
+ const [error, setError] = useState("");
31
+ const [isSubmitting, setIsSubmitting] = useState(false);
32
+
33
+ const activeClips = useMemo(
34
+ () => (job?.clips || []).filter((clip) => !clip.deleted),
35
+ [job?.clips]
36
+ );
37
+
38
+ useEffect(() => {
39
+ if (!job || !["queued", "running"].includes(job.status)) return;
40
+ const timer = window.setInterval(async () => {
41
+ const next = await fetchJson(`/api/jobs/${job.id}`);
42
+ setJob(next);
43
+ }, 1800);
44
+ return () => window.clearInterval(timer);
45
+ }, [job]);
46
+
47
+ async function submitJob(event) {
48
+ event.preventDefault();
49
+ setError("");
50
+ setIsSubmitting(true);
51
+ try {
52
+ if (sourceMode === "youtube") {
53
+ const next = await fetchJson("/api/jobs/youtube", {
54
+ method: "POST",
55
+ headers: { "Content-Type": "application/json" },
56
+ body: JSON.stringify({ youtube_url: youtubeUrl, profile }),
57
+ });
58
+ setJob(next);
59
+ } else {
60
+ const data = new FormData();
61
+ data.append("profile_json", JSON.stringify(profile));
62
+ data.append("file", file);
63
+ const next = await fetchJson("/api/jobs/upload", { method: "POST", body: data });
64
+ setJob(next);
65
+ }
66
+ } catch (exc) {
67
+ setError(exc.message);
68
+ } finally {
69
+ setIsSubmitting(false);
70
+ }
71
+ }
72
+
73
+ async function patchClip(clipId, patch) {
74
+ const nextClip = await fetchJson(`/api/jobs/${job.id}/clips/${clipId}`, {
75
+ method: "PATCH",
76
+ headers: { "Content-Type": "application/json" },
77
+ body: JSON.stringify(patch),
78
+ });
79
+ setJob((current) => ({
80
+ ...current,
81
+ clips: current.clips.map((clip) => (clip.id === clipId ? nextClip : clip)),
82
+ }));
83
+ }
84
+
85
+ async function regenerateClip(clip) {
86
+ const nextClip = await fetchJson(`/api/jobs/${job.id}/clips/${clip.id}/regenerate`, {
87
+ method: "POST",
88
+ headers: { "Content-Type": "application/json" },
89
+ body: JSON.stringify({
90
+ clip_style: profile.clip_style,
91
+ clip_length_seconds: Number(profile.clip_length_seconds),
92
+ subtitle_text: clip.subtitle_text,
93
+ }),
94
+ });
95
+ setJob((current) => ({
96
+ ...current,
97
+ clips: current.clips.map((item) => (item.id === clip.id ? nextClip : item)),
98
+ }));
99
+ }
100
+
101
+ return (
102
+ <main className="min-h-screen bg-stone-50 text-slate-950">
103
+ <header className="border-b border-slate-200 bg-white">
104
+ <div className="mx-auto flex max-w-7xl items-center justify-between px-5 py-4">
105
+ <div className="flex items-center gap-3">
106
+ <div className="grid h-10 w-10 place-items-center rounded-md bg-slate-950 text-white">
107
+ <Scissors size={20} />
108
+ </div>
109
+ <div>
110
+ <h1 className="text-xl font-semibold tracking-normal">ElevenClip.AI</h1>
111
+ <p className="text-sm text-slate-500">AMD ROCm multimodal clipping workspace</p>
112
+ </div>
113
+ </div>
114
+ <StatusPill job={job} />
115
+ </div>
116
+ </header>
117
+
118
+ <div className="mx-auto grid max-w-7xl gap-5 px-5 py-5 lg:grid-cols-[360px_1fr]">
119
+ <section className="panel">
120
+ <form className="space-y-5" onSubmit={submitJob}>
121
+ <div>
122
+ <h2 className="section-title">Channel Profile</h2>
123
+ <div className="mt-3 grid gap-3">
124
+ <TextField label="Niche" value={profile.niche} onChange={setProfileValue("niche")} />
125
+ <SelectField
126
+ label="Clip style"
127
+ value={profile.clip_style}
128
+ onChange={setProfileValue("clip_style")}
129
+ options={["informative", "funny", "dramatic", "educational", "commentary"]}
130
+ />
131
+ <SelectField
132
+ label="Clip length"
133
+ value={profile.clip_length_seconds}
134
+ onChange={(value) =>
135
+ setProfile((current) => ({
136
+ ...current,
137
+ clip_length_seconds: Number(value),
138
+ }))
139
+ }
140
+ options={[30, 60, 90]}
141
+ />
142
+ <TextField
143
+ label="Primary language"
144
+ value={profile.primary_language}
145
+ onChange={setProfileValue("primary_language")}
146
+ />
147
+ <SelectField
148
+ label="Platform"
149
+ value={profile.target_platform}
150
+ onChange={setProfileValue("target_platform")}
151
+ options={["tiktok", "youtube_shorts", "instagram_reels"]}
152
+ />
153
+ </div>
154
+ </div>
155
+
156
+ <div>
157
+ <h2 className="section-title">Video Input</h2>
158
+ <div className="segmented mt-3">
159
+ <button
160
+ type="button"
161
+ className={sourceMode === "youtube" ? "active" : ""}
162
+ onClick={() => setSourceMode("youtube")}
163
+ >
164
+ <LinkIcon size={16} />
165
+ YouTube
166
+ </button>
167
+ <button
168
+ type="button"
169
+ className={sourceMode === "upload" ? "active" : ""}
170
+ onClick={() => setSourceMode("upload")}
171
+ >
172
+ <Upload size={16} />
173
+ Upload
174
+ </button>
175
+ </div>
176
+ <div className="mt-3">
177
+ {sourceMode === "youtube" ? (
178
+ <TextField
179
+ label="YouTube URL"
180
+ value={youtubeUrl}
181
+ onChange={setYoutubeUrl}
182
+ placeholder="https://www.youtube.com/watch?v=..."
183
+ />
184
+ ) : (
185
+ <label className="block">
186
+ <span className="field-label">Video file</span>
187
+ <input
188
+ className="file-input"
189
+ type="file"
190
+ accept="video/mp4,video/quicktime,video/*"
191
+ onChange={(event) => setFile(event.target.files?.[0] || null)}
192
+ />
193
+ </label>
194
+ )}
195
+ </div>
196
+ </div>
197
+
198
+ {error && <div className="error-box">{error}</div>}
199
+ <button
200
+ className="primary-button"
201
+ disabled={isSubmitting || (sourceMode === "youtube" ? !youtubeUrl : !file)}
202
+ type="submit"
203
+ >
204
+ {isSubmitting ? <Loader2 className="animate-spin" size={18} /> : <Film size={18} />}
205
+ Start Pipeline
206
+ </button>
207
+ </form>
208
+ </section>
209
+
210
+ <section className="space-y-5">
211
+ <ProgressPanel job={job} />
212
+ <TranscriptPanel job={job} />
213
+ <ClipsPanel
214
+ clips={activeClips}
215
+ onPatch={patchClip}
216
+ onDelete={(clip) => patchClip(clip.id, { deleted: true })}
217
+ onApprove={(clip) => patchClip(clip.id, { approved: !clip.approved })}
218
+ onRegenerate={regenerateClip}
219
+ />
220
+ </section>
221
+ </div>
222
+ </main>
223
+ );
224
+
225
+ function setProfileValue(key) {
226
+ return (value) => setProfile((current) => ({ ...current, [key]: value }));
227
+ }
228
+ }
229
+
230
+ function StatusPill({ job }) {
231
+ const status = job?.status || "idle";
232
+ return <span className={`status-pill ${status}`}>{status}</span>;
233
+ }
234
+
235
+ function ProgressPanel({ job }) {
236
+ const progress = Math.round((job?.progress || 0) * 100);
237
+ return (
238
+ <section className="panel">
239
+ <div className="flex items-center justify-between gap-3">
240
+ <div>
241
+ <h2 className="section-title">Pipeline</h2>
242
+ <p className="mt-1 text-sm text-slate-500">{job?.message || "Ready"}</p>
243
+ </div>
244
+ <span className="text-2xl font-semibold tabular-nums">{progress}%</span>
245
+ </div>
246
+ <div className="progress-track mt-4">
247
+ <div className="progress-bar" style={{ width: `${progress}%` }} />
248
+ </div>
249
+ {job?.timings && Object.keys(job.timings).length > 0 && (
250
+ <div className="timing-grid mt-4">
251
+ {Object.entries(job.timings).map(([name, value]) => (
252
+ <div key={name}>
253
+ <span>{name.replaceAll("_", " ")}</span>
254
+ <strong>{value}s</strong>
255
+ </div>
256
+ ))}
257
+ </div>
258
+ )}
259
+ {job?.error && <div className="error-box mt-4">{job.error}</div>}
260
+ </section>
261
+ );
262
+ }
263
+
264
+ function TranscriptPanel({ job }) {
265
+ if (!job?.transcript?.length) return null;
266
+ return (
267
+ <section className="panel">
268
+ <h2 className="section-title">Transcript</h2>
269
+ <div className="transcript-list mt-3">
270
+ {job.transcript.map((segment) => (
271
+ <div key={segment.id} className="transcript-row">
272
+ <span>
273
+ {formatTime(segment.start_seconds)} - {formatTime(segment.end_seconds)}
274
+ </span>
275
+ <p>{segment.text}</p>
276
+ </div>
277
+ ))}
278
+ </div>
279
+ </section>
280
+ );
281
+ }
282
+
283
+ function ClipsPanel({ clips, onPatch, onDelete, onApprove, onRegenerate }) {
284
+ return (
285
+ <section className="panel">
286
+ <div className="flex items-center justify-between gap-3">
287
+ <h2 className="section-title">Clips</h2>
288
+ <span className="text-sm text-slate-500">{clips.length} ready</span>
289
+ </div>
290
+ <div className="mt-4 grid gap-4 xl:grid-cols-2">
291
+ {clips.map((clip) => (
292
+ <ClipEditor
293
+ key={clip.id}
294
+ clip={clip}
295
+ onPatch={onPatch}
296
+ onDelete={onDelete}
297
+ onApprove={onApprove}
298
+ onRegenerate={onRegenerate}
299
+ />
300
+ ))}
301
+ </div>
302
+ </section>
303
+ );
304
+ }
305
+
306
+ function ClipEditor({ clip, onPatch, onDelete, onApprove, onRegenerate }) {
307
+ const duration = Math.max(1, clip.end_seconds - clip.start_seconds);
308
+ return (
309
+ <article className="clip-card">
310
+ <div className="clip-video">
311
+ {clip.video_url ? (
312
+ <video controls src={`${API_BASE}${clip.video_url}`} />
313
+ ) : (
314
+ <Film size={34} />
315
+ )}
316
+ </div>
317
+ <div className="clip-body">
318
+ <div className="flex items-start justify-between gap-3">
319
+ <div>
320
+ <h3>{clip.title}</h3>
321
+ <p>{clip.reason}</p>
322
+ </div>
323
+ <span className="score">{Math.round(clip.score)}</span>
324
+ </div>
325
+
326
+ <div className="timeline">
327
+ <div>
328
+ <label>Start</label>
329
+ <input
330
+ type="number"
331
+ min="0"
332
+ step="0.5"
333
+ value={Number(clip.start_seconds).toFixed(1)}
334
+ onChange={(event) =>
335
+ onPatch(clip.id, { start_seconds: Number(event.target.value) })
336
+ }
337
+ />
338
+ </div>
339
+ <div>
340
+ <label>End</label>
341
+ <input
342
+ type="number"
343
+ min="1"
344
+ step="0.5"
345
+ value={Number(clip.end_seconds).toFixed(1)}
346
+ onChange={(event) => onPatch(clip.id, { end_seconds: Number(event.target.value) })}
347
+ />
348
+ </div>
349
+ <strong>{duration.toFixed(1)}s</strong>
350
+ </div>
351
+
352
+ <textarea
353
+ value={clip.subtitle_text}
354
+ onChange={(event) => onPatch(clip.id, { subtitle_text: event.target.value })}
355
+ rows={3}
356
+ />
357
+
358
+ <div className="clip-actions">
359
+ <button type="button" title="Approve" onClick={() => onApprove(clip)}>
360
+ <Check size={17} />
361
+ {clip.approved ? "Approved" : "Approve"}
362
+ </button>
363
+ <button type="button" title="Regenerate" onClick={() => onRegenerate(clip)}>
364
+ <RefreshCcw size={17} />
365
+ Regenerate
366
+ </button>
367
+ <button type="button" title="Delete" onClick={() => onDelete(clip)}>
368
+ <Trash2 size={17} />
369
+ </button>
370
+ {clip.download_url && (
371
+ <a
372
+ className="download-button"
373
+ href={`${API_BASE}${clip.download_url}`}
374
+ title="Download"
375
+ >
376
+ <Download size={17} />
377
+ </a>
378
+ )}
379
+ </div>
380
+ </div>
381
+ </article>
382
+ );
383
+ }
384
+
385
+ function TextField({ label, value, onChange, placeholder }) {
386
+ return (
387
+ <label className="block">
388
+ <span className="field-label">{label}</span>
389
+ <input
390
+ className="text-input"
391
+ value={value}
392
+ placeholder={placeholder}
393
+ onChange={(event) => onChange(event.target.value)}
394
+ />
395
+ </label>
396
+ );
397
+ }
398
+
399
+ function SelectField({ label, value, onChange, options }) {
400
+ return (
401
+ <label className="block">
402
+ <span className="field-label">{label}</span>
403
+ <select className="text-input" value={value} onChange={(event) => onChange(event.target.value)}>
404
+ {options.map((option) => (
405
+ <option key={option} value={option}>
406
+ {String(option).replaceAll("_", " ")}
407
+ </option>
408
+ ))}
409
+ </select>
410
+ </label>
411
+ );
412
+ }
413
+
414
+ async function fetchJson(path, options) {
415
+ const response = await fetch(`${API_BASE}${path}`, options);
416
+ if (!response.ok) {
417
+ let detail = response.statusText;
418
+ try {
419
+ const payload = await response.json();
420
+ detail = payload.detail || detail;
421
+ } catch {
422
+ detail = response.statusText;
423
+ }
424
+ throw new Error(detail);
425
+ }
426
+ return response.json();
427
+ }
428
+
429
+ function formatTime(value) {
430
+ const minutes = Math.floor(value / 60);
431
+ const seconds = Math.floor(value % 60);
432
+ return `${minutes}:${String(seconds).padStart(2, "0")}`;
433
+ }
434
+
435
+ export default App;
frontend/src/main.jsx ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ import React from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import App from "./App.jsx";
4
+ import "./styles.css";
5
+
6
+ createRoot(document.getElementById("root")).render(
7
+ <React.StrictMode>
8
+ <App />
9
+ </React.StrictMode>
10
+ );
frontend/src/styles.css ADDED
@@ -0,0 +1,332 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ :root {
6
+ color-scheme: light;
7
+ font-family: Inter, ui-sans-serif, system-ui, sans-serif;
8
+ }
9
+
10
+ body {
11
+ margin: 0;
12
+ }
13
+
14
+ button,
15
+ input,
16
+ select,
17
+ textarea {
18
+ font: inherit;
19
+ }
20
+
21
+ .panel {
22
+ border: 1px solid rgb(226 232 240);
23
+ border-radius: 8px;
24
+ background: white;
25
+ padding: 20px;
26
+ box-shadow: 0 1px 2px rgb(15 23 42 / 0.04);
27
+ }
28
+
29
+ .section-title {
30
+ font-size: 0.82rem;
31
+ font-weight: 700;
32
+ letter-spacing: 0;
33
+ color: rgb(15 23 42);
34
+ text-transform: uppercase;
35
+ }
36
+
37
+ .field-label {
38
+ display: block;
39
+ margin-bottom: 6px;
40
+ font-size: 0.82rem;
41
+ font-weight: 650;
42
+ color: rgb(71 85 105);
43
+ }
44
+
45
+ .text-input,
46
+ .file-input {
47
+ width: 100%;
48
+ min-height: 42px;
49
+ border: 1px solid rgb(203 213 225);
50
+ border-radius: 6px;
51
+ background: white;
52
+ padding: 9px 11px;
53
+ color: rgb(15 23 42);
54
+ outline: none;
55
+ }
56
+
57
+ .text-input:focus,
58
+ .file-input:focus,
59
+ textarea:focus {
60
+ border-color: rgb(20 184 166);
61
+ box-shadow: 0 0 0 3px rgb(20 184 166 / 0.16);
62
+ }
63
+
64
+ .segmented {
65
+ display: grid;
66
+ grid-template-columns: 1fr 1fr;
67
+ gap: 4px;
68
+ border-radius: 7px;
69
+ background: rgb(241 245 249);
70
+ padding: 4px;
71
+ }
72
+
73
+ .segmented button {
74
+ display: flex;
75
+ min-height: 38px;
76
+ align-items: center;
77
+ justify-content: center;
78
+ gap: 8px;
79
+ border: 0;
80
+ border-radius: 5px;
81
+ color: rgb(71 85 105);
82
+ }
83
+
84
+ .segmented button.active {
85
+ background: white;
86
+ color: rgb(15 23 42);
87
+ box-shadow: 0 1px 2px rgb(15 23 42 / 0.08);
88
+ }
89
+
90
+ .primary-button,
91
+ .clip-actions button,
92
+ .download-button {
93
+ display: inline-flex;
94
+ min-height: 40px;
95
+ align-items: center;
96
+ justify-content: center;
97
+ gap: 8px;
98
+ border-radius: 6px;
99
+ border: 1px solid rgb(203 213 225);
100
+ padding: 0 12px;
101
+ color: rgb(15 23 42);
102
+ text-decoration: none;
103
+ }
104
+
105
+ .primary-button {
106
+ width: 100%;
107
+ border-color: rgb(15 23 42);
108
+ background: rgb(15 23 42);
109
+ color: white;
110
+ font-weight: 700;
111
+ }
112
+
113
+ .primary-button:disabled {
114
+ cursor: not-allowed;
115
+ opacity: 0.55;
116
+ }
117
+
118
+ .status-pill {
119
+ border-radius: 999px;
120
+ border: 1px solid rgb(203 213 225);
121
+ padding: 6px 10px;
122
+ font-size: 0.78rem;
123
+ font-weight: 800;
124
+ text-transform: uppercase;
125
+ }
126
+
127
+ .status-pill.running,
128
+ .status-pill.queued {
129
+ border-color: rgb(14 165 233);
130
+ background: rgb(240 249 255);
131
+ color: rgb(3 105 161);
132
+ }
133
+
134
+ .status-pill.completed {
135
+ border-color: rgb(20 184 166);
136
+ background: rgb(240 253 250);
137
+ color: rgb(15 118 110);
138
+ }
139
+
140
+ .status-pill.failed {
141
+ border-color: rgb(244 63 94);
142
+ background: rgb(255 241 242);
143
+ color: rgb(190 18 60);
144
+ }
145
+
146
+ .progress-track {
147
+ height: 10px;
148
+ overflow: hidden;
149
+ border-radius: 999px;
150
+ background: rgb(226 232 240);
151
+ }
152
+
153
+ .progress-bar {
154
+ height: 100%;
155
+ border-radius: 999px;
156
+ background: linear-gradient(90deg, rgb(20 184 166), rgb(245 158 11));
157
+ transition: width 220ms ease;
158
+ }
159
+
160
+ .timing-grid {
161
+ display: grid;
162
+ grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
163
+ gap: 10px;
164
+ }
165
+
166
+ .timing-grid div {
167
+ border: 1px solid rgb(226 232 240);
168
+ border-radius: 6px;
169
+ padding: 10px;
170
+ }
171
+
172
+ .timing-grid span {
173
+ display: block;
174
+ color: rgb(100 116 139);
175
+ font-size: 0.78rem;
176
+ }
177
+
178
+ .timing-grid strong {
179
+ display: block;
180
+ margin-top: 4px;
181
+ font-size: 1.05rem;
182
+ }
183
+
184
+ .transcript-list {
185
+ display: grid;
186
+ max-height: 330px;
187
+ overflow: auto;
188
+ gap: 8px;
189
+ }
190
+
191
+ .transcript-row {
192
+ display: grid;
193
+ grid-template-columns: 108px 1fr;
194
+ gap: 12px;
195
+ border-bottom: 1px solid rgb(241 245 249);
196
+ padding-bottom: 8px;
197
+ }
198
+
199
+ .transcript-row span {
200
+ color: rgb(100 116 139);
201
+ font-size: 0.8rem;
202
+ font-variant-numeric: tabular-nums;
203
+ }
204
+
205
+ .transcript-row p {
206
+ margin: 0;
207
+ color: rgb(30 41 59);
208
+ font-size: 0.92rem;
209
+ }
210
+
211
+ .clip-card {
212
+ overflow: hidden;
213
+ border: 1px solid rgb(226 232 240);
214
+ border-radius: 8px;
215
+ background: rgb(248 250 252);
216
+ }
217
+
218
+ .clip-video {
219
+ display: grid;
220
+ aspect-ratio: 9 / 16;
221
+ max-height: 360px;
222
+ place-items: center;
223
+ background: rgb(15 23 42);
224
+ color: white;
225
+ }
226
+
227
+ .clip-video video {
228
+ height: 100%;
229
+ width: 100%;
230
+ object-fit: contain;
231
+ }
232
+
233
+ .clip-body {
234
+ display: grid;
235
+ gap: 13px;
236
+ padding: 14px;
237
+ }
238
+
239
+ .clip-body h3 {
240
+ margin: 0;
241
+ font-size: 1rem;
242
+ font-weight: 750;
243
+ }
244
+
245
+ .clip-body p {
246
+ margin: 4px 0 0;
247
+ color: rgb(71 85 105);
248
+ font-size: 0.86rem;
249
+ }
250
+
251
+ .score {
252
+ min-width: 42px;
253
+ border-radius: 6px;
254
+ background: rgb(254 243 199);
255
+ padding: 6px 8px;
256
+ text-align: center;
257
+ font-weight: 850;
258
+ color: rgb(146 64 14);
259
+ }
260
+
261
+ .timeline {
262
+ display: grid;
263
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 68px;
264
+ align-items: end;
265
+ gap: 8px;
266
+ }
267
+
268
+ .timeline label {
269
+ display: block;
270
+ margin-bottom: 4px;
271
+ color: rgb(100 116 139);
272
+ font-size: 0.76rem;
273
+ font-weight: 700;
274
+ }
275
+
276
+ .timeline input {
277
+ width: 100%;
278
+ min-height: 36px;
279
+ border: 1px solid rgb(203 213 225);
280
+ border-radius: 6px;
281
+ padding: 6px 8px;
282
+ }
283
+
284
+ .timeline strong {
285
+ min-height: 36px;
286
+ border-radius: 6px;
287
+ background: rgb(226 232 240);
288
+ padding: 8px;
289
+ text-align: center;
290
+ font-variant-numeric: tabular-nums;
291
+ }
292
+
293
+ textarea {
294
+ width: 100%;
295
+ resize: vertical;
296
+ border: 1px solid rgb(203 213 225);
297
+ border-radius: 6px;
298
+ padding: 9px 10px;
299
+ color: rgb(15 23 42);
300
+ }
301
+
302
+ .clip-actions {
303
+ display: flex;
304
+ flex-wrap: wrap;
305
+ gap: 8px;
306
+ }
307
+
308
+ .download-button {
309
+ margin-left: auto;
310
+ background: rgb(20 184 166);
311
+ border-color: rgb(20 184 166);
312
+ color: white;
313
+ }
314
+
315
+ .error-box {
316
+ border: 1px solid rgb(251 113 133);
317
+ border-radius: 6px;
318
+ background: rgb(255 241 242);
319
+ padding: 10px;
320
+ color: rgb(159 18 57);
321
+ font-size: 0.9rem;
322
+ }
323
+
324
+ @media (max-width: 720px) {
325
+ .panel {
326
+ padding: 16px;
327
+ }
328
+
329
+ .transcript-row {
330
+ grid-template-columns: 1fr;
331
+ }
332
+ }
frontend/tailwind.config.js ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ export default {
2
+ content: ["./index.html", "./src/**/*.{js,jsx}"],
3
+ theme: {
4
+ extend: {
5
+ fontFamily: {
6
+ sans: ["Inter", "ui-sans-serif", "system-ui", "sans-serif"]
7
+ }
8
+ }
9
+ },
10
+ plugins: []
11
+ };