@cryptotaxi247 / CoPilot / commits / 7cb28705

362 ability to have binaries sent to virus total andor joesandboxcom (#464)

* Add VirusTotal file submission and analysis endpoints with corresponding schemas * chore: update frontend dependencies * feat: added virus total form * lint * precommit fixes --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>

taylor_socfortress committed Jun 30, 2025 at 08:58 UTC 7cb287054d92c436f2d4272d1ed907bc47b36917
10 files changed +1693 -871
backend/app/threat_intel/routes/socfortress.py
+199
@@ -2,8 +2,11 @@ from datetime import datetime
2
3 from fastapi import APIRouter
4 from fastapi import Depends
5 +from fastapi import File
6 +from fastapi import Form
7 from fastapi import HTTPException
8 from fastapi import Security
9 +from fastapi import UploadFile
10 from loguru import logger
11 from sqlalchemy.ext.asyncio import AsyncSession
12
@@ -33,6 +36,10 @@ from app.threat_intel.schema.socfortress import (
36 VelociraptorArtifactRecommendationResponse,
37 )
38 from app.threat_intel.schema.socfortress import VirusTotalThreatIntelRequest
39 +from app.threat_intel.schema.virustotal import FileAnalysisResponse
40 +from app.threat_intel.schema.virustotal import FileReportResponse
41 +from app.threat_intel.schema.virustotal import FileSubmissionRequest
42 +from app.threat_intel.schema.virustotal import FileSubmissionResponse
43 from app.threat_intel.schema.virustotal import VirusTotalRouteResponse
44 from app.threat_intel.services.socfortress import invoke_virustotal_api
45 from app.threat_intel.services.socfortress import socfortress_ai_alert_lookup
@@ -44,6 +51,10 @@ from app.threat_intel.services.socfortress import (
51 from app.threat_intel.services.socfortress import (
52 socfortress_wazuh_exclusion_rule_lookup,
53 )
54 +from app.threat_intel.services.virustotal_file import get_file_analysis_status
55 +from app.threat_intel.services.virustotal_file import get_file_report
56 +from app.threat_intel.services.virustotal_file import submit_and_wait_for_analysis
57 +from app.threat_intel.services.virustotal_file import submit_file_to_virustotal
58 from app.utils import get_connector_attribute
59
60 # App specific imports
@@ -79,6 +90,51 @@ async def ensure_api_key_exists(session: AsyncSession = Depends(get_db)) -> bool
90 return True
91
92
93 +async def ensure_virustotal_connector(session: AsyncSession = Depends(get_db)) -> dict:
94 + """
95 + Ensures that the VirusTotal connector is properly configured.
96 +
97 + Args:
98 + session (AsyncSession): The database session dependency
99 +
100 + Returns:
101 + dict: Dictionary containing API key and URL
102 +
103 + Raises:
104 + HTTPException: If connector is not configured or verified
105 + """
106 + # Check if the connector is verified
107 + if not await get_connector_attribute(
108 + connector_name="VirusTotal",
109 + column_name="connector_verified",
110 + session=session,
111 + ):
112 + raise HTTPException(
113 + status_code=500,
114 + detail="VirusTotal connector is not verified.",
115 + )
116 +
117 + api_key = await get_connector_attribute(
118 + connector_name="VirusTotal",
119 + column_name="connector_api_key",
120 + session=session,
121 + )
122 +
123 + url = await get_connector_attribute(
124 + connector_name="VirusTotal",
125 + column_name="connector_url",
126 + session=session,
127 + )
128 +
129 + if not api_key:
130 + raise HTTPException(
131 + status_code=500,
132 + detail="VirusTotal API key not found in the database.",
133 + )
134 +
135 + return {"api_key": api_key, "url": url}
136 +
137 +
138 @threat_intel_socfortress_router.post(
139 "/socfortress",
140 response_model=IoCResponse,
@@ -169,6 +225,149 @@ async def threat_intel_virustotal(
225 )
226
227
228 +@threat_intel_socfortress_router.post(
229 + "/virustotal/file/submit",
230 + response_model=FileSubmissionResponse,
231 + description="Submit a file to VirusTotal for analysis",
232 + dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
233 +)
234 +async def submit_file_for_analysis(
235 + file: UploadFile = File(..., description="File to analyze (max 32MB for free API)"),
236 + password: str = Form(None, description="Password for encrypted files"),
237 + vt_config: dict = Depends(ensure_virustotal_connector),
238 +):
239 + """
240 + Submit a file to VirusTotal for malware analysis.
241 +
242 + This endpoint allows authorized users to upload files for analysis.
243 + The file will be submitted to VirusTotal and an analysis ID will be returned.
244 +
245 + Parameters:
246 + - file: UploadFile - The file to be analyzed
247 + - password: str (optional) - Password for encrypted files
248 + - vt_config: dict - VirusTotal connector configuration (injected dependency)
249 +
250 + Returns:
251 + - FileSubmissionResponse: Contains the analysis ID for tracking
252 + """
253 + logger.info(f"Submitting file {file.filename} to VirusTotal for analysis")
254 +
255 + # Validate file size (32MB limit for free API)
256 + if file.size and file.size > 32 * 1024 * 1024: # 32MB
257 + raise HTTPException(status_code=413, detail="File too large. Maximum file size is 32MB for free API keys.")
258 +
259 + # Create request object
260 + request = FileSubmissionRequest(password=password)
261 +
262 + # Submit the file
263 + return await submit_file_to_virustotal(api_key=vt_config["api_key"], file=file, request=request)
264 +
265 +
266 +@threat_intel_socfortress_router.get(
267 + "/virustotal/analysis/{analysis_id}",
268 + response_model=FileAnalysisResponse,
269 + description="Get the status of a file analysis",
270 + dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
271 +)
272 +async def get_analysis_status(
273 + analysis_id: str,
274 + vt_config: dict = Depends(ensure_virustotal_connector),
275 +):
276 + """
277 + Get the current status of a file analysis.
278 +
279 + Parameters:
280 + - analysis_id: str - The analysis ID returned from file submission
281 + - vt_config: dict - VirusTotal connector configuration (injected dependency)
282 +
283 + Returns:
284 + - FileAnalysisResponse: Current analysis status and results
285 + """
286 + logger.info(f"Getting analysis status for ID: {analysis_id}")
287 +
288 + return await get_file_analysis_status(api_key=vt_config["api_key"], analysis_id=analysis_id)
289 +
290 +
291 +@threat_intel_socfortress_router.get(
292 + "/virustotal/file/{file_id}",
293 + response_model=FileReportResponse,
294 + description="Get detailed analysis report for a file",
295 + dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
296 +)
297 +async def get_file_analysis_report(
298 + file_id: str,
299 + vt_config: dict = Depends(ensure_virustotal_connector),
300 +):
301 + """
302 + Get the detailed analysis report for a file.
303 +
304 + Parameters:
305 + - file_id: str - The file ID (hash) to get the report for
306 + - vt_config: dict - VirusTotal connector configuration (injected dependency)
307 +
308 + Returns:
309 + - FileReportResponse: Detailed analysis report
310 + """
311 + logger.info(f"Getting file report for ID: {file_id}")
312 +
313 + return await get_file_report(api_key=vt_config["api_key"], file_id=file_id)
314 +
315 +
316 +@threat_intel_socfortress_router.post(
317 + "/virustotal/file/analyze",
318 + response_model=FileReportResponse,
319 + description="Submit a file and wait for analysis completion",
320 + dependencies=[Security(AuthHandler().require_any_scope("admin", "analyst"))],
321 +)
322 +async def analyze_file_complete(
323 + file: UploadFile = File(..., description="File to analyze (max 32MB for free API)"),
324 + password: str = Form(None, description="Password for encrypted files"),
325 + max_wait_time: int = Form(300, description="Maximum wait time in seconds (default: 300)"),
326 + poll_interval: int = Form(10, description="Polling interval in seconds (default: 10)"),
327 + vt_config: dict = Depends(ensure_virustotal_connector),
328 +):
329 + """
330 + Submit a file to VirusTotal and wait for the analysis to complete.
331 +
332 + This endpoint combines file submission and result retrieval into a single call.
333 + It will wait for the analysis to complete before returning the results.
334 +
335 + Parameters:
336 + - file: UploadFile - The file to be analyzed
337 + - password: str (optional) - Password for encrypted files
338 + - max_wait_time: int - Maximum time to wait for analysis completion (seconds)
339 + - poll_interval: int - Time between status checks (seconds)
340 + - vt_config: dict - VirusTotal connector configuration (injected dependency)
341 +
342 + Returns:
343 + - FileReportResponse: Complete analysis report
344 + """
345 + logger.info(f"Starting complete analysis for file {file.filename}")
346 +
347 + # Validate file size
348 + if file.size and file.size > 32 * 1024 * 1024: # 32MB
349 + raise HTTPException(status_code=413, detail="File too large. Maximum file size is 32MB for free API keys.")
350 +
351 + # Validate wait time parameters
352 + if max_wait_time < 30 or max_wait_time > 600: # 30 seconds to 10 minutes
353 + raise HTTPException(status_code=400, detail="max_wait_time must be between 30 and 600 seconds")
354 +
355 + if poll_interval < 5 or poll_interval > 60: # 5 seconds to 1 minute
356 + raise HTTPException(status_code=400, detail="poll_interval must be between 5 and 60 seconds")
357 +
358 + # Create request object
359 + request = FileSubmissionRequest(password=password)
360 +
361 + # Submit and wait for analysis
362 + return await submit_and_wait_for_analysis(
363 + api_key=vt_config["api_key"],
364 + file=file,
365 + request=request,
366 + max_wait_time=max_wait_time,
367 + poll_interval=poll_interval,
368 + )
369 +
370 +
371 @threat_intel_socfortress_router.post(
372 "/process_name",
373 response_model=SocfortressProcessNameAnalysisResponse,
backend/app/threat_intel/schema/virustotal.py
+105
@@ -77,3 +77,108 @@ class VirusTotalRouteResponse(BaseModel):
77 data: VirusTotalResponse
78 success: bool
79 message: str
80 +
81 +
82 +# New schemas for file submission
83 +class FileSubmissionRequest(BaseModel):
84 + password: Optional[str] = Field(default=None, description="Password for encrypted files")
85 +
86 + class Config:
87 + extra = Extra.allow
88 +
89 +
90 +class FileSubmissionData(BaseModel):
91 + type: str
92 + id: str
93 +
94 + class Config:
95 + extra = Extra.allow
96 +
97 +
98 +class FileSubmissionResponse(BaseModel):
99 + data: FileSubmissionData
100 + success: bool
101 + message: str
102 +
103 + class Config:
104 + extra = Extra.allow
105 +
106 +
107 +class FileAnalysisStats(BaseModel):
108 + harmless: int = 0
109 + malicious: int = 0
110 + suspicious: int = 0
111 + undetected: int = 0
112 + timeout: int = 0
113 + confirmed_timeout: int = 0
114 + failure: int = 0
115 + type_unsupported: int = 0
116 +
117 + class Config:
118 + extra = Extra.allow
119 +
120 +
121 +class FileAnalysisAttributes(BaseModel):
122 + date: int
123 + status: str
124 + stats: FileAnalysisStats
125 +
126 + class Config:
127 + extra = Extra.allow
128 +
129 +
130 +class FileAnalysisData(BaseModel):
131 + type: str
132 + id: str
133 + attributes: FileAnalysisAttributes
134 +
135 + class Config:
136 + extra = Extra.allow
137 +
138 +
139 +class FileAnalysisResponse(BaseModel):
140 + data: FileAnalysisData
141 + success: bool
142 + message: str
143 +
144 + class Config:
145 + extra = Extra.allow
146 +
147 +
148 +class FileReportAttributes(BaseModel):
149 + md5: Optional[str] = None
150 + sha1: Optional[str] = None
151 + sha256: Optional[str] = None
152 + size: Optional[int] = None
153 + type_description: Optional[str] = None
154 + type_tag: Optional[str] = None
155 + creation_date: Optional[int] = None
156 + first_submission_date: Optional[int] = None
157 + last_submission_date: Optional[int] = None
158 + last_analysis_date: Optional[int] = None
159 + last_analysis_stats: Optional[FileAnalysisStats] = None
160 + last_analysis_results: Optional[Dict[str, AnalysisResult]] = None
161 + reputation: Optional[int] = None
162 + times_submitted: Optional[int] = None
163 + total_votes: Optional[TotalVotes] = None
164 +
165 + class Config:
166 + extra = Extra.allow
167 +
168 +
169 +class FileReportData(BaseModel):
170 + type: str
171 + id: str
172 + attributes: FileReportAttributes
173 +
174 + class Config:
175 + extra = Extra.allow
176 +
177 +
178 +class FileReportResponse(BaseModel):
179 + data: FileReportData
180 + success: bool
181 + message: str
182 +
183 + class Config:
184 + extra = Extra.allow
backend/app/threat_intel/services/virustotal_file.py new
+243
@@ -0,0 +1,243 @@
1 +import asyncio
2 +
3 +import httpx
4 +from fastapi import HTTPException
5 +from fastapi import UploadFile
6 +from loguru import logger
7 +
8 +from app.threat_intel.schema.virustotal import FileAnalysisResponse
9 +from app.threat_intel.schema.virustotal import FileReportResponse
10 +from app.threat_intel.schema.virustotal import FileSubmissionRequest
11 +from app.threat_intel.schema.virustotal import FileSubmissionResponse
12 +
13 +
14 +async def submit_file_to_virustotal(
15 + api_key: str,
16 + file: UploadFile,
17 + request: FileSubmissionRequest,
18 +) -> FileSubmissionResponse:
19 + """
20 + Submit a file to VirusTotal for analysis.
21 +
22 + Args:
23 + api_key (str): The VirusTotal API key
24 + file (UploadFile): The file to be analyzed
25 + request (FileSubmissionRequest): Additional parameters for submission
26 +
27 + Returns:
28 + FileSubmissionResponse: Response containing submission ID
29 +
30 + Raises:
31 + HTTPException: If the submission fails
32 + """
33 + url = "https://www.virustotal.com/api/v3/files"
34 +
35 + # Headers - exactly match the working example
36 + headers = {"accept": "application/json", "x-apikey": api_key}
37 +
38 + # Prepare the file for upload
39 + file_content = await file.read()
40 +
41 + # Reset file pointer for potential reuse
42 + await file.seek(0)
43 +
44 + # Prepare the files dictionary - exactly match the working pattern
45 + files = {"file": (file.filename, file_content, "application/octet-stream")}
46 +
47 + # Prepare form data if password is provided
48 + data = {}
49 + if request.password:
50 + data["password"] = request.password
51 +
52 + logger.info(f"Submitting file {file.filename} to VirusTotal (size: {len(file_content)} bytes)")
53 +
54 + try:
55 + async with httpx.AsyncClient(timeout=300.0) as client: # 5 minute timeout for file uploads
56 + response = await client.post(url, headers=headers, files=files, data=data if data else None)
57 +
58 + # Log the actual request headers for debugging
59 + logger.info(f"Request headers sent: {response.request.headers}")
60 + logger.info(f"Response status: {response.status_code}")
61 +
62 + response.raise_for_status()
63 + response_data = response.json()
64 +
65 + return FileSubmissionResponse(
66 + data=response_data["data"],
67 + success=True,
68 + message=f"File {file.filename} submitted successfully for analysis",
69 + )
70 +
71 + except httpx.HTTPStatusError as e:
72 + logger.error(f"HTTP error submitting file to VirusTotal: {e.response.status_code} - {e.response.text}")
73 +
74 + # Parse the error response to provide better error messages
75 + try:
76 + error_data = e.response.json()
77 + error_message = error_data.get("error", {}).get("message", str(e.response.text))
78 + except (ValueError, KeyError):
79 + error_message = str(e.response.text)
80 +
81 + if e.response.status_code == 400:
82 + # Handle specific 400 errors
83 + if "Invalid zip file" in error_message:
84 + raise HTTPException(
85 + status_code=400,
86 + detail="File format not supported or corrupted. VirusTotal accepts executables, documents, archives, and other common file types.",
87 + )
88 + elif "File too large" in error_message:
89 + raise HTTPException(
90 + status_code=413,
91 + detail="File too large. Maximum file size is 32MB for free API keys, 650MB for premium.",
92 + )
93 + elif "missing" in error_message.lower():
94 + raise HTTPException(
95 + status_code=400,
96 + detail="File upload failed. Please ensure the file is properly formatted and try again.",
97 + )
98 + else:
99 + raise HTTPException(status_code=400, detail=f"Bad request: {error_message}")
100 + elif e.response.status_code == 429:
101 + raise HTTPException(status_code=429, detail="Rate limit exceeded. Please try again later.")
102 + elif e.response.status_code == 413:
103 + raise HTTPException(status_code=413, detail="File too large. Maximum file size is 32MB for free API keys.")
104 + else:
105 + raise HTTPException(status_code=e.response.status_code, detail=f"Failed to submit file: {error_message}")
106 + except httpx.RequestError as e:
107 + logger.error(f"Request error submitting file to VirusTotal: {e}")
108 + raise HTTPException(status_code=500, detail=f"Network error occurred: {str(e)}")
109 + except Exception as e:
110 + logger.error(f"Unexpected error submitting file to VirusTotal: {e}")
111 + raise HTTPException(status_code=500, detail=f"Unexpected error occurred: {str(e)}")
112 +
113 +
114 +async def get_file_analysis_status(
115 + api_key: str,
116 + analysis_id: str,
117 +) -> FileAnalysisResponse:
118 + """
119 + Get the status of a file analysis.
120 +
121 + Args:
122 + api_key (str): The VirusTotal API key
123 + analysis_id (str): The analysis ID returned from file submission
124 +
125 + Returns:
126 + FileAnalysisResponse: Current analysis status
127 +
128 + Raises:
129 + HTTPException: If the request fails
130 + """
131 + url = f"https://www.virustotal.com/api/v3/analyses/{analysis_id}"
132 + headers = {"x-apikey": api_key}
133 +
134 + logger.info(f"Checking analysis status for ID: {analysis_id}")
135 +
136 + try:
137 + async with httpx.AsyncClient(timeout=30.0) as client:
138 + response = await client.get(url, headers=headers)
139 + response.raise_for_status()
140 + response_data = response.json()
141 +
142 + return FileAnalysisResponse(data=response_data["data"], success=True, message="Analysis status retrieved successfully")
143 +
144 + except httpx.HTTPStatusError as e:
145 + logger.error(f"HTTP error getting analysis status: {e.response.status_code} - {e.response.text}")
146 + raise HTTPException(status_code=e.response.status_code, detail=f"Failed to get analysis status: {e.response.text}")
147 + except httpx.RequestError as e:
148 + logger.error(f"Request error getting analysis status: {e}")
149 + raise HTTPException(status_code=500, detail=f"Network error occurred: {str(e)}")
150 +
151 +
152 +async def get_file_report(
153 + api_key: str,
154 + file_id: str,
155 +) -> FileReportResponse:
156 + """
157 + Get the detailed analysis report for a file.
158 +
159 + Args:
160 + api_key (str): The VirusTotal API key
161 + file_id (str): The file ID (hash) to get report for
162 +
163 + Returns:
164 + FileReportResponse: Detailed analysis report
165 +
166 + Raises:
167 + HTTPException: If the request fails
168 + """
169 + url = f"https://www.virustotal.com/api/v3/files/{file_id}"
170 + headers = {"x-apikey": api_key}
171 +
172 + logger.info(f"Getting file report for ID: {file_id}")
173 +
174 + try:
175 + async with httpx.AsyncClient(timeout=30.0) as client:
176 + response = await client.get(url, headers=headers)
177 + response.raise_for_status()
178 + response_data = response.json()
179 +
180 + return FileReportResponse(data=response_data["data"], success=True, message="File report retrieved successfully")
181 +
182 + except httpx.HTTPStatusError as e:
183 + logger.error(f"HTTP error getting file report: {e.response.status_code} - {e.response.text}")
184 + if e.response.status_code == 404:
185 + raise HTTPException(status_code=404, detail="File not found or not yet analyzed")
186 + raise HTTPException(status_code=e.response.status_code, detail=f"Failed to get file report: {e.response.text}")
187 + except httpx.RequestError as e:
188 + logger.error(f"Request error getting file report: {e}")
189 + raise HTTPException(status_code=500, detail=f"Network error occurred: {str(e)}")
190 +
191 +
192 +async def submit_and_wait_for_analysis(
193 + api_key: str,
194 + file: UploadFile,
195 + request: FileSubmissionRequest,
196 + max_wait_time: int = 300, # 5 minutes
197 + poll_interval: int = 10, # 10 seconds
198 +) -> FileReportResponse:
199 + """
200 + Submit a file and wait for analysis to complete, then return the report.
201 +
202 + Args:
203 + api_key (str): The VirusTotal API key
204 + file (UploadFile): The file to be analyzed
205 + request (FileSubmissionRequest): Additional parameters for submission
206 + max_wait_time (int): Maximum time to wait in seconds
207 + poll_interval (int): Time between status checks in seconds
208 +
209 + Returns:
210 + FileReportResponse: Complete analysis report
211 +
212 + Raises:
213 + HTTPException: If submission fails or analysis times out
214 + """
215 + # Submit the file
216 + submission_response = await submit_file_to_virustotal(api_key, file, request)
217 + analysis_id = submission_response.data.id
218 +
219 + logger.info(f"File submitted, analysis ID: {analysis_id}. Waiting for completion...")
220 +
221 + # Wait for analysis to complete
222 + waited_time = 0
223 + while waited_time < max_wait_time:
224 + status_response = await get_file_analysis_status(api_key, analysis_id)
225 +
226 + if status_response.data.attributes.status == "completed":
227 + # Analysis is complete, get the file hash from the analysis ID
228 + # The analysis ID format is usually base64 encoded, but we can extract file hash from response
229 + logger.info("Analysis completed, retrieving detailed report...")
230 +
231 + # For now, we'll return the analysis status response
232 + # In a real implementation, you might want to extract the file hash and get the full report
233 + return FileReportResponse(data=status_response.data, success=True, message="File analysis completed successfully")
234 +
235 + logger.info(f"Analysis status: {status_response.data.attributes.status}. Waiting {poll_interval} seconds...")
236 + await asyncio.sleep(poll_interval)
237 + waited_time += poll_interval
238 +
239 + # If we get here, the analysis timed out
240 + raise HTTPException(
241 + status_code=408,
242 + detail=f"Analysis did not complete within {max_wait_time} seconds. You can check the status later using analysis ID: {analysis_id}",
243 + )
frontend/package.json
+9 -8
@@ -3,7 +3,7 @@
3 "type": "module",
4 "version": "1.0.0",
5 "private": true,
6 - "packageManager": "pnpm@10.12.2+sha512.a32540185b964ee30bb4e979e405adc6af59226b438ee4cc19f9e8773667a66d302f5bfee60a39d3cac69e35e4b96e708a71dd002b7e9359c4112a1722ac323f",
6 + "packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184",
7 "engines": {
8 "node": ">=18.0.0"
9 },
@@ -47,6 +47,7 @@
47 "@fontsource/public-sans": "^5.2.6",
48 "@shikijs/markdown-it": "^3.7.0",
49 "@singulio/app-auth-search": "^0.0.3",
50 + "@types/codemirror": "^5.60.16",
51 "@vueuse/core": "^13.4.0",
52 "@vueuse/motion": "^3.0.3",
53 "axios": "^1.10.0",
@@ -83,7 +84,7 @@
84 "vuedraggable": "^4.1.0"
85 },
86 "optionalDependencies": {
86 - "@rollup/rollup-linux-x64-gnu": "^4.44.0",
87 + "@rollup/rollup-linux-x64-gnu": "^4.44.1",
88 "treemate": "^0.3.11",
89 "vueuc": "^0.4.64"
90 },
@@ -91,15 +92,15 @@
92 "@antfu/eslint-config": "^4.16.1",
93 "@clack/prompts": "^0.11.0",
94 "@iconify/vue": "^5.0.0",
94 - "@tailwindcss/vite": "^4.1.10",
95 + "@tailwindcss/vite": "^4.1.11",
96 "@tsconfig/node20": "^20.1.6",
97 "@types/bytes": "^3.1.5",
98 "@types/file-saver": "^2.0.7",
99 "@types/fs-extra": "^11.0.4",
100 "@types/jsdom": "^21.1.7",
100 - "@types/lodash": "^4.17.18",
101 + "@types/lodash": "^4.17.19",
102 "@types/markdown-it": "^14.1.2",
102 - "@types/node": "^24.0.3",
103 + "@types/node": "^24.0.6",
104 "@types/validator": "^13.15.2",
105 "@vitejs/plugin-vue": "^5.2.4",
106 "@vitejs/plugin-vue-jsx": "^4.2.0",
@@ -107,16 +108,16 @@
108 "@vue/tsconfig": "^0.7.0",
109 "cypress": "^14.5.0",
110 "depcheck": "^1.4.7",
110 - "eslint": "^9.29.0",
111 + "eslint": "^9.30.0",
112 "flourite": "^1.3.0",
113 "fs-extra": "^11.3.0",
114 "jsdom": "^26.1.0",
115 "npm-run-all2": "^8.0.4",
115 - "prettier": "^3.6.0",
116 + "prettier": "^3.6.2",
117 "prettier-plugin-tailwindcss": "^0.6.13",
118 "sass": "^1.89.2",
119 "start-server-and-test": "^2.0.12",
119 - "tailwindcss": "^4.1.10",
120 + "tailwindcss": "^4.1.11",
121 "taze": "^19.1.0",
122 "type-fest": "^4.41.0",
123 "typescript": "~5.8.3",
frontend/pnpm-lock.yaml
+735 -858
@@ -41,6 +41,9 @@ importers:
41 '@singulio/app-auth-search':
42 specifier: ^0.0.3
43 version: 0.0.3
44 + '@types/codemirror':
45 + specifier: ^5.60.16
46 + version: 5.60.16
47 '@vueuse/core':
48 specifier: ^13.4.0
49 version: 13.4.0(vue@3.5.17(typescript@5.8.3))
@@ -109,7 +112,7 @@ importers:
112 version: 3.7.0
113 thememirror:
114 specifier: ^2.0.1
112 - version: 2.0.1(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.8)
115 + version: 2.0.1(@codemirror/language@6.11.2)(@codemirror/state@6.5.2)(@codemirror/view@6.38.0)
116 validator:
117 specifier: ^13.15.15
118 version: 13.15.15
@@ -146,7 +149,7 @@ importers:
149 devDependencies:
150 '@antfu/eslint-config':
151 specifier: ^4.16.1
149 - version: 4.16.1(@vue/compiler-sfc@3.5.17)(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
152 + version: 4.16.1(@vue/compiler-sfc@3.5.17)(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
153 '@clack/prompts':
154 specifier: ^0.11.0
155 version: 0.11.0
@@ -154,8 +157,8 @@ importers:
157 specifier: ^5.0.0
158 version: 5.0.0(vue@3.5.17(typescript@5.8.3))
159 '@tailwindcss/vite':
157 - specifier: ^4.1.10
158 - version: 4.1.10(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
160 + specifier: ^4.1.11
161 + version: 4.1.11(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
162 '@tsconfig/node20':
163 specifier: ^20.1.6
164 version: 20.1.6
@@ -172,23 +175,23 @@ importers:
175 specifier: ^21.1.7
176 version: 21.1.7
177 '@types/lodash':
175 - specifier: ^4.17.18
176 - version: 4.17.18
178 + specifier: ^4.17.19
179 + version: 4.17.19
180 '@types/markdown-it':
181 specifier: ^14.1.2
182 version: 14.1.2
183 '@types/node':
181 - specifier: ^24.0.3
182 - version: 24.0.3
184 + specifier: ^24.0.6
185 + version: 24.0.6
186 '@types/validator':
187 specifier: ^13.15.2
188 version: 13.15.2
189 '@vitejs/plugin-vue':
190 specifier: ^5.2.4
188 - version: 5.2.4(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
191 + version: 5.2.4(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
192 '@vitejs/plugin-vue-jsx':
193 specifier: ^4.2.0
191 - version: 4.2.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
194 + version: 4.2.0(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
195 '@vue/test-utils':
196 specifier: ^2.4.6
197 version: 2.4.6
@@ -202,8 +205,8 @@ importers:
205 specifier: ^1.4.7
206 version: 1.4.7
207 eslint:
205 - specifier: ^9.29.0
206 - version: 9.29.0(jiti@2.4.2)
208 + specifier: ^9.30.0
209 + version: 9.30.0(jiti@2.4.2)
210 flourite:
211 specifier: ^1.3.0
212 version: 1.3.0
@@ -217,11 +220,11 @@ importers:
220 specifier: ^8.0.4
221 version: 8.0.4
222 prettier:
220 - specifier: ^3.6.0
221 - version: 3.6.0
223 + specifier: ^3.6.2
224 + version: 3.6.2
225 prettier-plugin-tailwindcss:
226 specifier: ^0.6.13
224 - version: 0.6.13(prettier@3.6.0)
227 + version: 0.6.13(prettier@3.6.2)
228 sass:
229 specifier: ^1.89.2
230 version: 1.89.2
@@ -229,8 +232,8 @@ importers:
232 specifier: ^2.0.12
233 version: 2.0.12
234 tailwindcss:
232 - specifier: ^4.1.10
233 - version: 4.1.10
235 + specifier: ^4.1.11
236 + version: 4.1.11
237 taze:
238 specifier: ^19.1.0
239 version: 19.1.0
@@ -242,26 +245,26 @@ importers:
245 version: 5.8.3
246 vite:
247 specifier: ^6.3.5
245 - version: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
248 + version: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
249 vite-bundle-visualizer:
250 specifier: ^1.2.1
248 - version: 1.2.1(rollup@4.41.1)
251 + version: 1.2.1(rollup@4.44.1)
252 vite-plugin-vue-devtools:
253 specifier: ^7.7.7
251 - version: 7.7.7(rollup@4.41.1)(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
254 + version: 7.7.7(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
255 vite-svg-loader:
256 specifier: ^5.1.0
257 version: 5.1.0(vue@3.5.17(typescript@5.8.3))
258 vitest:
259 specifier: ^3.2.4
257 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
260 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
261 vue-tsc:
262 specifier: ^2.2.10
263 version: 2.2.10(typescript@5.8.3)
264 optionalDependencies:
265 '@rollup/rollup-linux-x64-gnu':
263 - specifier: ^4.44.0
264 - version: 4.44.0
266 + specifier: ^4.44.1
267 + version: 4.44.1
268 treemate:
269 specifier: ^0.3.11
270 version: 0.3.11
@@ -396,16 +399,16 @@ packages:
399 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
400 engines: {node: '>=6.9.0'}
401
399 - '@babel/compat-data@7.27.3':
400 - resolution: {integrity: sha512-V42wFfx1ymFte+ecf6iXghnnP8kWTO+ZLXIyZq+1LAXHHvTZdVxicn4yiVYdYMGaCO3tmqub11AorKkv+iodqw==}
402 + '@babel/compat-data@7.27.7':
403 + resolution: {integrity: sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==}
404 engines: {node: '>=6.9.0'}
405
403 - '@babel/core@7.27.3':
404 - resolution: {integrity: sha512-hyrN8ivxfvJ4i0fIJuV4EOlV0WDMz5Ui4StRTgVaAvWeiRCilXgwVvxJKtFQ3TKtHgJscB2YiXKGNJuVwhQMtA==}
406 + '@babel/core@7.27.7':
407 + resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==}
408 engines: {node: '>=6.9.0'}
409
407 - '@babel/generator@7.27.3':
408 - resolution: {integrity: sha512-xnlJYj5zepml8NXtjkG0WquFUv8RskFqyFcVgTBp5k+NaA/8uw/K+OSVf8AMGw5e9HKP2ETd5xpK5MLZQD6b4Q==}
410 + '@babel/generator@7.27.5':
411 + resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
412 engines: {node: '>=6.9.0'}
413
414 '@babel/helper-annotate-as-pure@7.27.3':
@@ -466,17 +469,12 @@ packages:
469 resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
470 engines: {node: '>=6.9.0'}
471
469 - '@babel/helpers@7.27.3':
470 - resolution: {integrity: sha512-h/eKy9agOya1IGuLaZ9tEUgz+uIRXcbtOhRtUyyMf8JFmn1iT13vnl/IGVWSkdOCG/pC57U4S1jnAabAavTMwg==}
472 + '@babel/helpers@7.27.6':
473 + resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
474 engines: {node: '>=6.9.0'}
475
473 - '@babel/parser@7.27.3':
474 - resolution: {integrity: sha512-xyYxRj6+tLNDTWi0KCBcZ9V7yg3/lwL9DWh9Uwh/RIVlIfFidggcgxKX3GCXwCiswwcGRawBKbEg2LG/Y8eJhw==}
475 - engines: {node: '>=6.0.0'}
476 - hasBin: true
477 -
478 - '@babel/parser@7.27.5':
479 - resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==}
476 + '@babel/parser@7.27.7':
477 + resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==}
478 engines: {node: '>=6.0.0'}
479 hasBin: true
480
@@ -525,12 +523,12 @@ packages:
523 resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
524 engines: {node: '>=6.9.0'}
525
528 - '@babel/traverse@7.27.3':
529 - resolution: {integrity: sha512-lId/IfN/Ye1CIu8xG7oKBHXd2iNb2aW1ilPszzGcJug6M8RCKfVNcYhpI5+bMvFYjK7lXIM0R+a+6r8xhHp2FQ==}
526 + '@babel/traverse@7.27.7':
527 + resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==}
528 engines: {node: '>=6.9.0'}
529
532 - '@babel/types@7.27.3':
533 - resolution: {integrity: sha512-Y1GkI4ktrtvmawoSq+4FCVHNryea6uR+qUQy0AGxLSsjCX0nVmkYQMBLHDkXZuo5hGx7eYdnIaslsdBFm7zbUw==}
530 + '@babel/types@7.27.7':
531 + resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==}
532 engines: {node: '>=6.9.0'}
533
534 '@clack/core@0.5.0':
@@ -551,8 +549,8 @@ packages:
549 '@codemirror/lang-xml@6.1.0':
550 resolution: {integrity: sha512-3z0blhicHLfwi2UgkZYRPioSgVTo9PV5GP5ducFH6FaHy0IAJRg+ixj5gTR1gnT/glAIC8xv4w2VL1LoZfs+Jg==}
551
554 - '@codemirror/language@6.11.0':
555 - resolution: {integrity: sha512-A7+f++LodNNc1wGgoRDTt78cOwWm9KVezApgjOMp1W4hM0898nsqBXwF+sbePE7ZRcjN7Sa1Z5m2oN27XkmEjQ==}
552 + '@codemirror/language@6.11.2':
553 + resolution: {integrity: sha512-p44TsNArL4IVXDTbapUmEkAlvWs2CFQbcfc0ymDsis1kH2wh0gcY96AS29c/vp2d0y2Tquk1EDSaawpzilUiAw==}
554
555 '@codemirror/lint@6.8.5':
556 resolution: {integrity: sha512-s3n3KisH7dx3vsoeGMxsbRAgKe4O1vbrnKBClm99PU0fWxmxsx5rR2PfqQgIt+2MMJBHbiJ5rfIdLYfB9NNvsA==}
@@ -566,8 +564,8 @@ packages:
564 '@codemirror/theme-one-dark@6.1.3':
565 resolution: {integrity: sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==}
566
569 - '@codemirror/view@6.36.8':
570 - resolution: {integrity: sha512-yoRo4f+FdnD01fFt4XpfpMCcCAo9QvZOtbrXExn4SqzH32YC6LgzqxfLZw/r6Ge65xyY03mK/UfUqrVw1gFiFg==}
567 + '@codemirror/view@6.38.0':
568 + resolution: {integrity: sha512-yvSchUwHOdupXkd7xJ0ob36jdsSR/I+/C+VbY0ffBiL5NiSTEBDfB1ZGWbbIlDd5xgdUkody+lukAdOxYrOBeg==}
569
570 '@css-render/plugin-bem@0.15.14':
571 resolution: {integrity: sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==}
@@ -791,21 +789,21 @@ packages:
789 resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
790 engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
791
794 - '@eslint/compat@1.2.9':
795 - resolution: {integrity: sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA==}
792 + '@eslint/compat@1.3.1':
793 + resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==}
794 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
795 peerDependencies:
798 - eslint: ^9.10.0
796 + eslint: ^8.40 || 9
797 peerDependenciesMeta:
798 eslint:
799 optional: true
800
803 - '@eslint/config-array@0.20.1':
804 - resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==}
801 + '@eslint/config-array@0.21.0':
802 + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==}
803 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
804
807 - '@eslint/config-helpers@0.2.2':
808 - resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==}
805 + '@eslint/config-helpers@0.3.0':
806 + resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==}
807 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
808
809 '@eslint/core@0.13.0':
@@ -816,12 +814,16 @@ packages:
814 resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==}
815 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
816
817 + '@eslint/core@0.15.1':
818 + resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==}
819 + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
820 +
821 '@eslint/eslintrc@3.3.1':
822 resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
823 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
824
823 - '@eslint/js@9.29.0':
824 - resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==}
825 + '@eslint/js@9.30.0':
826 + resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==}
827 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
828
829 '@eslint/markdown@6.6.0':
@@ -836,8 +838,8 @@ packages:
838 resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==}
839 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
840
839 - '@eslint/plugin-kit@0.3.1':
840 - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==}
841 + '@eslint/plugin-kit@0.3.3':
842 + resolution: {integrity: sha512-1+WqvgNMhmlAambTvT3KPtCl/Ibr68VldY2XY40SL1CE0ZXiakFR/cbTspaF5HsnpDMvcYYoJHfl4980NBjGag==}
843 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
844
845 '@f3ve/vue-markdown-it@0.2.3':
@@ -959,8 +961,8 @@ packages:
961 resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
962 engines: {node: '>= 8'}
963
962 - '@nuxt/kit@3.17.4':
963 - resolution: {integrity: sha512-l+hY8sy2XFfg3PigZj+PTu6+KIJzmbACTRimn1ew/gtCz+F38f6KTF4sMRTN5CUxiB8TRENgEonASmkAWfpO9Q==}
964 + '@nuxt/kit@3.17.5':
965 + resolution: {integrity: sha512-NdCepmA+S/SzgcaL3oYUeSlXGYO6BXGr9K/m1D0t0O9rApF8CSq/QQ+ja5KYaYMO1kZAEWH4s2XVcE3uPrrAVg==}
966 engines: {node: '>=18.12.0'}
967
968 '@one-ini/wasm@0.1.1':
@@ -1052,8 +1054,8 @@ packages:
1054 resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
1055 engines: {node: '>=14'}
1056
1055 - '@pkgr/core@0.2.4':
1056 - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==}
1057 + '@pkgr/core@0.2.7':
1058 + resolution: {integrity: sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==}
1059 engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
1060
1061 '@polka/url@1.0.0-next.29':
@@ -1063,11 +1065,11 @@ packages:
1065 resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}
1066 engines: {node: '>=20.0.0'}
1067
1066 - '@rolldown/pluginutils@1.0.0-beta.10':
1067 - resolution: {integrity: sha512-FeISF1RUTod5Kvt3yUXByrAPk5EfDWo/1BPv1ARBZ07weqx888SziPuWS6HUJU0YroGyQURjdIrkjWJP2zBFDQ==}
1068 + '@rolldown/pluginutils@1.0.0-beta.21':
1069 + resolution: {integrity: sha512-OTjWr7XYqRZaSzi6dTe0fP25EEsYEQ2H04xIedXG3D0Hrs+Bpe3V5L48R6y+R5ohTygp1ijC09mbrd7vlslpzA==}
1070
1069 - '@rollup/pluginutils@5.1.4':
1070 - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
1071 + '@rollup/pluginutils@5.2.0':
1072 + resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
1073 engines: {node: '>=14.0.0'}
1074 peerDependencies:
1075 rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
@@ -1075,108 +1077,103 @@ packages:
1077 rollup:
1078 optional: true
1079
1078 - '@rollup/rollup-android-arm-eabi@4.41.1':
1079 - resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==}
1080 + '@rollup/rollup-android-arm-eabi@4.44.1':
1081 + resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==}
1082 cpu: [arm]
1083 os: [android]
1084
1083 - '@rollup/rollup-android-arm64@4.41.1':
1084 - resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==}
1085 + '@rollup/rollup-android-arm64@4.44.1':
1086 + resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==}
1087 cpu: [arm64]
1088 os: [android]
1089
1088 - '@rollup/rollup-darwin-arm64@4.41.1':
1089 - resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==}
1090 + '@rollup/rollup-darwin-arm64@4.44.1':
1091 + resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==}
1092 cpu: [arm64]
1093 os: [darwin]
1094
1093 - '@rollup/rollup-darwin-x64@4.41.1':
1094 - resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==}
1095 + '@rollup/rollup-darwin-x64@4.44.1':
1096 + resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==}
1097 cpu: [x64]
1098 os: [darwin]
1099
1098 - '@rollup/rollup-freebsd-arm64@4.41.1':
1099 - resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==}
1100 + '@rollup/rollup-freebsd-arm64@4.44.1':
1101 + resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==}
1102 cpu: [arm64]
1103 os: [freebsd]
1104
1103 - '@rollup/rollup-freebsd-x64@4.41.1':
1104 - resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==}
1105 + '@rollup/rollup-freebsd-x64@4.44.1':
1106 + resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==}
1107 cpu: [x64]
1108 os: [freebsd]
1109
1108 - '@rollup/rollup-linux-arm-gnueabihf@4.41.1':
1109 - resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==}
1110 + '@rollup/rollup-linux-arm-gnueabihf@4.44.1':
1111 + resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==}
1112 cpu: [arm]
1113 os: [linux]
1114
1113 - '@rollup/rollup-linux-arm-musleabihf@4.41.1':
1114 - resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==}
1115 + '@rollup/rollup-linux-arm-musleabihf@4.44.1':
1116 + resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==}
1117 cpu: [arm]
1118 os: [linux]
1119
1118 - '@rollup/rollup-linux-arm64-gnu@4.41.1':
1119 - resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==}
1120 + '@rollup/rollup-linux-arm64-gnu@4.44.1':
1121 + resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==}
1122 cpu: [arm64]
1123 os: [linux]
1124
1123 - '@rollup/rollup-linux-arm64-musl@4.41.1':
1124 - resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==}
1125 + '@rollup/rollup-linux-arm64-musl@4.44.1':
1126 + resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==}
1127 cpu: [arm64]
1128 os: [linux]
1129
1128 - '@rollup/rollup-linux-loongarch64-gnu@4.41.1':
1129 - resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==}
1130 + '@rollup/rollup-linux-loongarch64-gnu@4.44.1':
1131 + resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==}
1132 cpu: [loong64]
1133 os: [linux]
1134
1133 - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1':
1134 - resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==}
1135 + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
1136 + resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==}
1137 cpu: [ppc64]
1138 os: [linux]
1139
1138 - '@rollup/rollup-linux-riscv64-gnu@4.41.1':
1139 - resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==}
1140 + '@rollup/rollup-linux-riscv64-gnu@4.44.1':
1141 + resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==}
1142 cpu: [riscv64]
1143 os: [linux]
1144
1143 - '@rollup/rollup-linux-riscv64-musl@4.41.1':
1144 - resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==}
1145 + '@rollup/rollup-linux-riscv64-musl@4.44.1':
1146 + resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==}
1147 cpu: [riscv64]
1148 os: [linux]
1149
1148 - '@rollup/rollup-linux-s390x-gnu@4.41.1':
1149 - resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==}
1150 + '@rollup/rollup-linux-s390x-gnu@4.44.1':
1151 + resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==}
1152 cpu: [s390x]
1153 os: [linux]
1154
1153 - '@rollup/rollup-linux-x64-gnu@4.41.1':
1154 - resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==}
1155 - cpu: [x64]
1156 - os: [linux]
1157 -
1158 - '@rollup/rollup-linux-x64-gnu@4.44.0':
1159 - resolution: {integrity: sha512-iUVJc3c0o8l9Sa/qlDL2Z9UP92UZZW1+EmQ4xfjTc1akr0iUFZNfxrXJ/R1T90h/ILm9iXEY6+iPrmYB3pXKjw==}
1155 + '@rollup/rollup-linux-x64-gnu@4.44.1':
1156 + resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==}
1157 cpu: [x64]
1158 os: [linux]
1159
1163 - '@rollup/rollup-linux-x64-musl@4.41.1':
1164 - resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==}
1160 + '@rollup/rollup-linux-x64-musl@4.44.1':
1161 + resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==}
1162 cpu: [x64]
1163 os: [linux]
1164
1168 - '@rollup/rollup-win32-arm64-msvc@4.41.1':
1169 - resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==}
1165 + '@rollup/rollup-win32-arm64-msvc@4.44.1':
1166 + resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==}
1167 cpu: [arm64]
1168 os: [win32]
1169
1173 - '@rollup/rollup-win32-ia32-msvc@4.41.1':
1174 - resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==}
1170 + '@rollup/rollup-win32-ia32-msvc@4.44.1':
1171 + resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==}
1172 cpu: [ia32]
1173 os: [win32]
1174
1178 - '@rollup/rollup-win32-x64-msvc@4.41.1':
1179 - resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==}
1175 + '@rollup/rollup-win32-x64-msvc@4.44.1':
1176 + resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==}
1177 cpu: [x64]
1178 os: [win32]
1179
@@ -1259,65 +1256,65 @@ packages:
1256 peerDependencies:
1257 '@svgdotjs/svg.js': ^3.2.4
1258
1262 - '@tailwindcss/node@4.1.10':
1263 - resolution: {integrity: sha512-2ACf1znY5fpRBwRhMgj9ZXvb2XZW8qs+oTfotJ2C5xR0/WNL7UHZ7zXl6s+rUqedL1mNi+0O+WQr5awGowS3PQ==}
1259 + '@tailwindcss/node@4.1.11':
1260 + resolution: {integrity: sha512-yzhzuGRmv5QyU9qLNg4GTlYI6STedBWRE7NjxP45CsFYYq9taI0zJXZBMqIC/c8fViNLhmrbpSFS57EoxUmD6Q==}
1261
1265 - '@tailwindcss/oxide-android-arm64@4.1.10':
1266 - resolution: {integrity: sha512-VGLazCoRQ7rtsCzThaI1UyDu/XRYVyH4/EWiaSX6tFglE+xZB5cvtC5Omt0OQ+FfiIVP98su16jDVHDEIuH4iQ==}
1262 + '@tailwindcss/oxide-android-arm64@4.1.11':
1263 + resolution: {integrity: sha512-3IfFuATVRUMZZprEIx9OGDjG3Ou3jG4xQzNTvjDoKmU9JdmoCohQJ83MYd0GPnQIu89YoJqvMM0G3uqLRFtetg==}
1264 engines: {node: '>= 10'}
1265 cpu: [arm64]
1266 os: [android]
1267
1271 - '@tailwindcss/oxide-darwin-arm64@4.1.10':
1272 - resolution: {integrity: sha512-ZIFqvR1irX2yNjWJzKCqTCcHZbgkSkSkZKbRM3BPzhDL/18idA8uWCoopYA2CSDdSGFlDAxYdU2yBHwAwx8euQ==}
1268 + '@tailwindcss/oxide-darwin-arm64@4.1.11':
1269 + resolution: {integrity: sha512-ESgStEOEsyg8J5YcMb1xl8WFOXfeBmrhAwGsFxxB2CxY9evy63+AtpbDLAyRkJnxLy2WsD1qF13E97uQyP1lfQ==}
1270 engines: {node: '>= 10'}
1271 cpu: [arm64]
1272 os: [darwin]
1273
1277 - '@tailwindcss/oxide-darwin-x64@4.1.10':
1278 - resolution: {integrity: sha512-eCA4zbIhWUFDXoamNztmS0MjXHSEJYlvATzWnRiTqJkcUteSjO94PoRHJy1Xbwp9bptjeIxxBHh+zBWFhttbrQ==}
1274 + '@tailwindcss/oxide-darwin-x64@4.1.11':
1275 + resolution: {integrity: sha512-EgnK8kRchgmgzG6jE10UQNaH9Mwi2n+yw1jWmof9Vyg2lpKNX2ioe7CJdf9M5f8V9uaQxInenZkOxnTVL3fhAw==}
1276 engines: {node: '>= 10'}
1277 cpu: [x64]
1278 os: [darwin]
1279
1283 - '@tailwindcss/oxide-freebsd-x64@4.1.10':
1284 - resolution: {integrity: sha512-8/392Xu12R0cc93DpiJvNpJ4wYVSiciUlkiOHOSOQNH3adq9Gi/dtySK7dVQjXIOzlpSHjeCL89RUUI8/GTI6g==}
1280 + '@tailwindcss/oxide-freebsd-x64@4.1.11':
1281 + resolution: {integrity: sha512-xdqKtbpHs7pQhIKmqVpxStnY1skuNh4CtbcyOHeX1YBE0hArj2romsFGb6yUmzkq/6M24nkxDqU8GYrKrz+UcA==}
1282 engines: {node: '>= 10'}
1283 cpu: [x64]
1284 os: [freebsd]
1285
1289 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10':
1290 - resolution: {integrity: sha512-t9rhmLT6EqeuPT+MXhWhlRYIMSfh5LZ6kBrC4FS6/+M1yXwfCtp24UumgCWOAJVyjQwG+lYva6wWZxrfvB+NhQ==}
1286 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11':
1287 + resolution: {integrity: sha512-ryHQK2eyDYYMwB5wZL46uoxz2zzDZsFBwfjssgB7pzytAeCCa6glsiJGjhTEddq/4OsIjsLNMAiMlHNYnkEEeg==}
1288 engines: {node: '>= 10'}
1289 cpu: [arm]
1290 os: [linux]
1291
1295 - '@tailwindcss/oxide-linux-arm64-gnu@4.1.10':
1296 - resolution: {integrity: sha512-3oWrlNlxLRxXejQ8zImzrVLuZ/9Z2SeKoLhtCu0hpo38hTO2iL86eFOu4sVR8cZc6n3z7eRXXqtHJECa6mFOvA==}
1292 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11':
1293 + resolution: {integrity: sha512-mYwqheq4BXF83j/w75ewkPJmPZIqqP1nhoghS9D57CLjsh3Nfq0m4ftTotRYtGnZd3eCztgbSPJ9QhfC91gDZQ==}
1294 engines: {node: '>= 10'}
1295 cpu: [arm64]
1296 os: [linux]
1297
1301 - '@tailwindcss/oxide-linux-arm64-musl@4.1.10':
1302 - resolution: {integrity: sha512-saScU0cmWvg/Ez4gUmQWr9pvY9Kssxt+Xenfx1LG7LmqjcrvBnw4r9VjkFcqmbBb7GCBwYNcZi9X3/oMda9sqQ==}
1298 + '@tailwindcss/oxide-linux-arm64-musl@4.1.11':
1299 + resolution: {integrity: sha512-m/NVRFNGlEHJrNVk3O6I9ggVuNjXHIPoD6bqay/pubtYC9QIdAMpS+cswZQPBLvVvEF6GtSNONbDkZrjWZXYNQ==}
1300 engines: {node: '>= 10'}
1301 cpu: [arm64]
1302 os: [linux]
1303
1307 - '@tailwindcss/oxide-linux-x64-gnu@4.1.10':
1308 - resolution: {integrity: sha512-/G3ao/ybV9YEEgAXeEg28dyH6gs1QG8tvdN9c2MNZdUXYBaIY/Gx0N6RlJzfLy/7Nkdok4kaxKPHKJUlAaoTdA==}
1304 + '@tailwindcss/oxide-linux-x64-gnu@4.1.11':
1305 + resolution: {integrity: sha512-YW6sblI7xukSD2TdbbaeQVDysIm/UPJtObHJHKxDEcW2exAtY47j52f8jZXkqE1krdnkhCMGqP3dbniu1Te2Fg==}
1306 engines: {node: '>= 10'}
1307 cpu: [x64]
1308 os: [linux]
1309
1313 - '@tailwindcss/oxide-linux-x64-musl@4.1.10':
1314 - resolution: {integrity: sha512-LNr7X8fTiKGRtQGOerSayc2pWJp/9ptRYAa4G+U+cjw9kJZvkopav1AQc5HHD+U364f71tZv6XamaHKgrIoVzA==}
1310 + '@tailwindcss/oxide-linux-x64-musl@4.1.11':
1311 + resolution: {integrity: sha512-e3C/RRhGunWYNC3aSF7exsQkdXzQ/M+aYuZHKnw4U7KQwTJotnWsGOIVih0s2qQzmEzOFIJ3+xt7iq67K/p56Q==}
1312 engines: {node: '>= 10'}
1313 cpu: [x64]
1314 os: [linux]
1315
1319 - '@tailwindcss/oxide-wasm32-wasi@4.1.10':
1320 - resolution: {integrity: sha512-d6ekQpopFQJAcIK2i7ZzWOYGZ+A6NzzvQ3ozBvWFdeyqfOZdYHU66g5yr+/HC4ipP1ZgWsqa80+ISNILk+ae/Q==}
1316 + '@tailwindcss/oxide-wasm32-wasi@4.1.11':
1317 + resolution: {integrity: sha512-Xo1+/GU0JEN/C/dvcammKHzeM6NqKovG+6921MR6oadee5XPBaKOumrJCXvopJ/Qb5TH7LX/UAywbqrP4lax0g==}
1318 engines: {node: '>=14.0.0'}
1319 cpu: [wasm32]
1320 bundledDependencies:
@@ -1328,26 +1325,26 @@ packages:
1325 - '@emnapi/wasi-threads'
1326 - tslib
1327
1331 - '@tailwindcss/oxide-win32-arm64-msvc@4.1.10':
1332 - resolution: {integrity: sha512-i1Iwg9gRbwNVOCYmnigWCCgow8nDWSFmeTUU5nbNx3rqbe4p0kRbEqLwLJbYZKmSSp23g4N6rCDmm7OuPBXhDA==}
1328 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11':
1329 + resolution: {integrity: sha512-UgKYx5PwEKrac3GPNPf6HVMNhUIGuUh4wlDFR2jYYdkX6pL/rn73zTq/4pzUm8fOjAn5L8zDeHp9iXmUGOXZ+w==}
1330 engines: {node: '>= 10'}
1331 cpu: [arm64]
1332 os: [win32]
1333
1337 - '@tailwindcss/oxide-win32-x64-msvc@4.1.10':
1338 - resolution: {integrity: sha512-sGiJTjcBSfGq2DVRtaSljq5ZgZS2SDHSIfhOylkBvHVjwOsodBhnb3HdmiKkVuUGKD0I7G63abMOVaskj1KpOA==}
1334 + '@tailwindcss/oxide-win32-x64-msvc@4.1.11':
1335 + resolution: {integrity: sha512-YfHoggn1j0LK7wR82TOucWc5LDCguHnoS879idHekmmiR7g9HUtMw9MI0NHatS28u/Xlkfi9w5RJWgz2Dl+5Qg==}
1336 engines: {node: '>= 10'}
1337 cpu: [x64]
1338 os: [win32]
1339
1343 - '@tailwindcss/oxide@4.1.10':
1344 - resolution: {integrity: sha512-v0C43s7Pjw+B9w21htrQwuFObSkio2aV/qPx/mhrRldbqxbWJK6KizM+q7BF1/1CmuLqZqX3CeYF7s7P9fbA8Q==}
1340 + '@tailwindcss/oxide@4.1.11':
1341 + resolution: {integrity: sha512-Q69XzrtAhuyfHo+5/HMgr1lAiPP/G40OMFAnws7xcFEYqcypZmdW8eGXaOUIeOl1dzPJBPENXgbjsOyhg2nkrg==}
1342 engines: {node: '>= 10'}
1343
1347 - '@tailwindcss/vite@4.1.10':
1348 - resolution: {integrity: sha512-QWnD5HDY2IADv+vYR82lOhqOlS1jSCUUAmfem52cXAhRTKxpDh3ARX8TTXJTCCO7Rv7cD2Nlekabv02bwP3a2A==}
1344 + '@tailwindcss/vite@4.1.11':
1345 + resolution: {integrity: sha512-RHYhrR3hku0MJFRV+fN2gNbDNEh3dwKvY8XJvTxCSXeMOsCRSr+uKvDWQcbizrHgjML6ZmTE5OwMrl5wKcujCw==}
1346 peerDependencies:
1350 - vite: ^5.2.0 || ^6
1347 + vite: ^5.2.0 || ^6 || ^7
1348
1349 '@trysound/sax@0.2.0':
1350 resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
@@ -1362,15 +1359,15 @@ packages:
1359 '@types/chai@5.2.2':
1360 resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==}
1361
1362 + '@types/codemirror@5.60.16':
1363 + resolution: {integrity: sha512-V/yHdamffSS075jit+fDxaOAmdP2liok8NSNJnAZfDJErzOheuygHZEhAJrfmk5TEyM32MhkZjwo/idX791yxw==}
1364 +
1365 '@types/debug@4.1.12':
1366 resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
1367
1368 '@types/deep-eql@4.0.2':
1369 resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
1370
1371 - '@types/estree@1.0.7':
1372 - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==}
1373 -
1371 '@types/estree@1.0.8':
1372 resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
1373
@@ -1401,8 +1398,8 @@ packages:
1398 '@types/lodash-es@4.17.12':
1399 resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
1400
1404 - '@types/lodash@4.17.18':
1405 - resolution: {integrity: sha512-KJ65INaxqxmU6EoCiJmRPZC9H9RVWCRd349tXM2M3O5NA7cY6YL7c0bHAHQ93NOfTObEQ004kd2QVHs/r0+m4g==}
1401 + '@types/lodash@4.17.19':
1402 + resolution: {integrity: sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==}
1403
1404 '@types/markdown-it@14.1.2':
1405 resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
@@ -1419,8 +1416,8 @@ packages:
1416 '@types/ms@2.1.0':
1417 resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
1418
1422 - '@types/node@24.0.3':
1423 - resolution: {integrity: sha512-R4I/kzCYAdRLzfiCabn9hxWfbuHS573x+r0dJMkkzThEa7pbrcDWK+9zu3e7aBOouf+rQAciqPFMnxwr0aWgKg==}
1419 + '@types/node@24.0.6':
1420 + resolution: {integrity: sha512-ZOyn+gOs749xU7ovp+Ibj0g1o3dFRqsfPnT22C2t5JzcRvgsEDpGawPbCISGKLudJk9Y0wiu9sYd6kUh0pc9TA==}
1421
1422 '@types/parse-json@4.0.2':
1423 resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -1431,6 +1428,9 @@ packages:
1428 '@types/sizzle@2.3.9':
1429 resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==}
1430
1431 + '@types/tern@0.23.9':
1432 + resolution: {integrity: sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==}
1433 +
1434 '@types/tough-cookie@4.0.5':
1435 resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==}
1436
@@ -1446,63 +1446,63 @@ packages:
1446 '@types/yauzl@2.10.3':
1447 resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
1448
1449 - '@typescript-eslint/eslint-plugin@8.34.1':
1450 - resolution: {integrity: sha512-STXcN6ebF6li4PxwNeFnqF8/2BNDvBupf2OPx2yWNzr6mKNGF7q49VM00Pz5FaomJyqvbXpY6PhO+T9w139YEQ==}
1449 + '@typescript-eslint/eslint-plugin@8.35.0':
1450 + resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==}
1451 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1452 peerDependencies:
1453 - '@typescript-eslint/parser': ^8.34.1
1453 + '@typescript-eslint/parser': ^8.35.0
1454 eslint: ^8.57.0 || ^9.0.0
1455 typescript: '>=4.8.4 <5.9.0'
1456
1457 - '@typescript-eslint/parser@8.34.1':
1458 - resolution: {integrity: sha512-4O3idHxhyzjClSMJ0a29AcoK0+YwnEqzI6oz3vlRf3xw0zbzt15MzXwItOlnr5nIth6zlY2RENLsOPvhyrKAQA==}
1457 + '@typescript-eslint/parser@8.35.0':
1458 + resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==}
1459 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1460 peerDependencies:
1461 eslint: ^8.57.0 || ^9.0.0
1462 typescript: '>=4.8.4 <5.9.0'
1463
1464 - '@typescript-eslint/project-service@8.34.1':
1465 - resolution: {integrity: sha512-nuHlOmFZfuRwLJKDGQOVc0xnQrAmuq1Mj/ISou5044y1ajGNp2BNliIqp7F2LPQ5sForz8lempMFCovfeS1XoA==}
1464 + '@typescript-eslint/project-service@8.35.0':
1465 + resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==}
1466 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1467 peerDependencies:
1468 typescript: '>=4.8.4 <5.9.0'
1469
1470 - '@typescript-eslint/scope-manager@8.34.1':
1471 - resolution: {integrity: sha512-beu6o6QY4hJAgL1E8RaXNC071G4Kso2MGmJskCFQhRhg8VOH/FDbC8soP8NHN7e/Hdphwp8G8cE6OBzC8o41ZA==}
1470 + '@typescript-eslint/scope-manager@8.35.0':
1471 + resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==}
1472 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1473
1474 - '@typescript-eslint/tsconfig-utils@8.34.1':
1475 - resolution: {integrity: sha512-K4Sjdo4/xF9NEeA2khOb7Y5nY6NSXBnod87uniVYW9kHP+hNlDV8trUSFeynA2uxWam4gIWgWoygPrv9VMWrYg==}
1474 + '@typescript-eslint/tsconfig-utils@8.35.0':
1475 + resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==}
1476 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1477 peerDependencies:
1478 typescript: '>=4.8.4 <5.9.0'
1479
1480 - '@typescript-eslint/type-utils@8.34.1':
1481 - resolution: {integrity: sha512-Tv7tCCr6e5m8hP4+xFugcrwTOucB8lshffJ6zf1mF1TbU67R+ntCc6DzLNKM+s/uzDyv8gLq7tufaAhIBYeV8g==}
1480 + '@typescript-eslint/type-utils@8.35.0':
1481 + resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==}
1482 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1483 peerDependencies:
1484 eslint: ^8.57.0 || ^9.0.0
1485 typescript: '>=4.8.4 <5.9.0'
1486
1487 - '@typescript-eslint/types@8.34.1':
1488 - resolution: {integrity: sha512-rjLVbmE7HR18kDsjNIZQHxmv9RZwlgzavryL5Lnj2ujIRTeXlKtILHgRNmQ3j4daw7zd+mQgy+uyt6Zo6I0IGA==}
1487 + '@typescript-eslint/types@8.35.0':
1488 + resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==}
1489 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1490
1491 - '@typescript-eslint/typescript-estree@8.34.1':
1492 - resolution: {integrity: sha512-rjCNqqYPuMUF5ODD+hWBNmOitjBWghkGKJg6hiCHzUvXRy6rK22Jd3rwbP2Xi+R7oYVvIKhokHVhH41BxPV5mA==}
1491 + '@typescript-eslint/typescript-estree@8.35.0':
1492 + resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==}
1493 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1494 peerDependencies:
1495 typescript: '>=4.8.4 <5.9.0'
1496
1497 - '@typescript-eslint/utils@8.34.1':
1498 - resolution: {integrity: sha512-mqOwUdZ3KjtGk7xJJnLbHxTuWVn3GO2WZZuM+Slhkun4+qthLdXx32C8xIXbO1kfCECb3jIs3eoxK3eryk7aoQ==}
1497 + '@typescript-eslint/utils@8.35.0':
1498 + resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==}
1499 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1500 peerDependencies:
1501 eslint: ^8.57.0 || ^9.0.0
1502 typescript: '>=4.8.4 <5.9.0'
1503
1504 - '@typescript-eslint/visitor-keys@8.34.1':
1505 - resolution: {integrity: sha512-xoh5rJ+tgsRKoXnkBPFRLZ7rjKM0AfVbC68UZ/ECXoDbfggb9RbEySN359acY1vS3qZ0jVTVWzbtfapwm5ztxw==}
1504 + '@typescript-eslint/visitor-keys@8.35.0':
1505 + resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==}
1506 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1507
1508 '@ungap/structured-clone@1.3.0':
@@ -1522,8 +1522,8 @@ packages:
1522 vite: ^5.0.0 || ^6.0.0
1523 vue: ^3.2.25
1524
1525 - '@vitest/eslint-plugin@1.2.7':
1526 - resolution: {integrity: sha512-7WHcGZo6uXsE4SsSnpGDqKyGrd6NfOMM52WKoHSpTRZLbjMuDyHfA5P7m8yrr73tpqYjsiAdSjSerOnx8uEhpA==}
1525 + '@vitest/eslint-plugin@1.3.3':
1526 + resolution: {integrity: sha512-zOB4T5f80JXfP5DC2yQl7azRYq8PmGqYle3uxh3a0NnbKc+EaSYSpEcrVAh2r5W97pi3BVv7oRb5NdEQy0cCXA==}
1527 peerDependencies:
1528 eslint: '>= 8.57.0'
1529 typescript: '>= 5.0.0'
@@ -1563,14 +1563,14 @@ packages:
1563 '@vitest/utils@3.2.4':
1564 resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
1565
1566 - '@volar/language-core@2.4.14':
1567 - resolution: {integrity: sha512-X6beusV0DvuVseaOEy7GoagS4rYHgDHnTrdOj5jeUb49fW5ceQyP9Ej5rBhqgz2wJggl+2fDbbojq1XKaxDi6w==}
1566 + '@volar/language-core@2.4.15':
1567 + resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
1568
1569 - '@volar/source-map@2.4.14':
1570 - resolution: {integrity: sha512-5TeKKMh7Sfxo8021cJfmBzcjfY1SsXsPMMjMvjY7ivesdnybqqS+GxGAoXHAOUawQTwtdUxgP65Im+dEmvWtYQ==}
1569 + '@volar/source-map@2.4.15':
1570 + resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
1571
1572 - '@volar/typescript@2.4.14':
1573 - resolution: {integrity: sha512-p8Z6f/bZM3/HyCdRNFZOEEzts51uV8WHeN8Tnfnm2EBv6FDB2TQLzfVx7aJvnl8ofKAOnS64B2O8bImBFaauRw==}
1572 + '@volar/typescript@2.4.15':
1573 + resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
1574
1575 '@vue/babel-helper-vue-transform-on@1.4.0':
1576 resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==}
@@ -1588,33 +1588,15 @@ packages:
1588 peerDependencies:
1589 '@babel/core': ^7.0.0-0
1590
1591 - '@vue/compiler-core@3.5.15':
1592 - resolution: {integrity: sha512-nGRc6YJg/kxNqbv/7Tg4juirPnjHvuVdhcmDvQWVZXlLHjouq7VsKmV1hIxM/8yKM0VUfwT/Uzc0lO510ltZqw==}
1593 -
1594 - '@vue/compiler-core@3.5.16':
1595 - resolution: {integrity: sha512-AOQS2eaQOaaZQoL1u+2rCJIKDruNXVBZSiUD3chnUrsoX5ZTQMaCvXlWNIfxBJuU15r1o7+mpo5223KVtIhAgQ==}
1596 -
1591 '@vue/compiler-core@3.5.17':
1592 resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==}
1593
1600 - '@vue/compiler-dom@3.5.15':
1601 - resolution: {integrity: sha512-ZelQd9n+O/UCBdL00rlwCrsArSak+YLZpBVuNDio1hN3+wrCshYZEDUO3khSLAzPbF1oQS2duEoMDUHScUlYjA==}
1602 -
1603 - '@vue/compiler-dom@3.5.16':
1604 - resolution: {integrity: sha512-SSJIhBr/teipXiXjmWOVWLnxjNGo65Oj/8wTEQz0nqwQeP75jWZ0n4sF24Zxoht1cuJoWopwj0J0exYwCJ0dCQ==}
1605 -
1594 '@vue/compiler-dom@3.5.17':
1595 resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==}
1596
1609 - '@vue/compiler-sfc@3.5.15':
1610 - resolution: {integrity: sha512-3zndKbxMsOU6afQWer75Zot/aydjtxNj0T2KLg033rAFaQUn2PGuE32ZRe4iMhflbTcAxL0yEYsRWFxtPro8RQ==}
1611 -
1597 '@vue/compiler-sfc@3.5.17':
1598 resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==}
1599
1615 - '@vue/compiler-ssr@3.5.15':
1616 - resolution: {integrity: sha512-gShn8zRREZbrXqTtmLSCffgZXDWv8nHc/GhsW+mbwBfNZL5pI96e7IWcIq8XGQe1TLtVbu7EV9gFIVSmfyarPg==}
1617 -
1600 '@vue/compiler-ssr@3.5.17':
1601 resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==}
1602
@@ -1624,23 +1606,17 @@ packages:
1606 '@vue/devtools-api@6.6.4':
1607 resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
1608
1627 - '@vue/devtools-api@7.7.6':
1628 - resolution: {integrity: sha512-b2Xx0KvXZObePpXPYHvBRRJLDQn5nhKjXh7vUhMEtWxz1AYNFOVIsh5+HLP8xDGL7sy+Q7hXeUxPHB/KgbtsPw==}
1609 + '@vue/devtools-api@7.7.7':
1610 + resolution: {integrity: sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==}
1611
1612 '@vue/devtools-core@7.7.7':
1613 resolution: {integrity: sha512-9z9TLbfC+AjAi1PQyWX+OErjIaJmdFlbDHcD+cAMYKY6Bh5VlsAtCeGyRMrXwIlMEQPukvnWt3gZBLwTAIMKzQ==}
1614 peerDependencies:
1615 vue: ^3.0.0
1616
1635 - '@vue/devtools-kit@7.7.6':
1636 - resolution: {integrity: sha512-geu7ds7tem2Y7Wz+WgbnbZ6T5eadOvozHZ23Atk/8tksHMFOFylKi1xgGlQlVn0wlkEf4hu+vd5ctj1G4kFtwA==}
1637 -
1617 '@vue/devtools-kit@7.7.7':
1618 resolution: {integrity: sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==}
1619
1641 - '@vue/devtools-shared@7.7.6':
1642 - resolution: {integrity: sha512-yFEgJZ/WblEsojQQceuyK6FzpFDx4kqrz2ohInxNj5/DnhoX023upTv4OD6lNPLAA5LLkbwPVb10o/7b+Y4FVA==}
1643 -
1620 '@vue/devtools-shared@7.7.7':
1621 resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==}
1622
@@ -1666,12 +1642,6 @@ packages:
1642 peerDependencies:
1643 vue: 3.5.17
1644
1669 - '@vue/shared@3.5.15':
1670 - resolution: {integrity: sha512-bKvgFJJL1ZX9KxMCTQY6xD9Dhe3nusd1OhyOb1cJYGqvAr0Vg8FIjHPMOEVbJ9GDT9HG+Bjdn4oS8ohKP8EvoA==}
1671 -
1672 - '@vue/shared@3.5.16':
1673 - resolution: {integrity: sha512-c/0fWy3Jw6Z8L9FmTyYfkpM5zklnqqa9+a6dz3DvONRKW2NEbh46BP0FHuLFSWi2TnQEtp91Z6zOWNrU6QiyPg==}
1674 -
1645 '@vue/shared@3.5.17':
1646 resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==}
1647
@@ -1702,11 +1672,6 @@ packages:
1672 peerDependencies:
1673 vue: '>=3.0.0'
1674
1705 - '@vueuse/shared@13.3.0':
1706 - resolution: {integrity: sha512-L1QKsF0Eg9tiZSFXTgodYnu0Rsa2P0En2LuLrIs/jgrkyiDuJSsPZK+tx+wU0mMsYHUYEjNsuE41uqqkuR8VhA==}
1707 - peerDependencies:
1708 - vue: ^3.5.0
1709 -
1675 '@vueuse/shared@13.4.0':
1676 resolution: {integrity: sha512-+AxuKbw8R1gYy5T21V5yhadeNM7rJqb4cPaRI9DdGnnNl3uqXh+unvQ3uCaA2DjYLbNr1+l7ht/B4qEsRegX6A==}
1677 peerDependencies:
@@ -1724,11 +1689,6 @@ packages:
1689 peerDependencies:
1690 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
1691
1727 - acorn@8.14.1:
1728 - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
1729 - engines: {node: '>=0.4.0'}
1730 - hasBin: true
1731 -
1692 acorn@8.15.0:
1693 resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
1694 engines: {node: '>=0.4.0'}
@@ -1776,10 +1736,6 @@ packages:
1736 resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
1737 engines: {node: '>=12'}
1738
1779 - ansis@4.0.0:
1780 - resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==}
1781 - engines: {node: '>=14'}
1782 -
1739 ansis@4.1.0:
1740 resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==}
1741 engines: {node: '>=14'}
@@ -1861,8 +1817,8 @@ packages:
1817 bcrypt-pbkdf@1.0.2:
1818 resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==}
1819
1864 - birpc@2.3.0:
1865 - resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==}
1820 + birpc@2.4.0:
1821 + resolution: {integrity: sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==}
1822
1823 blob-util@2.0.2:
1824 resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
@@ -1873,18 +1829,18 @@ packages:
1829 boolbase@1.0.0:
1830 resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
1831
1876 - brace-expansion@1.1.11:
1877 - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1832 + brace-expansion@1.1.12:
1833 + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==}
1834
1879 - brace-expansion@2.0.1:
1880 - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1835 + brace-expansion@2.0.2:
1836 + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
1837
1838 braces@3.0.3:
1839 resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
1840 engines: {node: '>=8'}
1841
1886 - browserslist@4.24.5:
1887 - resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==}
1842 + browserslist@4.25.1:
1843 + resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==}
1844 engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
1845 hasBin: true
1846
@@ -1941,8 +1897,8 @@ packages:
1897 resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
1898 engines: {node: '>=10'}
1899
1944 - caniuse-lite@1.0.30001718:
1945 - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==}
1900 + caniuse-lite@1.0.30001726:
1901 + resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==}
1902
1903 caseless@0.12.0:
1904 resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@@ -2090,8 +2046,8 @@ packages:
2046 resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
2047 engines: {node: '>=12.13'}
2048
2093 - core-js-compat@3.42.0:
2094 - resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==}
2049 + core-js-compat@3.43.0:
2050 + resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
2051
2052 core-util-is@1.0.2:
2053 resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
@@ -2137,8 +2093,8 @@ packages:
2093 resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
2094 engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
2095
2140 - cssstyle@4.3.1:
2141 - resolution: {integrity: sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==}
2096 + cssstyle@4.6.0:
2097 + resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==}
2098 engines: {node: '>=18'}
2099
2100 csstype@3.0.11:
@@ -2197,8 +2153,8 @@ packages:
2153 decimal.js@10.5.0:
2154 resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
2155
2200 - decode-named-character-reference@1.1.0:
2201 - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==}
2156 + decode-named-character-reference@1.2.0:
2157 + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
2158
2159 deep-eql@5.0.2:
2160 resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
@@ -2280,8 +2236,8 @@ packages:
2236 domutils@3.2.2:
2237 resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
2238
2283 - dotenv@16.5.0:
2284 - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
2239 + dotenv@16.6.1:
2240 + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
2241 engines: {node: '>=12'}
2242
2243 dunder-proto@1.0.1:
@@ -2308,8 +2264,8 @@ packages:
2264 engines: {node: '>=14'}
2265 hasBin: true
2266
2311 - electron-to-chromium@1.5.159:
2312 - resolution: {integrity: sha512-CEvHptWAMV5p6GJ0Lq8aheyvVbfzVrv5mmidu1D3pidoVNkB3tTBsTMVtPJ+rzRK5oV229mCLz9Zj/hNvU8GBA==}
2267 + electron-to-chromium@1.5.177:
2268 + resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==}
2269
2270 emoji-regex@8.0.0:
2271 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2317,11 +2273,11 @@ packages:
2273 emoji-regex@9.2.2:
2274 resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
2275
2320 - end-of-stream@1.4.4:
2321 - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
2276 + end-of-stream@1.4.5:
2277 + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
2278
2323 - enhanced-resolve@5.18.1:
2324 - resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
2279 + enhanced-resolve@5.18.2:
2280 + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==}
2281 engines: {node: '>=10.13.0'}
2282
2283 enquirer@2.4.1:
@@ -2332,8 +2288,8 @@ packages:
2288 resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
2289 engines: {node: '>=0.12'}
2290
2335 - entities@6.0.0:
2336 - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==}
2291 + entities@6.0.1:
2292 + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
2293 engines: {node: '>=0.12'}
2294
2295 error-ex@1.3.2:
@@ -2447,8 +2403,8 @@ packages:
2403 typescript:
2404 optional: true
2405
2450 - eslint-plugin-jsdoc@51.2.1:
2451 - resolution: {integrity: sha512-iE2qpG/kaA9xXfEcTNSsxNvH5O8+o38VBGLwl2oZisQaM1JRGftTLJAGQrj7YZjSkp3n9VCrNTjOpo3ONhTApQ==}
2406 + eslint-plugin-jsdoc@51.2.3:
2407 + resolution: {integrity: sha512-pagzxFubOih+O6XSB1D8BkDkJjF4G4/v8s9pRg4FkXQJLu0e3QJg621ayhmnhyc5mNBpp3cYCNiUyeLQs7oz7w==}
2408 engines: {node: '>=20.11.0'}
2409 peerDependencies:
2410 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -2538,8 +2494,8 @@ packages:
2494 resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
2495 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2496
2541 - eslint@9.29.0:
2542 - resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==}
2497 + eslint@9.30.0:
2498 + resolution: {integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==}
2499 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2500 hasBin: true
2501 peerDependencies:
@@ -2616,8 +2572,8 @@ packages:
2572 resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
2573 engines: {node: '>=12.0.0'}
2574
2619 - exsolve@1.0.5:
2620 - resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==}
2575 + exsolve@1.0.7:
2576 + resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
2577
2578 extend@3.0.2:
2579 resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -2653,8 +2609,8 @@ packages:
2609 fd-slicer@1.1.0:
2610 resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
2611
2656 - fdir@6.4.5:
2657 - resolution: {integrity: sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==}
2612 + fdir@6.4.6:
2613 + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
2614 peerDependencies:
2615 picomatch: ^3 || ^4
2616 peerDependenciesMeta:
@@ -2719,8 +2675,8 @@ packages:
2675 forever-agent@0.6.1:
2676 resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
2677
2722 - form-data@4.0.2:
2723 - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
2678 + form-data@4.0.3:
2679 + resolution: {integrity: sha512-qsITQPfmvMOSAdeyZ+12I1c+CKSstAFAwu+97zrnWAbIr5u8wfsExUzCesVLC8NgHuRUqNN4Zy6UPWUTRGslcA==}
2680 engines: {node: '>= 6'}
2681
2682 format@0.2.2:
@@ -2938,12 +2894,12 @@ packages:
2894 resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
2895 engines: {node: '>= 4'}
2896
2941 - ignore@7.0.4:
2942 - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==}
2897 + ignore@7.0.5:
2898 + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
2899 engines: {node: '>= 4'}
2900
2945 - immutable@5.1.2:
2946 - resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==}
2901 + immutable@5.1.3:
2902 + resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==}
2903
2904 import-fresh@3.3.1:
2905 resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
@@ -3311,9 +3267,6 @@ packages:
3267 longest-streak@3.1.0:
3268 resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
3269
3314 - loupe@3.1.3:
3315 - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
3316 -
3270 loupe@3.1.4:
3271 resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==}
3272
@@ -3751,8 +3704,8 @@ packages:
3704 pathe@2.0.3:
3705 resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
3706
3754 - pathval@2.0.0:
3755 - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
3707 + pathval@2.0.1:
3708 + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
3709 engines: {node: '>= 14.16'}
3710
3711 pause-stream@0.0.11:
@@ -3810,8 +3763,8 @@ packages:
3763 pkg-types@1.3.1:
3764 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
3765
3813 - pkg-types@2.1.0:
3814 - resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
3766 + pkg-types@2.1.1:
3767 + resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==}
3768
3769 please-upgrade-node@3.2.0:
3770 resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
@@ -3830,10 +3783,6 @@ packages:
3783 resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
3784 engines: {node: '>=4'}
3785
3833 - postcss@8.5.3:
3834 - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
3835 - engines: {node: ^10 || ^12 || >=14}
3836 -
3786 postcss@8.5.6:
3787 resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
3788 engines: {node: ^10 || ^12 || >=14}
@@ -3897,8 +3846,8 @@ packages:
3846 prettier-plugin-svelte:
3847 optional: true
3848
3900 - prettier@3.6.0:
3901 - resolution: {integrity: sha512-ujSB9uXHJKzM/2GBuE0hBOUgC77CN3Bnpqa+g80bkv3T3A93wL/xlzDATHhnhkzifz/UE2SNOvmbTz5hSkDlHw==}
3849 + prettier@3.6.2:
3850 + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==}
3851 engines: {node: '>=14'}
3852 hasBin: true
3853
@@ -3931,8 +3880,8 @@ packages:
3880 engines: {node: '>= 0.10'}
3881 hasBin: true
3882
3934 - pump@3.0.2:
3935 - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==}
3883 + pump@3.0.3:
3884 + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==}
3885
3886 punycode.js@2.3.1:
3887 resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
@@ -4050,8 +3999,8 @@ packages:
3999 rollup:
4000 optional: true
4001
4053 - rollup@4.41.1:
4054 - resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==}
4002 + rollup@4.44.1:
4003 + resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==}
4004 engines: {node: '>=18.0.0', npm: '>=8.0.0'}
4005 hasBin: true
4006
@@ -4117,8 +4066,8 @@ packages:
4066 resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
4067 engines: {node: '>=8'}
4068
4120 - shell-quote@1.8.2:
4121 - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==}
4069 + shell-quote@1.8.3:
4070 + resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
4071 engines: {node: '>= 0.4'}
4072
4073 shiki@3.7.0:
@@ -4285,12 +4234,12 @@ packages:
4234 symbol-tree@3.2.4:
4235 resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
4236
4288 - synckit@0.11.6:
4289 - resolution: {integrity: sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==}
4237 + synckit@0.11.8:
4238 + resolution: {integrity: sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==}
4239 engines: {node: ^14.18.0 || >=16.0.0}
4240
4292 - tailwindcss@4.1.10:
4293 - resolution: {integrity: sha512-P3nr6WkvKV/ONsTzj6Gb57sWPMX29EPNPopo7+FcpkQaNsrNpZ1pv8QmrYI2RqEKD7mlGqLnGovlcYnBK0IqUA==}
4241 + tailwindcss@4.1.11:
4242 + resolution: {integrity: sha512-2E9TBm6MDD/xKYe+dvJZAmg3yxIEDNRc0jwlNyDg/4Fil2QcSLjFKGVff0lAf1jjeaArlG/M75Ey/EYr/OJtBA==}
4243
4244 tapable@2.2.2:
4245 resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==}
@@ -4554,10 +4503,10 @@ packages:
4503 peerDependencies:
4504 vite: ^3.1.0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
4505
4557 - vite-plugin-vue-inspector@5.3.1:
4558 - resolution: {integrity: sha512-cBk172kZKTdvGpJuzCCLg8lJ909wopwsu3Ve9FsL1XsnLBiRT9U3MePcqrgGHgCX2ZgkqZmAGR8taxw+TV6s7A==}
4506 + vite-plugin-vue-inspector@5.3.2:
4507 + resolution: {integrity: sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q==}
4508 peerDependencies:
4560 - vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0
4509 + vite: ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
4510
4511 vite-svg-loader@5.1.0:
4512 resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==}
@@ -4655,8 +4604,8 @@ packages:
4604 vue-component-type-helpers@2.2.10:
4605 resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==}
4606
4658 - vue-eslint-parser@10.1.3:
4659 - resolution: {integrity: sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==}
4607 + vue-eslint-parser@10.1.4:
4608 + resolution: {integrity: sha512-EIZvCukIEMHEb3mxOKemtvWR1fcUAdWWAgkfyjmRHzvyhrZvBvH9oz69+thDIWhGiIQjZnPkCn8yHqvjM+a9eg==}
4609 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
4610 peerDependencies:
4611 eslint: ^8.57.0 || ^9.0.0
@@ -4955,44 +4904,44 @@ snapshots:
4904 '@jridgewell/gen-mapping': 0.3.8
4905 '@jridgewell/trace-mapping': 0.3.25
4906
4958 - '@antfu/eslint-config@4.16.1(@vue/compiler-sfc@3.5.17)(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
4907 + '@antfu/eslint-config@4.16.1(@vue/compiler-sfc@3.5.17)(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
4908 dependencies:
4909 '@antfu/install-pkg': 1.1.0
4910 '@clack/prompts': 0.11.0
4962 - '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.29.0(jiti@2.4.2))
4911 + '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.30.0(jiti@2.4.2))
4912 '@eslint/markdown': 6.6.0
4964 - '@stylistic/eslint-plugin': 5.0.0(eslint@9.29.0(jiti@2.4.2))
4965 - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
4966 - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
4967 - '@vitest/eslint-plugin': 1.2.7(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
4913 + '@stylistic/eslint-plugin': 5.0.0(eslint@9.30.0(jiti@2.4.2))
4914 + '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4915 + '@typescript-eslint/parser': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4916 + '@vitest/eslint-plugin': 1.3.3(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
4917 ansis: 4.1.0
4918 cac: 6.7.14
4970 - eslint: 9.29.0(jiti@2.4.2)
4971 - eslint-config-flat-gitignore: 2.1.0(eslint@9.29.0(jiti@2.4.2))
4919 + eslint: 9.30.0(jiti@2.4.2)
4920 + eslint-config-flat-gitignore: 2.1.0(eslint@9.30.0(jiti@2.4.2))
4921 eslint-flat-config-utils: 2.1.0
4973 - eslint-merge-processors: 2.0.0(eslint@9.29.0(jiti@2.4.2))
4974 - eslint-plugin-antfu: 3.1.1(eslint@9.29.0(jiti@2.4.2))
4975 - eslint-plugin-command: 3.3.1(eslint@9.29.0(jiti@2.4.2))
4976 - eslint-plugin-import-lite: 0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
4977 - eslint-plugin-jsdoc: 51.2.1(eslint@9.29.0(jiti@2.4.2))
4978 - eslint-plugin-jsonc: 2.20.1(eslint@9.29.0(jiti@2.4.2))
4979 - eslint-plugin-n: 17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
4922 + eslint-merge-processors: 2.0.0(eslint@9.30.0(jiti@2.4.2))
4923 + eslint-plugin-antfu: 3.1.1(eslint@9.30.0(jiti@2.4.2))
4924 + eslint-plugin-command: 3.3.1(eslint@9.30.0(jiti@2.4.2))
4925 + eslint-plugin-import-lite: 0.3.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4926 + eslint-plugin-jsdoc: 51.2.3(eslint@9.30.0(jiti@2.4.2))
4927 + eslint-plugin-jsonc: 2.20.1(eslint@9.30.0(jiti@2.4.2))
4928 + eslint-plugin-n: 17.20.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4929 eslint-plugin-no-only-tests: 3.3.0
4981 - eslint-plugin-perfectionist: 4.15.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
4982 - eslint-plugin-pnpm: 0.3.1(eslint@9.29.0(jiti@2.4.2))
4983 - eslint-plugin-regexp: 2.9.0(eslint@9.29.0(jiti@2.4.2))
4984 - eslint-plugin-toml: 0.12.0(eslint@9.29.0(jiti@2.4.2))
4985 - eslint-plugin-unicorn: 59.0.1(eslint@9.29.0(jiti@2.4.2))
4986 - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))
4987 - eslint-plugin-vue: 10.2.0(eslint@9.29.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.4.2)))
4988 - eslint-plugin-yml: 1.18.0(eslint@9.29.0(jiti@2.4.2))
4989 - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.29.0(jiti@2.4.2))
4930 + eslint-plugin-perfectionist: 4.15.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4931 + eslint-plugin-pnpm: 0.3.1(eslint@9.30.0(jiti@2.4.2))
4932 + eslint-plugin-regexp: 2.9.0(eslint@9.30.0(jiti@2.4.2))
4933 + eslint-plugin-toml: 0.12.0(eslint@9.30.0(jiti@2.4.2))
4934 + eslint-plugin-unicorn: 59.0.1(eslint@9.30.0(jiti@2.4.2))
4935 + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))
4936 + eslint-plugin-vue: 10.2.0(eslint@9.30.0(jiti@2.4.2))(vue-eslint-parser@10.1.4(eslint@9.30.0(jiti@2.4.2)))
4937 + eslint-plugin-yml: 1.18.0(eslint@9.30.0(jiti@2.4.2))
4938 + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.0(jiti@2.4.2))
4939 globals: 16.2.0
4940 jsonc-eslint-parser: 2.4.0
4941 local-pkg: 1.1.1
4942 parse-gitignore: 2.0.0
4943 toml-eslint-parser: 0.10.0
4995 - vue-eslint-parser: 10.1.3(eslint@9.29.0(jiti@2.4.2))
4944 + vue-eslint-parser: 10.1.4(eslint@9.30.0(jiti@2.4.2))
4945 yaml-eslint-parser: 1.3.0
4946 transitivePeerDependencies:
4947 - '@eslint/json'
@@ -5008,7 +4957,7 @@ snapshots:
4957
4958 '@antfu/ni@24.4.0':
4959 dependencies:
5011 - ansis: 4.0.0
4960 + ansis: 4.1.0
4961 fzf: 0.5.2
4962 package-manager-detector: 1.3.0
4963 tinyexec: 1.0.1
@@ -5029,20 +4978,20 @@ snapshots:
4978 js-tokens: 4.0.0
4979 picocolors: 1.1.1
4980
5032 - '@babel/compat-data@7.27.3': {}
4981 + '@babel/compat-data@7.27.7': {}
4982
5034 - '@babel/core@7.27.3':
4983 + '@babel/core@7.27.7':
4984 dependencies:
4985 '@ampproject/remapping': 2.3.0
4986 '@babel/code-frame': 7.27.1
5038 - '@babel/generator': 7.27.3
4987 + '@babel/generator': 7.27.5
4988 '@babel/helper-compilation-targets': 7.27.2
5040 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.3)
5041 - '@babel/helpers': 7.27.3
5042 - '@babel/parser': 7.27.3
4989 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7)
4990 + '@babel/helpers': 7.27.6
4991 + '@babel/parser': 7.27.7
4992 '@babel/template': 7.27.2
5044 - '@babel/traverse': 7.27.3
5045 - '@babel/types': 7.27.3
4993 + '@babel/traverse': 7.27.7
4994 + '@babel/types': 7.27.7
4995 convert-source-map: 2.0.0
4996 debug: 4.4.1(supports-color@8.1.1)
4997 gensync: 1.0.0-beta.2
@@ -5051,81 +5000,81 @@ snapshots:
5000 transitivePeerDependencies:
5001 - supports-color
5002
5054 - '@babel/generator@7.27.3':
5003 + '@babel/generator@7.27.5':
5004 dependencies:
5056 - '@babel/parser': 7.27.3
5057 - '@babel/types': 7.27.3
5005 + '@babel/parser': 7.27.7
5006 + '@babel/types': 7.27.7
5007 '@jridgewell/gen-mapping': 0.3.8
5008 '@jridgewell/trace-mapping': 0.3.25
5009 jsesc: 3.1.0
5010
5011 '@babel/helper-annotate-as-pure@7.27.3':
5012 dependencies:
5064 - '@babel/types': 7.27.3
5013 + '@babel/types': 7.27.7
5014
5015 '@babel/helper-compilation-targets@7.27.2':
5016 dependencies:
5068 - '@babel/compat-data': 7.27.3
5017 + '@babel/compat-data': 7.27.7
5018 '@babel/helper-validator-option': 7.27.1
5070 - browserslist: 4.24.5
5019 + browserslist: 4.25.1
5020 lru-cache: 5.1.1
5021 semver: 6.3.1
5022
5074 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.3)':
5023 + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)':
5024 dependencies:
5076 - '@babel/core': 7.27.3
5025 + '@babel/core': 7.27.7
5026 '@babel/helper-annotate-as-pure': 7.27.3
5027 '@babel/helper-member-expression-to-functions': 7.27.1
5028 '@babel/helper-optimise-call-expression': 7.27.1
5080 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.3)
5029 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7)
5030 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
5082 - '@babel/traverse': 7.27.3
5031 + '@babel/traverse': 7.27.7
5032 semver: 6.3.1
5033 transitivePeerDependencies:
5034 - supports-color
5035
5036 '@babel/helper-member-expression-to-functions@7.27.1':
5037 dependencies:
5089 - '@babel/traverse': 7.27.3
5090 - '@babel/types': 7.27.3
5038 + '@babel/traverse': 7.27.7
5039 + '@babel/types': 7.27.7
5040 transitivePeerDependencies:
5041 - supports-color
5042
5043 '@babel/helper-module-imports@7.27.1':
5044 dependencies:
5096 - '@babel/traverse': 7.27.3
5097 - '@babel/types': 7.27.3
5045 + '@babel/traverse': 7.27.7
5046 + '@babel/types': 7.27.7
5047 transitivePeerDependencies:
5048 - supports-color
5049
5101 - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.3)':
5050 + '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)':
5051 dependencies:
5103 - '@babel/core': 7.27.3
5052 + '@babel/core': 7.27.7
5053 '@babel/helper-module-imports': 7.27.1
5054 '@babel/helper-validator-identifier': 7.27.1
5106 - '@babel/traverse': 7.27.3
5055 + '@babel/traverse': 7.27.7
5056 transitivePeerDependencies:
5057 - supports-color
5058
5059 '@babel/helper-optimise-call-expression@7.27.1':
5060 dependencies:
5112 - '@babel/types': 7.27.3
5061 + '@babel/types': 7.27.7
5062
5063 '@babel/helper-plugin-utils@7.27.1': {}
5064
5116 - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.3)':
5065 + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)':
5066 dependencies:
5118 - '@babel/core': 7.27.3
5067 + '@babel/core': 7.27.7
5068 '@babel/helper-member-expression-to-functions': 7.27.1
5069 '@babel/helper-optimise-call-expression': 7.27.1
5121 - '@babel/traverse': 7.27.3
5070 + '@babel/traverse': 7.27.7
5071 transitivePeerDependencies:
5072 - supports-color
5073
5074 '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
5075 dependencies:
5127 - '@babel/traverse': 7.27.3
5128 - '@babel/types': 7.27.3
5076 + '@babel/traverse': 7.27.7
5077 + '@babel/types': 7.27.7
5078 transitivePeerDependencies:
5079 - supports-color
5080
@@ -5135,83 +5084,79 @@ snapshots:
5084
5085 '@babel/helper-validator-option@7.27.1': {}
5086
5138 - '@babel/helpers@7.27.3':
5087 + '@babel/helpers@7.27.6':
5088 dependencies:
5089 '@babel/template': 7.27.2
5141 - '@babel/types': 7.27.3
5142 -
5143 - '@babel/parser@7.27.3':
5144 - dependencies:
5145 - '@babel/types': 7.27.3
5090 + '@babel/types': 7.27.7
5091
5147 - '@babel/parser@7.27.5':
5092 + '@babel/parser@7.27.7':
5093 dependencies:
5149 - '@babel/types': 7.27.3
5094 + '@babel/types': 7.27.7
5095
5151 - '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.3)':
5096 + '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.7)':
5097 dependencies:
5153 - '@babel/core': 7.27.3
5154 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3)
5098 + '@babel/core': 7.27.7
5099 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7)
5100 '@babel/helper-plugin-utils': 7.27.1
5156 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.3)
5101 + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.7)
5102 transitivePeerDependencies:
5103 - supports-color
5104
5160 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.3)':
5105 + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.7)':
5106 dependencies:
5162 - '@babel/core': 7.27.3
5107 + '@babel/core': 7.27.7
5108 '@babel/helper-plugin-utils': 7.27.1
5109
5165 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.3)':
5110 + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.7)':
5111 dependencies:
5167 - '@babel/core': 7.27.3
5112 + '@babel/core': 7.27.7
5113 '@babel/helper-plugin-utils': 7.27.1
5114
5170 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.3)':
5115 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.7)':
5116 dependencies:
5172 - '@babel/core': 7.27.3
5117 + '@babel/core': 7.27.7
5118 '@babel/helper-plugin-utils': 7.27.1
5119
5175 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.3)':
5120 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)':
5121 dependencies:
5177 - '@babel/core': 7.27.3
5122 + '@babel/core': 7.27.7
5123 '@babel/helper-plugin-utils': 7.27.1
5124
5180 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.3)':
5125 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.7)':
5126 dependencies:
5182 - '@babel/core': 7.27.3
5127 + '@babel/core': 7.27.7
5128 '@babel/helper-plugin-utils': 7.27.1
5129
5185 - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.3)':
5130 + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.7)':
5131 dependencies:
5187 - '@babel/core': 7.27.3
5132 + '@babel/core': 7.27.7
5133 '@babel/helper-annotate-as-pure': 7.27.3
5189 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.3)
5134 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7)
5135 '@babel/helper-plugin-utils': 7.27.1
5136 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
5192 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.3)
5137 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7)
5138 transitivePeerDependencies:
5139 - supports-color
5140
5141 '@babel/template@7.27.2':
5142 dependencies:
5143 '@babel/code-frame': 7.27.1
5199 - '@babel/parser': 7.27.3
5200 - '@babel/types': 7.27.3
5144 + '@babel/parser': 7.27.7
5145 + '@babel/types': 7.27.7
5146
5202 - '@babel/traverse@7.27.3':
5147 + '@babel/traverse@7.27.7':
5148 dependencies:
5149 '@babel/code-frame': 7.27.1
5205 - '@babel/generator': 7.27.3
5206 - '@babel/parser': 7.27.3
5150 + '@babel/generator': 7.27.5
5151 + '@babel/parser': 7.27.7
5152 '@babel/template': 7.27.2
5208 - '@babel/types': 7.27.3
5153 + '@babel/types': 7.27.7
5154 debug: 4.4.1(supports-color@8.1.1)
5155 globals: 11.12.0
5156 transitivePeerDependencies:
5157 - supports-color
5158
5214 - '@babel/types@7.27.3':
5159 + '@babel/types@7.27.7':
5160 dependencies:
5161 '@babel/helper-string-parser': 7.27.1
5162 '@babel/helper-validator-identifier': 7.27.1
@@ -5229,41 +5174,41 @@ snapshots:
5174
5175 '@codemirror/autocomplete@6.18.6':
5176 dependencies:
5232 - '@codemirror/language': 6.11.0
5177 + '@codemirror/language': 6.11.2
5178 '@codemirror/state': 6.5.2
5234 - '@codemirror/view': 6.36.8
5179 + '@codemirror/view': 6.38.0
5180 '@lezer/common': 1.2.3
5181
5182 '@codemirror/commands@6.8.1':
5183 dependencies:
5239 - '@codemirror/language': 6.11.0
5184 + '@codemirror/language': 6.11.2
5185 '@codemirror/state': 6.5.2
5241 - '@codemirror/view': 6.36.8
5186 + '@codemirror/view': 6.38.0
5187 '@lezer/common': 1.2.3
5188
5189 '@codemirror/lang-javascript@6.2.4':
5190 dependencies:
5191 '@codemirror/autocomplete': 6.18.6
5247 - '@codemirror/language': 6.11.0
5192 + '@codemirror/language': 6.11.2
5193 '@codemirror/lint': 6.8.5
5194 '@codemirror/state': 6.5.2
5250 - '@codemirror/view': 6.36.8
5195 + '@codemirror/view': 6.38.0
5196 '@lezer/common': 1.2.3
5197 '@lezer/javascript': 1.5.1
5198
5199 '@codemirror/lang-xml@6.1.0':
5200 dependencies:
5201 '@codemirror/autocomplete': 6.18.6
5257 - '@codemirror/language': 6.11.0
5202 + '@codemirror/language': 6.11.2
5203 '@codemirror/state': 6.5.2
5259 - '@codemirror/view': 6.36.8
5204 + '@codemirror/view': 6.38.0
5205 '@lezer/common': 1.2.3
5206 '@lezer/xml': 1.0.6
5207
5263 - '@codemirror/language@6.11.0':
5208 + '@codemirror/language@6.11.2':
5209 dependencies:
5210 '@codemirror/state': 6.5.2
5266 - '@codemirror/view': 6.36.8
5211 + '@codemirror/view': 6.38.0
5212 '@lezer/common': 1.2.3
5213 '@lezer/highlight': 1.2.1
5214 '@lezer/lr': 1.4.2
@@ -5272,13 +5217,13 @@ snapshots:
5217 '@codemirror/lint@6.8.5':
5218 dependencies:
5219 '@codemirror/state': 6.5.2
5275 - '@codemirror/view': 6.36.8
5220 + '@codemirror/view': 6.38.0
5221 crelt: 1.0.6
5222
5223 '@codemirror/search@6.5.11':
5224 dependencies:
5225 '@codemirror/state': 6.5.2
5281 - '@codemirror/view': 6.36.8
5226 + '@codemirror/view': 6.38.0
5227 crelt: 1.0.6
5228
5229 '@codemirror/state@6.5.2':
@@ -5287,14 +5232,15 @@ snapshots:
5232
5233 '@codemirror/theme-one-dark@6.1.3':
5234 dependencies:
5290 - '@codemirror/language': 6.11.0
5235 + '@codemirror/language': 6.11.2
5236 '@codemirror/state': 6.5.2
5292 - '@codemirror/view': 6.36.8
5237 + '@codemirror/view': 6.38.0
5238 '@lezer/highlight': 1.2.1
5239
5295 - '@codemirror/view@6.36.8':
5240 + '@codemirror/view@6.38.0':
5241 dependencies:
5242 '@codemirror/state': 6.5.2
5243 + crelt: 1.0.6
5244 style-mod: 4.1.2
5245 w3c-keyname: 2.2.8
5246
@@ -5334,7 +5280,7 @@ snapshots:
5280 combined-stream: 1.0.8
5281 extend: 3.0.2
5282 forever-agent: 0.6.1
5337 - form-data: 4.0.2
5283 + form-data: 4.0.3
5284 http-signature: 1.4.0
5285 is-typedarray: 1.0.0
5286 isstream: 0.1.2
@@ -5359,7 +5305,7 @@ snapshots:
5305 '@es-joy/jsdoccomment@0.50.2':
5306 dependencies:
5307 '@types/estree': 1.0.8
5362 - '@typescript-eslint/types': 8.34.1
5308 + '@typescript-eslint/types': 8.35.0
5309 comment-parser: 1.4.1
5310 esquery: 1.6.0
5311 jsdoc-type-pratt-parser: 4.1.0
@@ -5367,7 +5313,7 @@ snapshots:
5313 '@es-joy/jsdoccomment@0.52.0':
5314 dependencies:
5315 '@types/estree': 1.0.8
5370 - '@typescript-eslint/types': 8.34.1
5316 + '@typescript-eslint/types': 8.35.0
5317 comment-parser: 1.4.1
5318 esquery: 1.6.0
5319 jsdoc-type-pratt-parser: 4.1.0
@@ -5447,24 +5393,24 @@ snapshots:
5393 '@esbuild/win32-x64@0.25.5':
5394 optional: true
5395
5450 - '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.29.0(jiti@2.4.2))':
5396 + '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.30.0(jiti@2.4.2))':
5397 dependencies:
5398 escape-string-regexp: 4.0.0
5453 - eslint: 9.29.0(jiti@2.4.2)
5399 + eslint: 9.30.0(jiti@2.4.2)
5400 ignore: 5.3.2
5401
5456 - '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@2.4.2))':
5402 + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.0(jiti@2.4.2))':
5403 dependencies:
5458 - eslint: 9.29.0(jiti@2.4.2)
5404 + eslint: 9.30.0(jiti@2.4.2)
5405 eslint-visitor-keys: 3.4.3
5406
5407 '@eslint-community/regexpp@4.12.1': {}
5408
5463 - '@eslint/compat@1.2.9(eslint@9.29.0(jiti@2.4.2))':
5409 + '@eslint/compat@1.3.1(eslint@9.30.0(jiti@2.4.2))':
5410 optionalDependencies:
5465 - eslint: 9.29.0(jiti@2.4.2)
5411 + eslint: 9.30.0(jiti@2.4.2)
5412
5467 - '@eslint/config-array@0.20.1':
5413 + '@eslint/config-array@0.21.0':
5414 dependencies:
5415 '@eslint/object-schema': 2.1.6
5416 debug: 4.4.1(supports-color@8.1.1)
@@ -5472,7 +5418,7 @@ snapshots:
5418 transitivePeerDependencies:
5419 - supports-color
5420
5475 - '@eslint/config-helpers@0.2.2': {}
5421 + '@eslint/config-helpers@0.3.0': {}
5422
5423 '@eslint/core@0.13.0':
5424 dependencies:
@@ -5482,6 +5428,10 @@ snapshots:
5428 dependencies:
5429 '@types/json-schema': 7.0.15
5430
5431 + '@eslint/core@0.15.1':
5432 + dependencies:
5433 + '@types/json-schema': 7.0.15
5434 +
5435 '@eslint/eslintrc@3.3.1':
5436 dependencies:
5437 ajv: 6.12.6
@@ -5496,12 +5446,12 @@ snapshots:
5446 transitivePeerDependencies:
5447 - supports-color
5448
5499 - '@eslint/js@9.29.0': {}
5449 + '@eslint/js@9.30.0': {}
5450
5451 '@eslint/markdown@6.6.0':
5452 dependencies:
5453 '@eslint/core': 0.14.0
5504 - '@eslint/plugin-kit': 0.3.1
5454 + '@eslint/plugin-kit': 0.3.3
5455 github-slugger: 2.0.0
5456 mdast-util-from-markdown: 2.0.2
5457 mdast-util-frontmatter: 2.0.1
@@ -5518,9 +5468,9 @@ snapshots:
5468 '@eslint/core': 0.13.0
5469 levn: 0.4.1
5470
5521 - '@eslint/plugin-kit@0.3.1':
5471 + '@eslint/plugin-kit@0.3.3':
5472 dependencies:
5523 - '@eslint/core': 0.14.0
5473 + '@eslint/core': 0.15.1
5474 levn: 0.4.1
5475
5476 '@f3ve/vue-markdown-it@0.2.3(vue@3.5.17(typescript@5.8.3))':
@@ -5640,22 +5590,22 @@ snapshots:
5590 '@nodelib/fs.scandir': 2.1.5
5591 fastq: 1.19.1
5592
5643 - '@nuxt/kit@3.17.4':
5593 + '@nuxt/kit@3.17.5':
5594 dependencies:
5595 c12: 3.0.4
5596 consola: 3.4.2
5597 defu: 6.1.4
5598 destr: 2.0.5
5599 errx: 0.1.0
5650 - exsolve: 1.0.5
5651 - ignore: 7.0.4
5600 + exsolve: 1.0.7
5601 + ignore: 7.0.5
5602 jiti: 2.4.2
5603 klona: 2.0.6
5604 knitwork: 1.2.0
5605 mlly: 1.7.4
5606 ohash: 2.0.11
5607 pathe: 2.0.3
5658 - pkg-types: 2.1.0
5608 + pkg-types: 2.1.1
5609 scule: 1.3.0
5610 semver: 7.7.2
5611 std-env: 3.9.0
@@ -5733,7 +5683,7 @@ snapshots:
5683 '@pkgjs/parseargs@0.11.0':
5684 optional: true
5685
5736 - '@pkgr/core@0.2.4': {}
5686 + '@pkgr/core@0.2.7': {}
5687
5688 '@polka/url@1.0.0-next.29': {}
5689
@@ -5741,77 +5691,74 @@ snapshots:
5691 dependencies:
5692 quansync: 0.2.10
5693
5744 - '@rolldown/pluginutils@1.0.0-beta.10': {}
5694 + '@rolldown/pluginutils@1.0.0-beta.21': {}
5695
5746 - '@rollup/pluginutils@5.1.4(rollup@4.41.1)':
5696 + '@rollup/pluginutils@5.2.0(rollup@4.44.1)':
5697 dependencies:
5748 - '@types/estree': 1.0.7
5698 + '@types/estree': 1.0.8
5699 estree-walker: 2.0.2
5700 picomatch: 4.0.2
5701 optionalDependencies:
5752 - rollup: 4.41.1
5702 + rollup: 4.44.1
5703
5754 - '@rollup/rollup-android-arm-eabi@4.41.1':
5704 + '@rollup/rollup-android-arm-eabi@4.44.1':
5705 optional: true
5706
5757 - '@rollup/rollup-android-arm64@4.41.1':
5707 + '@rollup/rollup-android-arm64@4.44.1':
5708 optional: true
5709
5760 - '@rollup/rollup-darwin-arm64@4.41.1':
5710 + '@rollup/rollup-darwin-arm64@4.44.1':
5711 optional: true
5712
5763 - '@rollup/rollup-darwin-x64@4.41.1':
5713 + '@rollup/rollup-darwin-x64@4.44.1':
5714 optional: true
5715
5766 - '@rollup/rollup-freebsd-arm64@4.41.1':
5716 + '@rollup/rollup-freebsd-arm64@4.44.1':
5717 optional: true
5718
5769 - '@rollup/rollup-freebsd-x64@4.41.1':
5719 + '@rollup/rollup-freebsd-x64@4.44.1':
5720 optional: true
5721
5772 - '@rollup/rollup-linux-arm-gnueabihf@4.41.1':
5722 + '@rollup/rollup-linux-arm-gnueabihf@4.44.1':
5723 optional: true
5724
5775 - '@rollup/rollup-linux-arm-musleabihf@4.41.1':
5725 + '@rollup/rollup-linux-arm-musleabihf@4.44.1':
5726 optional: true
5727
5778 - '@rollup/rollup-linux-arm64-gnu@4.41.1':
5728 + '@rollup/rollup-linux-arm64-gnu@4.44.1':
5729 optional: true
5730
5781 - '@rollup/rollup-linux-arm64-musl@4.41.1':
5731 + '@rollup/rollup-linux-arm64-musl@4.44.1':
5732 optional: true
5733
5784 - '@rollup/rollup-linux-loongarch64-gnu@4.41.1':
5734 + '@rollup/rollup-linux-loongarch64-gnu@4.44.1':
5735 optional: true
5736
5787 - '@rollup/rollup-linux-powerpc64le-gnu@4.41.1':
5737 + '@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
5738 optional: true
5739
5790 - '@rollup/rollup-linux-riscv64-gnu@4.41.1':
5740 + '@rollup/rollup-linux-riscv64-gnu@4.44.1':
5741 optional: true
5742
5793 - '@rollup/rollup-linux-riscv64-musl@4.41.1':
5743 + '@rollup/rollup-linux-riscv64-musl@4.44.1':
5744 optional: true
5745
5796 - '@rollup/rollup-linux-s390x-gnu@4.41.1':
5746 + '@rollup/rollup-linux-s390x-gnu@4.44.1':
5747 optional: true
5748
5799 - '@rollup/rollup-linux-x64-gnu@4.41.1':
5749 + '@rollup/rollup-linux-x64-gnu@4.44.1':
5750 optional: true
5751
5802 - '@rollup/rollup-linux-x64-gnu@4.44.0':
5752 + '@rollup/rollup-linux-x64-musl@4.44.1':
5753 optional: true
5754
5805 - '@rollup/rollup-linux-x64-musl@4.41.1':
5755 + '@rollup/rollup-win32-arm64-msvc@4.44.1':
5756 optional: true
5757
5808 - '@rollup/rollup-win32-arm64-msvc@4.41.1':
5758 + '@rollup/rollup-win32-ia32-msvc@4.44.1':
5759 optional: true
5760
5811 - '@rollup/rollup-win32-ia32-msvc@4.41.1':
5812 - optional: true
5813 -
5814 - '@rollup/rollup-win32-x64-msvc@4.41.1':
5761 + '@rollup/rollup-win32-x64-msvc@4.44.1':
5762 optional: true
5763
5764 '@sec-ant/readable-stream@0.4.1': {}
@@ -5868,11 +5815,11 @@ snapshots:
5815 dependencies:
5816 algoliasearch: 5.29.0
5817
5871 - '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@2.4.2))':
5818 + '@stylistic/eslint-plugin@5.0.0(eslint@9.30.0(jiti@2.4.2))':
5819 dependencies:
5873 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
5874 - '@typescript-eslint/types': 8.34.1
5875 - eslint: 9.29.0(jiti@2.4.2)
5820 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
5821 + '@typescript-eslint/types': 8.35.0
5822 + eslint: 9.30.0(jiti@2.4.2)
5823 eslint-visitor-keys: 4.2.1
5824 espree: 10.4.0
5825 estraverse: 5.3.0
@@ -5897,76 +5844,76 @@ snapshots:
5844 dependencies:
5845 '@svgdotjs/svg.js': 3.2.4
5846
5900 - '@tailwindcss/node@4.1.10':
5847 + '@tailwindcss/node@4.1.11':
5848 dependencies:
5849 '@ampproject/remapping': 2.3.0
5903 - enhanced-resolve: 5.18.1
5850 + enhanced-resolve: 5.18.2
5851 jiti: 2.4.2
5852 lightningcss: 1.30.1
5853 magic-string: 0.30.17
5854 source-map-js: 1.2.1
5908 - tailwindcss: 4.1.10
5855 + tailwindcss: 4.1.11
5856
5910 - '@tailwindcss/oxide-android-arm64@4.1.10':
5857 + '@tailwindcss/oxide-android-arm64@4.1.11':
5858 optional: true
5859
5913 - '@tailwindcss/oxide-darwin-arm64@4.1.10':
5860 + '@tailwindcss/oxide-darwin-arm64@4.1.11':
5861 optional: true
5862
5916 - '@tailwindcss/oxide-darwin-x64@4.1.10':
5863 + '@tailwindcss/oxide-darwin-x64@4.1.11':
5864 optional: true
5865
5919 - '@tailwindcss/oxide-freebsd-x64@4.1.10':
5866 + '@tailwindcss/oxide-freebsd-x64@4.1.11':
5867 optional: true
5868
5922 - '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.10':
5869 + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.11':
5870 optional: true
5871
5925 - '@tailwindcss/oxide-linux-arm64-gnu@4.1.10':
5872 + '@tailwindcss/oxide-linux-arm64-gnu@4.1.11':
5873 optional: true
5874
5928 - '@tailwindcss/oxide-linux-arm64-musl@4.1.10':
5875 + '@tailwindcss/oxide-linux-arm64-musl@4.1.11':
5876 optional: true
5877
5931 - '@tailwindcss/oxide-linux-x64-gnu@4.1.10':
5878 + '@tailwindcss/oxide-linux-x64-gnu@4.1.11':
5879 optional: true
5880
5934 - '@tailwindcss/oxide-linux-x64-musl@4.1.10':
5881 + '@tailwindcss/oxide-linux-x64-musl@4.1.11':
5882 optional: true
5883
5937 - '@tailwindcss/oxide-wasm32-wasi@4.1.10':
5884 + '@tailwindcss/oxide-wasm32-wasi@4.1.11':
5885 optional: true
5886
5940 - '@tailwindcss/oxide-win32-arm64-msvc@4.1.10':
5887 + '@tailwindcss/oxide-win32-arm64-msvc@4.1.11':
5888 optional: true
5889
5943 - '@tailwindcss/oxide-win32-x64-msvc@4.1.10':
5890 + '@tailwindcss/oxide-win32-x64-msvc@4.1.11':
5891 optional: true
5892
5946 - '@tailwindcss/oxide@4.1.10':
5893 + '@tailwindcss/oxide@4.1.11':
5894 dependencies:
5895 detect-libc: 2.0.4
5896 tar: 7.4.3
5897 optionalDependencies:
5951 - '@tailwindcss/oxide-android-arm64': 4.1.10
5952 - '@tailwindcss/oxide-darwin-arm64': 4.1.10
5953 - '@tailwindcss/oxide-darwin-x64': 4.1.10
5954 - '@tailwindcss/oxide-freebsd-x64': 4.1.10
5955 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.10
5956 - '@tailwindcss/oxide-linux-arm64-gnu': 4.1.10
5957 - '@tailwindcss/oxide-linux-arm64-musl': 4.1.10
5958 - '@tailwindcss/oxide-linux-x64-gnu': 4.1.10
5959 - '@tailwindcss/oxide-linux-x64-musl': 4.1.10
5960 - '@tailwindcss/oxide-wasm32-wasi': 4.1.10
5961 - '@tailwindcss/oxide-win32-arm64-msvc': 4.1.10
5962 - '@tailwindcss/oxide-win32-x64-msvc': 4.1.10
5963 -
5964 - '@tailwindcss/vite@4.1.10(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
5965 - dependencies:
5966 - '@tailwindcss/node': 4.1.10
5967 - '@tailwindcss/oxide': 4.1.10
5968 - tailwindcss: 4.1.10
5969 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
5898 + '@tailwindcss/oxide-android-arm64': 4.1.11
5899 + '@tailwindcss/oxide-darwin-arm64': 4.1.11
5900 + '@tailwindcss/oxide-darwin-x64': 4.1.11
5901 + '@tailwindcss/oxide-freebsd-x64': 4.1.11
5902 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.11
5903 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.11
5904 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.11
5905 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.11
5906 + '@tailwindcss/oxide-linux-x64-musl': 4.1.11
5907 + '@tailwindcss/oxide-wasm32-wasi': 4.1.11
5908 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11
5909 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.11
5910 +
5911 + '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
5912 + dependencies:
5913 + '@tailwindcss/node': 4.1.11
5914 + '@tailwindcss/oxide': 4.1.11
5915 + tailwindcss: 4.1.11
5916 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
5917
5918 '@trysound/sax@0.2.0': {}
5919
@@ -5978,14 +5925,16 @@ snapshots:
5925 dependencies:
5926 '@types/deep-eql': 4.0.2
5927
5928 + '@types/codemirror@5.60.16':
5929 + dependencies:
5930 + '@types/tern': 0.23.9
5931 +
5932 '@types/debug@4.1.12':
5933 dependencies:
5934 '@types/ms': 2.1.0
5935
5936 '@types/deep-eql@4.0.2': {}
5937
5987 - '@types/estree@1.0.7': {}
5988 -
5938 '@types/estree@1.0.8': {}
5939
5940 '@types/file-saver@2.0.7': {}
@@ -5993,7 +5942,7 @@ snapshots:
5942 '@types/fs-extra@11.0.4':
5943 dependencies:
5944 '@types/jsonfile': 6.1.4
5996 - '@types/node': 24.0.3
5945 + '@types/node': 24.0.6
5946
5947 '@types/hast@3.0.4':
5948 dependencies:
@@ -6001,7 +5950,7 @@ snapshots:
5950
5951 '@types/jsdom@21.1.7':
5952 dependencies:
6004 - '@types/node': 24.0.3
5953 + '@types/node': 24.0.6
5954 '@types/tough-cookie': 4.0.5
5955 parse5: 7.3.0
5956
@@ -6009,7 +5958,7 @@ snapshots:
5958
5959 '@types/jsonfile@6.1.4':
5960 dependencies:
6012 - '@types/node': 24.0.3
5961 + '@types/node': 24.0.6
5962
5963 '@types/katex@0.16.7': {}
5964
@@ -6017,9 +5966,9 @@ snapshots:
5966
5967 '@types/lodash-es@4.17.12':
5968 dependencies:
6020 - '@types/lodash': 4.17.18
5969 + '@types/lodash': 4.17.19
5970
6022 - '@types/lodash@4.17.18': {}
5971 + '@types/lodash@4.17.19': {}
5972
5973 '@types/markdown-it@14.1.2':
5974 dependencies:
@@ -6036,7 +5985,7 @@ snapshots:
5985
5986 '@types/ms@2.1.0': {}
5987
6039 - '@types/node@24.0.3':
5988 + '@types/node@24.0.6':
5989 dependencies:
5990 undici-types: 7.8.0
5991
@@ -6046,6 +5995,10 @@ snapshots:
5995
5996 '@types/sizzle@2.3.9': {}
5997
5998 + '@types/tern@0.23.9':
5999 + dependencies:
6000 + '@types/estree': 1.0.8
6001 +
6002 '@types/tough-cookie@4.0.5': {}
6003
6004 '@types/unist@3.0.3': {}
@@ -6056,75 +6009,75 @@ snapshots:
6009
6010 '@types/yauzl@2.10.3':
6011 dependencies:
6059 - '@types/node': 24.0.3
6012 + '@types/node': 24.0.6
6013 optional: true
6014
6062 - '@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
6015 + '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6016 dependencies:
6017 '@eslint-community/regexpp': 4.12.1
6065 - '@typescript-eslint/parser': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
6066 - '@typescript-eslint/scope-manager': 8.34.1
6067 - '@typescript-eslint/type-utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
6068 - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
6069 - '@typescript-eslint/visitor-keys': 8.34.1
6070 - eslint: 9.29.0(jiti@2.4.2)
6018 + '@typescript-eslint/parser': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6019 + '@typescript-eslint/scope-manager': 8.35.0
6020 + '@typescript-eslint/type-utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6021 + '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6022 + '@typescript-eslint/visitor-keys': 8.35.0
6023 + eslint: 9.30.0(jiti@2.4.2)
6024 graphemer: 1.4.0
6072 - ignore: 7.0.4
6025 + ignore: 7.0.5
6026 natural-compare: 1.4.0
6027 ts-api-utils: 2.1.0(typescript@5.8.3)
6028 typescript: 5.8.3
6029 transitivePeerDependencies:
6030 - supports-color
6031
6079 - '@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
6032 + '@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6033 dependencies:
6081 - '@typescript-eslint/scope-manager': 8.34.1
6082 - '@typescript-eslint/types': 8.34.1
6083 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
6084 - '@typescript-eslint/visitor-keys': 8.34.1
6034 + '@typescript-eslint/scope-manager': 8.35.0
6035 + '@typescript-eslint/types': 8.35.0
6036 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
6037 + '@typescript-eslint/visitor-keys': 8.35.0
6038 debug: 4.4.1(supports-color@8.1.1)
6086 - eslint: 9.29.0(jiti@2.4.2)
6039 + eslint: 9.30.0(jiti@2.4.2)
6040 typescript: 5.8.3
6041 transitivePeerDependencies:
6042 - supports-color
6043
6091 - '@typescript-eslint/project-service@8.34.1(typescript@5.8.3)':
6044 + '@typescript-eslint/project-service@8.35.0(typescript@5.8.3)':
6045 dependencies:
6093 - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
6094 - '@typescript-eslint/types': 8.34.1
6046 + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
6047 + '@typescript-eslint/types': 8.35.0
6048 debug: 4.4.1(supports-color@8.1.1)
6049 typescript: 5.8.3
6050 transitivePeerDependencies:
6051 - supports-color
6052
6100 - '@typescript-eslint/scope-manager@8.34.1':
6053 + '@typescript-eslint/scope-manager@8.35.0':
6054 dependencies:
6102 - '@typescript-eslint/types': 8.34.1
6103 - '@typescript-eslint/visitor-keys': 8.34.1
6055 + '@typescript-eslint/types': 8.35.0
6056 + '@typescript-eslint/visitor-keys': 8.35.0
6057
6105 - '@typescript-eslint/tsconfig-utils@8.34.1(typescript@5.8.3)':
6058 + '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.8.3)':
6059 dependencies:
6060 typescript: 5.8.3
6061
6109 - '@typescript-eslint/type-utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
6062 + '@typescript-eslint/type-utils@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6063 dependencies:
6111 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
6112 - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
6064 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
6065 + '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6066 debug: 4.4.1(supports-color@8.1.1)
6114 - eslint: 9.29.0(jiti@2.4.2)
6067 + eslint: 9.30.0(jiti@2.4.2)
6068 ts-api-utils: 2.1.0(typescript@5.8.3)
6069 typescript: 5.8.3
6070 transitivePeerDependencies:
6071 - supports-color
6072
6120 - '@typescript-eslint/types@8.34.1': {}
6073 + '@typescript-eslint/types@8.35.0': {}
6074
6122 - '@typescript-eslint/typescript-estree@8.34.1(typescript@5.8.3)':
6075 + '@typescript-eslint/typescript-estree@8.35.0(typescript@5.8.3)':
6076 dependencies:
6124 - '@typescript-eslint/project-service': 8.34.1(typescript@5.8.3)
6125 - '@typescript-eslint/tsconfig-utils': 8.34.1(typescript@5.8.3)
6126 - '@typescript-eslint/types': 8.34.1
6127 - '@typescript-eslint/visitor-keys': 8.34.1
6077 + '@typescript-eslint/project-service': 8.35.0(typescript@5.8.3)
6078 + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
6079 + '@typescript-eslint/types': 8.35.0
6080 + '@typescript-eslint/visitor-keys': 8.35.0
6081 debug: 4.4.1(supports-color@8.1.1)
6082 fast-glob: 3.3.3
6083 is-glob: 4.0.3
@@ -6135,47 +6088,47 @@ snapshots:
6088 transitivePeerDependencies:
6089 - supports-color
6090
6138 - '@typescript-eslint/utils@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)':
6091 + '@typescript-eslint/utils@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6092 dependencies:
6140 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
6141 - '@typescript-eslint/scope-manager': 8.34.1
6142 - '@typescript-eslint/types': 8.34.1
6143 - '@typescript-eslint/typescript-estree': 8.34.1(typescript@5.8.3)
6144 - eslint: 9.29.0(jiti@2.4.2)
6093 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
6094 + '@typescript-eslint/scope-manager': 8.35.0
6095 + '@typescript-eslint/types': 8.35.0
6096 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
6097 + eslint: 9.30.0(jiti@2.4.2)
6098 typescript: 5.8.3
6099 transitivePeerDependencies:
6100 - supports-color
6101
6149 - '@typescript-eslint/visitor-keys@8.34.1':
6102 + '@typescript-eslint/visitor-keys@8.35.0':
6103 dependencies:
6151 - '@typescript-eslint/types': 8.34.1
6104 + '@typescript-eslint/types': 8.35.0
6105 eslint-visitor-keys: 4.2.1
6106
6107 '@ungap/structured-clone@1.3.0': {}
6108
6156 - '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6109 + '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6110 dependencies:
6158 - '@babel/core': 7.27.3
6159 - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.3)
6160 - '@rolldown/pluginutils': 1.0.0-beta.10
6161 - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.3)
6162 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6111 + '@babel/core': 7.27.7
6112 + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.7)
6113 + '@rolldown/pluginutils': 1.0.0-beta.21
6114 + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.7)
6115 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6116 vue: 3.5.17(typescript@5.8.3)
6117 transitivePeerDependencies:
6118 - supports-color
6119
6167 - '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6120 + '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6121 dependencies:
6169 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6122 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6123 vue: 3.5.17(typescript@5.8.3)
6124
6172 - '@vitest/eslint-plugin@1.2.7(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6125 + '@vitest/eslint-plugin@1.3.3(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6126 dependencies:
6174 - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
6175 - eslint: 9.29.0(jiti@2.4.2)
6127 + '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6128 + eslint: 9.30.0(jiti@2.4.2)
6129 optionalDependencies:
6130 typescript: 5.8.3
6178 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6131 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6132 transitivePeerDependencies:
6133 - supports-color
6134
@@ -6187,13 +6140,13 @@ snapshots:
6140 chai: 5.2.0
6141 tinyrainbow: 2.0.0
6142
6190 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6143 + '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6144 dependencies:
6145 '@vitest/spy': 3.2.4
6146 estree-walker: 3.0.3
6147 magic-string: 0.30.17
6148 optionalDependencies:
6196 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6149 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6150
6151 '@vitest/pretty-format@3.2.4':
6152 dependencies:
@@ -6221,101 +6174,63 @@ snapshots:
6174 loupe: 3.1.4
6175 tinyrainbow: 2.0.0
6176
6224 - '@volar/language-core@2.4.14':
6177 + '@volar/language-core@2.4.15':
6178 dependencies:
6226 - '@volar/source-map': 2.4.14
6179 + '@volar/source-map': 2.4.15
6180
6228 - '@volar/source-map@2.4.14': {}
6181 + '@volar/source-map@2.4.15': {}
6182
6230 - '@volar/typescript@2.4.14':
6183 + '@volar/typescript@2.4.15':
6184 dependencies:
6232 - '@volar/language-core': 2.4.14
6185 + '@volar/language-core': 2.4.15
6186 path-browserify: 1.0.1
6187 vscode-uri: 3.1.0
6188
6189 '@vue/babel-helper-vue-transform-on@1.4.0': {}
6190
6238 - '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.27.3)':
6191 + '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.27.7)':
6192 dependencies:
6193 '@babel/helper-module-imports': 7.27.1
6194 '@babel/helper-plugin-utils': 7.27.1
6242 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.3)
6195 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7)
6196 '@babel/template': 7.27.2
6244 - '@babel/traverse': 7.27.3
6245 - '@babel/types': 7.27.3
6197 + '@babel/traverse': 7.27.7
6198 + '@babel/types': 7.27.7
6199 '@vue/babel-helper-vue-transform-on': 1.4.0
6247 - '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.27.3)
6248 - '@vue/shared': 3.5.15
6200 + '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.27.7)
6201 + '@vue/shared': 3.5.17
6202 optionalDependencies:
6250 - '@babel/core': 7.27.3
6203 + '@babel/core': 7.27.7
6204 transitivePeerDependencies:
6205 - supports-color
6206
6254 - '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.27.3)':
6207 + '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.27.7)':
6208 dependencies:
6209 '@babel/code-frame': 7.27.1
6257 - '@babel/core': 7.27.3
6210 + '@babel/core': 7.27.7
6211 '@babel/helper-module-imports': 7.27.1
6212 '@babel/helper-plugin-utils': 7.27.1
6260 - '@babel/parser': 7.27.3
6261 - '@vue/compiler-sfc': 3.5.15
6213 + '@babel/parser': 7.27.7
6214 + '@vue/compiler-sfc': 3.5.17
6215 transitivePeerDependencies:
6216 - supports-color
6217
6265 - '@vue/compiler-core@3.5.15':
6266 - dependencies:
6267 - '@babel/parser': 7.27.3
6268 - '@vue/shared': 3.5.15
6269 - entities: 4.5.0
6270 - estree-walker: 2.0.2
6271 - source-map-js: 1.2.1
6272 -
6273 - '@vue/compiler-core@3.5.16':
6274 - dependencies:
6275 - '@babel/parser': 7.27.3
6276 - '@vue/shared': 3.5.16
6277 - entities: 4.5.0
6278 - estree-walker: 2.0.2
6279 - source-map-js: 1.2.1
6280 -
6218 '@vue/compiler-core@3.5.17':
6219 dependencies:
6283 - '@babel/parser': 7.27.5
6220 + '@babel/parser': 7.27.7
6221 '@vue/shared': 3.5.17
6222 entities: 4.5.0
6223 estree-walker: 2.0.2
6224 source-map-js: 1.2.1
6225
6289 - '@vue/compiler-dom@3.5.15':
6290 - dependencies:
6291 - '@vue/compiler-core': 3.5.15
6292 - '@vue/shared': 3.5.15
6293 -
6294 - '@vue/compiler-dom@3.5.16':
6295 - dependencies:
6296 - '@vue/compiler-core': 3.5.16
6297 - '@vue/shared': 3.5.16
6298 -
6226 '@vue/compiler-dom@3.5.17':
6227 dependencies:
6228 '@vue/compiler-core': 3.5.17
6229 '@vue/shared': 3.5.17
6230
6304 - '@vue/compiler-sfc@3.5.15':
6305 - dependencies:
6306 - '@babel/parser': 7.27.3
6307 - '@vue/compiler-core': 3.5.15
6308 - '@vue/compiler-dom': 3.5.15
6309 - '@vue/compiler-ssr': 3.5.15
6310 - '@vue/shared': 3.5.15
6311 - estree-walker: 2.0.2
6312 - magic-string: 0.30.17
6313 - postcss: 8.5.3
6314 - source-map-js: 1.2.1
6315 -
6231 '@vue/compiler-sfc@3.5.17':
6232 dependencies:
6318 - '@babel/parser': 7.27.5
6233 + '@babel/parser': 7.27.7
6234 '@vue/compiler-core': 3.5.17
6235 '@vue/compiler-dom': 3.5.17
6236 '@vue/compiler-ssr': 3.5.17
@@ -6325,11 +6240,6 @@ snapshots:
6240 postcss: 8.5.6
6241 source-map-js: 1.2.1
6242
6328 - '@vue/compiler-ssr@3.5.15':
6329 - dependencies:
6330 - '@vue/compiler-dom': 3.5.15
6331 - '@vue/shared': 3.5.15
6332 -
6243 '@vue/compiler-ssr@3.5.17':
6244 dependencies:
6245 '@vue/compiler-dom': 3.5.17
@@ -6342,56 +6252,42 @@ snapshots:
6252
6253 '@vue/devtools-api@6.6.4': {}
6254
6345 - '@vue/devtools-api@7.7.6':
6255 + '@vue/devtools-api@7.7.7':
6256 dependencies:
6347 - '@vue/devtools-kit': 7.7.6
6257 + '@vue/devtools-kit': 7.7.7
6258
6349 - '@vue/devtools-core@7.7.7(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6259 + '@vue/devtools-core@7.7.7(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6260 dependencies:
6261 '@vue/devtools-kit': 7.7.7
6262 '@vue/devtools-shared': 7.7.7
6263 mitt: 3.0.1
6264 nanoid: 5.1.5
6265 pathe: 2.0.3
6356 - vite-hot-client: 2.0.4(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
6266 + vite-hot-client: 2.0.4(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
6267 vue: 3.5.17(typescript@5.8.3)
6268 transitivePeerDependencies:
6269 - vite
6270
6361 - '@vue/devtools-kit@7.7.6':
6362 - dependencies:
6363 - '@vue/devtools-shared': 7.7.6
6364 - birpc: 2.3.0
6365 - hookable: 5.5.3
6366 - mitt: 3.0.1
6367 - perfect-debounce: 1.0.0
6368 - speakingurl: 14.0.1
6369 - superjson: 2.2.2
6370 -
6271 '@vue/devtools-kit@7.7.7':
6272 dependencies:
6273 '@vue/devtools-shared': 7.7.7
6374 - birpc: 2.3.0
6274 + birpc: 2.4.0
6275 hookable: 5.5.3
6276 mitt: 3.0.1
6277 perfect-debounce: 1.0.0
6278 speakingurl: 14.0.1
6279 superjson: 2.2.2
6280
6381 - '@vue/devtools-shared@7.7.6':
6382 - dependencies:
6383 - rfdc: 1.4.1
6384 -
6281 '@vue/devtools-shared@7.7.7':
6282 dependencies:
6283 rfdc: 1.4.1
6284
6285 '@vue/language-core@2.2.10(typescript@5.8.3)':
6286 dependencies:
6391 - '@volar/language-core': 2.4.14
6392 - '@vue/compiler-dom': 3.5.15
6287 + '@volar/language-core': 2.4.15
6288 + '@vue/compiler-dom': 3.5.17
6289 '@vue/compiler-vue2': 2.7.16
6394 - '@vue/shared': 3.5.15
6290 + '@vue/shared': 3.5.17
6291 alien-signals: 1.0.13
6292 minimatch: 9.0.5
6293 muggle-string: 0.4.1
@@ -6421,10 +6317,6 @@ snapshots:
6317 '@vue/shared': 3.5.17
6318 vue: 3.5.17(typescript@5.8.3)
6319
6424 - '@vue/shared@3.5.15': {}
6425 -
6426 - '@vue/shared@3.5.16': {}
6427 -
6320 '@vue/shared@3.5.17': {}
6321
6322 '@vue/test-utils@2.4.6':
@@ -6449,21 +6341,17 @@ snapshots:
6341 '@vueuse/motion@3.0.3(vue@3.5.17(typescript@5.8.3))':
6342 dependencies:
6343 '@vueuse/core': 13.4.0(vue@3.5.17(typescript@5.8.3))
6452 - '@vueuse/shared': 13.3.0(vue@3.5.17(typescript@5.8.3))
6344 + '@vueuse/shared': 13.4.0(vue@3.5.17(typescript@5.8.3))
6345 defu: 6.1.4
6346 framesync: 6.1.2
6347 popmotion: 11.0.5
6348 style-value-types: 5.1.2
6349 vue: 3.5.17(typescript@5.8.3)
6350 optionalDependencies:
6459 - '@nuxt/kit': 3.17.4
6351 + '@nuxt/kit': 3.17.5
6352 transitivePeerDependencies:
6353 - magicast
6354
6463 - '@vueuse/shared@13.3.0(vue@3.5.17(typescript@5.8.3))':
6464 - dependencies:
6465 - vue: 3.5.17(typescript@5.8.3)
6466 -
6355 '@vueuse/shared@13.4.0(vue@3.5.17(typescript@5.8.3))':
6356 dependencies:
6357 vue: 3.5.17(typescript@5.8.3)
@@ -6476,8 +6364,6 @@ snapshots:
6364 dependencies:
6365 acorn: 8.15.0
6366
6479 - acorn@8.14.1: {}
6480 -
6367 acorn@8.15.0: {}
6368
6369 agent-base@7.1.3: {}
@@ -6528,8 +6414,6 @@ snapshots:
6414
6415 ansi-styles@6.2.1: {}
6416
6531 - ansis@4.0.0: {}
6532 -
6417 ansis@4.1.0: {}
6418
6419 apexcharts@4.7.0:
@@ -6584,7 +6468,7 @@ snapshots:
6468 axios@1.10.0(debug@4.4.1):
6469 dependencies:
6470 follow-redirects: 1.15.9(debug@4.4.1)
6587 - form-data: 4.0.2
6471 + form-data: 4.0.3
6472 proxy-from-env: 1.1.0
6473 transitivePeerDependencies:
6474 - debug
@@ -6597,7 +6481,7 @@ snapshots:
6481 dependencies:
6482 tweetnacl: 0.14.5
6483
6600 - birpc@2.3.0: {}
6484 + birpc@2.4.0: {}
6485
6486 blob-util@2.0.2: {}
6487
@@ -6605,12 +6489,12 @@ snapshots:
6489
6490 boolbase@1.0.0: {}
6491
6608 - brace-expansion@1.1.11:
6492 + brace-expansion@1.1.12:
6493 dependencies:
6494 balanced-match: 1.0.2
6495 concat-map: 0.0.1
6496
6613 - brace-expansion@2.0.1:
6497 + brace-expansion@2.0.2:
6498 dependencies:
6499 balanced-match: 1.0.2
6500
@@ -6618,12 +6502,12 @@ snapshots:
6502 dependencies:
6503 fill-range: 7.1.1
6504
6621 - browserslist@4.24.5:
6505 + browserslist@4.25.1:
6506 dependencies:
6623 - caniuse-lite: 1.0.30001718
6624 - electron-to-chromium: 1.5.159
6507 + caniuse-lite: 1.0.30001726
6508 + electron-to-chromium: 1.5.177
6509 node-releases: 2.0.19
6626 - update-browserslist-db: 1.1.3(browserslist@4.24.5)
6510 + update-browserslist-db: 1.1.3(browserslist@4.25.1)
6511
6512 buffer-crc32@0.2.13: {}
6513
@@ -6645,14 +6529,14 @@ snapshots:
6529 chokidar: 4.0.3
6530 confbox: 0.2.2
6531 defu: 6.1.4
6648 - dotenv: 16.5.0
6649 - exsolve: 1.0.5
6532 + dotenv: 16.6.1
6533 + exsolve: 1.0.7
6534 giget: 2.0.0
6535 jiti: 2.4.2
6536 ohash: 2.0.11
6537 pathe: 2.0.3
6538 perfect-debounce: 1.0.0
6655 - pkg-types: 2.1.0
6539 + pkg-types: 2.1.1
6540 rc9: 2.1.2
6541
6542 cac@6.7.14: {}
@@ -6675,7 +6559,7 @@ snapshots:
6559
6560 camelcase@6.3.0: {}
6561
6678 - caniuse-lite@1.0.30001718: {}
6562 + caniuse-lite@1.0.30001726: {}
6563
6564 caseless@0.12.0: {}
6565
@@ -6686,8 +6570,8 @@ snapshots:
6570 assertion-error: 2.0.1
6571 check-error: 2.1.1
6572 deep-eql: 5.0.2
6689 - loupe: 3.1.3
6690 - pathval: 2.0.0
6573 + loupe: 3.1.4
6574 + pathval: 2.0.1
6575
6576 chalk@4.1.2:
6577 dependencies:
@@ -6755,11 +6639,11 @@ snapshots:
6639 dependencies:
6640 '@codemirror/autocomplete': 6.18.6
6641 '@codemirror/commands': 6.8.1
6758 - '@codemirror/language': 6.11.0
6642 + '@codemirror/language': 6.11.2
6643 '@codemirror/lint': 6.8.5
6644 '@codemirror/search': 6.5.11
6645 '@codemirror/state': 6.5.2
6762 - '@codemirror/view': 6.36.8
6646 + '@codemirror/view': 6.38.0
6647
6648 color-convert@2.0.1:
6649 dependencies:
@@ -6809,9 +6693,9 @@ snapshots:
6693 dependencies:
6694 is-what: 4.1.16
6695
6812 - core-js-compat@3.42.0:
6696 + core-js-compat@3.43.0:
6697 dependencies:
6814 - browserslist: 4.24.5
6698 + browserslist: 4.25.1
6699
6700 core-util-is@1.0.2: {}
6701
@@ -6864,7 +6748,7 @@ snapshots:
6748 dependencies:
6749 css-tree: 2.2.1
6750
6867 - cssstyle@4.3.1:
6751 + cssstyle@4.6.0:
6752 dependencies:
6753 '@asamuzakjp/css-color': 3.2.0
6754 rrweb-cssom: 0.8.0
@@ -6955,7 +6839,7 @@ snapshots:
6839
6840 decimal.js@10.5.0: {}
6841
6958 - decode-named-character-reference@1.1.0:
6842 + decode-named-character-reference@1.2.0:
6843 dependencies:
6844 character-entities: 2.0.2
6845
@@ -6982,9 +6866,9 @@ snapshots:
6866
6867 depcheck@1.4.7:
6868 dependencies:
6985 - '@babel/parser': 7.27.3
6986 - '@babel/traverse': 7.27.3
6987 - '@vue/compiler-sfc': 3.5.15
6869 + '@babel/parser': 7.27.7
6870 + '@babel/traverse': 7.27.7
6871 + '@vue/compiler-sfc': 3.5.17
6872 callsite: 1.0.0
6873 camelcase: 6.3.0
6874 cosmiconfig: 7.1.0
@@ -7045,7 +6929,7 @@ snapshots:
6929 domelementtype: 2.3.0
6930 domhandler: 5.0.3
6931
7048 - dotenv@16.5.0: {}
6932 + dotenv@16.6.1: {}
6933
6934 dunder-proto@1.0.1:
6935 dependencies:
@@ -7076,17 +6960,17 @@ snapshots:
6960 minimatch: 9.0.1
6961 semver: 7.7.2
6962
7079 - electron-to-chromium@1.5.159: {}
6963 + electron-to-chromium@1.5.177: {}
6964
6965 emoji-regex@8.0.0: {}
6966
6967 emoji-regex@9.2.2: {}
6968
7085 - end-of-stream@1.4.4:
6969 + end-of-stream@1.4.5:
6970 dependencies:
6971 once: 1.4.0
6972
7089 - enhanced-resolve@5.18.1:
6973 + enhanced-resolve@5.18.2:
6974 dependencies:
6975 graceful-fs: 4.2.11
6976 tapable: 2.2.2
@@ -7098,7 +6982,7 @@ snapshots:
6982
6983 entities@4.5.0: {}
6984
7101 - entities@6.0.0: {}
6985 + entities@6.0.1: {}
6986
6987 error-ex@1.3.2:
6988 dependencies:
@@ -7161,67 +7045,67 @@ snapshots:
7045
7046 escape-string-regexp@5.0.0: {}
7047
7164 - eslint-compat-utils@0.5.1(eslint@9.29.0(jiti@2.4.2)):
7048 + eslint-compat-utils@0.5.1(eslint@9.30.0(jiti@2.4.2)):
7049 dependencies:
7166 - eslint: 9.29.0(jiti@2.4.2)
7050 + eslint: 9.30.0(jiti@2.4.2)
7051 semver: 7.7.2
7052
7169 - eslint-compat-utils@0.6.5(eslint@9.29.0(jiti@2.4.2)):
7053 + eslint-compat-utils@0.6.5(eslint@9.30.0(jiti@2.4.2)):
7054 dependencies:
7171 - eslint: 9.29.0(jiti@2.4.2)
7055 + eslint: 9.30.0(jiti@2.4.2)
7056 semver: 7.7.2
7057
7174 - eslint-config-flat-gitignore@2.1.0(eslint@9.29.0(jiti@2.4.2)):
7058 + eslint-config-flat-gitignore@2.1.0(eslint@9.30.0(jiti@2.4.2)):
7059 dependencies:
7176 - '@eslint/compat': 1.2.9(eslint@9.29.0(jiti@2.4.2))
7177 - eslint: 9.29.0(jiti@2.4.2)
7060 + '@eslint/compat': 1.3.1(eslint@9.30.0(jiti@2.4.2))
7061 + eslint: 9.30.0(jiti@2.4.2)
7062
7063 eslint-flat-config-utils@2.1.0:
7064 dependencies:
7065 pathe: 2.0.3
7066
7183 - eslint-json-compat-utils@0.2.1(eslint@9.29.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
7067 + eslint-json-compat-utils@0.2.1(eslint@9.30.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
7068 dependencies:
7185 - eslint: 9.29.0(jiti@2.4.2)
7069 + eslint: 9.30.0(jiti@2.4.2)
7070 esquery: 1.6.0
7071 jsonc-eslint-parser: 2.4.0
7072
7189 - eslint-merge-processors@2.0.0(eslint@9.29.0(jiti@2.4.2)):
7073 + eslint-merge-processors@2.0.0(eslint@9.30.0(jiti@2.4.2)):
7074 dependencies:
7191 - eslint: 9.29.0(jiti@2.4.2)
7075 + eslint: 9.30.0(jiti@2.4.2)
7076
7193 - eslint-plugin-antfu@3.1.1(eslint@9.29.0(jiti@2.4.2)):
7077 + eslint-plugin-antfu@3.1.1(eslint@9.30.0(jiti@2.4.2)):
7078 dependencies:
7195 - eslint: 9.29.0(jiti@2.4.2)
7079 + eslint: 9.30.0(jiti@2.4.2)
7080
7197 - eslint-plugin-command@3.3.1(eslint@9.29.0(jiti@2.4.2)):
7081 + eslint-plugin-command@3.3.1(eslint@9.30.0(jiti@2.4.2)):
7082 dependencies:
7083 '@es-joy/jsdoccomment': 0.50.2
7200 - eslint: 9.29.0(jiti@2.4.2)
7084 + eslint: 9.30.0(jiti@2.4.2)
7085
7202 - eslint-plugin-es-x@7.8.0(eslint@9.29.0(jiti@2.4.2)):
7086 + eslint-plugin-es-x@7.8.0(eslint@9.30.0(jiti@2.4.2)):
7087 dependencies:
7204 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7088 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7089 '@eslint-community/regexpp': 4.12.1
7206 - eslint: 9.29.0(jiti@2.4.2)
7207 - eslint-compat-utils: 0.5.1(eslint@9.29.0(jiti@2.4.2))
7090 + eslint: 9.30.0(jiti@2.4.2)
7091 + eslint-compat-utils: 0.5.1(eslint@9.30.0(jiti@2.4.2))
7092
7209 - eslint-plugin-import-lite@0.3.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
7093 + eslint-plugin-import-lite@0.3.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3):
7094 dependencies:
7211 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7212 - '@typescript-eslint/types': 8.34.1
7213 - eslint: 9.29.0(jiti@2.4.2)
7095 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7096 + '@typescript-eslint/types': 8.35.0
7097 + eslint: 9.30.0(jiti@2.4.2)
7098 optionalDependencies:
7099 typescript: 5.8.3
7100
7217 - eslint-plugin-jsdoc@51.2.1(eslint@9.29.0(jiti@2.4.2)):
7101 + eslint-plugin-jsdoc@51.2.3(eslint@9.30.0(jiti@2.4.2)):
7102 dependencies:
7103 '@es-joy/jsdoccomment': 0.52.0
7104 are-docs-informative: 0.0.2
7105 comment-parser: 1.4.1
7106 debug: 4.4.1(supports-color@8.1.1)
7107 escape-string-regexp: 4.0.0
7224 - eslint: 9.29.0(jiti@2.4.2)
7108 + eslint: 9.30.0(jiti@2.4.2)
7109 espree: 10.4.0
7110 esquery: 1.6.0
7111 parse-imports-exports: 0.2.4
@@ -7230,27 +7114,27 @@ snapshots:
7114 transitivePeerDependencies:
7115 - supports-color
7116
7233 - eslint-plugin-jsonc@2.20.1(eslint@9.29.0(jiti@2.4.2)):
7117 + eslint-plugin-jsonc@2.20.1(eslint@9.30.0(jiti@2.4.2)):
7118 dependencies:
7235 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7236 - eslint: 9.29.0(jiti@2.4.2)
7237 - eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2))
7238 - eslint-json-compat-utils: 0.2.1(eslint@9.29.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
7119 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7120 + eslint: 9.30.0(jiti@2.4.2)
7121 + eslint-compat-utils: 0.6.5(eslint@9.30.0(jiti@2.4.2))
7122 + eslint-json-compat-utils: 0.2.1(eslint@9.30.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
7123 espree: 10.4.0
7124 graphemer: 1.4.0
7125 jsonc-eslint-parser: 2.4.0
7126 natural-compare: 1.4.0
7243 - synckit: 0.11.6
7127 + synckit: 0.11.8
7128 transitivePeerDependencies:
7129 - '@eslint/json'
7130
7247 - eslint-plugin-n@17.20.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
7131 + eslint-plugin-n@17.20.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3):
7132 dependencies:
7249 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7250 - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
7251 - enhanced-resolve: 5.18.1
7252 - eslint: 9.29.0(jiti@2.4.2)
7253 - eslint-plugin-es-x: 7.8.0(eslint@9.29.0(jiti@2.4.2))
7133 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7134 + '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
7135 + enhanced-resolve: 5.18.2
7136 + eslint: 9.30.0(jiti@2.4.2)
7137 + eslint-plugin-es-x: 7.8.0(eslint@9.30.0(jiti@2.4.2))
7138 get-tsconfig: 4.10.1
7139 globals: 15.15.0
7140 ignore: 5.3.2
@@ -7263,19 +7147,19 @@ snapshots:
7147
7148 eslint-plugin-no-only-tests@3.3.0: {}
7149
7266 - eslint-plugin-perfectionist@4.15.0(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3):
7150 + eslint-plugin-perfectionist@4.15.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3):
7151 dependencies:
7268 - '@typescript-eslint/types': 8.34.1
7269 - '@typescript-eslint/utils': 8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
7270 - eslint: 9.29.0(jiti@2.4.2)
7152 + '@typescript-eslint/types': 8.35.0
7153 + '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
7154 + eslint: 9.30.0(jiti@2.4.2)
7155 natural-orderby: 5.0.0
7156 transitivePeerDependencies:
7157 - supports-color
7158 - typescript
7159
7276 - eslint-plugin-pnpm@0.3.1(eslint@9.29.0(jiti@2.4.2)):
7160 + eslint-plugin-pnpm@0.3.1(eslint@9.30.0(jiti@2.4.2)):
7161 dependencies:
7278 - eslint: 9.29.0(jiti@2.4.2)
7162 + eslint: 9.30.0(jiti@2.4.2)
7163 find-up-simple: 1.0.1
7164 jsonc-eslint-parser: 2.4.0
7165 pathe: 2.0.3
@@ -7283,36 +7167,36 @@ snapshots:
7167 tinyglobby: 0.2.14
7168 yaml-eslint-parser: 1.3.0
7169
7286 - eslint-plugin-regexp@2.9.0(eslint@9.29.0(jiti@2.4.2)):
7170 + eslint-plugin-regexp@2.9.0(eslint@9.30.0(jiti@2.4.2)):
7171 dependencies:
7288 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7172 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7173 '@eslint-community/regexpp': 4.12.1
7174 comment-parser: 1.4.1
7291 - eslint: 9.29.0(jiti@2.4.2)
7175 + eslint: 9.30.0(jiti@2.4.2)
7176 jsdoc-type-pratt-parser: 4.1.0
7177 refa: 0.12.1
7178 regexp-ast-analysis: 0.7.1
7179 scslre: 0.3.0
7180
7297 - eslint-plugin-toml@0.12.0(eslint@9.29.0(jiti@2.4.2)):
7181 + eslint-plugin-toml@0.12.0(eslint@9.30.0(jiti@2.4.2)):
7182 dependencies:
7183 debug: 4.4.1(supports-color@8.1.1)
7300 - eslint: 9.29.0(jiti@2.4.2)
7301 - eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2))
7184 + eslint: 9.30.0(jiti@2.4.2)
7185 + eslint-compat-utils: 0.6.5(eslint@9.30.0(jiti@2.4.2))
7186 lodash: 4.17.21
7187 toml-eslint-parser: 0.10.0
7188 transitivePeerDependencies:
7189 - supports-color
7190
7307 - eslint-plugin-unicorn@59.0.1(eslint@9.29.0(jiti@2.4.2)):
7191 + eslint-plugin-unicorn@59.0.1(eslint@9.30.0(jiti@2.4.2)):
7192 dependencies:
7193 '@babel/helper-validator-identifier': 7.27.1
7310 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7194 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7195 '@eslint/plugin-kit': 0.2.8
7196 ci-info: 4.2.0
7197 clean-regexp: 1.0.0
7314 - core-js-compat: 3.42.0
7315 - eslint: 9.29.0(jiti@2.4.2)
7198 + core-js-compat: 3.43.0
7199 + eslint: 9.30.0(jiti@2.4.2)
7200 esquery: 1.6.0
7201 find-up-simple: 1.0.1
7202 globals: 16.2.0
@@ -7325,38 +7209,38 @@ snapshots:
7209 semver: 7.7.2
7210 strip-indent: 4.0.0
7211
7328 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2)):
7212 + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2)):
7213 dependencies:
7330 - eslint: 9.29.0(jiti@2.4.2)
7214 + eslint: 9.30.0(jiti@2.4.2)
7215 optionalDependencies:
7332 - '@typescript-eslint/eslint-plugin': 8.34.1(@typescript-eslint/parser@8.34.1(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.29.0(jiti@2.4.2))(typescript@5.8.3)
7216 + '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
7217
7334 - eslint-plugin-vue@10.2.0(eslint@9.29.0(jiti@2.4.2))(vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.4.2))):
7218 + eslint-plugin-vue@10.2.0(eslint@9.30.0(jiti@2.4.2))(vue-eslint-parser@10.1.4(eslint@9.30.0(jiti@2.4.2))):
7219 dependencies:
7336 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7337 - eslint: 9.29.0(jiti@2.4.2)
7220 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7221 + eslint: 9.30.0(jiti@2.4.2)
7222 natural-compare: 1.4.0
7223 nth-check: 2.1.1
7224 postcss-selector-parser: 6.1.2
7225 semver: 7.7.2
7342 - vue-eslint-parser: 10.1.3(eslint@9.29.0(jiti@2.4.2))
7226 + vue-eslint-parser: 10.1.4(eslint@9.30.0(jiti@2.4.2))
7227 xml-name-validator: 4.0.0
7228
7345 - eslint-plugin-yml@1.18.0(eslint@9.29.0(jiti@2.4.2)):
7229 + eslint-plugin-yml@1.18.0(eslint@9.30.0(jiti@2.4.2)):
7230 dependencies:
7231 debug: 4.4.1(supports-color@8.1.1)
7232 escape-string-regexp: 4.0.0
7349 - eslint: 9.29.0(jiti@2.4.2)
7350 - eslint-compat-utils: 0.6.5(eslint@9.29.0(jiti@2.4.2))
7233 + eslint: 9.30.0(jiti@2.4.2)
7234 + eslint-compat-utils: 0.6.5(eslint@9.30.0(jiti@2.4.2))
7235 natural-compare: 1.4.0
7236 yaml-eslint-parser: 1.3.0
7237 transitivePeerDependencies:
7238 - supports-color
7239
7356 - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.29.0(jiti@2.4.2)):
7240 + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.0(jiti@2.4.2)):
7241 dependencies:
7242 '@vue/compiler-sfc': 3.5.17
7359 - eslint: 9.29.0(jiti@2.4.2)
7243 + eslint: 9.30.0(jiti@2.4.2)
7244
7245 eslint-scope@8.4.0:
7246 dependencies:
@@ -7367,20 +7251,20 @@ snapshots:
7251
7252 eslint-visitor-keys@4.2.1: {}
7253
7370 - eslint@9.29.0(jiti@2.4.2):
7254 + eslint@9.30.0(jiti@2.4.2):
7255 dependencies:
7372 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@2.4.2))
7256 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7257 '@eslint-community/regexpp': 4.12.1
7374 - '@eslint/config-array': 0.20.1
7375 - '@eslint/config-helpers': 0.2.2
7258 + '@eslint/config-array': 0.21.0
7259 + '@eslint/config-helpers': 0.3.0
7260 '@eslint/core': 0.14.0
7261 '@eslint/eslintrc': 3.3.1
7378 - '@eslint/js': 9.29.0
7379 - '@eslint/plugin-kit': 0.3.1
7262 + '@eslint/js': 9.30.0
7263 + '@eslint/plugin-kit': 0.3.3
7264 '@humanfs/node': 0.16.6
7265 '@humanwhocodes/module-importer': 1.0.1
7266 '@humanwhocodes/retry': 0.4.3
7383 - '@types/estree': 1.0.7
7267 + '@types/estree': 1.0.8
7268 '@types/json-schema': 7.0.15
7269 ajv: 6.12.6
7270 chalk: 4.1.2
@@ -7437,7 +7321,7 @@ snapshots:
7321
7322 estree-walker@3.0.3:
7323 dependencies:
7440 - '@types/estree': 1.0.7
7324 + '@types/estree': 1.0.8
7325
7326 esutils@2.0.3: {}
7327
@@ -7504,7 +7388,7 @@ snapshots:
7388
7389 expect-type@1.2.1: {}
7390
7507 - exsolve@1.0.5: {}
7391 + exsolve@1.0.7: {}
7392
7393 extend@3.0.2: {}
7394
@@ -7546,7 +7430,7 @@ snapshots:
7430 dependencies:
7431 pend: 1.2.0
7432
7549 - fdir@6.4.5(picomatch@4.0.2):
7433 + fdir@6.4.6(picomatch@4.0.2):
7434 optionalDependencies:
7435 picomatch: 4.0.2
7436
@@ -7602,11 +7486,12 @@ snapshots:
7486
7487 forever-agent@0.6.1: {}
7488
7605 - form-data@4.0.2:
7489 + form-data@4.0.3:
7490 dependencies:
7491 asynckit: 0.4.0
7492 combined-stream: 1.0.8
7493 es-set-tostringtag: 2.1.0
7494 + hasown: 2.0.2
7495 mime-types: 2.1.35
7496
7497 format@0.2.2: {}
@@ -7661,7 +7546,7 @@ snapshots:
7546
7547 get-stream@5.2.0:
7548 dependencies:
7664 - pump: 3.0.2
7549 + pump: 3.0.3
7550
7551 get-stream@6.0.1: {}
7552
@@ -7833,9 +7718,9 @@ snapshots:
7718
7719 ignore@5.3.2: {}
7720
7836 - ignore@7.0.4: {}
7721 + ignore@7.0.5: {}
7722
7838 - immutable@5.1.2: {}
7723 + immutable@5.1.3: {}
7724
7725 import-fresh@3.3.1:
7726 dependencies:
@@ -7977,7 +7862,7 @@ snapshots:
7862
7863 jsdom@26.1.0:
7864 dependencies:
7980 - cssstyle: 4.3.1
7865 + cssstyle: 4.6.0
7866 data-urls: 5.0.0
7867 decimal.js: 10.5.0
7868 html-encoding-sniffer: 4.0.0
@@ -8126,7 +8011,7 @@ snapshots:
8011 local-pkg@1.1.1:
8012 dependencies:
8013 mlly: 1.7.4
8129 - pkg-types: 2.1.0
8014 + pkg-types: 2.1.1
8015 quansync: 0.2.10
8016
8017 locate-path@6.0.0:
@@ -8155,8 +8040,6 @@ snapshots:
8040
8041 longest-streak@3.1.0: {}
8042
8158 - loupe@3.1.3: {}
8159 -
8043 loupe@3.1.4: {}
8044
8045 lru-cache@10.4.3: {}
@@ -8197,7 +8080,7 @@ snapshots:
8080 dependencies:
8081 '@types/mdast': 4.0.4
8082 '@types/unist': 3.0.3
8200 - decode-named-character-reference: 1.1.0
8083 + decode-named-character-reference: 1.2.0
8084 devlop: 1.1.0
8085 mdast-util-to-string: 4.0.0
8086 micromark: 4.0.2
@@ -8325,7 +8208,7 @@ snapshots:
8208
8209 micromark-core-commonmark@2.0.3:
8210 dependencies:
8328 - decode-named-character-reference: 1.1.0
8211 + decode-named-character-reference: 1.2.0
8212 devlop: 1.1.0
8213 micromark-factory-destination: 2.0.1
8214 micromark-factory-label: 2.0.1
@@ -8465,7 +8348,7 @@ snapshots:
8348
8349 micromark-util-decode-string@2.0.1:
8350 dependencies:
8468 - decode-named-character-reference: 1.1.0
8351 + decode-named-character-reference: 1.2.0
8352 micromark-util-character: 2.1.1
8353 micromark-util-decode-numeric-character-reference: 2.0.2
8354 micromark-util-symbol: 2.0.1
@@ -8503,7 +8386,7 @@ snapshots:
8386 dependencies:
8387 '@types/debug': 4.1.12
8388 debug: 4.4.1(supports-color@8.1.1)
8506 - decode-named-character-reference: 1.1.0
8389 + decode-named-character-reference: 1.2.0
8390 devlop: 1.1.0
8391 micromark-core-commonmark: 2.0.3
8392 micromark-factory-space: 2.0.1
@@ -8540,19 +8423,19 @@ snapshots:
8423
8424 minimatch@3.1.2:
8425 dependencies:
8543 - brace-expansion: 1.1.11
8426 + brace-expansion: 1.1.12
8427
8428 minimatch@7.4.6:
8429 dependencies:
8547 - brace-expansion: 2.0.1
8430 + brace-expansion: 2.0.2
8431
8432 minimatch@9.0.1:
8433 dependencies:
8551 - brace-expansion: 2.0.1
8434 + brace-expansion: 2.0.2
8435
8436 minimatch@9.0.5:
8437 dependencies:
8555 - brace-expansion: 2.0.1
8438 + brace-expansion: 2.0.2
8439
8440 minimist@1.2.8: {}
8441
@@ -8568,7 +8451,7 @@ snapshots:
8451
8452 mlly@1.7.4:
8453 dependencies:
8571 - acorn: 8.14.1
8454 + acorn: 8.15.0
8455 pathe: 2.0.3
8456 pkg-types: 1.3.1
8457 ufo: 1.6.1
@@ -8592,7 +8475,7 @@ snapshots:
8475 '@css-render/plugin-bem': 0.15.14(css-render@0.15.14)
8476 '@css-render/vue3-ssr': 0.15.14(vue@3.5.17(typescript@5.8.3))
8477 '@types/katex': 0.16.7
8595 - '@types/lodash': 4.17.18
8478 + '@types/lodash': 4.17.19
8479 '@types/lodash-es': 4.17.12
8480 async-validator: 4.2.5
8481 css-render: 0.15.14
@@ -8639,7 +8522,7 @@ snapshots:
8522 picomatch: 4.0.2
8523 pidtree: 0.6.0
8524 read-package-json-fast: 4.0.0
8642 - shell-quote: 1.8.2
8525 + shell-quote: 1.8.3
8526 which: 5.0.0
8527
8528 npm-run-path@4.0.1:
@@ -8662,7 +8545,7 @@ snapshots:
8545 citty: 0.1.6
8546 consola: 3.4.2
8547 pathe: 2.0.3
8665 - pkg-types: 2.1.0
8548 + pkg-types: 2.1.1
8549 tinyexec: 0.3.2
8550
8551 object-inspect@1.13.4: {}
@@ -8760,7 +8643,7 @@ snapshots:
8643
8644 parse5@7.3.0:
8645 dependencies:
8763 - entities: 6.0.0
8646 + entities: 6.0.1
8647
8648 password-validator@5.3.0: {}
8649
@@ -8783,7 +8666,7 @@ snapshots:
8666
8667 pathe@2.0.3: {}
8668
8786 - pathval@2.0.0: {}
8669 + pathval@2.0.1: {}
8670
8671 pause-stream@0.0.11:
8672 dependencies:
@@ -8807,7 +8690,7 @@ snapshots:
8690
8691 pinia-plugin-persistedstate@4.3.0(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))):
8692 dependencies:
8810 - '@nuxt/kit': 3.17.4
8693 + '@nuxt/kit': 3.17.5
8694 deep-pick-omit: 1.2.1
8695 defu: 6.1.4
8696 destr: 2.0.5
@@ -8818,7 +8701,7 @@ snapshots:
8701
8702 pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)):
8703 dependencies:
8821 - '@vue/devtools-api': 7.7.6
8704 + '@vue/devtools-api': 7.7.7
8705 vue: 3.5.17(typescript@5.8.3)
8706 optionalDependencies:
8707 typescript: 5.8.3
@@ -8829,10 +8712,10 @@ snapshots:
8712 mlly: 1.7.4
8713 pathe: 2.0.3
8714
8832 - pkg-types@2.1.0:
8715 + pkg-types@2.1.1:
8716 dependencies:
8717 confbox: 0.2.2
8835 - exsolve: 1.0.5
8718 + exsolve: 1.0.7
8719 pathe: 2.0.3
8720
8721 please-upgrade-node@3.2.0:
@@ -8857,12 +8740,6 @@ snapshots:
8740 cssesc: 3.0.0
8741 util-deprecate: 1.0.2
8742
8860 - postcss@8.5.3:
8861 - dependencies:
8862 - nanoid: 3.3.11
8863 - picocolors: 1.1.1
8864 - source-map-js: 1.2.1
8865 -
8743 postcss@8.5.6:
8744 dependencies:
8745 nanoid: 3.3.11
@@ -8871,11 +8748,11 @@ snapshots:
8748
8749 prelude-ls@1.2.1: {}
8750
8874 - prettier-plugin-tailwindcss@0.6.13(prettier@3.6.0):
8751 + prettier-plugin-tailwindcss@0.6.13(prettier@3.6.2):
8752 dependencies:
8876 - prettier: 3.6.0
8753 + prettier: 3.6.2
8754
8878 - prettier@3.6.0: {}
8755 + prettier@3.6.2: {}
8756
8757 pretty-bytes@5.6.0: {}
8758
@@ -8897,9 +8774,9 @@ snapshots:
8774 dependencies:
8775 event-stream: 3.3.4
8776
8900 - pump@3.0.2:
8777 + pump@3.0.3:
8778 dependencies:
8902 - end-of-stream: 1.4.4
8779 + end-of-stream: 1.4.5
8780 once: 1.4.0
8781
8782 punycode.js@2.3.1: {}
@@ -8994,39 +8871,39 @@ snapshots:
8871
8872 rfdc@1.4.1: {}
8873
8997 - rollup-plugin-visualizer@5.14.0(rollup@4.41.1):
8874 + rollup-plugin-visualizer@5.14.0(rollup@4.44.1):
8875 dependencies:
8876 open: 8.4.2
8877 picomatch: 4.0.2
8878 source-map: 0.7.4
8879 yargs: 17.7.2
8880 optionalDependencies:
9004 - rollup: 4.41.1
8881 + rollup: 4.44.1
8882
9006 - rollup@4.41.1:
8883 + rollup@4.44.1:
8884 dependencies:
9008 - '@types/estree': 1.0.7
8885 + '@types/estree': 1.0.8
8886 optionalDependencies:
9010 - '@rollup/rollup-android-arm-eabi': 4.41.1
9011 - '@rollup/rollup-android-arm64': 4.41.1
9012 - '@rollup/rollup-darwin-arm64': 4.41.1
9013 - '@rollup/rollup-darwin-x64': 4.41.1
9014 - '@rollup/rollup-freebsd-arm64': 4.41.1
9015 - '@rollup/rollup-freebsd-x64': 4.41.1
9016 - '@rollup/rollup-linux-arm-gnueabihf': 4.41.1
9017 - '@rollup/rollup-linux-arm-musleabihf': 4.41.1
9018 - '@rollup/rollup-linux-arm64-gnu': 4.41.1
9019 - '@rollup/rollup-linux-arm64-musl': 4.41.1
9020 - '@rollup/rollup-linux-loongarch64-gnu': 4.41.1
9021 - '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1
9022 - '@rollup/rollup-linux-riscv64-gnu': 4.41.1
9023 - '@rollup/rollup-linux-riscv64-musl': 4.41.1
9024 - '@rollup/rollup-linux-s390x-gnu': 4.41.1
9025 - '@rollup/rollup-linux-x64-gnu': 4.41.1
9026 - '@rollup/rollup-linux-x64-musl': 4.41.1
9027 - '@rollup/rollup-win32-arm64-msvc': 4.41.1
9028 - '@rollup/rollup-win32-ia32-msvc': 4.41.1
9029 - '@rollup/rollup-win32-x64-msvc': 4.41.1
8887 + '@rollup/rollup-android-arm-eabi': 4.44.1
8888 + '@rollup/rollup-android-arm64': 4.44.1
8889 + '@rollup/rollup-darwin-arm64': 4.44.1
8890 + '@rollup/rollup-darwin-x64': 4.44.1
8891 + '@rollup/rollup-freebsd-arm64': 4.44.1
8892 + '@rollup/rollup-freebsd-x64': 4.44.1
8893 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.1
8894 + '@rollup/rollup-linux-arm-musleabihf': 4.44.1
8895 + '@rollup/rollup-linux-arm64-gnu': 4.44.1
8896 + '@rollup/rollup-linux-arm64-musl': 4.44.1
8897 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.1
8898 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1
8899 + '@rollup/rollup-linux-riscv64-gnu': 4.44.1
8900 + '@rollup/rollup-linux-riscv64-musl': 4.44.1
8901 + '@rollup/rollup-linux-s390x-gnu': 4.44.1
8902 + '@rollup/rollup-linux-x64-gnu': 4.44.1
8903 + '@rollup/rollup-linux-x64-musl': 4.44.1
8904 + '@rollup/rollup-win32-arm64-msvc': 4.44.1
8905 + '@rollup/rollup-win32-ia32-msvc': 4.44.1
8906 + '@rollup/rollup-win32-x64-msvc': 4.44.1
8907 fsevents: 2.3.3
8908
8909 rrweb-cssom@0.8.0: {}
@@ -9048,7 +8925,7 @@ snapshots:
8925 sass@1.89.2:
8926 dependencies:
8927 chokidar: 4.0.3
9051 - immutable: 5.1.2
8928 + immutable: 5.1.3
8929 source-map-js: 1.2.1
8930 optionalDependencies:
8931 '@parcel/watcher': 2.5.1
@@ -9084,7 +8961,7 @@ snapshots:
8961
8962 shebang-regex@3.0.0: {}
8963
9087 - shell-quote@1.8.2: {}
8964 + shell-quote@1.8.3: {}
8965
8966 shiki@3.7.0:
8967 dependencies:
@@ -9281,11 +9158,11 @@ snapshots:
9158
9159 symbol-tree@3.2.4: {}
9160
9284 - synckit@0.11.6:
9161 + synckit@0.11.8:
9162 dependencies:
9286 - '@pkgr/core': 0.2.4
9163 + '@pkgr/core': 0.2.7
9164
9288 - tailwindcss@4.1.10: {}
9165 + tailwindcss@4.1.11: {}
9166
9167 tapable@2.2.2: {}
9168
@@ -9313,11 +9190,11 @@ snapshots:
9190 unconfig: 7.3.2
9191 yaml: 2.8.0
9192
9316 - thememirror@2.0.1(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.8):
9193 + thememirror@2.0.1(@codemirror/language@6.11.2)(@codemirror/state@6.5.2)(@codemirror/view@6.38.0):
9194 dependencies:
9318 - '@codemirror/language': 6.11.0
9195 + '@codemirror/language': 6.11.2
9196 '@codemirror/state': 6.5.2
9320 - '@codemirror/view': 6.36.8
9197 + '@codemirror/view': 6.38.0
9198
9199 throttleit@1.0.1: {}
9200
@@ -9331,7 +9208,7 @@ snapshots:
9208
9209 tinyglobby@0.2.14:
9210 dependencies:
9334 - fdir: 6.4.5(picomatch@4.0.2)
9211 + fdir: 6.4.6(picomatch@4.0.2)
9212 picomatch: 4.0.2
9213
9214 tinypool@1.1.1: {}
@@ -9418,7 +9295,7 @@ snapshots:
9295
9296 unctx@2.4.1:
9297 dependencies:
9421 - acorn: 8.14.1
9298 + acorn: 8.15.0
9299 estree-walker: 3.0.3
9300 magic-string: 0.30.17
9301 unplugin: 2.3.5
@@ -9429,7 +9306,7 @@ snapshots:
9306
9307 unimport@5.0.1:
9308 dependencies:
9432 - acorn: 8.14.1
9309 + acorn: 8.15.0
9310 escape-string-regexp: 5.0.0
9311 estree-walker: 3.0.3
9312 local-pkg: 1.1.1
@@ -9437,7 +9314,7 @@ snapshots:
9314 mlly: 1.7.4
9315 pathe: 2.0.3
9316 picomatch: 4.0.2
9440 - pkg-types: 2.1.0
9317 + pkg-types: 2.1.1
9318 scule: 1.3.0
9319 strip-literal: 3.0.0
9320 tinyglobby: 0.2.14
@@ -9476,7 +9353,7 @@ snapshots:
9353
9354 unplugin@2.3.5:
9355 dependencies:
9479 - acorn: 8.14.1
9356 + acorn: 8.15.0
9357 picomatch: 4.0.2
9358 webpack-virtual-modules: 0.6.2
9359
@@ -9490,9 +9367,9 @@ snapshots:
9367 knitwork: 1.2.0
9368 scule: 1.3.0
9369
9493 - update-browserslist-db@1.1.3(browserslist@4.24.5):
9370 + update-browserslist-db@1.1.3(browserslist@4.25.1):
9371 dependencies:
9495 - browserslist: 4.24.5
9372 + browserslist: 4.25.1
9373 escalade: 3.2.0
9374 picocolors: 1.1.1
9375
@@ -9527,28 +9404,28 @@ snapshots:
9404 '@types/unist': 3.0.3
9405 vfile-message: 4.0.2
9406
9530 - vite-bundle-visualizer@1.2.1(rollup@4.41.1):
9407 + vite-bundle-visualizer@1.2.1(rollup@4.44.1):
9408 dependencies:
9409 cac: 6.7.14
9410 import-from-esm: 1.3.4
9534 - rollup-plugin-visualizer: 5.14.0(rollup@4.41.1)
9411 + rollup-plugin-visualizer: 5.14.0(rollup@4.44.1)
9412 tmp: 0.2.3
9413 transitivePeerDependencies:
9414 - rolldown
9415 - rollup
9416 - supports-color
9417
9541 - vite-hot-client@2.0.4(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9418 + vite-hot-client@2.0.4(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9419 dependencies:
9543 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9420 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9421
9545 - vite-node@3.2.4(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9422 + vite-node@3.2.4(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9423 dependencies:
9424 cac: 6.7.14
9425 debug: 4.4.1(supports-color@8.1.1)
9426 es-module-lexer: 1.7.0
9427 pathe: 2.0.3
9551 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9428 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9429 transitivePeerDependencies:
9430 - '@types/node'
9431 - jiti
@@ -9563,10 +9440,10 @@ snapshots:
9440 - tsx
9441 - yaml
9442
9566 - vite-plugin-inspect@0.8.9(rollup@4.41.1)(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9443 + vite-plugin-inspect@0.8.9(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9444 dependencies:
9445 '@antfu/utils': 0.7.10
9569 - '@rollup/pluginutils': 5.1.4(rollup@4.41.1)
9446 + '@rollup/pluginutils': 5.2.0(rollup@4.44.1)
9447 debug: 4.4.1(supports-color@8.1.1)
9448 error-stack-parser-es: 0.1.5
9449 fs-extra: 11.3.0
@@ -9574,39 +9451,39 @@ snapshots:
9451 perfect-debounce: 1.0.0
9452 picocolors: 1.1.1
9453 sirv: 3.0.1
9577 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9454 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9455 transitivePeerDependencies:
9456 - rollup
9457 - supports-color
9458
9582 - vite-plugin-vue-devtools@7.7.7(rollup@4.41.1)(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)):
9459 + vite-plugin-vue-devtools@7.7.7(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)):
9460 dependencies:
9584 - '@vue/devtools-core': 7.7.7(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
9461 + '@vue/devtools-core': 7.7.7(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
9462 '@vue/devtools-kit': 7.7.7
9463 '@vue/devtools-shared': 7.7.7
9464 execa: 9.6.0
9465 sirv: 3.0.1
9589 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9590 - vite-plugin-inspect: 0.8.9(rollup@4.41.1)(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9591 - vite-plugin-vue-inspector: 5.3.1(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9466 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9467 + vite-plugin-inspect: 0.8.9(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9468 + vite-plugin-vue-inspector: 5.3.2(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9469 transitivePeerDependencies:
9470 - '@nuxt/kit'
9471 - rollup
9472 - supports-color
9473 - vue
9474
9598 - vite-plugin-vue-inspector@5.3.1(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9475 + vite-plugin-vue-inspector@5.3.2(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9476 dependencies:
9600 - '@babel/core': 7.27.3
9601 - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.3)
9602 - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.3)
9603 - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.3)
9604 - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.3)
9605 - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.3)
9606 - '@vue/compiler-dom': 3.5.16
9477 + '@babel/core': 7.27.7
9478 + '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.7)
9479 + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.7)
9480 + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.7)
9481 + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.7)
9482 + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.7)
9483 + '@vue/compiler-dom': 3.5.17
9484 kolorist: 1.8.0
9485 magic-string: 0.30.17
9609 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9486 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9487 transitivePeerDependencies:
9488 - supports-color
9489
@@ -9615,27 +9492,27 @@ snapshots:
9492 svgo: 3.3.2
9493 vue: 3.5.17(typescript@5.8.3)
9494
9618 - vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9495 + vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9496 dependencies:
9497 esbuild: 0.25.5
9621 - fdir: 6.4.5(picomatch@4.0.2)
9498 + fdir: 6.4.6(picomatch@4.0.2)
9499 picomatch: 4.0.2
9623 - postcss: 8.5.3
9624 - rollup: 4.41.1
9500 + postcss: 8.5.6
9501 + rollup: 4.44.1
9502 tinyglobby: 0.2.14
9503 optionalDependencies:
9627 - '@types/node': 24.0.3
9504 + '@types/node': 24.0.6
9505 fsevents: 2.3.3
9506 jiti: 2.4.2
9507 lightningcss: 1.30.1
9508 sass: 1.89.2
9509 yaml: 2.8.0
9510
9634 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.3)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9511 + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.6)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9512 dependencies:
9513 '@types/chai': 5.2.2
9514 '@vitest/expect': 3.2.4
9638 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9515 + '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9516 '@vitest/pretty-format': 3.2.4
9517 '@vitest/runner': 3.2.4
9518 '@vitest/snapshot': 3.2.4
@@ -9653,12 +9530,12 @@ snapshots:
9530 tinyglobby: 0.2.14
9531 tinypool: 1.1.1
9532 tinyrainbow: 2.0.0
9656 - vite: 6.3.5(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9657 - vite-node: 3.2.4(@types/node@24.0.3)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9533 + vite: 6.3.5(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9534 + vite-node: 3.2.4(@types/node@24.0.6)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9535 why-is-node-running: 2.3.0
9536 optionalDependencies:
9537 '@types/debug': 4.1.12
9661 - '@types/node': 24.0.3
9538 + '@types/node': 24.0.6
9539 jsdom: 26.1.0
9540 transitivePeerDependencies:
9541 - jiti
@@ -9691,18 +9568,18 @@ snapshots:
9568 vue-codemirror@6.1.1(codemirror@6.0.2)(vue@3.5.17(typescript@5.8.3)):
9569 dependencies:
9570 '@codemirror/commands': 6.8.1
9694 - '@codemirror/language': 6.11.0
9571 + '@codemirror/language': 6.11.2
9572 '@codemirror/state': 6.5.2
9696 - '@codemirror/view': 6.36.8
9573 + '@codemirror/view': 6.38.0
9574 codemirror: 6.0.2
9575 vue: 3.5.17(typescript@5.8.3)
9576
9577 vue-component-type-helpers@2.2.10: {}
9578
9702 - vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@2.4.2)):
9579 + vue-eslint-parser@10.1.4(eslint@9.30.0(jiti@2.4.2)):
9580 dependencies:
9581 debug: 4.4.1(supports-color@8.1.1)
9705 - eslint: 9.29.0(jiti@2.4.2)
9582 + eslint: 9.30.0(jiti@2.4.2)
9583 eslint-scope: 8.4.0
9584 eslint-visitor-keys: 4.2.1
9585 espree: 10.4.0
@@ -9735,7 +9612,7 @@ snapshots:
9612
9613 vue-tsc@2.2.10(typescript@5.8.3):
9614 dependencies:
9738 - '@volar/typescript': 2.4.14
9615 + '@volar/typescript': 2.4.15
9616 '@vue/language-core': 2.2.10(typescript@5.8.3)
9617 typescript: 5.8.3
9618
frontend/src/api/endpoints/threatIntel.ts
+17
@@ -6,6 +6,8 @@ import type {
6 EpssScore,
7 EvaluationData,
8 ThreatIntelResponse,
9 + VirusTotalAnalysis,
10 + VirusTotalFileCheckResponse,
11 VirusTotalResponse
12 } from "@/types/threatIntel.d"
13 import { HttpClient } from "../httpClient"
@@ -74,5 +76,20 @@ export default {
76 return HttpClient.post<FlaskBaseResponse & VirusTotalResponse>(`/threat_intel/virustotal`, {
77 ioc_value: iocValue
78 })
79 + },
80 + virusTotalFileCheck(file: File) {
81 + const form = new FormData()
82 + form.append("file", new Blob([file], { type: file.type }), file.name)
83 +
84 + return HttpClient.post<FlaskBaseResponse & { data: VirusTotalFileCheckResponse }>(
85 + `/threat_intel/virustotal/file/submit`,
86 + form
87 + )
88 + },
89 + virusTotalAnalysis(id: string, signal?: AbortSignal) {
90 + return HttpClient.get<FlaskBaseResponse & { data: VirusTotalAnalysis }>(
91 + `/threat_intel/virustotal/analysis/${id}`,
92 + signal ? { signal } : {}
93 + )
94 }
95 }
frontend/src/components/threatIntel/ThreatIntelButton.vue
+17 -3
@@ -11,20 +11,32 @@
11 :width="500"
12 style="max-width: 90vw"
13 :trap-focus="false"
14 + :close-on-esc="false"
15 + :mask-closable="false"
16 display-directive="show"
17 >
16 - <n-drawer-content title="SOCFortress Threat Intel" closable :native-scrollbar="false">
17 - <ThreatIntelForm @mounted="threatIntelCTX = $event" />
18 + <n-drawer-content title="Threat Intel" closable :native-scrollbar="false">
19 + <div class="py-3">
20 + <n-collapse default-expanded-names="1" accordion display-directive="show">
21 + <n-collapse-item title="SOCFortress Threat Intel" name="1">
22 + <ThreatIntelForm @mounted="threatIntelCTX = $event" />
23 + </n-collapse-item>
24 + <n-collapse-item title="Virus Total" name="2">
25 + <VirusTotalForm @mounted="virusTotalCTX = $event" />
26 + </n-collapse-item>
27 + </n-collapse>
28 + </div>
29 </n-drawer-content>
30 </n-drawer>
31 </template>
32
33 <script setup lang="ts">
34 import type { Size, Type } from "naive-ui/es/button/src/interface"
24 -import { NButton, NDrawer, NDrawerContent } from "naive-ui"
35 +import { NButton, NCollapse, NCollapseItem, NDrawer, NDrawerContent } from "naive-ui"
36 import { ref, watch } from "vue"
37 import Icon from "@/components/common/Icon.vue"
38 import ThreatIntelForm from "./ThreatIntelForm.vue"
39 +import VirusTotalForm from "./VirusTotalForm.vue"
40
41 const { type, size } = defineProps<{
42 size?: Size
@@ -34,8 +46,10 @@ const { type, size } = defineProps<{
46 const ThreatIcon = "mynaui:info-waves"
47 const showThreatIntelDrawer = ref(false)
48 const threatIntelCTX = ref<{ restore: () => void } | null>(null)
49 +const virusTotalCTX = ref<{ restore: () => void } | null>(null)
50
51 watch(showThreatIntelDrawer, () => {
52 threatIntelCTX.value?.restore()
53 + virusTotalCTX.value?.restore()
54 })
55 </script>
frontend/src/components/threatIntel/ThreatIntelForm.vue
+2 -2
@@ -125,12 +125,12 @@ function create() {
125 message.success(res.data?.message || "SOCFortress Threat Intel submitted.")
126 } else {
127 error.value = res.data?.message || "An error occurred. Please try again later."
128 - message.warning(res.data?.message || "An error occurred. Please try again later.")
128 + message.warning(error.value)
129 }
130 })
131 .catch(err => {
132 error.value = err.response?.data?.message || "An error occurred. Please try again later."
133 - message.error(err.response?.data?.message || "An error occurred. Please try again later.")
133 + message.error(error.value)
134 })
135 .finally(() => {
136 loading.value = false
frontend/src/components/threatIntel/VirusTotalForm.vue new
+322
@@ -0,0 +1,322 @@
1 +<template>
2 + <n-spin :show="uploading">
3 + <div class="flex flex-col gap-3">
4 + <div class="flex flex-col gap-1">
5 + <n-upload v-model:file-list="fileList" :max="1" :disabled="uploading">
6 + <n-upload-dragger>
7 + <div>
8 + <Icon :name="UploadIcon" :size="28" :depth="3" />
9 + </div>
10 + <div class="font-medium">Click or drag a file to this area to upload</div>
11 + </n-upload-dragger>
12 + </n-upload>
13 + </div>
14 + <div class="mb-2 flex justify-end">
15 + <n-button type="primary" :disabled="!isValid" :loading="uploading" @click="submit()">Submit</n-button>
16 + </div>
17 + <div v-if="error" class="response bg-secondary error">
18 + <div class="px-4 py-2.5">
19 + {{ error }}
20 + </div>
21 + </div>
22 + <div v-else class="flex flex-col gap-3">
23 + <div v-if="fileResponse" class="response bg-secondary p-4">
24 + <div class="flex flex-col gap-4 text-sm">
25 + <div class="font-semibold">
26 + This link gives you access to the instance created from your uploaded file.
27 + </div>
28 + <n-alert type="warning">
29 + <template #icon>
30 + <Icon name="carbon:warning-alt" :size="14" />
31 + </template>
32 + <template #header>
33 + <div class="text-xs">Please note</div>
34 + </template>
35 + <template #default>
36 + <div class="text-xs">
37 + Once you close this window, the link cannot be retrieved again. If you think you
38 + might need it later, make sure to copy and save it.
39 + </div>
40 + </template>
41 + </n-alert>
42 + <div>
43 + <a
44 + :href="fileResponse.links.self"
45 + target="_blank"
46 + alt="references url"
47 + rel="nofollow noopener noreferrer"
48 + class="leading-6"
49 + >
50 + <span>
51 + {{ fileResponse.links.self }}
52 + </span>
53 + <Icon :name="LinkIcon" :size="14" class="relative top-0.5 ml-2" />
54 + </a>
55 + </div>
56 + <div v-if="isCopySupported" class="flex justify-end">
57 + <n-tooltip :show="showCopyTooltip" trigger="manual">
58 + <template #trigger>
59 + <n-button size="small" secondary @click="copyLink()">
60 + <template #icon>
61 + <Icon name="carbon:copy" :size="14" />
62 + </template>
63 + Copy
64 + </n-button>
65 + </template>
66 + <div class="text-xs">Copied!</div>
67 + </n-tooltip>
68 + </div>
69 + </div>
70 + </div>
71 + <div
72 + v-if="fileResponse && !analysisResponse"
73 + class="response bg-secondary flex flex-wrap items-center gap-2 p-4"
74 + >
75 + <Icon :name="LoadingIcon" :size="16" class="relative top-0.5" />
76 + analyzing...
77 + </div>
78 + <n-spin v-if="analysisResponse" :show="loading">
79 + <div class="response bg-secondary overflow-hidden">
80 + <div class="bg-default flex items-center justify-between p-4">
81 + <div>Analysis</div>
82 + <n-button :loading secondary size="small" @click="analysis()">
83 + <template #icon>
84 + <Icon :name="RefreshIcon" :size="14" />
85 + </template>
86 + Reload
87 + </n-button>
88 + </div>
89 + <div class="divide-border flex flex-col divide-y-2 text-sm">
90 + <div class="flex flex-col gap-1 p-4">
91 + <div class="text-secondary text-xs">status</div>
92 + <div
93 + class="flex items-center gap-1"
94 + :class="{
95 + 'text-success': analysisResponse.attributes.status === 'completed',
96 + 'text-warning': analysisResponse.attributes.status === 'queued'
97 + }"
98 + >
99 + <Icon
100 + :name="
101 + analysisResponse.attributes.status === 'completed'
102 + ? 'carbon:checkmark-outline'
103 + : 'carbon:hourglass'
104 + "
105 + :size="14"
106 + />
107 + {{ analysisResponse.attributes.status }}
108 + </div>
109 + </div>
110 + <div v-if="!_isEmpty(analysisResponse.attributes.stats)" class="flex flex-col gap-1 p-4">
111 + <div class="text-secondary text-xs">stats</div>
112 + <div class="divide-border divide-y-1 flex flex-col gap-2">
113 + <div
114 + v-for="(val, key) of analysisResponse.attributes.stats"
115 + :key="key"
116 + class="flex items-end justify-between gap-4"
117 + >
118 + <div>{{ key }}</div>
119 + <div class="text-right font-mono">{{ val }}</div>
120 + </div>
121 + </div>
122 + </div>
123 + <div
124 + v-if="!_isEmpty(analysisResponse.attributes.results)"
125 + class="flex flex-col gap-2 overflow-hidden p-4"
126 + >
127 + <div class="text-secondary flex items-center justify-between text-xs">
128 + <div>results</div>
129 + <n-button
130 + size="tiny"
131 + secondary
132 + @click="analysisResultCollapsed = !analysisResultCollapsed"
133 + >
134 + <template #icon>
135 + <Icon
136 + :name="
137 + analysisResultCollapsed
138 + ? 'carbon:chevron-right'
139 + : 'carbon:chevron-down'
140 + "
141 + :size="14"
142 + />
143 + </template>
144 + {{ analysisResultCollapsed ? "expand" : "collapse" }}
145 + </n-button>
146 + </div>
147 + <div v-if="!analysisResultCollapsed" class="flex flex-col gap-4">
148 + <div
149 + v-for="(resultVal, resultKey) of analysisResponse.attributes.results"
150 + :key="resultKey"
151 + class="border-default border"
152 + >
153 + <div class="px-2 py-1">{{ resultKey }}</div>
154 + <div class="divide-border divide-y-1 bg-default flex flex-col gap-1">
155 + <div
156 + v-for="(val, key) of resultVal"
157 + :key="key"
158 + class="flex items-end justify-between gap-4 px-2 py-0.5"
159 + >
160 + <div>{{ key }}</div>
161 + <div class="text-right font-mono">{{ val || "—" }}</div>
162 + </div>
163 + </div>
164 + </div>
165 + </div>
166 + </div>
167 + <div v-if="!_isEmpty(analysisResponse.links)" class="flex flex-col gap-1 p-4">
168 + <div class="text-secondary text-xs">links</div>
169 + <div class="divide-border divide-y-1 flex flex-col gap-2">
170 + <div
171 + v-for="(val, key) of analysisResponse.links"
172 + :key="key"
173 + class="flex items-end justify-between"
174 + >
175 + <a
176 + :href="val"
177 + target="_blank"
178 + alt="references url"
179 + rel="nofollow noopener noreferrer"
180 + class="leading-6"
181 + >
182 + <span>
183 + {{ val }}
184 + </span>
185 + <Icon :name="LinkIcon" :size="14" class="relative top-0.5 ml-2" />
186 + </a>
187 + </div>
188 + </div>
189 + </div>
190 + </div>
191 + </div>
192 + </n-spin>
193 + </div>
194 + </div>
195 + </n-spin>
196 +</template>
197 +
198 +<script setup lang="ts">
199 +import type { UploadFileInfo } from "naive-ui"
200 +import type { VirusTotalAnalysis, VirusTotalFileCheckResponse } from "@/types/threatIntel.d"
201 +import { useClipboard } from "@vueuse/core"
202 +import _isEmpty from "lodash/isEmpty"
203 +import { NAlert, NButton, NSpin, NTooltip, NUpload, NUploadDragger, useMessage } from "naive-ui"
204 +import { computed, onMounted, ref } from "vue"
205 +import Api from "@/api"
206 +import Icon from "@/components/common/Icon.vue"
207 +
208 +const emit = defineEmits<{
209 + (
210 + e: "mounted",
211 + value: {
212 + restore: () => void
213 + }
214 + ): void
215 +}>()
216 +
217 +const LinkIcon = "carbon:launch"
218 +const RefreshIcon = "carbon:renew"
219 +const LoadingIcon = "eos-icons:loading"
220 +const UploadIcon = "carbon:cloud-upload"
221 +
222 +const message = useMessage()
223 +const loading = ref(false)
224 +const uploading = ref(false)
225 +const analysisResultCollapsed = ref(true)
226 +const fileResponse = ref<VirusTotalFileCheckResponse | null>(null)
227 +const analysisResponse = ref<VirusTotalAnalysis | null>(null)
228 +const error = ref<string>("")
229 +const fileList = ref<UploadFileInfo[]>([])
230 +const newFile = computed<File | null>(() => fileList.value?.[0]?.file || null)
231 +let abortController: AbortController | null = null
232 +
233 +const fileLink = computed(() => fileResponse.value?.links.self || "")
234 +const { copy: copyLink, copied: showCopyTooltip, isSupported: isCopySupported } = useClipboard({ source: fileLink })
235 +
236 +const isValid = computed(() => !!newFile.value)
237 +
238 +function restore() {
239 + fileList.value = []
240 + loading.value = false
241 + uploading.value = false
242 + fileResponse.value = null
243 + analysisResponse.value = null
244 + error.value = ""
245 + abortController?.abort()
246 +}
247 +
248 +function submit() {
249 + if (!newFile.value) return
250 +
251 + uploading.value = true
252 +
253 + Api.threatIntel
254 + .virusTotalFileCheck(newFile.value)
255 + .then(res => {
256 + if (res.data.success) {
257 + error.value = ""
258 + fileResponse.value = res.data.data
259 + analysisResponse.value = null
260 +
261 + analysis()
262 + message.success(res.data?.message || "File submitted successfully for analysis.")
263 + } else {
264 + error.value = res.data?.message || "An error occurred. Please try again later."
265 + message.warning(error.value)
266 + }
267 + })
268 + .catch(err => {
269 + error.value = err.response?.data?.message || "An error occurred. Please try again later."
270 + message.error(error.value)
271 + })
272 + .finally(() => {
273 + uploading.value = false
274 + })
275 +}
276 +
277 +function analysis() {
278 + abortController?.abort()
279 +
280 + if (!fileResponse.value?.id) return
281 +
282 + loading.value = true
283 + abortController = new AbortController()
284 +
285 + Api.threatIntel
286 + .virusTotalAnalysis(fileResponse.value.id, abortController.signal)
287 + .then(res => {
288 + if (res.data.success) {
289 + error.value = ""
290 + analysisResponse.value = res.data.data
291 + message.success(res.data?.message || "Analysis status retrieved successfully.")
292 + } else {
293 + error.value = res.data?.message || "An error occurred. Please try again later."
294 + message.warning(error.value)
295 + }
296 + })
297 + .catch(err => {
298 + error.value = err.response?.data?.message || "An error occurred. Please try again later."
299 + message.error(error.value)
300 + })
301 + .finally(() => {
302 + loading.value = false
303 + })
304 +}
305 +
306 +onMounted(() => {
307 + emit("mounted", {
308 + restore
309 + })
310 +})
311 +</script>
312 +
313 +<style scoped lang="scss">
314 +.response {
315 + border-radius: var(--border-radius);
316 + border: 1px solid var(--success-color);
317 +
318 + &.error {
319 + border-color: var(--error-color);
320 + }
321 +}
322 +</style>
frontend/src/types/threatIntel.d.ts
+44
@@ -201,3 +201,47 @@ export interface VirusTotalLastHTTPSCertificateExtensions {
201 CA: boolean
202 "1.3.6.1.4.1.11129.2.4.2": string
203 }
204 +
205 +export interface VirusTotalAnalysis {
206 + type: string
207 + id: string
208 + attributes: VirusTotalAnalysisAttributes
209 + links: Record<string, string>
210 +}
211 +
212 +export interface VirusTotalAnalysisAttributes {
213 + date: number
214 + status: "queued" | "completed"
215 + stats: VirusTotalAnalysisStats
216 + results: { [key: string]: VirusTotalAnalysisResult }
217 +}
218 +
219 +export interface VirusTotalAnalysisResult {
220 + method: string
221 + engine_name: string
222 + engine_version: null | string
223 + engine_update: string
224 + category: string
225 + result: null | string
226 +}
227 +
228 +export interface VirusTotalAnalysisStats {
229 + harmless: number
230 + malicious: number
231 + suspicious: number
232 + undetected: number
233 + timeout: number
234 + confirmed_timeout: number
235 + failure: number
236 + type_unsupported: number
237 + "confirmed-timeout": number
238 + "type-unsupported": number
239 +}
240 +
241 +export interface VirusTotalFileCheckResponse {
242 + type: string
243 + id: string
244 + links: {
245 + self: string
246 + }
247 +}