@cryptotaxi247 / CoPilot / commits / e6cf4501

Wazuh rules (#474)

* Add endpoints to list Wazuh rules and rule files with comprehensive filtering options * Add endpoint to retrieve Wazuh rule file content with structured and raw response options * Add endpoint to upload or update Wazuh rule files with validation and response handling * precommit fixes * feat: add xml syntax check * refactor: xml syntax check * refactor: xml syntax check * refactor: xml syntax check * refactor: xml syntax check * chore: update frontend dependencies * chore: update frontend dependencies * chore: update frontend dependencies * feat: add xml error popup * refactor * feat: add DetectionRules page * fix: change default overwrite behavior to true in update_wazuh_rule_file_endpoint * refactor: xml editor * refactor: update execute_singul function to use connect method and clean up commented code * lint * fix: dependencies * feat: add management routes for restarting Wazuh Manager service and cluster status retrieval * feat: add restart manager button * precommit fixes --------- Co-authored-by: Davide Di Modica <webmaster.ddm@gmail.com>

taylor_socfortress committed Jul 12, 2025 at 08:29 UTC e6cf4501dcac9931a2a6eead330da841088dc5a0
48 files changed +2393 -960
backend/app/connectors/shuffle/services/singul.py
+43 -41
@@ -4,44 +4,6 @@ from app.connectors.shuffle.schema.singul import SingulRequest
4 from app.connectors.shuffle.utils.universal import get_shuffle_org_id
5 from app.connectors.shuffle.utils.universal import get_singul_client
6
7 -# async def execute_singul(
8 -# request: SingulRequest,
9 -# ) -> dict:
10 -# """
11 -# Execute a Singul integration.
12 -
13 -# Args:
14 -# request (SingulRequest): The request object containing the workflow ID.
15 -
16 -# Returns:
17 -# dict: The response containing the execution ID.
18 -# """
19 -# logger.info("Executing Singul integration")
20 -
21 -# # Get Singul client from database credentials
22 -# singul = await get_singul_client()
23 -
24 -# try:
25 -# response = singul.communication.send_message(
26 -# app=request.app,
27 -# org_id=await get_shuffle_org_id(),
28 -# fields=[
29 -# {"key": "to", "value": "walton.taylor23@gmail.com"},
30 -# {"key": "subject", "value": "Test Email from Singul"},
31 -# {"key": "body", "value": "This is a test email sent from Singul."},
32 -# ],
33 -# )
34 -# logger.info(f"Singul response: {response}")
35 -# logger.info(f"Singul response success: {response.get('success', 'unknown')}")
36 -
37 -# return {
38 -# "executionId": response.get("id", "unknown"),
39 -# "message": "Singul integration executed successfully",
40 -# }
41 -# except Exception as e:
42 -# logger.error(f"Failed to execute Singul integration: {e}")
43 -# return {"executionId": "unknown", "message": f"Singul integration failed: {e}", "success": False}
44 -
7
8 async def execute_singul(
9 request: SingulRequest,
@@ -61,10 +23,15 @@ async def execute_singul(
23 singul = await get_singul_client()
24
25 try:
64 - response = singul.intel.get_ioc(
65 - app="opencti_dcon",
26 + response = singul.connect(
27 + app=request.app,
28 + action="send_message",
29 org_id=await get_shuffle_org_id(),
67 - fields=[{"key": "ip", "value": "1.1.1.1"}],
30 + fields=[
31 + {"key": "to", "value": "walton.taylor23@gmail.com"},
32 + {"key": "subject", "value": "Test Email from Singul"},
33 + {"key": "body", "value": "This is a test email sent from Singul."},
34 + ],
35 )
36 logger.info(f"Singul response: {response}")
37 logger.info(f"Singul response success: {response.get('success', 'unknown')}")
@@ -76,3 +43,38 @@ async def execute_singul(
43 except Exception as e:
44 logger.error(f"Failed to execute Singul integration: {e}")
45 return {"executionId": "unknown", "message": f"Singul integration failed: {e}", "success": False}
46 +
47 +
48 +# async def execute_singul(
49 +# request: SingulRequest,
50 +# ) -> dict:
51 +# """
52 +# Execute a Singul integration.
53 +
54 +# Args:
55 +# request (SingulRequest): The request object containing the workflow ID.
56 +
57 +# Returns:
58 +# dict: The response containing the execution ID.
59 +# """
60 +# logger.info("Executing Singul integration")
61 +
62 +# # Get Singul client from database credentials
63 +# singul = await get_singul_client()
64 +
65 +# try:
66 +# response = singul.intel.get_ioc(
67 +# app="opencti_dcon",
68 +# org_id=await get_shuffle_org_id(),
69 +# fields=[{"key": "ip", "value": "1.1.1.1"}],
70 +# )
71 +# logger.info(f"Singul response: {response}")
72 +# logger.info(f"Singul response success: {response.get('success', 'unknown')}")
73 +
74 +# return {
75 +# "executionId": response.get("id", "unknown"),
76 +# "message": "Singul integration executed successfully",
77 +# }
78 +# except Exception as e:
79 +# logger.error(f"Failed to execute Singul integration: {e}")
80 +# return {"executionId": "unknown", "message": f"Singul integration failed: {e}", "success": False}
backend/app/connectors/wazuh_manager/routes/management.py new
+22
@@ -0,0 +1,22 @@
1 +from fastapi import APIRouter
2 +from fastapi import Security
3 +from loguru import logger
4 +
5 +from app.auth.routes.auth import AuthHandler
6 +from app.connectors.wazuh_manager.utils.universal import restart_wazuh_manager_service
7 +
8 +wazuh_manager_management_router = APIRouter()
9 +auth_handler = AuthHandler()
10 +
11 +
12 +@wazuh_manager_management_router.post(
13 + "/restart",
14 + description="Get all disabled rules",
15 + dependencies=[Security(AuthHandler().get_current_user, scopes=["admin"])],
16 +)
17 +async def restart_wazuh_manager() -> dict:
18 + """
19 + Restart the Wazuh Manager service.
20 + """
21 + logger.info("Restarting Wazuh Manager service.")
22 + return await restart_wazuh_manager_service()
backend/app/connectors/wazuh_manager/routes/rules.py
+216
@@ -1,8 +1,15 @@
1 # App specific imports
2 +from typing import List
3 +from typing import Optional
4 +
5 from fastapi import APIRouter
6 from fastapi import Depends
7 +from fastapi import File
8 from fastapi import HTTPException
9 +from fastapi import Path
10 +from fastapi import Query
11 from fastapi import Security
12 +from fastapi import UploadFile
13 from loguru import logger
14 from sqlalchemy.ext.asyncio import AsyncSession
15 from sqlalchemy.future import select
@@ -18,12 +25,20 @@ from app.connectors.wazuh_manager.schema.rules import RuleEnable
25 from app.connectors.wazuh_manager.schema.rules import RuleEnableResponse
26 from app.connectors.wazuh_manager.schema.rules import RuleExcludeRequest
27 from app.connectors.wazuh_manager.schema.rules import RuleExcludeResponse
28 +from app.connectors.wazuh_manager.schema.rules import WazuhRuleFileContentResponse
29 +from app.connectors.wazuh_manager.schema.rules import WazuhRuleFilesResponse
30 +from app.connectors.wazuh_manager.schema.rules import WazuhRuleFileUploadResponse
31 +from app.connectors.wazuh_manager.schema.rules import WazuhRulesResponse
32
33 # from app.connectors.wazuh_manager.schema.rules import RuleExclude
34 # from app.connectors.wazuh_manager.schema.rules import RuleExcludeResponse
35 from app.connectors.wazuh_manager.services.rules import disable_rule
36 from app.connectors.wazuh_manager.services.rules import enable_rule
37 +from app.connectors.wazuh_manager.services.rules import get_wazuh_rule_file_content
38 +from app.connectors.wazuh_manager.services.rules import get_wazuh_rule_files
39 +from app.connectors.wazuh_manager.services.rules import get_wazuh_rules
40 from app.connectors.wazuh_manager.services.rules import post_to_copilot_ai_module
41 +from app.connectors.wazuh_manager.services.rules import update_wazuh_rule_file
42
43 # from app.connectors.wazuh_manager.services.rules import exclude_rule
44 from app.db.db_session import get_db
@@ -164,3 +179,204 @@ async def enable_wazuh_rule(
179 )
180 async def exclude_wazuh_rule(request: RuleExcludeRequest) -> RuleExcludeResponse:
181 return await post_to_copilot_ai_module(data=request)
182 +
183 +
184 +@wazuh_manager_rules_router.get(
185 + "/rules",
186 + response_model=WazuhRulesResponse,
187 + description="List Wazuh rules",
188 + dependencies=[Security(AuthHandler().get_current_user, scopes=["admin"])],
189 +)
190 +async def list_wazuh_rules(
191 + rule_ids: Optional[List[int]] = Query(None, description="List of rule IDs"),
192 + pretty: Optional[bool] = Query(False, description="Show results in human-readable format"),
193 + wait_for_complete: Optional[bool] = Query(False, description="Disable timeout response"),
194 + offset: Optional[int] = Query(0, ge=0, description="First element to return"),
195 + limit: Optional[int] = Query(500, ge=1, le=100000, description="Maximum number of elements"),
196 + select: Optional[List[str]] = Query(None, description="Fields to return"),
197 + sort: Optional[str] = Query(None, description="Sort fields"),
198 + search: Optional[str] = Query(None, description="Search text"),
199 + q: Optional[str] = Query(None, description="Query filter"),
200 + status: Optional[str] = Query(None, description="Rule status filter"),
201 + group: Optional[str] = Query(None, description="Rule group filter"),
202 + level: Optional[str] = Query(None, description="Rule level filter"),
203 + filename: Optional[List[str]] = Query(None, description="Filename filter"),
204 + relative_dirname: Optional[str] = Query(None, description="Directory filter"),
205 + pci_dss: Optional[str] = Query(None, description="PCI DSS filter"),
206 + gdpr: Optional[str] = Query(None, description="GDPR filter"),
207 + gpg13: Optional[str] = Query(None, description="GPG13 filter"),
208 + hipaa: Optional[str] = Query(None, description="HIPAA filter"),
209 + nist_800_53: Optional[str] = Query(None, description="NIST 800-53 filter"),
210 + tsc: Optional[str] = Query(None, description="TSC filter"),
211 + mitre: Optional[str] = Query(None, description="MITRE filter"),
212 + distinct: Optional[bool] = Query(False, description="Distinct values only"),
213 +) -> WazuhRulesResponse:
214 + """
215 + List Wazuh rules with comprehensive filtering options.
216 +
217 + Returns a list of Wazuh rules from the Wazuh Manager API with support for
218 + filtering by various criteria including compliance frameworks and MITRE ATT&CK.
219 + """
220 + # Use **locals() to pass all parameters efficiently
221 + params = {k: v for k, v in locals().items() if k not in ["auth_handler"]}
222 + return await get_wazuh_rules(**params)
223 +
224 +
225 +@wazuh_manager_rules_router.get(
226 + "/rules/files",
227 + response_model=WazuhRuleFilesResponse,
228 + description="List Wazuh rule files",
229 + dependencies=[Security(AuthHandler().get_current_user, scopes=["admin"])],
230 +)
231 +async def list_wazuh_rule_files(
232 + pretty: Optional[bool] = Query(False, description="Show results in human-readable format"),
233 + wait_for_complete: Optional[bool] = Query(False, description="Disable timeout response"),
234 + offset: Optional[int] = Query(0, ge=0, description="First element to return in the collection"),
235 + limit: Optional[int] = Query(500, ge=1, le=100000, description="Maximum number of elements to return"),
236 + sort: Optional[str] = Query(None, description="Sort the collection by a field or fields"),
237 + search: Optional[str] = Query(None, description="Look for elements containing the specified string"),
238 + relative_dirname: Optional[str] = Query(None, description="Filter by relative directory name"),
239 + filename: Optional[List[str]] = Query(None, description="Filter by filename of rule files"),
240 + status: Optional[str] = Query(None, description="Filter by list status (enabled, disabled, all)"),
241 + q: Optional[str] = Query(None, description="Query to filter results by"),
242 + select: Optional[List[str]] = Query(None, description="Select which fields to return"),
243 + distinct: Optional[bool] = Query(False, description="Look for distinct values"),
244 +) -> WazuhRuleFilesResponse:
245 + """
246 + Retrieve a list of Wazuh rule files from the Wazuh Manager.
247 +
248 + This endpoint provides access to all rule files used to define Wazuh rules,
249 + including their status and location within the ruleset directory structure.
250 +
251 + Parameters:
252 + - pretty: Format results for human readability
253 + - wait_for_complete: Disable request timeout
254 + - offset: Pagination offset (default: 0)
255 + - limit: Maximum results per page (default: 500, max: 100000)
256 + - sort: Fields to sort by (use +/- prefix for ascending/descending)
257 + - search: Text search across file properties
258 + - relative_dirname: Filter by relative directory path
259 + - filename: Filter by specific rule filenames
260 + - status: Filter by file status (enabled/disabled/all)
261 + - q: Advanced query filter
262 + - select: Comma-separated list of fields to return
263 + - distinct: Return only distinct values
264 +
265 + Returns:
266 + - WazuhRuleFilesResponse: List of rule files with their status and location metadata.
267 + """
268 + # Use locals() to capture all parameters, excluding non-parameter variables
269 + params = {k: v for k, v in locals().items()}
270 + return await get_wazuh_rule_files(**params)
271 +
272 +
273 +@wazuh_manager_rules_router.get(
274 + "/rules/files/{filename}",
275 + response_model=WazuhRuleFileContentResponse,
276 + description="Get Wazuh rule file content",
277 + dependencies=[Security(AuthHandler().get_current_user, scopes=["admin"])],
278 +)
279 +async def get_wazuh_rule_file_content_endpoint(
280 + filename: str = Path(..., description="Filename (rule or decoder) to get content for"),
281 + pretty: Optional[bool] = Query(False, description="Show results in human-readable format"),
282 + wait_for_complete: Optional[bool] = Query(False, description="Disable timeout response"),
283 + raw: Optional[bool] = Query(True, description="Format response in plain text"),
284 + relative_dirname: Optional[str] = Query(None, description="Filter by relative directory name"),
285 +) -> WazuhRuleFileContentResponse:
286 + """
287 + Get the content of a specified rule file in the ruleset.
288 +
289 + This endpoint retrieves the full content of a Wazuh rule file, which can contain
290 + multiple rule groups and individual rules with their configurations.
291 +
292 + Parameters:
293 + - filename: The name of the rule file to retrieve (required)
294 + - pretty: Format results for human readability
295 + - wait_for_complete: Disable request timeout
296 + - raw: Return content as plain text instead of structured data
297 + - relative_dirname: Filter by relative directory name
298 +
299 + Returns:
300 + - WazuhRuleFileContentResponse: The content of the rule file, either as structured
301 + data (default) or as raw text (when raw=true).
302 +
303 + Raises:
304 + - 404: If the specified rule file is not found
305 + - 500: If there's an error retrieving the file content
306 + """
307 + # Use locals() to capture all parameters, excluding the filename path parameter
308 + params = {k: v for k, v in locals().items() if k != "filename"}
309 + return await get_wazuh_rule_file_content(filename, **params)
310 +
311 +
312 +@wazuh_manager_rules_router.put(
313 + "/rules/files/{filename}",
314 + response_model=WazuhRuleFileUploadResponse,
315 + description="Upload or update a Wazuh rule file",
316 + dependencies=[Security(AuthHandler().get_current_user, scopes=["admin"])],
317 +)
318 +async def update_wazuh_rule_file_endpoint(
319 + filename: str = Path(..., description="Name of the rule file to upload/update"),
320 + file: UploadFile = File(..., description="Rule file content (XML format)"),
321 + pretty: Optional[bool] = Query(False, description="Show results in human-readable format"),
322 + wait_for_complete: Optional[bool] = Query(False, description="Disable timeout response"),
323 + overwrite: Optional[bool] = Query(True, description="Whether to overwrite the file if it exists"),
324 + relative_dirname: Optional[str] = Query(None, description="Relative directory name"),
325 +) -> WazuhRuleFileUploadResponse:
326 + """
327 + Upload or update a Wazuh rule file in the ruleset.
328 +
329 + This endpoint allows you to upload a new rule file or update an existing one
330 + in the Wazuh Manager ruleset. The file should be in XML format containing
331 + valid Wazuh rule definitions.
332 +
333 + Parameters:
334 + - filename: The name of the rule file to upload/update (required)
335 + - file: The rule file content as a binary upload (required, should be XML format)
336 + - pretty: Format results for human readability
337 + - wait_for_complete: Disable request timeout
338 + - overwrite: Whether to overwrite the file if it already exists
339 + - relative_dirname: Relative directory name where the file should be placed
340 +
341 + Returns:
342 + - WazuhRuleFileUploadResponse: Confirmation of successful upload/update with file details
343 +
344 + Raises:
345 + - 400: If the file format is invalid or parameters are incorrect
346 + - 409: If the file already exists and overwrite is False
347 + - 500: If there's an error uploading the file
348 + """
349 + # Validate file content type (should be XML or octet-stream)
350 + if file.content_type and not any(ct in file.content_type.lower() for ct in ["xml", "text", "octet-stream", "application/xml"]):
351 + logger.warning(f"Unexpected content type: {file.content_type}")
352 +
353 + try:
354 + # Read file content
355 + file_content = await file.read()
356 +
357 + # Validate that we have content
358 + if not file_content:
359 + raise HTTPException(status_code=400, detail="File content is empty")
360 +
361 + # Basic XML validation (check for XML tags)
362 + file_content_str = file_content.decode("utf-8", errors="ignore")
363 + if not file_content_str.strip().startswith("<"):
364 + logger.warning("File does not appear to be XML format")
365 +
366 + logger.info(f"Received file upload: {filename}, size: {len(file_content)} bytes")
367 +
368 + # Call service function
369 + return await update_wazuh_rule_file(
370 + filename=filename,
371 + file_content=file_content,
372 + pretty=pretty,
373 + wait_for_complete=wait_for_complete,
374 + overwrite=overwrite,
375 + relative_dirname=relative_dirname,
376 + )
377 +
378 + except UnicodeDecodeError:
379 + raise HTTPException(status_code=400, detail="Invalid file encoding. File must be UTF-8 encoded XML.")
380 + except Exception as e:
381 + logger.error(f"Error processing file upload for {filename}: {e}")
382 + raise HTTPException(status_code=500, detail=f"Error processing file upload: {str(e)}")
backend/app/connectors/wazuh_manager/schema/rules.py
+76
@@ -1,5 +1,6 @@
1 from typing import List
2 from typing import Optional
3 +from typing import Union
4
5 from fastapi import HTTPException
6 from pydantic import BaseModel
@@ -45,6 +46,81 @@ class AllDisabledRuleResponse(BaseModel):
46 message: str
47
48
49 +# Simplified and more efficient rule models
50 +class WazuhRule(BaseModel):
51 + """Represents a single Wazuh rule from the API."""
52 +
53 + filename: str
54 + relative_dirname: str
55 + id: int
56 + level: int
57 + status: str
58 + description: str
59 + groups: List[str] = []
60 + pci_dss: List[str] = []
61 + gpg13: List[str] = []
62 + gdpr: List[str] = []
63 + hipaa: List[str] = []
64 + nist_800_53: List[str] = Field(default=[], alias="nist-800-53")
65 + tsc: List[str] = []
66 + mitre: List[str] = []
67 + details: Optional[dict] = None
68 +
69 + class Config:
70 + allow_population_by_field_name = True
71 + extra = "ignore" # Ignore extra fields from API
72 +
73 +
74 +class WazuhRulesResponse(BaseModel):
75 + """Response model for Wazuh rules listing."""
76 +
77 + success: bool
78 + message: str
79 + results: List[WazuhRule] = []
80 + total_items: Optional[int] = None
81 +
82 +
83 +class WazuhRuleFile(BaseModel):
84 + """Represents a single Wazuh rule file from the API."""
85 +
86 + filename: str = Field(..., description="Rule file name")
87 + relative_dirname: str = Field(..., description="Relative directory path")
88 + status: str = Field(..., description="File status (enabled/disabled)")
89 +
90 + class Config:
91 + extra = "ignore" # Ignore extra fields from API
92 +
93 +
94 +class WazuhRuleFilesResponse(BaseModel):
95 + """Response model for Wazuh rule files listing."""
96 +
97 + success: bool = Field(..., description="Whether the request was successful")
98 + message: str = Field(..., description="Response message")
99 + results: List[WazuhRuleFile] = Field(default=[], description="List of rule files")
100 + total_items: Optional[int] = Field(None, description="Total number of files")
101 +
102 +
103 +class WazuhRuleFileContentResponse(BaseModel):
104 + """Response model for Wazuh rule file content."""
105 +
106 + success: bool = Field(..., description="Whether the request was successful")
107 + message: str = Field(..., description="Response message")
108 + filename: str = Field(..., description="The requested filename")
109 + content: Union[dict, str] = Field(..., description="File content (structured or raw)")
110 + is_raw: bool = Field(False, description="Whether the content is raw text")
111 + total_items: Optional[int] = Field(None, description="Total affected items from API")
112 +
113 +
114 +class WazuhRuleFileUploadResponse(BaseModel):
115 + """Response model for Wazuh rule file upload/update."""
116 +
117 + success: bool = Field(..., description="Whether the request was successful")
118 + message: str = Field(..., description="Response message")
119 + filename: str = Field(..., description="The uploaded/updated filename")
120 + details: Optional[dict] = Field(None, description="Additional response details from API")
121 + total_items: Optional[int] = Field(None, description="Total affected items from API")
122 +
123 +
124 payload = {
125 "data_win_system_eventRecordID": "521098",
126 "data_win_eventdata_user": "WIN-HFOU106TD7K\\Administrator",
backend/app/connectors/wazuh_manager/services/rules.py
+282
@@ -1,6 +1,7 @@
1 from typing import Any
2 from typing import Dict
3 from typing import List
4 +from typing import Optional
5 from typing import Tuple
6 from typing import Union
7
@@ -17,11 +18,292 @@ from app.connectors.wazuh_manager.schema.rules import RuleEnable
18 from app.connectors.wazuh_manager.schema.rules import RuleEnableResponse
19 from app.connectors.wazuh_manager.schema.rules import RuleExcludeRequest
20 from app.connectors.wazuh_manager.schema.rules import RuleExcludeResponse
21 +from app.connectors.wazuh_manager.schema.rules import WazuhRuleFileContentResponse
22 +from app.connectors.wazuh_manager.schema.rules import WazuhRuleFilesResponse
23 +from app.connectors.wazuh_manager.schema.rules import WazuhRuleFileUploadResponse
24 +from app.connectors.wazuh_manager.schema.rules import WazuhRulesResponse
25 from app.connectors.wazuh_manager.utils.universal import restart_service
26 from app.connectors.wazuh_manager.utils.universal import send_get_request
27 from app.connectors.wazuh_manager.utils.universal import send_put_request
28
29
30 +async def get_wazuh_rules(**params) -> WazuhRulesResponse:
31 + """
32 + Fetch Wazuh rules from the Wazuh Manager API.
33 +
34 + Args:
35 + **params: All query parameters passed directly to the API
36 +
37 + Returns:
38 + WazuhRulesResponse: Structured response with rules data
39 + """
40 + # Filter out None values
41 + clean_params = {k: v for k, v in params.items() if v is not None}
42 +
43 + # Handle list parameters
44 + if "rule_ids" in clean_params and isinstance(clean_params["rule_ids"], list):
45 + clean_params["rule_ids"] = ",".join(map(str, clean_params["rule_ids"]))
46 + if "select" in clean_params and isinstance(clean_params["select"], list):
47 + clean_params["select"] = ",".join(clean_params["select"])
48 + if "filename" in clean_params and isinstance(clean_params["filename"], list):
49 + clean_params["filename"] = ",".join(clean_params["filename"])
50 +
51 + try:
52 + response = await send_get_request(endpoint="/rules", params=clean_params)
53 +
54 + if not response.get("success"):
55 + raise HTTPException(status_code=500, detail="Failed to fetch rules from Wazuh API")
56 +
57 + # Extract data from nested response structure
58 + wazuh_data = response.get("data", {}).get("data", {})
59 + rules = wazuh_data.get("affected_items", [])
60 + total_items = wazuh_data.get("total_affected_items", len(rules))
61 +
62 + logger.info(f"Retrieved {len(rules)} of {total_items} Wazuh rules")
63 +
64 + return WazuhRulesResponse(
65 + success=True,
66 + message=f"Successfully retrieved {len(rules)} rules",
67 + results=rules,
68 + total_items=total_items,
69 + )
70 +
71 + except Exception as e:
72 + logger.error(f"Error fetching Wazuh rules: {e}")
73 + raise HTTPException(status_code=500, detail=f"Error fetching rules: {str(e)}")
74 +
75 +
76 +async def get_wazuh_rule_files(**params) -> WazuhRuleFilesResponse:
77 + """
78 + Fetch Wazuh rule files from the Wazuh Manager API.
79 +
80 + Args:
81 + **params: All query parameters passed directly to the API
82 +
83 + Returns:
84 + WazuhRuleFilesResponse: Structured response with rule files data
85 +
86 + Raises:
87 + HTTPException: If there's an error fetching the rule files
88 + """
89 + # Filter out None values and prepare parameters
90 + clean_params = {k: v for k, v in params.items() if v is not None}
91 +
92 + # Handle list parameters that need to be joined as comma-separated strings
93 + if "filename" in clean_params and isinstance(clean_params["filename"], list):
94 + clean_params["filename"] = ",".join(clean_params["filename"])
95 + if "select" in clean_params and isinstance(clean_params["select"], list):
96 + clean_params["select"] = ",".join(clean_params["select"])
97 +
98 + logger.debug(f"Requesting Wazuh rule files with params: {clean_params}")
99 +
100 + try:
101 + response = await send_get_request(endpoint="/rules/files", params=clean_params)
102 +
103 + # Check if the API request was successful
104 + if not response.get("success"):
105 + error_detail = response.get("message", "Failed to fetch rule files from Wazuh API")
106 + logger.error(f"Wazuh API error: {error_detail}")
107 + raise HTTPException(status_code=500, detail=error_detail)
108 +
109 + # Extract data from nested response structure
110 + wazuh_data = response.get("data", {}).get("data", {})
111 + rule_files = wazuh_data.get("affected_items", [])
112 + total_items = wazuh_data.get("total_affected_items", len(rule_files))
113 +
114 + logger.info(f"Retrieved {len(rule_files)} of {total_items} Wazuh rule files")
115 +
116 + return WazuhRuleFilesResponse(
117 + success=True,
118 + message=f"Successfully retrieved {len(rule_files)} rule files",
119 + results=rule_files,
120 + total_items=total_items,
121 + )
122 +
123 + except HTTPException:
124 + # Re-raise HTTP exceptions as-is
125 + raise
126 + except Exception as e:
127 + logger.error(f"Error fetching Wazuh rule files: {e}")
128 + raise HTTPException(status_code=500, detail=f"Error fetching rule files: {str(e)}")
129 +
130 +
131 +async def get_wazuh_rule_file_content(filename: str, **params) -> WazuhRuleFileContentResponse:
132 + """
133 + Fetch the content of a specific Wazuh rule file from the Wazuh Manager API.
134 +
135 + Args:
136 + filename: The name of the rule file to fetch content for
137 + **params: All query parameters passed directly to the API
138 +
139 + Returns:
140 + WazuhRuleFileContentResponse: Structured response with rule file content
141 +
142 + Raises:
143 + HTTPException: If there's an error fetching the rule file content
144 + """
145 + # Filter out None values and prepare parameters
146 + clean_params = {k: v for k, v in params.items() if v is not None}
147 +
148 + # Check if raw content is requested
149 + is_raw = clean_params.get("raw", False)
150 +
151 + logger.debug(f"Requesting Wazuh rule file content for '{filename}' with params: {clean_params}")
152 +
153 + try:
154 + # Handle raw response differently
155 + if is_raw:
156 + # For raw requests, we need to use a modified approach
157 + # Use only the raw parameter to trigger the special handling in send_get_request
158 + raw_params = {"raw": True}
159 + response = await send_get_request(endpoint=f"/rules/files/{filename}", params=raw_params)
160 +
161 + # Check if the API request was successful
162 + if not response.get("success"):
163 + error_detail = response.get("message", f"Failed to fetch raw rule file content for {filename}")
164 + logger.error(f"Wazuh API error: {error_detail}")
165 +
166 + # Handle specific errors
167 + if "not found" in error_detail.lower():
168 + raise HTTPException(status_code=404, detail=f"Rule file '{filename}' not found")
169 + else:
170 + raise HTTPException(status_code=500, detail=error_detail)
171 +
172 + # For raw responses, the content is in response["data"]
173 + content = response.get("data", "")
174 + logger.info(f"Retrieved raw content for rule file '{filename}' ({len(content)} characters)")
175 +
176 + return WazuhRuleFileContentResponse(
177 + success=True,
178 + message=f"Successfully retrieved raw content for rule file '{filename}'",
179 + filename=filename,
180 + content=content,
181 + is_raw=True,
182 + total_items=None,
183 + )
184 +
185 + # Handle structured response (non-raw)
186 + response = await send_get_request(endpoint=f"/rules/files/{filename}", params=clean_params)
187 +
188 + # Check if the API request was successful
189 + if not response.get("success"):
190 + error_detail = response.get("message", f"Failed to fetch rule file content for {filename}")
191 + logger.error(f"Wazuh API error: {error_detail}")
192 +
193 + # Handle specific errors
194 + if "not found" in error_detail.lower():
195 + raise HTTPException(status_code=404, detail=f"Rule file '{filename}' not found")
196 + else:
197 + raise HTTPException(status_code=500, detail=error_detail)
198 +
199 + # Handle structured response
200 + wazuh_data = response.get("data", {}).get("data", {})
201 + affected_items = wazuh_data.get("affected_items", [])
202 + total_items = wazuh_data.get("total_affected_items", len(affected_items))
203 +
204 + if not affected_items:
205 + raise HTTPException(status_code=404, detail=f"No content found for rule file '{filename}'")
206 +
207 + # Extract the content from the first affected item
208 + content = affected_items[0] if affected_items else {}
209 +
210 + logger.info(f"Retrieved structured content for rule file '{filename}' with {total_items} affected items")
211 +
212 + return WazuhRuleFileContentResponse(
213 + success=True,
214 + message=f"Successfully retrieved content for rule file '{filename}'",
215 + filename=filename,
216 + content=content,
217 + is_raw=False,
218 + total_items=total_items,
219 + )
220 +
221 + except HTTPException:
222 + # Re-raise HTTP exceptions as-is
223 + raise
224 + except Exception as e:
225 + logger.error(f"Error fetching Wazuh rule file content for '{filename}': {e}")
226 + raise HTTPException(status_code=500, detail=f"Error fetching rule file content: {str(e)}")
227 +
228 +
229 +async def update_wazuh_rule_file(
230 + filename: str,
231 + file_content: bytes,
232 + pretty: Optional[bool] = False,
233 + wait_for_complete: Optional[bool] = False,
234 + overwrite: Optional[bool] = False,
235 + relative_dirname: Optional[str] = None,
236 +) -> WazuhRuleFileUploadResponse:
237 + """
238 + Upload or update a Wazuh rule file.
239 +
240 + Args:
241 + filename: Name of the rule file
242 + file_content: Binary content of the rule file
243 + pretty: Show results in human-readable format
244 + wait_for_complete: Disable timeout response
245 + overwrite: Whether to overwrite the file if it exists
246 + relative_dirname: Relative directory name
247 +
248 + Returns:
249 + WazuhRuleFileUploadResponse: Response indicating success/failure
250 +
251 + Raises:
252 + HTTPException: If there's an error uploading the file
253 + """
254 + # Prepare parameters
255 + params = {}
256 + if pretty is not None:
257 + params["pretty"] = str(pretty).lower()
258 + if wait_for_complete is not None:
259 + params["wait_for_complete"] = str(wait_for_complete).lower()
260 + if overwrite is not None:
261 + params["overwrite"] = str(overwrite).lower()
262 + if relative_dirname is not None:
263 + params["relative_dirname"] = relative_dirname
264 +
265 + logger.info(f"Uploading/updating rule file: {filename}")
266 + logger.debug(f"Request params: {params}")
267 +
268 + try:
269 + # Send PUT request with binary data
270 + response = await send_put_request(
271 + endpoint=f"/rules/files/{filename}",
272 + data=file_content,
273 + params=params,
274 + binary_data=True,
275 + debug=True,
276 + )
277 +
278 + # Check if the API request was successful
279 + if not response.get("success"):
280 + error_detail = response.get("message", "Failed to upload rule file to Wazuh API")
281 + status_code = response.get("status_code", 500)
282 + logger.error(f"Wazuh API error: {error_detail}")
283 + raise HTTPException(status_code=status_code, detail=error_detail)
284 +
285 + # Extract data from response
286 + wazuh_data = response.get("data", {}).get("data", {})
287 + total_items = wazuh_data.get("total_affected_items", 1)
288 +
289 + logger.info(f"Successfully uploaded/updated rule file: {filename}")
290 +
291 + return WazuhRuleFileUploadResponse(
292 + success=True,
293 + message=f"Successfully uploaded/updated rule file: {filename}",
294 + filename=filename,
295 + details=wazuh_data,
296 + total_items=total_items,
297 + )
298 +
299 + except HTTPException:
300 + # Re-raise HTTP exceptions as-is
301 + raise
302 + except Exception as e:
303 + logger.error(f"Error uploading rule file {filename}: {e}")
304 + raise HTTPException(status_code=500, detail=f"Error uploading rule file: {str(e)}")
305 +
306 +
307 async def fetch_filename(rule_id: str) -> str:
308 """
309 Fetches the filename associated with a given rule ID from the Wazuh Manager.
backend/app/connectors/wazuh_manager/utils/universal.py
+59
@@ -469,3 +469,62 @@ async def restart_service(connector_name: str = "Wazuh-Manager") -> Dict[str, An
469 "success": False,
470 "message": f"Failed to restart Wazuh Manager service with error: {e}",
471 }
472 +
473 +
474 +async def get_cluster_status(connector_name: str = "Wazuh-Manager") -> Dict[str, Any]:
475 + """
476 + Retrieves the cluster status of the Wazuh Manager service.
477 +
478 + Args:
479 + connector_name (str, optional): The name of the connector to use. Defaults to "Wazuh-Manager".
480 +
481 + Returns:
482 + Dict[str, Any]: The response from the GET request.
483 + """
484 + logger.info("Getting Wazuh Manager cluster status")
485 + return await send_get_request(
486 + endpoint="/cluster/status",
487 + connector_name=connector_name,
488 + )
489 +
490 +
491 +async def restart_wazuh_manager_service() -> Dict[str, Any]:
492 + """
493 + Restarts the Wazuh Manager service.
494 +
495 + Returns:
496 + Dict[str, Any]: The response from the restart request.
497 + """
498 + logger.info("Restarting Wazuh Manager service")
499 + status_response = await get_cluster_status()
500 +
501 + # Check if the request was successful first
502 + if not status_response.get("success"):
503 + logger.error("Failed to get cluster status")
504 + return {
505 + "success": False,
506 + "message": "Failed to get cluster status before restart",
507 + }
508 +
509 + # Access the nested data structure correctly
510 + cluster_enabled = status_response.get("data", {}).get("data", {}).get("enabled", "unknown")
511 +
512 + if cluster_enabled == "no":
513 + logger.info("Wazuh Manager cluster is not enabled, restarting service")
514 + return await restart_service()
515 + elif cluster_enabled == "yes":
516 + logger.info("Wazuh Manager cluster is enabled, restarting cluster")
517 + response = await send_put_request(
518 + endpoint="/cluster/restart",
519 + data={},
520 + )
521 + if response.get("success"):
522 + return {
523 + "success": True,
524 + "message": "Wazuh Manager cluster restarted successfully",
525 + }
526 + else:
527 + return response
528 + else:
529 + logger.warning(f"Unknown cluster status: {cluster_enabled}, defaulting to service restart")
530 + return await restart_service()
backend/app/routers/wazuh_manager.py
+9
@@ -1,5 +1,8 @@
1 from fastapi import APIRouter
2
3 +from app.connectors.wazuh_manager.routes.management import (
4 + wazuh_manager_management_router,
5 +)
6 from app.connectors.wazuh_manager.routes.mitre import wazuh_manager_mitre_router
7 from app.connectors.wazuh_manager.routes.rules import wazuh_manager_rules_router
8
@@ -18,3 +21,9 @@ router.include_router(
21 prefix="/wazuh_manager/mitre",
22 tags=["wazuh-manager"],
23 )
24 +
25 +router.include_router(
26 + wazuh_manager_management_router,
27 + prefix="/wazuh_manager/management",
28 + tags=["wazuh-manager"],
29 +)
backend/sysmon_config-provtest.xml
frontend/package.json
+25 -15
@@ -3,7 +3,7 @@
3 "type": "module",
4 "version": "1.0.0",
5 "private": true,
6 - "packageManager": "pnpm@10.12.4+sha512.5ea8b0deed94ed68691c9bad4c955492705c5eeb8a87ef86bc62c74a26b037b08ff9570f108b2e4dbd1dd1a9186fea925e527f141c648e85af45631074680184",
6 + "packageManager": "pnpm@10.13.1",
7 "engines": {
8 "node": ">=18.0.0"
9 },
@@ -40,7 +40,9 @@
40 "@codemirror/commands": "^6.8.1",
41 "@codemirror/lang-javascript": "^6.2.4",
42 "@codemirror/lang-xml": "^6.1.0",
43 + "@codemirror/lint": "^6.8.5",
44 "@codemirror/theme-one-dark": "^6.1.3",
45 + "@codemirror/view": "^6.38.0",
46 "@f3ve/vue-markdown-it": "^0.2.3",
47 "@fontsource/jetbrains-mono": "^5.2.6",
48 "@fontsource/lexend": "^5.2.9",
@@ -48,7 +50,7 @@
50 "@shikijs/markdown-it": "^3.7.0",
51 "@singulio/app-auth-search": "^0.0.3",
52 "@types/codemirror": "^5.60.16",
51 - "@vueuse/core": "^13.4.0",
53 + "@vueuse/core": "^13.5.0",
54 "@vueuse/motion": "^3.0.3",
55 "axios": "^1.10.0",
56 "bytes": "^3.1.2",
@@ -57,6 +59,7 @@
59 "dayjs": "^1.11.13",
60 "detect-touch-device": "^1.1.6",
61 "echarts": "^5.6.0",
62 + "fast-xml-parser": "^5.2.5",
63 "file-saver": "^2.0.5",
64 "html-entities": "^2.6.0",
65 "jose": "^6.0.11",
@@ -76,20 +79,22 @@
79 "vue-advanced-cropper": "^2.8.9",
80 "vue-codemirror": "^6.1.1",
81 "vue-highlight-words": "^3.0.1",
79 - "vue-i18n": "^11.1.7",
82 + "vue-i18n": "^11.1.9",
83 "vue-router": "^4.5.1",
84 "vue-sjv": "^0.0.6",
85 "vue3-apexcharts": "^1.8.0",
86 "vue3-marquee": "^4.2.2",
84 - "vuedraggable": "^4.1.0"
87 + "vuedraggable": "^4.1.0",
88 + "xmllint": "^0.1.1",
89 + "xmllint-wasm": "^5.0.0"
90 },
91 "optionalDependencies": {
87 - "@rollup/rollup-linux-x64-gnu": "^4.44.1",
92 + "@rollup/rollup-linux-x64-gnu": "^4.44.2",
93 "treemate": "^0.3.11",
94 "vueuc": "^0.4.64"
95 },
96 "devDependencies": {
92 - "@antfu/eslint-config": "^4.16.1",
97 + "@antfu/eslint-config": "^4.16.2",
98 "@clack/prompts": "^0.11.0",
99 "@iconify/vue": "^5.0.0",
100 "@tailwindcss/vite": "^4.1.11",
@@ -98,37 +103,42 @@
103 "@types/file-saver": "^2.0.7",
104 "@types/fs-extra": "^11.0.4",
105 "@types/jsdom": "^21.1.7",
101 - "@types/lodash": "^4.17.19",
106 + "@types/lodash": "^4.17.20",
107 "@types/markdown-it": "^14.1.2",
103 - "@types/node": "^24.0.8",
108 + "@types/node": "^24.0.13",
109 "@types/validator": "^13.15.2",
105 - "@vitejs/plugin-vue": "^5.2.4",
106 - "@vitejs/plugin-vue-jsx": "^4.2.0",
110 + "@vitejs/plugin-vue": "^6.0.0",
111 + "@vitejs/plugin-vue-jsx": "^5.0.1",
112 "@vue/test-utils": "^2.4.6",
113 "@vue/tsconfig": "^0.7.0",
109 - "cypress": "^14.5.0",
114 + "cypress": "^14.5.1",
115 "depcheck": "^1.4.7",
111 - "eslint": "^9.30.0",
116 + "eslint": "^9.30.1",
117 "flourite": "^1.3.0",
118 "fs-extra": "^11.3.0",
119 "jsdom": "^26.1.0",
120 "npm-run-all2": "^8.0.4",
121 "prettier": "^3.6.2",
117 - "prettier-plugin-tailwindcss": "^0.6.13",
122 + "prettier-plugin-tailwindcss": "^0.6.14",
123 "sass": "^1.89.2",
124 "start-server-and-test": "^2.0.12",
125 "tailwindcss": "^4.1.11",
126 "taze": "^19.1.0",
127 "type-fest": "^4.41.0",
128 "typescript": "~5.8.3",
124 - "vite": "^6.3.5",
129 + "vite": "^7.0.4",
130 "vite-bundle-visualizer": "^1.2.1",
131 + "vite-plugin-inspect": "^11.3.0",
132 "vite-plugin-vue-devtools": "^7.7.7",
133 "vite-svg-loader": "^5.1.0",
134 "vitest": "^3.2.4",
129 - "vue-tsc": "^2.2.10"
135 + "vue-tsc": "^3.0.1"
136 },
137 "pnpm": {
138 + "overrides": {
139 + "vite-plugin-checker>vite-plugin-inspect": "$vite-plugin-inspect",
140 + "vite-plugin-inspect>vite": "$vite"
141 + },
142 "onlyBuiltDependencies": [
143 "@parcel/watcher",
144 "@tailwindcss/oxide",
frontend/pnpm-lock.yaml
+980 -850
@@ -4,6 +4,10 @@ settings:
4 autoInstallPeers: true
5 excludeLinksFromLockfile: false
6
7 +overrides:
8 + vite-plugin-checker>vite-plugin-inspect: ^11.3.0
9 + vite-plugin-inspect>vite: ^7.0.4
10 +
11 importers:
12
13 .:
@@ -20,9 +24,15 @@ importers:
24 '@codemirror/lang-xml':
25 specifier: ^6.1.0
26 version: 6.1.0
27 + '@codemirror/lint':
28 + specifier: ^6.8.5
29 + version: 6.8.5
30 '@codemirror/theme-one-dark':
31 specifier: ^6.1.3
32 version: 6.1.3
33 + '@codemirror/view':
34 + specifier: ^6.38.0
35 + version: 6.38.0
36 '@f3ve/vue-markdown-it':
37 specifier: ^0.2.3
38 version: 0.2.3(vue@3.5.17(typescript@5.8.3))
@@ -45,8 +55,8 @@ importers:
55 specifier: ^5.60.16
56 version: 5.60.16
57 '@vueuse/core':
48 - specifier: ^13.4.0
49 - version: 13.4.0(vue@3.5.17(typescript@5.8.3))
58 + specifier: ^13.5.0
59 + version: 13.5.0(vue@3.5.17(typescript@5.8.3))
60 '@vueuse/motion':
61 specifier: ^3.0.3
62 version: 3.0.3(vue@3.5.17(typescript@5.8.3))
@@ -71,6 +81,9 @@ importers:
81 echarts:
82 specifier: ^5.6.0
83 version: 5.6.0
84 + fast-xml-parser:
85 + specifier: ^5.2.5
86 + version: 5.2.5
87 file-saver:
88 specifier: ^2.0.5
89 version: 2.0.5
@@ -103,7 +116,7 @@ importers:
116 version: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
117 pinia-plugin-persistedstate:
118 specifier: ^4.4.1
106 - version: 4.4.1(@nuxt/kit@3.17.5)(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)))
119 + version: 4.4.1(@nuxt/kit@3.17.6)(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)))
120 secure-ls:
121 specifier: ^2.0.0
122 version: 2.0.0
@@ -129,8 +142,8 @@ importers:
142 specifier: ^3.0.1
143 version: 3.0.1(vue@3.5.17(typescript@5.8.3))
144 vue-i18n:
132 - specifier: ^11.1.7
133 - version: 11.1.7(vue@3.5.17(typescript@5.8.3))
145 + specifier: ^11.1.9
146 + version: 11.1.9(vue@3.5.17(typescript@5.8.3))
147 vue-router:
148 specifier: ^4.5.1
149 version: 4.5.1(vue@3.5.17(typescript@5.8.3))
@@ -139,17 +152,23 @@ importers:
152 version: 0.0.6(vue@3.5.17(typescript@5.8.3))
153 vue3-apexcharts:
154 specifier: ^1.8.0
142 - version: 1.8.0(apexcharts@4.7.0)(vue@3.5.17(typescript@5.8.3))
155 + version: 1.8.0(apexcharts@5.2.0)(vue@3.5.17(typescript@5.8.3))
156 vue3-marquee:
157 specifier: ^4.2.2
158 version: 4.2.2(vue@3.5.17(typescript@5.8.3))
159 vuedraggable:
160 specifier: ^4.1.0
161 version: 4.1.0(vue@3.5.17(typescript@5.8.3))
162 + xmllint:
163 + specifier: ^0.1.1
164 + version: 0.1.1
165 + xmllint-wasm:
166 + specifier: ^5.0.0
167 + version: 5.0.0(@types/node@24.0.13)
168 devDependencies:
169 '@antfu/eslint-config':
151 - specifier: ^4.16.1
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.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
170 + specifier: ^4.16.2
171 + version: 4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
172 '@clack/prompts':
173 specifier: ^0.11.0
174 version: 0.11.0
@@ -158,7 +177,7 @@ importers:
177 version: 5.0.0(vue@3.5.17(typescript@5.8.3))
178 '@tailwindcss/vite':
179 specifier: ^4.1.11
161 - version: 4.1.11(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
180 + version: 4.1.11(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
181 '@tsconfig/node20':
182 specifier: ^20.1.6
183 version: 20.1.6
@@ -175,23 +194,23 @@ importers:
194 specifier: ^21.1.7
195 version: 21.1.7
196 '@types/lodash':
178 - specifier: ^4.17.19
179 - version: 4.17.19
197 + specifier: ^4.17.20
198 + version: 4.17.20
199 '@types/markdown-it':
200 specifier: ^14.1.2
201 version: 14.1.2
202 '@types/node':
184 - specifier: ^24.0.8
185 - version: 24.0.8
203 + specifier: ^24.0.13
204 + version: 24.0.13
205 '@types/validator':
206 specifier: ^13.15.2
207 version: 13.15.2
208 '@vitejs/plugin-vue':
190 - specifier: ^5.2.4
191 - version: 5.2.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
209 + specifier: ^6.0.0
210 + version: 6.0.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
211 '@vitejs/plugin-vue-jsx':
193 - specifier: ^4.2.0
194 - version: 4.2.0(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
212 + specifier: ^5.0.1
213 + version: 5.0.1(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
214 '@vue/test-utils':
215 specifier: ^2.4.6
216 version: 2.4.6
@@ -199,14 +218,14 @@ importers:
218 specifier: ^0.7.0
219 version: 0.7.0(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
220 cypress:
202 - specifier: ^14.5.0
203 - version: 14.5.0
221 + specifier: ^14.5.1
222 + version: 14.5.1
223 depcheck:
224 specifier: ^1.4.7
225 version: 1.4.7
226 eslint:
208 - specifier: ^9.30.0
209 - version: 9.30.0(jiti@2.4.2)
227 + specifier: ^9.30.1
228 + version: 9.30.1(jiti@2.4.2)
229 flourite:
230 specifier: ^1.3.0
231 version: 1.3.0
@@ -223,8 +242,8 @@ importers:
242 specifier: ^3.6.2
243 version: 3.6.2
244 prettier-plugin-tailwindcss:
226 - specifier: ^0.6.13
227 - version: 0.6.13(prettier@3.6.2)
245 + specifier: ^0.6.14
246 + version: 0.6.14(prettier@3.6.2)
247 sass:
248 specifier: ^1.89.2
249 version: 1.89.2
@@ -244,27 +263,30 @@ importers:
263 specifier: ~5.8.3
264 version: 5.8.3
265 vite:
247 - specifier: ^6.3.5
248 - version: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
266 + specifier: ^7.0.4
267 + version: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
268 vite-bundle-visualizer:
269 specifier: ^1.2.1
251 - version: 1.2.1(rollup@4.44.1)
270 + version: 1.2.1(rollup@4.44.2)
271 + vite-plugin-inspect:
272 + specifier: ^11.3.0
273 + version: 11.3.0(@nuxt/kit@3.17.6)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
274 vite-plugin-vue-devtools:
275 specifier: ^7.7.7
254 - version: 7.7.7(@nuxt/kit@3.17.5)(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
276 + version: 7.7.7(@nuxt/kit@3.17.6)(rollup@4.44.2)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
277 vite-svg-loader:
278 specifier: ^5.1.0
279 version: 5.1.0(vue@3.5.17(typescript@5.8.3))
280 vitest:
281 specifier: ^3.2.4
260 - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
282 + version: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
283 vue-tsc:
262 - specifier: ^2.2.10
263 - version: 2.2.10(typescript@5.8.3)
284 + specifier: ^3.0.1
285 + version: 3.0.1(typescript@5.8.3)
286 optionalDependencies:
287 '@rollup/rollup-linux-x64-gnu':
266 - specifier: ^4.44.1
267 - version: 4.44.1
288 + specifier: ^4.44.2
289 + version: 4.44.2
290 treemate:
291 specifier: ^0.3.11
292 version: 0.3.11
@@ -277,64 +299,64 @@ packages:
299 '@ajoelp/json-to-formdata@1.5.0':
300 resolution: {integrity: sha512-nrlfeTSL0X0dtx5r2KpzPiqLSIQquiiJjUKsQAKzWaCmO2QoYZCyb5ENZwF3YoffKronOCJr25mxaD8JRJmK8w==}
301
280 - '@algolia/client-abtesting@5.29.0':
281 - resolution: {integrity: sha512-AM/6LYMSTnZvAT5IarLEKjYWOdV+Fb+LVs8JRq88jn8HH6bpVUtjWdOZXqX1hJRXuCAY8SdQfb7F8uEiMNXdYQ==}
302 + '@algolia/client-abtesting@5.32.0':
303 + resolution: {integrity: sha512-HG/6Eib6DnJYm/B2ijWFXr4txca/YOuA4K7AsEU0JBrOZSB+RU7oeDyNBPi3c0v0UDDqlkBqM3vBU/auwZlglA==}
304 engines: {node: '>= 14.0.0'}
305
284 - '@algolia/client-analytics@5.29.0':
285 - resolution: {integrity: sha512-La34HJh90l0waw3wl5zETO8TuukeUyjcXhmjYZL3CAPLggmKv74mobiGRIb+mmBENybiFDXf/BeKFLhuDYWMMQ==}
306 + '@algolia/client-analytics@5.32.0':
307 + resolution: {integrity: sha512-8Y9MLU72WFQOW3HArYv16+Wvm6eGmsqbxxM1qxtm0hvSASJbxCm+zQAZe5stqysTlcWo4BJ82KEH1PfgHbJAmQ==}
308 engines: {node: '>= 14.0.0'}
309
288 - '@algolia/client-common@5.29.0':
289 - resolution: {integrity: sha512-T0lzJH/JiCxQYtCcnWy7Jf1w/qjGDXTi2npyF9B9UsTvXB97GRC6icyfXxe21mhYvhQcaB1EQ/J2575FXxi2rA==}
310 + '@algolia/client-common@5.32.0':
311 + resolution: {integrity: sha512-w8L+rgyXMCPBKmEdOT+RfgMrF0mT6HK60vPYWLz8DBs/P7yFdGo7urn99XCJvVLMSKXrIbZ2FMZ/i50nZTXnuQ==}
312 engines: {node: '>= 14.0.0'}
313
292 - '@algolia/client-insights@5.29.0':
293 - resolution: {integrity: sha512-A39F1zmHY9aev0z4Rt3fTLcGN5AG1VsVUkVWy6yQG5BRDScktH+U5m3zXwThwniBTDV1HrPgiGHZeWb67GkR2Q==}
314 + '@algolia/client-insights@5.32.0':
315 + resolution: {integrity: sha512-AdWfynhUeX7jz/LTiFU3wwzJembTbdLkQIOLs4n7PyBuxZ3jz4azV1CWbIP8AjUOFmul6uXbmYza+KqyS5CzOA==}
316 engines: {node: '>= 14.0.0'}
317
296 - '@algolia/client-personalization@5.29.0':
297 - resolution: {integrity: sha512-ibxmh2wKKrzu5du02gp8CLpRMeo+b/75e4ORct98CT7mIxuYFXowULwCd6cMMkz/R0LpKXIbTUl15UL5soaiUQ==}
318 + '@algolia/client-personalization@5.32.0':
319 + resolution: {integrity: sha512-bTupJY4xzGZYI4cEQcPlSjjIEzMvv80h7zXGrXY1Y0KC/n/SLiMv84v7Uy+B6AG1Kiy9FQm2ADChBLo1uEhGtQ==}
320 engines: {node: '>= 14.0.0'}
321
300 - '@algolia/client-query-suggestions@5.29.0':
301 - resolution: {integrity: sha512-VZq4/AukOoJC2WSwF6J5sBtt+kImOoBwQc1nH3tgI+cxJBg7B77UsNC+jT6eP2dQCwGKBBRTmtPLUTDDnHpMgA==}
322 + '@algolia/client-query-suggestions@5.32.0':
323 + resolution: {integrity: sha512-if+YTJw1G3nDKL2omSBjQltCHUQzbaHADkcPQrGFnIGhVyHU3Dzq4g46uEv8mrL5sxL8FjiS9LvekeUlL2NRqw==}
324 engines: {node: '>= 14.0.0'}
325
304 - '@algolia/client-search@5.29.0':
305 - resolution: {integrity: sha512-cZ0Iq3OzFUPpgszzDr1G1aJV5UMIZ4VygJ2Az252q4Rdf5cQMhYEIKArWY/oUjMhQmosM8ygOovNq7gvA9CdCg==}
326 + '@algolia/client-search@5.32.0':
327 + resolution: {integrity: sha512-kmK5nVkKb4DSUgwbveMKe4X3xHdMsPsOVJeEzBvFJ+oS7CkBPmpfHAEq+CcmiPJs20YMv6yVtUT9yPWL5WgAhg==}
328 engines: {node: '>= 14.0.0'}
329
308 - '@algolia/ingestion@1.29.0':
309 - resolution: {integrity: sha512-scBXn0wO5tZCxmO6evfa7A3bGryfyOI3aoXqSQBj5SRvNYXaUlFWQ/iKI70gRe/82ICwE0ICXbHT/wIvxOW7vw==}
330 + '@algolia/ingestion@1.32.0':
331 + resolution: {integrity: sha512-PZTqjJbx+fmPuT2ud1n4vYDSF1yrT//vOGI9HNYKNA0PM0xGUBWigf5gRivHsXa3oBnUlTyHV9j7Kqx5BHbVHQ==}
332 engines: {node: '>= 14.0.0'}
333
312 - '@algolia/monitoring@1.29.0':
313 - resolution: {integrity: sha512-FGWWG9jLFhsKB7YiDjM2dwQOYnWu//7Oxrb2vT96N7+s+hg1mdHHfHNRyEudWdxd4jkMhBjeqNA21VbTiOIPVg==}
334 + '@algolia/monitoring@1.32.0':
335 + resolution: {integrity: sha512-kYYoOGjvNQAmHDS1v5sBj+0uEL9RzYqH/TAdq8wmcV+/22weKt/fjh+6LfiqkS1SCZFYYrwGnirrUhUM36lBIQ==}
336 engines: {node: '>= 14.0.0'}
337
316 - '@algolia/recommend@5.29.0':
317 - resolution: {integrity: sha512-xte5+mpdfEARAu61KXa4ewpjchoZuJlAlvQb8ptK6hgHlBHDnYooy1bmOFpokaAICrq/H9HpoqNUX71n+3249A==}
338 + '@algolia/recommend@5.32.0':
339 + resolution: {integrity: sha512-jyIBLdskjPAL7T1g57UMfUNx+PzvYbxKslwRUKBrBA6sNEsYCFdxJAtZSLUMmw6MC98RDt4ksmEl5zVMT5bsuw==}
340 engines: {node: '>= 14.0.0'}
341
320 - '@algolia/requester-browser-xhr@5.29.0':
321 - resolution: {integrity: sha512-og+7Em75aPHhahEUScq2HQ3J7ULN63Levtd87BYMpn6Im5d5cNhaC4QAUsXu6LWqxRPgh4G+i+wIb6tVhDhg2A==}
342 + '@algolia/requester-browser-xhr@5.32.0':
343 + resolution: {integrity: sha512-eDp14z92Gt6JlFgiexImcWWH+Lk07s/FtxcoDaGrE4UVBgpwqOO6AfQM6dXh1pvHxlDFbMJihHc/vj3gBhPjqQ==}
344 engines: {node: '>= 14.0.0'}
345
324 - '@algolia/requester-fetch@5.29.0':
325 - resolution: {integrity: sha512-JCxapz7neAy8hT/nQpCvOrI5JO8VyQ1kPvBiaXWNC1prVq0UMYHEL52o1BsPvtXfdQ7BVq19OIq6TjOI06mV/w==}
346 + '@algolia/requester-fetch@5.32.0':
347 + resolution: {integrity: sha512-rnWVglh/K75hnaLbwSc2t7gCkbq1ldbPgeIKDUiEJxZ4mlguFgcltWjzpDQ/t1LQgxk9HdIFcQfM17Hid3aQ6Q==}
348 engines: {node: '>= 14.0.0'}
349
328 - '@algolia/requester-node-http@5.29.0':
329 - resolution: {integrity: sha512-lVBD81RBW5VTdEYgnzCz7Pf9j2H44aymCP+/eHGJu4vhU+1O8aKf3TVBgbQr5UM6xoe8IkR/B112XY6YIG2vtg==}
350 + '@algolia/requester-node-http@5.32.0':
351 + resolution: {integrity: sha512-LbzQ04+VLkzXY4LuOzgyjqEv/46Gwrk55PldaglMJ4i4eDXSRXGKkwJpXFwsoU+c1HMQlHIyjJBhrfsfdyRmyQ==}
352 engines: {node: '>= 14.0.0'}
353
354 '@ampproject/remapping@2.3.0':
355 resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
356 engines: {node: '>=6.0.0'}
357
336 - '@antfu/eslint-config@4.16.1':
337 - resolution: {integrity: sha512-20hA+bjnEmYnZChnQFM9ugPF+FR5N2yd6UNUjhZSmTeYpaKnkJ1EvZyEWxnmVGKC5O5HNDEJY3BXUQymdOoftQ==}
358 + '@antfu/eslint-config@4.16.2':
359 + resolution: {integrity: sha512-5KHZR+7ne+HZnOJUKeTTdHKYA/yOygPssaJ7TZOMoBqjSMtVAa7FO5Wvu2dEtkibM6v3emYyKnQnia1S8NHQeA==}
360 hasBin: true
361 peerDependencies:
362 '@eslint-react/eslint-plugin': ^1.38.4
@@ -399,16 +421,16 @@ packages:
421 resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
422 engines: {node: '>=6.9.0'}
423
402 - '@babel/compat-data@7.27.7':
403 - resolution: {integrity: sha512-xgu/ySj2mTiUFmdE9yCMfBxLp4DHd5DwmbbD05YAuICfodYT3VvRxbrh81LGQ/8UpSdtMdfKMn3KouYDX59DGQ==}
424 + '@babel/compat-data@7.28.0':
425 + resolution: {integrity: sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==}
426 engines: {node: '>=6.9.0'}
427
406 - '@babel/core@7.27.7':
407 - resolution: {integrity: sha512-BU2f9tlKQ5CAthiMIgpzAh4eDTLWo1mqi9jqE2OxMG0E/OM199VJt2q8BztTxpnSW0i1ymdwLXRJnYzvDM5r2w==}
428 + '@babel/core@7.28.0':
429 + resolution: {integrity: sha512-UlLAnTPrFdNGoFtbSXwcGFQBtQZJCNjaN6hQNP3UPvuNXT1i82N26KL3dZeIpNalWywr9IuQuncaAfUaS1g6sQ==}
430 engines: {node: '>=6.9.0'}
431
410 - '@babel/generator@7.27.5':
411 - resolution: {integrity: sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==}
432 + '@babel/generator@7.28.0':
433 + resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==}
434 engines: {node: '>=6.9.0'}
435
436 '@babel/helper-annotate-as-pure@7.27.3':
@@ -425,6 +447,10 @@ packages:
447 peerDependencies:
448 '@babel/core': ^7.0.0
449
450 + '@babel/helper-globals@7.28.0':
451 + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
452 + engines: {node: '>=6.9.0'}
453 +
454 '@babel/helper-member-expression-to-functions@7.27.1':
455 resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==}
456 engines: {node: '>=6.9.0'}
@@ -473,13 +499,13 @@ packages:
499 resolution: {integrity: sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==}
500 engines: {node: '>=6.9.0'}
501
476 - '@babel/parser@7.27.7':
477 - resolution: {integrity: sha512-qnzXzDXdr/po3bOTbTIQZ7+TxNKxpkN5IifVLXS+r7qwynkZfPyjZfE7hCXbo7IoO9TNcSyibgONsf2HauUd3Q==}
502 + '@babel/parser@7.28.0':
503 + resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
504 engines: {node: '>=6.0.0'}
505 hasBin: true
506
481 - '@babel/plugin-proposal-decorators@7.27.1':
482 - resolution: {integrity: sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg==}
507 + '@babel/plugin-proposal-decorators@7.28.0':
508 + resolution: {integrity: sha512-zOiZqvANjWDUaUS9xMxbMcK/Zccztbe/6ikvUXaG9nsPH3w6qh5UaPGAnirI/WhIbZ8m3OHU0ReyPrknG+ZKeg==}
509 engines: {node: '>=6.9.0'}
510 peerDependencies:
511 '@babel/core': ^7.0.0-0
@@ -513,8 +539,8 @@ packages:
539 peerDependencies:
540 '@babel/core': ^7.0.0-0
541
516 - '@babel/plugin-transform-typescript@7.27.1':
517 - resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==}
542 + '@babel/plugin-transform-typescript@7.28.0':
543 + resolution: {integrity: sha512-4AEiDEBPIZvLQaWlc9liCavE0xRM0dNca41WtBeM3jgFptfUOSG9z0uteLhq6+3rq+WB6jIvUwKDTpXEHPJ2Vg==}
544 engines: {node: '>=6.9.0'}
545 peerDependencies:
546 '@babel/core': ^7.0.0-0
@@ -523,12 +549,12 @@ packages:
549 resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
550 engines: {node: '>=6.9.0'}
551
526 - '@babel/traverse@7.27.7':
527 - resolution: {integrity: sha512-X6ZlfR/O/s5EQ/SnUSLzr+6kGnkg8HXGMzpgsMsrJVcfDtH1vIp6ctCN4eZ1LS5c0+te5Cb6Y514fASjMRJ1nw==}
552 + '@babel/traverse@7.28.0':
553 + resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==}
554 engines: {node: '>=6.9.0'}
555
530 - '@babel/types@7.27.7':
531 - resolution: {integrity: sha512-8OLQgDScAOHXnAz2cV+RfzzNMipuLVBz2biuAJFMV9bfkNf393je3VM8CLkjQodW5+iWsSJdSgSWT6rsZoXHPw==}
556 + '@babel/types@7.28.0':
557 + resolution: {integrity: sha512-jYnje+JyZG5YThjHiF28oT4SIZLnYOcSBb6+SDaFIyzDVSkXQmQQYclJ2R+YxcdmK0AX6x1E5OQNtuh3jHDrUg==}
558 engines: {node: '>=6.9.0'}
559
560 '@clack/core@0.5.0':
@@ -623,152 +649,158 @@ packages:
649 resolution: {integrity: sha512-BXuN7BII+8AyNtn57euU2Yxo9yA/KUDNzrpXyi3pfqKmBhhysR6ZWOebFh3vyPoqA3/j1SOvGgucElMGwlXing==}
650 engines: {node: '>=20.11.0'}
651
626 - '@esbuild/aix-ppc64@0.25.5':
627 - resolution: {integrity: sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==}
652 + '@esbuild/aix-ppc64@0.25.6':
653 + resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==}
654 engines: {node: '>=18'}
655 cpu: [ppc64]
656 os: [aix]
657
632 - '@esbuild/android-arm64@0.25.5':
633 - resolution: {integrity: sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==}
658 + '@esbuild/android-arm64@0.25.6':
659 + resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==}
660 engines: {node: '>=18'}
661 cpu: [arm64]
662 os: [android]
663
638 - '@esbuild/android-arm@0.25.5':
639 - resolution: {integrity: sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==}
664 + '@esbuild/android-arm@0.25.6':
665 + resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==}
666 engines: {node: '>=18'}
667 cpu: [arm]
668 os: [android]
669
644 - '@esbuild/android-x64@0.25.5':
645 - resolution: {integrity: sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==}
670 + '@esbuild/android-x64@0.25.6':
671 + resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==}
672 engines: {node: '>=18'}
673 cpu: [x64]
674 os: [android]
675
650 - '@esbuild/darwin-arm64@0.25.5':
651 - resolution: {integrity: sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==}
676 + '@esbuild/darwin-arm64@0.25.6':
677 + resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==}
678 engines: {node: '>=18'}
679 cpu: [arm64]
680 os: [darwin]
681
656 - '@esbuild/darwin-x64@0.25.5':
657 - resolution: {integrity: sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==}
682 + '@esbuild/darwin-x64@0.25.6':
683 + resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==}
684 engines: {node: '>=18'}
685 cpu: [x64]
686 os: [darwin]
687
662 - '@esbuild/freebsd-arm64@0.25.5':
663 - resolution: {integrity: sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==}
688 + '@esbuild/freebsd-arm64@0.25.6':
689 + resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==}
690 engines: {node: '>=18'}
691 cpu: [arm64]
692 os: [freebsd]
693
668 - '@esbuild/freebsd-x64@0.25.5':
669 - resolution: {integrity: sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==}
694 + '@esbuild/freebsd-x64@0.25.6':
695 + resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==}
696 engines: {node: '>=18'}
697 cpu: [x64]
698 os: [freebsd]
699
674 - '@esbuild/linux-arm64@0.25.5':
675 - resolution: {integrity: sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==}
700 + '@esbuild/linux-arm64@0.25.6':
701 + resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==}
702 engines: {node: '>=18'}
703 cpu: [arm64]
704 os: [linux]
705
680 - '@esbuild/linux-arm@0.25.5':
681 - resolution: {integrity: sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==}
706 + '@esbuild/linux-arm@0.25.6':
707 + resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==}
708 engines: {node: '>=18'}
709 cpu: [arm]
710 os: [linux]
711
686 - '@esbuild/linux-ia32@0.25.5':
687 - resolution: {integrity: sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==}
712 + '@esbuild/linux-ia32@0.25.6':
713 + resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==}
714 engines: {node: '>=18'}
715 cpu: [ia32]
716 os: [linux]
717
692 - '@esbuild/linux-loong64@0.25.5':
693 - resolution: {integrity: sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==}
718 + '@esbuild/linux-loong64@0.25.6':
719 + resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==}
720 engines: {node: '>=18'}
721 cpu: [loong64]
722 os: [linux]
723
698 - '@esbuild/linux-mips64el@0.25.5':
699 - resolution: {integrity: sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==}
724 + '@esbuild/linux-mips64el@0.25.6':
725 + resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==}
726 engines: {node: '>=18'}
727 cpu: [mips64el]
728 os: [linux]
729
704 - '@esbuild/linux-ppc64@0.25.5':
705 - resolution: {integrity: sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==}
730 + '@esbuild/linux-ppc64@0.25.6':
731 + resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==}
732 engines: {node: '>=18'}
733 cpu: [ppc64]
734 os: [linux]
735
710 - '@esbuild/linux-riscv64@0.25.5':
711 - resolution: {integrity: sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==}
736 + '@esbuild/linux-riscv64@0.25.6':
737 + resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==}
738 engines: {node: '>=18'}
739 cpu: [riscv64]
740 os: [linux]
741
716 - '@esbuild/linux-s390x@0.25.5':
717 - resolution: {integrity: sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==}
742 + '@esbuild/linux-s390x@0.25.6':
743 + resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==}
744 engines: {node: '>=18'}
745 cpu: [s390x]
746 os: [linux]
747
722 - '@esbuild/linux-x64@0.25.5':
723 - resolution: {integrity: sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==}
748 + '@esbuild/linux-x64@0.25.6':
749 + resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==}
750 engines: {node: '>=18'}
751 cpu: [x64]
752 os: [linux]
753
728 - '@esbuild/netbsd-arm64@0.25.5':
729 - resolution: {integrity: sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==}
754 + '@esbuild/netbsd-arm64@0.25.6':
755 + resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==}
756 engines: {node: '>=18'}
757 cpu: [arm64]
758 os: [netbsd]
759
734 - '@esbuild/netbsd-x64@0.25.5':
735 - resolution: {integrity: sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==}
760 + '@esbuild/netbsd-x64@0.25.6':
761 + resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==}
762 engines: {node: '>=18'}
763 cpu: [x64]
764 os: [netbsd]
765
740 - '@esbuild/openbsd-arm64@0.25.5':
741 - resolution: {integrity: sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==}
766 + '@esbuild/openbsd-arm64@0.25.6':
767 + resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==}
768 engines: {node: '>=18'}
769 cpu: [arm64]
770 os: [openbsd]
771
746 - '@esbuild/openbsd-x64@0.25.5':
747 - resolution: {integrity: sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==}
772 + '@esbuild/openbsd-x64@0.25.6':
773 + resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==}
774 engines: {node: '>=18'}
775 cpu: [x64]
776 os: [openbsd]
777
752 - '@esbuild/sunos-x64@0.25.5':
753 - resolution: {integrity: sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==}
778 + '@esbuild/openharmony-arm64@0.25.6':
779 + resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==}
780 + engines: {node: '>=18'}
781 + cpu: [arm64]
782 + os: [openharmony]
783 +
784 + '@esbuild/sunos-x64@0.25.6':
785 + resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==}
786 engines: {node: '>=18'}
787 cpu: [x64]
788 os: [sunos]
789
758 - '@esbuild/win32-arm64@0.25.5':
759 - resolution: {integrity: sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==}
790 + '@esbuild/win32-arm64@0.25.6':
791 + resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==}
792 engines: {node: '>=18'}
793 cpu: [arm64]
794 os: [win32]
795
764 - '@esbuild/win32-ia32@0.25.5':
765 - resolution: {integrity: sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==}
796 + '@esbuild/win32-ia32@0.25.6':
797 + resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==}
798 engines: {node: '>=18'}
799 cpu: [ia32]
800 os: [win32]
801
770 - '@esbuild/win32-x64@0.25.5':
771 - resolution: {integrity: sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==}
802 + '@esbuild/win32-x64@0.25.6':
803 + resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==}
804 engines: {node: '>=18'}
805 cpu: [x64]
806 os: [win32]
@@ -822,8 +854,8 @@ packages:
854 resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==}
855 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
856
825 - '@eslint/js@9.30.0':
826 - resolution: {integrity: sha512-Wzw3wQwPvc9sHM+NjakWTcPx11mbZyiYHuwWa/QfZ7cIRX7WK54PSk7bdyXDaoaopUcMatv1zaQvOAAO8hCdww==}
857 + '@eslint/js@9.30.1':
858 + resolution: {integrity: sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==}
859 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
860
861 '@eslint/markdown@6.6.0':
@@ -890,18 +922,26 @@ packages:
922 peerDependencies:
923 vue: '>=3'
924
893 - '@intlify/core-base@11.1.7':
894 - resolution: {integrity: sha512-gYiGnQeJVp3kNBeXQ73m1uFOak0ry4av8pn+IkEWigyyPWEMGzB+xFeQdmGMFn49V+oox6294oGVff8bYOhtOw==}
925 + '@intlify/core-base@11.1.9':
926 + resolution: {integrity: sha512-Lrdi4wp3XnGhWmB/mMD/XtfGUw1Jt+PGpZI/M63X1ZqhTDjNHRVCs/i8vv8U1cwaj1A9fb0bkCQHLSL0SK+pIQ==}
927 engines: {node: '>= 16'}
928
897 - '@intlify/message-compiler@11.1.7':
898 - resolution: {integrity: sha512-0ezkep1AT30NyuKj8QbRlmvMORCCRlOIIu9v8RNU8SwDjjTiFCZzczCORMns2mCH4HZ1nXgrfkKzYUbfjNRmng==}
929 + '@intlify/message-compiler@11.1.9':
930 + resolution: {integrity: sha512-84SNs3Ikjg0rD1bOuchzb3iK1vR2/8nxrkyccIl5DjFTeMzE/Fxv6X+A7RN5ZXjEWelc1p5D4kHA6HEOhlKL5Q==}
931 engines: {node: '>= 16'}
932
901 - '@intlify/shared@11.1.7':
902 - resolution: {integrity: sha512-4yZeMt2Aa/7n5Ehy4KalUlvt3iRLcg1tq9IBVfOgkyWFArN4oygn6WxgGIFibP3svpaH8DarbNaottq+p0gUZQ==}
933 + '@intlify/shared@11.1.9':
934 + resolution: {integrity: sha512-H/83xgU1l8ox+qG305p6ucmoy93qyjIPnvxGWRA7YdOoHe1tIiW9IlEu4lTdsOR7cfP1ecrwyflQSqXdXBacXA==}
935 engines: {node: '>= 16'}
936
937 + '@isaacs/balanced-match@4.0.1':
938 + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
939 + engines: {node: 20 || >=22}
940 +
941 + '@isaacs/brace-expansion@5.0.0':
942 + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
943 + engines: {node: 20 || >=22}
944 +
945 '@isaacs/cliui@8.0.2':
946 resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
947 engines: {node: '>=12'}
@@ -910,23 +950,18 @@ packages:
950 resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
951 engines: {node: '>=18.0.0'}
952
913 - '@jridgewell/gen-mapping@0.3.8':
914 - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
915 - engines: {node: '>=6.0.0'}
953 + '@jridgewell/gen-mapping@0.3.12':
954 + resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
955
956 '@jridgewell/resolve-uri@3.1.2':
957 resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
958 engines: {node: '>=6.0.0'}
959
921 - '@jridgewell/set-array@1.2.1':
922 - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
923 - engines: {node: '>=6.0.0'}
924 -
925 - '@jridgewell/sourcemap-codec@1.5.0':
926 - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
960 + '@jridgewell/sourcemap-codec@1.5.4':
961 + resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
962
928 - '@jridgewell/trace-mapping@0.3.25':
929 - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
963 + '@jridgewell/trace-mapping@0.3.29':
964 + resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
965
966 '@juggle/resize-observer@3.4.0':
967 resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
@@ -961,8 +996,8 @@ packages:
996 resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
997 engines: {node: '>= 8'}
998
964 - '@nuxt/kit@3.17.5':
965 - resolution: {integrity: sha512-NdCepmA+S/SzgcaL3oYUeSlXGYO6BXGr9K/m1D0t0O9rApF8CSq/QQ+ja5KYaYMO1kZAEWH4s2XVcE3uPrrAVg==}
999 + '@nuxt/kit@3.17.6':
1000 + resolution: {integrity: sha512-8PKRwoEF70IXVrpGEJZ4g4V2WtE9RjSMgSZLLa0HZCoyT+QczJcJe3kho/XKnJOnNnHep4WqciTD7p4qRRtBqw==}
1001 engines: {node: '>=18.12.0'}
1002
1003 '@one-ini/wasm@0.1.1':
@@ -1065,8 +1100,11 @@ packages:
1100 resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}
1101 engines: {node: '>=20.0.0'}
1102
1068 - '@rolldown/pluginutils@1.0.0-beta.21':
1069 - resolution: {integrity: sha512-OTjWr7XYqRZaSzi6dTe0fP25EEsYEQ2H04xIedXG3D0Hrs+Bpe3V5L48R6y+R5ohTygp1ijC09mbrd7vlslpzA==}
1103 + '@rolldown/pluginutils@1.0.0-beta.19':
1104 + resolution: {integrity: sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==}
1105 +
1106 + '@rolldown/pluginutils@1.0.0-beta.26':
1107 + resolution: {integrity: sha512-r/5po89voz/QRPDmoErL10+hVuTAuz1SHvokx+yWBlOIPB5C41jC7QhLqq9kaebx/+EHyoV3z22/qBfX81Ns8A==}
1108
1109 '@rollup/pluginutils@5.2.0':
1110 resolution: {integrity: sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==}
@@ -1077,103 +1115,103 @@ packages:
1115 rollup:
1116 optional: true
1117
1080 - '@rollup/rollup-android-arm-eabi@4.44.1':
1081 - resolution: {integrity: sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==}
1118 + '@rollup/rollup-android-arm-eabi@4.44.2':
1119 + resolution: {integrity: sha512-g0dF8P1e2QYPOj1gu7s/3LVP6kze9A7m6x0BZ9iTdXK8N5c2V7cpBKHV3/9A4Zd8xxavdhK0t4PnqjkqVmUc9Q==}
1120 cpu: [arm]
1121 os: [android]
1122
1085 - '@rollup/rollup-android-arm64@4.44.1':
1086 - resolution: {integrity: sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==}
1123 + '@rollup/rollup-android-arm64@4.44.2':
1124 + resolution: {integrity: sha512-Yt5MKrOosSbSaAK5Y4J+vSiID57sOvpBNBR6K7xAaQvk3MkcNVV0f9fE20T+41WYN8hDn6SGFlFrKudtx4EoxA==}
1125 cpu: [arm64]
1126 os: [android]
1127
1090 - '@rollup/rollup-darwin-arm64@4.44.1':
1091 - resolution: {integrity: sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==}
1128 + '@rollup/rollup-darwin-arm64@4.44.2':
1129 + resolution: {integrity: sha512-EsnFot9ZieM35YNA26nhbLTJBHD0jTwWpPwmRVDzjylQT6gkar+zenfb8mHxWpRrbn+WytRRjE0WKsfaxBkVUA==}
1130 cpu: [arm64]
1131 os: [darwin]
1132
1095 - '@rollup/rollup-darwin-x64@4.44.1':
1096 - resolution: {integrity: sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==}
1133 + '@rollup/rollup-darwin-x64@4.44.2':
1134 + resolution: {integrity: sha512-dv/t1t1RkCvJdWWxQ2lWOO+b7cMsVw5YFaS04oHpZRWehI1h0fV1gF4wgGCTyQHHjJDfbNpwOi6PXEafRBBezw==}
1135 cpu: [x64]
1136 os: [darwin]
1137
1100 - '@rollup/rollup-freebsd-arm64@4.44.1':
1101 - resolution: {integrity: sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==}
1138 + '@rollup/rollup-freebsd-arm64@4.44.2':
1139 + resolution: {integrity: sha512-W4tt4BLorKND4qeHElxDoim0+BsprFTwb+vriVQnFFtT/P6v/xO5I99xvYnVzKWrK6j7Hb0yp3x7V5LUbaeOMg==}
1140 cpu: [arm64]
1141 os: [freebsd]
1142
1105 - '@rollup/rollup-freebsd-x64@4.44.1':
1106 - resolution: {integrity: sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==}
1143 + '@rollup/rollup-freebsd-x64@4.44.2':
1144 + resolution: {integrity: sha512-tdT1PHopokkuBVyHjvYehnIe20fxibxFCEhQP/96MDSOcyjM/shlTkZZLOufV3qO6/FQOSiJTBebhVc12JyPTA==}
1145 cpu: [x64]
1146 os: [freebsd]
1147
1110 - '@rollup/rollup-linux-arm-gnueabihf@4.44.1':
1111 - resolution: {integrity: sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==}
1148 + '@rollup/rollup-linux-arm-gnueabihf@4.44.2':
1149 + resolution: {integrity: sha512-+xmiDGGaSfIIOXMzkhJ++Oa0Gwvl9oXUeIiwarsdRXSe27HUIvjbSIpPxvnNsRebsNdUo7uAiQVgBD1hVriwSQ==}
1150 cpu: [arm]
1151 os: [linux]
1152
1115 - '@rollup/rollup-linux-arm-musleabihf@4.44.1':
1116 - resolution: {integrity: sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==}
1153 + '@rollup/rollup-linux-arm-musleabihf@4.44.2':
1154 + resolution: {integrity: sha512-bDHvhzOfORk3wt8yxIra8N4k/N0MnKInCW5OGZaeDYa/hMrdPaJzo7CSkjKZqX4JFUWjUGm88lI6QJLCM7lDrA==}
1155 cpu: [arm]
1156 os: [linux]
1157
1120 - '@rollup/rollup-linux-arm64-gnu@4.44.1':
1121 - resolution: {integrity: sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==}
1158 + '@rollup/rollup-linux-arm64-gnu@4.44.2':
1159 + resolution: {integrity: sha512-NMsDEsDiYghTbeZWEGnNi4F0hSbGnsuOG+VnNvxkKg0IGDvFh7UVpM/14mnMwxRxUf9AdAVJgHPvKXf6FpMB7A==}
1160 cpu: [arm64]
1161 os: [linux]
1162
1125 - '@rollup/rollup-linux-arm64-musl@4.44.1':
1126 - resolution: {integrity: sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==}
1163 + '@rollup/rollup-linux-arm64-musl@4.44.2':
1164 + resolution: {integrity: sha512-lb5bxXnxXglVq+7imxykIp5xMq+idehfl+wOgiiix0191av84OqbjUED+PRC5OA8eFJYj5xAGcpAZ0pF2MnW+A==}
1165 cpu: [arm64]
1166 os: [linux]
1167
1130 - '@rollup/rollup-linux-loongarch64-gnu@4.44.1':
1131 - resolution: {integrity: sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==}
1168 + '@rollup/rollup-linux-loongarch64-gnu@4.44.2':
1169 + resolution: {integrity: sha512-Yl5Rdpf9pIc4GW1PmkUGHdMtbx0fBLE1//SxDmuf3X0dUC57+zMepow2LK0V21661cjXdTn8hO2tXDdAWAqE5g==}
1170 cpu: [loong64]
1171 os: [linux]
1172
1135 - '@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
1136 - resolution: {integrity: sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==}
1173 + '@rollup/rollup-linux-powerpc64le-gnu@4.44.2':
1174 + resolution: {integrity: sha512-03vUDH+w55s680YYryyr78jsO1RWU9ocRMaeV2vMniJJW/6HhoTBwyyiiTPVHNWLnhsnwcQ0oH3S9JSBEKuyqw==}
1175 cpu: [ppc64]
1176 os: [linux]
1177
1140 - '@rollup/rollup-linux-riscv64-gnu@4.44.1':
1141 - resolution: {integrity: sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==}
1178 + '@rollup/rollup-linux-riscv64-gnu@4.44.2':
1179 + resolution: {integrity: sha512-iYtAqBg5eEMG4dEfVlkqo05xMOk6y/JXIToRca2bAWuqjrJYJlx/I7+Z+4hSrsWU8GdJDFPL4ktV3dy4yBSrzg==}
1180 cpu: [riscv64]
1181 os: [linux]
1182
1145 - '@rollup/rollup-linux-riscv64-musl@4.44.1':
1146 - resolution: {integrity: sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==}
1183 + '@rollup/rollup-linux-riscv64-musl@4.44.2':
1184 + resolution: {integrity: sha512-e6vEbgaaqz2yEHqtkPXa28fFuBGmUJ0N2dOJK8YUfijejInt9gfCSA7YDdJ4nYlv67JfP3+PSWFX4IVw/xRIPg==}
1185 cpu: [riscv64]
1186 os: [linux]
1187
1150 - '@rollup/rollup-linux-s390x-gnu@4.44.1':
1151 - resolution: {integrity: sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==}
1188 + '@rollup/rollup-linux-s390x-gnu@4.44.2':
1189 + resolution: {integrity: sha512-evFOtkmVdY3udE+0QKrV5wBx7bKI0iHz5yEVx5WqDJkxp9YQefy4Mpx3RajIVcM6o7jxTvVd/qpC1IXUhGc1Mw==}
1190 cpu: [s390x]
1191 os: [linux]
1192
1155 - '@rollup/rollup-linux-x64-gnu@4.44.1':
1156 - resolution: {integrity: sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==}
1193 + '@rollup/rollup-linux-x64-gnu@4.44.2':
1194 + resolution: {integrity: sha512-/bXb0bEsWMyEkIsUL2Yt5nFB5naLAwyOWMEviQfQY1x3l5WsLKgvZf66TM7UTfED6erckUVUJQ/jJ1FSpm3pRQ==}
1195 cpu: [x64]
1196 os: [linux]
1197
1160 - '@rollup/rollup-linux-x64-musl@4.44.1':
1161 - resolution: {integrity: sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==}
1198 + '@rollup/rollup-linux-x64-musl@4.44.2':
1199 + resolution: {integrity: sha512-3D3OB1vSSBXmkGEZR27uiMRNiwN08/RVAcBKwhUYPaiZ8bcvdeEwWPvbnXvvXHY+A/7xluzcN+kaiOFNiOZwWg==}
1200 cpu: [x64]
1201 os: [linux]
1202
1165 - '@rollup/rollup-win32-arm64-msvc@4.44.1':
1166 - resolution: {integrity: sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==}
1203 + '@rollup/rollup-win32-arm64-msvc@4.44.2':
1204 + resolution: {integrity: sha512-VfU0fsMK+rwdK8mwODqYeM2hDrF2WiHaSmCBrS7gColkQft95/8tphyzv2EupVxn3iE0FI78wzffoULH1G+dkw==}
1205 cpu: [arm64]
1206 os: [win32]
1207
1170 - '@rollup/rollup-win32-ia32-msvc@4.44.1':
1171 - resolution: {integrity: sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==}
1208 + '@rollup/rollup-win32-ia32-msvc@4.44.2':
1209 + resolution: {integrity: sha512-+qMUrkbUurpE6DVRjiJCNGZBGo9xM4Y0FXU5cjgudWqIBWbcLkjE3XprJUsOFgC6xjBClwVa9k6O3A7K3vxb5Q==}
1210 cpu: [ia32]
1211 os: [win32]
1212
1175 - '@rollup/rollup-win32-x64-msvc@4.44.1':
1176 - resolution: {integrity: sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==}
1213 + '@rollup/rollup-win32-x64-msvc@4.44.2':
1214 + resolution: {integrity: sha512-3+QZROYfJ25PDcxFF66UEk8jGWigHJeecZILvkPkyQN7oc5BvFo4YEXFkOs154j3FTMp9mn9Ky8RCOwastduEA==}
1215 cpu: [x64]
1216 os: [win32]
1217
@@ -1225,8 +1263,8 @@ packages:
1263 '@singulio/app-auth-search@0.0.3':
1264 resolution: {integrity: sha512-4U/of6Gry5hal3CdZoMkrdfbSYza43ZcvlJoh4pJ1UCm16Vpegmw3MwmbrZHjg8wiFWe+f5WnX/WkgQpuuZnHw==}
1265
1228 - '@stylistic/eslint-plugin@5.0.0':
1229 - resolution: {integrity: sha512-nVV2FSzeTJ3oFKw+3t9gQYQcrgbopgCASSY27QOtkhEGgSfdQQjDmzZd41NeT1myQ8Wc6l+pZllST9qIu4NKzg==}
1266 + '@stylistic/eslint-plugin@5.1.0':
1267 + resolution: {integrity: sha512-TJRJul4u/lmry5N/kyCU+7RWWOk0wyXN+BncRlDYBqpLFnzXkd7QGVfN7KewarFIXv0IX0jSF/Ksu7aHWEDeuw==}
1268 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1269 peerDependencies:
1270 eslint: '>=9.0.0'
@@ -1398,8 +1436,8 @@ packages:
1436 '@types/lodash-es@4.17.12':
1437 resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
1438
1401 - '@types/lodash@4.17.19':
1402 - resolution: {integrity: sha512-NYqRyg/hIQrYPT9lbOeYc3kIRabJDn/k4qQHIXUpx88CBDww2fD15Sg5kbXlW86zm2XEW4g0QxkTI3/Kfkc7xQ==}
1439 + '@types/lodash@4.17.20':
1440 + resolution: {integrity: sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==}
1441
1442 '@types/markdown-it@14.1.2':
1443 resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
@@ -1416,8 +1454,8 @@ packages:
1454 '@types/ms@2.1.0':
1455 resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
1456
1419 - '@types/node@24.0.8':
1420 - resolution: {integrity: sha512-WytNrFSgWO/esSH9NbpWUfTMGQwCGIKfCmNlmFDNiI5gGhgMmEA+V1AEvKLeBNvvtBnailJtkrEa2OIISwrVAA==}
1457 + '@types/node@24.0.13':
1458 + resolution: {integrity: sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ==}
1459
1460 '@types/parse-json@4.0.2':
1461 resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==}
@@ -1446,84 +1484,84 @@ packages:
1484 '@types/yauzl@2.10.3':
1485 resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
1486
1449 - '@typescript-eslint/eslint-plugin@8.35.0':
1450 - resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==}
1487 + '@typescript-eslint/eslint-plugin@8.36.0':
1488 + resolution: {integrity: sha512-lZNihHUVB6ZZiPBNgOQGSxUASI7UJWhT8nHyUGCnaQ28XFCw98IfrMCG3rUl1uwUWoAvodJQby2KTs79UTcrAg==}
1489 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1490 peerDependencies:
1453 - '@typescript-eslint/parser': ^8.35.0
1491 + '@typescript-eslint/parser': ^8.36.0
1492 eslint: ^8.57.0 || ^9.0.0
1493 typescript: '>=4.8.4 <5.9.0'
1494
1457 - '@typescript-eslint/parser@8.35.0':
1458 - resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==}
1495 + '@typescript-eslint/parser@8.36.0':
1496 + resolution: {integrity: sha512-FuYgkHwZLuPbZjQHzJXrtXreJdFMKl16BFYyRrLxDhWr6Qr7Kbcu2s1Yhu8tsiMXw1S0W1pjfFfYEt+R604s+Q==}
1497 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1498 peerDependencies:
1499 eslint: ^8.57.0 || ^9.0.0
1500 typescript: '>=4.8.4 <5.9.0'
1501
1464 - '@typescript-eslint/project-service@8.35.0':
1465 - resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==}
1502 + '@typescript-eslint/project-service@8.36.0':
1503 + resolution: {integrity: sha512-JAhQFIABkWccQYeLMrHadu/fhpzmSQ1F1KXkpzqiVxA/iYI6UnRt2trqXHt1sYEcw1mxLnB9rKMsOxXPxowN/g==}
1504 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1505 peerDependencies:
1506 typescript: '>=4.8.4 <5.9.0'
1507
1470 - '@typescript-eslint/scope-manager@8.35.0':
1471 - resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==}
1508 + '@typescript-eslint/scope-manager@8.36.0':
1509 + resolution: {integrity: sha512-wCnapIKnDkN62fYtTGv2+RY8FlnBYA3tNm0fm91kc2BjPhV2vIjwwozJ7LToaLAyb1ca8BxrS7vT+Pvvf7RvqA==}
1510 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1511
1474 - '@typescript-eslint/tsconfig-utils@8.35.0':
1475 - resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==}
1512 + '@typescript-eslint/tsconfig-utils@8.36.0':
1513 + resolution: {integrity: sha512-Nhh3TIEgN18mNbdXpd5Q8mSCBnrZQeY9V7Ca3dqYvNDStNIGRmJA6dmrIPMJ0kow3C7gcQbpsG2rPzy1Ks/AnA==}
1514 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1515 peerDependencies:
1516 typescript: '>=4.8.4 <5.9.0'
1517
1480 - '@typescript-eslint/type-utils@8.35.0':
1481 - resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==}
1518 + '@typescript-eslint/type-utils@8.36.0':
1519 + resolution: {integrity: sha512-5aaGYG8cVDd6cxfk/ynpYzxBRZJk7w/ymto6uiyUFtdCozQIsQWh7M28/6r57Fwkbweng8qAzoMCPwSJfWlmsg==}
1520 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1521 peerDependencies:
1522 eslint: ^8.57.0 || ^9.0.0
1523 typescript: '>=4.8.4 <5.9.0'
1524
1487 - '@typescript-eslint/types@8.35.0':
1488 - resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==}
1525 + '@typescript-eslint/types@8.36.0':
1526 + resolution: {integrity: sha512-xGms6l5cTJKQPZOKM75Dl9yBfNdGeLRsIyufewnxT4vZTrjC0ImQT4fj8QmtJK84F58uSh5HVBSANwcfiXxABQ==}
1527 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1528
1491 - '@typescript-eslint/typescript-estree@8.35.0':
1492 - resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==}
1529 + '@typescript-eslint/typescript-estree@8.36.0':
1530 + resolution: {integrity: sha512-JaS8bDVrfVJX4av0jLpe4ye0BpAaUW7+tnS4Y4ETa3q7NoZgzYbN9zDQTJ8kPb5fQ4n0hliAt9tA4Pfs2zA2Hg==}
1531 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1532 peerDependencies:
1533 typescript: '>=4.8.4 <5.9.0'
1534
1497 - '@typescript-eslint/utils@8.35.0':
1498 - resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==}
1535 + '@typescript-eslint/utils@8.36.0':
1536 + resolution: {integrity: sha512-VOqmHu42aEMT+P2qYjylw6zP/3E/HvptRwdn/PZxyV27KhZg2IOszXod4NcXisWzPAGSS4trE/g4moNj6XmH2g==}
1537 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1538 peerDependencies:
1539 eslint: ^8.57.0 || ^9.0.0
1540 typescript: '>=4.8.4 <5.9.0'
1541
1504 - '@typescript-eslint/visitor-keys@8.35.0':
1505 - resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==}
1542 + '@typescript-eslint/visitor-keys@8.36.0':
1543 + resolution: {integrity: sha512-vZrhV2lRPWDuGoxcmrzRZyxAggPL+qp3WzUrlZD+slFueDiYHxeBa34dUXPuC0RmGKzl4lS5kFJYvKCq9cnNDA==}
1544 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
1545
1546 '@ungap/structured-clone@1.3.0':
1547 resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
1548
1511 - '@vitejs/plugin-vue-jsx@4.2.0':
1512 - resolution: {integrity: sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==}
1513 - engines: {node: ^18.0.0 || >=20.0.0}
1549 + '@vitejs/plugin-vue-jsx@5.0.1':
1550 + resolution: {integrity: sha512-X7qmQMXbdDh+sfHUttXokPD0cjPkMFoae7SgbkF9vi3idGUKmxLcnU2Ug49FHwiKXebfzQRIm5yK3sfCJzNBbg==}
1551 + engines: {node: ^20.19.0 || >=22.12.0}
1552 peerDependencies:
1515 - vite: ^5.0.0 || ^6.0.0
1553 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0
1554 vue: ^3.0.0
1555
1518 - '@vitejs/plugin-vue@5.2.4':
1519 - resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
1520 - engines: {node: ^18.0.0 || >=20.0.0}
1556 + '@vitejs/plugin-vue@6.0.0':
1557 + resolution: {integrity: sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==}
1558 + engines: {node: ^20.19.0 || >=22.12.0}
1559 peerDependencies:
1522 - vite: ^5.0.0 || ^6.0.0
1560 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0
1561 vue: ^3.2.25
1562
1525 - '@vitest/eslint-plugin@1.3.3':
1526 - resolution: {integrity: sha512-zOB4T5f80JXfP5DC2yQl7azRYq8PmGqYle3uxh3a0NnbKc+EaSYSpEcrVAh2r5W97pi3BVv7oRb5NdEQy0cCXA==}
1563 + '@vitest/eslint-plugin@1.3.4':
1564 + resolution: {integrity: sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==}
1565 peerDependencies:
1566 eslint: '>= 8.57.0'
1567 typescript: '>= 5.0.0'
@@ -1563,14 +1601,14 @@ packages:
1601 '@vitest/utils@3.2.4':
1602 resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==}
1603
1566 - '@volar/language-core@2.4.15':
1567 - resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==}
1604 + '@volar/language-core@2.4.17':
1605 + resolution: {integrity: sha512-chmRZMbKmcGpKMoO7Reb70uiLrzo0KWC2CkFttKUuKvrE+VYgi+fL9vWMJ07Fv5ulX0V1TAyyacN9q3nc5/ecA==}
1606
1569 - '@volar/source-map@2.4.15':
1570 - resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==}
1607 + '@volar/source-map@2.4.17':
1608 + resolution: {integrity: sha512-QDybtQyO3Ms/NjFqNHTC5tbDN2oK5VH7ZaKrcubtfHBDj63n2pizHC3wlMQ+iT55kQXZUUAbmBX5L1C8CHFeBw==}
1609
1572 - '@volar/typescript@2.4.15':
1573 - resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==}
1610 + '@volar/typescript@2.4.17':
1611 + resolution: {integrity: sha512-3paEFNh4P5DkgNUB2YkTRrfUekN4brAXxd3Ow1syMqdIPtCZHbUy4AW99S5RO/7mzyTWPMdDSo3mqTpB/LPObQ==}
1612
1613 '@vue/babel-helper-vue-transform-on@1.4.0':
1614 resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==}
@@ -1620,8 +1658,8 @@ packages:
1658 '@vue/devtools-shared@7.7.7':
1659 resolution: {integrity: sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==}
1660
1623 - '@vue/language-core@2.2.10':
1624 - resolution: {integrity: sha512-+yNoYx6XIKuAO8Mqh1vGytu8jkFEOH5C8iOv3i8Z/65A7x9iAOXA97Q+PqZ3nlm2lxf5rOJuIGI/wDtx/riNYw==}
1661 + '@vue/language-core@3.0.1':
1662 + resolution: {integrity: sha512-sq+/Mc1IqIexWEQ+Q2XPiDb5SxSvY5JPqHnMOl/PlF5BekslzduX8dglSkpC17VeiAQB6dpS+4aiwNLJRduCNw==}
1663 peerDependencies:
1664 typescript: '*'
1665 peerDependenciesMeta:
@@ -1659,21 +1697,21 @@ packages:
1697 vue:
1698 optional: true
1699
1662 - '@vueuse/core@13.4.0':
1663 - resolution: {integrity: sha512-OnK7zW3bTq/QclEk17+vDFN3tuAm8ONb9zQUIHrYQkkFesu3WeGUx/3YzpEp+ly53IfDAT9rsYXgGW6piNZC5w==}
1700 + '@vueuse/core@13.5.0':
1701 + resolution: {integrity: sha512-wV7z0eUpifKmvmN78UBZX8T7lMW53Nrk6JP5+6hbzrB9+cJ3jr//hUlhl9TZO/03bUkMK6gGkQpqOPWoabr72g==}
1702 peerDependencies:
1703 vue: ^3.5.0
1704
1667 - '@vueuse/metadata@13.4.0':
1668 - resolution: {integrity: sha512-CPDQ/IgOeWbqItg1c/pS+Ulum63MNbpJ4eecjFJqgD/JUCJ822zLfpw6M9HzSvL6wbzMieOtIAW/H8deQASKHg==}
1705 + '@vueuse/metadata@13.5.0':
1706 + resolution: {integrity: sha512-euhItU3b0SqXxSy8u1XHxUCdQ8M++bsRs+TYhOLDU/OykS7KvJnyIFfep0XM5WjIFry9uAPlVSjmVHiqeshmkw==}
1707
1708 '@vueuse/motion@3.0.3':
1709 resolution: {integrity: sha512-4B+ITsxCI9cojikvrpaJcLXyq0spj3sdlzXjzesWdMRd99hhtFI6OJ/1JsqwtF73YooLe0hUn/xDR6qCtmn5GQ==}
1710 peerDependencies:
1711 vue: '>=3.0.0'
1712
1675 - '@vueuse/shared@13.4.0':
1676 - resolution: {integrity: sha512-+AxuKbw8R1gYy5T21V5yhadeNM7rJqb4cPaRI9DdGnnNl3uqXh+unvQ3uCaA2DjYLbNr1+l7ht/B4qEsRegX6A==}
1713 + '@vueuse/shared@13.5.0':
1714 + resolution: {integrity: sha512-K7GrQIxJ/ANtucxIXbQlUHdB0TPA8c+q5i+zbrjxuhJCnJ9GtBg75sBSnvmLSxHKPg2Yo8w62PWksl9kwH0Q8g==}
1715 peerDependencies:
1716 vue: ^3.5.0
1717
@@ -1694,8 +1732,8 @@ packages:
1732 engines: {node: '>=0.4.0'}
1733 hasBin: true
1734
1697 - agent-base@7.1.3:
1698 - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
1735 + agent-base@7.1.4:
1736 + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
1737 engines: {node: '>= 14'}
1738
1739 aggregate-error@3.1.0:
@@ -1705,12 +1743,12 @@ packages:
1743 ajv@6.12.6:
1744 resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
1745
1708 - algoliasearch@5.29.0:
1709 - resolution: {integrity: sha512-E2l6AlTWGznM2e7vEE6T6hzObvEyXukxMOlBmVlMyixZyK1umuO/CiVc6sDBbzVH0oEviCE5IfVY1oZBmccYPQ==}
1746 + algoliasearch@5.32.0:
1747 + resolution: {integrity: sha512-84xBncKNPBK8Ae89F65+SyVcOihrIbm/3N7to+GpRBHEUXGjA3ydWTMpcRW6jmFzkBQ/eqYy/y+J+NBpJWYjBg==}
1748 engines: {node: '>= 14.0.0'}
1749
1712 - alien-signals@1.0.13:
1713 - resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
1750 + alien-signals@2.0.5:
1751 + resolution: {integrity: sha512-PdJB6+06nUNAClInE3Dweq7/2xVAYM64vvvS1IHVHSJmgeOtEdrAGyp7Z2oJtYm0B342/Exd2NT0uMJaThcjLQ==}
1752
1753 ansi-colors@4.1.3:
1754 resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
@@ -1740,8 +1778,8 @@ packages:
1778 resolution: {integrity: sha512-BGcItUBWSMRgOCe+SVZJ+S7yTRG0eGt9cXAHev72yuGcY23hnLA7Bky5L/xLyPINoSN95geovfBkqoTlNZYa7w==}
1779 engines: {node: '>=14'}
1780
1743 - apexcharts@4.7.0:
1744 - resolution: {integrity: sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA==}
1781 + apexcharts@5.2.0:
1782 + resolution: {integrity: sha512-BZ+v4Wqf4BKVRKBatVghDVu9vu2SXhl/F7ujT2awnf7Zv6RT39FQWtAAV3bpH+G5c8IADw0PyOKG00+rN1UoNg==}
1783
1784 arch@2.2.0:
1785 resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
@@ -1897,8 +1935,8 @@ packages:
1935 resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
1936 engines: {node: '>=10'}
1937
1900 - caniuse-lite@1.0.30001726:
1901 - resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==}
1938 + caniuse-lite@1.0.30001727:
1939 + resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==}
1940
1941 caseless@0.12.0:
1942 resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@@ -1906,9 +1944,9 @@ packages:
1944 ccount@2.0.1:
1945 resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
1946
1909 - chai@5.2.0:
1910 - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
1911 - engines: {node: '>=12'}
1947 + chai@5.2.1:
1948 + resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==}
1949 + engines: {node: '>=18'}
1950
1951 chalk@4.1.2:
1952 resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1939,8 +1977,8 @@ packages:
1977 resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
1978 engines: {node: '>=18'}
1979
1942 - ci-info@4.2.0:
1943 - resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==}
1980 + ci-info@4.3.0:
1981 + resolution: {integrity: sha512-l+2bNRMiQgcfILUi33labAZYIWlH1kWDp+ecNo5iisRKrbm0xcRyCww71/YU0Fkw0mAFpz9bJayXPjey6vkmaQ==}
1982 engines: {node: '>=8'}
1983
1984 citty@0.1.6:
@@ -2046,8 +2084,8 @@ packages:
2084 resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==}
2085 engines: {node: '>=12.13'}
2086
2049 - core-js-compat@3.43.0:
2050 - resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==}
2087 + core-js-compat@3.44.0:
2088 + resolution: {integrity: sha512-JepmAj2zfl6ogy34qfWtcE7nHKAJnKsQFRn++scjVS2bZFllwptzw61BZcZFYBPpUznLfAvh0LGhxKppk04ClA==}
2089
2090 core-util-is@1.0.2:
2091 resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
@@ -2069,8 +2107,8 @@ packages:
2107 css-render@0.15.14:
2108 resolution: {integrity: sha512-9nF4PdUle+5ta4W5SyZdLCCmFd37uVimSjg1evcTqKJCyvCEEj12WKzOSBNak6r4im4J4iYXKH1OWpUV5LBYFg==}
2109
2072 - css-select@5.1.0:
2073 - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
2110 + css-select@5.2.2:
2111 + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
2112
2113 css-tree@2.2.1:
2114 resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
@@ -2080,8 +2118,8 @@ packages:
2118 resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
2119 engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
2120
2083 - css-what@6.1.0:
2084 - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
2121 + css-what@6.2.2:
2122 + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
2123 engines: {node: '>= 6'}
2124
2125 cssesc@3.0.0:
@@ -2103,8 +2141,8 @@ packages:
2141 csstype@3.1.3:
2142 resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
2143
2106 - cypress@14.5.0:
2107 - resolution: {integrity: sha512-1HOnKvWep0LkWuFwPeWkZ0TDl7ivi2/Mz+WNU4dfkeLJaFndS3Ow6TXT7YjuTqLFI2peJKzPKljVUFdymI2K5g==}
2144 + cypress@14.5.1:
2145 + resolution: {integrity: sha512-vYBeZKW3UAtxwv5mFuSlOBCYhyO0H86TeDKRJ7TgARyHiREIaiDjeHtqjzrXRFrdz9KnNavqlm+z+hklC7v8XQ==}
2146 engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
2147 hasBin: true
2148
@@ -2150,8 +2188,8 @@ packages:
2188 supports-color:
2189 optional: true
2190
2153 - decimal.js@10.5.0:
2154 - resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
2191 + decimal.js@10.6.0:
2192 + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==}
2193
2194 decode-named-character-reference@1.2.0:
2195 resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
@@ -2264,8 +2302,8 @@ packages:
2302 engines: {node: '>=14'}
2303 hasBin: true
2304
2267 - electron-to-chromium@1.5.177:
2268 - resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==}
2305 + electron-to-chromium@1.5.182:
2306 + resolution: {integrity: sha512-Lv65Btwv9W4J9pyODI6EWpdnhfvrve/us5h1WspW8B2Fb0366REPtY3hX7ounk1CkV/TBjWCEvCBBbYbmV0qCA==}
2307
2308 emoji-regex@8.0.0:
2309 resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2298,6 +2336,9 @@ packages:
2336 error-stack-parser-es@0.1.5:
2337 resolution: {integrity: sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==}
2338
2339 + error-stack-parser-es@1.0.5:
2340 + resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
2341 +
2342 errx@0.1.0:
2343 resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==}
2344
@@ -2320,8 +2361,8 @@ packages:
2361 resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
2362 engines: {node: '>= 0.4'}
2363
2323 - esbuild@0.25.5:
2324 - resolution: {integrity: sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==}
2364 + esbuild@0.25.6:
2365 + resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==}
2366 engines: {node: '>=18'}
2367 hasBin: true
2368
@@ -2403,8 +2444,8 @@ packages:
2444 typescript:
2445 optional: true
2446
2406 - eslint-plugin-jsdoc@51.2.3:
2407 - resolution: {integrity: sha512-pagzxFubOih+O6XSB1D8BkDkJjF4G4/v8s9pRg4FkXQJLu0e3QJg621ayhmnhyc5mNBpp3cYCNiUyeLQs7oz7w==}
2447 + eslint-plugin-jsdoc@51.3.4:
2448 + resolution: {integrity: sha512-maz6qa95+sAjMr9m5oRyfejc+mnyQWsWSe9oyv9371bh4/T0kWOMryJNO4h8rEd97wo/9lbzwi3OOX4rDhnAzg==}
2449 engines: {node: '>=20.11.0'}
2450 peerDependencies:
2451 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0
@@ -2415,8 +2456,8 @@ packages:
2456 peerDependencies:
2457 eslint: '>=6.0.0'
2458
2418 - eslint-plugin-n@17.20.0:
2419 - resolution: {integrity: sha512-IRSoatgB/NQJZG5EeTbv/iAx1byOGdbbyhQrNvWdCfTnmPxUT0ao9/eGOeG7ljD8wJBsxwE8f6tES5Db0FRKEw==}
2459 + eslint-plugin-n@17.21.0:
2460 + resolution: {integrity: sha512-1+iZ8We4ZlwVMtb/DcHG3y5/bZOdazIpa/4TySo22MLKdwrLcfrX0hbadnCvykSQCCmkAnWmIP8jZVb2AAq29A==}
2461 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2462 peerDependencies:
2463 eslint: '>=8.23.0'
@@ -2463,12 +2504,16 @@ packages:
2504 '@typescript-eslint/eslint-plugin':
2505 optional: true
2506
2466 - eslint-plugin-vue@10.2.0:
2467 - resolution: {integrity: sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==}
2507 + eslint-plugin-vue@10.3.0:
2508 + resolution: {integrity: sha512-A0u9snqjCfYaPnqqOaH6MBLVWDUIN4trXn8J3x67uDcXvR7X6Ut8p16N+nYhMCQ9Y7edg2BIRGzfyZsY0IdqoQ==}
2509 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2510 peerDependencies:
2511 + '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
2512 eslint: ^8.57.0 || ^9.0.0
2513 vue-eslint-parser: ^10.0.0
2514 + peerDependenciesMeta:
2515 + '@typescript-eslint/parser':
2516 + optional: true
2517
2518 eslint-plugin-yml@1.18.0:
2519 resolution: {integrity: sha512-9NtbhHRN2NJa/s3uHchO3qVVZw0vyOIvWlXWGaKCr/6l3Go62wsvJK5byiI6ZoYztDsow4GnS69BZD3GnqH3hA==}
@@ -2494,8 +2539,8 @@ packages:
2539 resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
2540 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2541
2497 - eslint@9.30.0:
2498 - resolution: {integrity: sha512-iN/SiPxmQu6EVkf+m1qpBxzUhE12YqFLOSySuOyVLJLEF9nzTf+h/1AJYc1JWzCnktggeNrjvQGLngDzXirU6g==}
2542 + eslint@9.30.1:
2543 + resolution: {integrity: sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==}
2544 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
2545 hasBin: true
2546 peerDependencies:
@@ -2568,8 +2613,8 @@ packages:
2613 resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==}
2614 engines: {node: '>=0.10.0'}
2615
2571 - expect-type@1.2.1:
2572 - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
2616 + expect-type@1.2.2:
2617 + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
2618 engines: {node: '>=12.0.0'}
2619
2620 exsolve@1.0.7:
@@ -2600,6 +2645,10 @@ packages:
2645 fast-levenshtein@2.0.6:
2646 resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
2647
2648 + fast-xml-parser@5.2.5:
2649 + resolution: {integrity: sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==}
2650 + hasBin: true
2651 +
2652 fastq@1.19.1:
2653 resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
2654
@@ -2776,10 +2825,6 @@ packages:
2825 resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==}
2826 engines: {node: '>=0.10.0'}
2827
2779 - globals@11.12.0:
2780 - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
2781 - engines: {node: '>=4'}
2782 -
2828 globals@14.0.0:
2829 resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
2830 engines: {node: '>=18'}
@@ -2788,8 +2833,8 @@ packages:
2833 resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
2834 engines: {node: '>=18'}
2835
2791 - globals@16.2.0:
2792 - resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==}
2836 + globals@16.3.0:
2837 + resolution: {integrity: sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==}
2838 engines: {node: '>=18'}
2839
2840 gopd@1.2.0:
@@ -3467,6 +3512,10 @@ packages:
3512 resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
3513 engines: {node: '>=4'}
3514
3515 + minimatch@10.0.3:
3516 + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==}
3517 + engines: {node: 20 || >=22}
3518 +
3519 minimatch@3.1.2:
3520 resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
3521
@@ -3766,8 +3815,8 @@ packages:
3815 pkg-types@1.3.1:
3816 resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
3817
3769 - pkg-types@2.1.1:
3770 - resolution: {integrity: sha512-eY0QFb6eSwc9+0d/5D2lFFUq+A3n3QNGSy/X2Nvp+6MfzGw2u6EbA7S80actgjY1lkvvI0pqB+a4hioMh443Ew==}
3818 + pkg-types@2.2.0:
3819 + resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
3820
3821 please-upgrade-node@3.2.0:
3822 resolution: {integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==}
@@ -3794,11 +3843,13 @@ packages:
3843 resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
3844 engines: {node: '>= 0.8.0'}
3845
3797 - prettier-plugin-tailwindcss@0.6.13:
3798 - resolution: {integrity: sha512-uQ0asli1+ic8xrrSmIOaElDu0FacR4x69GynTh2oZjFY10JUt6EEumTQl5tB4fMeD6I1naKd+4rXQQ7esT2i1g==}
3846 + prettier-plugin-tailwindcss@0.6.14:
3847 + resolution: {integrity: sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==}
3848 engines: {node: '>=14.21.3'}
3849 peerDependencies:
3850 '@ianvs/prettier-plugin-sort-imports': '*'
3851 + '@prettier/plugin-hermes': '*'
3852 + '@prettier/plugin-oxc': '*'
3853 '@prettier/plugin-pug': '*'
3854 '@shopify/prettier-plugin-liquid': '*'
3855 '@trivago/prettier-plugin-sort-imports': '*'
@@ -3818,6 +3869,10 @@ packages:
3869 peerDependenciesMeta:
3870 '@ianvs/prettier-plugin-sort-imports':
3871 optional: true
3872 + '@prettier/plugin-hermes':
3873 + optional: true
3874 + '@prettier/plugin-oxc':
3875 + optional: true
3876 '@prettier/plugin-pug':
3877 optional: true
3878 '@shopify/prettier-plugin-liquid':
@@ -4002,8 +4057,8 @@ packages:
4057 rollup:
4058 optional: true
4059
4005 - rollup@4.44.1:
4006 - resolution: {integrity: sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==}
4060 + rollup@4.44.2:
4061 + resolution: {integrity: sha512-PVoapzTwSEcelaWGth3uR66u7ZRo6qhPHc0f2uRO9fX6XDVNrIiGYS0Pj9+R8yIIYSD/mCx2b16Ws9itljKSPg==}
4062 engines: {node: '>=18.0.0', npm: '>=8.0.0'}
4063 hasBin: true
4064
@@ -4207,6 +4262,9 @@ packages:
4262 strip-literal@3.0.0:
4263 resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==}
4264
4265 + strnum@2.1.1:
4266 + resolution: {integrity: sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==}
4267 +
4268 style-mod@4.1.2:
4269 resolution: {integrity: sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==}
4270
@@ -4401,8 +4459,8 @@ packages:
4459 resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
4460 engines: {node: '>=18'}
4461
4404 - unimport@5.0.1:
4405 - resolution: {integrity: sha512-1YWzPj6wYhtwHE+9LxRlyqP4DiRrhGfJxdtH475im8ktyZXO3jHj/3PZ97zDdvkYoovFdi0K4SKl3a7l92v3sQ==}
4462 + unimport@5.1.0:
4463 + resolution: {integrity: sha512-wMmuG+wkzeHh2KCE6yiDlHmKelN8iE/maxkUYMbmrS6iV8+n6eP1TH3yKKlepuF4hrkepinEGmBXdfo9XZUvAw==}
4464 engines: {node: '>=18.12.0'}
4465
4466 unist-util-is@6.0.0:
@@ -4480,10 +4538,15 @@ packages:
4538 engines: {node: ^18.19.0 || >=20.6.0}
4539 hasBin: true
4540
4483 - vite-hot-client@2.0.4:
4484 - resolution: {integrity: sha512-W9LOGAyGMrbGArYJN4LBCdOC5+Zwh7dHvOHC0KmGKkJhsOzaKbpo/jEjpPKVHIW0/jBWj8RZG0NUxfgA8BxgAg==}
4541 + vite-dev-rpc@1.1.0:
4542 + resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==}
4543 peerDependencies:
4486 - vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0
4544 + vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0
4545 +
4546 + vite-hot-client@2.1.0:
4547 + resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==}
4548 + peerDependencies:
4549 + vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
4550
4551 vite-node@3.2.4:
4552 resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==}
@@ -4495,7 +4558,17 @@ packages:
4558 engines: {node: '>=14'}
4559 peerDependencies:
4560 '@nuxt/kit': '*'
4498 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.1
4561 + vite: ^7.0.4
4562 + peerDependenciesMeta:
4563 + '@nuxt/kit':
4564 + optional: true
4565 +
4566 + vite-plugin-inspect@11.3.0:
4567 + resolution: {integrity: sha512-vmt7K1WVKQkuiwvsM6e5h3HDJ2pSWTnzoj+JP9Kvu3Sh2G+nFap1F1V7tqpyA4qFxM1GQ84ryffWFGQrwShERQ==}
4568 + engines: {node: '>=14'}
4569 + peerDependencies:
4570 + '@nuxt/kit': '*'
4571 + vite: ^7.0.4
4572 peerDependenciesMeta:
4573 '@nuxt/kit':
4574 optional: true
@@ -4516,19 +4589,19 @@ packages:
4589 peerDependencies:
4590 vue: '>=3.2.13'
4591
4519 - vite@6.3.5:
4520 - resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
4521 - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
4592 + vite@7.0.4:
4593 + resolution: {integrity: sha512-SkaSguuS7nnmV7mfJ8l81JGBFV7Gvzp8IzgE8A8t23+AxuNX61Q5H1Tpz5efduSN7NHC8nQXD3sKQKZAu5mNEA==}
4594 + engines: {node: ^20.19.0 || >=22.12.0}
4595 hasBin: true
4596 peerDependencies:
4524 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
4597 + '@types/node': ^20.19.0 || >=22.12.0
4598 jiti: '>=1.21.0'
4526 - less: '*'
4599 + less: ^4.0.0
4600 lightningcss: ^1.21.0
4528 - sass: '*'
4529 - sass-embedded: '*'
4530 - stylus: '*'
4531 - sugarss: '*'
4601 + sass: ^1.70.0
4602 + sass-embedded: ^1.70.0
4603 + stylus: '>=0.54.8'
4604 + sugarss: ^5.0.0
4605 terser: ^5.16.0
4606 tsx: ^4.8.1
4607 yaml: ^2.4.2
@@ -4604,11 +4677,11 @@ packages:
4677 codemirror: 6.x
4678 vue: 3.x
4679
4607 - vue-component-type-helpers@2.2.10:
4608 - resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==}
4680 + vue-component-type-helpers@2.2.12:
4681 + resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==}
4682
4610 - vue-eslint-parser@10.1.4:
4611 - resolution: {integrity: sha512-EIZvCukIEMHEb3mxOKemtvWR1fcUAdWWAgkfyjmRHzvyhrZvBvH9oz69+thDIWhGiIQjZnPkCn8yHqvjM+a9eg==}
4683 + vue-eslint-parser@10.2.0:
4684 + resolution: {integrity: sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw==}
4685 engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
4686 peerDependencies:
4687 eslint: ^8.57.0 || ^9.0.0
@@ -4618,8 +4691,8 @@ packages:
4691 peerDependencies:
4692 vue: ^3.0.0
4693
4621 - vue-i18n@11.1.7:
4622 - resolution: {integrity: sha512-CDrU7Cmyh1AxJjerQmipV9nVa//exVBdhTcWGlbfcDCN8bKp/uAe7Le6IoN4//5emIikbsSKe9Uofmf/xXkhOA==}
4694 + vue-i18n@11.1.9:
4695 + resolution: {integrity: sha512-N9ZTsXdRmX38AwS9F6Rh93RtPkvZTkSy/zNv63FTIwZCUbLwwrpqlKz9YQuzFLdlvRdZTnWAUE5jMxr8exdl7g==}
4696 engines: {node: '>= 16'}
4697 peerDependencies:
4698 vue: ^3.0.0
@@ -4634,8 +4707,8 @@ packages:
4707 peerDependencies:
4708 vue: ^3.3.4
4709
4637 - vue-tsc@2.2.10:
4638 - resolution: {integrity: sha512-jWZ1xSaNbabEV3whpIDMbjVSVawjAyW+x1n3JeGQo7S0uv2n9F/JMgWW90tGWNFRKya4YwKMZgCtr0vRAM7DeQ==}
4710 + vue-tsc@3.0.1:
4711 + resolution: {integrity: sha512-UvMLQD0hAGL1g/NfEQelnSVB4H5gtf/gz2lJKjMMwWNOUmSNyWkejwJagAxEbSjtV5CPPJYslOtoSuqJ63mhdg==}
4712 hasBin: true
4713 peerDependencies:
4714 typescript: '>=5.0.0'
@@ -4739,8 +4812,8 @@ packages:
4812 wrappy@1.0.2:
4813 resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
4814
4742 - ws@8.18.2:
4743 - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
4815 + ws@8.18.3:
4816 + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==}
4817 engines: {node: '>=10.0.0'}
4818 peerDependencies:
4819 bufferutil: ^4.0.1
@@ -4762,6 +4835,15 @@ packages:
4835 xmlchars@2.2.0:
4836 resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
4837
4838 + xmllint-wasm@5.0.0:
4839 + resolution: {integrity: sha512-vHgxKtU1ooKxlvaB/YcUj+bO+c53EvPXrk9my83/SZhcnf8D32GbACPiC3kyrMLqJQJzpkzSykmh23Cv21fvlg==}
4840 + engines: {node: '>=16'}
4841 + peerDependencies:
4842 + '@types/node': '>=16'
4843 +
4844 + xmllint@0.1.1:
4845 + resolution: {integrity: sha512-yXa09o/w2E+OLQVbgRyuz1n5o4ZodV8n/iBXwLKQNR6GcfWL8vF8uApjBFKTzhq7sCABtkRXCwEE3+vtkm/Wqg==}
4846 +
4847 y18n@5.0.8:
4848 resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
4849 engines: {node: '>=10'}
@@ -4825,126 +4907,126 @@ snapshots:
4907 dependencies:
4908 lodash: 4.17.21
4909
4828 - '@algolia/client-abtesting@5.29.0':
4910 + '@algolia/client-abtesting@5.32.0':
4911 dependencies:
4830 - '@algolia/client-common': 5.29.0
4831 - '@algolia/requester-browser-xhr': 5.29.0
4832 - '@algolia/requester-fetch': 5.29.0
4833 - '@algolia/requester-node-http': 5.29.0
4912 + '@algolia/client-common': 5.32.0
4913 + '@algolia/requester-browser-xhr': 5.32.0
4914 + '@algolia/requester-fetch': 5.32.0
4915 + '@algolia/requester-node-http': 5.32.0
4916
4835 - '@algolia/client-analytics@5.29.0':
4917 + '@algolia/client-analytics@5.32.0':
4918 dependencies:
4837 - '@algolia/client-common': 5.29.0
4838 - '@algolia/requester-browser-xhr': 5.29.0
4839 - '@algolia/requester-fetch': 5.29.0
4840 - '@algolia/requester-node-http': 5.29.0
4919 + '@algolia/client-common': 5.32.0
4920 + '@algolia/requester-browser-xhr': 5.32.0
4921 + '@algolia/requester-fetch': 5.32.0
4922 + '@algolia/requester-node-http': 5.32.0
4923
4842 - '@algolia/client-common@5.29.0': {}
4924 + '@algolia/client-common@5.32.0': {}
4925
4844 - '@algolia/client-insights@5.29.0':
4926 + '@algolia/client-insights@5.32.0':
4927 dependencies:
4846 - '@algolia/client-common': 5.29.0
4847 - '@algolia/requester-browser-xhr': 5.29.0
4848 - '@algolia/requester-fetch': 5.29.0
4849 - '@algolia/requester-node-http': 5.29.0
4928 + '@algolia/client-common': 5.32.0
4929 + '@algolia/requester-browser-xhr': 5.32.0
4930 + '@algolia/requester-fetch': 5.32.0
4931 + '@algolia/requester-node-http': 5.32.0
4932
4851 - '@algolia/client-personalization@5.29.0':
4933 + '@algolia/client-personalization@5.32.0':
4934 dependencies:
4853 - '@algolia/client-common': 5.29.0
4854 - '@algolia/requester-browser-xhr': 5.29.0
4855 - '@algolia/requester-fetch': 5.29.0
4856 - '@algolia/requester-node-http': 5.29.0
4935 + '@algolia/client-common': 5.32.0
4936 + '@algolia/requester-browser-xhr': 5.32.0
4937 + '@algolia/requester-fetch': 5.32.0
4938 + '@algolia/requester-node-http': 5.32.0
4939
4858 - '@algolia/client-query-suggestions@5.29.0':
4940 + '@algolia/client-query-suggestions@5.32.0':
4941 dependencies:
4860 - '@algolia/client-common': 5.29.0
4861 - '@algolia/requester-browser-xhr': 5.29.0
4862 - '@algolia/requester-fetch': 5.29.0
4863 - '@algolia/requester-node-http': 5.29.0
4942 + '@algolia/client-common': 5.32.0
4943 + '@algolia/requester-browser-xhr': 5.32.0
4944 + '@algolia/requester-fetch': 5.32.0
4945 + '@algolia/requester-node-http': 5.32.0
4946
4865 - '@algolia/client-search@5.29.0':
4947 + '@algolia/client-search@5.32.0':
4948 dependencies:
4867 - '@algolia/client-common': 5.29.0
4868 - '@algolia/requester-browser-xhr': 5.29.0
4869 - '@algolia/requester-fetch': 5.29.0
4870 - '@algolia/requester-node-http': 5.29.0
4949 + '@algolia/client-common': 5.32.0
4950 + '@algolia/requester-browser-xhr': 5.32.0
4951 + '@algolia/requester-fetch': 5.32.0
4952 + '@algolia/requester-node-http': 5.32.0
4953
4872 - '@algolia/ingestion@1.29.0':
4954 + '@algolia/ingestion@1.32.0':
4955 dependencies:
4874 - '@algolia/client-common': 5.29.0
4875 - '@algolia/requester-browser-xhr': 5.29.0
4876 - '@algolia/requester-fetch': 5.29.0
4877 - '@algolia/requester-node-http': 5.29.0
4956 + '@algolia/client-common': 5.32.0
4957 + '@algolia/requester-browser-xhr': 5.32.0
4958 + '@algolia/requester-fetch': 5.32.0
4959 + '@algolia/requester-node-http': 5.32.0
4960
4879 - '@algolia/monitoring@1.29.0':
4961 + '@algolia/monitoring@1.32.0':
4962 dependencies:
4881 - '@algolia/client-common': 5.29.0
4882 - '@algolia/requester-browser-xhr': 5.29.0
4883 - '@algolia/requester-fetch': 5.29.0
4884 - '@algolia/requester-node-http': 5.29.0
4963 + '@algolia/client-common': 5.32.0
4964 + '@algolia/requester-browser-xhr': 5.32.0
4965 + '@algolia/requester-fetch': 5.32.0
4966 + '@algolia/requester-node-http': 5.32.0
4967
4886 - '@algolia/recommend@5.29.0':
4968 + '@algolia/recommend@5.32.0':
4969 dependencies:
4888 - '@algolia/client-common': 5.29.0
4889 - '@algolia/requester-browser-xhr': 5.29.0
4890 - '@algolia/requester-fetch': 5.29.0
4891 - '@algolia/requester-node-http': 5.29.0
4970 + '@algolia/client-common': 5.32.0
4971 + '@algolia/requester-browser-xhr': 5.32.0
4972 + '@algolia/requester-fetch': 5.32.0
4973 + '@algolia/requester-node-http': 5.32.0
4974
4893 - '@algolia/requester-browser-xhr@5.29.0':
4975 + '@algolia/requester-browser-xhr@5.32.0':
4976 dependencies:
4895 - '@algolia/client-common': 5.29.0
4977 + '@algolia/client-common': 5.32.0
4978
4897 - '@algolia/requester-fetch@5.29.0':
4979 + '@algolia/requester-fetch@5.32.0':
4980 dependencies:
4899 - '@algolia/client-common': 5.29.0
4981 + '@algolia/client-common': 5.32.0
4982
4901 - '@algolia/requester-node-http@5.29.0':
4983 + '@algolia/requester-node-http@5.32.0':
4984 dependencies:
4903 - '@algolia/client-common': 5.29.0
4985 + '@algolia/client-common': 5.32.0
4986
4987 '@ampproject/remapping@2.3.0':
4988 dependencies:
4907 - '@jridgewell/gen-mapping': 0.3.8
4908 - '@jridgewell/trace-mapping': 0.3.25
4989 + '@jridgewell/gen-mapping': 0.3.12
4990 + '@jridgewell/trace-mapping': 0.3.29
4991
4910 - '@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.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
4992 + '@antfu/eslint-config@4.16.2(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
4993 dependencies:
4994 '@antfu/install-pkg': 1.1.0
4995 '@clack/prompts': 0.11.0
4914 - '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.30.0(jiti@2.4.2))
4996 + '@eslint-community/eslint-plugin-eslint-comments': 4.5.0(eslint@9.30.1(jiti@2.4.2))
4997 '@eslint/markdown': 6.6.0
4916 - '@stylistic/eslint-plugin': 5.0.0(eslint@9.30.0(jiti@2.4.2))
4917 - '@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)
4918 - '@typescript-eslint/parser': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4919 - '@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.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
4998 + '@stylistic/eslint-plugin': 5.1.0(eslint@9.30.1(jiti@2.4.2))
4999 + '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
5000 + '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
5001 + '@vitest/eslint-plugin': 1.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
5002 ansis: 4.1.0
5003 cac: 6.7.14
4922 - eslint: 9.30.0(jiti@2.4.2)
4923 - eslint-config-flat-gitignore: 2.1.0(eslint@9.30.0(jiti@2.4.2))
5004 + eslint: 9.30.1(jiti@2.4.2)
5005 + eslint-config-flat-gitignore: 2.1.0(eslint@9.30.1(jiti@2.4.2))
5006 eslint-flat-config-utils: 2.1.0
4925 - eslint-merge-processors: 2.0.0(eslint@9.30.0(jiti@2.4.2))
4926 - eslint-plugin-antfu: 3.1.1(eslint@9.30.0(jiti@2.4.2))
4927 - eslint-plugin-command: 3.3.1(eslint@9.30.0(jiti@2.4.2))
4928 - eslint-plugin-import-lite: 0.3.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4929 - eslint-plugin-jsdoc: 51.2.3(eslint@9.30.0(jiti@2.4.2))
4930 - eslint-plugin-jsonc: 2.20.1(eslint@9.30.0(jiti@2.4.2))
4931 - eslint-plugin-n: 17.20.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
5007 + eslint-merge-processors: 2.0.0(eslint@9.30.1(jiti@2.4.2))
5008 + eslint-plugin-antfu: 3.1.1(eslint@9.30.1(jiti@2.4.2))
5009 + eslint-plugin-command: 3.3.1(eslint@9.30.1(jiti@2.4.2))
5010 + eslint-plugin-import-lite: 0.3.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
5011 + eslint-plugin-jsdoc: 51.3.4(eslint@9.30.1(jiti@2.4.2))
5012 + eslint-plugin-jsonc: 2.20.1(eslint@9.30.1(jiti@2.4.2))
5013 + eslint-plugin-n: 17.21.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
5014 eslint-plugin-no-only-tests: 3.3.0
4933 - eslint-plugin-perfectionist: 4.15.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
4934 - eslint-plugin-pnpm: 0.3.1(eslint@9.30.0(jiti@2.4.2))
4935 - eslint-plugin-regexp: 2.9.0(eslint@9.30.0(jiti@2.4.2))
4936 - eslint-plugin-toml: 0.12.0(eslint@9.30.0(jiti@2.4.2))
4937 - eslint-plugin-unicorn: 59.0.1(eslint@9.30.0(jiti@2.4.2))
4938 - 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))
4939 - 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)))
4940 - eslint-plugin-yml: 1.18.0(eslint@9.30.0(jiti@2.4.2))
4941 - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.0(jiti@2.4.2))
4942 - globals: 16.2.0
5015 + eslint-plugin-perfectionist: 4.15.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
5016 + eslint-plugin-pnpm: 0.3.1(eslint@9.30.1(jiti@2.4.2))
5017 + eslint-plugin-regexp: 2.9.0(eslint@9.30.1(jiti@2.4.2))
5018 + eslint-plugin-toml: 0.12.0(eslint@9.30.1(jiti@2.4.2))
5019 + eslint-plugin-unicorn: 59.0.1(eslint@9.30.1(jiti@2.4.2))
5020 + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))
5021 + eslint-plugin-vue: 10.3.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2)))
5022 + eslint-plugin-yml: 1.18.0(eslint@9.30.1(jiti@2.4.2))
5023 + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2))
5024 + globals: 16.3.0
5025 jsonc-eslint-parser: 2.4.0
5026 local-pkg: 1.1.1
5027 parse-gitignore: 2.0.0
5028 toml-eslint-parser: 0.10.0
4947 - vue-eslint-parser: 10.1.4(eslint@9.30.0(jiti@2.4.2))
5029 + vue-eslint-parser: 10.2.0(eslint@9.30.1(jiti@2.4.2))
5030 yaml-eslint-parser: 1.3.0
5031 transitivePeerDependencies:
5032 - '@eslint/json'
@@ -4981,20 +5063,20 @@ snapshots:
5063 js-tokens: 4.0.0
5064 picocolors: 1.1.1
5065
4984 - '@babel/compat-data@7.27.7': {}
5066 + '@babel/compat-data@7.28.0': {}
5067
4986 - '@babel/core@7.27.7':
5068 + '@babel/core@7.28.0':
5069 dependencies:
5070 '@ampproject/remapping': 2.3.0
5071 '@babel/code-frame': 7.27.1
4990 - '@babel/generator': 7.27.5
5072 + '@babel/generator': 7.28.0
5073 '@babel/helper-compilation-targets': 7.27.2
4992 - '@babel/helper-module-transforms': 7.27.3(@babel/core@7.27.7)
5074 + '@babel/helper-module-transforms': 7.27.3(@babel/core@7.28.0)
5075 '@babel/helpers': 7.27.6
4994 - '@babel/parser': 7.27.7
5076 + '@babel/parser': 7.28.0
5077 '@babel/template': 7.27.2
4996 - '@babel/traverse': 7.27.7
4997 - '@babel/types': 7.27.7
5078 + '@babel/traverse': 7.28.0
5079 + '@babel/types': 7.28.0
5080 convert-source-map: 2.0.0
5081 debug: 4.4.1(supports-color@8.1.1)
5082 gensync: 1.0.0-beta.2
@@ -5003,81 +5085,83 @@ snapshots:
5085 transitivePeerDependencies:
5086 - supports-color
5087
5006 - '@babel/generator@7.27.5':
5088 + '@babel/generator@7.28.0':
5089 dependencies:
5008 - '@babel/parser': 7.27.7
5009 - '@babel/types': 7.27.7
5010 - '@jridgewell/gen-mapping': 0.3.8
5011 - '@jridgewell/trace-mapping': 0.3.25
5090 + '@babel/parser': 7.28.0
5091 + '@babel/types': 7.28.0
5092 + '@jridgewell/gen-mapping': 0.3.12
5093 + '@jridgewell/trace-mapping': 0.3.29
5094 jsesc: 3.1.0
5095
5096 '@babel/helper-annotate-as-pure@7.27.3':
5097 dependencies:
5016 - '@babel/types': 7.27.7
5098 + '@babel/types': 7.28.0
5099
5100 '@babel/helper-compilation-targets@7.27.2':
5101 dependencies:
5020 - '@babel/compat-data': 7.27.7
5102 + '@babel/compat-data': 7.28.0
5103 '@babel/helper-validator-option': 7.27.1
5104 browserslist: 4.25.1
5105 lru-cache: 5.1.1
5106 semver: 6.3.1
5107
5026 - '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.7)':
5108 + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.28.0)':
5109 dependencies:
5028 - '@babel/core': 7.27.7
5110 + '@babel/core': 7.28.0
5111 '@babel/helper-annotate-as-pure': 7.27.3
5112 '@babel/helper-member-expression-to-functions': 7.27.1
5113 '@babel/helper-optimise-call-expression': 7.27.1
5032 - '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.7)
5114 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.0)
5115 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
5034 - '@babel/traverse': 7.27.7
5116 + '@babel/traverse': 7.28.0
5117 semver: 6.3.1
5118 transitivePeerDependencies:
5119 - supports-color
5120
5121 + '@babel/helper-globals@7.28.0': {}
5122 +
5123 '@babel/helper-member-expression-to-functions@7.27.1':
5124 dependencies:
5041 - '@babel/traverse': 7.27.7
5042 - '@babel/types': 7.27.7
5125 + '@babel/traverse': 7.28.0
5126 + '@babel/types': 7.28.0
5127 transitivePeerDependencies:
5128 - supports-color
5129
5130 '@babel/helper-module-imports@7.27.1':
5131 dependencies:
5048 - '@babel/traverse': 7.27.7
5049 - '@babel/types': 7.27.7
5132 + '@babel/traverse': 7.28.0
5133 + '@babel/types': 7.28.0
5134 transitivePeerDependencies:
5135 - supports-color
5136
5053 - '@babel/helper-module-transforms@7.27.3(@babel/core@7.27.7)':
5137 + '@babel/helper-module-transforms@7.27.3(@babel/core@7.28.0)':
5138 dependencies:
5055 - '@babel/core': 7.27.7
5139 + '@babel/core': 7.28.0
5140 '@babel/helper-module-imports': 7.27.1
5141 '@babel/helper-validator-identifier': 7.27.1
5058 - '@babel/traverse': 7.27.7
5142 + '@babel/traverse': 7.28.0
5143 transitivePeerDependencies:
5144 - supports-color
5145
5146 '@babel/helper-optimise-call-expression@7.27.1':
5147 dependencies:
5064 - '@babel/types': 7.27.7
5148 + '@babel/types': 7.28.0
5149
5150 '@babel/helper-plugin-utils@7.27.1': {}
5151
5068 - '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.7)':
5152 + '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.0)':
5153 dependencies:
5070 - '@babel/core': 7.27.7
5154 + '@babel/core': 7.28.0
5155 '@babel/helper-member-expression-to-functions': 7.27.1
5156 '@babel/helper-optimise-call-expression': 7.27.1
5073 - '@babel/traverse': 7.27.7
5157 + '@babel/traverse': 7.28.0
5158 transitivePeerDependencies:
5159 - supports-color
5160
5161 '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
5162 dependencies:
5079 - '@babel/traverse': 7.27.7
5080 - '@babel/types': 7.27.7
5163 + '@babel/traverse': 7.28.0
5164 + '@babel/types': 7.28.0
5165 transitivePeerDependencies:
5166 - supports-color
5167
@@ -5090,76 +5174,76 @@ snapshots:
5174 '@babel/helpers@7.27.6':
5175 dependencies:
5176 '@babel/template': 7.27.2
5093 - '@babel/types': 7.27.7
5177 + '@babel/types': 7.28.0
5178
5095 - '@babel/parser@7.27.7':
5179 + '@babel/parser@7.28.0':
5180 dependencies:
5097 - '@babel/types': 7.27.7
5181 + '@babel/types': 7.28.0
5182
5099 - '@babel/plugin-proposal-decorators@7.27.1(@babel/core@7.27.7)':
5183 + '@babel/plugin-proposal-decorators@7.28.0(@babel/core@7.28.0)':
5184 dependencies:
5101 - '@babel/core': 7.27.7
5102 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7)
5185 + '@babel/core': 7.28.0
5186 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0)
5187 '@babel/helper-plugin-utils': 7.27.1
5104 - '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.27.7)
5188 + '@babel/plugin-syntax-decorators': 7.27.1(@babel/core@7.28.0)
5189 transitivePeerDependencies:
5190 - supports-color
5191
5108 - '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.27.7)':
5192 + '@babel/plugin-syntax-decorators@7.27.1(@babel/core@7.28.0)':
5193 dependencies:
5110 - '@babel/core': 7.27.7
5194 + '@babel/core': 7.28.0
5195 '@babel/helper-plugin-utils': 7.27.1
5196
5113 - '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.7)':
5197 + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.28.0)':
5198 dependencies:
5115 - '@babel/core': 7.27.7
5199 + '@babel/core': 7.28.0
5200 '@babel/helper-plugin-utils': 7.27.1
5201
5118 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.7)':
5202 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.0)':
5203 dependencies:
5120 - '@babel/core': 7.27.7
5204 + '@babel/core': 7.28.0
5205 '@babel/helper-plugin-utils': 7.27.1
5206
5123 - '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.7)':
5207 + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.0)':
5208 dependencies:
5125 - '@babel/core': 7.27.7
5209 + '@babel/core': 7.28.0
5210 '@babel/helper-plugin-utils': 7.27.1
5211
5128 - '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.7)':
5212 + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.0)':
5213 dependencies:
5130 - '@babel/core': 7.27.7
5214 + '@babel/core': 7.28.0
5215 '@babel/helper-plugin-utils': 7.27.1
5216
5133 - '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.7)':
5217 + '@babel/plugin-transform-typescript@7.28.0(@babel/core@7.28.0)':
5218 dependencies:
5135 - '@babel/core': 7.27.7
5219 + '@babel/core': 7.28.0
5220 '@babel/helper-annotate-as-pure': 7.27.3
5137 - '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.7)
5221 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.28.0)
5222 '@babel/helper-plugin-utils': 7.27.1
5223 '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
5140 - '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.7)
5224 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.0)
5225 transitivePeerDependencies:
5226 - supports-color
5227
5228 '@babel/template@7.27.2':
5229 dependencies:
5230 '@babel/code-frame': 7.27.1
5147 - '@babel/parser': 7.27.7
5148 - '@babel/types': 7.27.7
5231 + '@babel/parser': 7.28.0
5232 + '@babel/types': 7.28.0
5233
5150 - '@babel/traverse@7.27.7':
5234 + '@babel/traverse@7.28.0':
5235 dependencies:
5236 '@babel/code-frame': 7.27.1
5153 - '@babel/generator': 7.27.5
5154 - '@babel/parser': 7.27.7
5237 + '@babel/generator': 7.28.0
5238 + '@babel/helper-globals': 7.28.0
5239 + '@babel/parser': 7.28.0
5240 '@babel/template': 7.27.2
5156 - '@babel/types': 7.27.7
5241 + '@babel/types': 7.28.0
5242 debug: 4.4.1(supports-color@8.1.1)
5158 - globals: 11.12.0
5243 transitivePeerDependencies:
5244 - supports-color
5245
5162 - '@babel/types@7.27.7':
5246 + '@babel/types@7.28.0':
5247 dependencies:
5248 '@babel/helper-string-parser': 7.27.1
5249 '@babel/helper-validator-identifier': 7.27.1
@@ -5308,7 +5392,7 @@ snapshots:
5392 '@es-joy/jsdoccomment@0.50.2':
5393 dependencies:
5394 '@types/estree': 1.0.8
5311 - '@typescript-eslint/types': 8.35.0
5395 + '@typescript-eslint/types': 8.36.0
5396 comment-parser: 1.4.1
5397 esquery: 1.6.0
5398 jsdoc-type-pratt-parser: 4.1.0
@@ -5316,102 +5400,105 @@ snapshots:
5400 '@es-joy/jsdoccomment@0.52.0':
5401 dependencies:
5402 '@types/estree': 1.0.8
5319 - '@typescript-eslint/types': 8.35.0
5403 + '@typescript-eslint/types': 8.36.0
5404 comment-parser: 1.4.1
5405 esquery: 1.6.0
5406 jsdoc-type-pratt-parser: 4.1.0
5407
5324 - '@esbuild/aix-ppc64@0.25.5':
5408 + '@esbuild/aix-ppc64@0.25.6':
5409 optional: true
5410
5327 - '@esbuild/android-arm64@0.25.5':
5411 + '@esbuild/android-arm64@0.25.6':
5412 optional: true
5413
5330 - '@esbuild/android-arm@0.25.5':
5414 + '@esbuild/android-arm@0.25.6':
5415 optional: true
5416
5333 - '@esbuild/android-x64@0.25.5':
5417 + '@esbuild/android-x64@0.25.6':
5418 optional: true
5419
5336 - '@esbuild/darwin-arm64@0.25.5':
5420 + '@esbuild/darwin-arm64@0.25.6':
5421 optional: true
5422
5339 - '@esbuild/darwin-x64@0.25.5':
5423 + '@esbuild/darwin-x64@0.25.6':
5424 optional: true
5425
5342 - '@esbuild/freebsd-arm64@0.25.5':
5426 + '@esbuild/freebsd-arm64@0.25.6':
5427 optional: true
5428
5345 - '@esbuild/freebsd-x64@0.25.5':
5429 + '@esbuild/freebsd-x64@0.25.6':
5430 optional: true
5431
5348 - '@esbuild/linux-arm64@0.25.5':
5432 + '@esbuild/linux-arm64@0.25.6':
5433 optional: true
5434
5351 - '@esbuild/linux-arm@0.25.5':
5435 + '@esbuild/linux-arm@0.25.6':
5436 optional: true
5437
5354 - '@esbuild/linux-ia32@0.25.5':
5438 + '@esbuild/linux-ia32@0.25.6':
5439 optional: true
5440
5357 - '@esbuild/linux-loong64@0.25.5':
5441 + '@esbuild/linux-loong64@0.25.6':
5442 optional: true
5443
5360 - '@esbuild/linux-mips64el@0.25.5':
5444 + '@esbuild/linux-mips64el@0.25.6':
5445 optional: true
5446
5363 - '@esbuild/linux-ppc64@0.25.5':
5447 + '@esbuild/linux-ppc64@0.25.6':
5448 optional: true
5449
5366 - '@esbuild/linux-riscv64@0.25.5':
5450 + '@esbuild/linux-riscv64@0.25.6':
5451 optional: true
5452
5369 - '@esbuild/linux-s390x@0.25.5':
5453 + '@esbuild/linux-s390x@0.25.6':
5454 optional: true
5455
5372 - '@esbuild/linux-x64@0.25.5':
5456 + '@esbuild/linux-x64@0.25.6':
5457 optional: true
5458
5375 - '@esbuild/netbsd-arm64@0.25.5':
5459 + '@esbuild/netbsd-arm64@0.25.6':
5460 optional: true
5461
5378 - '@esbuild/netbsd-x64@0.25.5':
5462 + '@esbuild/netbsd-x64@0.25.6':
5463 optional: true
5464
5381 - '@esbuild/openbsd-arm64@0.25.5':
5465 + '@esbuild/openbsd-arm64@0.25.6':
5466 optional: true
5467
5384 - '@esbuild/openbsd-x64@0.25.5':
5468 + '@esbuild/openbsd-x64@0.25.6':
5469 optional: true
5470
5387 - '@esbuild/sunos-x64@0.25.5':
5471 + '@esbuild/openharmony-arm64@0.25.6':
5472 optional: true
5473
5390 - '@esbuild/win32-arm64@0.25.5':
5474 + '@esbuild/sunos-x64@0.25.6':
5475 optional: true
5476
5393 - '@esbuild/win32-ia32@0.25.5':
5477 + '@esbuild/win32-arm64@0.25.6':
5478 optional: true
5479
5396 - '@esbuild/win32-x64@0.25.5':
5480 + '@esbuild/win32-ia32@0.25.6':
5481 optional: true
5482
5399 - '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.30.0(jiti@2.4.2))':
5483 + '@esbuild/win32-x64@0.25.6':
5484 + optional: true
5485 +
5486 + '@eslint-community/eslint-plugin-eslint-comments@4.5.0(eslint@9.30.1(jiti@2.4.2))':
5487 dependencies:
5488 escape-string-regexp: 4.0.0
5402 - eslint: 9.30.0(jiti@2.4.2)
5489 + eslint: 9.30.1(jiti@2.4.2)
5490 ignore: 5.3.2
5491
5405 - '@eslint-community/eslint-utils@4.7.0(eslint@9.30.0(jiti@2.4.2))':
5492 + '@eslint-community/eslint-utils@4.7.0(eslint@9.30.1(jiti@2.4.2))':
5493 dependencies:
5407 - eslint: 9.30.0(jiti@2.4.2)
5494 + eslint: 9.30.1(jiti@2.4.2)
5495 eslint-visitor-keys: 3.4.3
5496
5497 '@eslint-community/regexpp@4.12.1': {}
5498
5412 - '@eslint/compat@1.3.1(eslint@9.30.0(jiti@2.4.2))':
5499 + '@eslint/compat@1.3.1(eslint@9.30.1(jiti@2.4.2))':
5500 optionalDependencies:
5414 - eslint: 9.30.0(jiti@2.4.2)
5501 + eslint: 9.30.1(jiti@2.4.2)
5502
5503 '@eslint/config-array@0.21.0':
5504 dependencies:
@@ -5449,7 +5536,7 @@ snapshots:
5536 transitivePeerDependencies:
5537 - supports-color
5538
5452 - '@eslint/js@9.30.0': {}
5539 + '@eslint/js@9.30.1': {}
5540
5541 '@eslint/markdown@6.6.0':
5542 dependencies:
@@ -5513,17 +5600,23 @@ snapshots:
5600 '@iconify/types': 2.0.0
5601 vue: 3.5.17(typescript@5.8.3)
5602
5516 - '@intlify/core-base@11.1.7':
5603 + '@intlify/core-base@11.1.9':
5604 dependencies:
5518 - '@intlify/message-compiler': 11.1.7
5519 - '@intlify/shared': 11.1.7
5605 + '@intlify/message-compiler': 11.1.9
5606 + '@intlify/shared': 11.1.9
5607
5521 - '@intlify/message-compiler@11.1.7':
5608 + '@intlify/message-compiler@11.1.9':
5609 dependencies:
5523 - '@intlify/shared': 11.1.7
5610 + '@intlify/shared': 11.1.9
5611 source-map-js: 1.2.1
5612
5526 - '@intlify/shared@11.1.7': {}
5613 + '@intlify/shared@11.1.9': {}
5614 +
5615 + '@isaacs/balanced-match@4.0.1': {}
5616 +
5617 + '@isaacs/brace-expansion@5.0.0':
5618 + dependencies:
5619 + '@isaacs/balanced-match': 4.0.1
5620
5621 '@isaacs/cliui@8.0.2':
5622 dependencies:
@@ -5538,22 +5631,19 @@ snapshots:
5631 dependencies:
5632 minipass: 7.1.2
5633
5541 - '@jridgewell/gen-mapping@0.3.8':
5634 + '@jridgewell/gen-mapping@0.3.12':
5635 dependencies:
5543 - '@jridgewell/set-array': 1.2.1
5544 - '@jridgewell/sourcemap-codec': 1.5.0
5545 - '@jridgewell/trace-mapping': 0.3.25
5636 + '@jridgewell/sourcemap-codec': 1.5.4
5637 + '@jridgewell/trace-mapping': 0.3.29
5638
5639 '@jridgewell/resolve-uri@3.1.2': {}
5640
5549 - '@jridgewell/set-array@1.2.1': {}
5550 -
5551 - '@jridgewell/sourcemap-codec@1.5.0': {}
5641 + '@jridgewell/sourcemap-codec@1.5.4': {}
5642
5553 - '@jridgewell/trace-mapping@0.3.25':
5643 + '@jridgewell/trace-mapping@0.3.29':
5644 dependencies:
5645 '@jridgewell/resolve-uri': 3.1.2
5556 - '@jridgewell/sourcemap-codec': 1.5.0
5646 + '@jridgewell/sourcemap-codec': 1.5.4
5647
5648 '@juggle/resize-observer@3.4.0': {}
5649
@@ -5593,7 +5683,7 @@ snapshots:
5683 '@nodelib/fs.scandir': 2.1.5
5684 fastq: 1.19.1
5685
5596 - '@nuxt/kit@3.17.5':
5686 + '@nuxt/kit@3.17.6':
5687 dependencies:
5688 c12: 3.0.4
5689 consola: 3.4.2
@@ -5608,14 +5698,14 @@ snapshots:
5698 mlly: 1.7.4
5699 ohash: 2.0.11
5700 pathe: 2.0.3
5611 - pkg-types: 2.1.1
5701 + pkg-types: 2.2.0
5702 scule: 1.3.0
5703 semver: 7.7.2
5704 std-env: 3.9.0
5705 tinyglobby: 0.2.14
5706 ufo: 1.6.1
5707 unctx: 2.4.1
5618 - unimport: 5.0.1
5708 + unimport: 5.1.0
5709 untyped: 2.0.0
5710 transitivePeerDependencies:
5711 - magicast
@@ -5695,74 +5785,76 @@ snapshots:
5785 dependencies:
5786 quansync: 0.2.10
5787
5698 - '@rolldown/pluginutils@1.0.0-beta.21': {}
5788 + '@rolldown/pluginutils@1.0.0-beta.19': {}
5789
5700 - '@rollup/pluginutils@5.2.0(rollup@4.44.1)':
5790 + '@rolldown/pluginutils@1.0.0-beta.26': {}
5791 +
5792 + '@rollup/pluginutils@5.2.0(rollup@4.44.2)':
5793 dependencies:
5794 '@types/estree': 1.0.8
5795 estree-walker: 2.0.2
5796 picomatch: 4.0.2
5797 optionalDependencies:
5706 - rollup: 4.44.1
5798 + rollup: 4.44.2
5799
5708 - '@rollup/rollup-android-arm-eabi@4.44.1':
5800 + '@rollup/rollup-android-arm-eabi@4.44.2':
5801 optional: true
5802
5711 - '@rollup/rollup-android-arm64@4.44.1':
5803 + '@rollup/rollup-android-arm64@4.44.2':
5804 optional: true
5805
5714 - '@rollup/rollup-darwin-arm64@4.44.1':
5806 + '@rollup/rollup-darwin-arm64@4.44.2':
5807 optional: true
5808
5717 - '@rollup/rollup-darwin-x64@4.44.1':
5809 + '@rollup/rollup-darwin-x64@4.44.2':
5810 optional: true
5811
5720 - '@rollup/rollup-freebsd-arm64@4.44.1':
5812 + '@rollup/rollup-freebsd-arm64@4.44.2':
5813 optional: true
5814
5723 - '@rollup/rollup-freebsd-x64@4.44.1':
5815 + '@rollup/rollup-freebsd-x64@4.44.2':
5816 optional: true
5817
5726 - '@rollup/rollup-linux-arm-gnueabihf@4.44.1':
5818 + '@rollup/rollup-linux-arm-gnueabihf@4.44.2':
5819 optional: true
5820
5729 - '@rollup/rollup-linux-arm-musleabihf@4.44.1':
5821 + '@rollup/rollup-linux-arm-musleabihf@4.44.2':
5822 optional: true
5823
5732 - '@rollup/rollup-linux-arm64-gnu@4.44.1':
5824 + '@rollup/rollup-linux-arm64-gnu@4.44.2':
5825 optional: true
5826
5735 - '@rollup/rollup-linux-arm64-musl@4.44.1':
5827 + '@rollup/rollup-linux-arm64-musl@4.44.2':
5828 optional: true
5829
5738 - '@rollup/rollup-linux-loongarch64-gnu@4.44.1':
5830 + '@rollup/rollup-linux-loongarch64-gnu@4.44.2':
5831 optional: true
5832
5741 - '@rollup/rollup-linux-powerpc64le-gnu@4.44.1':
5833 + '@rollup/rollup-linux-powerpc64le-gnu@4.44.2':
5834 optional: true
5835
5744 - '@rollup/rollup-linux-riscv64-gnu@4.44.1':
5836 + '@rollup/rollup-linux-riscv64-gnu@4.44.2':
5837 optional: true
5838
5747 - '@rollup/rollup-linux-riscv64-musl@4.44.1':
5839 + '@rollup/rollup-linux-riscv64-musl@4.44.2':
5840 optional: true
5841
5750 - '@rollup/rollup-linux-s390x-gnu@4.44.1':
5842 + '@rollup/rollup-linux-s390x-gnu@4.44.2':
5843 optional: true
5844
5753 - '@rollup/rollup-linux-x64-gnu@4.44.1':
5845 + '@rollup/rollup-linux-x64-gnu@4.44.2':
5846 optional: true
5847
5756 - '@rollup/rollup-linux-x64-musl@4.44.1':
5848 + '@rollup/rollup-linux-x64-musl@4.44.2':
5849 optional: true
5850
5759 - '@rollup/rollup-win32-arm64-msvc@4.44.1':
5851 + '@rollup/rollup-win32-arm64-msvc@4.44.2':
5852 optional: true
5853
5762 - '@rollup/rollup-win32-ia32-msvc@4.44.1':
5854 + '@rollup/rollup-win32-ia32-msvc@4.44.2':
5855 optional: true
5856
5765 - '@rollup/rollup-win32-x64-msvc@4.44.1':
5857 + '@rollup/rollup-win32-x64-msvc@4.44.2':
5858 optional: true
5859
5860 '@sec-ant/readable-stream@0.4.1': {}
@@ -5817,13 +5909,13 @@ snapshots:
5909
5910 '@singulio/app-auth-search@0.0.3':
5911 dependencies:
5820 - algoliasearch: 5.29.0
5912 + algoliasearch: 5.32.0
5913
5822 - '@stylistic/eslint-plugin@5.0.0(eslint@9.30.0(jiti@2.4.2))':
5914 + '@stylistic/eslint-plugin@5.1.0(eslint@9.30.1(jiti@2.4.2))':
5915 dependencies:
5824 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
5825 - '@typescript-eslint/types': 8.35.0
5826 - eslint: 9.30.0(jiti@2.4.2)
5916 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
5917 + '@typescript-eslint/types': 8.36.0
5918 + eslint: 9.30.1(jiti@2.4.2)
5919 eslint-visitor-keys: 4.2.1
5920 espree: 10.4.0
5921 estraverse: 5.3.0
@@ -5912,12 +6004,12 @@ snapshots:
6004 '@tailwindcss/oxide-win32-arm64-msvc': 4.1.11
6005 '@tailwindcss/oxide-win32-x64-msvc': 4.1.11
6006
5915 - '@tailwindcss/vite@4.1.11(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6007 + '@tailwindcss/vite@4.1.11(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6008 dependencies:
6009 '@tailwindcss/node': 4.1.11
6010 '@tailwindcss/oxide': 4.1.11
6011 tailwindcss: 4.1.11
5920 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6012 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6013
6014 '@trysound/sax@0.2.0': {}
6015
@@ -5946,7 +6038,7 @@ snapshots:
6038 '@types/fs-extra@11.0.4':
6039 dependencies:
6040 '@types/jsonfile': 6.1.4
5949 - '@types/node': 24.0.8
6041 + '@types/node': 24.0.13
6042
6043 '@types/hast@3.0.4':
6044 dependencies:
@@ -5954,7 +6046,7 @@ snapshots:
6046
6047 '@types/jsdom@21.1.7':
6048 dependencies:
5957 - '@types/node': 24.0.8
6049 + '@types/node': 24.0.13
6050 '@types/tough-cookie': 4.0.5
6051 parse5: 7.3.0
6052
@@ -5962,7 +6054,7 @@ snapshots:
6054
6055 '@types/jsonfile@6.1.4':
6056 dependencies:
5965 - '@types/node': 24.0.8
6057 + '@types/node': 24.0.13
6058
6059 '@types/katex@0.16.7': {}
6060
@@ -5970,9 +6062,9 @@ snapshots:
6062
6063 '@types/lodash-es@4.17.12':
6064 dependencies:
5973 - '@types/lodash': 4.17.19
6065 + '@types/lodash': 4.17.20
6066
5975 - '@types/lodash@4.17.19': {}
6067 + '@types/lodash@4.17.20': {}
6068
6069 '@types/markdown-it@14.1.2':
6070 dependencies:
@@ -5989,7 +6081,7 @@ snapshots:
6081
6082 '@types/ms@2.1.0': {}
6083
5992 - '@types/node@24.0.8':
6084 + '@types/node@24.0.13':
6085 dependencies:
6086 undici-types: 7.8.0
6087
@@ -6013,18 +6105,18 @@ snapshots:
6105
6106 '@types/yauzl@2.10.3':
6107 dependencies:
6016 - '@types/node': 24.0.8
6108 + '@types/node': 24.0.13
6109 optional: true
6110
6019 - '@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)':
6111 + '@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
6112 dependencies:
6113 '@eslint-community/regexpp': 4.12.1
6022 - '@typescript-eslint/parser': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6023 - '@typescript-eslint/scope-manager': 8.35.0
6024 - '@typescript-eslint/type-utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6025 - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6026 - '@typescript-eslint/visitor-keys': 8.35.0
6027 - eslint: 9.30.0(jiti@2.4.2)
6114 + '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
6115 + '@typescript-eslint/scope-manager': 8.36.0
6116 + '@typescript-eslint/type-utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
6117 + '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
6118 + '@typescript-eslint/visitor-keys': 8.36.0
6119 + eslint: 9.30.1(jiti@2.4.2)
6120 graphemer: 1.4.0
6121 ignore: 7.0.5
6122 natural-compare: 1.4.0
@@ -6033,55 +6125,55 @@ snapshots:
6125 transitivePeerDependencies:
6126 - supports-color
6127
6036 - '@typescript-eslint/parser@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6128 + '@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
6129 dependencies:
6038 - '@typescript-eslint/scope-manager': 8.35.0
6039 - '@typescript-eslint/types': 8.35.0
6040 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
6041 - '@typescript-eslint/visitor-keys': 8.35.0
6130 + '@typescript-eslint/scope-manager': 8.36.0
6131 + '@typescript-eslint/types': 8.36.0
6132 + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
6133 + '@typescript-eslint/visitor-keys': 8.36.0
6134 debug: 4.4.1(supports-color@8.1.1)
6043 - eslint: 9.30.0(jiti@2.4.2)
6135 + eslint: 9.30.1(jiti@2.4.2)
6136 typescript: 5.8.3
6137 transitivePeerDependencies:
6138 - supports-color
6139
6048 - '@typescript-eslint/project-service@8.35.0(typescript@5.8.3)':
6140 + '@typescript-eslint/project-service@8.36.0(typescript@5.8.3)':
6141 dependencies:
6050 - '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
6051 - '@typescript-eslint/types': 8.35.0
6142 + '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3)
6143 + '@typescript-eslint/types': 8.36.0
6144 debug: 4.4.1(supports-color@8.1.1)
6145 typescript: 5.8.3
6146 transitivePeerDependencies:
6147 - supports-color
6148
6057 - '@typescript-eslint/scope-manager@8.35.0':
6149 + '@typescript-eslint/scope-manager@8.36.0':
6150 dependencies:
6059 - '@typescript-eslint/types': 8.35.0
6060 - '@typescript-eslint/visitor-keys': 8.35.0
6151 + '@typescript-eslint/types': 8.36.0
6152 + '@typescript-eslint/visitor-keys': 8.36.0
6153
6062 - '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.8.3)':
6154 + '@typescript-eslint/tsconfig-utils@8.36.0(typescript@5.8.3)':
6155 dependencies:
6156 typescript: 5.8.3
6157
6066 - '@typescript-eslint/type-utils@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6158 + '@typescript-eslint/type-utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
6159 dependencies:
6068 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
6069 - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6160 + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
6161 + '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
6162 debug: 4.4.1(supports-color@8.1.1)
6071 - eslint: 9.30.0(jiti@2.4.2)
6163 + eslint: 9.30.1(jiti@2.4.2)
6164 ts-api-utils: 2.1.0(typescript@5.8.3)
6165 typescript: 5.8.3
6166 transitivePeerDependencies:
6167 - supports-color
6168
6077 - '@typescript-eslint/types@8.35.0': {}
6169 + '@typescript-eslint/types@8.36.0': {}
6170
6079 - '@typescript-eslint/typescript-estree@8.35.0(typescript@5.8.3)':
6171 + '@typescript-eslint/typescript-estree@8.36.0(typescript@5.8.3)':
6172 dependencies:
6081 - '@typescript-eslint/project-service': 8.35.0(typescript@5.8.3)
6082 - '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.8.3)
6083 - '@typescript-eslint/types': 8.35.0
6084 - '@typescript-eslint/visitor-keys': 8.35.0
6173 + '@typescript-eslint/project-service': 8.36.0(typescript@5.8.3)
6174 + '@typescript-eslint/tsconfig-utils': 8.36.0(typescript@5.8.3)
6175 + '@typescript-eslint/types': 8.36.0
6176 + '@typescript-eslint/visitor-keys': 8.36.0
6177 debug: 4.4.1(supports-color@8.1.1)
6178 fast-glob: 3.3.3
6179 is-glob: 4.0.3
@@ -6092,47 +6184,48 @@ snapshots:
6184 transitivePeerDependencies:
6185 - supports-color
6186
6095 - '@typescript-eslint/utils@8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)':
6187 + '@typescript-eslint/utils@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)':
6188 dependencies:
6097 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
6098 - '@typescript-eslint/scope-manager': 8.35.0
6099 - '@typescript-eslint/types': 8.35.0
6100 - '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.8.3)
6101 - eslint: 9.30.0(jiti@2.4.2)
6189 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
6190 + '@typescript-eslint/scope-manager': 8.36.0
6191 + '@typescript-eslint/types': 8.36.0
6192 + '@typescript-eslint/typescript-estree': 8.36.0(typescript@5.8.3)
6193 + eslint: 9.30.1(jiti@2.4.2)
6194 typescript: 5.8.3
6195 transitivePeerDependencies:
6196 - supports-color
6197
6106 - '@typescript-eslint/visitor-keys@8.35.0':
6198 + '@typescript-eslint/visitor-keys@8.36.0':
6199 dependencies:
6108 - '@typescript-eslint/types': 8.35.0
6200 + '@typescript-eslint/types': 8.36.0
6201 eslint-visitor-keys: 4.2.1
6202
6203 '@ungap/structured-clone@1.3.0': {}
6204
6113 - '@vitejs/plugin-vue-jsx@4.2.0(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6205 + '@vitejs/plugin-vue-jsx@5.0.1(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6206 dependencies:
6115 - '@babel/core': 7.27.7
6116 - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.7)
6117 - '@rolldown/pluginutils': 1.0.0-beta.21
6118 - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.7)
6119 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6207 + '@babel/core': 7.28.0
6208 + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0)
6209 + '@rolldown/pluginutils': 1.0.0-beta.26
6210 + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0)
6211 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6212 vue: 3.5.17(typescript@5.8.3)
6213 transitivePeerDependencies:
6214 - supports-color
6215
6124 - '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6216 + '@vitejs/plugin-vue@6.0.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6217 dependencies:
6126 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6218 + '@rolldown/pluginutils': 1.0.0-beta.19
6219 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6220 vue: 3.5.17(typescript@5.8.3)
6221
6129 - '@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.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6222 + '@vitest/eslint-plugin@1.3.4(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6223 dependencies:
6131 - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
6132 - eslint: 9.30.0(jiti@2.4.2)
6224 + '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
6225 + eslint: 9.30.1(jiti@2.4.2)
6226 optionalDependencies:
6227 typescript: 5.8.3
6135 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6228 + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6229 transitivePeerDependencies:
6230 - supports-color
6231
@@ -6141,16 +6234,16 @@ snapshots:
6234 '@types/chai': 5.2.2
6235 '@vitest/spy': 3.2.4
6236 '@vitest/utils': 3.2.4
6144 - chai: 5.2.0
6237 + chai: 5.2.1
6238 tinyrainbow: 2.0.0
6239
6147 - '@vitest/mocker@3.2.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6240 + '@vitest/mocker@3.2.4(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))':
6241 dependencies:
6242 '@vitest/spy': 3.2.4
6243 estree-walker: 3.0.3
6244 magic-string: 0.30.17
6245 optionalDependencies:
6153 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6246 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
6247
6248 '@vitest/pretty-format@3.2.4':
6249 dependencies:
@@ -6178,50 +6271,50 @@ snapshots:
6271 loupe: 3.1.4
6272 tinyrainbow: 2.0.0
6273
6181 - '@volar/language-core@2.4.15':
6274 + '@volar/language-core@2.4.17':
6275 dependencies:
6183 - '@volar/source-map': 2.4.15
6276 + '@volar/source-map': 2.4.17
6277
6185 - '@volar/source-map@2.4.15': {}
6278 + '@volar/source-map@2.4.17': {}
6279
6187 - '@volar/typescript@2.4.15':
6280 + '@volar/typescript@2.4.17':
6281 dependencies:
6189 - '@volar/language-core': 2.4.15
6282 + '@volar/language-core': 2.4.17
6283 path-browserify: 1.0.1
6284 vscode-uri: 3.1.0
6285
6286 '@vue/babel-helper-vue-transform-on@1.4.0': {}
6287
6195 - '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.27.7)':
6288 + '@vue/babel-plugin-jsx@1.4.0(@babel/core@7.28.0)':
6289 dependencies:
6290 '@babel/helper-module-imports': 7.27.1
6291 '@babel/helper-plugin-utils': 7.27.1
6199 - '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.7)
6292 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0)
6293 '@babel/template': 7.27.2
6201 - '@babel/traverse': 7.27.7
6202 - '@babel/types': 7.27.7
6294 + '@babel/traverse': 7.28.0
6295 + '@babel/types': 7.28.0
6296 '@vue/babel-helper-vue-transform-on': 1.4.0
6204 - '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.27.7)
6297 + '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.0)
6298 '@vue/shared': 3.5.17
6299 optionalDependencies:
6207 - '@babel/core': 7.27.7
6300 + '@babel/core': 7.28.0
6301 transitivePeerDependencies:
6302 - supports-color
6303
6211 - '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.27.7)':
6304 + '@vue/babel-plugin-resolve-type@1.4.0(@babel/core@7.28.0)':
6305 dependencies:
6306 '@babel/code-frame': 7.27.1
6214 - '@babel/core': 7.27.7
6307 + '@babel/core': 7.28.0
6308 '@babel/helper-module-imports': 7.27.1
6309 '@babel/helper-plugin-utils': 7.27.1
6217 - '@babel/parser': 7.27.7
6310 + '@babel/parser': 7.28.0
6311 '@vue/compiler-sfc': 3.5.17
6312 transitivePeerDependencies:
6313 - supports-color
6314
6315 '@vue/compiler-core@3.5.17':
6316 dependencies:
6224 - '@babel/parser': 7.27.7
6317 + '@babel/parser': 7.28.0
6318 '@vue/shared': 3.5.17
6319 entities: 4.5.0
6320 estree-walker: 2.0.2
@@ -6234,7 +6327,7 @@ snapshots:
6327
6328 '@vue/compiler-sfc@3.5.17':
6329 dependencies:
6237 - '@babel/parser': 7.27.7
6330 + '@babel/parser': 7.28.0
6331 '@vue/compiler-core': 3.5.17
6332 '@vue/compiler-dom': 3.5.17
6333 '@vue/compiler-ssr': 3.5.17
@@ -6260,14 +6353,14 @@ snapshots:
6353 dependencies:
6354 '@vue/devtools-kit': 7.7.7
6355
6263 - '@vue/devtools-core@7.7.7(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6356 + '@vue/devtools-core@7.7.7(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))':
6357 dependencies:
6358 '@vue/devtools-kit': 7.7.7
6359 '@vue/devtools-shared': 7.7.7
6360 mitt: 3.0.1
6361 nanoid: 5.1.5
6362 pathe: 2.0.3
6270 - vite-hot-client: 2.0.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
6363 + vite-hot-client: 2.1.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
6364 vue: 3.5.17(typescript@5.8.3)
6365 transitivePeerDependencies:
6366 - vite
@@ -6286,14 +6379,14 @@ snapshots:
6379 dependencies:
6380 rfdc: 1.4.1
6381
6289 - '@vue/language-core@2.2.10(typescript@5.8.3)':
6382 + '@vue/language-core@3.0.1(typescript@5.8.3)':
6383 dependencies:
6291 - '@volar/language-core': 2.4.15
6384 + '@volar/language-core': 2.4.17
6385 '@vue/compiler-dom': 3.5.17
6386 '@vue/compiler-vue2': 2.7.16
6387 '@vue/shared': 3.5.17
6295 - alien-signals: 1.0.13
6296 - minimatch: 9.0.5
6388 + alien-signals: 2.0.5
6389 + minimatch: 10.0.3
6390 muggle-string: 0.4.1
6391 path-browserify: 1.0.1
6392 optionalDependencies:
@@ -6326,37 +6419,37 @@ snapshots:
6419 '@vue/test-utils@2.4.6':
6420 dependencies:
6421 js-beautify: 1.15.4
6329 - vue-component-type-helpers: 2.2.10
6422 + vue-component-type-helpers: 2.2.12
6423
6424 '@vue/tsconfig@0.7.0(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))':
6425 optionalDependencies:
6426 typescript: 5.8.3
6427 vue: 3.5.17(typescript@5.8.3)
6428
6336 - '@vueuse/core@13.4.0(vue@3.5.17(typescript@5.8.3))':
6429 + '@vueuse/core@13.5.0(vue@3.5.17(typescript@5.8.3))':
6430 dependencies:
6431 '@types/web-bluetooth': 0.0.21
6339 - '@vueuse/metadata': 13.4.0
6340 - '@vueuse/shared': 13.4.0(vue@3.5.17(typescript@5.8.3))
6432 + '@vueuse/metadata': 13.5.0
6433 + '@vueuse/shared': 13.5.0(vue@3.5.17(typescript@5.8.3))
6434 vue: 3.5.17(typescript@5.8.3)
6435
6343 - '@vueuse/metadata@13.4.0': {}
6436 + '@vueuse/metadata@13.5.0': {}
6437
6438 '@vueuse/motion@3.0.3(vue@3.5.17(typescript@5.8.3))':
6439 dependencies:
6347 - '@vueuse/core': 13.4.0(vue@3.5.17(typescript@5.8.3))
6348 - '@vueuse/shared': 13.4.0(vue@3.5.17(typescript@5.8.3))
6440 + '@vueuse/core': 13.5.0(vue@3.5.17(typescript@5.8.3))
6441 + '@vueuse/shared': 13.5.0(vue@3.5.17(typescript@5.8.3))
6442 defu: 6.1.4
6443 framesync: 6.1.2
6444 popmotion: 11.0.5
6445 style-value-types: 5.1.2
6446 vue: 3.5.17(typescript@5.8.3)
6447 optionalDependencies:
6355 - '@nuxt/kit': 3.17.5
6448 + '@nuxt/kit': 3.17.6
6449 transitivePeerDependencies:
6450 - magicast
6451
6359 - '@vueuse/shared@13.4.0(vue@3.5.17(typescript@5.8.3))':
6452 + '@vueuse/shared@13.5.0(vue@3.5.17(typescript@5.8.3))':
6453 dependencies:
6454 vue: 3.5.17(typescript@5.8.3)
6455
@@ -6370,7 +6463,7 @@ snapshots:
6463
6464 acorn@8.15.0: {}
6465
6373 - agent-base@7.1.3: {}
6466 + agent-base@7.1.4: {}
6467
6468 aggregate-error@3.1.0:
6469 dependencies:
@@ -6384,23 +6477,23 @@ snapshots:
6477 json-schema-traverse: 0.4.1
6478 uri-js: 4.4.1
6479
6387 - algoliasearch@5.29.0:
6480 + algoliasearch@5.32.0:
6481 dependencies:
6389 - '@algolia/client-abtesting': 5.29.0
6390 - '@algolia/client-analytics': 5.29.0
6391 - '@algolia/client-common': 5.29.0
6392 - '@algolia/client-insights': 5.29.0
6393 - '@algolia/client-personalization': 5.29.0
6394 - '@algolia/client-query-suggestions': 5.29.0
6395 - '@algolia/client-search': 5.29.0
6396 - '@algolia/ingestion': 1.29.0
6397 - '@algolia/monitoring': 1.29.0
6398 - '@algolia/recommend': 5.29.0
6399 - '@algolia/requester-browser-xhr': 5.29.0
6400 - '@algolia/requester-fetch': 5.29.0
6401 - '@algolia/requester-node-http': 5.29.0
6482 + '@algolia/client-abtesting': 5.32.0
6483 + '@algolia/client-analytics': 5.32.0
6484 + '@algolia/client-common': 5.32.0
6485 + '@algolia/client-insights': 5.32.0
6486 + '@algolia/client-personalization': 5.32.0
6487 + '@algolia/client-query-suggestions': 5.32.0
6488 + '@algolia/client-search': 5.32.0
6489 + '@algolia/ingestion': 1.32.0
6490 + '@algolia/monitoring': 1.32.0
6491 + '@algolia/recommend': 5.32.0
6492 + '@algolia/requester-browser-xhr': 5.32.0
6493 + '@algolia/requester-fetch': 5.32.0
6494 + '@algolia/requester-node-http': 5.32.0
6495
6403 - alien-signals@1.0.13: {}
6496 + alien-signals@2.0.5: {}
6497
6498 ansi-colors@4.1.3: {}
6499
@@ -6420,7 +6513,7 @@ snapshots:
6513
6514 ansis@4.1.0: {}
6515
6423 - apexcharts@4.7.0:
6516 + apexcharts@5.2.0:
6517 dependencies:
6518 '@svgdotjs/svg.draggable.js': 3.0.6(@svgdotjs/svg.js@3.2.4)
6519 '@svgdotjs/svg.filter.js': 3.0.9
@@ -6508,8 +6601,8 @@ snapshots:
6601
6602 browserslist@4.25.1:
6603 dependencies:
6511 - caniuse-lite: 1.0.30001726
6512 - electron-to-chromium: 1.5.177
6604 + caniuse-lite: 1.0.30001727
6605 + electron-to-chromium: 1.5.182
6606 node-releases: 2.0.19
6607 update-browserslist-db: 1.1.3(browserslist@4.25.1)
6608
@@ -6540,7 +6633,7 @@ snapshots:
6633 ohash: 2.0.11
6634 pathe: 2.0.3
6635 perfect-debounce: 1.0.0
6543 - pkg-types: 2.1.1
6636 + pkg-types: 2.2.0
6637 rc9: 2.1.2
6638 optional: true
6639
@@ -6564,13 +6657,13 @@ snapshots:
6657
6658 camelcase@6.3.0: {}
6659
6567 - caniuse-lite@1.0.30001726: {}
6660 + caniuse-lite@1.0.30001727: {}
6661
6662 caseless@0.12.0: {}
6663
6664 ccount@2.0.1: {}
6665
6573 - chai@5.2.0:
6666 + chai@5.2.1:
6667 dependencies:
6668 assertion-error: 2.0.1
6669 check-error: 2.1.1
@@ -6599,7 +6692,7 @@ snapshots:
6692
6693 chownr@3.0.0: {}
6694
6602 - ci-info@4.2.0: {}
6695 + ci-info@4.3.0: {}
6696
6697 citty@0.1.6:
6698 dependencies:
@@ -6700,7 +6793,7 @@ snapshots:
6793 dependencies:
6794 is-what: 4.1.16
6795
6703 - core-js-compat@3.43.0:
6796 + core-js-compat@3.44.0:
6797 dependencies:
6798 browserslist: 4.25.1
6799
@@ -6729,10 +6822,10 @@ snapshots:
6822 '@emotion/hash': 0.8.0
6823 csstype: 3.0.11
6824
6732 - css-select@5.1.0:
6825 + css-select@5.2.2:
6826 dependencies:
6827 boolbase: 1.0.0
6735 - css-what: 6.1.0
6828 + css-what: 6.2.2
6829 domhandler: 5.0.3
6830 domutils: 3.2.2
6831 nth-check: 2.1.1
@@ -6747,7 +6840,7 @@ snapshots:
6840 mdn-data: 2.0.30
6841 source-map-js: 1.2.1
6842
6750 - css-what@6.1.0: {}
6843 + css-what@6.2.2: {}
6844
6845 cssesc@3.0.0: {}
6846
@@ -6764,7 +6857,7 @@ snapshots:
6857
6858 csstype@3.1.3: {}
6859
6767 - cypress@14.5.0:
6860 + cypress@14.5.1:
6861 dependencies:
6862 '@cypress/request': 3.0.8
6863 '@cypress/xvfb': 1.2.4(supports-color@8.1.1)
@@ -6777,7 +6870,7 @@ snapshots:
6870 cachedir: 2.4.0
6871 chalk: 4.1.2
6872 check-more-types: 2.24.0
6780 - ci-info: 4.2.0
6873 + ci-info: 4.3.0
6874 cli-cursor: 3.1.0
6875 cli-table3: 0.6.1
6876 commander: 6.2.1
@@ -6844,7 +6937,7 @@ snapshots:
6937 optionalDependencies:
6938 supports-color: 8.1.1
6939
6847 - decimal.js@10.5.0: {}
6940 + decimal.js@10.6.0: {}
6941
6942 decode-named-character-reference@1.2.0:
6943 dependencies:
@@ -6873,8 +6966,8 @@ snapshots:
6966
6967 depcheck@1.4.7:
6968 dependencies:
6876 - '@babel/parser': 7.27.7
6877 - '@babel/traverse': 7.27.7
6969 + '@babel/parser': 7.28.0
6970 + '@babel/traverse': 7.28.0
6971 '@vue/compiler-sfc': 3.5.17
6972 callsite: 1.0.0
6973 camelcase: 6.3.0
@@ -6968,7 +7061,7 @@ snapshots:
7061 minimatch: 9.0.1
7062 semver: 7.7.2
7063
6971 - electron-to-chromium@1.5.177: {}
7064 + electron-to-chromium@1.5.182: {}
7065
7066 emoji-regex@8.0.0: {}
7067
@@ -6998,6 +7091,8 @@ snapshots:
7091
7092 error-stack-parser-es@0.1.5: {}
7093
7094 + error-stack-parser-es@1.0.5: {}
7095 +
7096 errx@0.1.0:
7097 optional: true
7098
@@ -7018,33 +7113,34 @@ snapshots:
7113 has-tostringtag: 1.0.2
7114 hasown: 2.0.2
7115
7021 - esbuild@0.25.5:
7116 + esbuild@0.25.6:
7117 optionalDependencies:
7023 - '@esbuild/aix-ppc64': 0.25.5
7024 - '@esbuild/android-arm': 0.25.5
7025 - '@esbuild/android-arm64': 0.25.5
7026 - '@esbuild/android-x64': 0.25.5
7027 - '@esbuild/darwin-arm64': 0.25.5
7028 - '@esbuild/darwin-x64': 0.25.5
7029 - '@esbuild/freebsd-arm64': 0.25.5
7030 - '@esbuild/freebsd-x64': 0.25.5
7031 - '@esbuild/linux-arm': 0.25.5
7032 - '@esbuild/linux-arm64': 0.25.5
7033 - '@esbuild/linux-ia32': 0.25.5
7034 - '@esbuild/linux-loong64': 0.25.5
7035 - '@esbuild/linux-mips64el': 0.25.5
7036 - '@esbuild/linux-ppc64': 0.25.5
7037 - '@esbuild/linux-riscv64': 0.25.5
7038 - '@esbuild/linux-s390x': 0.25.5
7039 - '@esbuild/linux-x64': 0.25.5
7040 - '@esbuild/netbsd-arm64': 0.25.5
7041 - '@esbuild/netbsd-x64': 0.25.5
7042 - '@esbuild/openbsd-arm64': 0.25.5
7043 - '@esbuild/openbsd-x64': 0.25.5
7044 - '@esbuild/sunos-x64': 0.25.5
7045 - '@esbuild/win32-arm64': 0.25.5
7046 - '@esbuild/win32-ia32': 0.25.5
7047 - '@esbuild/win32-x64': 0.25.5
7118 + '@esbuild/aix-ppc64': 0.25.6
7119 + '@esbuild/android-arm': 0.25.6
7120 + '@esbuild/android-arm64': 0.25.6
7121 + '@esbuild/android-x64': 0.25.6
7122 + '@esbuild/darwin-arm64': 0.25.6
7123 + '@esbuild/darwin-x64': 0.25.6
7124 + '@esbuild/freebsd-arm64': 0.25.6
7125 + '@esbuild/freebsd-x64': 0.25.6
7126 + '@esbuild/linux-arm': 0.25.6
7127 + '@esbuild/linux-arm64': 0.25.6
7128 + '@esbuild/linux-ia32': 0.25.6
7129 + '@esbuild/linux-loong64': 0.25.6
7130 + '@esbuild/linux-mips64el': 0.25.6
7131 + '@esbuild/linux-ppc64': 0.25.6
7132 + '@esbuild/linux-riscv64': 0.25.6
7133 + '@esbuild/linux-s390x': 0.25.6
7134 + '@esbuild/linux-x64': 0.25.6
7135 + '@esbuild/netbsd-arm64': 0.25.6
7136 + '@esbuild/netbsd-x64': 0.25.6
7137 + '@esbuild/openbsd-arm64': 0.25.6
7138 + '@esbuild/openbsd-x64': 0.25.6
7139 + '@esbuild/openharmony-arm64': 0.25.6
7140 + '@esbuild/sunos-x64': 0.25.6
7141 + '@esbuild/win32-arm64': 0.25.6
7142 + '@esbuild/win32-ia32': 0.25.6
7143 + '@esbuild/win32-x64': 0.25.6
7144
7145 escalade@3.2.0: {}
7146
@@ -7054,67 +7150,67 @@ snapshots:
7150
7151 escape-string-regexp@5.0.0: {}
7152
7057 - eslint-compat-utils@0.5.1(eslint@9.30.0(jiti@2.4.2)):
7153 + eslint-compat-utils@0.5.1(eslint@9.30.1(jiti@2.4.2)):
7154 dependencies:
7059 - eslint: 9.30.0(jiti@2.4.2)
7155 + eslint: 9.30.1(jiti@2.4.2)
7156 semver: 7.7.2
7157
7062 - eslint-compat-utils@0.6.5(eslint@9.30.0(jiti@2.4.2)):
7158 + eslint-compat-utils@0.6.5(eslint@9.30.1(jiti@2.4.2)):
7159 dependencies:
7064 - eslint: 9.30.0(jiti@2.4.2)
7160 + eslint: 9.30.1(jiti@2.4.2)
7161 semver: 7.7.2
7162
7067 - eslint-config-flat-gitignore@2.1.0(eslint@9.30.0(jiti@2.4.2)):
7163 + eslint-config-flat-gitignore@2.1.0(eslint@9.30.1(jiti@2.4.2)):
7164 dependencies:
7069 - '@eslint/compat': 1.3.1(eslint@9.30.0(jiti@2.4.2))
7070 - eslint: 9.30.0(jiti@2.4.2)
7165 + '@eslint/compat': 1.3.1(eslint@9.30.1(jiti@2.4.2))
7166 + eslint: 9.30.1(jiti@2.4.2)
7167
7168 eslint-flat-config-utils@2.1.0:
7169 dependencies:
7170 pathe: 2.0.3
7171
7076 - eslint-json-compat-utils@0.2.1(eslint@9.30.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
7172 + eslint-json-compat-utils@0.2.1(eslint@9.30.1(jiti@2.4.2))(jsonc-eslint-parser@2.4.0):
7173 dependencies:
7078 - eslint: 9.30.0(jiti@2.4.2)
7174 + eslint: 9.30.1(jiti@2.4.2)
7175 esquery: 1.6.0
7176 jsonc-eslint-parser: 2.4.0
7177
7082 - eslint-merge-processors@2.0.0(eslint@9.30.0(jiti@2.4.2)):
7178 + eslint-merge-processors@2.0.0(eslint@9.30.1(jiti@2.4.2)):
7179 dependencies:
7084 - eslint: 9.30.0(jiti@2.4.2)
7180 + eslint: 9.30.1(jiti@2.4.2)
7181
7086 - eslint-plugin-antfu@3.1.1(eslint@9.30.0(jiti@2.4.2)):
7182 + eslint-plugin-antfu@3.1.1(eslint@9.30.1(jiti@2.4.2)):
7183 dependencies:
7088 - eslint: 9.30.0(jiti@2.4.2)
7184 + eslint: 9.30.1(jiti@2.4.2)
7185
7090 - eslint-plugin-command@3.3.1(eslint@9.30.0(jiti@2.4.2)):
7186 + eslint-plugin-command@3.3.1(eslint@9.30.1(jiti@2.4.2)):
7187 dependencies:
7188 '@es-joy/jsdoccomment': 0.50.2
7093 - eslint: 9.30.0(jiti@2.4.2)
7189 + eslint: 9.30.1(jiti@2.4.2)
7190
7095 - eslint-plugin-es-x@7.8.0(eslint@9.30.0(jiti@2.4.2)):
7191 + eslint-plugin-es-x@7.8.0(eslint@9.30.1(jiti@2.4.2)):
7192 dependencies:
7097 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7193 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7194 '@eslint-community/regexpp': 4.12.1
7099 - eslint: 9.30.0(jiti@2.4.2)
7100 - eslint-compat-utils: 0.5.1(eslint@9.30.0(jiti@2.4.2))
7195 + eslint: 9.30.1(jiti@2.4.2)
7196 + eslint-compat-utils: 0.5.1(eslint@9.30.1(jiti@2.4.2))
7197
7102 - eslint-plugin-import-lite@0.3.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3):
7198 + eslint-plugin-import-lite@0.3.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
7199 dependencies:
7104 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7105 - '@typescript-eslint/types': 8.35.0
7106 - eslint: 9.30.0(jiti@2.4.2)
7200 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7201 + '@typescript-eslint/types': 8.36.0
7202 + eslint: 9.30.1(jiti@2.4.2)
7203 optionalDependencies:
7204 typescript: 5.8.3
7205
7110 - eslint-plugin-jsdoc@51.2.3(eslint@9.30.0(jiti@2.4.2)):
7206 + eslint-plugin-jsdoc@51.3.4(eslint@9.30.1(jiti@2.4.2)):
7207 dependencies:
7208 '@es-joy/jsdoccomment': 0.52.0
7209 are-docs-informative: 0.0.2
7210 comment-parser: 1.4.1
7211 debug: 4.4.1(supports-color@8.1.1)
7212 escape-string-regexp: 4.0.0
7117 - eslint: 9.30.0(jiti@2.4.2)
7213 + eslint: 9.30.1(jiti@2.4.2)
7214 espree: 10.4.0
7215 esquery: 1.6.0
7216 parse-imports-exports: 0.2.4
@@ -7123,12 +7219,12 @@ snapshots:
7219 transitivePeerDependencies:
7220 - supports-color
7221
7126 - eslint-plugin-jsonc@2.20.1(eslint@9.30.0(jiti@2.4.2)):
7222 + eslint-plugin-jsonc@2.20.1(eslint@9.30.1(jiti@2.4.2)):
7223 dependencies:
7128 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7129 - eslint: 9.30.0(jiti@2.4.2)
7130 - eslint-compat-utils: 0.6.5(eslint@9.30.0(jiti@2.4.2))
7131 - eslint-json-compat-utils: 0.2.1(eslint@9.30.0(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
7224 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7225 + eslint: 9.30.1(jiti@2.4.2)
7226 + eslint-compat-utils: 0.6.5(eslint@9.30.1(jiti@2.4.2))
7227 + eslint-json-compat-utils: 0.2.1(eslint@9.30.1(jiti@2.4.2))(jsonc-eslint-parser@2.4.0)
7228 espree: 10.4.0
7229 graphemer: 1.4.0
7230 jsonc-eslint-parser: 2.4.0
@@ -7137,13 +7233,12 @@ snapshots:
7233 transitivePeerDependencies:
7234 - '@eslint/json'
7235
7140 - eslint-plugin-n@17.20.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3):
7236 + eslint-plugin-n@17.21.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
7237 dependencies:
7142 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7143 - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
7238 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7239 enhanced-resolve: 5.18.2
7145 - eslint: 9.30.0(jiti@2.4.2)
7146 - eslint-plugin-es-x: 7.8.0(eslint@9.30.0(jiti@2.4.2))
7240 + eslint: 9.30.1(jiti@2.4.2)
7241 + eslint-plugin-es-x: 7.8.0(eslint@9.30.1(jiti@2.4.2))
7242 get-tsconfig: 4.10.1
7243 globals: 15.15.0
7244 ignore: 5.3.2
@@ -7151,24 +7246,23 @@ snapshots:
7246 semver: 7.7.2
7247 ts-declaration-location: 1.0.7(typescript@5.8.3)
7248 transitivePeerDependencies:
7154 - - supports-color
7249 - typescript
7250
7251 eslint-plugin-no-only-tests@3.3.0: {}
7252
7159 - eslint-plugin-perfectionist@4.15.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3):
7253 + eslint-plugin-perfectionist@4.15.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3):
7254 dependencies:
7161 - '@typescript-eslint/types': 8.35.0
7162 - '@typescript-eslint/utils': 8.35.0(eslint@9.30.0(jiti@2.4.2))(typescript@5.8.3)
7163 - eslint: 9.30.0(jiti@2.4.2)
7255 + '@typescript-eslint/types': 8.36.0
7256 + '@typescript-eslint/utils': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
7257 + eslint: 9.30.1(jiti@2.4.2)
7258 natural-orderby: 5.0.0
7259 transitivePeerDependencies:
7260 - supports-color
7261 - typescript
7262
7169 - eslint-plugin-pnpm@0.3.1(eslint@9.30.0(jiti@2.4.2)):
7263 + eslint-plugin-pnpm@0.3.1(eslint@9.30.1(jiti@2.4.2)):
7264 dependencies:
7171 - eslint: 9.30.0(jiti@2.4.2)
7265 + eslint: 9.30.1(jiti@2.4.2)
7266 find-up-simple: 1.0.1
7267 jsonc-eslint-parser: 2.4.0
7268 pathe: 2.0.3
@@ -7176,39 +7270,39 @@ snapshots:
7270 tinyglobby: 0.2.14
7271 yaml-eslint-parser: 1.3.0
7272
7179 - eslint-plugin-regexp@2.9.0(eslint@9.30.0(jiti@2.4.2)):
7273 + eslint-plugin-regexp@2.9.0(eslint@9.30.1(jiti@2.4.2)):
7274 dependencies:
7181 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7275 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7276 '@eslint-community/regexpp': 4.12.1
7277 comment-parser: 1.4.1
7184 - eslint: 9.30.0(jiti@2.4.2)
7278 + eslint: 9.30.1(jiti@2.4.2)
7279 jsdoc-type-pratt-parser: 4.1.0
7280 refa: 0.12.1
7281 regexp-ast-analysis: 0.7.1
7282 scslre: 0.3.0
7283
7190 - eslint-plugin-toml@0.12.0(eslint@9.30.0(jiti@2.4.2)):
7284 + eslint-plugin-toml@0.12.0(eslint@9.30.1(jiti@2.4.2)):
7285 dependencies:
7286 debug: 4.4.1(supports-color@8.1.1)
7193 - eslint: 9.30.0(jiti@2.4.2)
7194 - eslint-compat-utils: 0.6.5(eslint@9.30.0(jiti@2.4.2))
7287 + eslint: 9.30.1(jiti@2.4.2)
7288 + eslint-compat-utils: 0.6.5(eslint@9.30.1(jiti@2.4.2))
7289 lodash: 4.17.21
7290 toml-eslint-parser: 0.10.0
7291 transitivePeerDependencies:
7292 - supports-color
7293
7200 - eslint-plugin-unicorn@59.0.1(eslint@9.30.0(jiti@2.4.2)):
7294 + eslint-plugin-unicorn@59.0.1(eslint@9.30.1(jiti@2.4.2)):
7295 dependencies:
7296 '@babel/helper-validator-identifier': 7.27.1
7203 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7297 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7298 '@eslint/plugin-kit': 0.2.8
7205 - ci-info: 4.2.0
7299 + ci-info: 4.3.0
7300 clean-regexp: 1.0.0
7207 - core-js-compat: 3.43.0
7208 - eslint: 9.30.0(jiti@2.4.2)
7301 + core-js-compat: 3.44.0
7302 + eslint: 9.30.1(jiti@2.4.2)
7303 esquery: 1.6.0
7304 find-up-simple: 1.0.1
7211 - globals: 16.2.0
7305 + globals: 16.3.0
7306 indent-string: 5.0.0
7307 is-builtin-module: 5.0.0
7308 jsesc: 3.1.0
@@ -7218,38 +7312,40 @@ snapshots:
7312 semver: 7.7.2
7313 strip-indent: 4.0.0
7314
7221 - 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)):
7315 + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2)):
7316 dependencies:
7223 - eslint: 9.30.0(jiti@2.4.2)
7317 + eslint: 9.30.1(jiti@2.4.2)
7318 optionalDependencies:
7225 - '@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)
7319 + '@typescript-eslint/eslint-plugin': 8.36.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
7320
7227 - 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))):
7321 + eslint-plugin-vue@10.3.0(@typescript-eslint/parser@8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3))(eslint@9.30.1(jiti@2.4.2))(vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2))):
7322 dependencies:
7229 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7230 - eslint: 9.30.0(jiti@2.4.2)
7323 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7324 + eslint: 9.30.1(jiti@2.4.2)
7325 natural-compare: 1.4.0
7326 nth-check: 2.1.1
7327 postcss-selector-parser: 6.1.2
7328 semver: 7.7.2
7235 - vue-eslint-parser: 10.1.4(eslint@9.30.0(jiti@2.4.2))
7329 + vue-eslint-parser: 10.2.0(eslint@9.30.1(jiti@2.4.2))
7330 xml-name-validator: 4.0.0
7331 + optionalDependencies:
7332 + '@typescript-eslint/parser': 8.36.0(eslint@9.30.1(jiti@2.4.2))(typescript@5.8.3)
7333
7238 - eslint-plugin-yml@1.18.0(eslint@9.30.0(jiti@2.4.2)):
7334 + eslint-plugin-yml@1.18.0(eslint@9.30.1(jiti@2.4.2)):
7335 dependencies:
7336 debug: 4.4.1(supports-color@8.1.1)
7337 escape-string-regexp: 4.0.0
7242 - eslint: 9.30.0(jiti@2.4.2)
7243 - eslint-compat-utils: 0.6.5(eslint@9.30.0(jiti@2.4.2))
7338 + eslint: 9.30.1(jiti@2.4.2)
7339 + eslint-compat-utils: 0.6.5(eslint@9.30.1(jiti@2.4.2))
7340 natural-compare: 1.4.0
7341 yaml-eslint-parser: 1.3.0
7342 transitivePeerDependencies:
7343 - supports-color
7344
7249 - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.0(jiti@2.4.2)):
7345 + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.17)(eslint@9.30.1(jiti@2.4.2)):
7346 dependencies:
7347 '@vue/compiler-sfc': 3.5.17
7252 - eslint: 9.30.0(jiti@2.4.2)
7348 + eslint: 9.30.1(jiti@2.4.2)
7349
7350 eslint-scope@8.4.0:
7351 dependencies:
@@ -7260,15 +7356,15 @@ snapshots:
7356
7357 eslint-visitor-keys@4.2.1: {}
7358
7263 - eslint@9.30.0(jiti@2.4.2):
7359 + eslint@9.30.1(jiti@2.4.2):
7360 dependencies:
7265 - '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.0(jiti@2.4.2))
7361 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.30.1(jiti@2.4.2))
7362 '@eslint-community/regexpp': 4.12.1
7363 '@eslint/config-array': 0.21.0
7364 '@eslint/config-helpers': 0.3.0
7365 '@eslint/core': 0.14.0
7366 '@eslint/eslintrc': 3.3.1
7271 - '@eslint/js': 9.30.0
7367 + '@eslint/js': 9.30.1
7368 '@eslint/plugin-kit': 0.3.3
7369 '@humanfs/node': 0.16.6
7370 '@humanwhocodes/module-importer': 1.0.1
@@ -7395,7 +7491,7 @@ snapshots:
7491 dependencies:
7492 homedir-polyfill: 1.0.3
7493
7398 - expect-type@1.2.1: {}
7494 + expect-type@1.2.2: {}
7495
7496 exsolve@1.0.7: {}
7497
@@ -7427,6 +7523,10 @@ snapshots:
7523
7524 fast-levenshtein@2.0.6: {}
7525
7526 + fast-xml-parser@5.2.5:
7527 + dependencies:
7528 + strnum: 2.1.1
7529 +
7530 fastq@1.19.1:
7531 dependencies:
7532 reusify: 1.1.0
@@ -7623,13 +7723,11 @@ snapshots:
7723 is-windows: 1.0.2
7724 which: 1.3.1
7725
7626 - globals@11.12.0: {}
7627 -
7726 globals@14.0.0: {}
7727
7728 globals@15.15.0: {}
7729
7632 - globals@16.2.0: {}
7730 + globals@16.3.0: {}
7731
7732 gopd@1.2.0: {}
7733
@@ -7696,7 +7794,7 @@ snapshots:
7794
7795 http-proxy-agent@7.0.2:
7796 dependencies:
7699 - agent-base: 7.1.3
7797 + agent-base: 7.1.4
7798 debug: 4.4.1(supports-color@8.1.1)
7799 transitivePeerDependencies:
7800 - supports-color
@@ -7709,7 +7807,7 @@ snapshots:
7807
7808 https-proxy-agent@7.0.6:
7809 dependencies:
7712 - agent-base: 7.1.3
7810 + agent-base: 7.1.4
7811 debug: 4.4.1(supports-color@8.1.1)
7812 transitivePeerDependencies:
7813 - supports-color
@@ -7874,7 +7972,7 @@ snapshots:
7972 dependencies:
7973 cssstyle: 4.6.0
7974 data-urls: 5.0.0
7877 - decimal.js: 10.5.0
7975 + decimal.js: 10.6.0
7976 html-encoding-sniffer: 4.0.0
7977 http-proxy-agent: 7.0.2
7978 https-proxy-agent: 7.0.6
@@ -7890,7 +7988,7 @@ snapshots:
7988 whatwg-encoding: 3.1.1
7989 whatwg-mimetype: 4.0.0
7990 whatwg-url: 14.2.0
7893 - ws: 8.18.2
7991 + ws: 8.18.3
7992 xml-name-validator: 5.0.0
7993 transitivePeerDependencies:
7994 - bufferutil
@@ -8023,7 +8121,7 @@ snapshots:
8121 local-pkg@1.1.1:
8122 dependencies:
8123 mlly: 1.7.4
8026 - pkg-types: 2.1.1
8124 + pkg-types: 2.2.0
8125 quansync: 0.2.10
8126
8127 locate-path@6.0.0:
@@ -8064,7 +8162,7 @@ snapshots:
8162
8163 magic-string@0.30.17:
8164 dependencies:
8067 - '@jridgewell/sourcemap-codec': 1.5.0
8165 + '@jridgewell/sourcemap-codec': 1.5.4
8166
8167 map-stream@0.1.0: {}
8168
@@ -8433,6 +8531,10 @@ snapshots:
8531
8532 min-indent@1.0.1: {}
8533
8534 + minimatch@10.0.3:
8535 + dependencies:
8536 + '@isaacs/brace-expansion': 5.0.0
8537 +
8538 minimatch@3.1.2:
8539 dependencies:
8540 brace-expansion: 1.1.12
@@ -8487,7 +8589,7 @@ snapshots:
8589 '@css-render/plugin-bem': 0.15.14(css-render@0.15.14)
8590 '@css-render/vue3-ssr': 0.15.14(vue@3.5.17(typescript@5.8.3))
8591 '@types/katex': 0.16.7
8490 - '@types/lodash': 4.17.19
8592 + '@types/lodash': 4.17.20
8593 '@types/lodash-es': 4.17.12
8594 async-validator: 4.2.5
8595 css-render: 0.15.14
@@ -8557,7 +8659,7 @@ snapshots:
8659 citty: 0.1.6
8660 consola: 3.4.2
8661 pathe: 2.0.3
8560 - pkg-types: 2.1.1
8662 + pkg-types: 2.2.0
8663 tinyexec: 0.3.2
8664 optional: true
8665
@@ -8569,8 +8671,7 @@ snapshots:
8671 node-fetch-native: 1.6.6
8672 ufo: 1.6.1
8673
8572 - ohash@2.0.11:
8573 - optional: true
8674 + ohash@2.0.11: {}
8675
8676 once@1.4.0:
8677 dependencies:
@@ -8702,13 +8803,13 @@ snapshots:
8803
8804 pify@2.3.0: {}
8805
8705 - pinia-plugin-persistedstate@4.4.1(@nuxt/kit@3.17.5)(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))):
8806 + pinia-plugin-persistedstate@4.4.1(@nuxt/kit@3.17.6)(pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))):
8807 dependencies:
8808 deep-pick-omit: 1.2.1
8809 defu: 6.1.4
8810 destr: 2.0.5
8811 optionalDependencies:
8711 - '@nuxt/kit': 3.17.5
8812 + '@nuxt/kit': 3.17.6
8813 pinia: 3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3))
8814
8815 pinia@3.0.3(typescript@5.8.3)(vue@3.5.17(typescript@5.8.3)):
@@ -8724,7 +8825,7 @@ snapshots:
8825 mlly: 1.7.4
8826 pathe: 2.0.3
8827
8727 - pkg-types@2.1.1:
8828 + pkg-types@2.2.0:
8829 dependencies:
8830 confbox: 0.2.2
8831 exsolve: 1.0.7
@@ -8760,7 +8861,7 @@ snapshots:
8861
8862 prelude-ls@1.2.1: {}
8863
8763 - prettier-plugin-tailwindcss@0.6.13(prettier@3.6.2):
8864 + prettier-plugin-tailwindcss@0.6.14(prettier@3.6.2):
8865 dependencies:
8866 prettier: 3.6.2
8867
@@ -8884,39 +8985,39 @@ snapshots:
8985
8986 rfdc@1.4.1: {}
8987
8887 - rollup-plugin-visualizer@5.14.0(rollup@4.44.1):
8988 + rollup-plugin-visualizer@5.14.0(rollup@4.44.2):
8989 dependencies:
8990 open: 8.4.2
8991 picomatch: 4.0.2
8992 source-map: 0.7.4
8993 yargs: 17.7.2
8994 optionalDependencies:
8894 - rollup: 4.44.1
8995 + rollup: 4.44.2
8996
8896 - rollup@4.44.1:
8997 + rollup@4.44.2:
8998 dependencies:
8999 '@types/estree': 1.0.8
9000 optionalDependencies:
8900 - '@rollup/rollup-android-arm-eabi': 4.44.1
8901 - '@rollup/rollup-android-arm64': 4.44.1
8902 - '@rollup/rollup-darwin-arm64': 4.44.1
8903 - '@rollup/rollup-darwin-x64': 4.44.1
8904 - '@rollup/rollup-freebsd-arm64': 4.44.1
8905 - '@rollup/rollup-freebsd-x64': 4.44.1
8906 - '@rollup/rollup-linux-arm-gnueabihf': 4.44.1
8907 - '@rollup/rollup-linux-arm-musleabihf': 4.44.1
8908 - '@rollup/rollup-linux-arm64-gnu': 4.44.1
8909 - '@rollup/rollup-linux-arm64-musl': 4.44.1
8910 - '@rollup/rollup-linux-loongarch64-gnu': 4.44.1
8911 - '@rollup/rollup-linux-powerpc64le-gnu': 4.44.1
8912 - '@rollup/rollup-linux-riscv64-gnu': 4.44.1
8913 - '@rollup/rollup-linux-riscv64-musl': 4.44.1
8914 - '@rollup/rollup-linux-s390x-gnu': 4.44.1
8915 - '@rollup/rollup-linux-x64-gnu': 4.44.1
8916 - '@rollup/rollup-linux-x64-musl': 4.44.1
8917 - '@rollup/rollup-win32-arm64-msvc': 4.44.1
8918 - '@rollup/rollup-win32-ia32-msvc': 4.44.1
8919 - '@rollup/rollup-win32-x64-msvc': 4.44.1
9001 + '@rollup/rollup-android-arm-eabi': 4.44.2
9002 + '@rollup/rollup-android-arm64': 4.44.2
9003 + '@rollup/rollup-darwin-arm64': 4.44.2
9004 + '@rollup/rollup-darwin-x64': 4.44.2
9005 + '@rollup/rollup-freebsd-arm64': 4.44.2
9006 + '@rollup/rollup-freebsd-x64': 4.44.2
9007 + '@rollup/rollup-linux-arm-gnueabihf': 4.44.2
9008 + '@rollup/rollup-linux-arm-musleabihf': 4.44.2
9009 + '@rollup/rollup-linux-arm64-gnu': 4.44.2
9010 + '@rollup/rollup-linux-arm64-musl': 4.44.2
9011 + '@rollup/rollup-linux-loongarch64-gnu': 4.44.2
9012 + '@rollup/rollup-linux-powerpc64le-gnu': 4.44.2
9013 + '@rollup/rollup-linux-riscv64-gnu': 4.44.2
9014 + '@rollup/rollup-linux-riscv64-musl': 4.44.2
9015 + '@rollup/rollup-linux-s390x-gnu': 4.44.2
9016 + '@rollup/rollup-linux-x64-gnu': 4.44.2
9017 + '@rollup/rollup-linux-x64-musl': 4.44.2
9018 + '@rollup/rollup-win32-arm64-msvc': 4.44.2
9019 + '@rollup/rollup-win32-ia32-msvc': 4.44.2
9020 + '@rollup/rollup-win32-x64-msvc': 4.44.2
9021 fsevents: 2.3.3
9022
9023 rrweb-cssom@0.8.0: {}
@@ -9139,6 +9240,8 @@ snapshots:
9240 dependencies:
9241 js-tokens: 9.0.1
9242
9243 + strnum@2.1.1: {}
9244 +
9245 style-mod@4.1.2: {}
9246
9247 style-value-types@5.1.2:
@@ -9164,9 +9267,9 @@ snapshots:
9267 dependencies:
9268 '@trysound/sax': 0.2.0
9269 commander: 7.2.0
9167 - css-select: 5.1.0
9270 + css-select: 5.2.2
9271 css-tree: 2.3.1
9169 - css-what: 6.1.0
9272 + css-what: 6.2.2
9273 csso: 5.0.5
9274 picocolors: 1.1.1
9275
@@ -9319,7 +9422,7 @@ snapshots:
9422
9423 unicorn-magic@0.3.0: {}
9424
9322 - unimport@5.0.1:
9425 + unimport@5.1.0:
9426 dependencies:
9427 acorn: 8.15.0
9428 escape-string-regexp: 5.0.0
@@ -9329,7 +9432,7 @@ snapshots:
9432 mlly: 1.7.4
9433 pathe: 2.0.3
9434 picomatch: 4.0.2
9332 - pkg-types: 2.1.1
9435 + pkg-types: 2.2.0
9436 scule: 1.3.0
9437 strip-literal: 3.0.0
9438 tinyglobby: 0.2.14
@@ -9366,7 +9469,6 @@ snapshots:
9469 dependencies:
9470 pathe: 2.0.3
9471 picomatch: 4.0.2
9369 - optional: true
9472
9473 unplugin@2.3.5:
9474 dependencies:
@@ -9423,28 +9525,34 @@ snapshots:
9525 '@types/unist': 3.0.3
9526 vfile-message: 4.0.2
9527
9426 - vite-bundle-visualizer@1.2.1(rollup@4.44.1):
9528 + vite-bundle-visualizer@1.2.1(rollup@4.44.2):
9529 dependencies:
9530 cac: 6.7.14
9531 import-from-esm: 1.3.4
9430 - rollup-plugin-visualizer: 5.14.0(rollup@4.44.1)
9532 + rollup-plugin-visualizer: 5.14.0(rollup@4.44.2)
9533 tmp: 0.2.3
9534 transitivePeerDependencies:
9535 - rolldown
9536 - rollup
9537 - supports-color
9538
9437 - vite-hot-client@2.0.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9539 + vite-dev-rpc@1.1.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9540 + dependencies:
9541 + birpc: 2.4.0
9542 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9543 + vite-hot-client: 2.1.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9544 +
9545 + vite-hot-client@2.1.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9546 dependencies:
9439 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9547 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9548
9441 - vite-node@3.2.4(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9549 + vite-node@3.2.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9550 dependencies:
9551 cac: 6.7.14
9552 debug: 4.4.1(supports-color@8.1.1)
9553 es-module-lexer: 1.7.0
9554 pathe: 2.0.3
9447 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9555 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9556 transitivePeerDependencies:
9557 - '@types/node'
9558 - jiti
@@ -9459,10 +9567,10 @@ snapshots:
9567 - tsx
9568 - yaml
9569
9462 - vite-plugin-inspect@0.8.9(@nuxt/kit@3.17.5)(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9570 + vite-plugin-inspect@0.8.9(@nuxt/kit@3.17.6)(rollup@4.44.2)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9571 dependencies:
9572 '@antfu/utils': 0.7.10
9465 - '@rollup/pluginutils': 5.2.0(rollup@4.44.1)
9573 + '@rollup/pluginutils': 5.2.0(rollup@4.44.2)
9574 debug: 4.4.1(supports-color@8.1.1)
9575 error-stack-parser-es: 0.1.5
9576 fs-extra: 11.3.0
@@ -9470,41 +9578,58 @@ snapshots:
9578 perfect-debounce: 1.0.0
9579 picocolors: 1.1.1
9580 sirv: 3.0.1
9473 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9581 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9582 optionalDependencies:
9475 - '@nuxt/kit': 3.17.5
9583 + '@nuxt/kit': 3.17.6
9584 transitivePeerDependencies:
9585 - rollup
9586 - supports-color
9587
9480 - vite-plugin-vue-devtools@7.7.7(@nuxt/kit@3.17.5)(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)):
9588 + vite-plugin-inspect@11.3.0(@nuxt/kit@3.17.6)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9589 dependencies:
9482 - '@vue/devtools-core': 7.7.7(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
9590 + ansis: 4.1.0
9591 + debug: 4.4.1(supports-color@8.1.1)
9592 + error-stack-parser-es: 1.0.5
9593 + ohash: 2.0.11
9594 + open: 10.1.2
9595 + perfect-debounce: 1.0.0
9596 + sirv: 3.0.1
9597 + unplugin-utils: 0.2.4
9598 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9599 + vite-dev-rpc: 1.1.0(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9600 + optionalDependencies:
9601 + '@nuxt/kit': 3.17.6
9602 + transitivePeerDependencies:
9603 + - supports-color
9604 +
9605 + vite-plugin-vue-devtools@7.7.7(@nuxt/kit@3.17.6)(rollup@4.44.2)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3)):
9606 + dependencies:
9607 + '@vue/devtools-core': 7.7.7(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))(vue@3.5.17(typescript@5.8.3))
9608 '@vue/devtools-kit': 7.7.7
9609 '@vue/devtools-shared': 7.7.7
9610 execa: 9.6.0
9611 sirv: 3.0.1
9487 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9488 - vite-plugin-inspect: 0.8.9(@nuxt/kit@3.17.5)(rollup@4.44.1)(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9489 - vite-plugin-vue-inspector: 5.3.2(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9612 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9613 + vite-plugin-inspect: 0.8.9(@nuxt/kit@3.17.6)(rollup@4.44.2)(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9614 + vite-plugin-vue-inspector: 5.3.2(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9615 transitivePeerDependencies:
9616 - '@nuxt/kit'
9617 - rollup
9618 - supports-color
9619 - vue
9620
9496 - vite-plugin-vue-inspector@5.3.2(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9621 + vite-plugin-vue-inspector@5.3.2(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)):
9622 dependencies:
9498 - '@babel/core': 7.27.7
9499 - '@babel/plugin-proposal-decorators': 7.27.1(@babel/core@7.27.7)
9500 - '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.7)
9501 - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.7)
9502 - '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.7)
9503 - '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.27.7)
9623 + '@babel/core': 7.28.0
9624 + '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.0)
9625 + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.0)
9626 + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.0)
9627 + '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.0)
9628 + '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.0)
9629 '@vue/compiler-dom': 3.5.17
9630 kolorist: 1.8.0
9631 magic-string: 0.30.17
9507 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9632 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9633 transitivePeerDependencies:
9634 - supports-color
9635
@@ -9513,35 +9638,35 @@ snapshots:
9638 svgo: 3.3.2
9639 vue: 3.5.17(typescript@5.8.3)
9640
9516 - vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9641 + vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9642 dependencies:
9518 - esbuild: 0.25.5
9643 + esbuild: 0.25.6
9644 fdir: 6.4.6(picomatch@4.0.2)
9645 picomatch: 4.0.2
9646 postcss: 8.5.6
9522 - rollup: 4.44.1
9647 + rollup: 4.44.2
9648 tinyglobby: 0.2.14
9649 optionalDependencies:
9525 - '@types/node': 24.0.8
9650 + '@types/node': 24.0.13
9651 fsevents: 2.3.3
9652 jiti: 2.4.2
9653 lightningcss: 1.30.1
9654 sass: 1.89.2
9655 yaml: 2.8.0
9656
9532 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.8)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9657 + vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.0.13)(jiti@2.4.2)(jsdom@26.1.0)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0):
9658 dependencies:
9659 '@types/chai': 5.2.2
9660 '@vitest/expect': 3.2.4
9536 - '@vitest/mocker': 3.2.4(vite@6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9661 + '@vitest/mocker': 3.2.4(vite@7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0))
9662 '@vitest/pretty-format': 3.2.4
9663 '@vitest/runner': 3.2.4
9664 '@vitest/snapshot': 3.2.4
9665 '@vitest/spy': 3.2.4
9666 '@vitest/utils': 3.2.4
9542 - chai: 5.2.0
9667 + chai: 5.2.1
9668 debug: 4.4.1(supports-color@8.1.1)
9544 - expect-type: 1.2.1
9669 + expect-type: 1.2.2
9670 magic-string: 0.30.17
9671 pathe: 2.0.3
9672 picomatch: 4.0.2
@@ -9551,12 +9676,12 @@ snapshots:
9676 tinyglobby: 0.2.14
9677 tinypool: 1.1.1
9678 tinyrainbow: 2.0.0
9554 - vite: 6.3.5(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9555 - vite-node: 3.2.4(@types/node@24.0.8)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9679 + vite: 7.0.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9680 + vite-node: 3.2.4(@types/node@24.0.13)(jiti@2.4.2)(lightningcss@1.30.1)(sass@1.89.2)(yaml@2.8.0)
9681 why-is-node-running: 2.3.0
9682 optionalDependencies:
9683 '@types/debug': 4.1.12
9559 - '@types/node': 24.0.8
9684 + '@types/node': 24.0.13
9685 jsdom: 26.1.0
9686 transitivePeerDependencies:
9687 - jiti
@@ -9595,17 +9720,16 @@ snapshots:
9720 codemirror: 6.0.2
9721 vue: 3.5.17(typescript@5.8.3)
9722
9598 - vue-component-type-helpers@2.2.10: {}
9723 + vue-component-type-helpers@2.2.12: {}
9724
9600 - vue-eslint-parser@10.1.4(eslint@9.30.0(jiti@2.4.2)):
9725 + vue-eslint-parser@10.2.0(eslint@9.30.1(jiti@2.4.2)):
9726 dependencies:
9727 debug: 4.4.1(supports-color@8.1.1)
9603 - eslint: 9.30.0(jiti@2.4.2)
9728 + eslint: 9.30.1(jiti@2.4.2)
9729 eslint-scope: 8.4.0
9730 eslint-visitor-keys: 4.2.1
9731 espree: 10.4.0
9732 esquery: 1.6.0
9608 - lodash: 4.17.21
9733 semver: 7.7.2
9734 transitivePeerDependencies:
9735 - supports-color
@@ -9615,10 +9739,10 @@ snapshots:
9739 highlight-words-core: 1.2.3
9740 vue: 3.5.17(typescript@5.8.3)
9741
9618 - vue-i18n@11.1.7(vue@3.5.17(typescript@5.8.3)):
9742 + vue-i18n@11.1.9(vue@3.5.17(typescript@5.8.3)):
9743 dependencies:
9620 - '@intlify/core-base': 11.1.7
9621 - '@intlify/shared': 11.1.7
9744 + '@intlify/core-base': 11.1.9
9745 + '@intlify/shared': 11.1.9
9746 '@vue/devtools-api': 6.6.4
9747 vue: 3.5.17(typescript@5.8.3)
9748
@@ -9631,15 +9755,15 @@ snapshots:
9755 dependencies:
9756 vue: 3.5.17(typescript@5.8.3)
9757
9634 - vue-tsc@2.2.10(typescript@5.8.3):
9758 + vue-tsc@3.0.1(typescript@5.8.3):
9759 dependencies:
9636 - '@volar/typescript': 2.4.15
9637 - '@vue/language-core': 2.2.10(typescript@5.8.3)
9760 + '@volar/typescript': 2.4.17
9761 + '@vue/language-core': 3.0.1(typescript@5.8.3)
9762 typescript: 5.8.3
9763
9640 - vue3-apexcharts@1.8.0(apexcharts@4.7.0)(vue@3.5.17(typescript@5.8.3)):
9764 + vue3-apexcharts@1.8.0(apexcharts@5.2.0)(vue@3.5.17(typescript@5.8.3)):
9765 dependencies:
9642 - apexcharts: 4.7.0
9766 + apexcharts: 5.2.0
9767 vue: 3.5.17(typescript@5.8.3)
9768
9769 vue3-marquee@4.2.2(vue@3.5.17(typescript@5.8.3)):
@@ -9743,7 +9867,7 @@ snapshots:
9867
9868 wrappy@1.0.2: {}
9869
9746 - ws@8.18.2: {}
9870 + ws@8.18.3: {}
9871
9872 xml-name-validator@4.0.0: {}
9873
@@ -9751,6 +9875,12 @@ snapshots:
9875
9876 xmlchars@2.2.0: {}
9877
9878 + xmllint-wasm@5.0.0(@types/node@24.0.13):
9879 + dependencies:
9880 + '@types/node': 24.0.13
9881 +
9882 + xmllint@0.1.1: {}
9883 +
9884 y18n@5.0.8: {}
9885
9886 yallist@3.1.1: {}
frontend/src/api/endpoints/alerts.ts
+1 -14
@@ -1,11 +1,4 @@
1 -import type {
2 - AlertsByHost,
3 - AlertsByRule,
4 - AlertsByRulePerHost,
5 - AlertSourceContent,
6 - AlertsSummary,
7 - WazuhRuleExclude
8 -} from "@/types/alerts.d"
1 +import type { AlertsByHost, AlertsByRule, AlertsByRulePerHost, AlertsSummary } from "@/types/alerts.d"
2 import type { FlaskBaseResponse } from "@/types/flask.d"
3 import { HttpClient } from "../httpClient"
4
@@ -125,11 +118,5 @@ export default {
118 `/soc/general_alert/create`,
119 body
120 )
128 - },
129 - wazuhManagerRuleExclude(source: AlertSourceContent) {
130 - return HttpClient.post<FlaskBaseResponse & WazuhRuleExclude>(`/wazuh_manager/rule/exclude`, {
131 - integration: "wazuh-rule-exclusion",
132 - prompt: source
133 - })
121 }
122 }
frontend/src/api/endpoints/healthchecks.ts
+1 -1
@@ -7,6 +7,6 @@ export default {
7 return HttpClient.get<FlaskBaseResponse & { alerts: InfluxDBAlert[] }>(`/influxdb/alerts`)
8 }
9
10 - // index health : Api.indices.getClusterHealth()
10 + // index health : Api.wazuh.indices.getClusterHealth()
11 // graylog health : Api.graylog.getMetrics()
12 }
frontend/src/api/endpoints/wazuh/index.ts new
+9
@@ -0,0 +1,9 @@
1 +import indices from "./indices"
2 +import mitre from "./mitre"
3 +import rules from "./rules"
4 +
5 +export default {
6 + mitre,
7 + rules,
8 + indices
9 +}
frontend/src/api/endpoints/wazuh/indices.ts renamed
+1 -1
@@ -1,6 +1,6 @@
1 import type { FlaskBaseResponse } from "@/types/flask.d"
2 import type { ClusterHealth, IndexAllocation, IndexShard, IndexStats } from "@/types/indices.d"
3 -import { HttpClient } from "../httpClient"
3 +import { HttpClient } from "../../httpClient"
4
5 export default {
6 getAllocation() {
frontend/src/api/endpoints/wazuh/mitre.ts renamed
+1 -1
@@ -10,7 +10,7 @@ import type {
10 MitreTechnique,
11 MitreTechniquesDetails
12 } from "@/types/mitre.d"
13 -import { HttpClient } from "../httpClient"
13 +import { HttpClient } from "../../httpClient"
14
15 export type MitreTechniquesAlertsQueryTimeRange = `${number}${"h" | "d" | "w"}`
16
frontend/src/api/endpoints/wazuh/rules.ts new
+64
@@ -0,0 +1,64 @@
1 +import type { AlertSourceContent, WazuhRuleExclude } from "@/types/alerts.d"
2 +import type { FlaskBaseResponse } from "@/types/flask.d"
3 +import type { WazuhFileDetails, WazuhFileItem } from "@/types/wazuh/rules.d"
4 +import { HttpClient } from "../../httpClient"
5 +
6 +// Interface for rules query parameters
7 +export interface RulesQueryParams {
8 + /** Show results in human-readable format */
9 + pretty?: boolean
10 + /** Disable timeout response */
11 + wait_for_complete?: boolean
12 + /** First element to return in the collection */
13 + offset?: number
14 + /** Maximum number of elements to return */
15 + limit?: number
16 + /** Sort the collection by a field or fields */
17 + sort?: string | null
18 + /** Look for elements containing the specified string */
19 + search?: string | null
20 + /** Filter by relative directory name */
21 + relative_dirname?: string | null
22 + /** Filter by filename of rule files */
23 + filename?: string[] | null
24 + /** Filter by list status (enabled, disabled, all) */
25 + status?: string | null
26 + /** Query to filter results by */
27 + q?: string | null
28 + /** Select which fields to return */
29 + select?: string[] | null
30 + /** Look for distinct values */
31 + distinct?: boolean
32 +}
33 +
34 +export default {
35 + wazuhManagerRuleExclude(source: AlertSourceContent) {
36 + return HttpClient.post<FlaskBaseResponse & WazuhRuleExclude>(`/wazuh_manager/rule/exclude`, {
37 + integration: "wazuh-rule-exclusion",
38 + prompt: source
39 + })
40 + },
41 + getRulesFileList(query: RulesQueryParams, signal?: AbortSignal) {
42 + return HttpClient.get<FlaskBaseResponse & { results: WazuhFileItem[]; total_items: number }>(
43 + `/wazuh_manager/rules/files`,
44 + {
45 + params: query,
46 + signal
47 + }
48 + )
49 + },
50 + getRulesFile(filename: string) {
51 + return HttpClient.get<FlaskBaseResponse & WazuhFileDetails>(`/wazuh_manager/rules/files/${filename}`, {
52 + params: { raw: true, pretty: false, wait_for_complete: false }
53 + })
54 + },
55 + updateRulesFile(filename: string, rules: File) {
56 + const form = new FormData()
57 + form.append("file", new Blob([rules], { type: rules.type }), rules.name)
58 +
59 + return HttpClient.put<FlaskBaseResponse & WazuhFileDetails>(`/wazuh_manager/rules/files/${filename}`, form)
60 + },
61 + restartManager() {
62 + return HttpClient.post<FlaskBaseResponse>(`/wazuh_manager/management/restart`)
63 + }
64 +}
frontend/src/api/index.ts
+3 -3
@@ -11,11 +11,9 @@ import flow from "./endpoints/flow"
11 import graylog from "./endpoints/graylog"
12 import healthchecks from "./endpoints/healthchecks"
13 import incidentManagement from "./endpoints/incidentManagement"
14 -import indices from "./endpoints/indices"
14 import integrations from "./endpoints/integrations"
15 import license from "./endpoints/license"
16 import logs from "./endpoints/logs"
18 -import mitre from "./endpoints/mitre"
17 import monitoringAlerts from "./endpoints/monitoringAlerts"
18 import networkConnectors from "./endpoints/networkConnectors"
19 import portainer from "./endpoints/portainer"
@@ -28,6 +26,8 @@ import stackProvisioning from "./endpoints/stackProvisioning"
26 import sysmonConfig from "./endpoints/sysmonConfig"
27 import threatIntel from "./endpoints/threatIntel"
28 import users from "./endpoints/users"
29 +import wazuh from "./endpoints/wazuh"
30 +import indices from "./endpoints/wazuh/indices"
31 import webVulnerabilityAssessment from "./endpoints/webVulnerabilityAssessment"
32
33 export default {
@@ -59,7 +59,7 @@ export default {
59 sigma,
60 users,
61 sysmonConfig,
62 - mitre,
62 + wazuh,
63 portainer,
64 shuffle
65 }
frontend/src/app-layouts/common/Navbar/items.tsx
+13
@@ -79,6 +79,19 @@ export default function getItems(): MenuMixedOption[] {
79 { default: () => "Sysmon Config" }
80 ),
81 key: "SysmonConfig"
82 + },
83 + {
84 + label: () =>
85 + h(
86 + RouterLink,
87 + {
88 + to: {
89 + name: "DetectionRules"
90 + }
91 + },
92 + { default: () => "Detection Rules" }
93 + ),
94 + key: "DetectionRules"
95 }
96 ]
97 },
frontend/src/components/alerts/AlertActions.vue
+1 -1
@@ -196,7 +196,7 @@ function wazuhManagerRuleExclude() {
196
197 loadingWazuhRuleExclude.value = true
198
199 - Api.alerts
199 + Api.wazuh.rules
200 .wazuhManagerRuleExclude(alert._source)
201 .then(res => {
202 if (res.data.success) {
frontend/src/components/alerts/AlertsList.vue
+1 -1
@@ -245,7 +245,7 @@ function getData() {
245 function getIndices() {
246 loadingIndex.value = true
247
248 - Api.indices
248 + Api.wazuh.indices
249 .getIndices()
250 .then(res => {
251 if (res.data.success) {
frontend/src/components/common/XMLEditor.vue
+154 -1
@@ -16,25 +16,41 @@
16 // EVALUATE: https://github.surmon.me/vue-codemirror
17 // EVALUATE: https://www.npmjs.com/package/@guolao/vue-monaco-editor
18
19 +import type { Diagnostic } from "@codemirror/lint"
20 import type { Extension } from "@codemirror/state"
20 -import type { EditorView } from "@codemirror/view"
21 import { redo, redoDepth, undo, undoDepth } from "@codemirror/commands"
22 import { xml } from "@codemirror/lang-xml"
23 +import { linter } from "@codemirror/lint"
24 import { oneDark } from "@codemirror/theme-one-dark"
25 +import { EditorView } from "@codemirror/view"
26 +import { XMLValidator } from "fast-xml-parser"
27 +import _isEqual from "lodash/isEqual"
28 +import _trim from "lodash/trim"
29 +import _uniqWith from "lodash/uniqWith"
30 import { tomorrow } from "thememirror"
31 import { computed, onMounted, ref, shallowRef, watch } from "vue"
32 import { Codemirror } from "vue-codemirror"
33 +import * as xmllint from "xmllint-wasm"
34 import { useThemeStore } from "@/stores/theme"
35
36 export interface XMLEditorCtx {
37 undo: () => void
38 redo: () => void
39 + scrollToLine: (line: number) => void
40 canUndo: () => boolean
41 canRedo: () => boolean
42 }
43
44 +export interface XMLError {
45 + line: number
46 + column: number
47 + message: string
48 + level: "error"
49 +}
50 +
51 const emit = defineEmits<{
52 (e: "mounted", value: XMLEditorCtx): void
53 + (e: "errors", value: XMLError[]): void
54 }>()
55
56 const code = defineModel<string>("code", { default: "" })
@@ -42,6 +58,120 @@ const code = defineModel<string>("code", { default: "" })
58 const themeStore = useThemeStore()
59 const isDark = computed<boolean>(() => themeStore.isThemeDark)
60
61 +function convertXMLErrorsToDiagnostics(errors: XMLError[], text: string): Diagnostic[] {
62 + const diagnostics: Diagnostic[] = []
63 + const lines = text.split("\n")
64 +
65 + emit(
66 + "errors",
67 + errors
68 + .map(o => ({ ...o, message: _trim(o.message) }))
69 + .filter(o => o.message !== "^")
70 + .sort((a, b) => a.line - b.line)
71 + )
72 +
73 + errors.forEach(error => {
74 + // Calculate position in text
75 + let from = 0
76 + for (let i = 0; i < error.line - 1; i++) {
77 + from += lines[i].length + 1 // +1 for newline
78 + }
79 + from += error.column - 1
80 +
81 + // Find the end of the error (end of line or end of message)
82 + const lineText = lines[error.line - 1] || ""
83 + const to = from + Math.min(lineText.length - (error.column - 1), 50) // Limit to 50 characters
84 +
85 + diagnostics.push({
86 + from,
87 + to,
88 + severity: error.level,
89 + message: error.message
90 + })
91 + })
92 +
93 + return diagnostics
94 +}
95 +
96 +async function strategyXMLLint(text: string): Promise<XMLError[]> {
97 + try {
98 + const result = await xmllint.validateXML({
99 + xml: text,
100 + // Optional: Initial memory capacity in Web Assembly memory pages (1 = 6.4KiB) - 256
101 + // is minimum and default here (16MiB).
102 + initialMemoryPages: 256,
103 + // Optional: Maximum memory capacity, in Web Assembly memory pages. If not
104 + // set, this will also default to 256 pages. Max is 65536 (4GiB).
105 + // Use this to raise the memory limit if your XML to validate are large enough to
106 + // cause out of memory errors.
107 + // The following example would set the max memory to 2GiB.
108 + maxMemoryPages: 2 * xmllint.memoryPages.GiB,
109 + normalization: "format"
110 + })
111 +
112 + if (result.valid) {
113 + return []
114 + }
115 +
116 + const errors: XMLError[] = result.errors.map(error => ({
117 + line: error.loc?.lineNumber || 1,
118 + column: 1,
119 + message: error.message,
120 + level: "error"
121 + }))
122 +
123 + return errors
124 + } catch (err) {
125 + console.error(err)
126 + return []
127 + }
128 +}
129 +
130 +async function strategyFastXMLParser(text: string): Promise<XMLError[]> {
131 + try {
132 + const errors: XMLError[] = []
133 +
134 + const validation = XMLValidator.validate(text)
135 +
136 + if (validation === true) {
137 + return []
138 + }
139 +
140 + if (typeof validation === "object" && validation.err) {
141 + const error = validation.err
142 +
143 + errors.push({
144 + line: error.line || 1,
145 + column: error.col || 1,
146 + message: error.msg,
147 + level: "error"
148 + })
149 + }
150 +
151 + return errors
152 + } catch {
153 + return []
154 + }
155 +}
156 +
157 +async function validateXML(text: string): Promise<Diagnostic[]> {
158 + let errors: XMLError[] = []
159 +
160 + try {
161 + errors = await strategyXMLLint(text)
162 + } catch (err) {
163 + console.error(err)
164 +
165 + try {
166 + errors = await strategyFastXMLParser(text)
167 + } catch (err) {
168 + console.error(err)
169 + }
170 + }
171 +
172 + return convertXMLErrorsToDiagnostics(_uniqWith(errors, _isEqual), text)
173 +}
174 +
175 const extensions = computed(() => {
176 const list: Extension[] = [xml()]
177
@@ -51,6 +181,18 @@ const extensions = computed(() => {
181 list.push(tomorrow)
182 }
183
184 + list.push(
185 + linter(async view => {
186 + const text = view.state.doc.toString()
187 +
188 + if (!text.trim()) {
189 + return []
190 + }
191 +
192 + return await validateXML(text)
193 + })
194 + )
195 +
196 return list
197 })
198
@@ -85,6 +227,16 @@ function handleRedo() {
227 }
228 }
229
230 +function scrollToLine(line: number) {
231 + if (cmView.value) {
232 + const view = cmView.value
233 + const lineInfo = view.state.doc.line(line)
234 + view.dispatch({
235 + effects: EditorView.scrollIntoView(lineInfo.from, { y: "center" })
236 + })
237 + }
238 +}
239 +
240 watch(code, () => {
241 updateHistoryState()
242 })
@@ -93,6 +245,7 @@ onMounted(() => {
245 emit("mounted", {
246 undo: handleUndo,
247 redo: handleRedo,
248 + scrollToLine,
249 canRedo: () => canRedo.value,
250 canUndo: () => canUndo.value
251 })
frontend/src/components/indices/ClusterHealth.vue
+1 -1
@@ -73,7 +73,7 @@ function sanitizeLabel(label: string) {
73
74 function getClusterHealth() {
75 loading.value = true
76 - Api.indices
76 + Api.wazuh.indices
77 .getClusterHealth()
78 .then(res => {
79 if (res.data.success) {
frontend/src/components/indices/Details.vue
+1 -1
@@ -115,7 +115,7 @@ function clearCurrentIndex() {
115
116 function getShards() {
117 loadingShards.value = true
118 - Api.indices
118 + Api.wazuh.indices
119 .getShards()
120 .then(res => {
121 if (res.data.success) {
frontend/src/components/indices/Marquee.vue
+1 -1
@@ -68,7 +68,7 @@ const loading = ref(false)
68 function getIndices() {
69 loading.value = true
70
71 - Api.indices
71 + Api.wazuh.indices
72 .getIndices()
73 .then(res => {
74 if (res.data.success) {
frontend/src/components/indices/NodeAllocation.vue
+1 -1
@@ -88,7 +88,7 @@ function getStatusPercent(percent: string | number | undefined | null) {
88
89 function getIndicesAllocation() {
90 loading.value = true
91 - Api.indices
91 + Api.wazuh.indices
92 .getAllocation()
93 .then(res => {
94 if (res.data.success) {
frontend/src/components/mitre/AtomicTests/List.vue
+2 -2
@@ -65,7 +65,7 @@
65 </template>
66
67 <script setup lang="ts">
68 -import type { MitreAtomicOsCategory, MitreAtomicTestsQuery } from "@/api/endpoints/mitre"
68 +import type { MitreAtomicOsCategory, MitreAtomicTestsQuery } from "@/api/endpoints/wazuh/mitre"
69 import type { MitreAtomicTest } from "@/types/mitre.d"
70 import { useResizeObserver, watchDebounced } from "@vueuse/core"
71 import axios from "axios"
@@ -109,7 +109,7 @@ function getList() {
109 os_category: osCategory.value || undefined
110 }
111
112 - Api.mitre
112 + Api.wazuh.mitre
113 .getMitreAtomicTests(query, abortController.signal)
114 .then(res => {
115 loading.value = false
frontend/src/components/mitre/AtomicTests/TechniqueCardContent.vue
+1 -1
@@ -31,7 +31,7 @@ const content = ref<string>()
31 function getContent() {
32 loading.value = true
33
34 - Api.mitre
34 + Api.wazuh.mitre
35 .getMitreAtomicTestContent(techniqueId)
36 .then(res => {
37 if (res.data.success) {
frontend/src/components/mitre/Group/GroupCard.vue
+1 -1
@@ -94,7 +94,7 @@ const groupDetails = ref<MitreGroupDetails | undefined>(undefined)
94 function getDetails(id: string) {
95 loadingDetails.value = true
96
97 - Api.mitre
97 + Api.wazuh.mitre
98 .getMitreGroups({ id })
99 .then(res => {
100 if (res.data.success) {
frontend/src/components/mitre/Group/GroupDetails.vue
+1 -1
@@ -134,7 +134,7 @@ watch(sidebarTop, () => {
134 function getDetails(id: string) {
135 loadingDetails.value = true
136
137 - Api.mitre
137 + Api.wazuh.mitre
138 .getMitreGroups({ id })
139 .then(res => {
140 if (res.data.success) {
frontend/src/components/mitre/Mitigation/MitigationCard.vue
+1 -1
@@ -84,7 +84,7 @@ const mitigationDetails = ref<MitreMitigationDetails | undefined>(undefined)
84 function getDetails(id: string) {
85 loadingDetails.value = true
86
87 - Api.mitre
87 + Api.wazuh.mitre
88 .getMitreMitigations({ id })
89 .then(res => {
90 if (res.data.success) {
frontend/src/components/mitre/Mitigation/MitigationDetails.vue
+1 -1
@@ -119,7 +119,7 @@ watch(sidebarTop, () => {
119 function getDetails(id: string) {
120 loadingDetails.value = true
121
122 - Api.mitre
122 + Api.wazuh.mitre
123 .getMitreMitigations({ id })
124 .then(res => {
125 if (res.data.success) {
frontend/src/components/mitre/Software/SoftwareCard.vue
+1 -1
@@ -94,7 +94,7 @@ const softwareDetails = ref<MitreSoftwareDetails | undefined>(undefined)
94 function getDetails(id: string) {
95 loadingDetails.value = true
96
97 - Api.mitre
97 + Api.wazuh.mitre
98 .getMitreSoftware({ id })
99 .then(res => {
100 if (res.data.success) {
frontend/src/components/mitre/Software/SoftwareDetails.vue
+1 -1
@@ -145,7 +145,7 @@ watch(sidebarTop, () => {
145 function getDetails(id: string) {
146 loadingDetails.value = true
147
148 - Api.mitre
148 + Api.wazuh.mitre
149 .getMitreSoftware({ id })
150 .then(res => {
151 if (res.data.success) {
frontend/src/components/mitre/Tactic/TacticCard.vue
+1 -1
@@ -84,7 +84,7 @@ const tacticDetails = ref<MitreTacticDetails | undefined>(undefined)
84 function getDetails(id: string) {
85 loadingDetails.value = true
86
87 - Api.mitre
87 + Api.wazuh.mitre
88 .getMitreTactics({ id })
89 .then(res => {
90 if (res.data.success) {
frontend/src/components/mitre/Tactic/TacticDetails.vue
+1 -1
@@ -112,7 +112,7 @@ watch(sidebarTop, () => {
112 function getDetails(id: string) {
113 loadingDetails.value = true
114
115 - Api.mitre
115 + Api.wazuh.mitre
116 .getMitreTactics({ id })
117 .then(res => {
118 if (res.data.success) {
frontend/src/components/mitre/Technique/TechniqueCard.vue
+1 -1
@@ -125,7 +125,7 @@ const techniqueDetails = ref<MitreTechniqueDetails | undefined>(undefined)
125 function getDetails(id: string) {
126 loadingDetails.value = true
127
128 - Api.mitre
128 + Api.wazuh.mitre
129 .getMitreTechniques({ id })
130 .then(res => {
131 if (res.data.success) {
frontend/src/components/mitre/TechniqueAlert/TechniqueAlertDetails.vue
+1 -1
@@ -158,7 +158,7 @@ watch(sidebarTop, () => {
158 function getDetails(query: { external_id: string } | { id: string }) {
159 loadingDetails.value = true
160
161 - Api.mitre
161 + Api.wazuh.mitre
162 .getMitreTechniques(query)
163 .then(res => {
164 if (res.data.success) {
frontend/src/components/mitre/TechniqueAlert/TechniqueAlertOverview.vue
+1 -1
@@ -80,7 +80,7 @@ const techniqueDetails = ref<MitreTechniqueDetails | undefined>(undefined)
80 function getDetails(id: string) {
81 loadingDetails.value = true
82
83 - Api.mitre
83 + Api.wazuh.mitre
84 .getMitreTechniques({ external_id: id })
85 .then(res => {
86 if (res.data.success) {
frontend/src/components/mitre/TechniqueEvents/List.vue
+2 -2
@@ -64,7 +64,7 @@
64 </template>
65
66 <script setup lang="ts">
67 -import type { MitreEventsQuery, MitreTechniquesAlertsQueryTimeRange } from "@/api/endpoints/mitre"
67 +import type { MitreEventsQuery, MitreTechniquesAlertsQueryTimeRange } from "@/api/endpoints/wazuh/mitre"
68 import type { MitreEventDetails } from "@/types/mitre.d"
69 import { useResizeObserver, watchDebounced } from "@vueuse/core"
70 import axios from "axios"
@@ -115,7 +115,7 @@ function getList() {
115 index_pattern: filters.value?.find(o => o.type === "index_pattern")?.value
116 }
117
118 - Api.mitre
118 + Api.wazuh.mitre
119 .getMitreEvents(query, abortController.signal)
120 .then(res => {
121 loading.value = false
frontend/src/components/mitre/TechniqueEvents/TechniqueEventDetails.vue
+1 -1
@@ -145,7 +145,7 @@ watch(sidebarTop, () => {
145 function getDetails(id: string) {
146 loadingDetails.value = true
147
148 - Api.mitre
148 + Api.wazuh.mitre
149 .getMitreSoftware({ id })
150 .then(res => {
151 if (res.data.success) {
frontend/src/components/mitre/TechniquesAlerts/List.vue
+2 -2
@@ -63,7 +63,7 @@
63 </template>
64
65 <script setup lang="ts">
66 -import type { MitreTechniquesAlertsQuery, MitreTechniquesAlertsQueryTimeRange } from "@/api/endpoints/mitre"
66 +import type { MitreTechniquesAlertsQuery, MitreTechniquesAlertsQueryTimeRange } from "@/api/endpoints/wazuh/mitre"
67 import type { MitreTechnique } from "@/types/mitre.d"
68 import { watchDebounced } from "@vueuse/core"
69 import axios from "axios"
@@ -182,7 +182,7 @@ function getList() {
182 index_pattern: filters.value?.find(o => o.type === "index_pattern")?.value
183 }
184
185 - Api.mitre
185 + Api.wazuh.mitre
186 .getMitreTechniquesAlerts(query, abortController.signal)
187 .then(res => {
188 loading.value = false
frontend/src/router/index.ts
+6
@@ -55,6 +55,12 @@ const router = createRouter({
55 name: "SysmonConfig",
56 component: () => import("@/views/agents/SysmonConfig.vue"),
57 meta: { title: "Sysmon Config" }
58 + },
59 + {
60 + path: "detection-rules",
61 + name: "DetectionRules",
62 + component: () => import("@/views/agents/DetectionRules.vue"),
63 + meta: { title: "Detection Rules" }
64 }
65 ]
66 },
frontend/src/stores/healthcheck.ts
+1 -1
@@ -33,7 +33,7 @@ export const usHealthcheckStore = defineStore("healthcheck", {
33 })
34 },
35 getClusterHealth() {
36 - Api.indices
36 + Api.wazuh.indices
37 .getClusterHealth()
38 .then(res => {
39 if (res.data.success) {
frontend/src/types/wazuh/rules.d.ts new
+16
@@ -0,0 +1,16 @@
1 +export interface WazuhFileItem {
2 + filename: string
3 + relative_dirname: string
4 + status: WazuhFileItemStatus
5 +}
6 +
7 +export enum WazuhFileItemStatus {
8 + Disabled = "disabled",
9 + Enabled = "enabled"
10 +}
11 +
12 +export interface WazuhFileDetails {
13 + filename: string
14 + content: string
15 + is_raw: boolean
16 +}
frontend/src/views/Indices.vue
+1 -1
@@ -65,7 +65,7 @@ function setIndex(index: IndexStats | string) {
65 function getIndices(cb?: () => void) {
66 loadingIndex.value = true
67
68 - Api.indices
68 + Api.wazuh.indices
69 .getIndices()
70 .then(res => {
71 if (res.data.success) {
frontend/src/views/agents/DetectionRules.vue new
+338
@@ -0,0 +1,338 @@
1 +<template>
2 + <div class="page page-wrapped page-mobile-full page-without-footer flex flex-col">
3 + <SegmentedPage
4 + main-content-class="!p-0 overflow-hidden grow flex flex-col h-full"
5 + :use-main-scroll="false"
6 + padding="18px"
7 + enable-resize
8 + toolbar-height="54px"
9 + sidebar-content-class="p-0!"
10 + >
11 + <template #sidebar-header>
12 + <div class="flex w-full items-center justify-between gap-3">
13 + <n-input
14 + v-model:value="filters.search"
15 + size="small"
16 + class="max-w-full grow"
17 + clearable
18 + placeholder="Search..."
19 + >
20 + <template #prefix>
21 + <Icon :name="SearchIcon" :size="16" />
22 + </template>
23 + </n-input>
24 +
25 + <n-tooltip>
26 + <template #trigger>
27 + <n-button secondary :loading="loadingManager" size="small" @click="reloadManager()">
28 + <template #icon>
29 + <Icon :name="RefreshIcon"></Icon>
30 + </template>
31 + </n-button>
32 + </template>
33 + <div>Restart Wazuh</div>
34 + </n-tooltip>
35 + </div>
36 + </template>
37 + <template #sidebar-content>
38 + <n-spin :show="loadingList">
39 + <template v-if="fileList.length">
40 + <div class="divide-border divide-y-1 flex flex-col">
41 + <div
42 + v-for="item of fileList"
43 + :key="item.filename"
44 + class="hover:text-warning px-4.5 cursor-pointer break-all py-2.5 font-mono text-sm"
45 + :class="{ 'bg-warning/10': item.filename === currentFile?.filename }"
46 + @click.stop="loadFile(item.filename)"
47 + >
48 + {{ item.filename }}
49 + </div>
50 + </div>
51 + </template>
52 + <template v-else>
53 + <n-empty v-if="!loadingList" description="No items found" class="h-48 justify-center" />
54 + </template>
55 + </n-spin>
56 + </template>
57 + <template v-if="pagination.total" #sidebar-footer>
58 + <div class="flex w-full items-center justify-center">
59 + <n-pagination
60 + v-model:page="pagination.current"
61 + :page-size="pagination.size"
62 + :page-slot="5"
63 + :item-count="pagination.total"
64 + simple
65 + />
66 + </div>
67 + </template>
68 + <template v-if="currentFile" #main-toolbar>
69 + <div class="@container flex items-center justify-between">
70 + <div class="flex items-center gap-2 md:gap-3">
71 + <n-button
72 + v-if="xmlEditorCTX"
73 + size="small"
74 + :disabled="!xmlEditorCTX.canUndo()"
75 + @click="xmlEditorCTX.undo"
76 + >
77 + <div class="flex items-center gap-2">
78 + <Icon :name="UndoIcon" />
79 + <span class="@sm:flex hidden">Undo</span>
80 + </div>
81 + </n-button>
82 + <n-button
83 + v-if="xmlEditorCTX"
84 + size="small"
85 + :disabled="!xmlEditorCTX.canRedo()"
86 + @click="xmlEditorCTX.redo"
87 + >
88 + <div class="flex items-center gap-2">
89 + <span class="@sm:flex hidden">Redo</span>
90 + <Icon :name="RedoIcon" />
91 + </div>
92 + </n-button>
93 + </div>
94 + <div class="flex items-center gap-2 md:gap-3">
95 + <n-popover v-if="xmlErrors.length && xmlEditorCTX" class="p-1!">
96 + <template #trigger>
97 + <div class="flex items-center justify-end gap-2">
98 + <Icon
99 + name="carbon:warning-alt"
100 + :size="20"
101 + class="text-warning animate-fade cursor-help"
102 + />
103 + <span class="text-warning @lg:flex hidden font-mono text-xs">Errors detected</span>
104 + </div>
105 + </template>
106 +
107 + <n-scrollbar class="max-h-100">
108 + <div class="flex max-w-80 flex-col gap-1">
109 + <div
110 + v-for="item of xmlErrors"
111 + :key="JSON.stringify(item)"
112 + class="bg-secondary hover:bg-body flex cursor-pointer flex-col gap-0.5 rounded-sm p-1 font-mono"
113 + @click="xmlEditorCTX.scrollToLine(item.line)"
114 + >
115 + <div class="text-secondary text-[8px]">line: {{ item.line }}</div>
116 + <div class="text-xs">{{ item.message }}</div>
117 + </div>
118 + </div>
119 + </n-scrollbar>
120 + </n-popover>
121 +
122 + <n-button
123 + :loading="uploadingFile"
124 + size="small"
125 + type="primary"
126 + :disabled="!isDirty"
127 + @click="uploadFileFile()"
128 + >
129 + <div class="flex items-center gap-2">
130 + <Icon :name="UploadIcon" />
131 + <span class="@xs:flex hidden">Upload</span>
132 + </div>
133 + </n-button>
134 + </div>
135 + </div>
136 + </template>
137 + <template #main-content>
138 + <div v-if="currentFile" class="px-4.5 break-all py-2.5 font-mono text-sm">
139 + current file: {{ currentFile?.filename }}
140 + </div>
141 + <n-spin
142 + :show="loadingFile || uploadingFile"
143 + class="flex h-full w-full overflow-hidden"
144 + content-class="flex h-full grow flex-col justify-center overflow-hidden"
145 + >
146 + <template v-if="currentFile">
147 + <XMLEditor
148 + v-model="currentFile.content"
149 + class="scrollbar-styled text-sm"
150 + @errors="xmlErrors = $event"
151 + @mounted="xmlEditorCTX = $event"
152 + />
153 + </template>
154 + <template v-else>
155 + <n-empty v-if="!loadingFile" description="Select a customer" class="h-48 justify-center" />
156 + </template>
157 + </n-spin>
158 + </template>
159 + </SegmentedPage>
160 + </div>
161 +</template>
162 +
163 +<script setup lang="ts">
164 +import type { XMLEditorCtx, XMLError } from "@/components/common/XMLEditor.vue"
165 +import type { WazuhFileDetails, WazuhFileItem } from "@/types/wazuh/rules.d"
166 +import { watchDebounced } from "@vueuse/core"
167 +import axios from "axios"
168 +import _clone from "lodash/cloneDeep"
169 +import { NButton, NEmpty, NInput, NPagination, NPopover, NScrollbar, NSpin, NTooltip, useMessage } from "naive-ui"
170 +import { computed, ref, watch } from "vue"
171 +import Api from "@/api"
172 +import Icon from "@/components/common/Icon.vue"
173 +import SegmentedPage from "@/components/common/SegmentedPage.vue"
174 +import XMLEditor from "@/components/common/XMLEditor.vue"
175 +
176 +const message = useMessage()
177 +const loadingManager = ref(false)
178 +const loadingList = ref(false)
179 +const loadingFile = ref(false)
180 +const uploadingFile = ref(false)
181 +const fileList = ref<WazuhFileItem[]>([])
182 +const currentFile = ref<WazuhFileDetails | null>(null)
183 +const backupFile = ref<WazuhFileDetails | null>(null)
184 +const xmlEditorCTX = ref<XMLEditorCtx | null>(null)
185 +const UndoIcon = "carbon:undo"
186 +const RedoIcon = "carbon:redo"
187 +const SearchIcon = "ion:search-outline"
188 +const RefreshIcon = "carbon:renew"
189 +const UploadIcon = "carbon:cloud-upload"
190 +
191 +const filters = ref({
192 + search: null
193 +})
194 +const pagination = ref({
195 + current: 1,
196 + size: 30,
197 + total: 0
198 +})
199 +
200 +const isDirty = computed(() => currentFile.value?.content !== backupFile.value?.content)
201 +const xmlErrors = ref<XMLError[]>([])
202 +
203 +let abortController: AbortController | null = null
204 +
205 +function loadFile(filename: string) {
206 + if (filename !== currentFile.value?.filename) {
207 + getFile(filename)
208 + }
209 +}
210 +
211 +function reloadManager() {
212 + abortController?.abort()
213 +
214 + loadingManager.value = true
215 +
216 + Api.wazuh.rules
217 + .restartManager()
218 + .then(res => {
219 + if (res.data.success) {
220 + message.success(res.data?.message || "Wazuh Manager cluster restarted successfully")
221 + getList()
222 + } else {
223 + message.error(res.data?.message || "An error occurred. Please try again later.")
224 + }
225 + })
226 + .catch(err => {
227 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
228 + })
229 + .finally(() => {
230 + loadingManager.value = false
231 + })
232 +}
233 +
234 +function getList() {
235 + abortController?.abort()
236 + abortController = new AbortController()
237 +
238 + loadingList.value = true
239 +
240 + Api.wazuh.rules
241 + .getRulesFileList(
242 + {
243 + search: filters.value.search || undefined,
244 + pretty: false,
245 + wait_for_complete: false,
246 + distinct: false,
247 + offset: (pagination.value.current - 1) * pagination.value.size,
248 + limit: pagination.value.size
249 + },
250 + abortController.signal
251 + )
252 + .then(res => {
253 + if (res.data.success) {
254 + fileList.value = res.data.results || []
255 + pagination.value.total = res.data.total_items
256 + } else {
257 + pagination.value.total = 0
258 + message.error(res.data?.message || "An error occurred. Please try again later.")
259 + }
260 + loadingList.value = false
261 + })
262 + .catch(err => {
263 + if (!axios.isCancel(err)) {
264 + fileList.value = []
265 +
266 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
267 + loadingList.value = false
268 + }
269 + })
270 +}
271 +
272 +function getFile(filename: string) {
273 + loadingFile.value = true
274 +
275 + Api.wazuh.rules
276 + .getRulesFile(filename)
277 + .then(res => {
278 + if (res.data.success) {
279 + currentFile.value = _clone(res.data)
280 + backupFile.value = _clone(res.data)
281 + } else {
282 + message.error(res.data?.message || "An error occurred. Please try again later.")
283 + }
284 + })
285 + .catch(err => {
286 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
287 + })
288 + .finally(() => {
289 + loadingFile.value = false
290 + })
291 +}
292 +
293 +function uploadFileFile() {
294 + if (currentFile.value) {
295 + uploadingFile.value = true
296 +
297 + Api.wazuh.rules
298 + .updateRulesFile(
299 + currentFile.value.filename,
300 + new File([currentFile.value.content], currentFile.value.filename, {
301 + type: "text/xml;charset=utf-8"
302 + })
303 + )
304 +
305 + .then(res => {
306 + if (res.data.success) {
307 + currentFile.value = _clone(currentFile.value)
308 + backupFile.value = _clone(currentFile.value)
309 + message.success("Detection rules uploaded Successfully")
310 + } else {
311 + message.error("An error occurred. Please try again later.")
312 + }
313 + })
314 + .catch(err => {
315 + message.error(err.response?.data?.message || "An error occurred. Please try again later.")
316 + })
317 + .finally(() => {
318 + uploadingFile.value = false
319 + })
320 + }
321 +}
322 +
323 +watch(
324 + [filters],
325 + () => {
326 + pagination.value.current = 1
327 + },
328 + { deep: true }
329 +)
330 +
331 +watchDebounced(
332 + [filters, () => pagination.value.current],
333 + () => {
334 + getList()
335 + },
336 + { debounce: 250, immediate: true, deep: true }
337 +)
338 +</script>
frontend/src/views/agents/SysmonConfig.vue
+35 -6
@@ -1,5 +1,5 @@
1 <template>
2 - <div class="page page-wrapped page-without-footer flex flex-col">
2 + <div class="page page-wrapped page-mobile-full page-without-footer flex flex-col">
3 <SegmentedPage
4 main-content-class="!p-0 overflow-hidden grow flex h-full"
5 :use-main-scroll="false"
@@ -45,14 +45,14 @@
45 <template #icon>
46 <Icon :size="18" :name="NewConfigIcon" />
47 </template>
48 - <span class="ml-2">Add new Configuration</span>
48 + <span class="ml-1.5 truncate">Add new Configuration</span>
49 </n-button>
50 </n-dropdown>
51 </n-spin>
52 </template>
53 <template #main-toolbar>
54 <div v-if="currentConfig" class="@container flex items-center justify-between">
55 - <div class="flex items-center gap-3 md:gap-4">
55 + <div class="flex items-center gap-2 md:gap-3">
56 <n-button
57 v-if="xmlEditorCTX"
58 size="small"
@@ -76,7 +76,34 @@
76 </div>
77 </n-button>
78 </div>
79 - <div class="flex items-center gap-3 md:gap-4">
79 + <div class="flex items-center gap-2 md:gap-3">
80 + <n-popover v-if="xmlErrors.length && xmlEditorCTX" class="p-1!">
81 + <template #trigger>
82 + <div class="flex items-center justify-end gap-2">
83 + <Icon
84 + name="carbon:warning-alt"
85 + :size="20"
86 + class="text-warning animate-fade cursor-help"
87 + />
88 + <span class="text-warning @lg:flex hidden font-mono text-xs">Errors detected</span>
89 + </div>
90 + </template>
91 +
92 + <n-scrollbar class="max-h-100">
93 + <div class="flex max-w-80 flex-col gap-1">
94 + <div
95 + v-for="item of xmlErrors"
96 + :key="JSON.stringify(item)"
97 + class="bg-secondary hover:bg-body flex cursor-pointer flex-col gap-0.5 rounded-sm p-1 font-mono"
98 + @click="xmlEditorCTX.scrollToLine(item.line)"
99 + >
100 + <div class="text-secondary text-[8px]">line: {{ item.line }}</div>
101 + <div class="text-xs">{{ item.message }}</div>
102 + </div>
103 + </div>
104 + </n-scrollbar>
105 + </n-popover>
106 +
107 <n-button
108 :loading="uploadingConfig"
109 size="small"
@@ -114,6 +141,7 @@
141 <XMLEditor
142 v-model="currentConfig.config_content"
143 class="scrollbar-styled text-sm"
144 + @errors="xmlErrors = $event"
145 @mounted="xmlEditorCTX = $event"
146 />
147 </template>
@@ -128,11 +156,11 @@
156
157 <script setup lang="ts">
158 import type { DropdownMixedOption } from "naive-ui/es/dropdown/src/interface"
131 -import type { XMLEditorCtx } from "@/components/common/XMLEditor.vue"
159 +import type { XMLEditorCtx, XMLError } from "@/components/common/XMLEditor.vue"
160 import type { Customer } from "@/types/customers"
161 import type { ConfigContent } from "@/types/sysmonConfig.d"
162 import _clone from "lodash/cloneDeep"
135 -import { NButton, NDropdown, NEmpty, NSpin, useMessage } from "naive-ui"
163 +import { NButton, NDropdown, NEmpty, NPopover, NScrollbar, NSpin, useMessage } from "naive-ui"
164 import { computed, h, onBeforeMount, ref } from "vue"
165 import Api from "@/api"
166 import CardEntity from "@/components/common/cards/CardEntity.vue"
@@ -159,6 +187,7 @@ const UploadIcon = "carbon:cloud-upload"
187 const NewConfigIcon = "carbon:document-add"
188
189 const isDirty = computed(() => currentConfig.value?.config_content !== backupConfig.value?.config_content)
190 +const xmlErrors = ref<XMLError[]>([])
191
192 const loadingCustomersList = ref(false)
193 const customersList = ref<Customer[]>([])
frontend/vite.config.ts
+12
@@ -40,6 +40,7 @@ export default defineConfig(({ mode }) => {
40 }
41 },
42 optimizeDeps: {
43 + exclude: ["xmllint-wasm"],
44 include: ["fast-deep-equal"]
45 },
46 server: {
@@ -65,6 +66,17 @@ export default defineConfig(({ mode }) => {
66 api: "modern-compiler"
67 }
68 }
69 + },
70 + build: {
71 + rollupOptions: {
72 + onwarn(warning, warn) {
73 + if (warning.code === "PLUGIN_WARNING" && warning.message.includes('Module "node:process"')) {
74 + return
75 + }
76 +
77 + warn(warning)
78 + }
79 + }
80 }
81 }
82 })