From 3e09b03753c7a6447612126e7736e578e93192cf Mon Sep 17 00:00:00 2001 From: Jose Henrique Date: Fri, 20 Mar 2026 22:51:04 -0300 Subject: [PATCH] adding new mindforge applications --- .gitea/workflows/mindforge-web.yaml | 5 +- Mindforge.API/.gitignore | 3 + Mindforge.API/Controllers/FileController.cs | 43 + .../Controllers/FlashcardController.cs | 43 + Mindforge.API/Exceptions/UserException.cs | 11 + .../ExceptionHandlingMiddleware.cs | 47 + Mindforge.API/Mindforge.API.csproj | 13 + Mindforge.API/Mindforge.API.http | 6 + Mindforge.API/Models/Enums/LlmProvider.cs | 8 + .../Models/Requests/FileCheckRequest.cs | 13 + .../Requests/FlashcardGenerateRequest.cs | 21 + Mindforge.API/Program.cs | 71 + Mindforge.API/Properties/launchSettings.json | 23 + Mindforge.API/Providers/GeminiApiProvider.cs | 202 ++ Mindforge.API/Providers/ILlmApiProvider.cs | 10 + Mindforge.API/Providers/OpenAIApiProvider.cs | 110 + Mindforge.API/Services/AgentService.cs | 48 + Mindforge.API/Services/FileService.cs | 61 + Mindforge.API/Services/FlashcardService.cs | 83 + .../Services/Interfaces/IAgentService.cs | 11 + .../Services/Interfaces/IFileService.cs | 10 + .../Services/Interfaces/IFlashcardService.cs | 10 + Mindforge.API/appsettings.json | 9 + Mindforge.API/deploy/mindforge-api.yaml | 21 + Mindforge.Web/.env | 1 + Mindforge.Web/.env.dev | 1 + Mindforge.Web/.gitignore | 24 + Mindforge.Web/deploy/mindforge-web.yaml | 21 + Mindforge.Web/index.html | 16 + Mindforge.Web/package-lock.json | 1897 +++++++++++++++++ Mindforge.Web/package.json | 24 + .../public/assets/mindforge-banner.png | Bin 0 -> 1219971 bytes Mindforge.Web/public/assets/mindforge.png | Bin 0 -> 547306 bytes Mindforge.Web/public/favicon.ico | Bin 0 -> 102134 bytes Mindforge.Web/src/app.css | 62 + Mindforge.Web/src/app.tsx | 34 + Mindforge.Web/src/components/Button.css | 41 + Mindforge.Web/src/components/Button.tsx | 22 + .../src/components/FlashcardComponent.css | 207 ++ .../src/components/FlashcardComponent.tsx | 209 ++ Mindforge.Web/src/components/Header.css | 36 + Mindforge.Web/src/components/Header.tsx | 19 + Mindforge.Web/src/components/Sidebar.css | 41 + Mindforge.Web/src/components/Sidebar.tsx | 33 + .../src/components/VerificadorComponent.css | 181 ++ .../src/components/VerificadorComponent.tsx | 197 ++ Mindforge.Web/src/index.css | 57 + Mindforge.Web/src/main.tsx | 5 + .../src/services/MindforgeApiService.ts | 56 + Mindforge.Web/tsconfig.app.json | 33 + Mindforge.Web/tsconfig.json | 7 + Mindforge.Web/tsconfig.node.json | 26 + Mindforge.Web/vite.config.ts | 7 + README.md | 3 + mindforge.sln | 24 + 55 files changed, 4164 insertions(+), 2 deletions(-) create mode 100644 Mindforge.API/.gitignore create mode 100644 Mindforge.API/Controllers/FileController.cs create mode 100644 Mindforge.API/Controllers/FlashcardController.cs create mode 100644 Mindforge.API/Exceptions/UserException.cs create mode 100644 Mindforge.API/Middlewares/ExceptionHandlingMiddleware.cs create mode 100644 Mindforge.API/Mindforge.API.csproj create mode 100644 Mindforge.API/Mindforge.API.http create mode 100644 Mindforge.API/Models/Enums/LlmProvider.cs create mode 100644 Mindforge.API/Models/Requests/FileCheckRequest.cs create mode 100644 Mindforge.API/Models/Requests/FlashcardGenerateRequest.cs create mode 100644 Mindforge.API/Program.cs create mode 100644 Mindforge.API/Properties/launchSettings.json create mode 100644 Mindforge.API/Providers/GeminiApiProvider.cs create mode 100644 Mindforge.API/Providers/ILlmApiProvider.cs create mode 100644 Mindforge.API/Providers/OpenAIApiProvider.cs create mode 100644 Mindforge.API/Services/AgentService.cs create mode 100644 Mindforge.API/Services/FileService.cs create mode 100644 Mindforge.API/Services/FlashcardService.cs create mode 100644 Mindforge.API/Services/Interfaces/IAgentService.cs create mode 100644 Mindforge.API/Services/Interfaces/IFileService.cs create mode 100644 Mindforge.API/Services/Interfaces/IFlashcardService.cs create mode 100644 Mindforge.API/appsettings.json create mode 100644 Mindforge.Web/.env create mode 100644 Mindforge.Web/.env.dev create mode 100644 Mindforge.Web/.gitignore create mode 100644 Mindforge.Web/index.html create mode 100644 Mindforge.Web/package-lock.json create mode 100644 Mindforge.Web/package.json create mode 100644 Mindforge.Web/public/assets/mindforge-banner.png create mode 100644 Mindforge.Web/public/assets/mindforge.png create mode 100644 Mindforge.Web/public/favicon.ico create mode 100644 Mindforge.Web/src/app.css create mode 100644 Mindforge.Web/src/app.tsx create mode 100644 Mindforge.Web/src/components/Button.css create mode 100644 Mindforge.Web/src/components/Button.tsx create mode 100644 Mindforge.Web/src/components/FlashcardComponent.css create mode 100644 Mindforge.Web/src/components/FlashcardComponent.tsx create mode 100644 Mindforge.Web/src/components/Header.css create mode 100644 Mindforge.Web/src/components/Header.tsx create mode 100644 Mindforge.Web/src/components/Sidebar.css create mode 100644 Mindforge.Web/src/components/Sidebar.tsx create mode 100644 Mindforge.Web/src/components/VerificadorComponent.css create mode 100644 Mindforge.Web/src/components/VerificadorComponent.tsx create mode 100644 Mindforge.Web/src/index.css create mode 100644 Mindforge.Web/src/main.tsx create mode 100644 Mindforge.Web/src/services/MindforgeApiService.ts create mode 100644 Mindforge.Web/tsconfig.app.json create mode 100644 Mindforge.Web/tsconfig.json create mode 100644 Mindforge.Web/tsconfig.node.json create mode 100644 Mindforge.Web/vite.config.ts create mode 100644 README.md create mode 100644 mindforge.sln diff --git a/.gitea/workflows/mindforge-web.yaml b/.gitea/workflows/mindforge-web.yaml index 6370105..66c2d85 100644 --- a/.gitea/workflows/mindforge-web.yaml +++ b/.gitea/workflows/mindforge-web.yaml @@ -1,4 +1,4 @@ -name: Mindforge Web Build and Deploy +name: Mindforge Web Build and Deploy (internal) on: push: @@ -14,6 +14,7 @@ env: REGISTRY_USERNAME: ivanch IMAGE_WEB: ${{ env.REGISTRY_HOST }}/ivanch/mindforge-web KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }} + VITE_API_BASE_URL: http://api.mindforge.haven jobs: build_mindforge_web: @@ -41,7 +42,7 @@ jobs: context: Mindforge.Web platforms: linux/amd64,linux/arm64 build-args: | - VITE_API_BASE_URL=${{ secrets.VITE_API_BASE_URL }} + VITE_API_BASE_URL=${{ env.VITE_API_BASE_URL }} tags: | ${{ env.IMAGE_WEB }}:latest diff --git a/Mindforge.API/.gitignore b/Mindforge.API/.gitignore new file mode 100644 index 0000000..f135ba9 --- /dev/null +++ b/Mindforge.API/.gitignore @@ -0,0 +1,3 @@ +bin +obj +appsettings.Development.json \ No newline at end of file diff --git a/Mindforge.API/Controllers/FileController.cs b/Mindforge.API/Controllers/FileController.cs new file mode 100644 index 0000000..dfa4c92 --- /dev/null +++ b/Mindforge.API/Controllers/FileController.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Mindforge.API.Exceptions; +using Mindforge.API.Models.Requests; +using Mindforge.API.Services.Interfaces; + +namespace Mindforge.API.Controllers +{ + [ApiController] + [Route("api/v1/file")] + public class FileController : ControllerBase + { + private readonly IFileService _fileService; + + public FileController(IFileService fileService) + { + _fileService = fileService; + } + + [HttpPost("check")] + public async Task CheckFile([FromBody] FileCheckRequest request) + { + if (string.IsNullOrWhiteSpace(request.FileContent) || string.IsNullOrWhiteSpace(request.CheckType)) + { + throw new UserException("FileContent and CheckType are required."); + } + + try + { + var base64Bytes = Convert.FromBase64String(request.FileContent); + request.FileContent = System.Text.Encoding.UTF8.GetString(base64Bytes); + } + catch (FormatException) + { + throw new UserException("FileContent must be a valid base64 string."); + } + + var response = await _fileService.CheckFileAsync(request); + return Ok(new { result = response }); + } + } +} diff --git a/Mindforge.API/Controllers/FlashcardController.cs b/Mindforge.API/Controllers/FlashcardController.cs new file mode 100644 index 0000000..8a64b3b --- /dev/null +++ b/Mindforge.API/Controllers/FlashcardController.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Mindforge.API.Exceptions; +using Mindforge.API.Models.Requests; +using Mindforge.API.Services.Interfaces; + +namespace Mindforge.API.Controllers +{ + [ApiController] + [Route("api/v1/flashcard")] + public class FlashcardController : ControllerBase + { + private readonly IFlashcardService _flashcardService; + + public FlashcardController(IFlashcardService flashcardService) + { + _flashcardService = flashcardService; + } + + [HttpPost("generate")] + public async Task Generate([FromBody] FlashcardGenerateRequest request) + { + if (string.IsNullOrWhiteSpace(request.FileContent) || request.Amount <= 0) + { + throw new UserException("FileContent is required and Amount must be greater than 0."); + } + + try + { + var base64Bytes = Convert.FromBase64String(request.FileContent); + request.FileContent = System.Text.Encoding.UTF8.GetString(base64Bytes); + } + catch (FormatException) + { + throw new UserException("FileContent must be a valid base64 string."); + } + + var response = await _flashcardService.GenerateFlashcardsAsync(request); + return Ok(new { result = response }); + } + } +} diff --git a/Mindforge.API/Exceptions/UserException.cs b/Mindforge.API/Exceptions/UserException.cs new file mode 100644 index 0000000..6cb1386 --- /dev/null +++ b/Mindforge.API/Exceptions/UserException.cs @@ -0,0 +1,11 @@ +using System; + +namespace Mindforge.API.Exceptions +{ + public class UserException : Exception + { + public UserException(string message) : base(message) + { + } + } +} diff --git a/Mindforge.API/Middlewares/ExceptionHandlingMiddleware.cs b/Mindforge.API/Middlewares/ExceptionHandlingMiddleware.cs new file mode 100644 index 0000000..7df8ff0 --- /dev/null +++ b/Mindforge.API/Middlewares/ExceptionHandlingMiddleware.cs @@ -0,0 +1,47 @@ +using System; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Mindforge.API.Exceptions; + +namespace Mindforge.API.Middlewares +{ + public class ExceptionHandlingMiddleware + { + private readonly RequestDelegate _next; + private readonly ILogger _logger; + + public ExceptionHandlingMiddleware(RequestDelegate next, ILogger logger) + { + _next = next; + _logger = logger; + } + + public async Task InvokeAsync(HttpContext context) + { + try + { + await _next(context); + } + catch (UserException ex) + { + _logger.LogWarning(ex, "User error"); + await HandleExceptionAsync(context, StatusCodes.Status400BadRequest, ex.Message); + } + catch (Exception ex) + { + _logger.LogError(ex, "Internal server error"); + await HandleExceptionAsync(context, StatusCodes.Status500InternalServerError, $"Internal server error: {ex.Message}"); + } + } + + private static Task HandleExceptionAsync(HttpContext context, int statusCode, string message) + { + context.Response.ContentType = "application/json"; + context.Response.StatusCode = statusCode; + + var result = JsonSerializer.Serialize(new { error = message }); + return context.Response.WriteAsync(result); + } + } +} diff --git a/Mindforge.API/Mindforge.API.csproj b/Mindforge.API/Mindforge.API.csproj new file mode 100644 index 0000000..e292517 --- /dev/null +++ b/Mindforge.API/Mindforge.API.csproj @@ -0,0 +1,13 @@ + + + + net9.0 + enable + enable + + + + + + + diff --git a/Mindforge.API/Mindforge.API.http b/Mindforge.API/Mindforge.API.http new file mode 100644 index 0000000..176f4bb --- /dev/null +++ b/Mindforge.API/Mindforge.API.http @@ -0,0 +1,6 @@ +@Mindforge.API_HostAddress = http://localhost:5123 + +GET {{Mindforge.API_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/Mindforge.API/Models/Enums/LlmProvider.cs b/Mindforge.API/Models/Enums/LlmProvider.cs new file mode 100644 index 0000000..83eb027 --- /dev/null +++ b/Mindforge.API/Models/Enums/LlmProvider.cs @@ -0,0 +1,8 @@ +namespace Mindforge.API.Models.Enums +{ + public enum LlmProvider + { + OpenAI, + Gemini + } +} diff --git a/Mindforge.API/Models/Requests/FileCheckRequest.cs b/Mindforge.API/Models/Requests/FileCheckRequest.cs new file mode 100644 index 0000000..58c13dd --- /dev/null +++ b/Mindforge.API/Models/Requests/FileCheckRequest.cs @@ -0,0 +1,13 @@ +namespace Mindforge.API.Models.Requests +{ + public class FileCheckRequest + { + public string FileContent { get; set; } = string.Empty; + public string FileName { get; set; } = string.Empty; + + /// + /// Expected values: "language" or "content" + /// + public string CheckType { get; set; } = string.Empty; + } +} diff --git a/Mindforge.API/Models/Requests/FlashcardGenerateRequest.cs b/Mindforge.API/Models/Requests/FlashcardGenerateRequest.cs new file mode 100644 index 0000000..216cab0 --- /dev/null +++ b/Mindforge.API/Models/Requests/FlashcardGenerateRequest.cs @@ -0,0 +1,21 @@ +using System.Text.Json.Serialization; + +namespace Mindforge.API.Models.Requests +{ + public class FlashcardGenerateRequest + { + public string FileContent { get; set; } = string.Empty; + public string FileName { get; set; } = string.Empty; + public int Amount { get; set; } + [JsonConverter(typeof(JsonStringEnumConverter))] + public FlashcardMode? Mode { get; set; } = FlashcardMode.Simple; + } + + public enum FlashcardMode + { + Basic, + Simple, + Detailed, + Hyper + } +} diff --git a/Mindforge.API/Program.cs b/Mindforge.API/Program.cs new file mode 100644 index 0000000..0ea2199 --- /dev/null +++ b/Mindforge.API/Program.cs @@ -0,0 +1,71 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Mindforge.API.Providers; +using Mindforge.API.Services; +using Mindforge.API.Services.Interfaces; + +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +builder.Services.AddControllers(); +builder.Logging.AddConsole(); +builder.Logging.AddDebug(); + +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +// Configure CORS +builder.Services.AddCors(options => +{ + options.AddPolicy("AllowAll", policy => + { + policy.AllowAnyOrigin() + .AllowAnyMethod() + .AllowAnyHeader(); + }); +}); + +// Register HttpClient for providers +builder.Services.AddHttpClient(); + +// Register Providers +builder.Services.AddScoped(); +builder.Services.AddScoped(); + +// Register Services +builder.Services.AddScoped(); +builder.Services.AddScoped(); +builder.Services.AddScoped(); + +var app = builder.Build(); + +app.UseCors("AllowAll"); + +app.UseMiddleware(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); +} + +app.UseHttpsRedirection(); +app.UseAuthorization(); +app.MapControllers(); + +// Check for env vars +var openAiKey = builder.Configuration["OPENAI_API_KEY"]; +var geminiKey = builder.Configuration["GEMINI_API_KEY"]; + +if (string.IsNullOrEmpty(openAiKey)) +{ + app.Logger.LogWarning("OPENAI_API_KEY not found in configuration."); +} + +if (string.IsNullOrEmpty(geminiKey)) +{ + app.Logger.LogWarning("GEMINI_API_KEY not found in configuration."); +} + +app.Run(); diff --git a/Mindforge.API/Properties/launchSettings.json b/Mindforge.API/Properties/launchSettings.json new file mode 100644 index 0000000..0b3a1fe --- /dev/null +++ b/Mindforge.API/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5123", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7116;http://localhost:5123", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Mindforge.API/Providers/GeminiApiProvider.cs b/Mindforge.API/Providers/GeminiApiProvider.cs new file mode 100644 index 0000000..d57f9bf --- /dev/null +++ b/Mindforge.API/Providers/GeminiApiProvider.cs @@ -0,0 +1,202 @@ +using System; +using System.Net.Http; +using System.Text; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; + +namespace Mindforge.API.Providers +{ + public class GeminiApiProvider : ILlmApiProvider + { + private readonly HttpClient _httpClient; + private readonly IConfiguration _configuration; + private readonly ILogger _logger; + + public GeminiApiProvider(HttpClient httpClient, IConfiguration configuration, ILogger logger) + { + _httpClient = httpClient; + _httpClient.Timeout = TimeSpan.FromMinutes(5); + _configuration = configuration; + _logger = logger; + } + + public async Task SendRequestAsync(string systemPrompt, string userPrompt, string model) + { + var apiKey = _configuration["GEMINI_API_KEY"]; + if (string.IsNullOrEmpty(apiKey)) + { + throw new Exception("GEMINI_API_KEY not found in configuration."); + } + + var apiBase = "https://generativelanguage.googleapis.com/v1beta"; + var url = $"{apiBase.TrimEnd('/')}/models/{model}:generateContent?key={apiKey}"; + + var reqBody = new + { + system_instruction = string.IsNullOrEmpty(systemPrompt) ? null : new + { + parts = new[] { new { text = systemPrompt } } + }, + contents = new[] + { + new + { + role = "user", + parts = new[] { new { text = userPrompt } } + } + } + }; + + var jsonBody = JsonSerializer.Serialize(reqBody, new JsonSerializerOptions { DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull }); + + using var request = new HttpRequestMessage(HttpMethod.Post, url); + request.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json"); + + var response = await _httpClient.SendAsync(request); + var responseBody = await response.Content.ReadAsStringAsync(); + + if (!response.IsSuccessStatusCode) + { + throw new Exception($"Gemini API error status {(int)response.StatusCode}: {responseBody}"); + } + + var result = JsonSerializer.Deserialize(responseBody); + if (result.TryGetProperty("candidates", out var candidates) && candidates.GetArrayLength() > 0) + { + var content = candidates[0].GetProperty("content"); + if (content.TryGetProperty("parts", out var parts) && parts.GetArrayLength() > 0) + { + return parts[0].GetProperty("text").GetString() ?? string.Empty; + } + } + + throw new Exception("empty response from Gemini API"); + } + + public async Task SendRequestBatchAsync(string systemPrompt, string userPrompt, string model) + { + var apiKey = _configuration["GEMINI_API_KEY"]; + if (string.IsNullOrEmpty(apiKey)) + throw new Exception("GEMINI_API_KEY not found in configuration."); + + var apiBase = "https://generativelanguage.googleapis.com/v1beta"; + var jsonOptions = new JsonSerializerOptions { DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull }; + + // Build single inline request + var batchBody = new + { + batch = new + { + display_name = "mindforge-batch", + input_config = new + { + requests = new + { + requests = new[] + { + new + { + request = new + { + system_instruction = string.IsNullOrEmpty(systemPrompt) ? null : new + { + parts = new[] { new { text = systemPrompt } } + }, + contents = new[] + { + new + { + role = "user", + parts = new[] { new { text = userPrompt } } + } + } + }, + metadata = new { key = "request-1" } + } + } + } + } + } + }; + + // Submit batch job + var createUrl = $"{apiBase}/models/{model}:batchGenerateContent?key={apiKey}"; + using var createReq = new HttpRequestMessage(HttpMethod.Post, createUrl); + createReq.Content = new StringContent(JsonSerializer.Serialize(batchBody, jsonOptions), Encoding.UTF8, "application/json"); + + var createResp = await _httpClient.SendAsync(createReq); + var createBody = await createResp.Content.ReadAsStringAsync(); + if (!createResp.IsSuccessStatusCode) + throw new Exception($"Gemini Batch API error creating job {(int)createResp.StatusCode}: {createBody}"); + + _logger.LogInformation("Gemini Batch API job created"); + + var createResult = JsonSerializer.Deserialize(createBody); + if (!createResult.TryGetProperty("name", out var nameEl)) + throw new Exception("Gemini Batch API did not return a job name."); + + var batchName = nameEl.GetString()!; + var pollUrl = $"{apiBase}/{batchName}?key={apiKey}"; + + _logger.LogInformation("Gemini Batch API job name: {BatchName}", batchName); + + // Poll until terminal state + while (true) + { + await Task.Delay(TimeSpan.FromSeconds(10)); + + using var pollReq = new HttpRequestMessage(HttpMethod.Get, pollUrl); + var pollResp = await _httpClient.SendAsync(pollReq); + var pollBody = await pollResp.Content.ReadAsStringAsync(); + + if (!pollResp.IsSuccessStatusCode) + throw new Exception($"Gemini Batch API error polling status {(int)pollResp.StatusCode}: {pollBody}"); + + var pollResult = JsonSerializer.Deserialize(pollBody); + var metadata = pollResult.GetProperty("metadata"); + var state = metadata.GetProperty("state"); + + _logger.LogInformation("Gemini Batch API job state: {State}", state.GetString()); + + switch (state.GetString()) + { + case "BATCH_STATE_SUCCEEDED": + if (pollResult.TryGetProperty("response", out var batchResponse) && + batchResponse.TryGetProperty("inlinedResponses", out var inlinedResponses) && + inlinedResponses.TryGetProperty("inlinedResponses", out var inlinedResponsesInternal) && + inlinedResponsesInternal.GetArrayLength() > 0) + { + _logger.LogInformation("Gemini Batch API job succeeded"); + + var first = inlinedResponsesInternal[0]; + if (first.TryGetProperty("error", out var reqError)) + throw new Exception($"Gemini Batch request error: {reqError}"); + + if (first.TryGetProperty("response", out var innerResponse) && + innerResponse.TryGetProperty("candidates", out var candidates) && + candidates.GetArrayLength() > 0) + { + var content = candidates[0].GetProperty("content"); + if (content.TryGetProperty("parts", out var parts) && parts.GetArrayLength() > 0) + return parts[0].GetProperty("text").GetString() ?? string.Empty; + } + } + throw new Exception("Gemini Batch job succeeded but returned no content."); + + case "BATCH_STATE_FAILED": + throw new Exception($"Gemini Batch job failed: {pollBody}"); + + case "BATCH_STATE_CANCELLED": + throw new Exception("Gemini Batch job was cancelled."); + + case "BATCH_STATE_EXPIRED": + throw new Exception("Gemini Batch job expired before completing."); + + // BATCH_STATE_PENDING / BATCH_STATE_RUNNING — keep polling + } + } + } + } +} diff --git a/Mindforge.API/Providers/ILlmApiProvider.cs b/Mindforge.API/Providers/ILlmApiProvider.cs new file mode 100644 index 0000000..2bd756a --- /dev/null +++ b/Mindforge.API/Providers/ILlmApiProvider.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; + +namespace Mindforge.API.Providers +{ + public interface ILlmApiProvider + { + Task SendRequestAsync(string systemPrompt, string userPrompt, string model); + Task SendRequestBatchAsync(string systemPrompt, string userPrompt, string model); + } +} diff --git a/Mindforge.API/Providers/OpenAIApiProvider.cs b/Mindforge.API/Providers/OpenAIApiProvider.cs new file mode 100644 index 0000000..3870430 --- /dev/null +++ b/Mindforge.API/Providers/OpenAIApiProvider.cs @@ -0,0 +1,110 @@ +using System; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using Microsoft.Extensions.Configuration; + +namespace Mindforge.API.Providers +{ + public class OpenAIApiProvider : ILlmApiProvider + { + private readonly HttpClient _httpClient; + private readonly IConfiguration _configuration; + private readonly ILogger _logger; + + public OpenAIApiProvider(HttpClient httpClient, IConfiguration configuration, ILogger logger) + { + _httpClient = httpClient; + _httpClient.Timeout = TimeSpan.FromMinutes(5); + _configuration = configuration; + _logger = logger; + } + + public async Task SendRequestAsync(string systemPrompt, string userPrompt, string model) + { + var apiKey = _configuration["OPENAI_API_KEY"]; + if (string.IsNullOrEmpty(apiKey)) + { + throw new Exception("OPENAI_API_KEY not found in configuration."); + } + + var apiBase = "https://api.openai.com/v1"; + var url = $"{apiBase.TrimEnd('/')}/responses"; + + var reqBody = new + { + model = model, + input = new[] + { + new { role = "developer", content = systemPrompt }, + new { role = "user", content = userPrompt } + }, + reasoning = new + { + effort = "low" + } + }; + + var jsonBody = JsonSerializer.Serialize(reqBody); + + Exception? lastErr = null; + + for (int i = 0; i < 5; i++) + { + using var request = new HttpRequestMessage(HttpMethod.Post, url); + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); + request.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json"); + + try + { + var response = await _httpClient.SendAsync(request); + var responseBody = await response.Content.ReadAsStringAsync(); + + if (!response.IsSuccessStatusCode) + { + lastErr = new Exception($"OpenAI API error status {(int)response.StatusCode}: {responseBody}"); + await Task.Delay(TimeSpan.FromSeconds(1 << i)); + continue; + } + + var result = JsonSerializer.Deserialize(responseBody); + if (result.TryGetProperty("output", out var outputArray)) + { + foreach (var outputItem in outputArray.EnumerateArray()) + { + if (outputItem.TryGetProperty("content", out var contentArray)) + { + foreach (var contentItem in contentArray.EnumerateArray()) + { + if (contentItem.TryGetProperty("text", out var textContent)) + { + return textContent.GetString() ?? string.Empty; + } + } + } + } + } + + _logger.LogWarning("OpenAI API raw response: {responseBody}", responseBody); + + throw new Exception("empty response from OpenAI API"); + } + catch (Exception ex) + { + _logger.LogError(ex, "Error in OpenAI API request"); + lastErr = ex; + await Task.Delay(TimeSpan.FromSeconds(1 << i)); + } + } + + throw new Exception($"failed to get OpenAI response after 5 attempts. Last error: {lastErr?.Message}", lastErr); + } + + public async Task SendRequestBatchAsync(string systemPrompt, string userPrompt, string model) + { + throw new NotImplementedException(); + } + } +} diff --git a/Mindforge.API/Services/AgentService.cs b/Mindforge.API/Services/AgentService.cs new file mode 100644 index 0000000..ec0ab52 --- /dev/null +++ b/Mindforge.API/Services/AgentService.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Mindforge.API.Models.Enums; +using Mindforge.API.Providers; +using Mindforge.API.Services.Interfaces; + +namespace Mindforge.API.Services +{ + public class AgentService : IAgentService + { + private readonly IEnumerable _providers; + + public AgentService(IEnumerable providers) + { + _providers = providers; + } + + public Task ProcessRequestAsync(LlmProvider providerEnum, string systemPrompt, string userPrompt, string model) + { + ILlmApiProvider provider = providerEnum switch + { + LlmProvider.OpenAI => _providers.OfType().FirstOrDefault() + ?? throw new Exception("OpenAI provider not registered"), + LlmProvider.Gemini => _providers.OfType().FirstOrDefault() + ?? throw new Exception("Gemini provider not registered"), + _ => throw new Exception("Unknown provider") + }; + + return provider.SendRequestAsync(systemPrompt, userPrompt, model); + } + + public Task ProcessRequestBatchAsync(LlmProvider providerEnum, string systemPrompt, string userPrompt, string model) + { + ILlmApiProvider provider = providerEnum switch + { + LlmProvider.OpenAI => _providers.OfType().FirstOrDefault() + ?? throw new Exception("OpenAI provider not registered"), + LlmProvider.Gemini => _providers.OfType().FirstOrDefault() + ?? throw new Exception("Gemini provider not registered"), + _ => throw new Exception("Unknown provider") + }; + + return provider.SendRequestBatchAsync(systemPrompt, userPrompt, model); + } + } +} diff --git a/Mindforge.API/Services/FileService.cs b/Mindforge.API/Services/FileService.cs new file mode 100644 index 0000000..226e6dd --- /dev/null +++ b/Mindforge.API/Services/FileService.cs @@ -0,0 +1,61 @@ +using System; +using System.Threading.Tasks; +using Mindforge.API.Models.Enums; +using Mindforge.API.Models.Requests; +using Mindforge.API.Services.Interfaces; +using Mindforge.API.Exceptions; + +namespace Mindforge.API.Services +{ + public class FileService : IFileService + { + private readonly IAgentService _agentService; + + private const LlmProvider DefaultProvider = LlmProvider.OpenAI; + private const string DefaultModel = "gpt-5-mini"; + + public FileService(IAgentService agentService) + { + _agentService = agentService; + } + + public async Task CheckFileAsync(FileCheckRequest request) + { + string systemPrompt; + + if (request.CheckType.ToLower() == "language") + { + systemPrompt = $@"Você é um revisor de textos sênior e especialista em língua portuguesa do Brasil. +Sua tarefa é analisar o texto fornecido e corrigir rigorosamente todos os erros gramaticais, de concordância, pontuação, garantindo clareza, coesão e fluidez. +Por favor, siga esta estrutura: +1. Retorne o texto completamente revisado e polido. +2. Não adicione nenhum texto adicional, apenas o texto revisado. +3. Não altere o sentido do texto, mantenha a mesma ideia. Apenas corrija os erros gramaticais, de concordância e pontuação. +Responda única e exclusivamente em português do Brasil. +Foque em textos de concursos públicos, principalmente para a banca Cebraspe."; + } + else if (request.CheckType.ToLower() == "content") + { + systemPrompt = $@"Você é um analista de conteúdo experiente, especializado em revisão crítica e verificação de fatos. +Sua tarefa é realizar uma análise rigorosa do texto fornecido, identificando erros lógicos, imprecisões de conteúdo, contradições internas e inconsistências argumentativas. +Por favor, siga esta estrutura: +1. Destaque cada problema encontrado no texto original. +2. Explique detalhadamente por que é um erro ou inconsistência. +3. Apresente sugestões claras e embasadas para reescrever ou corrigir os trechos problemáticos, melhorando a coerência e a lógica e a clareza do conteúdo. +Responda única e exclusivamente em português do Brasil e mantenha um tom analítico e construtivo. + +Responda em tópicos para ser apresentados ao usuário, sendo sucinto e não extremamente detalhado. +Os resumos serão utilizados para concursos públicos, principalmente para a banca Cebraspe. +"; + } + else + { + throw new UserException("Tipo de verificação inválido. Use 'language' ou 'content'."); + } + + string userPrompt = $"Arquivo: {request.FileName}\nConteúdo:\n{request.FileContent}"; + + return await _agentService.ProcessRequestAsync(DefaultProvider, systemPrompt, userPrompt, DefaultModel); + } + } +} diff --git a/Mindforge.API/Services/FlashcardService.cs b/Mindforge.API/Services/FlashcardService.cs new file mode 100644 index 0000000..4c5172b --- /dev/null +++ b/Mindforge.API/Services/FlashcardService.cs @@ -0,0 +1,83 @@ +using System.Threading.Tasks; +using Mindforge.API.Models.Enums; +using Mindforge.API.Models.Requests; +using Mindforge.API.Services.Interfaces; + +namespace Mindforge.API.Services +{ + public class FlashcardService : IFlashcardService + { + private readonly IAgentService _agentService; + private readonly ILogger _logger; + + private const LlmProvider DefaultProvider = LlmProvider.Gemini; + private string DefaultModel = "gemini-3.1-flash-image-preview"; + + public FlashcardService(IAgentService agentService, ILogger logger) + { + _agentService = agentService; + _logger = logger; + } + + public async Task GenerateFlashcardsAsync(FlashcardGenerateRequest request) + { + var extraPrompt = ""; + + switch (request.Mode) + { + case FlashcardMode.Basic: + DefaultModel = "gemini-3.1-flash-lite-preview"; + break; + case FlashcardMode.Simple: + DefaultModel = "gemini-3.1-flash-image-preview"; + break; + case FlashcardMode.Detailed: + DefaultModel = "gemini-3.1-flash-image-preview"; + extraPrompt = "Crie flashcards mais detalhados."; + break; + case FlashcardMode.Hyper: + DefaultModel = "gemini-3.1-pro-preview"; + extraPrompt = "Adicione também pequenas questões para fixação, para que o usuário possa testar seus conhecimentos. As questões devem ser curtas e objetivas, como se fosse cobradas em prova mesmo."; + break; + } + + string systemPrompt = $@"Você é um assistente educacional especializado em criar flashcards para o Anki. +Baseado no texto fornecido, crie exatamente {request.Amount} flashcards que focam nos conceitos mais importantes e difíceis. +A resposta FINAL deve ser APENAS no formato CSV, pronto para importação no Anki, sem nenhum texto adicional antes ou depois. +O formato CSV deve ter duas colunas: a frente da carta (pergunta/conceito) e o verso (resposta/explicação). Use ponto e vírgula (;) como separador. Não adicione o cabeçalho. +As perguntas e respostas devem estar estritamente em Português do Brasil. + +Exemplo de saída: +""Qual é a capital do Brasil?"";""Brasília"" +""Qual é a maior cidade do Brasil?"";""São Paulo"" + +Com base no arquivo fornecido, crie exatamente {request.Amount} flashcards que focam nos conceitos mais importantes e difíceis. +{extraPrompt} +"; + + string userPrompt = $"Arquivo: {request.FileName}\nConteúdo:\n{request.FileContent}"; + + //var result = await _agentService.ProcessRequestAsync(DefaultProvider, systemPrompt, userPrompt, DefaultModel); + var result = await _agentService.ProcessRequestBatchAsync(DefaultProvider, systemPrompt, userPrompt, DefaultModel); + + var lines = result.Split('\n'); + + if (lines.Length == 0) + { + throw new Exception("Nenhum flashcard gerado."); + } + + if (lines.Length > request.Amount) + { + _logger.LogWarning("Quantidade de flashcards excede o limite."); + } + + if (lines.Length < request.Amount) + { + _logger.LogWarning("Quantidade de flashcards abaixo do limite."); + } + + return result; + } + } +} diff --git a/Mindforge.API/Services/Interfaces/IAgentService.cs b/Mindforge.API/Services/Interfaces/IAgentService.cs new file mode 100644 index 0000000..55293cc --- /dev/null +++ b/Mindforge.API/Services/Interfaces/IAgentService.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; +using Mindforge.API.Models.Enums; + +namespace Mindforge.API.Services.Interfaces +{ + public interface IAgentService + { + Task ProcessRequestAsync(LlmProvider provider, string systemPrompt, string userPrompt, string model); + Task ProcessRequestBatchAsync(LlmProvider provider, string systemPrompt, string userPrompt, string model); + } +} diff --git a/Mindforge.API/Services/Interfaces/IFileService.cs b/Mindforge.API/Services/Interfaces/IFileService.cs new file mode 100644 index 0000000..84b4b89 --- /dev/null +++ b/Mindforge.API/Services/Interfaces/IFileService.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using Mindforge.API.Models.Requests; + +namespace Mindforge.API.Services.Interfaces +{ + public interface IFileService + { + Task CheckFileAsync(FileCheckRequest request); + } +} diff --git a/Mindforge.API/Services/Interfaces/IFlashcardService.cs b/Mindforge.API/Services/Interfaces/IFlashcardService.cs new file mode 100644 index 0000000..ec8da2d --- /dev/null +++ b/Mindforge.API/Services/Interfaces/IFlashcardService.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; +using Mindforge.API.Models.Requests; + +namespace Mindforge.API.Services.Interfaces +{ + public interface IFlashcardService + { + Task GenerateFlashcardsAsync(FlashcardGenerateRequest request); + } +} diff --git a/Mindforge.API/appsettings.json b/Mindforge.API/appsettings.json new file mode 100644 index 0000000..10f68b8 --- /dev/null +++ b/Mindforge.API/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/Mindforge.API/deploy/mindforge-api.yaml b/Mindforge.API/deploy/mindforge-api.yaml index 08bdbf6..34facfc 100644 --- a/Mindforge.API/deploy/mindforge-api.yaml +++ b/Mindforge.API/deploy/mindforge-api.yaml @@ -49,3 +49,24 @@ spec: ports: - port: 80 targetPort: 8080 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: mindforge-api + namespace: mindforge + labels: + app.kubernetes.io/name: mindforge-api +spec: + ingressClassName: nginx + rules: + - host: "api.mindforge.haven" + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: mindforge-api + port: + number: 80 diff --git a/Mindforge.Web/.env b/Mindforge.Web/.env new file mode 100644 index 0000000..b54eccf --- /dev/null +++ b/Mindforge.Web/.env @@ -0,0 +1 @@ +VITE_API_BASE_URL=http://localhost:5123 diff --git a/Mindforge.Web/.env.dev b/Mindforge.Web/.env.dev new file mode 100644 index 0000000..b54eccf --- /dev/null +++ b/Mindforge.Web/.env.dev @@ -0,0 +1 @@ +VITE_API_BASE_URL=http://localhost:5123 diff --git a/Mindforge.Web/.gitignore b/Mindforge.Web/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/Mindforge.Web/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Mindforge.Web/deploy/mindforge-web.yaml b/Mindforge.Web/deploy/mindforge-web.yaml index 19816c6..4b0e167 100644 --- a/Mindforge.Web/deploy/mindforge-web.yaml +++ b/Mindforge.Web/deploy/mindforge-web.yaml @@ -38,3 +38,24 @@ spec: ports: - port: 80 targetPort: 80 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: mindforge-web + namespace: mindforge + labels: + app.kubernetes.io/name: mindforge-web +spec: + ingressClassName: nginx + rules: + - host: "mindforge.haven" + http: + paths: + - path: "/" + pathType: Prefix + backend: + service: + name: mindforge-web + port: + number: 80 diff --git a/Mindforge.Web/index.html b/Mindforge.Web/index.html new file mode 100644 index 0000000..d0f0e28 --- /dev/null +++ b/Mindforge.Web/index.html @@ -0,0 +1,16 @@ + + + + + + + + Mindforge + + + +
+ + + + \ No newline at end of file diff --git a/Mindforge.Web/package-lock.json b/Mindforge.Web/package-lock.json new file mode 100644 index 0000000..685766c --- /dev/null +++ b/Mindforge.Web/package-lock.json @@ -0,0 +1,1897 @@ +{ + "name": "mindforge-web", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "mindforge-web", + "version": "0.0.0", + "dependencies": { + "@types/marked": "^5.0.2", + "diff": "^8.0.3", + "marked": "^17.0.4", + "preact": "^10.29.0" + }, + "devDependencies": { + "@preact/preset-vite": "^2.10.4", + "@types/diff": "^7.0.2", + "@types/node": "^24.12.0", + "typescript": "~5.9.3", + "vite": "^8.0.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.27.3" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", + "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", + "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-plugin-utils": "^7.28.6", + "@babel/plugin-syntax-jsx": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.1.tgz", + "integrity": "sha512-mukuNALVsoix/w1BJwFzwXBN/dHeejQtuVzcDsfOEsdpCumXb/E9j8w11h5S54tT1xhifGfbbSm/ICrObRb3KA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.0", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.1.tgz", + "integrity": "sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz", + "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.1.tgz", + "integrity": "sha512-p64ah1M1ld8xjWv3qbvFwHiFVWrq1yFvV4f7w+mzaqiR4IlSgkqhcRdHwsGgomwzBH51sRY4NEowLxnaBjcW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1", + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.120.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.120.0.tgz", + "integrity": "sha512-k1YNu55DuvAip/MGE1FTsIuU3FUCn6v/ujG9V7Nq5Df/kX2CWb13hhwD0lmJGMGqE+bE1MXvv9SZVnMzEXlWcg==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@preact/preset-vite": { + "version": "2.10.4", + "resolved": "https://registry.npmjs.org/@preact/preset-vite/-/preset-vite-2.10.4.tgz", + "integrity": "sha512-L7RQRs2GiG0lLUz7JSg07vU6lhlzdIthH0eqYZmRR70tTB9ikKCq2LHr+PZzhzIOco3Dioi6P6e/fjAmDUMJbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@prefresh/vite": "^2.4.11", + "@rollup/pluginutils": "^5.0.0", + "babel-plugin-transform-hook-names": "^1.0.2", + "debug": "^4.4.3", + "magic-string": "^0.30.21", + "picocolors": "^1.1.1", + "vite-prerender-plugin": "^0.5.8", + "zimmerframe": "^1.1.4" + }, + "peerDependencies": { + "@babel/core": "7.x", + "vite": "2.x || 3.x || 4.x || 5.x || 6.x || 7.x || 8.x" + } + }, + "node_modules/@prefresh/babel-plugin": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@prefresh/babel-plugin/-/babel-plugin-0.5.3.tgz", + "integrity": "sha512-57LX2SHs4BX2s1IwCjNzTE2OJeEepRCNf1VTEpbNcUyHfMO68eeOWGDIt4ob9aYlW6PEWZ1SuwNikuoIXANDtQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@prefresh/core": { + "version": "1.5.9", + "resolved": "https://registry.npmjs.org/@prefresh/core/-/core-1.5.9.tgz", + "integrity": "sha512-IKBKCPaz34OFVC+adiQ2qaTF5qdztO2/4ZPf4KsRTgjKosWqxVXmEbxCiUydYZRY8GVie+DQlKzQr9gt6HQ+EQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "preact": "^10.0.0 || ^11.0.0-0" + } + }, + "node_modules/@prefresh/utils": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@prefresh/utils/-/utils-1.2.1.tgz", + "integrity": "sha512-vq/sIuN5nYfYzvyayXI4C2QkprfNaHUQ9ZX+3xLD8nL3rWyzpxOm1+K7RtMbhd+66QcaISViK7amjnheQ/4WZw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@prefresh/vite": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/@prefresh/vite/-/vite-2.4.12.tgz", + "integrity": "sha512-FY1fzXpUjiuosznMV0YM7XAOPZjB5FIdWS0W24+XnlxYkt9hNAwwsiKYn+cuTEoMtD/ZVazS5QVssBr9YhpCQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.22.1", + "@prefresh/babel-plugin": "^0.5.2", + "@prefresh/core": "^1.5.0", + "@prefresh/utils": "^1.2.0", + "@rollup/pluginutils": "^4.2.1" + }, + "peerDependencies": { + "preact": "^10.4.0 || ^11.0.0-0", + "vite": ">=2.0.0" + } + }, + "node_modules/@prefresh/vite/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@prefresh/vite/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.10.tgz", + "integrity": "sha512-jOHxwXhxmFKuXztiu1ORieJeTbx5vrTkcOkkkn2d35726+iwhrY1w/+nYY/AGgF12thg33qC3R1LMBF5tHTZHg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.10.tgz", + "integrity": "sha512-gED05Teg/vtTZbIJBc4VNMAxAFDUPkuO/rAIyyxZjTj1a1/s6z5TII/5yMGZ0uLRCifEtwUQn8OlYzuYc0m70w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.10.tgz", + "integrity": "sha512-rI15NcM1mA48lqrIxVkHfAqcyFLcQwyXWThy+BQ5+mkKKPvSO26ir+ZDp36AgYoYVkqvMcdS8zOE6SeBsR9e8A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.10.tgz", + "integrity": "sha512-XZRXHdTa+4ME1MuDVp021+doQ+z6Ei4CCFmNc5/sKbqb8YmkiJdj8QKlV3rCI0AJtAeSB5n0WGPuJWNL9p/L2w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.10.tgz", + "integrity": "sha512-R0SQMRluISSLzFE20sPWYHVmJdDQnRyc/FzSCN72BqQmh2SOZUFG+N3/vBZpR4C6WpEUVYJLrYUXaj43sJsNLA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.10.tgz", + "integrity": "sha512-Y1reMrV/o+cwpduYhJuOE3OMKx32RMYCidf14y+HssARRmhDuWXJ4yVguDg2R/8SyyGNo+auzz64LnPK9Hq6jg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.10.tgz", + "integrity": "sha512-vELN+HNb2IzuzSBUOD4NHmP9yrGwl1DVM29wlQvx1OLSclL0NgVWnVDKl/8tEks79EFek/kebQKnNJkIAA4W2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.10.tgz", + "integrity": "sha512-ZqrufYTgzxbHwpqOjzSsb0UV/aV2TFIY5rP8HdsiPTv/CuAgCRjM6s9cYFwQ4CNH+hf9Y4erHW1GjZuZ7WoI7w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.10.tgz", + "integrity": "sha512-gSlmVS1FZJSRicA6IyjoRoKAFK7IIHBs7xJuHRSmjImqk3mPPWbR7RhbnfH2G6bcmMEllCt2vQ/7u9e6bBnByg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.10.tgz", + "integrity": "sha512-eOCKUpluKgfObT2pHjztnaWEIbUabWzk3qPZ5PuacuPmr4+JtQG4k2vGTY0H15edaTnicgU428XW/IH6AimcQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.10.tgz", + "integrity": "sha512-Xdf2jQbfQowJnLcgYfD/m0Uu0Qj5OdxKallD78/IPPfzaiaI4KRAwZzHcKQ4ig1gtg1SuzC7jovNiM2TzQsBXA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.10.tgz", + "integrity": "sha512-o1hYe8hLi1EY6jgPFyxQgQ1wcycX+qz8eEbVmot2hFkgUzPxy9+kF0u0NIQBeDq+Mko47AkaFFaChcvZa9UX9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.10.tgz", + "integrity": "sha512-Ugv9o7qYJudqQO5Y5y2N2SOo6S4WiqiNOpuQyoPInnhVzCY+wi/GHltcLHypG9DEUYMB0iTB/huJrpadiAcNcA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^1.1.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.10.tgz", + "integrity": "sha512-7UODQb4fQUNT/vmgDZBl3XOBAIOutP5R3O/rkxg0aLfEGQ4opbCgU5vOw/scPe4xOqBwL9fw7/RP1vAMZ6QlAQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.10.tgz", + "integrity": "sha512-PYxKHMVHOb5NJuDL53vBUl1VwUjymDcYI6rzpIni0C9+9mTiJedvUxSk7/RPp7OOAm3v+EjgMu9bIy3N6b408w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.10.tgz", + "integrity": "sha512-UkVDEFk1w3mveXeKgaTuYfKWtPbvgck1dT8TUG3bnccrH0XtLTuAyfCoks4Q/M5ZGToSVJTIQYCzy2g/atAOeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/pluginutils": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/diff": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-7.0.2.tgz", + "integrity": "sha512-JSWRMozjFKsGlEjiiKajUjIJVKuKdE3oVy2DNtK+fUo8q82nhFZ2CPQwicAIkXrofahDXrWJ7mjelvZphMS98Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/marked": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@types/marked/-/marked-5.0.2.tgz", + "integrity": "sha512-OucS4KMHhFzhz27KxmWg7J+kIYqyqoW5kdIEI319hqARQQUTqhao3M/F+uFnDXD0Rg72iDDZxZNxq5gvctmLlg==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/babel-plugin-transform-hook-names": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-hook-names/-/babel-plugin-transform-hook-names-1.0.2.tgz", + "integrity": "sha512-5gafyjyyBTTdX/tQQ0hRgu4AhNHG/hqWi0ZZmg2xvs2FgRkJXzDNKBZCyoYqgFkovfDrgM8OoKg8karoUvWeCw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@babel/core": "^7.12.10" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.9", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.9.tgz", + "integrity": "sha512-OZd0e2mU11ClX8+IdXe3r0dbqMEznRiT4TfbhYIbcRPZkqJ7Qwer8ij3GZAmLsRKa+II9V1v5czCkvmHH3XZBg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001780", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001780.tgz", + "integrity": "sha512-llngX0E7nQci5BPJDqoZSbuZ5Bcs9F5db7EtgfwBerX9XGtkkiO4NwfDDIRzHTTwcYC8vC7bmeUEPGrKlR/TkQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-select": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz", + "integrity": "sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.321", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.321.tgz", + "integrity": "sha512-L2C7Q279W2D/J4PLZLk7sebOILDSWos7bMsMNN06rK482umHUrh/3lM8G7IlHFOYip2oAg5nha1rCMxr/rs6ZQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/marked": { + "version": "17.0.4", + "resolved": "https://registry.npmjs.org/marked/-/marked-17.0.4.tgz", + "integrity": "sha512-NOmVMM+KAokHMvjWmC5N/ZOvgmSWuqJB8FoYI019j4ogb/PeRMKoKIjReZ2w3376kkA8dSJIP8uD993Kxc0iRQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-html-parser": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/node-html-parser/-/node-html-parser-6.1.13.tgz", + "integrity": "sha512-qIsTMOY4C/dAa5Q5vsobRpOOvPfC4pB61UVW2uSwZNUp0QU/jCekTal1vMmbO0DgdHeLUJpv/ARmDqErVxA3Sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^5.1.0", + "he": "1.2.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.29.0", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.29.0.tgz", + "integrity": "sha512-wSAGyk2bYR1c7t3SZ3jHcM6xy0lcBcDel6lODcs9ME6Th++Dx2KU+6D3HD8wMMKGA8Wpw7OMd3/4RGzYRpzwRg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/rolldown": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.10.tgz", + "integrity": "sha512-q7j6vvarRFmKpgJUT8HCAUljkgzEp4LAhPlJUvQhA5LA1SUL36s5QCysMutErzL3EbNOZOkoziSx9iZC4FddKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.120.0", + "@rolldown/pluginutils": "1.0.0-rc.10" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.10", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.10", + "@rolldown/binding-darwin-x64": "1.0.0-rc.10", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.10", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.10", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.10", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.10", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.10", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.10", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.10", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.10", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.10", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.10", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.10", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/simple-code-frame": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/simple-code-frame/-/simple-code-frame-1.3.0.tgz", + "integrity": "sha512-MB4pQmETUBlNs62BBeRjIFGeuy/x6gGKh7+eRUemn1rCFhqo7K+4slPqsyizCbcbYLnaYqaoZ2FWsZ/jN06D8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "kolorist": "^1.6.0" + } + }, + "node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">= 12" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "1.0.0-pre2", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-1.0.0-pre2.tgz", + "integrity": "sha512-2ztBJRek8IVofG9DBJqdy2N5kulaacX30Nz7xmkYF6ale9WBVmIy6mFBchvGX7Vx/MyjBhx+Rcxqrj+dbOnQ6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vite": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.1.tgz", + "integrity": "sha512-wt+Z2qIhfFt85uiyRt5LPU4oVEJBXj8hZNWKeqFG4gRG/0RaRGJ7njQCwzFVjO+v4+Ipmf5CY7VdmZRAYYBPHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.10", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-prerender-plugin": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/vite-prerender-plugin/-/vite-prerender-plugin-0.5.13.tgz", + "integrity": "sha512-IKSpYkzDBsKAxa05naRbj7GvNVMSdww/Z/E89oO3xndz+gWnOBOKOAbEXv7qDhktY/j3vHgJmoV1pPzqU2tx9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "kolorist": "^1.8.0", + "magic-string": "0.x >= 0.26.0", + "node-html-parser": "^6.1.12", + "simple-code-frame": "^1.3.0", + "source-map": "^0.7.4", + "stack-trace": "^1.0.0-pre2" + }, + "peerDependencies": { + "vite": "5.x || 6.x || 7.x || 8.x" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/Mindforge.Web/package.json b/Mindforge.Web/package.json new file mode 100644 index 0000000..149523e --- /dev/null +++ b/Mindforge.Web/package.json @@ -0,0 +1,24 @@ +{ + "name": "mindforge-web", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@types/marked": "^5.0.2", + "diff": "^8.0.3", + "marked": "^17.0.4", + "preact": "^10.29.0" + }, + "devDependencies": { + "@preact/preset-vite": "^2.10.4", + "@types/diff": "^7.0.2", + "@types/node": "^24.12.0", + "typescript": "~5.9.3", + "vite": "^8.0.1" + } +} diff --git a/Mindforge.Web/public/assets/mindforge-banner.png b/Mindforge.Web/public/assets/mindforge-banner.png new file mode 100644 index 0000000000000000000000000000000000000000..4ade2f7c8f09823e2d415df6d31758f5bc603698 GIT binary patch literal 1219971 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�FY>=8J!OQu(wL3g-dh>L=p)nBCvg>GMoVG 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