fahmiaziz98 commited on
Commit
5c6a571
·
1 Parent(s): ef28af8
Dockerfile CHANGED
@@ -1,16 +1,27 @@
1
- # Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker
2
- # you will also find guides on how best to write your Dockerfile
3
 
4
- FROM python:3.9
5
 
6
- RUN useradd -m -u 1000 user
7
- USER user
8
- ENV PATH="/home/user/.local/bin:$PATH"
9
 
10
- WORKDIR /app
 
 
 
 
 
 
 
 
 
 
 
11
 
12
- COPY --chown=user ./requirements.txt requirements.txt
13
- RUN pip install --no-cache-dir --upgrade -r requirements.txt
14
 
15
- COPY --chown=user . /app
16
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
+ # frontend/Dockerfile.dev
2
+ FROM node:18-alpine
3
 
4
+ WORKDIR /app
5
 
6
+ # Create non-root user
7
+ RUN addgroup --system --gid 1001 nodejs && \
8
+ adduser --system --uid 1001 sveltekit
9
 
10
+ # Copy package files
11
+ COPY --chown=sveltekit:nodejs package*.json ./
12
+
13
+ # Install dependencies (including dev dependencies)
14
+ RUN npm install
15
+
16
+ # Change ownership of node_modules
17
+ RUN chown -R sveltekit:nodejs /app
18
+
19
+ USER sveltekit
20
+
21
+ EXPOSE 7860
22
 
23
+ ENV NODE_ENV=development
24
+ ENV PORT=7860
25
 
26
+ # Development command with hot reload
27
+ CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0"]
app.py DELETED
@@ -1,7 +0,0 @@
1
- from fastapi import FastAPI
2
-
3
- app = FastAPI()
4
-
5
- @app.get("/")
6
- def greet_json():
7
- return {"Hello": "World!"}
 
 
 
 
 
 
 
 
package-lock.json ADDED
@@ -0,0 +1,2164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "base-sveltekit-app",
3
+ "version": "0.0.1",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "base-sveltekit-app",
9
+ "version": "0.0.1",
10
+ "devDependencies": {
11
+ "@sveltejs/adapter-auto": "^6.0.0",
12
+ "@sveltejs/kit": "^2.16.0",
13
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
14
+ "@tailwindcss/vite": "^4.0.0",
15
+ "prettier": "^3.4.2",
16
+ "prettier-plugin-svelte": "^3.3.3",
17
+ "prettier-plugin-tailwindcss": "^0.6.11",
18
+ "svelte": "^5.0.0",
19
+ "svelte-check": "^4.0.0",
20
+ "tailwindcss": "^4.0.0",
21
+ "typescript": "5.7.3",
22
+ "vite": "^6.2.6"
23
+ }
24
+ },
25
+ "node_modules/@ampproject/remapping": {
26
+ "version": "2.3.0",
27
+ "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
28
+ "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
29
+ "dev": true,
30
+ "dependencies": {
31
+ "@jridgewell/gen-mapping": "^0.3.5",
32
+ "@jridgewell/trace-mapping": "^0.3.24"
33
+ },
34
+ "engines": {
35
+ "node": ">=6.0.0"
36
+ }
37
+ },
38
+ "node_modules/@esbuild/aix-ppc64": {
39
+ "version": "0.25.8",
40
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz",
41
+ "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==",
42
+ "cpu": [
43
+ "ppc64"
44
+ ],
45
+ "dev": true,
46
+ "optional": true,
47
+ "os": [
48
+ "aix"
49
+ ],
50
+ "engines": {
51
+ "node": ">=18"
52
+ }
53
+ },
54
+ "node_modules/@esbuild/android-arm": {
55
+ "version": "0.25.8",
56
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz",
57
+ "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==",
58
+ "cpu": [
59
+ "arm"
60
+ ],
61
+ "dev": true,
62
+ "optional": true,
63
+ "os": [
64
+ "android"
65
+ ],
66
+ "engines": {
67
+ "node": ">=18"
68
+ }
69
+ },
70
+ "node_modules/@esbuild/android-arm64": {
71
+ "version": "0.25.8",
72
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz",
73
+ "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==",
74
+ "cpu": [
75
+ "arm64"
76
+ ],
77
+ "dev": true,
78
+ "optional": true,
79
+ "os": [
80
+ "android"
81
+ ],
82
+ "engines": {
83
+ "node": ">=18"
84
+ }
85
+ },
86
+ "node_modules/@esbuild/android-x64": {
87
+ "version": "0.25.8",
88
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz",
89
+ "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==",
90
+ "cpu": [
91
+ "x64"
92
+ ],
93
+ "dev": true,
94
+ "optional": true,
95
+ "os": [
96
+ "android"
97
+ ],
98
+ "engines": {
99
+ "node": ">=18"
100
+ }
101
+ },
102
+ "node_modules/@esbuild/darwin-arm64": {
103
+ "version": "0.25.8",
104
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz",
105
+ "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==",
106
+ "cpu": [
107
+ "arm64"
108
+ ],
109
+ "dev": true,
110
+ "optional": true,
111
+ "os": [
112
+ "darwin"
113
+ ],
114
+ "engines": {
115
+ "node": ">=18"
116
+ }
117
+ },
118
+ "node_modules/@esbuild/darwin-x64": {
119
+ "version": "0.25.8",
120
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz",
121
+ "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==",
122
+ "cpu": [
123
+ "x64"
124
+ ],
125
+ "dev": true,
126
+ "optional": true,
127
+ "os": [
128
+ "darwin"
129
+ ],
130
+ "engines": {
131
+ "node": ">=18"
132
+ }
133
+ },
134
+ "node_modules/@esbuild/freebsd-arm64": {
135
+ "version": "0.25.8",
136
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz",
137
+ "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==",
138
+ "cpu": [
139
+ "arm64"
140
+ ],
141
+ "dev": true,
142
+ "optional": true,
143
+ "os": [
144
+ "freebsd"
145
+ ],
146
+ "engines": {
147
+ "node": ">=18"
148
+ }
149
+ },
150
+ "node_modules/@esbuild/freebsd-x64": {
151
+ "version": "0.25.8",
152
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz",
153
+ "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==",
154
+ "cpu": [
155
+ "x64"
156
+ ],
157
+ "dev": true,
158
+ "optional": true,
159
+ "os": [
160
+ "freebsd"
161
+ ],
162
+ "engines": {
163
+ "node": ">=18"
164
+ }
165
+ },
166
+ "node_modules/@esbuild/linux-arm": {
167
+ "version": "0.25.8",
168
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz",
169
+ "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==",
170
+ "cpu": [
171
+ "arm"
172
+ ],
173
+ "dev": true,
174
+ "optional": true,
175
+ "os": [
176
+ "linux"
177
+ ],
178
+ "engines": {
179
+ "node": ">=18"
180
+ }
181
+ },
182
+ "node_modules/@esbuild/linux-arm64": {
183
+ "version": "0.25.8",
184
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz",
185
+ "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==",
186
+ "cpu": [
187
+ "arm64"
188
+ ],
189
+ "dev": true,
190
+ "optional": true,
191
+ "os": [
192
+ "linux"
193
+ ],
194
+ "engines": {
195
+ "node": ">=18"
196
+ }
197
+ },
198
+ "node_modules/@esbuild/linux-ia32": {
199
+ "version": "0.25.8",
200
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz",
201
+ "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==",
202
+ "cpu": [
203
+ "ia32"
204
+ ],
205
+ "dev": true,
206
+ "optional": true,
207
+ "os": [
208
+ "linux"
209
+ ],
210
+ "engines": {
211
+ "node": ">=18"
212
+ }
213
+ },
214
+ "node_modules/@esbuild/linux-loong64": {
215
+ "version": "0.25.8",
216
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz",
217
+ "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==",
218
+ "cpu": [
219
+ "loong64"
220
+ ],
221
+ "dev": true,
222
+ "optional": true,
223
+ "os": [
224
+ "linux"
225
+ ],
226
+ "engines": {
227
+ "node": ">=18"
228
+ }
229
+ },
230
+ "node_modules/@esbuild/linux-mips64el": {
231
+ "version": "0.25.8",
232
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz",
233
+ "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==",
234
+ "cpu": [
235
+ "mips64el"
236
+ ],
237
+ "dev": true,
238
+ "optional": true,
239
+ "os": [
240
+ "linux"
241
+ ],
242
+ "engines": {
243
+ "node": ">=18"
244
+ }
245
+ },
246
+ "node_modules/@esbuild/linux-ppc64": {
247
+ "version": "0.25.8",
248
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz",
249
+ "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==",
250
+ "cpu": [
251
+ "ppc64"
252
+ ],
253
+ "dev": true,
254
+ "optional": true,
255
+ "os": [
256
+ "linux"
257
+ ],
258
+ "engines": {
259
+ "node": ">=18"
260
+ }
261
+ },
262
+ "node_modules/@esbuild/linux-riscv64": {
263
+ "version": "0.25.8",
264
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz",
265
+ "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==",
266
+ "cpu": [
267
+ "riscv64"
268
+ ],
269
+ "dev": true,
270
+ "optional": true,
271
+ "os": [
272
+ "linux"
273
+ ],
274
+ "engines": {
275
+ "node": ">=18"
276
+ }
277
+ },
278
+ "node_modules/@esbuild/linux-s390x": {
279
+ "version": "0.25.8",
280
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz",
281
+ "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==",
282
+ "cpu": [
283
+ "s390x"
284
+ ],
285
+ "dev": true,
286
+ "optional": true,
287
+ "os": [
288
+ "linux"
289
+ ],
290
+ "engines": {
291
+ "node": ">=18"
292
+ }
293
+ },
294
+ "node_modules/@esbuild/linux-x64": {
295
+ "version": "0.25.8",
296
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz",
297
+ "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==",
298
+ "cpu": [
299
+ "x64"
300
+ ],
301
+ "dev": true,
302
+ "optional": true,
303
+ "os": [
304
+ "linux"
305
+ ],
306
+ "engines": {
307
+ "node": ">=18"
308
+ }
309
+ },
310
+ "node_modules/@esbuild/netbsd-arm64": {
311
+ "version": "0.25.8",
312
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz",
313
+ "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==",
314
+ "cpu": [
315
+ "arm64"
316
+ ],
317
+ "dev": true,
318
+ "optional": true,
319
+ "os": [
320
+ "netbsd"
321
+ ],
322
+ "engines": {
323
+ "node": ">=18"
324
+ }
325
+ },
326
+ "node_modules/@esbuild/netbsd-x64": {
327
+ "version": "0.25.8",
328
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz",
329
+ "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==",
330
+ "cpu": [
331
+ "x64"
332
+ ],
333
+ "dev": true,
334
+ "optional": true,
335
+ "os": [
336
+ "netbsd"
337
+ ],
338
+ "engines": {
339
+ "node": ">=18"
340
+ }
341
+ },
342
+ "node_modules/@esbuild/openbsd-arm64": {
343
+ "version": "0.25.8",
344
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz",
345
+ "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==",
346
+ "cpu": [
347
+ "arm64"
348
+ ],
349
+ "dev": true,
350
+ "optional": true,
351
+ "os": [
352
+ "openbsd"
353
+ ],
354
+ "engines": {
355
+ "node": ">=18"
356
+ }
357
+ },
358
+ "node_modules/@esbuild/openbsd-x64": {
359
+ "version": "0.25.8",
360
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz",
361
+ "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==",
362
+ "cpu": [
363
+ "x64"
364
+ ],
365
+ "dev": true,
366
+ "optional": true,
367
+ "os": [
368
+ "openbsd"
369
+ ],
370
+ "engines": {
371
+ "node": ">=18"
372
+ }
373
+ },
374
+ "node_modules/@esbuild/openharmony-arm64": {
375
+ "version": "0.25.8",
376
+ "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz",
377
+ "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==",
378
+ "cpu": [
379
+ "arm64"
380
+ ],
381
+ "dev": true,
382
+ "optional": true,
383
+ "os": [
384
+ "openharmony"
385
+ ],
386
+ "engines": {
387
+ "node": ">=18"
388
+ }
389
+ },
390
+ "node_modules/@esbuild/sunos-x64": {
391
+ "version": "0.25.8",
392
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz",
393
+ "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==",
394
+ "cpu": [
395
+ "x64"
396
+ ],
397
+ "dev": true,
398
+ "optional": true,
399
+ "os": [
400
+ "sunos"
401
+ ],
402
+ "engines": {
403
+ "node": ">=18"
404
+ }
405
+ },
406
+ "node_modules/@esbuild/win32-arm64": {
407
+ "version": "0.25.8",
408
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz",
409
+ "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==",
410
+ "cpu": [
411
+ "arm64"
412
+ ],
413
+ "dev": true,
414
+ "optional": true,
415
+ "os": [
416
+ "win32"
417
+ ],
418
+ "engines": {
419
+ "node": ">=18"
420
+ }
421
+ },
422
+ "node_modules/@esbuild/win32-ia32": {
423
+ "version": "0.25.8",
424
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz",
425
+ "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==",
426
+ "cpu": [
427
+ "ia32"
428
+ ],
429
+ "dev": true,
430
+ "optional": true,
431
+ "os": [
432
+ "win32"
433
+ ],
434
+ "engines": {
435
+ "node": ">=18"
436
+ }
437
+ },
438
+ "node_modules/@esbuild/win32-x64": {
439
+ "version": "0.25.8",
440
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz",
441
+ "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==",
442
+ "cpu": [
443
+ "x64"
444
+ ],
445
+ "dev": true,
446
+ "optional": true,
447
+ "os": [
448
+ "win32"
449
+ ],
450
+ "engines": {
451
+ "node": ">=18"
452
+ }
453
+ },
454
+ "node_modules/@isaacs/fs-minipass": {
455
+ "version": "4.0.1",
456
+ "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz",
457
+ "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==",
458
+ "dev": true,
459
+ "dependencies": {
460
+ "minipass": "^7.0.4"
461
+ },
462
+ "engines": {
463
+ "node": ">=18.0.0"
464
+ }
465
+ },
466
+ "node_modules/@jridgewell/gen-mapping": {
467
+ "version": "0.3.12",
468
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
469
+ "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==",
470
+ "dev": true,
471
+ "dependencies": {
472
+ "@jridgewell/sourcemap-codec": "^1.5.0",
473
+ "@jridgewell/trace-mapping": "^0.3.24"
474
+ }
475
+ },
476
+ "node_modules/@jridgewell/resolve-uri": {
477
+ "version": "3.1.2",
478
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
479
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
480
+ "dev": true,
481
+ "engines": {
482
+ "node": ">=6.0.0"
483
+ }
484
+ },
485
+ "node_modules/@jridgewell/sourcemap-codec": {
486
+ "version": "1.5.4",
487
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz",
488
+ "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==",
489
+ "dev": true
490
+ },
491
+ "node_modules/@jridgewell/trace-mapping": {
492
+ "version": "0.3.29",
493
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz",
494
+ "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==",
495
+ "dev": true,
496
+ "dependencies": {
497
+ "@jridgewell/resolve-uri": "^3.1.0",
498
+ "@jridgewell/sourcemap-codec": "^1.4.14"
499
+ }
500
+ },
501
+ "node_modules/@polka/url": {
502
+ "version": "1.0.0-next.29",
503
+ "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
504
+ "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
505
+ "dev": true
506
+ },
507
+ "node_modules/@rollup/rollup-android-arm-eabi": {
508
+ "version": "4.45.1",
509
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz",
510
+ "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==",
511
+ "cpu": [
512
+ "arm"
513
+ ],
514
+ "dev": true,
515
+ "optional": true,
516
+ "os": [
517
+ "android"
518
+ ]
519
+ },
520
+ "node_modules/@rollup/rollup-android-arm64": {
521
+ "version": "4.45.1",
522
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz",
523
+ "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==",
524
+ "cpu": [
525
+ "arm64"
526
+ ],
527
+ "dev": true,
528
+ "optional": true,
529
+ "os": [
530
+ "android"
531
+ ]
532
+ },
533
+ "node_modules/@rollup/rollup-darwin-arm64": {
534
+ "version": "4.45.1",
535
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz",
536
+ "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==",
537
+ "cpu": [
538
+ "arm64"
539
+ ],
540
+ "dev": true,
541
+ "optional": true,
542
+ "os": [
543
+ "darwin"
544
+ ]
545
+ },
546
+ "node_modules/@rollup/rollup-darwin-x64": {
547
+ "version": "4.45.1",
548
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz",
549
+ "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==",
550
+ "cpu": [
551
+ "x64"
552
+ ],
553
+ "dev": true,
554
+ "optional": true,
555
+ "os": [
556
+ "darwin"
557
+ ]
558
+ },
559
+ "node_modules/@rollup/rollup-freebsd-arm64": {
560
+ "version": "4.45.1",
561
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz",
562
+ "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==",
563
+ "cpu": [
564
+ "arm64"
565
+ ],
566
+ "dev": true,
567
+ "optional": true,
568
+ "os": [
569
+ "freebsd"
570
+ ]
571
+ },
572
+ "node_modules/@rollup/rollup-freebsd-x64": {
573
+ "version": "4.45.1",
574
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz",
575
+ "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==",
576
+ "cpu": [
577
+ "x64"
578
+ ],
579
+ "dev": true,
580
+ "optional": true,
581
+ "os": [
582
+ "freebsd"
583
+ ]
584
+ },
585
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
586
+ "version": "4.45.1",
587
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz",
588
+ "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==",
589
+ "cpu": [
590
+ "arm"
591
+ ],
592
+ "dev": true,
593
+ "optional": true,
594
+ "os": [
595
+ "linux"
596
+ ]
597
+ },
598
+ "node_modules/@rollup/rollup-linux-arm-musleabihf": {
599
+ "version": "4.45.1",
600
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz",
601
+ "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==",
602
+ "cpu": [
603
+ "arm"
604
+ ],
605
+ "dev": true,
606
+ "optional": true,
607
+ "os": [
608
+ "linux"
609
+ ]
610
+ },
611
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
612
+ "version": "4.45.1",
613
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz",
614
+ "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==",
615
+ "cpu": [
616
+ "arm64"
617
+ ],
618
+ "dev": true,
619
+ "optional": true,
620
+ "os": [
621
+ "linux"
622
+ ]
623
+ },
624
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
625
+ "version": "4.45.1",
626
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz",
627
+ "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==",
628
+ "cpu": [
629
+ "arm64"
630
+ ],
631
+ "dev": true,
632
+ "optional": true,
633
+ "os": [
634
+ "linux"
635
+ ]
636
+ },
637
+ "node_modules/@rollup/rollup-linux-loongarch64-gnu": {
638
+ "version": "4.45.1",
639
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz",
640
+ "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==",
641
+ "cpu": [
642
+ "loong64"
643
+ ],
644
+ "dev": true,
645
+ "optional": true,
646
+ "os": [
647
+ "linux"
648
+ ]
649
+ },
650
+ "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
651
+ "version": "4.45.1",
652
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz",
653
+ "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==",
654
+ "cpu": [
655
+ "ppc64"
656
+ ],
657
+ "dev": true,
658
+ "optional": true,
659
+ "os": [
660
+ "linux"
661
+ ]
662
+ },
663
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
664
+ "version": "4.45.1",
665
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz",
666
+ "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==",
667
+ "cpu": [
668
+ "riscv64"
669
+ ],
670
+ "dev": true,
671
+ "optional": true,
672
+ "os": [
673
+ "linux"
674
+ ]
675
+ },
676
+ "node_modules/@rollup/rollup-linux-riscv64-musl": {
677
+ "version": "4.45.1",
678
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz",
679
+ "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==",
680
+ "cpu": [
681
+ "riscv64"
682
+ ],
683
+ "dev": true,
684
+ "optional": true,
685
+ "os": [
686
+ "linux"
687
+ ]
688
+ },
689
+ "node_modules/@rollup/rollup-linux-s390x-gnu": {
690
+ "version": "4.45.1",
691
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz",
692
+ "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==",
693
+ "cpu": [
694
+ "s390x"
695
+ ],
696
+ "dev": true,
697
+ "optional": true,
698
+ "os": [
699
+ "linux"
700
+ ]
701
+ },
702
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
703
+ "version": "4.45.1",
704
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz",
705
+ "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==",
706
+ "cpu": [
707
+ "x64"
708
+ ],
709
+ "dev": true,
710
+ "optional": true,
711
+ "os": [
712
+ "linux"
713
+ ]
714
+ },
715
+ "node_modules/@rollup/rollup-linux-x64-musl": {
716
+ "version": "4.45.1",
717
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz",
718
+ "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==",
719
+ "cpu": [
720
+ "x64"
721
+ ],
722
+ "dev": true,
723
+ "optional": true,
724
+ "os": [
725
+ "linux"
726
+ ]
727
+ },
728
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
729
+ "version": "4.45.1",
730
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz",
731
+ "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==",
732
+ "cpu": [
733
+ "arm64"
734
+ ],
735
+ "dev": true,
736
+ "optional": true,
737
+ "os": [
738
+ "win32"
739
+ ]
740
+ },
741
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
742
+ "version": "4.45.1",
743
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz",
744
+ "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==",
745
+ "cpu": [
746
+ "ia32"
747
+ ],
748
+ "dev": true,
749
+ "optional": true,
750
+ "os": [
751
+ "win32"
752
+ ]
753
+ },
754
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
755
+ "version": "4.45.1",
756
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz",
757
+ "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==",
758
+ "cpu": [
759
+ "x64"
760
+ ],
761
+ "dev": true,
762
+ "optional": true,
763
+ "os": [
764
+ "win32"
765
+ ]
766
+ },
767
+ "node_modules/@sveltejs/acorn-typescript": {
768
+ "version": "1.0.5",
769
+ "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz",
770
+ "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==",
771
+ "dev": true,
772
+ "peerDependencies": {
773
+ "acorn": "^8.9.0"
774
+ }
775
+ },
776
+ "node_modules/@sveltejs/adapter-auto": {
777
+ "version": "6.0.1",
778
+ "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-6.0.1.tgz",
779
+ "integrity": "sha512-mcWud3pYGPWM2Pphdj8G9Qiq24nZ8L4LB7coCUckUEy5Y7wOWGJ/enaZ4AtJTcSm5dNK1rIkBRoqt+ae4zlxcQ==",
780
+ "dev": true,
781
+ "peerDependencies": {
782
+ "@sveltejs/kit": "^2.0.0"
783
+ }
784
+ },
785
+ "node_modules/@sveltejs/kit": {
786
+ "version": "2.25.1",
787
+ "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.25.1.tgz",
788
+ "integrity": "sha512-8H+fxDEp7Xq6tLFdrGdS5fLu6ONDQQ9DgyjboXpChubuFdfH9QoFX09ypssBpyNkJNZFt9eW3yLmXIc9CesPCA==",
789
+ "dev": true,
790
+ "dependencies": {
791
+ "@sveltejs/acorn-typescript": "^1.0.5",
792
+ "@types/cookie": "^0.6.0",
793
+ "acorn": "^8.14.1",
794
+ "cookie": "^0.6.0",
795
+ "devalue": "^5.1.0",
796
+ "esm-env": "^1.2.2",
797
+ "kleur": "^4.1.5",
798
+ "magic-string": "^0.30.5",
799
+ "mrmime": "^2.0.0",
800
+ "sade": "^1.8.1",
801
+ "set-cookie-parser": "^2.6.0",
802
+ "sirv": "^3.0.0"
803
+ },
804
+ "bin": {
805
+ "svelte-kit": "svelte-kit.js"
806
+ },
807
+ "engines": {
808
+ "node": ">=18.13"
809
+ },
810
+ "peerDependencies": {
811
+ "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0",
812
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
813
+ "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
814
+ }
815
+ },
816
+ "node_modules/@sveltejs/vite-plugin-svelte": {
817
+ "version": "5.1.1",
818
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.1.1.tgz",
819
+ "integrity": "sha512-Y1Cs7hhTc+a5E9Va/xwKlAJoariQyHY+5zBgCZg4PFWNYQ1nMN9sjK1zhw1gK69DuqVP++sht/1GZg1aRwmAXQ==",
820
+ "dev": true,
821
+ "dependencies": {
822
+ "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1",
823
+ "debug": "^4.4.1",
824
+ "deepmerge": "^4.3.1",
825
+ "kleur": "^4.1.5",
826
+ "magic-string": "^0.30.17",
827
+ "vitefu": "^1.0.6"
828
+ },
829
+ "engines": {
830
+ "node": "^18.0.0 || ^20.0.0 || >=22"
831
+ },
832
+ "peerDependencies": {
833
+ "svelte": "^5.0.0",
834
+ "vite": "^6.0.0"
835
+ }
836
+ },
837
+ "node_modules/@sveltejs/vite-plugin-svelte-inspector": {
838
+ "version": "4.0.1",
839
+ "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz",
840
+ "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==",
841
+ "dev": true,
842
+ "dependencies": {
843
+ "debug": "^4.3.7"
844
+ },
845
+ "engines": {
846
+ "node": "^18.0.0 || ^20.0.0 || >=22"
847
+ },
848
+ "peerDependencies": {
849
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
850
+ "svelte": "^5.0.0",
851
+ "vite": "^6.0.0"
852
+ }
853
+ },
854
+ "node_modules/@tailwindcss/node": {
855
+ "version": "4.1.11",
856
+ "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.11.tgz",
857
+ "integrity": "sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==",
858
+ "dev": true,
859
+ "dependencies": {
860
+ "@ampproject/remapping": "^2.3.0",
861
+ "enhanced-resolve": "^5.18.1",
862
+ "jiti": "^2.4.2",
863
+ "lightningcss": "1.30.1",
864
+ "magic-string": "^0.30.17",
865
+ "source-map-js": "^1.2.1",
866
+ "tailwindcss": "4.1.11"
867
+ }
868
+ },
869
+ "node_modules/@tailwindcss/oxide": {
870
+ "version": "4.1.11",
871
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.11.tgz",
872
+ "integrity": "sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==",
873
+ "dev": true,
874
+ "hasInstallScript": true,
875
+ "dependencies": {
876
+ "detect-libc": "^2.0.4",
877
+ "tar": "^7.4.3"
878
+ },
879
+ "engines": {
880
+ "node": ">= 10"
881
+ },
882
+ "optionalDependencies": {
883
+ "@tailwindcss/oxide-android-arm64": "4.1.11",
884
+ "@tailwindcss/oxide-darwin-arm64": "4.1.11",
885
+ "@tailwindcss/oxide-darwin-x64": "4.1.11",
886
+ "@tailwindcss/oxide-freebsd-x64": "4.1.11",
887
+ "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.11",
888
+ "@tailwindcss/oxide-linux-arm64-gnu": "4.1.11",
889
+ "@tailwindcss/oxide-linux-arm64-musl": "4.1.11",
890
+ "@tailwindcss/oxide-linux-x64-gnu": "4.1.11",
891
+ "@tailwindcss/oxide-linux-x64-musl": "4.1.11",
892
+ "@tailwindcss/oxide-wasm32-wasi": "4.1.11",
893
+ "@tailwindcss/oxide-win32-arm64-msvc": "4.1.11",
894
+ "@tailwindcss/oxide-win32-x64-msvc": "4.1.11"
895
+ }
896
+ },
897
+ "node_modules/@tailwindcss/oxide-android-arm64": {
898
+ "version": "4.1.11",
899
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.11.tgz",
900
+ "integrity": "sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==",
901
+ "cpu": [
902
+ "arm64"
903
+ ],
904
+ "dev": true,
905
+ "optional": true,
906
+ "os": [
907
+ "android"
908
+ ],
909
+ "engines": {
910
+ "node": ">= 10"
911
+ }
912
+ },
913
+ "node_modules/@tailwindcss/oxide-darwin-arm64": {
914
+ "version": "4.1.11",
915
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.11.tgz",
916
+ "integrity": "sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==",
917
+ "cpu": [
918
+ "arm64"
919
+ ],
920
+ "dev": true,
921
+ "optional": true,
922
+ "os": [
923
+ "darwin"
924
+ ],
925
+ "engines": {
926
+ "node": ">= 10"
927
+ }
928
+ },
929
+ "node_modules/@tailwindcss/oxide-darwin-x64": {
930
+ "version": "4.1.11",
931
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.11.tgz",
932
+ "integrity": "sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==",
933
+ "cpu": [
934
+ "x64"
935
+ ],
936
+ "dev": true,
937
+ "optional": true,
938
+ "os": [
939
+ "darwin"
940
+ ],
941
+ "engines": {
942
+ "node": ">= 10"
943
+ }
944
+ },
945
+ "node_modules/@tailwindcss/oxide-freebsd-x64": {
946
+ "version": "4.1.11",
947
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.11.tgz",
948
+ "integrity": "sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==",
949
+ "cpu": [
950
+ "x64"
951
+ ],
952
+ "dev": true,
953
+ "optional": true,
954
+ "os": [
955
+ "freebsd"
956
+ ],
957
+ "engines": {
958
+ "node": ">= 10"
959
+ }
960
+ },
961
+ "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
962
+ "version": "4.1.11",
963
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.11.tgz",
964
+ "integrity": "sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==",
965
+ "cpu": [
966
+ "arm"
967
+ ],
968
+ "dev": true,
969
+ "optional": true,
970
+ "os": [
971
+ "linux"
972
+ ],
973
+ "engines": {
974
+ "node": ">= 10"
975
+ }
976
+ },
977
+ "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
978
+ "version": "4.1.11",
979
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.11.tgz",
980
+ "integrity": "sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==",
981
+ "cpu": [
982
+ "arm64"
983
+ ],
984
+ "dev": true,
985
+ "optional": true,
986
+ "os": [
987
+ "linux"
988
+ ],
989
+ "engines": {
990
+ "node": ">= 10"
991
+ }
992
+ },
993
+ "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
994
+ "version": "4.1.11",
995
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.11.tgz",
996
+ "integrity": "sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==",
997
+ "cpu": [
998
+ "arm64"
999
+ ],
1000
+ "dev": true,
1001
+ "optional": true,
1002
+ "os": [
1003
+ "linux"
1004
+ ],
1005
+ "engines": {
1006
+ "node": ">= 10"
1007
+ }
1008
+ },
1009
+ "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
1010
+ "version": "4.1.11",
1011
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.11.tgz",
1012
+ "integrity": "sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==",
1013
+ "cpu": [
1014
+ "x64"
1015
+ ],
1016
+ "dev": true,
1017
+ "optional": true,
1018
+ "os": [
1019
+ "linux"
1020
+ ],
1021
+ "engines": {
1022
+ "node": ">= 10"
1023
+ }
1024
+ },
1025
+ "node_modules/@tailwindcss/oxide-linux-x64-musl": {
1026
+ "version": "4.1.11",
1027
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.11.tgz",
1028
+ "integrity": "sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==",
1029
+ "cpu": [
1030
+ "x64"
1031
+ ],
1032
+ "dev": true,
1033
+ "optional": true,
1034
+ "os": [
1035
+ "linux"
1036
+ ],
1037
+ "engines": {
1038
+ "node": ">= 10"
1039
+ }
1040
+ },
1041
+ "node_modules/@tailwindcss/oxide-wasm32-wasi": {
1042
+ "version": "4.1.11",
1043
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.11.tgz",
1044
+ "integrity": "sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==",
1045
+ "bundleDependencies": [
1046
+ "@napi-rs/wasm-runtime",
1047
+ "@emnapi/core",
1048
+ "@emnapi/runtime",
1049
+ "@tybys/wasm-util",
1050
+ "@emnapi/wasi-threads",
1051
+ "tslib"
1052
+ ],
1053
+ "cpu": [
1054
+ "wasm32"
1055
+ ],
1056
+ "dev": true,
1057
+ "optional": true,
1058
+ "dependencies": {
1059
+ "@emnapi/core": "^1.4.3",
1060
+ "@emnapi/runtime": "^1.4.3",
1061
+ "@emnapi/wasi-threads": "^1.0.2",
1062
+ "@napi-rs/wasm-runtime": "^0.2.11",
1063
+ "@tybys/wasm-util": "^0.9.0",
1064
+ "tslib": "^2.8.0"
1065
+ },
1066
+ "engines": {
1067
+ "node": ">=14.0.0"
1068
+ }
1069
+ },
1070
+ "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
1071
+ "version": "4.1.11",
1072
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.11.tgz",
1073
+ "integrity": "sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==",
1074
+ "cpu": [
1075
+ "arm64"
1076
+ ],
1077
+ "dev": true,
1078
+ "optional": true,
1079
+ "os": [
1080
+ "win32"
1081
+ ],
1082
+ "engines": {
1083
+ "node": ">= 10"
1084
+ }
1085
+ },
1086
+ "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
1087
+ "version": "4.1.11",
1088
+ "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.11.tgz",
1089
+ "integrity": "sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==",
1090
+ "cpu": [
1091
+ "x64"
1092
+ ],
1093
+ "dev": true,
1094
+ "optional": true,
1095
+ "os": [
1096
+ "win32"
1097
+ ],
1098
+ "engines": {
1099
+ "node": ">= 10"
1100
+ }
1101
+ },
1102
+ "node_modules/@tailwindcss/vite": {
1103
+ "version": "4.1.11",
1104
+ "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.1.11.tgz",
1105
+ "integrity": "sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==",
1106
+ "dev": true,
1107
+ "dependencies": {
1108
+ "@tailwindcss/node": "4.1.11",
1109
+ "@tailwindcss/oxide": "4.1.11",
1110
+ "tailwindcss": "4.1.11"
1111
+ },
1112
+ "peerDependencies": {
1113
+ "vite": "^5.2.0 || ^6 || ^7"
1114
+ }
1115
+ },
1116
+ "node_modules/@types/cookie": {
1117
+ "version": "0.6.0",
1118
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
1119
+ "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
1120
+ "dev": true
1121
+ },
1122
+ "node_modules/@types/estree": {
1123
+ "version": "1.0.8",
1124
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1125
+ "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1126
+ "dev": true
1127
+ },
1128
+ "node_modules/acorn": {
1129
+ "version": "8.15.0",
1130
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
1131
+ "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
1132
+ "dev": true,
1133
+ "bin": {
1134
+ "acorn": "bin/acorn"
1135
+ },
1136
+ "engines": {
1137
+ "node": ">=0.4.0"
1138
+ }
1139
+ },
1140
+ "node_modules/aria-query": {
1141
+ "version": "5.3.2",
1142
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
1143
+ "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==",
1144
+ "dev": true,
1145
+ "engines": {
1146
+ "node": ">= 0.4"
1147
+ }
1148
+ },
1149
+ "node_modules/axobject-query": {
1150
+ "version": "4.1.0",
1151
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
1152
+ "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
1153
+ "dev": true,
1154
+ "engines": {
1155
+ "node": ">= 0.4"
1156
+ }
1157
+ },
1158
+ "node_modules/chokidar": {
1159
+ "version": "4.0.3",
1160
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
1161
+ "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
1162
+ "dev": true,
1163
+ "dependencies": {
1164
+ "readdirp": "^4.0.1"
1165
+ },
1166
+ "engines": {
1167
+ "node": ">= 14.16.0"
1168
+ },
1169
+ "funding": {
1170
+ "url": "https://paulmillr.com/funding/"
1171
+ }
1172
+ },
1173
+ "node_modules/chownr": {
1174
+ "version": "3.0.0",
1175
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz",
1176
+ "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==",
1177
+ "dev": true,
1178
+ "engines": {
1179
+ "node": ">=18"
1180
+ }
1181
+ },
1182
+ "node_modules/clsx": {
1183
+ "version": "2.1.1",
1184
+ "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
1185
+ "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
1186
+ "dev": true,
1187
+ "engines": {
1188
+ "node": ">=6"
1189
+ }
1190
+ },
1191
+ "node_modules/cookie": {
1192
+ "version": "0.6.0",
1193
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
1194
+ "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
1195
+ "dev": true,
1196
+ "engines": {
1197
+ "node": ">= 0.6"
1198
+ }
1199
+ },
1200
+ "node_modules/debug": {
1201
+ "version": "4.4.1",
1202
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
1203
+ "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
1204
+ "dev": true,
1205
+ "dependencies": {
1206
+ "ms": "^2.1.3"
1207
+ },
1208
+ "engines": {
1209
+ "node": ">=6.0"
1210
+ },
1211
+ "peerDependenciesMeta": {
1212
+ "supports-color": {
1213
+ "optional": true
1214
+ }
1215
+ }
1216
+ },
1217
+ "node_modules/deepmerge": {
1218
+ "version": "4.3.1",
1219
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
1220
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
1221
+ "dev": true,
1222
+ "engines": {
1223
+ "node": ">=0.10.0"
1224
+ }
1225
+ },
1226
+ "node_modules/detect-libc": {
1227
+ "version": "2.0.4",
1228
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz",
1229
+ "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==",
1230
+ "dev": true,
1231
+ "engines": {
1232
+ "node": ">=8"
1233
+ }
1234
+ },
1235
+ "node_modules/devalue": {
1236
+ "version": "5.1.1",
1237
+ "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz",
1238
+ "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==",
1239
+ "dev": true
1240
+ },
1241
+ "node_modules/enhanced-resolve": {
1242
+ "version": "5.18.2",
1243
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.2.tgz",
1244
+ "integrity": "sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==",
1245
+ "dev": true,
1246
+ "dependencies": {
1247
+ "graceful-fs": "^4.2.4",
1248
+ "tapable": "^2.2.0"
1249
+ },
1250
+ "engines": {
1251
+ "node": ">=10.13.0"
1252
+ }
1253
+ },
1254
+ "node_modules/esbuild": {
1255
+ "version": "0.25.8",
1256
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz",
1257
+ "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==",
1258
+ "dev": true,
1259
+ "hasInstallScript": true,
1260
+ "bin": {
1261
+ "esbuild": "bin/esbuild"
1262
+ },
1263
+ "engines": {
1264
+ "node": ">=18"
1265
+ },
1266
+ "optionalDependencies": {
1267
+ "@esbuild/aix-ppc64": "0.25.8",
1268
+ "@esbuild/android-arm": "0.25.8",
1269
+ "@esbuild/android-arm64": "0.25.8",
1270
+ "@esbuild/android-x64": "0.25.8",
1271
+ "@esbuild/darwin-arm64": "0.25.8",
1272
+ "@esbuild/darwin-x64": "0.25.8",
1273
+ "@esbuild/freebsd-arm64": "0.25.8",
1274
+ "@esbuild/freebsd-x64": "0.25.8",
1275
+ "@esbuild/linux-arm": "0.25.8",
1276
+ "@esbuild/linux-arm64": "0.25.8",
1277
+ "@esbuild/linux-ia32": "0.25.8",
1278
+ "@esbuild/linux-loong64": "0.25.8",
1279
+ "@esbuild/linux-mips64el": "0.25.8",
1280
+ "@esbuild/linux-ppc64": "0.25.8",
1281
+ "@esbuild/linux-riscv64": "0.25.8",
1282
+ "@esbuild/linux-s390x": "0.25.8",
1283
+ "@esbuild/linux-x64": "0.25.8",
1284
+ "@esbuild/netbsd-arm64": "0.25.8",
1285
+ "@esbuild/netbsd-x64": "0.25.8",
1286
+ "@esbuild/openbsd-arm64": "0.25.8",
1287
+ "@esbuild/openbsd-x64": "0.25.8",
1288
+ "@esbuild/openharmony-arm64": "0.25.8",
1289
+ "@esbuild/sunos-x64": "0.25.8",
1290
+ "@esbuild/win32-arm64": "0.25.8",
1291
+ "@esbuild/win32-ia32": "0.25.8",
1292
+ "@esbuild/win32-x64": "0.25.8"
1293
+ }
1294
+ },
1295
+ "node_modules/esm-env": {
1296
+ "version": "1.2.2",
1297
+ "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
1298
+ "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
1299
+ "dev": true
1300
+ },
1301
+ "node_modules/esrap": {
1302
+ "version": "2.1.0",
1303
+ "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.1.0.tgz",
1304
+ "integrity": "sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==",
1305
+ "dev": true,
1306
+ "dependencies": {
1307
+ "@jridgewell/sourcemap-codec": "^1.4.15"
1308
+ }
1309
+ },
1310
+ "node_modules/fdir": {
1311
+ "version": "6.4.6",
1312
+ "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
1313
+ "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
1314
+ "dev": true,
1315
+ "peerDependencies": {
1316
+ "picomatch": "^3 || ^4"
1317
+ },
1318
+ "peerDependenciesMeta": {
1319
+ "picomatch": {
1320
+ "optional": true
1321
+ }
1322
+ }
1323
+ },
1324
+ "node_modules/fsevents": {
1325
+ "version": "2.3.3",
1326
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1327
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1328
+ "dev": true,
1329
+ "hasInstallScript": true,
1330
+ "optional": true,
1331
+ "os": [
1332
+ "darwin"
1333
+ ],
1334
+ "engines": {
1335
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1336
+ }
1337
+ },
1338
+ "node_modules/graceful-fs": {
1339
+ "version": "4.2.11",
1340
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
1341
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
1342
+ "dev": true
1343
+ },
1344
+ "node_modules/is-reference": {
1345
+ "version": "3.0.3",
1346
+ "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
1347
+ "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
1348
+ "dev": true,
1349
+ "dependencies": {
1350
+ "@types/estree": "^1.0.6"
1351
+ }
1352
+ },
1353
+ "node_modules/jiti": {
1354
+ "version": "2.4.2",
1355
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz",
1356
+ "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==",
1357
+ "dev": true,
1358
+ "bin": {
1359
+ "jiti": "lib/jiti-cli.mjs"
1360
+ }
1361
+ },
1362
+ "node_modules/kleur": {
1363
+ "version": "4.1.5",
1364
+ "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
1365
+ "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
1366
+ "dev": true,
1367
+ "engines": {
1368
+ "node": ">=6"
1369
+ }
1370
+ },
1371
+ "node_modules/lightningcss": {
1372
+ "version": "1.30.1",
1373
+ "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
1374
+ "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==",
1375
+ "dev": true,
1376
+ "dependencies": {
1377
+ "detect-libc": "^2.0.3"
1378
+ },
1379
+ "engines": {
1380
+ "node": ">= 12.0.0"
1381
+ },
1382
+ "funding": {
1383
+ "type": "opencollective",
1384
+ "url": "https://opencollective.com/parcel"
1385
+ },
1386
+ "optionalDependencies": {
1387
+ "lightningcss-darwin-arm64": "1.30.1",
1388
+ "lightningcss-darwin-x64": "1.30.1",
1389
+ "lightningcss-freebsd-x64": "1.30.1",
1390
+ "lightningcss-linux-arm-gnueabihf": "1.30.1",
1391
+ "lightningcss-linux-arm64-gnu": "1.30.1",
1392
+ "lightningcss-linux-arm64-musl": "1.30.1",
1393
+ "lightningcss-linux-x64-gnu": "1.30.1",
1394
+ "lightningcss-linux-x64-musl": "1.30.1",
1395
+ "lightningcss-win32-arm64-msvc": "1.30.1",
1396
+ "lightningcss-win32-x64-msvc": "1.30.1"
1397
+ }
1398
+ },
1399
+ "node_modules/lightningcss-darwin-arm64": {
1400
+ "version": "1.30.1",
1401
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz",
1402
+ "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==",
1403
+ "cpu": [
1404
+ "arm64"
1405
+ ],
1406
+ "dev": true,
1407
+ "optional": true,
1408
+ "os": [
1409
+ "darwin"
1410
+ ],
1411
+ "engines": {
1412
+ "node": ">= 12.0.0"
1413
+ },
1414
+ "funding": {
1415
+ "type": "opencollective",
1416
+ "url": "https://opencollective.com/parcel"
1417
+ }
1418
+ },
1419
+ "node_modules/lightningcss-darwin-x64": {
1420
+ "version": "1.30.1",
1421
+ "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz",
1422
+ "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==",
1423
+ "cpu": [
1424
+ "x64"
1425
+ ],
1426
+ "dev": true,
1427
+ "optional": true,
1428
+ "os": [
1429
+ "darwin"
1430
+ ],
1431
+ "engines": {
1432
+ "node": ">= 12.0.0"
1433
+ },
1434
+ "funding": {
1435
+ "type": "opencollective",
1436
+ "url": "https://opencollective.com/parcel"
1437
+ }
1438
+ },
1439
+ "node_modules/lightningcss-freebsd-x64": {
1440
+ "version": "1.30.1",
1441
+ "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz",
1442
+ "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==",
1443
+ "cpu": [
1444
+ "x64"
1445
+ ],
1446
+ "dev": true,
1447
+ "optional": true,
1448
+ "os": [
1449
+ "freebsd"
1450
+ ],
1451
+ "engines": {
1452
+ "node": ">= 12.0.0"
1453
+ },
1454
+ "funding": {
1455
+ "type": "opencollective",
1456
+ "url": "https://opencollective.com/parcel"
1457
+ }
1458
+ },
1459
+ "node_modules/lightningcss-linux-arm-gnueabihf": {
1460
+ "version": "1.30.1",
1461
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz",
1462
+ "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==",
1463
+ "cpu": [
1464
+ "arm"
1465
+ ],
1466
+ "dev": true,
1467
+ "optional": true,
1468
+ "os": [
1469
+ "linux"
1470
+ ],
1471
+ "engines": {
1472
+ "node": ">= 12.0.0"
1473
+ },
1474
+ "funding": {
1475
+ "type": "opencollective",
1476
+ "url": "https://opencollective.com/parcel"
1477
+ }
1478
+ },
1479
+ "node_modules/lightningcss-linux-arm64-gnu": {
1480
+ "version": "1.30.1",
1481
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz",
1482
+ "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==",
1483
+ "cpu": [
1484
+ "arm64"
1485
+ ],
1486
+ "dev": true,
1487
+ "optional": true,
1488
+ "os": [
1489
+ "linux"
1490
+ ],
1491
+ "engines": {
1492
+ "node": ">= 12.0.0"
1493
+ },
1494
+ "funding": {
1495
+ "type": "opencollective",
1496
+ "url": "https://opencollective.com/parcel"
1497
+ }
1498
+ },
1499
+ "node_modules/lightningcss-linux-arm64-musl": {
1500
+ "version": "1.30.1",
1501
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz",
1502
+ "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==",
1503
+ "cpu": [
1504
+ "arm64"
1505
+ ],
1506
+ "dev": true,
1507
+ "optional": true,
1508
+ "os": [
1509
+ "linux"
1510
+ ],
1511
+ "engines": {
1512
+ "node": ">= 12.0.0"
1513
+ },
1514
+ "funding": {
1515
+ "type": "opencollective",
1516
+ "url": "https://opencollective.com/parcel"
1517
+ }
1518
+ },
1519
+ "node_modules/lightningcss-linux-x64-gnu": {
1520
+ "version": "1.30.1",
1521
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz",
1522
+ "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==",
1523
+ "cpu": [
1524
+ "x64"
1525
+ ],
1526
+ "dev": true,
1527
+ "optional": true,
1528
+ "os": [
1529
+ "linux"
1530
+ ],
1531
+ "engines": {
1532
+ "node": ">= 12.0.0"
1533
+ },
1534
+ "funding": {
1535
+ "type": "opencollective",
1536
+ "url": "https://opencollective.com/parcel"
1537
+ }
1538
+ },
1539
+ "node_modules/lightningcss-linux-x64-musl": {
1540
+ "version": "1.30.1",
1541
+ "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz",
1542
+ "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==",
1543
+ "cpu": [
1544
+ "x64"
1545
+ ],
1546
+ "dev": true,
1547
+ "optional": true,
1548
+ "os": [
1549
+ "linux"
1550
+ ],
1551
+ "engines": {
1552
+ "node": ">= 12.0.0"
1553
+ },
1554
+ "funding": {
1555
+ "type": "opencollective",
1556
+ "url": "https://opencollective.com/parcel"
1557
+ }
1558
+ },
1559
+ "node_modules/lightningcss-win32-arm64-msvc": {
1560
+ "version": "1.30.1",
1561
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz",
1562
+ "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==",
1563
+ "cpu": [
1564
+ "arm64"
1565
+ ],
1566
+ "dev": true,
1567
+ "optional": true,
1568
+ "os": [
1569
+ "win32"
1570
+ ],
1571
+ "engines": {
1572
+ "node": ">= 12.0.0"
1573
+ },
1574
+ "funding": {
1575
+ "type": "opencollective",
1576
+ "url": "https://opencollective.com/parcel"
1577
+ }
1578
+ },
1579
+ "node_modules/lightningcss-win32-x64-msvc": {
1580
+ "version": "1.30.1",
1581
+ "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz",
1582
+ "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==",
1583
+ "cpu": [
1584
+ "x64"
1585
+ ],
1586
+ "dev": true,
1587
+ "optional": true,
1588
+ "os": [
1589
+ "win32"
1590
+ ],
1591
+ "engines": {
1592
+ "node": ">= 12.0.0"
1593
+ },
1594
+ "funding": {
1595
+ "type": "opencollective",
1596
+ "url": "https://opencollective.com/parcel"
1597
+ }
1598
+ },
1599
+ "node_modules/locate-character": {
1600
+ "version": "3.0.0",
1601
+ "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
1602
+ "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
1603
+ "dev": true
1604
+ },
1605
+ "node_modules/magic-string": {
1606
+ "version": "0.30.17",
1607
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz",
1608
+ "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==",
1609
+ "dev": true,
1610
+ "dependencies": {
1611
+ "@jridgewell/sourcemap-codec": "^1.5.0"
1612
+ }
1613
+ },
1614
+ "node_modules/minipass": {
1615
+ "version": "7.1.2",
1616
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
1617
+ "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
1618
+ "dev": true,
1619
+ "engines": {
1620
+ "node": ">=16 || 14 >=14.17"
1621
+ }
1622
+ },
1623
+ "node_modules/minizlib": {
1624
+ "version": "3.0.2",
1625
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz",
1626
+ "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==",
1627
+ "dev": true,
1628
+ "dependencies": {
1629
+ "minipass": "^7.1.2"
1630
+ },
1631
+ "engines": {
1632
+ "node": ">= 18"
1633
+ }
1634
+ },
1635
+ "node_modules/mkdirp": {
1636
+ "version": "3.0.1",
1637
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz",
1638
+ "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==",
1639
+ "dev": true,
1640
+ "bin": {
1641
+ "mkdirp": "dist/cjs/src/bin.js"
1642
+ },
1643
+ "engines": {
1644
+ "node": ">=10"
1645
+ },
1646
+ "funding": {
1647
+ "url": "https://github.com/sponsors/isaacs"
1648
+ }
1649
+ },
1650
+ "node_modules/mri": {
1651
+ "version": "1.2.0",
1652
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
1653
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
1654
+ "dev": true,
1655
+ "engines": {
1656
+ "node": ">=4"
1657
+ }
1658
+ },
1659
+ "node_modules/mrmime": {
1660
+ "version": "2.0.1",
1661
+ "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
1662
+ "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
1663
+ "dev": true,
1664
+ "engines": {
1665
+ "node": ">=10"
1666
+ }
1667
+ },
1668
+ "node_modules/ms": {
1669
+ "version": "2.1.3",
1670
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1671
+ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
1672
+ "dev": true
1673
+ },
1674
+ "node_modules/nanoid": {
1675
+ "version": "3.3.11",
1676
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
1677
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
1678
+ "dev": true,
1679
+ "funding": [
1680
+ {
1681
+ "type": "github",
1682
+ "url": "https://github.com/sponsors/ai"
1683
+ }
1684
+ ],
1685
+ "bin": {
1686
+ "nanoid": "bin/nanoid.cjs"
1687
+ },
1688
+ "engines": {
1689
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1690
+ }
1691
+ },
1692
+ "node_modules/picocolors": {
1693
+ "version": "1.1.1",
1694
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
1695
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
1696
+ "dev": true
1697
+ },
1698
+ "node_modules/picomatch": {
1699
+ "version": "4.0.3",
1700
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
1701
+ "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
1702
+ "dev": true,
1703
+ "engines": {
1704
+ "node": ">=12"
1705
+ },
1706
+ "funding": {
1707
+ "url": "https://github.com/sponsors/jonschlinkert"
1708
+ }
1709
+ },
1710
+ "node_modules/postcss": {
1711
+ "version": "8.5.6",
1712
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
1713
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
1714
+ "dev": true,
1715
+ "funding": [
1716
+ {
1717
+ "type": "opencollective",
1718
+ "url": "https://opencollective.com/postcss/"
1719
+ },
1720
+ {
1721
+ "type": "tidelift",
1722
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1723
+ },
1724
+ {
1725
+ "type": "github",
1726
+ "url": "https://github.com/sponsors/ai"
1727
+ }
1728
+ ],
1729
+ "dependencies": {
1730
+ "nanoid": "^3.3.11",
1731
+ "picocolors": "^1.1.1",
1732
+ "source-map-js": "^1.2.1"
1733
+ },
1734
+ "engines": {
1735
+ "node": "^10 || ^12 || >=14"
1736
+ }
1737
+ },
1738
+ "node_modules/prettier": {
1739
+ "version": "3.6.2",
1740
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz",
1741
+ "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==",
1742
+ "dev": true,
1743
+ "bin": {
1744
+ "prettier": "bin/prettier.cjs"
1745
+ },
1746
+ "engines": {
1747
+ "node": ">=14"
1748
+ },
1749
+ "funding": {
1750
+ "url": "https://github.com/prettier/prettier?sponsor=1"
1751
+ }
1752
+ },
1753
+ "node_modules/prettier-plugin-svelte": {
1754
+ "version": "3.4.0",
1755
+ "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.4.0.tgz",
1756
+ "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==",
1757
+ "dev": true,
1758
+ "peerDependencies": {
1759
+ "prettier": "^3.0.0",
1760
+ "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0"
1761
+ }
1762
+ },
1763
+ "node_modules/prettier-plugin-tailwindcss": {
1764
+ "version": "0.6.14",
1765
+ "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz",
1766
+ "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==",
1767
+ "dev": true,
1768
+ "engines": {
1769
+ "node": ">=14.21.3"
1770
+ },
1771
+ "peerDependencies": {
1772
+ "@ianvs/prettier-plugin-sort-imports": "*",
1773
+ "@prettier/plugin-hermes": "*",
1774
+ "@prettier/plugin-oxc": "*",
1775
+ "@prettier/plugin-pug": "*",
1776
+ "@shopify/prettier-plugin-liquid": "*",
1777
+ "@trivago/prettier-plugin-sort-imports": "*",
1778
+ "@zackad/prettier-plugin-twig": "*",
1779
+ "prettier": "^3.0",
1780
+ "prettier-plugin-astro": "*",
1781
+ "prettier-plugin-css-order": "*",
1782
+ "prettier-plugin-import-sort": "*",
1783
+ "prettier-plugin-jsdoc": "*",
1784
+ "prettier-plugin-marko": "*",
1785
+ "prettier-plugin-multiline-arrays": "*",
1786
+ "prettier-plugin-organize-attributes": "*",
1787
+ "prettier-plugin-organize-imports": "*",
1788
+ "prettier-plugin-sort-imports": "*",
1789
+ "prettier-plugin-style-order": "*",
1790
+ "prettier-plugin-svelte": "*"
1791
+ },
1792
+ "peerDependenciesMeta": {
1793
+ "@ianvs/prettier-plugin-sort-imports": {
1794
+ "optional": true
1795
+ },
1796
+ "@prettier/plugin-hermes": {
1797
+ "optional": true
1798
+ },
1799
+ "@prettier/plugin-oxc": {
1800
+ "optional": true
1801
+ },
1802
+ "@prettier/plugin-pug": {
1803
+ "optional": true
1804
+ },
1805
+ "@shopify/prettier-plugin-liquid": {
1806
+ "optional": true
1807
+ },
1808
+ "@trivago/prettier-plugin-sort-imports": {
1809
+ "optional": true
1810
+ },
1811
+ "@zackad/prettier-plugin-twig": {
1812
+ "optional": true
1813
+ },
1814
+ "prettier-plugin-astro": {
1815
+ "optional": true
1816
+ },
1817
+ "prettier-plugin-css-order": {
1818
+ "optional": true
1819
+ },
1820
+ "prettier-plugin-import-sort": {
1821
+ "optional": true
1822
+ },
1823
+ "prettier-plugin-jsdoc": {
1824
+ "optional": true
1825
+ },
1826
+ "prettier-plugin-marko": {
1827
+ "optional": true
1828
+ },
1829
+ "prettier-plugin-multiline-arrays": {
1830
+ "optional": true
1831
+ },
1832
+ "prettier-plugin-organize-attributes": {
1833
+ "optional": true
1834
+ },
1835
+ "prettier-plugin-organize-imports": {
1836
+ "optional": true
1837
+ },
1838
+ "prettier-plugin-sort-imports": {
1839
+ "optional": true
1840
+ },
1841
+ "prettier-plugin-style-order": {
1842
+ "optional": true
1843
+ },
1844
+ "prettier-plugin-svelte": {
1845
+ "optional": true
1846
+ }
1847
+ }
1848
+ },
1849
+ "node_modules/readdirp": {
1850
+ "version": "4.1.2",
1851
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
1852
+ "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
1853
+ "dev": true,
1854
+ "engines": {
1855
+ "node": ">= 14.18.0"
1856
+ },
1857
+ "funding": {
1858
+ "type": "individual",
1859
+ "url": "https://paulmillr.com/funding/"
1860
+ }
1861
+ },
1862
+ "node_modules/rollup": {
1863
+ "version": "4.45.1",
1864
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
1865
+ "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==",
1866
+ "dev": true,
1867
+ "dependencies": {
1868
+ "@types/estree": "1.0.8"
1869
+ },
1870
+ "bin": {
1871
+ "rollup": "dist/bin/rollup"
1872
+ },
1873
+ "engines": {
1874
+ "node": ">=18.0.0",
1875
+ "npm": ">=8.0.0"
1876
+ },
1877
+ "optionalDependencies": {
1878
+ "@rollup/rollup-android-arm-eabi": "4.45.1",
1879
+ "@rollup/rollup-android-arm64": "4.45.1",
1880
+ "@rollup/rollup-darwin-arm64": "4.45.1",
1881
+ "@rollup/rollup-darwin-x64": "4.45.1",
1882
+ "@rollup/rollup-freebsd-arm64": "4.45.1",
1883
+ "@rollup/rollup-freebsd-x64": "4.45.1",
1884
+ "@rollup/rollup-linux-arm-gnueabihf": "4.45.1",
1885
+ "@rollup/rollup-linux-arm-musleabihf": "4.45.1",
1886
+ "@rollup/rollup-linux-arm64-gnu": "4.45.1",
1887
+ "@rollup/rollup-linux-arm64-musl": "4.45.1",
1888
+ "@rollup/rollup-linux-loongarch64-gnu": "4.45.1",
1889
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1",
1890
+ "@rollup/rollup-linux-riscv64-gnu": "4.45.1",
1891
+ "@rollup/rollup-linux-riscv64-musl": "4.45.1",
1892
+ "@rollup/rollup-linux-s390x-gnu": "4.45.1",
1893
+ "@rollup/rollup-linux-x64-gnu": "4.45.1",
1894
+ "@rollup/rollup-linux-x64-musl": "4.45.1",
1895
+ "@rollup/rollup-win32-arm64-msvc": "4.45.1",
1896
+ "@rollup/rollup-win32-ia32-msvc": "4.45.1",
1897
+ "@rollup/rollup-win32-x64-msvc": "4.45.1",
1898
+ "fsevents": "~2.3.2"
1899
+ }
1900
+ },
1901
+ "node_modules/sade": {
1902
+ "version": "1.8.1",
1903
+ "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz",
1904
+ "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==",
1905
+ "dev": true,
1906
+ "dependencies": {
1907
+ "mri": "^1.1.0"
1908
+ },
1909
+ "engines": {
1910
+ "node": ">=6"
1911
+ }
1912
+ },
1913
+ "node_modules/set-cookie-parser": {
1914
+ "version": "2.7.1",
1915
+ "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz",
1916
+ "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==",
1917
+ "dev": true
1918
+ },
1919
+ "node_modules/sirv": {
1920
+ "version": "3.0.1",
1921
+ "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz",
1922
+ "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==",
1923
+ "dev": true,
1924
+ "dependencies": {
1925
+ "@polka/url": "^1.0.0-next.24",
1926
+ "mrmime": "^2.0.0",
1927
+ "totalist": "^3.0.0"
1928
+ },
1929
+ "engines": {
1930
+ "node": ">=18"
1931
+ }
1932
+ },
1933
+ "node_modules/source-map-js": {
1934
+ "version": "1.2.1",
1935
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
1936
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
1937
+ "dev": true,
1938
+ "engines": {
1939
+ "node": ">=0.10.0"
1940
+ }
1941
+ },
1942
+ "node_modules/svelte": {
1943
+ "version": "5.36.10",
1944
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.36.10.tgz",
1945
+ "integrity": "sha512-hAjYQweQHM8VH5YEEf2+k9hGyMnd+oVHXoSA/eG607vViRk9qQO1g+Dvr29+yMuYQNScpOzHX3qcnC7LrcTGCQ==",
1946
+ "dev": true,
1947
+ "dependencies": {
1948
+ "@ampproject/remapping": "^2.3.0",
1949
+ "@jridgewell/sourcemap-codec": "^1.5.0",
1950
+ "@sveltejs/acorn-typescript": "^1.0.5",
1951
+ "@types/estree": "^1.0.5",
1952
+ "acorn": "^8.12.1",
1953
+ "aria-query": "^5.3.1",
1954
+ "axobject-query": "^4.1.0",
1955
+ "clsx": "^2.1.1",
1956
+ "esm-env": "^1.2.1",
1957
+ "esrap": "^2.1.0",
1958
+ "is-reference": "^3.0.3",
1959
+ "locate-character": "^3.0.0",
1960
+ "magic-string": "^0.30.11",
1961
+ "zimmerframe": "^1.1.2"
1962
+ },
1963
+ "engines": {
1964
+ "node": ">=18"
1965
+ }
1966
+ },
1967
+ "node_modules/svelte-check": {
1968
+ "version": "4.3.0",
1969
+ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.3.0.tgz",
1970
+ "integrity": "sha512-Iz8dFXzBNAM7XlEIsUjUGQhbEE+Pvv9odb9+0+ITTgFWZBGeJRRYqHUUglwe2EkLD5LIsQaAc4IUJyvtKuOO5w==",
1971
+ "dev": true,
1972
+ "dependencies": {
1973
+ "@jridgewell/trace-mapping": "^0.3.25",
1974
+ "chokidar": "^4.0.1",
1975
+ "fdir": "^6.2.0",
1976
+ "picocolors": "^1.0.0",
1977
+ "sade": "^1.7.4"
1978
+ },
1979
+ "bin": {
1980
+ "svelte-check": "bin/svelte-check"
1981
+ },
1982
+ "engines": {
1983
+ "node": ">= 18.0.0"
1984
+ },
1985
+ "peerDependencies": {
1986
+ "svelte": "^4.0.0 || ^5.0.0-next.0",
1987
+ "typescript": ">=5.0.0"
1988
+ }
1989
+ },
1990
+ "node_modules/tailwindcss": {
1991
+ "version": "4.1.11",
1992
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.11.tgz",
1993
+ "integrity": "sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==",
1994
+ "dev": true
1995
+ },
1996
+ "node_modules/tapable": {
1997
+ "version": "2.2.2",
1998
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.2.tgz",
1999
+ "integrity": "sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==",
2000
+ "dev": true,
2001
+ "engines": {
2002
+ "node": ">=6"
2003
+ }
2004
+ },
2005
+ "node_modules/tar": {
2006
+ "version": "7.4.3",
2007
+ "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz",
2008
+ "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==",
2009
+ "dev": true,
2010
+ "dependencies": {
2011
+ "@isaacs/fs-minipass": "^4.0.0",
2012
+ "chownr": "^3.0.0",
2013
+ "minipass": "^7.1.2",
2014
+ "minizlib": "^3.0.1",
2015
+ "mkdirp": "^3.0.1",
2016
+ "yallist": "^5.0.0"
2017
+ },
2018
+ "engines": {
2019
+ "node": ">=18"
2020
+ }
2021
+ },
2022
+ "node_modules/tinyglobby": {
2023
+ "version": "0.2.14",
2024
+ "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
2025
+ "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
2026
+ "dev": true,
2027
+ "dependencies": {
2028
+ "fdir": "^6.4.4",
2029
+ "picomatch": "^4.0.2"
2030
+ },
2031
+ "engines": {
2032
+ "node": ">=12.0.0"
2033
+ },
2034
+ "funding": {
2035
+ "url": "https://github.com/sponsors/SuperchupuDev"
2036
+ }
2037
+ },
2038
+ "node_modules/totalist": {
2039
+ "version": "3.0.1",
2040
+ "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
2041
+ "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
2042
+ "dev": true,
2043
+ "engines": {
2044
+ "node": ">=6"
2045
+ }
2046
+ },
2047
+ "node_modules/typescript": {
2048
+ "version": "5.7.3",
2049
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
2050
+ "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
2051
+ "dev": true,
2052
+ "bin": {
2053
+ "tsc": "bin/tsc",
2054
+ "tsserver": "bin/tsserver"
2055
+ },
2056
+ "engines": {
2057
+ "node": ">=14.17"
2058
+ }
2059
+ },
2060
+ "node_modules/vite": {
2061
+ "version": "6.3.5",
2062
+ "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
2063
+ "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==",
2064
+ "dev": true,
2065
+ "dependencies": {
2066
+ "esbuild": "^0.25.0",
2067
+ "fdir": "^6.4.4",
2068
+ "picomatch": "^4.0.2",
2069
+ "postcss": "^8.5.3",
2070
+ "rollup": "^4.34.9",
2071
+ "tinyglobby": "^0.2.13"
2072
+ },
2073
+ "bin": {
2074
+ "vite": "bin/vite.js"
2075
+ },
2076
+ "engines": {
2077
+ "node": "^18.0.0 || ^20.0.0 || >=22.0.0"
2078
+ },
2079
+ "funding": {
2080
+ "url": "https://github.com/vitejs/vite?sponsor=1"
2081
+ },
2082
+ "optionalDependencies": {
2083
+ "fsevents": "~2.3.3"
2084
+ },
2085
+ "peerDependencies": {
2086
+ "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
2087
+ "jiti": ">=1.21.0",
2088
+ "less": "*",
2089
+ "lightningcss": "^1.21.0",
2090
+ "sass": "*",
2091
+ "sass-embedded": "*",
2092
+ "stylus": "*",
2093
+ "sugarss": "*",
2094
+ "terser": "^5.16.0",
2095
+ "tsx": "^4.8.1",
2096
+ "yaml": "^2.4.2"
2097
+ },
2098
+ "peerDependenciesMeta": {
2099
+ "@types/node": {
2100
+ "optional": true
2101
+ },
2102
+ "jiti": {
2103
+ "optional": true
2104
+ },
2105
+ "less": {
2106
+ "optional": true
2107
+ },
2108
+ "lightningcss": {
2109
+ "optional": true
2110
+ },
2111
+ "sass": {
2112
+ "optional": true
2113
+ },
2114
+ "sass-embedded": {
2115
+ "optional": true
2116
+ },
2117
+ "stylus": {
2118
+ "optional": true
2119
+ },
2120
+ "sugarss": {
2121
+ "optional": true
2122
+ },
2123
+ "terser": {
2124
+ "optional": true
2125
+ },
2126
+ "tsx": {
2127
+ "optional": true
2128
+ },
2129
+ "yaml": {
2130
+ "optional": true
2131
+ }
2132
+ }
2133
+ },
2134
+ "node_modules/vitefu": {
2135
+ "version": "1.1.1",
2136
+ "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz",
2137
+ "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
2138
+ "dev": true,
2139
+ "peerDependencies": {
2140
+ "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0"
2141
+ },
2142
+ "peerDependenciesMeta": {
2143
+ "vite": {
2144
+ "optional": true
2145
+ }
2146
+ }
2147
+ },
2148
+ "node_modules/yallist": {
2149
+ "version": "5.0.0",
2150
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz",
2151
+ "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==",
2152
+ "dev": true,
2153
+ "engines": {
2154
+ "node": ">=18"
2155
+ }
2156
+ },
2157
+ "node_modules/zimmerframe": {
2158
+ "version": "1.1.2",
2159
+ "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
2160
+ "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==",
2161
+ "dev": true
2162
+ }
2163
+ }
2164
+ }
package.json ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "base-sveltekit-app",
3
+ "private": true,
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite dev",
8
+ "build": "vite build",
9
+ "preview": "vite preview",
10
+ "prepare": "svelte-kit sync || echo ''",
11
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
12
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
13
+ "format": "prettier --write .",
14
+ "lint": "prettier --check ."
15
+ },
16
+ "devDependencies": {
17
+ "@sveltejs/adapter-auto": "^6.0.0",
18
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
19
+ "@tailwindcss/vite": "^4.0.0",
20
+ "@sveltejs/kit": "^2.16.0",
21
+ "vite": "^6.2.6",
22
+ "svelte": "^5.0.0",
23
+ "prettier": "^3.4.2",
24
+ "prettier-plugin-svelte": "^3.3.3",
25
+ "prettier-plugin-tailwindcss": "^0.6.11",
26
+ "svelte-check": "^4.0.0",
27
+ "tailwindcss": "^4.0.0",
28
+ "typescript": "5.7.3"
29
+ },
30
+ "dependencies": {}
31
+ }
requirements.txt DELETED
@@ -1,2 +0,0 @@
1
- fastapi
2
- uvicorn[standard]
 
 
 
src/app.css ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ @import "tailwindcss";
2
+
3
+ @custom-variant dark (&:is(.dark *));
4
+
5
+ :root {
6
+ --background: hsl(0 0% 100%);
7
+ --foreground: hsl(240 10% 3.9%);
8
+ --card: hsl(0 0% 100%);
9
+ --card-foreground: hsl(240 10% 3.9%);
10
+ --popover: hsl(0 0% 100%);
11
+ --popover-foreground: hsl(240 10% 3.9%);
12
+ --primary: hsl(240 5.9% 10%);
13
+ --primary-foreground: hsl(0 0% 98%);
14
+ --secondary: hsl(240 4.8% 95.9%);
15
+ --secondary-foreground: hsl(240 5.9% 10%);
16
+ --muted: hsl(240 4.8% 95.9%);
17
+ --muted-foreground: hsl(240 3.8% 46.1%);
18
+ --accent: hsl(240 4.8% 95.9%);
19
+ --accent-foreground: hsl(240 5.9% 10%);
20
+ --destructive: hsl(0 84.2% 60.2%);
21
+ --destructive-foreground: hsl(0 0% 98%);
22
+ --border: hsl(240 5.9% 90%);
23
+ --input: hsl(240 5.9% 90%);
24
+ --ring: hsl(240 10% 3.9%);
25
+ --chart-1: hsl(12 76% 61%);
26
+ --chart-2: hsl(173 58% 39%);
27
+ --chart-3: hsl(197 37% 24%);
28
+ --chart-4: hsl(43 74% 66%);
29
+ --chart-5: hsl(27 87% 67%);
30
+ --radius: 0.6rem;
31
+ --sidebar-background: hsl(0 0% 98%);
32
+ --sidebar-foreground: hsl(240 5.3% 26.1%);
33
+ --sidebar-primary: hsl(240 5.9% 10%);
34
+ --sidebar-primary-foreground: hsl(0 0% 98%);
35
+ --sidebar-accent: hsl(240 4.8% 95.9%);
36
+ --sidebar-accent-foreground: hsl(240 5.9% 10%);
37
+ --sidebar-border: hsl(220 13% 91%);
38
+ --sidebar-ring: hsl(217.2 91.2% 59.8%);
39
+ }
40
+
41
+ .dark {
42
+ --background: hsl(240 10% 3.9%);
43
+ --foreground: hsl(0 0% 98%);
44
+ --card: hsl(240 10% 3.9%);
45
+ --card-foreground: hsl(0 0% 98%);
46
+ --popover: hsl(240 10% 3.9%);
47
+ --popover-foreground: hsl(0 0% 98%);
48
+ --primary: hsl(0 0% 98%);
49
+ --primary-foreground: hsl(240 5.9% 10%);
50
+ --secondary: hsl(240 3.7% 15.9%);
51
+ --secondary-foreground: hsl(0 0% 98%);
52
+ --muted: hsl(240 3.7% 15.9%);
53
+ --muted-foreground: hsl(240 5% 64.9%);
54
+ --accent: hsl(240 3.7% 15.9%);
55
+ --accent-foreground: hsl(0 0% 98%);
56
+ --destructive: hsl(0 62.8% 30.6%);
57
+ --destructive-foreground: hsl(0 0% 98%);
58
+ --border: hsl(240 3.7% 15.9%);
59
+ --input: hsl(240 3.7% 15.9%);
60
+ --ring: hsl(240 4.9% 83.9%);
61
+ --chart-1: hsl(220 70% 50%);
62
+ --chart-2: hsl(160 60% 45%);
63
+ --chart-3: hsl(30 80% 55%);
64
+ --chart-4: hsl(280 65% 60%);
65
+ --chart-5: hsl(340 75% 55%);
66
+ --sidebar-background: hsl(240 5.9% 10%);
67
+ --sidebar-foreground: hsl(240 4.8% 95.9%);
68
+ --sidebar-primary: hsl(224.3 76.3% 48%);
69
+ --sidebar-primary-foreground: hsl(0 0% 100%);
70
+ --sidebar-accent: hsl(240 3.7% 15.9%);
71
+ --sidebar-accent-foreground: hsl(240 4.8% 95.9%);
72
+ --sidebar-border: hsl(240 3.7% 15.9%);
73
+ --sidebar-ring: hsl(217.2 91.2% 59.8%);
74
+ }
75
+
76
+ @theme inline {
77
+ --radius-sm: calc(var(--radius) - 4px);
78
+ --radius-md: calc(var(--radius) - 2px);
79
+ --radius-lg: var(--radius);
80
+ --radius-xl: calc(var(--radius) + 4px);
81
+ --color-background: var(--background);
82
+ --color-foreground: var(--foreground);
83
+ --color-card: var(--card);
84
+ --color-card-foreground: var(--card-foreground);
85
+ --color-popover: var(--popover);
86
+ --color-popover-foreground: var(--popover-foreground);
87
+ --color-primary: var(--primary);
88
+ --color-primary-foreground: var(--primary-foreground);
89
+ --color-secondary: var(--secondary);
90
+ --color-secondary-foreground: var(--secondary-foreground);
91
+ --color-muted: var(--muted);
92
+ --color-muted-foreground: var(--muted-foreground);
93
+ --color-accent: var(--accent);
94
+ --color-accent-foreground: var(--accent-foreground);
95
+ --color-destructive: var(--destructive);
96
+ --color-border: var(--border);
97
+ --color-input: var(--input);
98
+ --color-ring: var(--ring);
99
+ --color-chart-1: var(--chart-1);
100
+ --color-chart-2: var(--chart-2);
101
+ --color-chart-3: var(--chart-3);
102
+ --color-chart-4: var(--chart-4);
103
+ --color-chart-5: var(--chart-5);
104
+ --color-sidebar: var(--sidebar);
105
+ --color-sidebar-foreground: var(--sidebar-foreground);
106
+ --color-sidebar-primary: var(--sidebar-primary);
107
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
108
+ --color-sidebar-accent: var(--sidebar-accent);
109
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
110
+ --color-sidebar-border: var(--sidebar-border);
111
+ --color-sidebar-ring: var(--sidebar-ring);
112
+ }
113
+
114
+ @layer base {
115
+ * {
116
+ @apply border-border outline-ring/50;
117
+ }
118
+ body {
119
+ @apply bg-background text-foreground;
120
+ }
121
+ }
src/app.d.ts ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // See https://svelte.dev/docs/kit/types#app.d.ts
2
+ // for information about these interfaces
3
+ declare global {
4
+ namespace App {
5
+ // interface Error {}
6
+ // interface Locals {}
7
+ // interface PageData {}
8
+ // interface PageState {}
9
+ // interface Platform {}
10
+ }
11
+ }
12
+
13
+ export {};
src/app.html ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <link rel="icon" href="%sveltekit.assets%/favicon.png" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
7
+ %sveltekit.head%
8
+ </head>
9
+ <body data-sveltekit-preload-data="hover">
10
+ <div style="display: contents">%sveltekit.body%</div>
11
+ </body>
12
+ </html>
src/routes/+layout.svelte ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ <script lang="ts">
2
+ import '../app.css';
3
+
4
+ let { children } = $props();
5
+ </script>
6
+
7
+ {@render children()}
src/routes/+page.svelte ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ <script>
2
+ import App from './App.svelte';
3
+ </script>
4
+
5
+ <App />
src/routes/App.svelte ADDED
@@ -0,0 +1,634 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <script>
2
+ import { tick } from 'svelte';
3
+
4
+ // Form state
5
+ let formData = $state({
6
+ product_name: '',
7
+ brand_name: '',
8
+ category: [],
9
+ price: '',
10
+ discounted_price: '',
11
+ description: '',
12
+ product_url: '',
13
+ ad_type: 'social_media',
14
+ ad_tone: 'professional'
15
+ });
16
+
17
+ // UI state
18
+ let isGenerating = $state(false);
19
+ let generatedAd = $state('');
20
+ let isStreaming = $state(false);
21
+ let copySuccess = $state(false);
22
+ let categoryInput = $state('');
23
+ let responseExpanded = $state(true);
24
+ let wordCount = $state(0);
25
+
26
+ // imagen
27
+ let generateImage = $state(false);
28
+ let imageLoading = $state(false);
29
+ let generatedImageUrl = $state(null);
30
+ let imageError = $state(null);
31
+
32
+
33
+ // Form validation
34
+ let errors = $state({});
35
+
36
+ const validateForm = () => {
37
+ const newErrors = {};
38
+
39
+ if (!formData.product_name.trim()) newErrors.product_name = 'Product name is required';
40
+ if (!formData.brand_name.trim()) newErrors.brand_name = 'Brand name is required';
41
+ if (formData.category.length === 0) newErrors.category = 'At least one category is required';
42
+ if (!formData.price || formData.price <= 0) newErrors.price = 'Valid price is required';
43
+ if (!formData.description.trim()) newErrors.description = 'Description is required';
44
+
45
+ errors = newErrors;
46
+ return Object.keys(newErrors).length === 0;
47
+ };
48
+
49
+ const addCategory = () => {
50
+ if (categoryInput.trim() && !formData.category.includes(categoryInput.trim())) {
51
+ formData.category = [...formData.category, categoryInput.trim()];
52
+ categoryInput = '';
53
+ }
54
+ };
55
+
56
+ const removeCategory = (index) => {
57
+ formData.category = formData.category.filter((_, i) => i !== index);
58
+ };
59
+
60
+ const handleCategoryKeydown = (event) => {
61
+ if (event.key === 'Enter') {
62
+ event.preventDefault();
63
+ addCategory();
64
+ }
65
+ };
66
+
67
+ // imagen api
68
+ const generateImageAPI = async () => {
69
+ try {
70
+ imageLoading = true;
71
+ imageError = null;
72
+
73
+ const response = await fetch('http://127.0.0.1:8000/api/v1/generate-image', {
74
+ method: 'POST',
75
+ headers: {
76
+ 'accept': 'application/json',
77
+ 'Content-Type': 'application/json'
78
+ },
79
+ body: JSON.stringify({
80
+ product_name: formData.product_name,
81
+ brand_name: formData.brand_name,
82
+ description: formData.description
83
+ })
84
+ });
85
+
86
+ if (!response.ok) {
87
+ throw new Error(`HTTP error! status: ${response.status}`);
88
+ }
89
+
90
+ const imageData = await response.json();
91
+
92
+ if (imageData.image_path) {
93
+ const imageFileName = imageData.image_path.split('/').pop();
94
+ generatedImageUrl = `http://127.0.0.1:8000/api/v1/images/${imageFileName}`;
95
+ } else {
96
+ throw new Error('No image path received from API');
97
+ }
98
+
99
+ } catch (error) {
100
+ console.error('Image generation error:', error);
101
+ imageError = error.message;
102
+ generatedImageUrl = null;
103
+ } finally {
104
+ imageLoading = false;
105
+ }
106
+ };
107
+
108
+ // retry
109
+ const retryImageGeneration = () => {
110
+ imageError = null;
111
+ generateImageAPI();
112
+ };
113
+
114
+ const generateAd = async () => {
115
+ if (!validateForm()) return;
116
+
117
+ isGenerating = true;
118
+ isStreaming = true;
119
+ generatedAd = '';
120
+ responseExpanded = true;
121
+
122
+ try {
123
+ // Run ad generation and image generation in parallel
124
+ const tasks = [
125
+ fetch('http://127.0.0.1:8000/api/v1/generate-stream', {
126
+ method: 'POST',
127
+ headers: { 'Content-Type': 'application/json' },
128
+ body: JSON.stringify(formData)
129
+ }),
130
+ generateImage ? generateImageAPI() : Promise.resolve()
131
+ ];
132
+
133
+ const [adResponse] = await Promise.all(tasks);
134
+
135
+ if (!adResponse.body) throw new Error('No response body');
136
+
137
+ const reader = adResponse.body.getReader();
138
+ const decoder = new TextDecoder();
139
+ let done = false;
140
+
141
+ while (!done) {
142
+ const { value, done: doneReading } = await reader.read();
143
+ done = doneReading;
144
+ if (value) {
145
+ const chunk = decoder.decode(value);
146
+ const lines = chunk.split('\n').filter(line => line.trim() !== '');
147
+ for (const line of lines) {
148
+ try {
149
+ const parsed = JSON.parse(line);
150
+ if (parsed.status === 'streaming' && parsed.content) {
151
+ generatedAd += parsed.content;
152
+ await tick();
153
+ const responseArea = document.getElementById('response-area');
154
+ if (responseArea) {
155
+ responseArea.scrollTop = responseArea.scrollHeight;
156
+ }
157
+ }
158
+ } catch (err) {
159
+ console.error('Failed to parse streaming response:', err);
160
+ }
161
+ }
162
+ }
163
+ }
164
+ wordCount = generatedAd.trim().split(/\s+/).filter(word => word.length > 0).length;
165
+ } catch (err) {
166
+ console.error('Streaming error:', err);
167
+ generatedAd = '[ERROR] ' + (err instanceof Error ? err.message : 'Unknown error');
168
+ } finally {
169
+ isGenerating = false;
170
+ isStreaming = false;
171
+ }
172
+ };
173
+
174
+ const copyToClipboard = async () => {
175
+ try {
176
+ await navigator.clipboard.writeText(generatedAd);
177
+ copySuccess = true;
178
+ setTimeout(() => copySuccess = false, 2000);
179
+ } catch (err) {
180
+ console.error('Failed to copy text: ', err);
181
+ }
182
+ };
183
+
184
+ const clearResponse = () => {
185
+ generatedAd = '';
186
+ responseExpanded = false;
187
+ wordCount = 0;
188
+ generatedImageUrl = null;
189
+ imageError = null;
190
+ generateImage = false;
191
+ };
192
+
193
+ </script>
194
+
195
+ <div class="min-h-screen bg-gradient-to-br from-slate-50 via-blue-50 to-indigo-100">
196
+ <div class="container mx-auto px-2 py-2 max-w-10xl">
197
+ <!-- Header Section -->
198
+ <header class="text-center mb-12">
199
+ <div class="inline-flex items-center justify-center w-16 h-16 bg-gradient-to-r from-blue-500 to-indigo-600 rounded-2xl mb-6 shadow-lg">
200
+ <svg class="w-8 h-8 text-white" fill="none" stroke="currentColor" viewBox="0 0 24 24">
201
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
202
+ </svg>
203
+ </div>
204
+ <h1 class="text-4xl md:text-5xl font-bold bg-gradient-to-r from-gray-900 to-gray-600 bg-clip-text text-transparent mb-4">
205
+ AI Ad Generator
206
+ </h1>
207
+ <p class="text-xl text-gray-600 max-w-2xl mx-auto leading-relaxed">
208
+ Transform your product details into compelling, conversion-focused advertisements using the power of artificial intelligence
209
+ </p>
210
+ </header>
211
+
212
+ <!-- Main Content -->
213
+ <div class="grid grid-cols-1 lg:grid-cols-2 gap-6 items-stretch">
214
+ <!-- Form Section -->
215
+ <div class="bg-white/80 backdrop-blur-md rounded-3xl p-10 shadow-2xl border border-white/30 flex flex-col justify-between lg:col-span-1 lg:min-h-[600px]">
216
+ <h2 class="text-2xl font-semibold text-gray-800 mb-6 flex items-center">
217
+ <svg class="w-6 h-6 mr-3 text-blue-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
218
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
219
+ </svg>
220
+ Product Details
221
+ </h2>
222
+
223
+ <form onsubmit={event => { event.preventDefault(); generateAd(); }} class="space-y-6">
224
+ <!-- Product Name -->
225
+ <div>
226
+ <label for="product_name" class="block text-sm font-medium text-gray-700 mb-2">Product Name *</label>
227
+ <input
228
+ id="product_name"
229
+ type="text"
230
+ bind:value={formData.product_name}
231
+ placeholder="e.g., Karlsburg Men's Solid Formal Shirt"
232
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
233
+ class:border-red-300={errors.product_name}
234
+ />
235
+ {#if errors.product_name}
236
+ <p class="text-red-500 text-sm mt-1">{errors.product_name}</p>
237
+ {/if}
238
+ </div>
239
+
240
+ <!-- Brand Name -->
241
+ <div>
242
+ <label for="brand_name" class="block text-sm font-medium text-gray-700 mb-2">Brand Name *</label>
243
+ <input
244
+ id="brand_name"
245
+ type="text"
246
+ bind:value={formData.brand_name}
247
+ placeholder="e.g., Alice Bag"
248
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
249
+ class:border-red-300={errors.brand_name}
250
+ />
251
+ {#if errors.brand_name}
252
+ <p class="text-red-500 text-sm mt-1">{errors.brand_name}</p>
253
+ {/if}
254
+ </div>
255
+
256
+ <!-- Category -->
257
+ <div>
258
+ <label for="category" class="block text-sm font-medium text-gray-700 mb-2">Categories *</label>
259
+ <div class="space-y-3">
260
+ <div class="flex">
261
+ <input
262
+ id="category"
263
+ type="text"
264
+ bind:value={categoryInput}
265
+ onkeydown={handleCategoryKeydown}
266
+ placeholder="Add a category and press Enter"
267
+ class="flex-1 px-4 py-3 rounded-l-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
268
+ />
269
+ <button
270
+ type="button"
271
+ onclick={addCategory}
272
+ class="px-4 py-3 bg-blue-500 text-white rounded-r-xl hover:bg-blue-600 transition-colors duration-200"
273
+ aria-label="Add Category"
274
+ >
275
+ Add
276
+ </button>
277
+ </div>
278
+ {#if formData.category.length > 0}
279
+ <div class="flex flex-wrap gap-2">
280
+ {#each formData.category as cat, index}
281
+ <span class="inline-flex items-center px-3 py-1 rounded-full text-sm bg-blue-100 text-blue-800">
282
+ {cat}
283
+ <button
284
+ type="button"
285
+ onclick={() => removeCategory(index)}
286
+ class="ml-2 text-blue-600 hover:text-blue-800"
287
+ aria-label="Remove Category"
288
+ >
289
+ ×
290
+ </button>
291
+ </span>
292
+ {/each}
293
+ </div>
294
+ {/if}
295
+ </div>
296
+ {#if errors.category}
297
+ <p class="text-red-500 text-sm mt-1">{errors.category}</p>
298
+ {/if}
299
+ </div>
300
+
301
+ <!-- Price Fields -->
302
+ <div class="grid md:grid-cols-2 gap-4">
303
+ <div>
304
+ <label for="price" class="block text-sm font-medium text-gray-700 mb-2">Price ($) *</label>
305
+ <input
306
+ id="price"
307
+ type="number"
308
+ step="0.01"
309
+ min="0"
310
+ bind:value={formData.price}
311
+ placeholder="45.00"
312
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
313
+ class:border-red-300={errors.price}
314
+ />
315
+ {#if errors.price}
316
+ <p class="text-red-500 text-sm mt-1">{errors.price}</p>
317
+ {/if}
318
+ </div>
319
+ <div>
320
+ <label for="discounted_price" class="block text-sm font-medium text-gray-700 mb-2">Sale Price ($)</label>
321
+ <input
322
+ id="discounted_price"
323
+ type="number"
324
+ step="0.01"
325
+ min="0"
326
+ bind:value={formData.discounted_price}
327
+ placeholder="30.00"
328
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
329
+ />
330
+ </div>
331
+ </div>
332
+
333
+ <!-- Description -->
334
+ <div>
335
+ <label for="description" class="block text-sm font-medium text-gray-700 mb-2">Description *</label>
336
+ <textarea
337
+ id="description"
338
+ bind:value={formData.description}
339
+ placeholder="Describe your product's key features and benefits..."
340
+ rows="4"
341
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50 resize-none"
342
+ class:border-red-300={errors.description}
343
+ ></textarea>
344
+ {#if errors.description}
345
+ <p class="text-red-500 text-sm mt-1">{errors.description}</p>
346
+ {/if}
347
+ </div>
348
+
349
+ <!-- Image Generation -->
350
+ <div>
351
+ <label class="block text-sm font-medium text-gray-700 mb-3">
352
+ Generate Image?
353
+ <button
354
+ type="button"
355
+ class="ml-2 text-gray-400 hover:text-gray-600"
356
+ title="Image generation takes 10-30 seconds"
357
+ aria-label="Image generation takes 10-30 seconds"
358
+ >
359
+ <svg class="w-4 h-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
360
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
361
+ </button>
362
+ </label>
363
+ <div class="flex space-x-6">
364
+ <label class="flex items-center">
365
+ <input
366
+ type="radio"
367
+ bind:group={generateImage}
368
+ value={true}
369
+ class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 focus:ring-blue-500 focus:ring-2"
370
+ />
371
+ <span class="ml-2 text-sm font-medium text-gray-700">Yes</span>
372
+ </label>
373
+ <label class="flex items-center">
374
+ <input
375
+ type="radio"
376
+ bind:group={generateImage}
377
+ value={false}
378
+ class="w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 focus:ring-blue-500 focus:ring-2"
379
+ />
380
+ <span class="ml-2 text-sm font-medium text-gray-700">No</span>
381
+ </label>
382
+ </div>
383
+
384
+ {#if generateImage && imageLoading}
385
+ <div class="mt-3 flex items-center text-blue-600">
386
+ <svg class="animate-spin -ml-1 mr-3 h-4 w-4" fill="none" viewBox="0 0 24 24">
387
+ <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
388
+ <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
389
+ </svg>
390
+ <span class="text-sm">Generating image... Please wait (10-30 seconds)</span>
391
+ </div>
392
+ {/if}
393
+
394
+ {#if imageError}
395
+ <div class="mt-3 p-3 bg-red-50 border border-red-200 rounded-lg">
396
+ <div class="flex items-center">
397
+ <svg class="w-4 h-4 text-red-500 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
398
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path>
399
+ </svg>
400
+ <span class="text-sm text-red-700">Failed to generate image</span>
401
+ </div>
402
+ <div class="mt-2 flex space-x-2">
403
+ <button
404
+ type="button"
405
+ onclick={retryImageGeneration}
406
+ class="text-xs bg-red-100 text-red-700 px-2 py-1 rounded hover:bg-red-200 transition-colors duration-200"
407
+ aria-label="Retry Image Generation"
408
+ >
409
+ Retry
410
+ </button>
411
+ <button
412
+ type="button"
413
+ onclick={() => { generateImage = false; imageError = null; }}
414
+ class="text-xs bg-gray-100 text-gray-700 px-2 py-1 rounded hover:bg-gray-200 transition-colors duration-200"
415
+ aria-label="Continue without Image Generation"
416
+ >
417
+ Continue without
418
+ </button>
419
+ </div>
420
+ </div>
421
+ {/if}
422
+ </div>
423
+
424
+ <!-- URLs -->
425
+ <div class="space-y-4">
426
+ <div>
427
+ <label for="product_url" class="block text-sm font-medium text-gray-700 mb-2">Product URL</label>
428
+ <input
429
+ id="product_url"
430
+ type="url"
431
+ bind:value={formData.product_url}
432
+ placeholder="https://example.com/product-page"
433
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
434
+ />
435
+ </div>
436
+ </div>
437
+
438
+ <!-- Configuration -->
439
+ <div class="grid md:grid-cols-2 gap-4">
440
+ <div>
441
+ <label for="ad_type" class="block text-sm font-medium text-gray-700 mb-2">Ad Type</label>
442
+ <select
443
+ id="ad_type"
444
+ bind:value={formData.ad_type}
445
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
446
+ >
447
+ <option value="social_media">Social Media</option>
448
+ <option value="email">Email</option>
449
+ <option value="product_description">Product Description</option>
450
+ </select>
451
+ </div>
452
+ <div>
453
+ <label for="ad_tone" class="block text-sm font-medium text-gray-700 mb-2">Ad Tone</label>
454
+ <select
455
+ id="ad_tone"
456
+ bind:value={formData.ad_tone}
457
+ class="w-full px-4 py-3 rounded-xl border border-gray-200 focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 bg-white/50"
458
+ >
459
+ <option value="professional">Professional</option>
460
+ <option value="friendly">Friendly</option>
461
+ <option value="urgent">Urgent</option>
462
+ <option value="luxurious">Luxurious</option>
463
+ <option value="playful">Playful</option>
464
+ <option value="minimalist">Minimalist</option>
465
+ <option value="bold">Bold</option>
466
+ <option value="conversational">Conversational</option>
467
+ </select>
468
+ </div>
469
+ </div>
470
+
471
+ <!-- Generate Button -->
472
+ <button
473
+ type="submit"
474
+ disabled={isGenerating}
475
+ class="w-full bg-gradient-to-r from-blue-500 to-indigo-600 text-white font-semibold py-4 px-8 rounded-xl hover:from-blue-600 hover:to-indigo-700 focus:ring-4 focus:ring-blue-200 transition-all duration-200 shadow-lg hover:shadow-xl disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center"
476
+ aria-label="Generate Ad"
477
+ >
478
+ {#if isGenerating}
479
+ <svg class="animate-spin -ml-1 mr-3 h-5 w-5 text-white" fill="none" viewBox="0 0 24 24">
480
+ <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
481
+ <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
482
+ </svg>
483
+ Generating...
484
+ {:else}
485
+ <svg class="w-5 h-5 mr-2" fill="none" stroke="currentColor" viewBox="0 0 24 24">
486
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 10V3L4 14h7v7l9-11h-7z"></path>
487
+ </svg>
488
+ Generate Ad
489
+ {/if}
490
+ </button>
491
+ </form>
492
+ </div>
493
+
494
+ <!-- AI Response Section -->
495
+ <div class="bg-white/90 backdrop-blur-md rounded-3xl shadow-2xl border border-white/30 flex flex-col lg:col-span-1 lg:min-h-[50%] h-auto">
496
+ <div class="p-6 border-b border-gray-100">
497
+ <div class="flex items-center justify-between">
498
+ <h2 class="text-2xl font-semibold text-gray-800 flex items-center">
499
+ <svg class="w-6 h-6 mr-3 text-indigo-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
500
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 01-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"></path>
501
+ </svg>
502
+ Generated Ad
503
+ </h2>
504
+ <button
505
+ onclick={() => responseExpanded = !responseExpanded}
506
+ class="p-2 text-gray-400 hover:text-gray-600 transition-colors duration-200"
507
+ aria-label="Toggle Response"
508
+ >
509
+ <svg class="w-5 h-5 transform transition-transform duration-200" class:rotate-180={!responseExpanded} fill="none" stroke="currentColor" viewBox="0 0 24 24">
510
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
511
+ </svg>
512
+ </button>
513
+ </div>
514
+ {#if generatedAd}
515
+ <div class="flex items-center justify-between mt-2">
516
+ <p class="text-sm text-gray-500">{wordCount} words</p>
517
+ <div class="flex space-x-2">
518
+ <button
519
+ onclick={copyToClipboard}
520
+ class="inline-flex items-center px-3 py-1 text-sm bg-green-100 text-green-700 rounded-lg hover:bg-green-200 transition-colors duration-200"
521
+ class:bg-green-200={copySuccess}
522
+ aria-label="Copy Ad"
523
+ >
524
+ {#if copySuccess}
525
+ <svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
526
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7"></path>
527
+ </svg>
528
+ Copied!
529
+ {:else}
530
+ <svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
531
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z"></path>
532
+ </svg>
533
+ Copy
534
+ {/if}
535
+ </button>
536
+ <button
537
+ onclick={clearResponse}
538
+ class="inline-flex items-center px-3 py-1 text-sm bg-gray-100 text-gray-700 rounded-lg hover:bg-gray-200 transition-colors duration-200"
539
+ aria-label="Clear Response"
540
+ >
541
+ <svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
542
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"></path>
543
+ </svg>
544
+ Clear
545
+ </button>
546
+ </div>
547
+ </div>
548
+ {/if}
549
+ </div>
550
+ {#if responseExpanded}
551
+ <div class="flex-1 p-2 overflow-y-auto">
552
+ {#if !generatedAd && !isGenerating}
553
+ <div class="flex flex-col items-center justify-center h-64 text-gray-400">
554
+ <svg class="w-16 h-16 mb-4" fill="none" stroke="currentColor" viewBox="0 0 24 24">
555
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="1" d="M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z"></path>
556
+ </svg>
557
+ <p class="text-lg font-medium">Your AI-generated ad will appear here</p>
558
+ <p class="text-sm">Fill out the form and click "Generate Ad" to get started</p>
559
+ </div>
560
+ {:else}
561
+ <div
562
+ id="response-area"
563
+ class="bg-gradient-to-br from-gray-50 to-gray-100 rounded-2xl p-6 min-h-[50vh] max-h-[50vh] overflow-y-auto"
564
+ >
565
+ {#if isGenerating && !generatedAd}
566
+ <div class="flex items-center text-gray-500">
567
+ <svg class="animate-spin -ml-1 mr-3 h-5 w-5" fill="none" viewBox="0 0 24 24">
568
+ <circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle>
569
+ <path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
570
+ </svg>
571
+ AI is crafting your perfect ad...
572
+ </div>
573
+ {:else if generatedAd}
574
+ <div class="prose prose-gray max-w-none">
575
+ <textarea
576
+ class="whitespace-pre-wrap font-sans text-gray-800 leading-relaxed bg-transparent border border-gray-300 rounded-md p-2 w-full resize-none focus:outline-none focus:ring-2 focus:ring-blue-500 h-[40vh]"
577
+ bind:value={generatedAd}
578
+ ></textarea>
579
+ {#if isStreaming}
580
+ <span class="inline-block w-2 h-5 bg-blue-500 animate-pulse ml-1"></span>
581
+ {/if}
582
+ </div>
583
+ {/if}
584
+ </div>
585
+ {/if}
586
+ </div>
587
+ {/if}
588
+ {#if generatedImageUrl}
589
+ <div class="mt-1">
590
+ <h3 class="text-lg font-medium text-gray-800 mb-3 flex items-center">
591
+ <svg class="w-5 h-5 mr-2 text-green-500" fill="none" stroke="currentColor" viewBox="0 0 24 24">
592
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z"></path>
593
+ </svg>
594
+ Generated Image:
595
+ </h3>
596
+ <div class="bg-white rounded-xl p-4 shadow-sm border border-gray-200">
597
+ <img
598
+ src={generatedImageUrl || "/placeholder.svg"}
599
+ alt={`Generated image for ${formData.product_name} by ${formData.brand_name}`}
600
+ class="w-full max-w-sm mx-auto rounded-lg shadow-md"
601
+ style="max-height: 300px; object-fit: contain;"
602
+ onload={() => console.log('Image loaded successfully')}
603
+ onerror={() => {
604
+ console.error('Failed to load generated image');
605
+ imageError = 'Failed to load generated image';
606
+ generatedImageUrl = null;
607
+ }}
608
+ />
609
+ <div class="mt-3 flex justify-center">
610
+ <a
611
+ href={generatedImageUrl}
612
+ download={`${formData.product_name}_${formData.brand_name}_ad_image.png`}
613
+ class="inline-flex items-center px-3 py-1 text-sm bg-blue-100 text-blue-700 rounded-lg hover:bg-blue-200 transition-colors duration-200"
614
+ >
615
+ <svg class="w-4 h-4 mr-1" fill="none" stroke="currentColor" viewBox="0 0 24 24">
616
+ <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"></path>
617
+ </svg>
618
+ Download Image
619
+ </a>
620
+ </div>
621
+ </div>
622
+ </div>
623
+ {/if}
624
+ </div>
625
+ </div>
626
+ </div>
627
+ </div>
628
+
629
+ <style>
630
+ :global(body) {
631
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
632
+ }
633
+ </style>
634
+
static/favicon.png ADDED
svelte.config.js ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import adapter from '@sveltejs/adapter-auto';
2
+ import { vitePreprocess } from '@sveltejs/vite-plugin-svelte';
3
+
4
+ /** @type {import('@sveltejs/kit').Config} */
5
+ const config = {
6
+ // Consult https://svelte.dev/docs/kit/integrations
7
+ // for more information about preprocessors
8
+ preprocess: vitePreprocess(),
9
+
10
+ kit: {
11
+ // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
12
+ // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
13
+ // See https://svelte.dev/docs/kit/adapters for more information about adapters.
14
+ adapter: adapter()
15
+ }
16
+ };
17
+
18
+ export default config;
tsconfig.json ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "extends": "./.svelte-kit/tsconfig.json",
3
+ "compilerOptions": {
4
+ "allowJs": true,
5
+ "checkJs": true,
6
+ "esModuleInterop": true,
7
+ "forceConsistentCasingInFileNames": true,
8
+ "resolveJsonModule": true,
9
+ "skipLibCheck": true,
10
+ "sourceMap": true,
11
+ "strict": true,
12
+ "moduleResolution": "bundler"
13
+ }
14
+ // Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
15
+ // except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
16
+ //
17
+ // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
18
+ // from the referenced tsconfig.json - TypeScript does not merge them in
19
+ }
vite.config.ts ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ import tailwindcss from '@tailwindcss/vite';
2
+ import { sveltekit } from '@sveltejs/kit/vite';
3
+ import { defineConfig } from 'vite';
4
+
5
+ export default defineConfig({
6
+ plugins: [tailwindcss(), sveltekit()]
7
+ });